-
Notifications
You must be signed in to change notification settings - Fork 2.2k
4.x Changelog
-
#6170 fix(
DialogBody
): remove invalid aria role"dialogbody"
-
#6165 fix
Toaster
type regression, especially in<Toaster ref={...} />
usage pattern
-
#6092 fix(
Popover2
): don't react twice to simulated keyboard clicks
-
#6163 fix(
Select2
): fix regression caused by #6149 where pressing Enter key to select an item no longer closed the popover
-
#6093 feat(
Overlay
,Portal
): allow portal to stop event propagation -
#6143
⚠️ deprecation: deprecateToaster
in favor ofOverlayToaster
(forwards-compatible with v5.0) -
#6144
⚠️ deprecation: deprecateKeyCombo
in favor ofKeyComboTag
(forwards-compatible with v5.0)
-
#6144 feat(
no-deprecated-components
): flag usage ofKeyCombo
as a component (suggest newer nameKeyComboTag
instead) -
#6143 feat(
no-deprecated-type-references
): flagIToasterProps
, apply auto-fix to useOverlayToasterProps
instead -
#6145 feat(
no-deprecated-type-references
): flagIDatePickerShortcut
, apply auto-fix to use non-prefixed symbol name
-
#6149 fix(
Select2
): dismiss popover whenMenuItem
elements are clicked (regression caused in #6070, which attempted to fix this interaction forMenuItem2
)
-
#6086 fix(
TimezoneSelect
): always display current timezone offsets, accounting for daylight saving
-
#6084 fix(
ContextMenu2
,showContextMenu
): supportplacement
,popoverClassName
, androotBoundary
overrides correctly
-
#6044 fix(
MenuItem
): handle "Enter" and spacebar keypresses to triggeronClick
handler -
#6062 fix(
MenuDivider
): handle "Escape" key to close popover -
#6046 feat(
MultistepDialog
): improve accessibility of steps list, treat steps as tabs -
#6071 feat(
NumericInput
,FileInput
): add support for "small" CSS modifier & prop -
#6060 a11y(
MenuItem
): fix role structure when hasSubmenu (identical to #5934 change forMenuItem2
)
-
#6081 fix(
DateInput2
): handledefaultTimezone
prop changes correctly -
#6077 fix(
DateInput2MigrationUtils
): handle invalid dates invalueAdapter
anddefaultValueAdapter
functions
-
#6075 fix(
no-deprecated-type-references
): flag usage ofIInputGroupProps2
- #6039 chore: bump @popperjs/core dependency from v2.11.6 to v2.11.7
-
#6044 fix(
MenuItem2
): handle "Enter" and spacebar keypresses to triggeronClick
handler
-
#6070 fix(Select2): check
shouldDismissPopover
prop on menu items, don't close popover if it is set to true
-
#6079 feat(
ColumnHeaderCell2
): new propmenuPopoverProps
allows customizing menu popover behavior
- #6037 feat: downgrade Node.js version requirement to v18
-
#6036 fix(
sass-compile
): relative path tosass-compile.mjs
script
-
#6038 fix: ProvidePlugin module path for
process/browser
-
#6017 fix(
variables
): revert unintended change to$pt-text-selection-color
variable -
#6014 fix(
Tag
): style.bp4-active
modifier class correctly whenintent
is defined
-
#6007 fix(
TimeInput
): use disabled text color when disabled in dark theme
-
#6016 fix(
DateInput2
): allow changing timezone before selecting date
- #6020 fix: handle line endings correctly in Windows dev environment
-
#6020 fix: downgrade
fantasticon
dependency to fix compatibility with Windows dev environment
-
#6017 fix(
generate-css-variables
): handlergba(r, g, b, a)
color value syntax properly
-
#6004 fix(
TagInput
): disable new auto-resizing behavior (added in v4.17.0) by default- This behavior caused some regressions, so we are choosing to make it opt-in via a new
autoResize
prop
- This behavior caused some regressions, so we are choosing to make it opt-in via a new
-
#6004 fix(
TagInput
): hide<ResizableInput>
span element from screen readers usingaria-hidden
attribute
-
#5997 fix(
TagInput
): make sure<ResizableInput>
span is invisible, which prevents the input text from being displayed twice in some styling situations -
#6001 fix(
TagInput
): use correct left padding when there is no left icon or tags (match the appearance of<InputGroup>
) -
#5982 fix(
Button
,AnchorButton
a11y): setaria-hidden="true"
on<Icon>
element when there is no button text, since the overall button should get anaria-label
rather than the icon
- #5994 feat: bump eslint-plugin-jsdoc to v40.0
-
#5968 feat(
Table2
): new 'scroll' instance method allows you to programmatically scroll the table by a specified relative offset in pixels
-
#5989 fix CSS syntax in Sass & Less box-shadow variables
- fixes a regression introduced in @blueprintjs/core v4.17.0
-
#5989 fix(
generate-css-variables
): output list type Sass variables correctly
-
#5979 feat(
Icon
): new propsvgProps
allows passing attributes to<svg>
element -
#5985 fix(
TagInput
): remove extra element, allow input placeholder to fill width whenfill={true}
(fixing a regression caused by #5966) -
#5984 fix(
TagInput
): remove extraneous id attribute in new<ResizableInput>
sub-component -
#5983 fix(
DialogFooter
): remove invalid a11y aria-role "dialogfooter"
-
#5980 fix(
showContextMenu
): close on backdrop click, even whenonClose
prop is defined
-
#5978 fix(
Select2
,MultiSelect2
): setaria-disabled
attribute on combobox elements
-
#5966 feat(
TagInput
): use a resizable input which scales as you type
Before | After |
---|---|
-
#5950 feat(
Tab
): add support for icons and tags inside tab titles with newicon
,tagContent
, andtagProps
props
-
#5961 feat(
Tabs
): newfill
prop to make the tab list fill the height of its container- ℹ️ this has no effect when
vertical={true}
, and is not recommended when<Tab>
panelss are defined
- ℹ️ this has no effect when
-
#5955 feat(
Icon
): allow overridingaria-hidden
attribute -
#5967 feat(
MenuDivider
): addtitleId
prop -
#5954 fix(
MenuDivider
): apply ARIArole="separator"
-
#5964 fix(
Slider
,MultiSlider
): error if min/max bounds are not finite numbers -
#5975 fix(
TextArea
): resize vertically in controlled mode
-
#5962 feat: new icon "axle"
- #5837 break: upgrade to Node.js v19, set minimum engine to v19.3
-
#5904 feat: use non-legacy Sass compiler, remove node-sass completely
- export new utilities for building a custom Sass compiler capable of importing Blueprint source files:
sassNodeModulesLoadPaths
andsassSvgInlinerFactory
- export new utilities for building a custom Sass compiler capable of importing Blueprint source files:
-
#5956 feat(
ColumnHeaderCell2
): add new propselectCellsOnMenuClick
, which allows users to disable the default behavior of selecting a column's cells when clicking on its header menu
-
#5904 feat: add
node_modules
folders tosass-loader
sassOptions.loadPaths
-
#5948 fix(
Collapse
): setaria-hidden
correctly whenkeepChildrenMounted
prop is enabled -
#5917 fix(
Tag
): always settabIndex
on remove button, even when the overall Tag is non-interactive
-
#5952 fix(
showContextMenu
): unmount previous renders
-
#5944 fix(
ActionProps
): add generic type param to allow more specific types for DOM event handlers -
#5945 fix(
Breadcrumb
): addonFocus
event handler support; improve specificity ofonClick
typedef -
#5945 fix(
Button
,AnchorButton
): do not attachonFocus
handler ifdisabled
-
#5944 fix(
ItemRendererProps
): makeref
property optional, fixing a regression in v4.9.0 caused by #5815
-
#5927 feat(
Utils
):elementIsTextInput
utility function -
#5926 fix(
Collapse
): setaria-hidden
attribute correctly
-
#5941 fix(
DateInput2
): gracefully handle invalid values for thedefaultTimezone
prop and/or the inferred timezone returned from the browser'sIntl.DateTimeFormat
API
-
#5933 feat: new low-level context menu APIs:
-
<ContextMenu2Popover>
encapsulates some of the opinionated popover implementation of<ContextMenu2>
into a declarative component API. It's lower-level than<ContextMenu2>
since users have to hook uponContextMenu
handlers and cancel the default context menu themselves withe.preventDefault()
, but this does offer a good declarative alternative to the deprecatedContextMenu.show()
imperative API. -
showContextMenu()
+hideContextMenu()
imperative APIs, provided as a convenience to make it easy to migrate to Blueprint v5. Note that these rely on⚠️ global state⚠️ stored in Blueprint library code.
-
-
#5933 feat(
ContextMenu2
):onClose
prop behaves more like the closing callback API inContextMenu.show()
, and is simpler to access thanpopoverProps.onClosed
-
#5909 fix(
Popover2
): get correct click target in shadow DOM -
#5934 fix(
MenuItem2
): improve accessibility by using the correct role structure when a menu item has a submenu
-
#5815 feat(
QueryList
): addref
toItemRendererProps
, which allows custom item lists (specified viaitemListRenderer
on components likeSelect2
) to properly scroll to their active item using DOM calculations based on refs rather than DOM query indices
-
#5906 fix(
Callout
): link text color in primary intent callouts
- #5911 chore: upgrade ESLint to v8.33.0 and @typescript-eslint/* packages to v5.50.0
- #5911 chore: upgrade ESLint to v8.33.0 and @typescript-eslint/utils to v5.50.0
-
#5892
⚠️ deprecation: textmate grammar syntax theme is now deprecated and will be removed in v5.0 (see #5895 for more information)
-
#5907 fix(
Popover2
): fix regression inrenderTarget
type definition; add default value forPopover2
andTooltip2
component type param, which improves inferred types forrenderTarget
params
-
#5892 feat: new package provides minimal light and dark themes for monaco-editor
- for now, it only has code syntax highlighting colors; in the future, this may be expanded to a full-fledged theme
- #5911 chore: upgrade ESLint to v8.33.0
-
#5892 feat: add support for loading
.css
files as modules in ES/JS in the base webpack configuration (this is required by libraries like monaco-editor)
-
#5840 feat(
MenuItem
):roleStructure="none"
renders<li role="none">
(see ARIA: none role docs) -
#5839 feat(
InputGroup
):readOnly
propRegular text input Read-only text input
-
#5840 feat(
MenuItem2
):roleStructure="none"
renders<li role="none">
(see ARIA: none role docs) -
#5802 feat(
Popover2
): new proptargetProps
allows forwarding some attributes to the generated target container element without using therenderTarget
API -
#5802 feat(
Popover2
): adjusted types forrenderTarget
API and new types added to the public API (Popover2ClickTargetHandlers
andPopover2HoverTargetHandlers
)- These allow users to clean up type definitions for target render functions, for example:
class MyComponent extends React.PureComponent {
public render() {
return (
- <Popover2<React.HTMLProps<HTMLDivElement>>
+ <Popover2
renderTarget={this.renderTarget}
content="content"
/>
);
}
private renderTarget = ({
isOpen,
ref,
...targetProps
- }: Popover2TargetProps & React.HTMLProps<HTMLDivElement>) => {
+ }: Popover2TargetProps & Popover2ClickTargetHandlers) => {
return (
<div
ref={ref}
{...targetProps}
/>
);
};
}
-
#5858 fix(
Dialog
): dialog footer layout regression- Note: we're moving towards
padding
instead ofmargin
on dialog footer elements, but making that change only in the new<DialogFooter>
React component (viaClasses.DIALOG_FOOTER_FIXED
) rather than breaking the existingClasses.DIALOG_FOOTER
CSS API.
- Note: we're moving towards
-
#5852 fix(
Dialog
): fix regression inClasses.DIALOG_BODY
element layout, restoremargin
style- Note: we're moving towards
padding
instead ofmargin
on dialog body elements, but making that change only in the new<DialogBody>
React component rather than breaking the existingClasses.DIALOG_BODY
CSS API.
- Note: we're moving towards
-
#5852 fix(
MultistepDialog
): fix regression in footer layout when there is no close button shown
-
#5753 feat(
Dialog
): small visual style update with reduced header size and (optional) scrollable body container; new<DialogBody>
and<DialogFooter>
components for structured layout of dialog contents⚠️ minor CSS breaking change: bottom padding on the containerClasses.DIALOG
element has been removed. This was an awkward style rule that made the layout of the dialog more complex than necessary. Its removal should not affect any usage where<DialogBody>
or<div className={Classes.DIALOG_BODY}>
is present a child of a dialog, which is the standard recommended approach for rendering Blueprint dialogs. If you have dialogs that do not use the "dialog body" class, you will need to audit your styles to ensure the removal of this bottom padding does not cause regressions.
Before | After |
---|---|
-
#5834 feat(
Callout
): small visual style update, reduced header size, intent colors on body text
Before | After |
---|---|
-
#5807 feat(
MenuItem
):roleStructure="listitem"
allows rendering<li>
and<a>
elements with no roles -
#5820 feat(
ButtonGroup
,ControlGroup
,MenuItem
):elementRef
prop allows access to HTML elementref
⚠️ this prop name will change toref
in Blueprint v5.0
-
#5823 feat(
HTMLTable
): use 'compact' terminology instead of 'condensed'⚠️ condensed
prop is now deprecated in favor ofcompact
-
#5800 fix(
Label
): apply proper margin on elements inside nestedControlGroup
s -
#5824 docs: show
fill
andalignText
interactive options for buttons; demonstrate recommended styling for dropdown menu buttons
-
#5792 fix(
DateRangeInput2
): stale input value in controlled mode
- #5808 feat: build icon font with fantasticon v2.0, which may include some minor changes to output font file
-
#5822 feat(
Tooltip
): newcompact
prop allows for a compact appearance with less padding around contentdefault compact -
#5807 feat(
MenuItem2
):roleStructure="listitem"
allows rendering<li>
and<a>
elements with no roles -
#5820 feat(
MenuItem2
):elementRef
prop allows access to HTML elementref
⚠️ this prop name will change toref
in Blueprint v5.0
-
#5835 fix(
MenuItem2
): elideicon
attribute from rendered DOM
-
#5806 fix(
Suggest2
): show non-empty query when popover is closed (this fixes as regression in Suggest2 which was not present in Suggest)
-
#5792 feat(
karmaConfig
): allow.scss
source files in test code (sometimes useful for interactive debugging in a real browser)
-
#5762 feat(
MultiStepDialog
): allow showing close button in both header and footer of the dialog
- #5764 chore(deps): bump eslint from 8.24.0 to 8.28.0
- #5764 chore(deps): bump eslint from 8.24.0 to 8.28.0
-
#5780 feat: new icon "cross-circle"
- #5755 chore(deps): bump stylelint from 14.12.1 to 14.15.0
- #5774 Fix QueryList when createNewItemPosition is first
-
#5776 fix(
Select2
,Suggest2
,MultiSelect2
): fix: allowpopoverProps.disabled
-
#5740 fix(
DateInput2MigrationUtils
): more specific non-nullable type foronChangeAdapter
to support common usage patterns withReact.useCallback
-
#5736 fix: relax date-fns dependency version constraint
- ℹ️ this allows users to avoid the bundle size regression in date-fns v2.29.3
-
#5735 fix(
DateInput2
,DateRangeInput2
): type definition of popoverRef prop is now usable in most cases without type casting
-
#5735 feat: export new type
DefaultPopover2TargetHTMLProps
-
#5733 🔧 fix(
MultiSelect2
): restoretagInputProps.onChange
support (regression introduced in v4.8.8 via #5730) -
#5735 fix(
Select2
,Suggest2
,MultiSelect2
):popoverRef
prop is now correctly typed as to access an instance ofPopover2<React.HTMLProps<HTMLElement>>
⚠️ this may be a slight breaking change if you expect the ref to be of typePopover2<React.HTMLProps<HTMLDivElement>>
— you are recommended to usePopover2<DefaultPopover2TargetHTMLProps>>
instead (available in @blueprintjs/popover2 v1.10.0)- Note: this fixes a regression introduced in v4.8.8 with #5713
-
#5713 🌟 feat(
InputGroup
): new proptagName
allows customizing the tag name of the HTML element that contains the input group
-
#5711 feat(
DateInput2MigrationUtils
):defaultValueAdapter
-
#5713 🌟 feat(
DateInput2
,DateRangeInput2
): new proppopoverRef
allows access to the Popover2 instance, sometimes useful for repositioning the popover -
#5715 🌟 feat(
DateRangeInput2
): new propfill
makes control group take up full width of its container -
#5713 🔧 fix(
DateInput2
,DateRangeInput2
): restore support forpopoverProps={{ targetTagName }}
, which was previously available in the v1 components which used<Popover>
-
#5718 🔧 fix(
DateInput2
): display updated timezone immediately after selecting a new item from the timezone list
-
#5712 feat: export
PopperCustomModifier
type
-
#5730 🔧 fix(
Select2
,Suggest2
,MultiSelect2
): restore support forpopoverProps={{ targetTagName }}
, which was previously available in the v1 components which used<Popover>
-
#5730 🔧 fix(
MultiSelect2
): invokepopoverTargetProps
onKeyDown
andoKeyUp
event handlers if provided -
#5730 🔧 fix(
Suggest2
): fix support forinputProps={{ className }}
-
#5700 fix: reduce react peer dependency range to
^16 || ^17
- react-day-picker v7 is not compatible with React 18, so we can't declare compatibility until we upgrade to v8
- fix: reduce react peer dependency range to
^16 || ^17
- Same as #5700, this package transitively depends on react-day-picker v7 types through @blueprintjs/datetime
-
#5708 fix(
no-deprecated-type-references
): handle name conflicts by adding import aliases for new types- For example, while migrating
IProps
→Props
, ifProps
already exists as a locally declared or imported symbol in the file, the rule fixer will use an import alias to avoid conflicts:{ Props as BlueprintProps } from "@blueprintjs/core"
- For example, while migrating
-
#5696 feat: new icon "aimpoints-target"
-
#5687 fix: downgrade classnames dependency requirement to
^2.3.1
, allowing users to work around a breaking change in classnames types added in v2.3.2
-
#5681 fix(
Omnibar
): smoothen fadeout transition
-
#5685 feat: export
PopperModifierOverrides
type, equivalent toPopover2Props["modifiers"]
-
#5668 fix(
Tabs
,Switch
): improve Windows High Contrast Mode support, dark theme styles
-
#5678 feat(
TimezoneSelect
): supportvalueDisplayFormat
to achieve feature parity withTimezonePicker
⚠️ This prop now has slightly different semantics, see the migration guide for full details
-
#5678 feat: add
TimezoneMetadata
andgetTimezoneMetadata
to the public API to achieve partial API parity with @blueprintjs/timezone⚠️ the available metadata has changed slightly to reflect the shift from moment-timezone to date-fns-tz, see the migration guide for full details
-
#5670 feat: new icon "at"
-
#5669 feat: add
DateInput2MigrationUtils
adapter functions to help with automated code migrations from DateInput → DateInput2 -
#5669 fix(
DateInput2
): fixonChange
prop callback type to matchDateInput
-
#5665 fix: declare
@types/react
peer dependency range correctly
-
#5666 fix: migrate from
lodash-es
tolodash
to restore CommonJS support
-
#5666 feat: allow submodule imports from
lodash
in TSLintno-submodule-imports
configuration
-
#5667 fix(
Suggest2
): popover max height & overflow styles
-
#5640
⚠️ feat(no-color-literal
,no-prefix-literal
): migrate from@import
to@use
statements to import Sass variables -
#5655 feat(
no-color-literal
,no-prefix-literal
): improve copyright header syntax detection to insert imports more accurately when fixing rule violations
-
#5524 feat: support Windows High Contrast mode
- This change fixes border styles and colors for most components to improve their appearance when High Contrast mode is enabled
-
#5621 feat: upgrade
@types/react
dependency⚠️ this may require you to upgrade your version of@types/react
- #5641 fix: improve contrast for disabled text inputs in iOS
-
#5638 ❌ deprecation:
TreeNode.ofType<T>()
is no longer necessary- we recommend specifying the type parameter in JSX syntax directly, e.g.
<TreeNode<T>>
- we recommend specifying the type parameter in JSX syntax directly, e.g.
-
#5524 feat(
TimePicker
): support Windows High Contrast mode
- #5637 fix: remove errant whitespace in timezones list
-
#5638 ❌ deprecation:
Select2.ofType<T>()
,Suggest2.ofType<T>()
, andMultiSelect2.ofType<T>()
are no longer necessary- we recommend specifying the type parameter in JSX syntax directly, e.g.
<Select2<T>>
- we recommend specifying the type parameter in JSX syntax directly, e.g.
-
#5644 fix: while linting
.js
or.mjs
files, assume ES 2022 syntax in parser and allow ES default exports by disablingimport/no-default-export
rule - #5631 chore: upgrade typescript-eslint, eslint-plugin-jsdoc, eslint-plugin-react
- #5631 chore: upgrade typescript-eslint
-
#5644 🔥 break: migrate config scripts to ES modules
- 🆙 this package's API has not changed in shape, but it can no longer be imported using
require()
- you must useawait import()
or an ESM import instead
- 🆙 this package's API has not changed in shape, but it can no longer be imported using
-
#5630 🔥 break: refactor into ES modules
⚠️ The script file names have changed to use the.mjs
extension and are now only compatible with Node.js v16+ (previously, this was kind of an implicit constraint, but it is now explicit with"engines"
in package.json)- 🆙 Note that this package's API has not changed (the binary scripts are the same), but individual scripts can no longer be imported using
require()
- you must useawait import()
or an ESM import instead
-
#5643 feat: upgrade
stylelint
peer dependency to^14.12.1
-
#5643 feat: upgrade
stylelint
peer dependency to^14.12.1
-
#5644 🔥 break: migrate config scripts to ES modules
- 🆙 this package's API has not changed in shape, but it can no longer be imported using
require()
- you must useawait import()
or an ESM import instead
- 🆙 this package's API has not changed in shape, but it can no longer be imported using
-
#5644 🔥 break: changed default server port to
9001
-
#5643 👍 feat: upgrade
webpack-dev-server
to v4 (updating configuration as necessary), along with various other build dependencies -
#5644 fix(dev-server): add
host: "0.0.0.0"
option by default to obviate need for--host 0.0.0.0
CLI argument -
#5644, #5633, #5642 fix(dev-server): improve HMR by upgrading
react-refresh
+react-refresh-webpack-plugin
and addingreact-refresh-typescript
middleware
-
#5544 fix(
TimePicker
): fix layout of component when used with second/ms precision inside date input or date range input popover (regression introduced in @blueprintjs/datetime v4.3.11)
-
#5543 feat: new icon "bug"
-
#5424 feat(
MultiSelect2
): allow creating multiple items
-
#5535 feat(
Toast
): new propisCloseButtonShown
(defaulttrue
) allows hiding the close button, similar toDialog
components -
#5534 feat(
MultistepDialog
): support tooltips on navigation buttons, often useful for explaining why a button is disabled
-
#5539 fix(
DateRangePicker
): render custom footer element in popover iffooterElement
is provided
-
#5532 feat(
TimezoneSelect
): allow filtering timezone list by short names (abbreviations like "EDT", "GMT") -
#5539 fix(
DateRangeInput2
): render custom footer element in popover iffooterElement
is provided
-
#5442 docs: add many new tags and word associations to icons metadata in
icons.json
-
#5528 fix(
no-deprecated-type-references
): fix false positive: do not lintIPanel
interface -
#5528 fix(
no-deprecated-type-references
): fix false negative: lintIQueryListRendererProps
interface -
#5530 fix(
no-deprecated-type-references
): no overlapping fixes in import statements, which allows the rule to properly fix files where the same deprecated type is referenced multiple times
-
#5522 feat: upgrade
ts-node
(used insass-compile
script) to v10.x
-
#5528 fix: export
ColumnHeaderCellProps
type (replacement for deprecated interfaceIColumnHeaderCellProps
)
-
#5517 fix(
no-deprecated-type-references
): lint syntaxMultiSelect.ofType<T>()
correctly in component deprecation rules
@blueprintjs/core 4.9.2
, @blueprintjs/datetime 4.3.8
, @blueprintjs/datetime2 0.5.4
, @blueprintjs/popover2 1.6.2
, @blueprintjs/select 4.6.2
, @blueprintjs/table 4.6.3
, @blueprintjs/timezone 4.4.8
-
#5515 fix: declare
@types/react
as an optional peer dependency
-
#5509 feat:
@blueprintjs/no-deprecated-type-references
rule
-
#5513 Revert "fix(QueryList): index is always defined in itemRenderer"
- This caused an unintentional breaking change in typings. We're going to punt it to v5.0.
-
#5506 feat: forward-compatible interfaces without the "I" prefix, deprecation of old types
- ❌
IToaster
->ToasterInstance
- ❌
IToastProps
->ToastProps
- ❌
-
#5507 feat: deprecate ref types, use
React.Ref
instead- ❌ DEPRECATION of
IRef
,IRefObject
, andIRefCallback
types- use
React.Ref
,React.RefObject
, andReact.RefCallback
types instead
- use
- ❌ DEPRECATION of
-
#5495 fix(
MenuItem
): un-deprecate component in the overwhelming majority use case, since it is not necessary to migrate toMenuItem2
unless you are customizingpopoverProps
- this matches the new semantics of the
@blueprintjs/no-deprecated-core-components
ESLint rule, which you should enable to enforce constraints for a smooth migration to Blueprint v5.0
- this matches the new semantics of the
- #5497 fix(Sass API): allow extended color palette to be overriden
-
#5486 fix(
OverflowList
): edge case inshouldComponentUpdate
-
#5506 feat: forward-compatible interfaces without the "I" prefix, deprecation of old types
- ❌
IExampleProps
->ExampleProps
- ❌
-
#5495 feat: only lint deprecated
<MenuItem>
usage whenpopoverProps
is used
-
#5423 feat(
ContextMenu2
): supportpopoverProps={ rootBoundary }
customization
-
#5506 feat: forward-compatible interfaces without the "I" prefix, deprecation of old types
- ❌
IItemRendererProps
->ItemRendererProps
- ❌
IItemListRendererProps
->ItemListRendererProps
- ❌
IListItemsProps
->ListItemsProps
- ❌
ICreateNewItem
->CreateNewItem
- ❌
-
#5501 fix(
QueryList
): index is always defined initemRenderer
-
#5493 feat(
Portal
): add support for new context API via<PortalProvider>
component- ❌ deprecation: setting
blueprintPortalClassName
via legacy context API is now deprecated
- ❌ deprecation: setting
-
#5475 fix(
Tag
): removearia-labelledby
attribute, which is not allowed when an element has norole
defined
- #5487 chore: upgrade typescript-eslint
-
#5477 feat(
no-deprecated-components
):⚠️ [BREAKING] addDateInput
,DateTimePicker
, andMenuItem
to list of deprecated components checked by the lint rule -
#5484 feat(
no-deprecated-components
):⚠️ [BREAKING] addTable
,ColumnHeaderCell
,EditableCell
,JSONFormat
, andTruncatedFormat
to list of deprecated components checked by the lint rule -
#5478 feat: new rules which split out the functionality of
no-deprecated-components
into separate rules which makes it easier to make incremental migration progress in large code bases (see README for more info)@blueprintjs/no-deprecated-core-components
@blueprintjs/no-deprecated-datetime-components
@blueprintjs/no-deprecated-select-components
@blueprintjs/no-deprecated-table-components
@blueprintjs/no-deprecated-timezone-components
- #5487 chore: upgrade typescript-eslint
- #5488: fix: align 16px "layers" icon to pixel grid
- #5487 chore: upgrade Prettier to v2.7
-
#5489 fix(
ContextMenu2
): properly open menu and provide the mouse event to consumers using thecontent
function prop API
-
#5481 feat: new components
ColumnHeaderCell2
,TruncatedFormat2
, andJSONFormat2
which use Popover2 instead of Popover- ❌ deprecation:
ColumnHeaderCell
,TruncatedFormat
, andJSONFormat
are now deprecated
- ❌ deprecation:
-
#5489 feat: new component
RowHeaderCell2
which uses Popover2 instead of Popover- ❌ deprecation:
RowHeaderCell
is now deprecated
- ❌ deprecation:
-
#5489 fix(
Table2
): migrate to ContextMenu2⚠️ additional CSS required, you must import@blueprintjs/popover2/lib/css/blueprint-popover2.css
in addition totable.css
-
#5491 fix(
Table2
): migrate away from legacy React context API (when used withColumnHeaderCell2
)
renderTarget
Popover2 API. See the linked PRs for detailed markup diffs caused by these changes.
-
#5474 feat(
DateRangeInput2
): remove popover target wrapper element to simplify DOM -
#5473 feat(
DateInput2
): remove popover target wrapper element to simplify DOM -
#5473 fix(
DateInput2
): fixfill
prop behavior
-
#5471 ❌ deprecation(
MenuItem
): use{ MenuItem2 } from "@blueprintjs/popover2"
instead -
#5432 fix(
MenuItem
): un-deprecateactive
prop and update its documentation to define its purpose (to indicate keyboard focus)
-
#5463 fix(
DateInput2
,DateRangeInput2
): minor compatibility issues when rendered in shadow DOM
Two new components, the last remaining APIs which allow Blueprint users to migrate completely from Popover to Popover2:
-
#5471 ⭐ feat: new
MenuItem2
component -
#5460 ⭐ feat: new
Breadcrumbs2
component -
#5432 feat(
MenuItem2
): add support forundefined | true | false
values for theselected
prop, allowing it to display more consistent visual indicators (tick icons) inside<Select2>
and<MultiSelect2>
components. See the updated @blueprintjs/select component examples for demos
-
#5462 fix(
Suggest2
): get root node correctly when component is used inside Shadow DOM
-
#5465 fix(
no-prefix-literal
): replace selectors correctly in auto-fixer, don't cut off the last character of a selector string (fixes a regression introduced in v0.4.4)
-
#5471 feat(
CopyCellsMenuItem
): migrate fromMenuItemProps
->MenuItem2Props
⚠️ this is a small breaking change, but in practice it should be a transparent upgrade with no compile breaks (it is extremely rare for consumers to be using thepopoverProps
API whose type changed fromPopoverProps
->Popover2Props
here)
-
#5455 fix(
Select2
,Suggest2
,MultiSelect2
): useReact.HTMLAttributes
inmenuProps
type instead ofReact.HTMLProps
, for consistency with other component APIs
-
#5456 fix(
Table
,Table2
): do not scroll to ghost rows when grid size == viewport size (similar to previous issue #5027)
-
#5445 fix(
Button
,AnchorButton
): restore buttonloading
prop precedence overdisabled
prop⚠️ Important: this fixes an unintentional API break introduced in #5360, released in @blueprintjs/core v4.6.0
-
#5420 fix(
NumericInput
): don't applyrole="textbox"
attribute whenallowNumericCharactersOnly={false}
-
#5430 ❌ deprecation:
IPopoverProps
,TooltipProps
-
#5437 fix(
Tag
): improve a11y label, exclude remove button from being read by screen readers -
#5446 fix(
Collapse
,CollapsibleList
,MultistepDialog
): makeprops.children
optional again -
#5438 fix(
Slider
,MultiSlider
): improve a11y markup, applyrole="slider"
, allow settingaria-label
oraria-labelledby
for accessible labels
-
#5390 ❌ deprecation(
DateRangeInput
): useDateRangeInput2
from @blueprintjs/datetime2 instead -
#5429 fix(
DatePicker
,DateRangePicker
): improve time picker & footer layout, use more compact styling -
#5434 fix(
TimePicker
): improve a11y, setaria-label
attribute on input
-
#5390 🌟 feat: new
DateRangeInput2
component, replacement forDateRangeInput
, uses Popover2 instead of Popover -
#5440 feat(
DateInput2
): use Popover2 instead of Popover, ditch dependency on deprecated DateInput component- previous releases of this component incorrectly stated that it used Popover2, when it actually used Popover via DateInput
-
#5410 feat: new icon "array-floating-point"
-
#5435 feat(
Select2
,Suggest2
,MultiSelect2
): menuProps allows forwardingaria-label
andaria-labelledby
props to Menu
-
#5421 feat(
EditableCell2
): new placeholder prop to display text when the cell is empty -
#5449 ❌ deprecation(
EditableCell
): useEditableCell2
withTable2
instead -
#5446 fix(
ContextMenuTargetWrapper
,Reorderable
,Selectable
): makeprops.children
optional again
-
#5377 feat(
MenuItem
): new prop 'roleStructure' sets proper a11y roles for different contexts in menu, select, multiselect, etc. -
#5383 feat(
NumericInput
): addleftElement
prop, which forwards toInputGroup
-
#5396 fix(
NumericInput
): improve a11y markup, add spinbutton ARIA role -
#5355 fix(
OverflowList
): improve performance, allow more than 50 items -
#5365 fix(
Icon
): improve a11, reference accessible name witharia-labelledby
attribute -
#5406 fix(
Menu
): remove extraneous submenu icon title, decluttering screen reader output -
#5349 fix(
Overlay
): escape key closing behavior
-
#5409
⚠️ [TYPESCRIPT BREAK] fix(DateInput
): fix type ofonChange
argument to include| null
, which is passed to the callback at runtime in some cases when the date is invalid or the text input has been cleared -
#5397 fix(
TimePicker
): improve a11y markup
-
#5409
⚠️ [TYPESCRIPT BREAK] fix(DateInput2
): clearing the input field now callsonChange
withnull
- this restores the ability to clear the value as a user could do with DateInput
-
#5385 fix(
no-deprecated-components
): addTimezonePicker
to list of deprecated components
-
#5415 fix(
sass-compile
): source map file paths are now relative, not absolute
-
#5349 fix(
Popover2
): escape key closes popovers as expected whencanEscapeKeyClose={true}
(default)
-
#5414 fix(
Select2
): add a11y label to filter clear button inside popover
-
#5366 fix(
HTMLSelect
): DOM attribute warning on<option>
elements
-
#5370
⚠️ [BREAKING] fix(Classes
): remove unusedTIMEZONE_SELECT_TARGET
class -
#5370
⚠️ [BREAKING] fix(TimezoneSelect
): narrow type ofpopoverProps
to those which are actually supported by the underlyingSelect2
-
#5370
⚠️ [BREAKING] fix(DateInput2): renamehideTimezone
toshowTimezoneSelect
to better match Blueprint naming conventions - #5371 fix: loosen version range constraint on "date-fns" and "date-fns-tz" dependencies, allowing upgrades to latest versions with important bugfixes
- #5371 fix: allow submodule imports from "date-fns" package
-
#5368 fix(
no-deprecated-components
): export the new ESLint rule
-
#5380 fix(
Select
): fix regression inmatchTargetWidth
prop behavior -
#5375 fix(
MultiSelect2
): add accessibility labels to clear button -
#5376 fix(
QueryList
): passmenuProps
toitemListRenderer
, which allows custom renderers to get the generatedid
for proper a11y markup
-
#5370 ❌ deprecation(
TimezonePicker
)
- #5371 fix: allow submodule imports from "date-fns" package
-
#5336 feat(
MenuItem
): new propsubmenuProps
forwardsMenuProps
to submenu -
#5358 fix(
HTMLSelect
): setselected
attribute on<option>
elements for a11y -
#5360 fix(
Button
,AnchorButton
): preserve non-nulldisabled
prop value -
#5362 fix(
ResizeSensor
): compatibility with React 18 types
- #5358 fix(a11y): add aria-labels for various controls
-
#5322 feat: new package with timezone-aware components
TimezoneSelect
andDateInput2
TimezoneSelect is a replacement for TimezonePicker. It uses Popover2 instead of Popover and includes the list of available timezones as a built-in module instead of relying on the moment-timezone dependency.
DateInput2 is a replacement for DateInput. It uses Popover2 instead of Popover and optionally embeds a TimezoneSelect, allowing users to change the timezone of the selected date. This is part of our ongoing work to make our components better at handling timezones — any & all feedback is welcome here via GitHub issues.
-
#5343 feat: new rule
no-deprecated-components
reports on usage of deprecated Blueprint components- Note that this does not rely on type information or reading the
@deprecated
JSDoc annotation, and is thus distinct/very different from thedeprecated
rule fromeslint-plugin-deprecation
- Note that this does not rely on type information or reading the
-
#5300 feat(
Popover2
): newpopupKind
prop allows specifying the kind of popover content being displayed, for accessibility purposes- The possible values are those supported by
aria-haspopup
: menu, listbox, tree, grid, dialog.
- The possible values are those supported by
-
#5347
⚠️ [BREAKING] feat(MultiSelect2
) the popover ref prop API as moved slightly- before:
<MultiSelect2 popoverProps={ ref: ... }>
- after:
<MultiSelect2 popoverRef={...}>
- before:
-
#5347 feat(
Select2
,Suggest2
): new proppopoverRef
forwards ref toPopover2
component instance -
#5346, #5347 feat(
Select2
,MultiSelect2
,Suggest2
): new proppopoverContentProps
forwards arbitrary props to popover content wrapper element -
#5348 feat(
QueryList
): new propmenuProps
allows forwarding arbitrary props to the<Menu>
-
#5354 feat(
MultiSelect2
): new propdisabled
-
#5361 feat(
MultiSelect2
): new proponClear
renders a clear button which clears the current selection -
#5354 fix(
Select2
,Suggest2
,MultiSelect2
): fixfill
prop, which was a regression from the V1 variants of these components⚠️ [BREAKING] this is a slightly breaking change to the rendered DOM, as we no longer generate a wrapper element around the popover target as a result of migrating to therenderTarget
Popover2 API
-
#5348 fix(
Select2
,MultiSelect2
,Suggest2
): treat these components as "comboboxes" for accessibility, applying the appropriate accessibility roles and ARIA attributes:-
aria-controls
,aria-expanded
, androle="combobox"
on the popover target -
aria-haspopup="listbox"
on the popover target -
role="listbox"
on the menu
-
-
#5340 fix(
MultiSelect2
): avoidpopoverProps
placement prop warning -
#5354 fix(
Select2
,MultiSelect2
): fix popover styling whenmatchTargetWidth={true}
-
#5357 fix(a11y): add
aria-multiselectable
andaria-autocomplete
attributes where appropriate
-
#5127 feat: add default implementation for
getCellClipboardData
⚠️ NOTE: this may require you to add an NPM devDependency on@types/react
, as that is now a transitive peer dependency of this package with the addition of the "react-innertext" dependency
-
#5354 fix(
MultiStepDialog
): dark theme dialogs now use white borders to match the visual design updates in @blueprintjs/core v4.3.x
-
#5344 fix column layout when
columnWidths
prop has sparse (undefined
) values
-
#5314 feat(
Dialog
): add containerRef prop -
#5321 fix(
Spinner
): add more accessibility markup, support arbitrary HTML attributes -
#5325 fix(
Toast
): addrole="alert"
attribute to toast message for improved accessibility -
#5326 fix(
Menu
): add accessibility roles and ARIA attributes - #5305 fix: use solid focus outline style
-
#5329 fix: ref utility function types no longer assume you are only working with DOM elements; they work with React class components as well
- APIs affected:
mergeRefs
,getRef
,setRef
,isRefObject
,isRefCallback
- APIs affected:
-
#5309 feat: new icon "floating-point"
-
#5307 feat(
Popover2
): new propsmatchTargetWidth
,modifiersCustom
-
#5302 fix(
Popover2
): hide popover arrow from accessibility API using ARIA attribute
This release features new "v2" variants of Select, Suggest, and MultiSelect components which use Popover2 instead of Popover. These provide a smooth migration path to Popover2. Users should migrate to these components from their v1 counterparts across their application before upgrading to Blueprint v5.0 in order to avoid surprises in DOM layout changes as a result of using Popover2 under the hood.
-
#5306 🌟 feat: new
Select2
component -
#5310 🌟 feat: new
Suggest2
component -
#5329 🌟 feat: new
MultiSelect2
component -
#5330 ❌ deprecation:
Select
,Suggest
, andMultiSelect
are now deprecated
-
#5303, #5304 fix(
generate-css-variables
): preserve string quotes in generated variables to avoid downstream Sass syntax parsing errors
-
#5299 fix(
NonIdealState
): fix some minor layout and visual styling bugs introduced in v4.3.0 -
#5290 fix:
ItemRenderer
type backwards compatibility -
#5298 fix: allow
$pt-outline-color
Sass variable to be overridden
-
#5290 fix:
ItemRenderer
type backwards compatibility
This release features a number of visual design updates to core components which cascade through the entire design system. Most of these changes affect the dark theme, with the goal of improving clarity across the UI. Dark theme styles have shifted one step darker on the color palette, so the default background color is now $dark-gray2
instead of $dark-gray3
. This darker background allows us to more consistently use white borders across our components; you'll notice this change in Cards, Dialogs, Buttons (default intent), and Popovers. The border radius for rounded corners across all components has been reduced from 3px to 2px; this along with the flattening of Button backgrounds creates a more modern look & feel.
See the full PR description in #5278 for UI design considerations to take into account when upgrading to this version.
- #5278 feat: visual design updates, cleaner dark theme styles
-
#5278 feat(
Dialog
): smaller header text size (<h5>
instead of<h4>
) -
#5278 feat(
NonIdealState
): newlayout
prop allows you to render a non-ideal state with horizontal layout -
#5287 fix(
Tooltip
): fix typography and icon colors inside tooltip content -
#5282 fix(
EditableText
): fix text and hover styles fordisabled
state and intent variants withalwaysRenderInput={true}
-
562fd14 fix(Tabs): make
children
prop optional again
- #5278 feat: visual design updates, cleaner dark theme styles
- #5278 feat: visual design updates, cleaner dark theme styles
-
#5280 feat(
ContextMenu2
): addpopoverRef
topopoverProps
-
#5287 fix(
Tooltip2
): fix typography and icon colors inside tooltip content
- #5278 feat: visual design updates, cleaner dark theme styles
- #5278 feat: visual design updates, cleaner dark theme styles
-
#5283 feat: new prop
enableColumnHeader
allows hiding the column header - #5284 fix: re-render immediately on changes in batched mode
- #5278 feat: visual design updates, cleaner dark theme styles
- #5270 break: upgrade to ESLint v8
- #5270 break: upgrade to ESLint v8
-
#5271 chore: upgrade to prettier v2.6
-
Note:
prettier
is only used ingenerate-css-variables
to format the output Sass/Less files
-
Note:
-
562fd14 fix(Tabs): make
children
prop optional again
- #5284 fix: re-render immediately on changes in batched mode
-
#5265 fix: restore
! default
modifier in Sass variables (again)
-
#5265 fix: restore
! default
modifier in Sass variables (again) -
#5266 fix: declare
children
prop explicitly for components for compatibility with@types/react@18
-
#5266 fix: declare
children
prop explicitly for components for compatibility with@types/react@18
-
#5266 fix: declare
children
prop explicitly for components for compatibility with@types/react@18
-
#5266 fix: declare
children
prop explicitly for components for compatibility with@types/react@18
-
#5260 fix: restore
! default
modifier in Sass variables
-
#5254 feat(
useHotkeys
): warn when used outside of<HotkeysProvider>
-
#5235 feat(
FocusStyleManager
): add escape hatch,Classes.FOCUS_STYLE_MANAGER_IGNORE
, which allows some elements to continue using default focus styles even when "only show focus on tabs" is enabled -
#5260 fix: restore
! default
modifier in Sass variables - #5259 fix: remove invalid compound selector in output CSS
-
#5258 fix: declare
children
prop explicitly for FCs for compatibility with@types/react@18
-
#5247 fix(
DatePicker
): disable today button in actions bar when out of min/max date bounds -
#5249 fix(
DatePicker
): disable clear button in actions bar whencanClearSelection
isfalse
- #5255 chore: fix peer dependency, allow React 18
- #5252 fix(a11y): update active item on focus changes
- #5251 fix: vertical scroll bug when ghost cells are enabled (again)
-
#5246 fix
variables.scss
syntax and backwards compatibility with node-sass / LibSass
-
#5246 fix(
generate-css-variables
): fix backwards compatibility with node-sass / LibSass
-
#5238 fix
variables.less
syntax
-
#5238 fix(
generate-css-variables
): Less variables conversion creates valid syntax
- #5241 fix url() file paths in production CSS by upgrading webpack
-
#5216 feat: migrate from node-sass to dart-sass
⚠️ this can be a breaking change if you are importing and compiling Blueprint's Sass source code withnode-sass
, see this comment for more details. Note that importing from@blueprintjs/*/src/**/*
files is considered private API usage and is therefore not protected from breaking changes under semantic versioning.
- #5226 feat: allow React 18 peer dependency
-
#4970 feat(
MultistepDialog
): newnavigationPosition
prop allows placing navigation steps at the left, top, or right of dialog
- #5231 fix: left icons in buttons no longer get tab focus
-
#5216
⚠️ feat: migrate from node-sass to dart-sass
- #5216 feat: migrate from node-sass to dart-sass
- #5226 feat: allow React 18 peer dependency
-
#5233 feat(
Tooltip2
): addpopoverRef
to shared props
- #5219 fix: clicking shortcuts no longer dismisses popovers
- #5213 feat: new icons "color-fill", "divide", "rect-height", "rect-width", "vertical-inbetween", "horizontal-inbetween", "open-application"
-
#5217
⚠️ [BREAKING] feat: upgrade to stylelint v14 and postcss v8
-
#5211 fix: polyfill
"stream"
module so that enzyme can load properly in karma webpack bundles
-
#5206 fix: migrate from
file-loader
to webpack asset modules
-
#5202 fix(
Table2
): update column / row sizes immediately with uncontrolled resizing API
-
#5204 Fix
createKarmaConfig()
to load stylesheets properly outside this repo, loading the core stylesheet fromnode_modules
as necessary
-
#5204 Upgrade many loaders and plugins, including:
- ts-loader
- style-loader
- sass-loader
- react-refresh-webpack-plugin
- css-loader
- fork-ts-checker-webpack-plugin
- mini-css-extract-plugin
- postcss-loader
-
#5192 feat: new icons "fuel", "playbook"
- #5198 fix: remove extraneous dependencies
All packages were released as stable v4.0.0
.
See overview of 4.0 changes here and a more granular set of changes for 4.0 beta and RC releases here.
- react-day-picker v8 migration
- HotkeysTarget & useHotkeys migration
- PanelStack2 migration
- Table 6.0 changes