# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).

:boom:: breaking changes

<!--
## [major.minor.patch] - YYYY-MM-DD
### Added
### Changed
### Deprecated
### Removed
### Fixed
### Security
[major.minor.patch]: https://github.com/vitalsource/vstui/compare/{last-version}...{current-version}
-->

## Unreleased


## [v5.0.2] - 2026-08-13

- [Security_Updates] - Resolved open Dependabot/npm audit CVEs: bumped stale override pins for `tar` and `js-yaml`; removed the now-unnecessary `body-parser` and `brace-expansion` overrides (their parents' own semver ranges already cover the patched versions); added targeted overrides for `micromatch`, `@tootallnate/once`, `uuid`, and `nanoid` (dev-tooling transitives via Storybook, Jest, lint-staged, and size-limit that pin below the fixed version). Also added an override for `esbuild` (patched via Storybook's `esbuild-register`, which only uses it to transpile config files rather than as the actual bundler — confirmed `npm run build:storybook` still succeeds). `packages/vstui-icons` has its own independent lockfile (installed separately from the root, and pulling in the full `@vitalsource/vstui` dependency tree via peer-dependency auto-install) that had never received the equivalent overrides; added matching `wait-on`, `uuid`, `micromatch`, `@babel/helpers`, `@babel/runtime`, and `lint-staged`/`yaml` overrides there to resolve its axios/uuid/yaml/micromatch/babel CVEs. Remaining known issues (`aws-sdk` v2 via `loki`, low severity; `extract-zip` via Storybook 7/Puppeteer, high severity with no patched version published upstream) have no available fix short of a Storybook/loki major upgrade or upstream release, and are tracked separately.
- [Table] - Rendering a header row could throw `Cannot read properties of undefined (reading 'handleHeaderClick')`, and sorting a column whose cell content was a React element with array children could throw reading `'toString'`.
- [Table] - Rendering any row could throw `Cannot read properties of undefined (reading 'state')` in `TableRow`.
- [Toast] - Opening, closing, or updating a toast could throw reading `'onToastOpen'`, `'onToastClose'`, or `'updatedToastContentNode'`.
- [Popover] - Opening a `Popover` (registering the escape-to-close listener) or clicking a list item with a wrapped `onClick` could throw reading `'handleKeyDown'` or `'focusElement'`.
- [FormControl] - Toggling a checkbox/radio via Enter, blurring a field, or changing a controlled input could throw reading `'handleValidate'`, silently breaking validation.
- [RadioButton] - Toggling a radio button could throw reading `'props'`.
- [Tabs] - Clicking either scroll button could throw reading `'scrollClick'` — a second, previously missed occurrence of the same defect fixed for `setLineStyle` in v5.0.0.

## [v5.0.1] - 2026-08-06

- [Form] - Fixed `Form.dispatchSubmitEvent` silently failing to submit in production builds (`Cannot read properties of undefined (reading 'dispatchEvent')`), caused by the same `babel-preset-minify` issue that previously affected `Tabs` — the compiler failed to preserve `this` inside a `setTimeout` callback because `this` was only referenced there and nowhere else in the enclosing method. (VST-105116)

## [v5.0.0] - 2026-07-30

- [Build] - Migrated package manager from Yarn to npm. `package-lock.json` is now committed; `yarn.lock` has been removed. Run `npm install` instead of `yarn install`.
- [Build] - Bumped Node.js requirement from v20 to v22 (Node 20 reaches EOL April 2026).
- [Security_Updates] - Babel v7, Webpack v5, Storybook v7, Loki v0.33, Stylelint v16, Eslint v8, Prettier v3. Also removed request and used axios for smartling http and made updates to any remaining packages giving us dependabot alerts after these changes.
- [i18n] - Updated smartling to support Indonesian id / id-ID locale.
- [Tabs] - Added ResizeObserver support so the tab indicator line and panel height update automatically when the container is resized.
- [Tabs] - Fixed tab scroll button visibility when tabs overflow the container.
- [Tabs] - Fixed focus not being restored to the selected tab after a click in uncontrolled mode (when `selectedIndex` is not provided).
- [Tabs] - Fixed production build crash (`TypeError: Cannot read properties of undefined (reading 'setLineStyle')`) caused by `babel-preset-minify` incorrectly inlining captured `this` references inside callbacks.
- [Popover] - Added `dynamicAnchor` prop — when enabled, a `ResizeObserver` tracks the nearest scrollable ancestor and triggers a Popper position update on resize.
- [vstui-icons] - Add CoachMe icon.
- [Docs] - Updated `CONTRIBUTING.md` and `README.md` to replace all Yarn references with npm equivalents.

## [v4.1.6] - 2023-12-13

- [Drawer] - Added a title to the drawer to match accessibility standards. The title can be styled and hidden.

## [v4.1.5] - 2023-11-14

- [Switch] - Allow Switch component to have height and minHeight values directly on element.

## [v4.1.4] - 2023-10-25

- [Drawer] - Added fixed so when opening Drawer the parent container does not scroll to the bottom of its axis.

## [v4.1.3] - 2023-09-11

- [Button] - Update Button overflow and text wrapping values to browser default.

## [v4.1.2] - 2023-08-23

- [Form] - Allows Form control to validate even if there are no vstui form controls contained inside the form itself.

- [Tabs] - Removed inline attr from scrollIntoView method as it requires additional work from app importing VSTUi.

## [v4.1.1] - 2023-08-21

- [Tabs] - correct bug related to scrollIntoView method causing parent page UI to jump / scroll.

## [v4.1.0] - 2023-08-15

- [Drawer] - Added Drawer component that transition slides in/out of view.

- [Tabs] - correct bug related to onSelect change made in v4.0.0-beta.14.

## [v4.0.0] - 2023-05-30

- Major release v4.0 


## [v4.0.0-beta.14] - 2023-05-04

- [Tabs] - UI fix around Next Scroll Button to correct element overlapping on focus. Correct bug when clicking on or sending focus to tab outside its inital header viewport was not retaining focus and scrolling back to previous tab.

- [Filter] Add a filter component that supports search, load-more, and single-select or multi-select.

- [RadioButton] Fix radio button

- [Button] - Updated nested `div`'s and replaced with `span`'s in the `Button` component as this is currently not well formed and throwing errors during the parsing compliance check.

## [v4.0.0-beta.13] - 2023-02-15

- [Checkbox] Change custom checkbox styling to allow Android TalkBack to properly focus on the input element.

## [v4.0.0-beta.12] - 2022-01-20

- [Toast] fix toastLinkButtonOnClick not being called

- [Toast] Add anchor href option and target to Toast inline button

## [v4.0.0-beta.11] - 2022-12-23

- [CheckboxControl] - Added `data-test` attribute to checkbox icon for automated tests to have an id to identify.

- [Button] - Added condition to render a `div` as the parent element if the component is using a `Tooltip` else render `React.Fragment` so no additional `div` is used / keepign the dom clean.

