Closes: [BS-2909](https://linear.app/affine-design/issue/BS-2909/新增highlighter)
### What's Changed!
Currently the highlighter tool is very similar to brush, but for the future, it's a standalone module.
* Added `Highlighter` element model
* Added `Highlighter` tool
* Added `Highlighter` entry to the global toolbar
# Refactor Turbo Renderer State Management to Use RxJS
### TL;DR
Refactored the TurboRenderer state management to use RxJS observables instead of direct state mutations, improving state transitions and reactivity.
### What changed?
- Replaced the public `state` property with a private `state$` BehaviorSubject in `ViewportTurboRendererExtension`
- Added proper state transition logging using RxJS operators
- Combined multiple event subscriptions using `merge` operator for better organization
- Improved state transition logic in the `refresh()` method
- Updated the `zooming$` and `panning$` signals in the Viewport
### Why make this change?
This refactoring improves the codebase by:
1. Using a more consistent reactive programming model with RxJS
2. Making state transitions more explicit and traceable
3. Reducing potential bugs from manual state management
4. Improving code organization by combining related event streams
5. Ensuring proper cleanup of resources when components are disposed
The change maintains the same functionality while making the code more maintainable and the state management more robust.
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@googleapis/androidpublisher](https://redirect.github.com/googleapis/google-api-nodejs-client) | [`^24.0.0` -> `^26.0.0`](https://renovatebot.com/diffs/npm/@googleapis%2fandroidpublisher/24.0.0/26.0.0) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) |
---
### Release Notes
<details>
<summary>googleapis/google-api-nodejs-client (@​googleapis/androidpublisher)</summary>
### [`v26.0.0`](https://redirect.github.com/googleapis/google-api-nodejs-client/blob/HEAD/CHANGELOG.md#12600-2023-08-17)
[Compare Source](https://redirect.github.com/googleapis/google-api-nodejs-client/compare/v25.0.0...v26.0.0)
##### ⚠ BREAKING CHANGES
- **vmmigration:** This release has breaking changes.
- **contentwarehouse:** This release has breaking changes.
- **assuredworkloads:** This release has breaking changes.
- **aiplatform:** This release has breaking changes.
##### Features
- **admin:** update the API ([ebfb777](ebfb777684))
- **aiplatform:** update the API ([146712c](146712c48e))
- **androidpublisher:** update the API ([2d7c2b4](2d7c2b4247))
- **assuredworkloads:** update the API ([6547ea1](6547ea1ef1))
- **contactcenterinsights:** update the API ([1f2e6eb](1f2e6eb4ab))
- **containeranalysis:** update the API ([7acf09f](7acf09fc53))
- **contentwarehouse:** update the API ([c44aeaf](c44aeafdd3))
- **discoveryengine:** update the API ([bca2665](bca26655ef))
- regenerate index files ([751227d](751227d392))
- **serviceconsumermanagement:** update the API ([336b645](336b645dbb))
- **serviceusage:** update the API ([6f08362](6f0836293a))
- **testing:** update the API ([9c06a45](9c06a45890))
- **vmmigration:** update the API ([75cbb15](75cbb1513e))
##### Bug Fixes
- **contactcenteraiplatform:** update the API ([e4bfff0](e4bfff0b61))
- **content:** update the API ([6e9f31f](6e9f31fdff))
- **dns:** update the API ([2e49df0](2e49df0707))
- **eventarc:** update the API ([b7a0e5a](b7a0e5a26e))
- **gameservices:** update the API ([8733a48](8733a48c00))
- **metastore:** update the API ([26f97a2](26f97a259e))
- **privateca:** update the API ([b50c176](b50c176656))
- **recommendationengine:** update the API ([fd203b4](fd203b411f))
- **vision:** update the API ([2593341](2593341f5b))
- **vpcaccess:** update the API ([b740cac](b740cacf6f))
### [`v25.0.0`](https://redirect.github.com/googleapis/google-api-nodejs-client/blob/HEAD/CHANGELOG.md#12500-2023-08-15)
##### ⚠ BREAKING CHANGES
- **gkehub:** This release has breaking changes.
- **contentwarehouse:** This release has breaking changes.
- **bigquery:** This release has breaking changes.
- **beyondcorp:** This release has breaking changes.
- **assuredworkloads:** This release has breaking changes.
##### Features
- **analyticsadmin:** update the API ([3bed127](3bed127d4e))
- **appengine:** update the API ([a8d4c48](a8d4c48bd1))
- **artifactregistry:** update the API ([2d1257d](2d1257d9ac))
- **assuredworkloads:** update the API ([f58a85a](f58a85a1ac))
- **beyondcorp:** update the API ([270693a](270693ad48))
- **bigquery:** update the API ([b0bc1f1](b0bc1f15a8))
- **binaryauthorization:** update the API ([2175fab](2175fab3e4))
- **cloudbuild:** update the API ([2413746](2413746386))
- **composer:** update the API ([d2322c2](d2322c2a50))
- **container:** update the API ([3ab84ca](3ab84caea9))
- **contentwarehouse:** update the API ([73f5d69](73f5d69b1d))
- **dataform:** update the API ([1f0c739](1f0c739684))
- **dataproc:** update the API ([1fc81ab](1fc81abff8))
- **dialogflow:** update the API ([6aba841](6aba841302))
- **discoveryengine:** update the API ([57a6bdd](57a6bdd926))
- **documentai:** update the API ([ae0e266](ae0e2664ae))
- **firebaseappcheck:** update the API ([13f8c86](13f8c865f8))
- **gkehub:** update the API ([7c7c561](7c7c5611a6))
- **healthcare:** update the API ([9dc7235](9dc723542d))
- **identitytoolkit:** update the API ([f15458e](f15458e813))
- **migrationcenter:** update the API ([43d3a7e](43d3a7e351))
- **monitoring:** update the API ([d6ab1de](d6ab1de97a))
- **networkmanagement:** update the API ([b00b4c3](b00b4c39b0))
- **paymentsresellersubscription:** update the API ([fa9bc92](fa9bc92c28))
- **redis:** update the API ([633a71b](633a71b75e))
- regenerate index files ([1b979cb](1b979cb4bd))
- **run:** update the API ([2dc654e](2dc654e314))
- **vmmigration:** update the API ([433922a](433922ae81))
##### Bug Fixes
- **accesscontextmanager:** update the API ([37483a5](37483a53c3))
- **advisorynotifications:** update the API ([5d47fbd](5d47fbd05f))
- **analyticsdata:** update the API ([fcd31de](fcd31debbc))
- **analyticshub:** update the API ([028a8f2](028a8f2845))
- **androidmanagement:** update the API ([b6e3344](b6e33442cb))
- **apigateway:** update the API ([28a0c2b](28a0c2b909))
- **apigeeregistry:** update the API ([f4b44ce](f4b44ce7ff))
- **batch:** update the API ([c0f6c8e](c0f6c8ebae))
- **bigqueryconnection:** update the API ([238464d](238464d37e))
- **chat:** update the API ([9bebe9d](9bebe9d01a))
- **cloudbilling:** update the API ([0a0d5e9](0a0d5e9f35))
- **clouddeploy:** update the API ([8efff9d](8efff9d26e))
- **cloudidentity:** update the API ([01762af](01762affc9))
- **cloudkms:** update the API ([3499c39](3499c393ef))
- **cloudsearch:** update the API ([25771c7](25771c752c))
- **cloudshell:** update the API ([dd761cd](dd761cdec6))
- **connectors:** update the API ([2a03080](2a03080ff2))
- **containeranalysis:** update the API ([4de5705](4de5705559))
- **datacatalog:** update the API ([c823e38](c823e38315))
- **datamigration:** update the API ([0b476bb](0b476bb46f))
- **dataplex:** update the API ([07737a9](07737a9c0b))
- **datastore:** update the API ([f5f7e0e](f5f7e0e81b))
- **datastream:** update the API ([d1efe13](d1efe137ee))
- **deps:** update dependency [@​google-cloud/local-auth](https://redirect.github.com/google-cloud/local-auth) to v3 ([b9e0f13](b9e0f133df))
- **dlp:** update the API ([66720df](66720df286))
- **eventarc:** update the API ([2a475fa](2a475faaef))
- **file:** update the API ([16d1c38](16d1c381e4))
- **firestore:** update the API ([25dd82f](25dd82f85c))
- **iam:** update the API ([df42895](df428953ea))
- **language:** update the API ([86d4072](86d4072801))
- **logging:** update the API ([5ce9916](5ce99164a4))
- **memcache:** update the API ([1c738c4](1c738c4e5f))
- **metastore:** update the API ([3045ac9](3045ac9077))
- **networkconnectivity:** update the API ([db2c560](db2c5609b8))
- **networkservices:** update the API ([c2ca6b5](c2ca6b5b29))
- **ondemandscanning:** update the API ([b5da2fb](b5da2fbde7))
- **osconfig:** update the API ([926f83d](926f83d571))
- **policysimulator:** update the API ([337d6d9](337d6d9bc2))
- **prod_tt_sasportal:** update the API ([cad4560](cad45600a1))
- **pubsublite:** update the API ([383264c](383264cadb))
- **pubsub:** update the API ([6c41abf](6c41abf474))
- **recommender:** update the API ([b7e0460](b7e04605e7))
- **sasportal:** update the API ([cd8a38c](cd8a38c750))
- **script:** update the API ([09d1558](09d1558a81))
- **secretmanager:** update the API ([fe01e40](fe01e40054))
- **securitycenter:** update the API ([0d66358](0d66358f76))
- **servicecontrol:** update the API ([ceadea7](ceadea74b3))
- **servicedirectory:** update the API ([c52f8c3](c52f8c3386))
- **servicemanagement:** update the API ([c5c135d](c5c135da55))
- **sheets:** update the API ([19e06a7](19e06a7c92))
- **speech:** update the API ([b75b27e](b75b27e0ad))
- **storagetransfer:** update the API ([29b6593](29b6593955))
- **tpu:** update the API ([e396d7e](e396d7e10d))
- **translate:** update the API ([5789f48](5789f485ea))
- **vault:** update the API ([6f14118](6f1411871c))
- **vision:** update the API ([8fd1995](8fd19953a1))
- **vpcaccess:** update the API ([6641889](6641889146))
- **workflows:** update the API ([5e9374a](5e9374afdc))
- **workstations:** update the API ([fefd54a](fefd54ada1))
</details>
---
### Configuration
📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update again.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box
---
This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/toeverything/AFFiNE).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yMDcuMSIsInVwZGF0ZWRJblZlciI6IjM5LjIwNy4xIiwidGFyZ2V0QnJhbmNoIjoiY2FuYXJ5IiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->