Skip to content

3.x Changelog

Adi Dahiya edited this page Jul 10, 2019 · 11 revisions

🆙 3.0 Migration guide is at the bottom of this document.


  • 🔥 API Break – requires migration
  • ⚠️ Warning – something to be aware of
  • Deprecation – stop using this bad thing
  • 🌟 Awesome – check out this cool thing
  • 👍 Nice – you're welcome
  • 🔧 Tooling – build system changes
  • 🔁 Rename – use the upgrade script
  • 🆙 Upgrade – migration pro tips


@blueprintjs/core 3.18.0

  • ⚠️ #3654 breaking: remove unused getShallowUnequalKeyValues utility function
  • #3653, #3654 chore: upgrade to typescript 3.5

@blueprintjs/datetime 3.12.0

@blueprintjs/icons 3.10.0

@blueprintjs/select 3.10.0

@blueprintjs/table 3.7.0

@blueprintjs/timezone 3.5.0

July 3, 2019

@blueprintjs/datetime 3.11.0

  • #3628 feat(DatePicker): add option to highlight current day

@blueprintjs/icons 3.9.1

  • Less/Sass variables are now correctly bundled into the NPM package (inside the lib/ folder)

July 1, 2019

@blueprintjs/core 3.17.1

  • ⭐️ #3636 feat(Popover): add fill prop to fill container width
  • #3637 fix(Switch): tweak dark theme hover/active colors
  • #3634 fix(Toast): long words in toast messages no longer break container layout

N.B. @blueprintjs/core@3.17.0 had an issue where Less/Sass variables were not bundled correctly into the NPM package.

@blueprintjs/datetime 3.10.1

  • 👍 #3613 fix(TimePicker): typing into minute input field works again

@blueprintjs/select 3.9.0

  • ⭐️ #3636 feat: add fill prop to Suggest and MultiSelect components
  • #3629 fix(Select): do not call itemRenderer when component is disabled
  • #3627 fix(Select): fix keyboard navigation when all filtered items are disabled

@blueprintjs/tslint-config 1.8.1

  • #3624 fix(blueprint-html-components): fix suggestion for <table> element replacement

June 19, 2019

@blueprintjs/core 3.16.2

  • #3611 Re-release of v3.16.0 with LESS & Sass variables correctly packaged

June 18, 2019

@blueprintjs/core 3.16.0

  • #3584 Typography: improve dark muted and disabled text contrast
  • #3568 HTMLSelect: Fix number of clicks required to use component inside ControlGroup in Firefox
  • #3591 TagInput: fix Tags overflowing the container
  • #3598 Tree: Fix intent color for nested Icon components in dark mode
  • #3600 PanelStack: Allow hiding header
  • #3601 PanelStack: Add support for controlled mode
  • #3608 AbstractButton, Button: Update button type prop to match React's latest typings

@blueprintjs/datetime 3.10.0

  • #3607 DateRangeInput: add support for disabling start or end input

@blueprintjs/table 3.6.0

  • #3350 EditableCell: add editableTextProps prop to allow adjusting cells during editing
  • #3447 RowHeaderCell: add nameRenderer prop to allow displaying custom headers

May 29, 2019

@blueprintjs/datetime 3.9.1

  • #3502 Hovering over date no longer clears time input
  • #3504 Render the correct month when DateRangePicker singleMonthOnly option is enabled
  • #3557 Fix DateRangePicker inconsistency with single day ranges and time precision enabled

@blueprintjs/icons 3.9.0

  • #3510 Added new UI icons
Screen Shot 2019-05-01 at 15 14 40 Screen Shot 2019-05-01 at 15 14 52 Screen Shot 2019-05-01 at 15 15 04 Screen Shot 2019-05-01 at 15 15 12

@blueprintjs/select 3.8.1

  • #3496 Fix <Select> to correctly change activeItem when items change

April 9, 2019

@blueprintjs/core 3.15.1

  • #3375 File input text styling for active selections

@blueprintjs/datetime 3.9.0

  • #3471 Fix DateInput IE11 bug when changing month/day
  • #3461 Upgrade react-day-picker, fix caption months support

@blueprintjs/icons 3.8.0

  • #3451 Added new inheritance icon

March 31, 2019