## [v4.0.0-beta.10] - 2022-10-05

- [Tabs] - Added functionality to `Tabs` component where if Tabs Header container width exceeds parent container we now show Forward/Back buttons to allow scrolling Header buttons.

## [v4.0.0-beta.9] - 2022-09-27

- [Button] - Added `Button Loader` to `Button` component. This allows end users to pass a loading status to our `Button` to show the UI is doing something in the background.

- [InputControl] - Update Show/Hide Password button with corrected label per suggestion of TPG.

## [v4.0.0-beta.8] - 2022-08-05

- [InputControl] - Update Show/Hide Password button with addition of aria-pressed plus the removal of focusing on input field once pressed/clicked per suggestion of TPG.

## [v4.0.0-beta.7] - 2022-08-02

- [Tag] - Added fix to correct passing styles down to `Tag` component through styled-components. Added missing componentTheme tokens which were throwing console messages. Added staticWidth prop to give end user flexibility to pass in static width (corrected issue with `Tag` while using `description` prop to truncate component.)

## [v4.0.0-beta.6] - 2022-07-22

- [Tag] - Added secondary theme for all variants. Updated deletable click function to onDelete as previous onClick was confusing. Corrected double tooltip when parent tag was being passed in description.

## [v4.0.0-beta.5] - 2022-05-19

- [Dialog] - Fix regression issue where the vertical scroll area would go outside the main dialog container area

## [v4.0.0-beta.4] - 2022-05-19

- [CheckBox] - Remove border and padding for Checkbox component while using prop required.

- [TextField] - Update password button to not longer trigger when parent component submits.

## [v4.0.0-beta.3] - 2022-05-11

- [Dialog] - Update Dialog to remove instance of appending role.

## [v4.0.0-beta.2] - 2022-04-11

- [Dialog]
  - Converted to function component
  - Changed dialog dependency to "react-a11y-dialog": "^6.1.3",
  - Replaced existing portal logic with React.createPortal
  - Create root context for portalling to a vstui defined container
- [ToastContainer] - Replaced existing portal logic with React.createPortal

## [v4.0.0-beta.1] - 2022-03-08

- [package.json] - Update styled-components to version 5.3.3

## [v3.31.0] - 2022-05-06

- [vstui-icons] - Add Highlighter / SpeakerOutline. Also update Speaker icon to match dimensions of new SpeakerOutline.

- [i18n] - Updated smartling to ensure all previous and newly added locales are up to date..

## [v3.30.0] - 2022-04-19

- [Icon] - Update ZoomIn and ZoomOut icons with smaller height and width.

## [v3.29.0] - 2022-04-01

- [vstui-icons] - Add publishConfig to vstui-icons package.json to allow for yarn release to publish.

- [InputControl] - Fixed Close button moving when clicked, Tooltip positioning over Clear button, and Focus to return to Input after clicking Clear

- Update all instances of input field error messaging to render text and icon inline.

- [InputControl] - Add EyeOpen / EyeClose button to password input field to show and hide text.

## [v3.28.1] - 2022-03-03

- [vstui-icons] - Update vstui-icons package version.

## [v3.28.0] - 2022-03-03

- [Icon] - Added ZoomIn and ZoomOut icons to Icon Library.

- [Icon] - Added FlashCard icon to Icon Library.

- [Icon] - Added MiscWarning icon to Icon Library.

## [v3.27.0] - 2022-03-01

- [Popover] - Fix popover to handle href property on List Items correctly.

## [v3.26.1] - 2022-02-08

- [Popover] - Fixed List items, as some prop data was being overwritten.

## [v3.26.0] - 2022-02-07

- [List] - Add notification tag to List component.

- [Icon] - Added EyeOpen and EyeClosed icons to Icon Library.

## [v3.25.0] - 2022-01-25

- [Button] - Removed `type='button` when component renders button element. Needs more testing

- [IconButton] - Add `trustedLink` prop to remove noopener if needed.

## [v3.24.0] - 2022-01-21

- [Button] - Add `trustedLink` prop to remove noopener if needed.

- [Button] - Add `type='button` when component renders button element.

## [v3.23.2] - 2021-11-19

- [i18n] - Correct missing `zh-CN` translations.

## [v3.23.1] - 2021-11-18

- [ToastContainer] - Update initToast function to allow for possible null parent / remove componentDidUpdate

## [v3.23.0] - 2021-11-15

- [ToastContainer] - Added rootSelector so parent ToastContainer appends as a child to applications root element

## [v3.22.3] - 2021-11-10

- [i18n] - Add `zh-CN` locale.

## [v3.22.2] - 2021-11-05

- changed black text from ninja 11 to cloud 10

## [v3.22.1] - 2021-10-27

- [Tooltip] - Use touch device check instead of breakpoint for exposing tooltips.

## [v3.22.0] - 2021-10-22

- [Tooltip] - Removed tooltip from mobile devices.

- [Dialog] - Updated mobile full-screen version to match new specs -- title and close button in header, primary / secondary action buttons are now below dialog content. Updated breakpoint for full-screen display.

## [v3.21.1] - 2021-10-21

- [Tabs] - Added translate3d for tab button underline. Improves rendering performance so underline doesnt leave partial on previous tab.

## [v3.21.0] - 2021-09-08

- createColorPalette - Suppress color contract error when in a production environment.

## [v3.20.0] - 2021-09-03

- [ToastContainer] - Added label text to Close Toast button.

- [Dialog] - Allow for alert dialog to be closed using ESC key - Updated Dialog story to match design.vitalsource.com.

## [v3.19.0] - 2021-08-18

- [IconButton] - Corrected ref prop to now take in nativeButtonRef function.

- [Toast] - Added ability to remove outer Toast Container padding / New option to pass in custom stripe color.

- [Icon] - Updated share icon svg with new img from design team.

## [v3.18.0] - 2021-08-06

- [IconButton] - Added ref prop to allow for innerRef to be utilized when importing.

- [Toast] - Updated padding and line height per design review.

## [v3.17.1] - 2021-08-02

- [IconButton] - Updated componentTheme.js with additional variant to suppress console errors.

- [Icon] - Corrected location of transform prop to resolve svg console errors for any component using the Icon component. Adjusted RTL var so actual data is now being read correctly.

## [v3.17.0] - 2021-07-22

[Table] - Added an onClick option for the table header, which will replace the default sort with a custom function. The function parameters are `event, {index, order, key}`.

- [Switch] - Updated outer border from 2px to 1px. Fixed UI / vertical centering issue. Deprecated medium and large sizes.

## [v3.16.0] - 2021-06-23

- [IconButton] - Added / updated custom props to allow for focus border to have different color than icon as well as give the option to change the selected state bg.

## [v3.15.1] - 2021-06-16

- Added newly generated translations

## [v3.15.0] - 2021-06-15

