Breaking Changes
- using Quasar Uploader for ui.upload (227, 220)
- reworked lifecycle functions (232, 234)
- adding `on_connect()` and `on_disconnect()` functions to `client`
- renamed `await client.handshake()` to `await client.connected()`
- introduce `await client.disconnected()`
- providing `app.on_connect()` and `app.on_disconnect()` functions which are called for every client
- move `on_startup()`, `on_shutdown()` and `add_static_files()` from `ui` into `app`
Other Changes
- hold references to tasks in task_logger to prevent garbage collection (236, 237)
- fixed argument list for `table.call_api_method()` (233)
- add support for checkboxRenderer in `ui.table` (228)
- allow running NiceGUI without Tailwind (231)