In https://github.com/elastic/kibana/pull/31234 there were some extra changes that I've reverted, like use of the `tsconfig-paths` package to magically rewrite import statements to defy the standard node module resolution algorithm, the inclusion of several unnecessary options in the `test/tsconfig.json` file, and changes of the line-endings in the config files. This also brings a few enhancements from https://github.com/elastic/kibana/pull/30190 including a modularized version of the expect.js types, and options for explicit mappings for the PageObjects and services used in ftr tests.
* bump typescript version to 3.3.3333
* fix tests after updating TS version
* suppress type errors until they fixed appropriately
* address comments
* add type def for UnconnectedKibanaLink
* remove fix @ts-ignore
* fix snapshot test. provide displayName
* udpate jest, jest-cli, @types/jest to v24
* fix type error in kibana-i18n package
* return serivce explicitly to fix typings
* add explicit never
* suppress typings errors
* update jest versions in x-pack
* make tests in x-pack more robust and fix incompatibility
* suppress CallCluster mock typings
Mock interface doesn't match CallCluster. Requires
additional work
* x-pack. resolve other typing conflicts
* remove unused types/jest
* fix snapshots
* restore mocks after jest.spyOn
* remove outdated definitions for jest
* cleanup x-pack package.json and update @types/jest
* fix tests merged from master
* updated yarn.lock and log errors for scripts/type_check
* This commit fixes error in TS, which failed on parsing the file.
* suppress type errors from master
* jest-cli is devDep
* chore(NA): remove specific watch for x-pack webpackShims folder.
* chore(NA): remove xpack security plugin angular-ui-select webpackShim.
* chore(NA): bump ui-select version on x-pack to match the one used on oss kibana
* chore(NA): remove manual searching for webpackShim imports into the dll plugin. chore(NA): explicit avoid max dll compilations in all environments for the dll plugin. chore(NA): explicit throw an error and list all the not allowed modules bundled into the dll bundle.
* refact(NA): move ui related actions inside webpackShims to proper ui related files
* chore(NA): move angular ui dependencies from webpackShims to kibana core module.
* test(NA): enable xpack jest tests to be able to resolve plugins/xpack_main/*. refact(NA): rewrite code for the old xpack jquery flot webpackShim.
* refact(NA): use the already declared ui module get to list the dependencies for the kibana legacy core plugin.
* chore(NA): move angular ui requires to a better centralized place.
* refact(NA): rename areMaxCompilationsPerformed to assertMaxCompilations.
* refact(NA): remove unnecessary promise resolve on async function.
* refact(NA): remove unnecessary promise resolve on async function.
* refact(NA): apply changes according pr review.
* refact(NA): change from requires to imports in xpack_main plugin jquery flots.
* refact(NA): jquery flots missing statements.
* fix(na): linting problems.
* chore(na): re add jquery flot requires instead of imports.
* refact(NA): moving jquery flots from require to import. test(NA): fix mock for jquery_flot.
* feat(na): allow dynamic dll plugin public modules on dll bundle.
* feat(NA): step verification to not allow modules from xpack source.
* chore(NA): fix linting problems.
## Summary
This PR adds [Storybook](https://storybook.js.org/) to our testing and development suite.

This will allow us to:
1. create a site outlining all components within Canvas, including their TS type information;
2. demonstrate usage of all components by example;
3. allow for individual component testing, both manually and by Jest;
4. iterate and fix bugs on individual components *without* having to start up Kibana, in a [HMR](https://webpack.js.org/concepts/hot-module-replacement/) environment;
5. automatically generate [snapshots](https://jestjs.io/docs/en/snapshot-testing) based on any examples written;
This PR also converts a few components to Typescript and adds examples.
## How this can help us, (with examples)
I was inspired to add this when I was fixing #25342. In order to fix my changes, I had to run elasticsearch and kibana, as well as refresh my page whenever I needed to test a change. Had I had a Storybook instance, I would have been done much faster.
In this PR, you'll see I converted `AdvancedFilter` from `renderers` and `FontPicker` and `ImageUpload` from `public/components`. Would you believe I discovered and fixed bugs just by converting to Typescript and writing examples?
### `AdvancedFilter`
- `onChange` and `commit` are not marked as required in `propTypes`, but the component will error out if they're not supplied.
- `commit` was actually being called twice when 'Apply' was clicked. This was shown in the 'Actions' panel when I was testing it.
### `FontPicker`
- The `fonts` collection was not strongly-typed, therefore any string could be passed to the `value` parameter without error.
- While the code allows for any font string to be given to the component, there is no way to currently select that value, nor type it in within the control. This is likely a bug in design.
- The `aria-labeledby` attribute in the drop down includes `undefined`. This is likely a bug in EUI:

## How to use
- `cd x-pack/plugins/canvas/`
- Run `node scripts/storybook` to start up a local development version, with HMR.
- Run `node scripts/storybook_build` to build a complete static version of the book.
- Run `node scripts/jest` which will run the Storyshots test; run `node scripts/jest --updateSnapshot` if source code has changed as expected.
## Future Work
- Adding Jest coverage and output to the info panels, ([this](https://www.npmjs.com/package/@storybook/addon-jest) is *sick* functionality).
- Adding automatic [a11y testing](https://www.npmjs.com/package/@storybook/addon-a11y), (currently [blocked](https://github.com/storybooks/storybook/issues/4889)).
- Adding generic knobs for stories
- Adding more example info, (e.g. who edited last, descriptions, etc).
This removes the custom build process for Canvas plugins. Canvas plugins are now regular
Kibana plugins. They can register server-side functions like so:
```js
server.plugins.interpreter.register({
serverFunctions: [yourFunctionsHere],
});
```
And client-side functions need to be included in `uiExports.canvas`, then they need to
register themselves like so:
```js
// kbnInterpreter is a global, sadly, but it makes registration simple
kbnInterpreter.register({
elements: [yourElementsHere],
browserFunctions: [yourFnsHere],
});
```
* Solves several breadcrumb string/object problems, adds title to page
* Updates breadcrumb tests and adds title tests
* Removes switch logic from route config in favor of a single switch around all routes
* Adding draft version of withBreadcrumbs HOC with TS errors
* ProvideBreadcrumbs implemented
* Adds tests to provide breadcrumb logic
* Fixed up generics and tests
* First foray into turning .application background off
* Hopefully fixing the last few plugins
* Update EUI to 6.9.0
* removing hacks
* last fixes
* Remove a few more `100vh`
* Can I remember to copy & REPLACE
* EUI at 6.10.0
* [APM] ECS changes
* Remove ambient types for idx
* Update `observer.listening`
* Added type safety to property config
* More ECS updates
* Juan fixes for ECS
* Updates react to 16.6 (latest)
* Updated fragment-based snapshots for Kibana root unit tests
* Updated fragment-based snapshots for x-pack unit tests
* Removed xpack yarn.lock file bc it is no longer needed, it was reintroduced by accident during a rebase in this branch
* React 16.6 snapshot updates, round 2 (mostly Fragment snapshot diffs)
* Updated last round of React 16.6 snapshots
* Fixes query bar issue with 16.4 gDSFP lifecycle
* Updated yarn lock (arraybuffer.slice updated)
* Updates snapshots where executeQueryOptions prop appears