- [IconButton] - Added customIconColor prop to allow end user to pass in any color value.

## [v3.14.0] - 2021-06-11

- [Tabs] - Added flag to enable notification element on top right of tab buttons.

## [v3.13.0] - 2021-06-02

- [Tag] - Added new Tag component.

## [v3.12.0] - 2021-05-18

- [Popover] and [PopoverTrigger] - Removed aria-controls and aria-expanded properties from span element. @jshaw

- [Popover] - Added onOpen and onClose callback methods for Popover. @mjolin

## [v3.11.0] - 2021-04-29

- [List] - Changed keys for list headers and items to be unique. @tannerhuynh

- [Popover] - Show Popover content only after Popover trigger item has been clicked. @mjolin

## [v3.10.1] - 2021-04-16

- [Popover] - Update List component file reference.

## [v3.10.0] - 2021-04-16

- [Popover] - Added ability to pass an array used to create a List component to be displayed in the popover.

- [Toast] - Updated render to expose Toast methods vs needing a target element.

- [Checkbox] - Fixed issue where hidden input loses focus on mouse down event and
  allow user to toggle the checkbox with Enter key.

## [v3.9.0] - 2021-04-02

- [Toast] - Addition of Toast component. Success, error and custom content types.

## [v3.8.0] - 2021-03-25

[Tabs] - Updated focus management to correct screenreader issue where tab headings were losing
focus while navigating with mouse.

[Popper] - Applying a z-index on PopperContent to match newer version until VSTUI
dependency is updated.

## [v3.7.0] - 2021-03-15

[Dialog] - Removed Title as Dialog container key and now auto generating key value on Dialog render.

## [v3.6.0] - 2021-02-24

[IconButton] and [Button] - added specific 2px border size for just these 2 components.

[createShape] - reset border size from 2px to 1px.

[Dialog] - corrected horizonal scrolling issue.

[ToolTip] - updated ToolTip background color from Ninja to Cloud.

[Tabs] - allow for onSelect, selectedIndex and defaultIndex to be passed in as custom props.

## [v3.5.0] - 2021-02-08

[IconButton] - corrected aria-label issue to make sure attribute appears on element.

[Dialog] - Dialog component now only renders in the DOM if open prop is set to True. Corrected spacing issue between ActionButtons at the bottom of Dialog.

[Button] - Removed Neutral deprecation notice. Color Neutral now falls back to NeutralNaked as old Neutral variant was removed from Stewie Library. Correct Color White button focus state with now detecting behind Background Color to pass into border.

[createShape] - corrected border size from 1px to 2px.

## [v3.4.0] - 2021-01-24

- [Tooltip] - Expose Tooltip component so I can be used outside Button and IconButton components.

## [v3.3.1] - 2021-01-05

- [vstui-icons] - added new NavContents, NoteBook and AA icons into icon collection.

- [Dialog] - patch fix to wrap header title so it does not run into close button.

## [v3.3.0] - 2020-12-15

- [IconButton] - Addition of IconButton component. Added visual regression loki images for IconButton component.

## [v3.2.5] - 2020-12-02

- [Tabs] - Addition of Tabs component. Added display: none for panels that not visible. This was to address a bug when using 100% height as panel content plus a recommendation around accessibility.

## [v3.2.4] - 2020-11-25

- [Tabs] - Addition of Tabs component. Added panel container height to allow for panel content to scroll more consistent. Added smaller margin for tab buttons when using justify option.

## [v3.2.3] - 2020-11-19

Added onChange method to handleClearButtonClick when using incremental search option.
Fixed a UI bug where the search clear button was shifting too much when a user focuses or hovers over it.

## [v3.2.2] - 2020-10-30

- Corrected Tabs overflow issue with dropShadow option

- [Button] - Added pill option to Button component

## [v3.2.1] - 2020-10-20

- Added small tweaks to Tabs component around overflow property on outer wrapper.

- Corrected Storybook issue with Error when selecting the JSX tab for Tabs Generator.

- Switched out unused Accessibility dropdown components and added in Tabs

## [v3.2.0] - 2020-10-16

- [Tabs] - Addition of Tabs component. Added visual regression loki images for Tabs component.

## [v3.1.1] - 2020-10-07

- Added loki regression testing for the Dialog component.

- Added Accessibility dropdown within StoryBook which will be only displayed for the Accessibility static page Rainna is sending over to TPG for VSTUI component testing.

## [v3.1.0] - 2020-10-03

- [Dialog] Added fullInnerWidth prop to allow front-end to zero out dialog content padding. Updated customSize story configuration for JSX for display number vs string. Per design review, switched out close X icon from XSmall to XLarge. @mjolin

- [Button] Corrected inline option with Start and/or End Icon so text is inline vs separate. @mjolin

## [v3.0.0] - 2020-09-22

- [Dialog] Removing medium option for Dialog size prop. If medium is still in use / will fallback to the small option. @mjolin