@blueprintjs/core 3.15.0

  • Switch to standard Apache-2.0 license (#3457)
  • Checkbox: fix indeterminate state update (#3409)
  • TagInput: use undefined instead of null to hide clearButton (#3436)
  • PanelStack: Add z-index to panel stack header to fix layout issue (#3414)
  • TextArea: Add growVertically prop to allow component to grow height with input text (#3398)
  • Drawer: Add position prop, deprecate vertical prop (#3386)

@blueprintjs/datetime 3.8.0

  • Switch to standard Apache-2.0 license (#3457)
  • Fix react-day-picker API hyperlink in documentation (#3435)

@blueprintjs/icons 3.7.0

  • Switch to standard Apache-2.0 license (#3457)

@blueprintjs/select 3.8.0

  • Switch to standard Apache-2.0 license (#3457)
  • Select: hide QueryList item list when menuContent and createItemView are both null (#3426)
  • MultiSelect: Enable pasting of multiple values (same as TagInput) (#3428)

@blueprintjs/table 3.5.0

  • Switch to standard Apache-2.0 license (#3457)
  • Fix resizable props documentation (#3400)

@blueprintjs/timezone 3.4.0

  • Switch to standard Apache-2.0 license (#3457)

@blueprintjs/docs-theme 3.1.0

  • Switch to standard Apache-2.0 license (#3457)

@blueprintjs/karma-build-scripts 0.10.0

  • Switch to standard Apache-2.0 license (#3457)

@blueprintjs/node-build-scripts 0.9.0

  • Switch to standard Apache-2.0 license (#3457)

@blueprintjs/test-commons 0.9.0

  • Switch to standard Apache-2.0 license (#3457)

@blueprintjs/tslint-config 1.8.0

  • Switch to standard Apache-2.0 license (#3457)

@blueprintjs/webpack-build-scripts 0.8.0

  • Switch to standard Apache-2.0 license (#3457)

March 5, 2019

@blueprintjs/datetime 3.7.2

  • #3356 Fix shortcuts.tsx react import typings

March 4, 2019

@blueprintjs/core 3.14.1

  • #3390 Fix react types regression
  • #3391 Overlay: fix transitionDuration documentation

February 28, 2019

@blueprintjs/core 3.14.0

  • #3348 Popover: Fix the type of onInteraction prop
  • #3347 ButtonGroup: supports fill prop when Buttons are wrapped in Popovers
  • #3351 Tabs: add panelClassName prop
  • #3355 TreeNode: Icons with intents inside this component are now colored properly
  • #3354 TreeNode: add disabled prop
  • #3382 Drawer: fix prop validation warning when using default props

@blueprintjs/select 3.7.0

  • #3381 Components now allow users to create new items not found in the items list

    2019-02-28 10 56 06

February 7, 2019

📢 Dear Blueprint users,
This is my (@giladgray) final release as the leader of this project. It's been my greatest pleasure to steward Blueprint and I am leaving it in the very capable hands of @adidahiya who, like me, has been on this project since its earliest days. Remember, I'm always only an at-mention away 👋☂️.

@blueprintjs/core 3.13.0

  • :star2: #2957 New Drawer component!
    • This is exactly the same as Dialog but it slides it from the right edge of the screen.
    • Use the size prop to control the width or height (based on vertical prop).
  • :star2: #3327 New Switch innerLabel and innerLabelChecked props.
    checked-text unchecked-text
  • #3314 New NumericInput rightElement prop (a la InputGroup).
  • #3296 NumericInput allows min === max.
  • #3342 Spinner SIZE_SMALL is now 20px instead of 24px (to match other components).
  • #3337 Fix NumericInput handling of arbitrarily small step sizes (>6 decimal places).

@blueprintjs/datetime 3.7.1

  • #3343 Fix DatePicker onChange on month change after initial day selection.
  • #3311 Merge the two definitions of IDateRangeShortcut (only one was actually exported so this is not an API break).

@blueprintjs/icons 3.6.0

  • #3335 New icons: inbox-filtered, inbox-geo, inbox-search, inbox-update. screen shot 2019-02-04 at 4 09 23 pm

@blueprintjs/select 3.6.1

  • #3305 Small refactors for internal code consistency.


  • #3334 Click to download Sketch files from Resources page.
  • #3318, #3319 Small edits & typo fixes.

January 21, 2019


  • #3301 Add directory details to package.json repository entries to allow third party tools to provide better support when working with monorepos.
    • Patch versions of all public packages not mentioned below have been published to benefit from this.

@blueprintjs/core 3.12.0

  • #3237 New Tag fill prop and styles.
  • #3237 New TagInput intent prop.
  • #3278 OverflowList is now a regular Component (not pure) so it always re-renders.
    • This is necessary because renderer behavior can change in ways that would not cause organic re-renders.
  • #3295 PanelStack initialPanel supports arbitrary user props.
  • #3275 Toast always clears existing timeout when restarting.
  • #3291 Tooltip supports hover interactions via new interactionKind: HOVER | HOVER_TARGET_ONLY prop.
  • #3283 :art: Add !default to $headings Sass map variable.

@blueprintjs/datetime 3.7.0

  • #3223, #3293 DateRangePicker shortcuts can now change time via includeTime: true.
    <DateRangePicker shortcuts={[{ label: "With time", dateRange: [...], includeTime: true }]}>
    • Also add a "Shortcuts" section to the documentation.

@blueprintjs/select 3.6.0

  • :star2: #3285 New itemsEqual prop on all package components to customize item equality check.
    • The default implementation simply uses === to test strict equality, but this requires careful management of object instances.
    • Use itemsEqual="id" as a shorthand to compare the id prop of two items to test equality.
    • Use itemsEqual={(a, b) => boolean} to implement more advanced custom logic.
  • #3292 New Suggest disabled and resetOnClose props.
  • #3290 QueryList initialize activeItem state correctly when controlled.
  • #3289 Suggest query remains visible when closed if no item is selected.

@blueprintjs/timezone 3.3.0

  • #3287 TimezonePicker supports custom target via children prop.
    • Only one child is supported; providing more than one will print a console warning in dev mode.
    • If a custom child is provided, all button-specific props will be ignored (i.e., buttonProps, disabled, placeholder, valueDisplayFormat).
  • #3287 Export getTimezoneMetadata() from package root to easily support arbitrary timezone formatting in custom targets.

January 10, 2019


  • :star2: #3230 Add esnext build target and package entry.
    • lib/esnext/ is a third compile target using the latest supported ES features (pretty much TypeScript without the types).
    • This will prevent bugs with incompatibility between ES5 and ES6+ features. Additionally, when targeting newer browsers, being able the use esnext will reduce bundle size.
    • Use this by configuring your build to read the esnext entry in package.json.
  • ⚠️ #3276 Fix externals in *.bundle.js files.
    • Properly mark all listed package dependencies as externals.
    • Specifically: add popper.js, react-popper, resize-observer-polyfill to the list.
    • Fix tslib global variable name.
    • Update documentation example in Getting Started guide.
  • 🔧 #3252 Upgrade to Webpack 4 in development.

@blueprintjs/core 3.11.0

  • #3235 Add EditableText type prop.
  • #3251 Add MenuItem labelClassName and textClassName props.
  • #3236 ResizeSensor handles fatal error state if findDOMNode fails.

@blueprintjs/datetime 3.6.0

@blueprintjs/icons 3.5.0

@blueprintjs/select 3.5.0

@blueprintjs/table 3.4.0

@blueprintjs/timezone 3.2.0

  • See "General" notes above: add esnext target and fix *.bundle.js externals.

December 7, 2018

⚠️ DO NOT enable CircleCI for your fork. (If you've already done so, you should disable it from the Circle UI.)

  • Our build runs on forked PRs and provides a better experience for OSS contributors than configuring your own Circle instance and setting up the preview comment.
  • Preview comments will no longer post from forked PRs, but the artifact URLs will be logged directly to the Circle console for easy access (example here, expand last step).

@blueprintjs/core 3.10.0

  • #3213 Add Popover/Tooltip targetProps prop to add attributes to Classes.POPOVER_TARGET element.
    • This provides much improved support for an advanced use case of positioning the target manually using style attributes: targetProps={{ style: { left, top } }}
  • #3215 Add Popover/Tooltip reposition() instance method to manually trigger a Popper update.
    • Use ref to get an instance: <Popover ref={ref => ref.reposition()} />
    • This method should be used rarely when the default behavior does not detect changes, such as changing position without changing size (this can happen when using as suggested above).
  • #3216 Add Icon htmlTitle prop to set title attribute on DOM element for browser tooltips.
    • Icon's existing title prop explicitly does not render a browser tooltip, so we had to add a new prop for this.
    • These two props will be refactored for consistency in Blueprint 4 (eventually).
  • #3211 Add Tree onNodeMouseEnter and onNodeMouseLeave callback props.
  • #3170 Fix HTMLTable props type to support <table>-specific HTML props like cellPadding.
  • #3190 Fix Icon render() return type (for React 15 consumers).
  • #3204 Fix NumericInput continuous keyboard click (holding space/enter on one of the buttons) and tenderly refactor the internal render and event logic.
  • #3164 Fix Toast to support changing timeout after it has been shown for the first time.
  • #3200 Fix Popover to support tabIndex on target element.

@blueprintjs/datetime 3.5.0

  • #3182 Months enum is now a regular TypeScript enum (not a const enum), so you can use it in JS code.
  • #3200 Fix DateInput inputRef support.
  • #3198 Fix DateRangePicker right caption behavior in contiguous month mode.
    • DateRangePicker now always renders the two months in separate calendars (as opposed to one two-month calendar).
  • #3199 Remove unused DateRangePicker styles.

@blueprintjs/icons 3.4.0

  • #3222 New icons: cube, cube-add, cube-remove, lifesaver, table-filtered.

@blueprintjs/select 3.4.0

  • #3180 Fix QueryList activeItem change when query and items props change.
  • #3167 Standardize inputProps docs across components.

November 16, 2018

@blueprintjs/core 3.9.0

  • :star2: #3148 Add Overlay portalClassName prop to set CSS class on element created by Portal.
    • Supported on Overlay, Dialog, Popover, and Tooltip.
  • #3061 Add MenuItem tagName prop to change HTML element.
  • #3149 Add Popover boundary prop to quickly set Popper boundary element (and PopperBoundary exported type).
  • #3156 New PopoverPosition enum for the allowed values in <Popover position>.
    • :+1: No API change, just a new type that includes the "auto" options and provides constants for them.
  • #3118 New MaybeElement type represents "JSX element or empty render," used in icon props.
    • Now supported: icon={endorsed && "tick"}, icon={condition ? null : "cross"}
  • #3150 Fix HTMLSelect disappearing caret on focus inside ControlGroup.
  • #3147 Classes.CONDENSED (added in #2904) renamed to Classes.HTML_TABLE_CONDENSED to match other <table> modifiers.
    • :+1: This actually reverts a 2.0->3.0 API break where the CONDENSED class was simply removed.
  • #3137 Fix TagInput inputValue respects controlled mode (no more auto-clear) when adding new items.
  • #3157 Fix Callout styles to support title-only usage.

@blueprintjs/datetime 3.4.0

  • #3142 Add DateRangePicker singleMonthOnly prop to show only one month calendar.

@blueprintjs/select 3.3.0

  • #3096 Add scrollToActiveItem prop to all components. Defaults to true.

    When activeItem is controlled, whether the active item should always be scrolled into view when the prop changes. If false, only changes that result from built-in interactions (clicking, querying, or using arrow keys) will scroll the active item into view. Ignored if the activeItem prop is omitted (uncontrolled behavior).

  • #3130 Fix Omnibar to allow browsing items when query is empty.

@blueprintjs/tslint-config 1.7.0

  • #3162 Add fixer for blueprint-html-components rule.

November 2, 2018

@blueprintjs/core 3.8.0

  • :star2: #3106 New Breadcrumbs component composes Breadcrumb items with an OverflowList container.
    • #3104 Add Breadcrumb current prop.
    • #3105 Breadcrumb renders children (in addition to text prop).
  • #3120 Add FormGroup contentClassName and style props.
  • #3045 Add Portal container prop to attach to things other than document.body.
  • #3113 Fix Checkbox indicator display edge case.
  • #3102 Fix Icon vertical alignment with inline text
  • #3117 Fix Tag text centering with other fonts.
  • #3115 Set default font-family only on body tag.
  • #3123 Remove some unused CSS rules.

@blueprintjs/icons 3.3.0

  • #3052 Add "clean" icon ✨

@blueprintjs/table 3.3.0

  • #2005 Add Table forceRerenderOnSelectionChange prop (defaults to false) which provides a noticeable performance improvement in selection.

October 5, 2018

@blueprintjs/core 3.7.0

  • #2951 🔧 Support for the latest version of @types/react (16.4.14).
  • #2953, #2992 :star2: InputGroup, TextArea, and Classes.INPUT now support small modifier!
  • #2975 Add OverflowList onOverflow callback prop, invoked once per resize and only if the overflowed items have changed.
  • #2964 Dialog close button is now a minimal Button (instead of custom styles).
  • #2960 FormGroup hides label element when the prop is omitted.
  • #2970 Spinner track now always exactly fills the frame and never overflows.
  • #2971 Utils.isElementOfType now compares displayName instead of element type to support equality checks across multiple instances of Blueprint.
    • :warning: If you use this method in your code, you must set a displayName on the components being compared or it will always fail.
    • Multiple instances can be brought in through transitive dependencies.
  • #2938 Fix Hotkeys sorting of labeled global groups.
  • #2994 Fix Tag extra margin with icons only.
  • #2466 Fix Tree small visual issues.

@blueprintjs/datetime 3.3.0

  • #2939 Add DatePicker todayButtonText and clearButtonText props to customize the text of those buttons.

@blueprintjs/icons 3.2.0

  • #2967 Added new icons list-columns, flow-linear, flow-branch, flow-review, flow-review-branch, flow-end

@blueprintjs/table 3.2.0

  • #2988 Invoke selectedRegionTransform after keyboard navigation (in addition to existing mouse interactions).
    • :warning: The second argument to this method is now MouseEvent | KeyboardEvent, which may require small code migration if you depended on mouse event properties.

@blueprintjs/tslint-config 1.6.0

  • #2969 :star2: Add a fixer to the blueprint-classes-constants rule!
    • The fixer replaces literals with Classes.* references and adds the appropriate import to the file!
  • #2996 The blueprint-classes-constants rule now also bans the bp3- prefix (in addition to the v1 pt- prefix).

September 14, 2018

@blueprintjs/core 3.6.1

  • #2945 Fix Tag remove button centering.

September 12, 2018

@blueprintjs/core 3.6.0

  • #2928 👍 Unknown icon names are now rendered as blank icons instead of as null to avoid interrupting flow
  • #2904 Add HTMLTable condensed prop for more compact appearance without cascade to other components
  • #2911 Fix Collapse initial opening animation
  • #2912 Fix Switch dark theme variables
  • #2929 Fix Switch indicator sensitivity to line-height
  • #2900 Fix TagInput left padding when empty for consistency with InputGroup
  • #2927 (IE11) Fix font icons to prevent double vision

@blueprintjs/datetime 3.2.0

  • #2895 🌟 Time support in DatePicker #2856 and DateRangePicker
    • Enable via new timePrecision shorthand or timePickerProps for advanced control.
    • ❌ Deprecate DateTimePicker since DatePicker can do it all now.
  • #2792 Replace custom styles with existing Blueprint components
    • Use minimal HTMLSelect for month/year dropdowns.
    • Use minimal Button for next/previous buttons.
    • Use Divider for the internal separators.
    • Upgrade react-day-picker dependency and leverage some new features like navbarElement.
  • #2795 Fix TimePicker to prevent typing time that exceeds bounds
  • Freshen up the implementations of DatePicker (#2789) and DateRangePicker (#2858, #2859) with some gentle yet significant refactors; no outward changes.
  • Refactor test suite for DateRangePicker (#2793) to use Enzyme and a hand-built DRY harness

@blueprintjs/select 3.2.0

  • #2894 Add resetOnQuery prop to all components
    • Whether the active item should be reset to the first matching item every time the query changes (via prop or by user input).
    • This behavior is enabled by default.
  • #2923 Add MultiSelect placeholder prop shorthand for inputProps.placeholder
  • #2874 Add Suggest controlled selectedItem prop
  • #2920 Add Suggest uncontrolled defaultSelectedItem prop
  • #2916 Fix QueryList reset behavior when active item becomes invalid so active state rarely disappears
    • Also fix viewport scrolling so the active item is always visible.

@blueprintjs/webpack-build-scripts 0.6.1

  • #2930 Enable webpack-dev-server port configuration via PORT environment variable

August 30, 2018

@blueprintjs/core 3.5.0

  • 🌟 #2884 Icon now renders an HTML element wrapper around the SVG image
    • Also brought back the icon CSS class to mitigate migration pain (it has no associated styles when using SVG icons)
  • #2881 Remove quotes on $ns/@ns style variable, for consumers of variables.less.
    • Less emits the quotes when interpolating in class names, leading to invalid syntax in selectors.
  • #2890 Spinner properly isolates the animation from surrounding styles.
  • #2886 Fix OverflowList collapsing all when zoomed.
  • #2887 Fix Skeleton animation in Firefox!
  • #2885 Increase Skeleton animation contrast

August 23, 2018

@blueprintjs/core 3.4.0

  • 🌟 #2854 New Divider component!
  • #2804 TagInput only adds on paste if pasted text includes separator.
  • #2868 Restore Spinner support for IE and Edge.
  • #2862 Update Sketch file.

August 13, 2018

@blueprintjs/core 3.3.0

  • #2783 RadioGroup and HTMLSelect options support className and disabled.
  • #2772 Popover now supports "auto-start" and "auto-end" positions.
  • #2776 Popover captureDismiss defaults to false.
  • #2775 Fix Button icon-only appearance.
  • #2761 Fix Tabs rendering fail in jsdom.

August 3, 2018

@blueprintjs/core 3.2.0

  • #2758 NEW Popover captureDismiss prop for better uncontrolled click-to-close behavior, especially with nested Popovers (defaults to true).
    • When prop is enabled, Popover invokes preventDefault() on Classes.POPOVER_DISMISS clicks. Popover now ignores dismiss clicks if default is prevented, so popovers around a <Popover captureDismiss> will not close when an inner popover is dismissed.
    • MenuItem disables captureDismiss (can override via popoverProps) to preserve existing desired behavior where clicking a nested submenu closes the entire hierarchy.
  • #2756 Fix Dialog eagerly closing when child Popover closes.
  • #2757 Menu supports arbitrary HTML attributes.

3.1.0 - August 1, 2018

🎆 Highlights: new PanelStack and ResizeSensor components, major Checkbox improvements, select components support controlled query and activeItem.


  • 📦 #2741 Fix all component displayNames to be Blueprint3.<name>. (Oops!)
  • 🔧 #2710 Fixed Sass compilation so source map remains external (major reduction in size of NPM package CSS files).

@blueprintjs/core 3.1.0

  • 🌟 #2642 NEW PanelStack component!
  • 🌟 #2745 NEW ResizeSensor component is a React wrapper around ResizeObserver.
  • 🌟 #2709 Checkbox now embeds the small-tick and small-minus SVG images into the CSS so states are CSS-only again.
    • Checkbox suffered greatly in the switch to SVG icons because its implementation no longer relied purely on CSS: React state was necessary to ensure the correct icon was rendered at the correct time. This introduced a bunch of subtle bugs where the DOM and the state could get out of sync (due to an incorrect implementation of un/controlled state).
    • Inlining the two icons results in an insignificant <1kB increase in size of blueprint.css and allowed the removal of much state logic from the Checkbox component.
  • 🌟 Major improvements to Checkbox, Switch, and Radio:
    • #2708 Add tagName prop to wrap in something other than <label>, which can cause event problems when listening for click on a parent element.
    • #2716 The control indicator is now an inline element, and line height restriction has been removed.
      • The indicator used to be absolutely positioned, which resulted in a small vertical misalignment.
      • Controls now assume the default line-height so they fit better with other text and react to changes in this property.
    • #2721 Refactor indicator styles to share as much as possible across the three control types.
  • 🌟 #2718 Popover position updates automatically when content or target change size!
  • #2707 Use IOptionProps instead of IHTMLOptionProps.
    • The latter was added in 3.0.0 without realizing we already had the former, so this is a simple correction.
    • RadioGroup options prop now supports optional label.
  • #2742 Breadcrumbs now embeds its SVG icons just like Checkbox above.
    • This was the final user of the icon fonts. They're now officially legacy!
  • #2727 Button now renders text={0}.
  • #2734 ControlGroup sets correct border-radius on only child.
  • #2744 ControlGroup supports HTMLSelect components.
  • #2731 Popover targets in ControlGroup now correctly inherit border-radius.

@blueprintjs/datetime 3.1.0

  • #2724 DateInput remove null from signature of formatDate as null values are handled by the component itself.
  • #2751 DateInput supports showActionsBar prop from DatePicker.

@blueprintjs/select 3.1.0

  • 🌟 #2747 activeItem (keyboard focus) and query (predicate string) can now be controlled via props or uncontrolled.
    • Optional query/onQueryChange and activeItem/onActiveItemChange props supported in all 4 components.
      • Supply query or activeItem to control that feature. Listen to changes using the associated event prop.
    • resetOnSelect is also a "common" prop, supported by all 4 components and implemented in QueryList.
    • Refactor: most state has been pushed into QueryList, which is now responsible for this behavior.
  • #2748 Suggest now shows the selected item as the placeholder text when the popover is open.
  • #2723 Ensure the active item is always an enabled item.
  • #2646 Added a common test suite for all components to assert common functionality works identically.

@blueprintjs/table 3.1.0

  • #2701 EditableCell correctly passes wrapText prop.

@blueprintjs/timezone 3.1.0

  • #2747 Updated TimezonePicker for latest Select behavior.


  • #2740 Added new tags to pages with new content.
  • #2746 Navigator limits to 10 results and has more helpful placeholder text.
  • #2419 Omnibar example hotkey is now shift+o to avoid Firefox conflict.
  • Improved checkbox/switch/radio examples to include some props options.


@badams @face @kadhirvelm @ntrinquier

3.0.1 - July 11, 2018

@blueprintjs/core 3.0.1

:gem: New features

  • #2667 Spinner accepts Classes.LARGE/SMALL to set large/small size (instead of size prop).
    • A warning is logged if both Classes.LARGE/SMALL and size are provided to a Spinner.
    • 🆙 This undoes a breaking change from 3.0.0 where we removed support for these CSS classes.
  • #2671 Icon uses <desc> element for title (no browser tootltip, still a11y).

:bug: Bug fixes

  • #2666 Fix Button loading spinner size.
  • #2670 Fix Button dark+minimal style.
  • #2681 Fix ButtonGroup vertical style.
  • #2681 Fix ContextMenu behavior when right-clicking on backdrop.
  • #2681 Fix HTMLSelect option label rendering.
  • #2681 Fix MenuItem submenu behavior with usePortal={false}.
    • This prop was removed erroneously in #2539 in 3.0.0-rc.0, so we're bringing it back.
  • #2629 Fix Tree generic types support on node callbacks.
  • #2676 Fix MenuItem submenu styles.
  • #2672 Disabled Buttons now have tabIndex={-1}.


  • Fix broken links.
  • Update v1 and v2 docs sites.

3.0.0 - July 9, 2018

🆙 Migration guide is at the bottom of this document.

📦 General changes to all component packages

  • 🔥 #2638 Relicense all packages to "Blueprint License based on Apache 2.0"
    • When we originally licensed to Apache 2.0 in #1751, we added a section 10 to prohibit impersonating Palantir.
    • It was brought to our attention that this modification makes the license no longer Apache 2.0, so we have decided to declare our own license based on Apache 2.0.
    • ⚠️ The only modification is this addition of section 10.
  • 🔥 #2441 Change CSS namespace to bp3- to avoid conflicts with previous major versions.
    • If you use Classes constants instead of hardcoded string literals then this upgrade is essentially free (except for your own CSS rules).
    • The best practice for CSS is to style your own classes instead of Blueprint classes, but in the short term you can replace all pt- prefixes in Sass code with #{$ns}- (exactly like our own source code).
    • 🆙 Use the blueprint-classes-constants TSLint rule to aid in this migration.
    • ⚠️ SCSS/Less variables are unchanged and continue to use the $pt- prefix: $pt-grid-size, etc.
  • 🌟 #2426 Restore support for React 15 (in addition to 16).
  • #2462 Declare sideEffects: ["*.css"] in package.json to preserve CSS imports during tree shaking.
  • #2562 Add tslib to webpack externals so it is not included in *.bundle.js.
  • #2608 Publish TypeScript source maps alongside compiled output: add * next to *.js and *.d.ts.

@blueprintjs/core 3.0.0

📦 Package changes

  • 👍 #2511 Move react-transition-group from peer to standard dependency.
  • #2488 New 3.0 upgrade script upgrade-blueprint-3.0.0-rename, improvements to 2.0 upgrade script.

🔥 Breaking changes

🔁 These changes can be replaced by the 🆙 upgrade script.

  • 🔥 #2441 Change CSS namespace to bp3- to avoid conflicts with previous major versions.
    • 🆙 Use the blueprint-classes-constants TSLint rule to aid in this migration.
  • 🔥 #2366 Move styles attached to global selectors to their own CSS classes.
    • Global resets remain for <body>, <p>, <small>, <strong> tags.
    • :warning: The following HTML elements now require CSS classes to apply Blueprint styles:
      • <h1>-<h6><H1>-<H6> or Classes.HEADING
      • <blockquote><Blockquote> or Classes.BLOCKQUOTE
      • <code><Code> or Classes.CODE
      • <pre><Pre> or Classes.CODE_BLOCK
      • <ol> & <ul><OL> & <UL> or Classes.LIST
        • Not linted by new blueprint-html-components rule as there are legit un-classed uses of list elements.
      • <hr> (no class yet; Divider coming soon)
    • 👍 The above elements do not require classes when used inside a container element with Classes.RUNNING_TEXT.
    • #2456 Add React components for elements above (and HTMLTable for Classes.HTML_TABLE).
    • 🆙 Use the blueprint-html-components TSLint rule to aid in this migration.
  • 🔥 Refactors to base typography styles: Classes.RUNNING_TEXT now uses the default font-size and Classes.TEXT_LARGE can be applied anywhere to use the large font-size.
  • 🌟 #2484 Allow string literals for enums!
    • Most former string enums are now const/type pairs, the official TypeScript solution for non-opaque string enumerations.
    • Affects Alignment, CollapseFrom, Elevation, Intent, Position, PopoverInteractionKind
    • 🔁 CollapseFromBoundary
  • 🔥 #2579 Spinner size prop replaces small/large props.
    • 🆙 @blueprintjs/core 3.0.1 reverts this breaking change by restoring support for Classes.SMALL/LARGE as size shorthands.
  • #2581 Overlay lifecycle props for all overlay components.
    • IOverlayLifecycleProps defines onOpening, onOpened, onClosing, onClosed tied to CSS transition timing.
      • onOpening and onClosing fire before the enter or exit transition (respectively) begins and onOpened and onClosed fire after it ends.
      • Overlay content is always mounted in the DOM during these lifecycles, but it is not visible during onOpening and onClosed.
    • These new props are supported by Overlay, Dialog, Popover and Tooltip.
    • 🔁 Overlay didOpenonOpened, didCloseonClosed
    • 🔁 Popover popoverDidCloseonClosed, popoverDidOpenonOpened, popoverWillCloseonClosing, popoverWillOpenonOpening
  • 🔥 #2601 Delete SVGPopover and SVGTooltip.
    -<SVGPopover content="..." target="..." />
    +<Popover targetTagName="g" wrapperTagName="g" content="..." target="..." />
  • 🔥 #2477 Delete SVGSpinner component as the normal Spinner can now safely be used inside another SVG.
    • Delete Classes.SPINNER_SVG_CONTAINER and Classes.SVG_SPINNER.
  • #2571 Label is now a simple HTML tag wrapper like Code or H1.
    • 🔥 Removed required text prop. Pass content as children now.
    • 🔥 No support for inline or helperText, just basic HTML props.
    • Prefer FormGroup for your labeling needs. The complexity of two approaches was unnecessary, and FormGroup can handle any use case you throw at it (not true of Label).
  • 🔁 #2570 FormGroup requiredLabellabelInfo and remove boolean shorthand.
    -<FormGroup label="Name" requiredLabel={true}>
    +<FormGroup label="Name" labelInfo="(required)">
  • 🔁 #2443 Classes.HEADING replaces the following constants:
    • Classes.CALLOUT_TITLE
    • Classes.DIALOG_TITLE
    • Classes.HOTKEY_GROUP
  • #2617 Popover and Tooltip now extend a shared props interface for consistency.
    • 🔁 rootElementTagwrapperTagName
    • 🔁 targetElementTagtargetTagName
    • 🔁 tooltipClassNamepopoverClassName

:gem: New features

  • 🌟 #2537 New OverflowList component is like CollapsibleList with auto-collapse behavior!
    • Renders as many items as can fit inside itself, then collapses the rest into a single element.
    • Accepts generic items: T[] with props to render visible and overflowed items.
    • Uses resize-observer-polyfill (new dependency) to intelligently detect element resizing.
    • :x: #2616 Deprecate CollapsibleList in favor of OverflowList.
  • 🌟 #2536 New MultiSlider component provides a low-level API for manipulating number lines. screen shot 2018-04-19 at 10 43 24 am
    • :+1: Slider and RangeSlider each render a MultiSlider, making them little more than convenience wrappers for single values or ranges.
    • Handles are configured as <MultiSlider.Handle> children and support multiple appearances and interaction types.
  • #2605 New HTMLSelect component for <select> tag.
    • Named thusly to avoid conflict with @blueprintjs/select package.
    • Supports <option> tags as children or options: IHTMLOption[] prop shorthand.
    • :x: Deprecate Classes.SELECT in favor of this component, which uses Classes.HTML_SELECT to support the SVG icon.
    • The CSS-only API for <select> tags was one of the last holdouts of the icon font.
  • #2609 Upgrade to react-popper@1.0.0
  • #2583 Static aliases for Menu child components: Menu.Item, Menu.Divider
  • #2477 Spinner markup refactor: remove all wrapping <div> elements so the root is the <svg> itself!
  • #2431 New Tag icon and rightIcon props.
    • Tag styles now work similarly to Button: a flex row with children wrapped in a span.
  • #2592 TagInput support for pasting in new items with addOnPaste prop.
  • #2522 Toaster.create() throws error if used within lifecycle method
  • #2499 ensureElement utility supports React.Fragment (React 16 only)
  • #2475 Improve <kbd> element styles and allow un-classed usage inside Classes.RUNNING_TEXT

:bug: Bug fixes

  • #2540 Fix Button alignment in Navbar.
  • #2561 Fix Button alignment without icon.
  • #2497 Fix Button width with large CSS icon only
  • #2538 Fix Callout icon color.
  • #2541 Fix Icon dark intent colors.
  • #2527 Fix InputGroup React warning about round prop.
  • #2491 Fix Spinner stroke width
  • #2494 Fix Switch align-right style
  • #2495 Fix Tabs vertical style
  • #2428 Fix Tag outline behavior
  • #2582 Fix TagInput React warning.
  • #2509 Fix typings of HTMLTable component
  • #2554 Add default type parameters for decorator APIs.
  • #2593 Monospace typography uses relative font-size: smaller.
  • #2544 Move NonIdealState width styles to child elements.

@blueprintjs/icons 3.0.0

  • 🔥 #2441 Change CSS namespace to bp3-.
  • #2584 New icons: globe-network, snowflake, tree.

@blueprintjs/datetime 3.0.0

  • 🔥 #2441 Change CSS namespace to bp3-.
  • #2539 Components use default usePortal value (true).
  • #2573 DateInput onChange now has second argument isUserChange (like DatePicker).
  • #2484 Allow string literals for enums, and rename a few:
    • 🔁 TimePickerPrecisionTimePrecision
    • 🔁 DateRangeBoundaryBoundary (from @blueprintjs/core)

@blueprintjs/select 3.0.0

  • 🔥 #2441 Change CSS namespace to bp3-.
  • #2580 New itemDisabled prop on all components allows disabling individual items.
    • Keyboard controls intelligently skip disabled items.

@blueprintjs/table 3.0.0

  • 🔥 #2441 Change CSS namespace to bp3-.
  • #2556 Table without data can now scroll horizontally.
  • #2586 Fix React unknown prop warning.

@blueprintjs/tslint-config 1.4.1

  • 🌟 #2456 Add blueprint-html-components rule to enforce usage of Blueprint components over JSX intrinsic elements.
    • Marks as errors HTML elements for which Blueprint provides wrappers. See list in core breaking changes above.
  • #2589 Fix blueprint-classes-constants prefix detection.
  • #2457 Improve error messages in blueprint-icon-components lint rule.

:book: Documentation

  • 🌟 #2574 Complete refactor of documentation content to focus on React usage and de-emphasize CSS/HTML usage.
  • 🌟 #2489 New design for examples visually separates them from content.
    • CSS examples now provide checkboxes for each modifier, instead of re-rendering the same markup for each modifier. This allows more than one modifier to be set at a time to demonstrate interactions between them.
  • 🔥 #2545 New docs site URL scheme: /docs/(versions/:v).
  • #2546 Split core components into several subsections.
  • #2591 New Documentation navigatorExclude prop to exclude items from the search results.
  • #2615 New Documentation renderPageActions prop to add custom actions on each page.
    • Add "Edit this page" links at the top of each documentation page.
  • #2459 Fix content width due to code blocks.


@badams @devinhalladay @invliD @jaamison @JKillian @jscheiny @mcintyret @PrincipalsOffice @qcz @Que3216 @rafeememon @rosscourt

🆙 Migration guide

Before: Migrating from 1.x to 2.x

Refer to the Blueprint 2.0 migration guide and changelog to familiarize yourself with the API breaks in 2.0. You can upgrade straight from 1.x to 3.x by running both upgrade scripts. It is recommended to read both guides before beginning as the information here is more relevant (since things have changed between 2.0 and 3.x)

Before: TSLint rules

Enable the blueprint-classes-constants TSLint rule to detect hardcoded string literals and migrate those to use Classes constants.

This is critical as 3.0.0 no longer uses the pt- prefix for class names. It has been changed to bp3- to avoid conflict, and will continue to change in future major versions. Using the Classes constants is the forward-proof solution here as those names will remain the same as namespaces change. And if those names do change, they're much easier to detect and can even be validated by the TypeScript compiler.

🛑 Resolve lint failures before upgrading Blueprint packages. It'll make the style upgrade a whole heck of a lot friendlier.

1. Installation

The latest 3.0.0 package can be installed using the @latest NPM tag:

yarn upgrade @blueprintjs/core@latest @blueprintjs/icons@latest ...

2. Upgrade script

Run the migration script on your source code to automatically 🔁 rename changed symbols. This will handle all the API renames below and log extensive warnings for breaks that require your intervention.

# if your codebase was on 1.x, first run the 2.0.0 upgrade script:
$(npm bin)/upgrade-blueprint-2.0.0-rename --path=path/to/src

# then run the 3.0.0 upgrade script.
$(npm bin)/upgrade-blueprint-3.0.0-rename --path=path/to/src

# pass --help for usage documentation and other options

3. Manual migrations

At this point, most of the API breaks should be addressed. The release notes and your CI build are your best friends at this point. All that remains is to audit your app to ensure that it performs as expected.

4. SVG icons

One of the flagship features in Blueprint 2.0.0 was the introduction of SVG icons to replace the icon font. All the Blueprint React components now render exclusively SVG icons, which may affect your app styles in subtle ways. Some notes about the switch to SVG icons:

  • A new package @blueprintjs/icons was introduced in 2.0.0 that provides the icon font and the SVG paths.
    • @blueprintjs/core depends on this package so it'll be installed automatically, but it's still a good idea to explicitly depend on it in your package.json as it updates independently.
    • ⚠️ Don't forget to include blueprint-icons.css in your application styles.
  • The icon font is still supported but should be considered a legacy feature. The React components never use it though their styles still support it through className. You can access font icons directly through Classes.iconClass(iconName) and Classes.ICON_STANDARD/LARGE.
    • 🔥 Classes.ICON_STANDARD and Classes.ICON_LARGE are never used by the React components anymore. Sizing is handled by the iconSize prop (see last bullet below).
  • 🔥 The IconClasses enum has been replaced with IconNames and icon names no longer support the "pt-icon-" prefix.
  • 🔥 All React icons are now <span className={Classes.ICON}> elements and they contain SVG markup for the icon image.
    • Icons can still be colored using the color CSS property or the SVG fill property.
  • 👍 Gone are the days of size classes, as SVG icons can now be rendered at any pixel size.
    • <Icon iconSize={#}> will render the icon at exactly #px and will use the closer of the 16px or 20px icon glyphs.
    • Constants are provided for common sizes: Icon.SIZE_STANDARD, Icon.SIZE_LARGE.
You can’t perform that action at this time.