## Description
This change is a refactor of widget selection logic. It consolidates all
the business logic to make it easy to maintain. It also improves the
performance a bit.
It touched a lot of features as we heavily rely on this
```
Select one
Select multiple with drag
Select multiple with shift
Select multiple with cmd/ctrl
Selections should be on the same level of hierarchy
Unselect all by clicking on the canvas
Unselect all by pressing esc
Select all with cmd + a
Paste in main container
Paste in another container
Undo
Redo
Modal Selection
Modal child selection
Context switching
cmd click
snipping mode
new widget suggestion
onboarding
```
> Refactor widget selection logic
Fixes#19570
## Type of change
- Refactor
## How Has This Been Tested?
All existing tests should pass
### Test Plan
> Add Testsmith test cases links that relate to this PR
### Issues raised during DP testing
https://github.com/appsmithorg/appsmith/pull/19643#issuecomment-1383570810https://github.com/appsmithorg/appsmith/pull/19643#issuecomment-1383607820https://github.com/appsmithorg/appsmith/pull/19643#issuecomment-1385095478
[Bug bash
issues](https://www.notion.so/appsmith/610aa302f3e146a7b090b7dc6bc63ef9?v=0d277a9b07bf4aac9d717bcaf138c33a)
## Checklist:
### Dev activity
- [ ] My code follows the style guidelines of this project
- [ ] I have performed a self-review of my own code
- [ ] I have commented my code, particularly in hard-to-understand areas
- [ ] I have made corresponding changes to the documentation
- [ ] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] New and existing unit tests pass locally with my changes
- [ ] PR is being merged under a feature flag
### QA activity:
- [ ] Test plan has been approved by relevant developers
- [ ] Test plan has been peer reviewed by QA
- [ ] Cypress test cases have been added and approved by either SDET or
manual QA
- [ ] Organized project review call with relevant stakeholders after
Round 1/2 of QA
- [ ] Added Test Plan Approved label after reveiwing all Cypress test
* Feat: Switch Group Widget
-- The first MVP of the widget
* feat: Switch Group Widget
-- Follow the same config and implementation as the other group widgets
* feat: Switch Group Widget
-- Elaborate the help text for defaultSelectedValues
* feat: Switch Group Widget
-- Add a widget icon
* feat: Switch Group Widget
-- Remove unnecessary property control at ItemsControl.tsx
-- Refactor some code snippets for higher code quality
-- Add basic cypress test cases
* fix: icon for the widget optimised & replaced
* feat: Switch Group Widget
-- Add a unit test for defaultSelectedValuesValidation
* feat: Switch Group Widget
-- Make the validation type for defaultSelectedValues property to ValidationTypes.ARRAY
-- Remove original validation function and its unit test
* feat: Switch Group Widget
-- Fix on typo
-- Fix on formatting issue
-- Change the help text for isRequired property
* feat: Switch Group Widget
-- Revert help text for isRequired property to the original one
* feat: Switch Group Widget
-- Set strict property to true on defaultSelectedValues
* feat: Switch group widget
-- Refactor utility function, getCamelCaseString
-- Add the corresponding test case
* feat: Switch group widget
-- Implement options property as a plain JS field
-- Reimplement update logic for selectedValues when options changes
-- Add a new utility function for checking equality of object arrays
-- Add a unit test for the above function
-- Rewrite the corresponding Cypress test cases
* feat: Switch Group Widget
-- Remove isArrayEqual utility function and directly use functions from lodash
* feat: Swtich Group Widget
-- Make selectedValues as a derived property
* feat: Switch Group Widget
-- Replace the widget icon
* feat: Switch Group Widget
-- Rewrite a test case for onSelectionChange property
* feat: Switch Group Widget
-- Remove redundant calls for openPropertyPane
* feat: Switch Group Widget
-- Remove closePropertyPane call from afterEach hook
* feat: Switch Group Widget
-- Change the selector for every switch element in onSelectionChange test case
* feat: Switch Group Widget
-- Fix on failed Cypress test case, adding closePropertyPane command to onSelectionChange
* feat: Switch Group Widget
-- Remove template literal from a selector
* feat: Switch Group Widget
-- Make click on onSelectionChange test case forced
* feat: Switch Group Widget
-- Fix on crash issue when editing on Options property
* feat: Switch Group Widget
-- Add the widget icon to show in entity explorer
* feat: Switch Group Widget
-- Fix on blue color on mouse down
-- Add a new property for alignment
Co-authored-by: somangshu <somangshu.goswami1508@gmail.com>