- [InputControl] & [SearchForm] updated components to now display the clear text button to match current stewie design. (this affected regular and incremental search) Also added / updated translations for search and clear buttons (#349) @mjolin

## [v2.5.0] - 2020-07-20

- [Button] Added fullHeight and rounded props for users to have a couple more options around buttons without having to use styled components / componentTheme. @mjolin

- Upgraded VSTUI package within vstui-icons so it is up to date with our current build

## [v2.4.1] - 2020-07-09

- [vstui-icons] Bumping vstui-icons package from 1.1 to 1.2

## [v2.4.0] - 2020-06-30

- [Icons] Added Laptop and OpenBook icons to vstui-icons collecton. (367)

## [v2.3.0] - 2020-06-02

- [Dialog] Added customSize prop for users to provide a custom width without going through componentTheme. Update small and large to new pixel sizes. Added deprecated message for prop size medium. @mjolin

- [Switch] Added defaultPressed prop for users on frontend to determine if toggled on / off as default. @mjolin

## [v2.2.0] - 2020-03-10

- [Dialog] Added onShow callback once Dialog has fully mounted / is open. (#320) @mjolin

## [v2.1.2] - 2020-02-28

- VSTUI components will now inherit css visibility (which is the default behavior). This fixes a bug that was causing components such as Buttons, Checkboxes, etc to appear twice when used inside the Table component.. (#357) @mjolin

## [v2.1.1] - 2020-02-24

### Development

- updated prettier so that editor extensions use the same settings as the cli (#352) @eschafer

## [v2.1.0] - 2020-02-18

- [Table] allow the use of class name/s to be passed into the table header and table body columns. (#274) @mjolin

## [v2.0.2] - 2020-02-14

- [SelectControl] updated select line-height to match option height to the option text vertially aligns in FF (#304) @mjolin
- [Select] updated Select Box component padding / exclamation and down caret icon padding to match current stewie design. (#294) @mjolin

## [v2.0.1] - 2020-02-13

### Bug fixes

- [Form] resetting a form with a native reset button now clears validation messages (#295) @eschafer

## [v2.0.0] - 2020-01-31

This is a major version update, with breaking style changes.

The components are all slightly larger in size with a larger base font.

The Button component styles look a little different now, and there's a new style you can use by adding the `outline` prop.

## [v1.4.0] - 2019-11-26

- Added a new ComboBox component, which uses [accessible-autocomplete](https://github.com/alphagov/accessible-autocomplete). Storybook has some usage examples, and you should be able to use the same options listed in the accessible-autocomplete documentation.

  This defaults to an input with a basic dropdown, but there are [lots of options](https://github.com/alphagov/accessible-autocomplete#api-documentation) available to change how it looks and behaves.

## [v1.3.0] - 2019-10-14

- Changed theme.vstui.color.error to use a shade from the 'red' color palette instead of the 'cherry' color palette.
- Added theme.vstui.color.success.
- 'cherry' and 'grass' color palettes are still available, but will show a warning in non-prod environments explaining that they'll be removed in a future major release.

-[Switch] added onChange and onClick props to allow values to be passed back.

## [v1.2.1] - 2019-09-18

-[Popover] set focus on the current target due to some browsers not focusing on click. (#330) @mjolin

## [v1.2.0] - 2019-09-10

### Bug fixes

- [Button] remove all padding (VSTUI as well as browser default styles) while using inline prop. (#319) @mjolin

### Improvement

- [Button] Allow the use of aria-label directly on the <Button> component so if you leave the label prop empty no tooltip will be rendered. Also the use of aria-label will allow the user to add a more descriptive label while using the label prop to render a shortened version. (#324) @mjolin
- [ListItem] Allow the use of href and target to be passed into the ListItem Component to ensure not only (<button>) is rendered but (<a href>) as well. (#328) @mjolin

## [v1.1.0] - 2019-08-23

## Bug fixes

- [Dialog] Use onRef to get appropriate reference to form element. Fixes #296

## New components

- SearchForm: this has two behaviors:
  1. Search field w/ search button (<SearchForm />). Use this when you need to submit the form to get search results. Doesn't include clear button.
  2. Incremental search field (<SearchForm incremental />). Use this when search results update as you type. Includes clear button by default, and is purposely not keyboard accessible.
- Switch: this is a toggle button you can use for turning things on and off

## [v1.1.0-3] - 2019-08-09

- added search icon to incremental search fields

## [v1.1.0-2] - 2019-07-23

- inline form validation happens only after the user interacts with the field

## [v1.1.0-1] - 2019-06-24

- [Switch] new component
- [Button] added `labelledBy` prop, which will add `aria-labelledby` to the button

## [v1.1.0-0] - 2019-06-11

- [SearchForm] new component
- [InputControl] added search styles

## [v1.0.0] - 2019-05-24

### Bug fixes

- [Table] cells with undefined values are rendered as empty instead of throwing an error (#204) @eschafer
- [Popover] the element inside the popover now uses display:block and height:100%, which means you can use popper.js modifiers to set the width and height of the popover (#287) @bvandorn

### Development tasks

- set up automated tests to run on pull requests (#289) @peburrows
- updated README.md and CONTRIBUTING.md for clarity @eschafer

## [v1.0.0-alpha.31] - 2019-05-13

- fixed a bug causing a number of components (Button, Dialog, Form, Icon, Link, Table) to not render without using `<ThemeProvider />` (#277) @bvandorn
- [Dialog] now including the event with the dialog close request handler (#265) @cdevine49
- [Popover] Fixed a bug where content and theme were being added as invalid html attributes (#284) @bvandorn
- fixed stories in [Storybook](https://vitalsource.github.io/vstui) so that they all render now (some were showing red error screens before) (#285) @bvandorn

## [v1.0.0-alpha.30] - 2019-04-04

- [Icon] Prevent SVGs inside of an Icon from stealing focus in some scenarios. Adds `pointer-events: none;` to any SVGs within an icon.

## [v1.0.0-alpha.29] - 2019-04-03

- add frost color
- add cherry (shade 3)
- all default messages (i.e. required input error messages) have been translated into 38 languages. The current locale is part of the theme.

### Button

- inline buttons inherit font size
- supports rtl languages (icons and text will swap, and individual icons will flip if necessary)
- added translations for the warning message screen reader users hear when a link will open in a new window

### Dialog

- added translations for the close button label
- :boom: inner dialog components are no longer exported at the top level (DialogActionButton, DialogActions, DialogContent)

### form controls

- added translations for default validation messages

### FormMessage

- new component, used to show a global message

### Icon

- added `rtl` prop, which marks whether an icon should be mirrored or not when the direction is rtl (right-to-left). This is either boolean, or can be an array of languages that should be mirrored.
  - Arabic and Hebrew are written right-to-left, so some icons will need to be mirrored to reflect that. There are exceptions though. Here's a few examples:
    - media playback controls shouldn't be mirrored
    - question mark is flipped in Arabic, but not Hebrew

### for developers

- added a `commonProps` HOC, as a way to pass in theme, language, and direction
- switched some PureComponents over to Components because they contained complex data

## [v1.0.0-alpha.28] - 2018-12-13

- [Dialog] it's now possible to have a dialog without any action buttons (fixes #249)
- [Dialog] fixed some layout issues with multiline titles (fixes #251)

## [v1.0.0-alpha.27] - 2018-12-06

- [Button] fixed onBlur/onFocus/onMouseEnter/onMouseLeave events on buttons with tooltips (they were being ignored before)

## [v1.0.0-alpha.26] - 2018-12-03

- [Popover] added a controlled version, which can be opened/closed with an `open` prop

## [v1.0.0-alpha.25] - 2018-11-20

- :boom: updated palette colors to help prevent contrast ratio inconsistencies when using different theme colors. This will potentially be an issue if you're directly accessing color shades (e.g. theme.vstui.color.primary.getShade(shadeNumber)) - just make sure that your contrast ratios are still okay in those scenarios. If you're just using regular vstui Buttons on a white or cloud-1 background, you shouldn't need to change anything.
- added brand color palettes: blue, gold, green, orange, purple, red, silver. These colors are supposed to be used on branded sites, while the other colors are for our own sites.

## [v1.0.0-alpha.24] - 2018-11-06

- removed Menu/MenuItem and added List/ListHeader. Menus can be created using a Popover, and you can either put a List inside it (which would be equivalent to what a Menu was before), or you can put any other content inside.

## [v1.0.0-alpha.23] - 2018-10-17

- added a labs directory for components in progress
- added [Menu] to labs

## [v1.0.0-alpha.22] - 2018-10-01

- [Dialog] pressing escape will always close the dialog, even if a tooltip is currently visible (previously, you'd have to press escape to close the tooltip, then again to close the dialog)

## [v1.0.0-alpha.21] - 2018-08-13

- [Dialog] title uses `<h2>` instead of `<div>` for better accessibility

## [v1.0.0-alpha.20] - 2018-07-31

- [Button] added `inline` prop to help style buttons like regular links (see #240)
  - these have an underline by default because you might need that to differentiate links with text (links within text would likely need an underline to be accessible)
  - inherits size by default, but font family and weight stay the same
- [Form] fixed bugs related to form submission (see #243)

## [v1.0.0-alpha.19] - 2018-06-21

- tooltip always uses aria-hidden so that screen readers won't focus on it and read it, but screen readers will still be able to read the tooltip if it's referenced by aria-describedby
- tooltip stays open if you hover over it
- tooltip placement styles aren't applied until the tooltip is visible to improve performance
- stops propagation if the escape key closes the tooltip. This means that if you have a button with a tooltip inside a dialog, you can hide the tooltip by pressing the escape key, without that also closing the dialog.

## [v1.0.0-alpha.18] - 2018-06-19

- fixed a bug that was causing errors in IE11 (removed references to Object.entries, since it's not supported)

## [v1.0.0-alpha.17] - 2018-06-18

- fixed Dialog formProps.innerRef so you can get a reference to the Form

## [v1.0.0-alpha.16] - 2018-06-18

- converted Tooltip styles to camelCase to get rid of warnings
- fixed a Form bug where onSubmit wasn't being triggered

## [v1.0.0-alpha.15] - 2018-06-14

- removed expensive css transitions that were causing pages to lock up due to high cpu usage

### Button

- added focus states!
- updated neutral button colors to have a high enough contrast ratio
- inherited styles on the button and tooltip are now being reset
- default (color="theme") buttons can now use the colorBehindButton prop to have them automatically choose colors with a high enough contrast ratio

### forms

- form controls that have been validated are considered touched (so when you go to edit a validated field, it will validate as you type like it does on other touched fields)
- :boom: Form onSubmit() no longer automatically applies event.preventDefault(), so it should act like a native submit event handler

## [v1.0.0-alpha.14] - 2018-06-12

Lots of updates and breaking changes!

- createThemedComponent()
- design updates
- transitions
- changed theme structure
- removed most classNames so we don't need to worry about conflicts

### Button

- links that open in a new window will add hidden text "(opens in a new window)" for screen readers to announce

### Card

- only raised cards with an `interactive` prop will have a hover state (this behavior is correct, but not sure if the api might still change)
- :boom: added surface color (previously had a transparent background)

### Checkbox, Select, TextField

- id is no longer required; a random id will be generated by default

### Container

- :boom: Removed! It was exactly the same as a Card so we don't need it.

### Dialog

- :boom: New api. Dialogs with Forms behave differently, and need the action buttons placed in different spot, so this update handles that automatically.
- added shadows around body content to help show if you need to scroll to see more

### Form

- added a reset() method to reset the form imperitively

### Link (new, not sure if it's staying)

- This is just a themed Button that makes it look like an inline link.

### Table

- :boom: Removed the `width` prop, and added `fullWidth` to match other components.

## [v1.0.0-alpha.13] - 2018-05-02

- passing props into DialogActionButton, so we can use things like type="button"
- fixed Dialog z-index so it should appear on top

## [v1.0.0-alpha.12] - 2018-05-01

### Button

- tweaked how the main color is determined (trying to make sure an accessible color is used without showing unnecessary warnings)

### Dialog

- DialogContent can now handle null children (so you can do things like `{errorMessage && <div>error</div>}`)
- changed default rootSelector from '#main' to '#root', because that seems more common.

### forms

- fixed bugs around form controls unexpectedly changing between controlled/uncontrolled
- form controls now support values/defaultValues that are numbers
- controlled form components can now have a value of null, which will default to an empty string (or false for checkboxes). Previously, null was treated the same as undefined, and would make the component uncontrolled.
- removed readOnly from Checkboxes since that isn't supported in native html
- CheckboxControl now has a fixed width by default, and response to a fullWidth prop
- Form now uses context to handle triggering form control validation from the form's parent. This makes it so that any form control (even nested) within a Form will automatically register itself, and the Form can then call validate() and focus() on that control (which happens when you try to submit)
- form control validation now happens on first blur, and then after that on change. Previously, it was updating on change only if it became valid, but that looked buggy. We might want to change this again at some point, but this way is at least more consistent for now.
- added ability to call validate() from Form ref. This was added so that the form could be manually revalidated after it's been submitted and an error comes back from the server

### Storybook

- cleaned up the generated code in stories, so that default props are no longer included
- removed actions tab. It was slowing things down a ton and didn't seem particularly useful.

## [v1.0.0-alpha.11] - 2018-04-19

- resetting inherited styles on components so they don't accidentally inherit a style that they shouldn't
- updated visual regression tests
- **[bug fix]** removed webkit styling (inner shadow) on inputs
- can use async validation via promises
- preventing checkbox text selection for now, because it's causing validation bugs

### Button

- **[bug fix]**: text on full width Buttons is centered
- **[bug fix]**: added support for Tooltips using React 15
- **[design]**: increased font size on large buttons
- can now use colorBehindButton on theme buttons, to make sure the main shade used is accessible

### Card

- added to main exports, so you can use `import { Card } from '@vitalsource/vstui'`
- :boom: **[design]**: removed font styles, so you can use a card without it touching the contents

### Container

- new!

### Checkbox

- :boom: **[api]** **[design]** added fullWidth (fixed width by default now)
- **[api]** added helperText (appears under form control; gets replaced with a validation message if there's an error)
- :boom: **[api]** id is required
- :boom: **[api]** removed invalid (validation is handled via default html validation and an optional validate() prop)
- :boom: **[api]** renamed inputRef to nativeFormControlRef
- **[api]** added rootProps (lets you pass ...otherProps to the root, instead of the form control)
- **[api]** added validate (custom validation function to perform in addition to default validation)
- :boom: **[api]** removed validationMessage (validation is handled via default html validation and an optional validate() prop)

### Form

- :boom: **[api]** removed noValidate prop (noValidate is always true)
- **[api]** added onValidate
- **[api]** added onSubmit

### FormControlMessage

- :boom: **[api]** previously named ValidationMessage
- **[api]** added disabled
- :boom: **[api]** added error (styles the text like helper text by default)
- **[api]** added size (small/medium/large)

### InputControl

- :boom: **[api]** **[design]** added fullWidth (fixed width by default now)
- **[api]** :boom: renamed inputRef to nativeFormControlRef
- :boom: **[api]** removed invalid (validation is handled via default html validation and an optional validate() prop)
- **[api]** added onValidate
- **[api]** added size (small/medium/large)
- **[api]** added validate (custom validation function to perform in addition to default validation)

### Label

- **[api]** added size (small/medium/large)

### Select

- :boom: **[api]** **[design]** added fullWidth (fixed width by default now)
- **[api]** added helperText (appears under form control; gets replaced with a validation message if there's an error)
- :boom: **[api]** id is required
- **[api]** added nativeFormControlRef
- **[api]** added rootProps (lets you pass ...otherProps to the root, instead of the form control)
- **[api]** added size (small/medium/large)
- **[api]** added validate (custom validation function to perform in addition to default validation)
- :boom: **[api]** removed validationMessage (validation is handled via default html validation and an optional validate() prop)

### SelectControl

- :boom: **[api]** **[design]** added fullWidth (fixed width by default now)
- :boom: **[api]** removed invalid (validation is handled via default html validation and an optional validate() prop)
- **[api]** added nativeFormControlRef
- **[api]** added onValidate
- **[api]** added size (small/medium/large)
- **[api]** added validate (custom validation function to perform in addition to default validation)

### TextAreaControl

- :boom: **[api]** **[design]** added fullWidth (fixed width by default now)
- :boom: **[api]** removed invalid (validation is handled via default html validation and an optional validate() prop)
- :boom: **[api]** renamed textAreaRef to nativeFormControlRef
- **[api]** added onValidate
- **[api]** added size (small/medium/large)
- **[api]** added validate (custom validation function to perform in addition to default validation)

### TextField

- :boom: **[api]** **[design]** added fullWidth (fixed width by default now)
- **[api]** added helperText (appears under form control; gets replaced with a validation message if there's an error)
- :boom: **[api]** id is required
- :boom: **[api]** removed invalid (validation is handled via default html validation and an optional validate() prop)
- :boom: **[api]** renamed inputRef to nativeFormControlRef
- **[api]** added rootProps (lets you pass ...otherProps to the root, instead of the form control)
- **[api]** added size (small/medium/large)
- **[api]** added validate (custom validation function to perform in addition to default validation)
- :boom: **[api]** removed validationMessage (validation is handled via default html validation and an optional validate() prop)

## [v1.0.0-alpha.10] - 2018-02-18

- removed preinstall script that prevented installation
- fixed Checkbox so that it works without a ThemeProvider

## [v1.0.0-alpha.9] - 2018-02-18

- the theme is passed to each component, so that they'll still work without a ThemeProvider

### Button

- height is set to accommodate large fonts
- added aria-describedby pointing to the tooltip to make it accessible

### Checkbox

- :boom: acts as a controlled component if the `checked` prop is set, otherwise it's uncontrolled
- updated styles
- id is no longer required (it defaults to a random string)
- added `size` prop

### InputControl / TextAreaControl / TextField

- :boom: acts as a controlled component if `checked` or `value` is set (depending on the input type), otherwise it's uncontrolled
- :boom: className is applied to the root div instead of the input (not sure if we'll keep this)
- :boom: changed TextField to use a `multiline` prop instead of using `type`='multiline'
- :boom: TextField only displays validationMessage when invalid is true (this might change...)
- error icon no longer blocks pointer events
- added checkbox support
- added `inputRef` and `textAreaRef` props that lets users have access to the input for uncontrolled components (these might change...)

### Development

- added jest tests
- added a custom version of @storybook/addon-knobs, in order to show descriptions next to knobs
- updated README
- added a script to generate the docgen info used to generate knobs automatically
- changed getColor() to getShade() for colors, for clarity
- updated propTypes comments, which are used as knob descriptions
- added a shared themeShape propType
- no longer passing events into storybook action() because it was causing a memory leak (so you can see that the function was called in the actions panel, but not what was passed into it)
- updated loki visual regression tests to work with the changes made in components (I don't think any visual changes were made)
- switched to docker for running loki visual regression tests
- loki tests now run from static storybook build instead of requiring local server to be running
- updated stories to include uncontrolled and controlled generators

## [v1.0.0-alpha.5] - 2017-12-19

### Development

- added prettier and updated eslint rules

## [v1.0.0-alpha.4] - 2017-12-18

### Development

- fixing release script

## [v1.0.0-alpha.3] - 2017-12-18

### Development

- fixing release script

## [v1.0.0-alpha.2] - 2017-12-17

### Added

- added a license

### Changed

- css is minified (but not obfuscated)
- svg files are optimized
- updated documentation

### Removed

- removed self-hosted fonts, so users have the option of embedding via fonts.googleapis.com

### Development

- we're going to publish publicly to npm, so we no longer need the build/ directory in the repo
- restored storybook-addon-jsx after updating to fix bug (https://github.com/storybooks/addon-jsx/issues/23)
- refactored and updated package.json

## [v1.0.0-alpha.1] - 2017-12-12

### Changed

- :boom: styles should be imported with this syntax: `import 'vstui/styles.css'`
- :boom: colors should be imported with this syntax: `import { ocean } from 'vstui/colors'`
- no more postinstall!
- css includes appropriate vendor prefixes
- updated documentation

### Development

- we're committing build/ (previously lib/) now for releases. Now users won't need to rely on a postinstall script.
- added styles.css and colors/index.js as shortcuts for files in build/. We need this because there isn't a nice way to package files when installing via github.
- renamed lib/ to build/
- updated all the dependencies!
- moved dependencies into devDependencies
- updated build/
- lots of refactoring
- removed unused files
- removed storyshots since we weren't really using it

[v5.0.2]: https://github.com/vitalsource/vstui/compare/v5.0.1...v5.0.2
[v5.0.1]: https://github.com/vitalsource/vstui/compare/v5.0.0...v5.0.1
[v5.0.0]: https://github.com/vitalsource/vstui/compare/v4.1.6...v5.0.0
[v4.1.6]: https://github.com/vitalsource/vstui/compare/v4.1.5...v4.1.6
[v4.1.5]: https://github.com/vitalsource/vstui/compare/v4.1.4...v4.1.5
[v4.1.4]: https://github.com/vitalsource/vstui/compare/v4.1.3...v4.1.4
[v4.1.3]: https://github.com/vitalsource/vstui/compare/v4.1.2...v4.1.3
[v4.1.2]: https://github.com/vitalsource/vstui/compare/v4.1.1...v4.1.2
[v4.1.1]: https://github.com/vitalsource/vstui/compare/v4.1.0...v4.1.1
[v4.1.0]: https://github.com/vitalsource/vstui/compare/v4.0.0...v4.1.0
[v4.0.0]: https://github.com/vitalsource/vstui/compare/v4.0.0-beta.14...v4.0.0
[v4.1.6]: https://github.com/vitalsource/vstui/compare/v4.1.5...v4.1.6
[v4.1.5]: https://github.com/vitalsource/vstui/compare/v4.1.4...v4.1.5
[v4.1.4]: https://github.com/vitalsource/vstui/compare/v4.1.3...v4.1.4
[v4.1.3]: https://github.com/vitalsource/vstui/compare/v4.1.2...v4.1.3
[v4.1.2]: https://github.com/vitalsource/vstui/compare/v4.1.1...v4.1.2
[v4.1.1]: https://github.com/vitalsource/vstui/compare/v4.1.0...v4.1.1
[v4.1.0]: https://github.com/vitalsource/vstui/compare/v4.0.0-beta.14...v4.1.0
[v4.0.0-beta.14]: https://github.com/vitalsource/vstui/compare/v4.0.0-beta.13...v4.0.0-beta.14
[v4.0.0-beta.13]: https://github.com/vitalsource/vstui/compare/v4.0.0-beta.12...v4.0.0-beta.13
[v4.0.0-beta.12]: https://github.com/vitalsource/vstui/compare/v4.0.0-beta.11...v4.0.0-beta.12
[v4.0.0-beta.11]: https://github.com/vitalsource/vstui/compare/v4.0.0-beta.10...v4.0.0-beta.11
[v4.0.0-beta.10]: https://github.com/vitalsource/vstui/compare/v4.0.0-beta.9...v4.0.0-beta.10
[v4.0.0-beta.9]: https://github.com/vitalsource/vstui/compare/v4.0.0-beta.8...v4.0.0-beta.9
[v4.0.0-beta.8]: https://github.com/vitalsource/vstui/compare/v4.0.0-beta.7...v4.0.0-beta.8
[v4.0.0-beta.7]: https://github.com/vitalsource/vstui/compare/v4.0.0-beta.6...v4.0.0-beta.7
[v4.0.0-beta.6]: https://github.com/vitalsource/vstui/compare/v4.0.0-beta.5...v4.0.0-beta.6
[v4.0.0-beta.5]: https://github.com/vitalsource/vstui/compare/v4.0.0-beta.4...v4.0.0-beta.5
[v4.0.0-beta.4]: https://github.com/vitalsource/vstui/compare/v4.0.0-beta.3...v4.0.0-beta.4
[v4.0.0-beta.3]: https://github.com/vitalsource/vstui/compare/v4.0.0-beta.2...v4.0.0-beta.3
[v4.0.0-beta.2]: https://github.com/vitalsource/vstui/compare/v4.0.0-beta.1...v4.0.0-beta.2
[v4.0.0-beta.1]: https://github.com/vitalsource/vstui/compare/v3.28.1...v4.0.0-beta.1
[v3.31.0]: https://github.com/vitalsource/vstui/compare/v3.30.0...v3.31.0
[v3.30.0]: https://github.com/vitalsource/vstui/compare/v3.29.0...v3.30.0
[v3.29.0]: https://github.com/vitalsource/vstui/compare/v3.28.1...v3.29.0
[v3.28.1]: https://github.com/vitalsource/vstui/compare/v3.28.0...v3.28.1
[v3.28.0]: https://github.com/vitalsource/vstui/compare/v3.27.0...v3.28.0
[v3.27.0]: https://github.com/vitalsource/vstui/compare/v3.26.1...v3.27.0
[v3.26.1]: https://github.com/vitalsource/vstui/compare/v3.26.0...v3.26.1
[v3.26.0]: https://github.com/vitalsource/vstui/compare/v3.25.0...v3.26.0
[v3.25.0]: https://github.com/vitalsource/vstui/compare/v3.24.0...v3.25.0
[v3.24.0]: https://github.com/vitalsource/vstui/compare/v3.23.2...v3.24.0
[v3.23.2]: https://github.com/vitalsource/vstui/compare/v3.23.1...v3.23.2
[v3.23.1]: https://github.com/vitalsource/vstui/compare/v3.23.0...v3.23.1
[v3.23.0]: https://github.com/vitalsource/vstui/compare/v3.22.3...v3.23.0
[v3.22.3]: https://github.com/vitalsource/vstui/compare/v3.22.2...v3.22.3
[v3.22.2]: https://github.com/vitalsource/vstui/compare/v3.22.1...v3.22.2
[v3.22.1]: https://github.com/vitalsource/vstui/compare/v3.22.0...v3.22.1
[v3.22.0]: https://github.com/vitalsource/vstui/compare/v3.21.1...v3.22.0
[v3.21.1]: https://github.com/vitalsource/vstui/compare/v3.21.0...v3.21.1
[v3.21.0]: https://github.com/vitalsource/vstui/compare/v3.20.0...v3.21.0
[v3.20.0]: https://github.com/vitalsource/vstui/compare/v3.19.0...v3.20.0
[v3.19.0]: https://github.com/vitalsource/vstui/compare/v3.18.0...v3.19.0
[v3.18.0]: https://github.com/vitalsource/vstui/compare/v3.17.1...v3.18.0
[v3.17.1]: https://github.com/vitalsource/vstui/compare/v3.17.0...v3.17.1
[v3.17.0]: https://github.com/vitalsource/vstui/compare/v3.16.0...v3.17.0
[v3.16.0]: https://github.com/vitalsource/vstui/compare/v3.15.1...v3.16.0
[v3.15.1]: https://github.com/vitalsource/vstui/compare/v3.15.0...v3.15.1
[v3.15.0]: https://github.com/vitalsource/vstui/compare/v3.14.0...v3.15.0
[v3.14.0]: https://github.com/vitalsource/vstui/compare/v3.13.0...v3.14.0
[v3.13.0]: https://github.com/vitalsource/vstui/compare/v3.12.0...v3.13.0
[v3.12.0]: https://github.com/vitalsource/vstui/compare/v3.11.0...v3.12.0
[v3.11.0]: https://github.com/vitalsource/vstui/compare/v3.10.1...v3.11.0
[v3.10.1]: https://github.com/vitalsource/vstui/compare/v3.10.0...v3.10.1
[v3.10.0]: https://github.com/vitalsource/vstui/compare/v3.9.0...v3.10.0
[v3.9.0]: https://github.com/vitalsource/vstui/compare/v3.8.0...v3.9.0
[v3.8.0]: https://github.com/vitalsource/vstui/compare/v3.7.0...v3.8.0
[v3.7.0]: https://github.com/vitalsource/vstui/compare/v3.6.0...v3.7.0
[v3.6.0]: https://github.com/vitalsource/vstui/compare/v3.5.0...v3.6.0
[v3.5.0]: https://github.com/vitalsource/vstui/compare/v3.4.0...v3.5.0
[v3.4.0]: https://github.com/vitalsource/vstui/compare/v3.3.1...v3.4.0
[v3.3.1]: https://github.com/vitalsource/vstui/compare/v3.3.0...v3.3.1
[v3.3.0]: https://github.com/vitalsource/vstui/compare/v3.2.5...v3.3.0
[v3.2.5]: https://github.com/vitalsource/vstui/compare/v3.2.4...v3.2.5
[v3.2.4]: https://github.com/vitalsource/vstui/compare/v3.2.3...v3.2.4
[v3.2.3]: https://github.com/vitalsource/vstui/compare/v3.2.2...v3.2.3
[v3.2.2]: https://github.com/vitalsource/vstui/compare/v3.2.1...v3.2.2
[v3.2.1]: https://github.com/vitalsource/vstui/compare/v3.2.0...v3.2.1
[v3.2.0]: https://github.com/vitalsource/vstui/compare/v3.1.1...v3.2.0
[v3.1.1]: https://github.com/vitalsource/vstui/compare/v3.1.0...v3.1.1
[v3.1.0]: https://github.com/vitalsource/vstui/compare/v3.0.0...v3.1.0
[v3.0.0]: https://github.com/vitalsource/vstui/compare/v2.5.0...v3.0.0
[v2.5.0]: https://github.com/vitalsource/vstui/compare/v2.4.1...v2.5.0
[v2.4.1]: https://github.com/vitalsource/vstui/compare/v2.4.0...v2.4.1
[v2.4.0]: https://github.com/vitalsource/vstui/compare/v2.3.0...v2.4.0
[v2.3.0]: https://github.com/vitalsource/vstui/compare/v2.2.0...v2.3.0
[v2.2.0]: https://github.com/vitalsource/vstui/compare/v2.1.2...v2.2.0
[v2.1.2]: https://github.com/vitalsource/vstui/compare/v2.1.1...v2.1.2
[v2.1.1]: https://github.com/vitalsource/vstui/compare/v2.1.0...v2.1.1
[v2.1.0]: https://github.com/vitalsource/vstui/compare/v2.0.2...v2.1.0
[v2.0.2]: https://github.com/vitalsource/vstui/compare/v2.0.1...v2.0.2
[v2.0.1]: https://github.com/vitalsource/vstui/compare/v2.0.0...v2.0.1
[v2.0.0]: https://github.com/vitalsource/vstui/compare/v1.4.0...v2.0.0
[v1.4.0]: https://github.com/vitalsource/vstui/compare/v1.3.0...v1.4.0
[v1.3.0]: https://github.com/vitalsource/vstui/compare/v1.2.1...v1.3.0
[v1.2.1]: https://github.com/vitalsource/vstui/compare/v1.2.0...v1.2.1
[v1.2.0]: https://github.com/vitalsource/vstui/compare/v1.1.0...v1.2.0
[v1.1.0]: https://github.com/vitalsource/vstui/compare/v1.1.0-3...v1.1.0
[v1.1.0-3]: https://github.com/vitalsource/vstui/compare/v1.1.0-2...v1.1.0-3
[v1.1.0-2]: https://github.com/vitalsource/vstui/compare/v1.1.0-1...v1.1.0-2
[v1.1.0-1]: https://github.com/vitalsource/vstui/compare/v1.1.0-0...v1.1.0-1
[v1.1.0-0]: https://github.com/vitalsource/vstui/compare/v1.0.0...v1.1.0-0
[v1.0.0]: https://github.com/vitalsource/vstui/compare/v1.0.0-alpha.31...v1.0.0
[v1.0.0-alpha.31]: https://github.com/vitalsource/vstui/compare/v1.0.0-alpha.30...v1.0.0-alpha.31
[v1.0.0-alpha.30]: https://github.com/vitalsource/vstui/compare/v1.0.0-alpha.29...v1.0.0-alpha.30
[v1.0.0-alpha.29]: https://github.com/vitalsource/vstui/compare/v1.0.0-alpha.28...v1.0.0-alpha.29
[v1.0.0-alpha.28]: https://github.com/vitalsource/vstui/compare/v1.0.0-alpha.27...v1.0.0-alpha.28
[v1.0.0-alpha.27]: https://github.com/vitalsource/vstui/compare/v1.0.0-alpha.26...v1.0.0-alpha.27
[v1.0.0-alpha.26]: https://github.com/vitalsource/vstui/compare/v1.0.0-alpha.25...v1.0.0-alpha.26
[v1.0.0-alpha.25]: https://github.com/vitalsource/vstui/compare/v1.0.0-alpha.24...v1.0.0-alpha.25
[v1.0.0-alpha.24]: https://github.com/vitalsource/vstui/compare/v1.0.0-alpha.23...v1.0.0-alpha.24
[v1.0.0-alpha.23]: https://github.com/vitalsource/vstui/compare/v1.0.0-alpha.22...v1.0.0-alpha.23
[v1.0.0-alpha.22]: https://github.com/vitalsource/vstui/compare/v1.0.0-alpha.21...v1.0.0-alpha.22
[v1.0.0-alpha.21]: https://github.com/vitalsource/vstui/compare/v1.0.0-alpha.20...v1.0.0-alpha.21
[v1.0.0-alpha.20]: https://github.com/vitalsource/vstui/compare/v1.0.0-alpha.19...v1.0.0-alpha.20
[v1.0.0-alpha.19]: https://github.com/vitalsource/vstui/compare/v1.0.0-alpha.18...v1.0.0-alpha.19
[v1.0.0-alpha.18]: https://github.com/vitalsource/vstui/compare/v1.0.0-alpha.17...v1.0.0-alpha.18
[v1.0.0-alpha.17]: https://github.com/vitalsource/vstui/compare/v1.0.0-alpha.16...v1.0.0-alpha.17
[v1.0.0-alpha.16]: https://github.com/vitalsource/vstui/compare/v1.0.0-alpha.15...v1.0.0-alpha.16
[v1.0.0-alpha.15]: https://github.com/vitalsource/vstui/compare/v1.0.0-alpha.14...v1.0.0-alpha.15
[v1.0.0-alpha.14]: https://github.com/vitalsource/vstui/compare/v1.0.0-alpha.13...v1.0.0-alpha.14
[v1.0.0-alpha.13]: https://github.com/vitalsource/vstui/compare/v1.0.0-alpha.12...v1.0.0-alpha.13
[v1.0.0-alpha.12]: https://github.com/vitalsource/vstui/compare/v1.0.0-alpha.11...v1.0.0-alpha.12
[v1.0.0-alpha.11]: https://github.com/vitalsource/vstui/compare/v1.0.0-alpha.10...v1.0.0-alpha.11
[v1.0.0-alpha.10]: https://github.com/vitalsource/vstui/compare/v1.0.0-alpha.9...v1.0.0-alpha.10
[v1.0.0-alpha.9]: https://github.com/vitalsource/vstui/compare/v1.0.0-alpha.8...v1.0.0-alpha.9
[v1.0.0-alpha.5]: https://github.com/vitalsource/vstui/compare/v1.0.0-alpha.4...v1.0.0-alpha.5
[v1.0.0-alpha.4]: https://github.com/vitalsource/vstui/compare/v1.0.0-alpha.3...v1.0.0-alpha.4
[v1.0.0-alpha.3]: https://github.com/vitalsource/vstui/compare/v1.0.0-alpha.2...v1.0.0-alpha.3
[v1.0.0-alpha.2]: https://github.com/vitalsource/vstui/compare/v1.0.0-alpha.1...v1.0.0-alpha.2
[v1.0.0-alpha.1]: https://github.com/vitalsource/vstui/compare/v1...v1.0.0-alpha.1
