PromucFlow_constructor/app/client/src/index.css
Abhinav Jha 1ea5938cef
feat: Asymmetric padding in Anvil (#30964)
## Description
To make the Anvil layout system capable of rendering dense layouts,
we're using asymmetric padding to remove paddings when not necessary. It
works as follows
- If a section doesn't have a background, it doesn't have a padding
- If all zones in a section don't have a background, they all don't have
vertical padding

Other changes:
- Moved the logic for clearing all selections on click of Canvas from
`AnvilCanvas` to `AnvilMainCanvas`, as it is only necessary in the
editor.
- Removed default `min-height` from widgets so that changes in padding
don't misalign widgets
- Changed the selection borders to use 2px borders instead of box
shadows.
- Removed borders around widget name component
- Removed elevation shadows from zones and sections
- Removed the zone widget from showing up in the widgets panel

#### PR fixes following issue(s)
Fixes #31103

#### Media
![Screenshot 2024-02-13 at 10 37
23 PM](https://github.com/appsmithorg/appsmith/assets/103687/db1aa6bb-516d-48a8-aea9-c3af9c0d8d16)

#### Type of change
- Bug fix (non-breaking change which fixes an issue)
- New feature (non-breaking change which adds functionality)
## Testing
#### How Has This Been Tested?
- [x] Manual
- [ ] JUnit
- [ ] Jest
- [ ] Cypress

## 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:
- [ ] [Speedbreak
features](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#speedbreakers-)
have been covered
- [ ] Test plan covers all impacted features and [areas of
interest](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#areas-of-interest-)
- [ ] Test plan has been peer reviewed by project stakeholders and other
QA members
- [ ] Manually tested functionality on DP
- [ ] We had an implementation alignment call with stakeholders post QA
Round 2
- [ ] Cypress test cases have been added and approved by SDET/manual QA
- [ ] Added `Test Plan Approved` label after Cypress tests were reviewed
- [ ] Added `Test Plan Approved` label after JUnit tests were reviewed


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

- **New Features**
- Introduced a new click event listener in `AnvilMainCanvas` for
clearing selections when clicking outside a widget.
    - Added a new constant `AnvilCanvasClassName` in `constants.ts`.

- **Refactor**
- Simplified `AnvilCanvas` component by using `React.forwardRef` and
updating event handling.
- Updated logic in `useClickToClearSelections.ts` for more dynamic click
event handling.
- Enhanced `AnvilMainCanvas` with improved event handling using hooks.

- **Bug Fixes**
- Addressed issues with widget selection and border styles for a better
user experience.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2024-02-16 17:13:37 +05:30

292 lines
7.1 KiB
CSS
Executable File

@import "~normalize.css";
@import "~@blueprintjs/core/lib/css/blueprint.css";
@import "~@blueprintjs/icons/lib/css/blueprint-icons.css";
@import "~design-system-old/build/css/design-system-old.css";
@import "~design-system/build/css/design-system.css";
@import "theme/colors.css";
@import "theme/defaultTheme.css";
@import "theme/wds.css";
@import "assets/fonts/custom/index.css";
@import "assets/fonts/google/index.css";
:root {
/* TODO: This needs to be fixed! This override is to maintain branding changes. */
--ads-color-background-secondary: var(--ads-v2-color-bg-subtle);
/* All on canvas ui need to be above other editor elements
This includes the Modal overlay.
The maximum value of z-index in the theme is 9999.
This value makes sure that on-canvas ui is always above editor elements
*/
--on-canvas-ui-z-index: 999999;
}
body {
margin: 0;
padding: 0;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
background-color: #fff !important;
color: var(--ads-v2-color-fg);
}
body.dragging * {
cursor: grabbing !important;
}
/**
Disable outline completely from all components
*/
:focus,
:focus-visible {
outline: none !important;
outline-offset: 0 !important;
}
/**
Disable outline for adsv2 select component
*/
.ads-v2-select.rc-select-focused {
outline: none !important;
outline-offset: 0 !important;
}
#root.overlay {
opacity: 0;
pointer-events: none;
}
code {
font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New",
monospace;
}
div.bp3-select-popover .bp3-popover-content {
padding: 0;
}
span.bp3-popover-target {
display: flex;
width: 100%;
}
span.bp3-popover-target > * {
flex-grow: 1;
}
.bp3-popover,
.bp3-popover2 {
box-shadow: var(--ads-v2-shadow-popovers) !important;
}
.bp3-popover2-content {
border-radius: var(--ads-v2-border-radius) !important;
}
.action-selector-popup {
background-color: var(--ads-v2-color-bg);
border-radius: var(--ads-v2-border-radius) !important;
border: 1px solid var(--ads-v2-color-border-muted) !important;
}
.action-selector-popup span.bp3-popover-target > * {
max-width: 100%;
}
add-action.disabled span {
cursor: not-allowed;
}
.action-selector-popup .bp3-button-text {
text-overflow: ellipsis;
overflow: hidden;
min-width: 0;
}
/**
action selector block styles
**/
.bp3-submenu.bp3-popover > .bp3-popover-content {
box-shadow: none;
}
.action-card-border {
border-color: var(--ads-v2-color-border);
}
.action-card-next-selected {
border-bottom: 1px solid var(--ads-v2-color-border-emphasis-plus);
}
.action-card-border-selected {
border-color: var(--ads-v2-color-border-emphasis-plus) !important;
}
.action-card-last-block {
border-radius: 0px 0px var(--ads-v2-border-radius) var(--ads-v2-border-radius);
}
.main-block-radius {
border-radius: var(--ads-v2-border-radius);
}
.main-block-radius-selected {
border-radius: var(--ads-v2-border-radius) var(--ads-v2-border-radius) 0px 0px;
}
.bp3-popover.bp3-minimal.bp3-submenu {
padding-right: 0px;
}
div.bp3-popover-arrow {
display: none;
}
.bp3-button.bp3-loading {
cursor: default !important;
}
.display-none {
display: none;
}
.t--editor-appname-menu-portal {
z-index: 9 !important;
}
.bp3-popover .bp3-input {
outline: 0;
box-shadow: none;
border: 1px solid var(--ads-v2-color-border);
border-radius: var(--ads-v2-border-radius) !important;
}
.bp3-popover .bp3-input:focus {
border-color: var(--ads-v2-color-border-emphasis);
outline: 0;
}
.bp3-popover.bp3-minimal {
margin-top: 8px !important;
}
.bp3-popover.bp3-minimal.action-selector-dropdown {
margin-top: 0px !important;
}
.layout-control.bp3-popover.bp3-minimal {
margin-top: 8px !important;
}
.bp3-popover.none-shadow-popover {
box-shadow: none;
border: 0px;
}
.bp3-datepicker {
border-radius: 0 !important;
}
/* making both the Modal layer and the Dropdown layer */
.bp3-modal-widget,
.appsmith_widget_0 > .bp3-portal {
z-index: 2 !important;
}
/* Portals on the Modal widget */
.bp3-modal-widget .bp3-portal {
z-index: 21 !important;
}
.bp3-popover2-content {
background-color: var(--ads-v2-color-bg) !important;
border-radius: var(--ads-v2-border-radius) !important;
}
.bp3-overlay-backdrop {
background-color: rgba(16, 22, 26, 0.7) !important;
}
.bp3-overlay-zindex {
z-index: 20 !important;
}
/** color picker input control */
.color-picker-input,
.color-picker-input > .bp3-popover-content {
border-radius: var(--ads-v2-border-radius) !important;
}
.color-picker-input {
box-shadow: var(--ads-v2-shadow-popovers) !important;
}
.icon-select-popover,
.icon-select-popover > .bp3-popover-content {
border-radius: var(--ads-v2-border-radius) !important;
}
.icon-select-popover {
box-shadow: var(--ads-v2-shadow-popovers) !important;
}
.error-menuitem {
color: var(--ads-v2-color-fg-error) !important;
}
.error-menuitem > .ads-v2-menu__menu-item-children {
color: var(--ads-v2-color-fg-error) !important;
}
.error-menuitem:hover:not([data-disabled]),
.error-menuitem:focus-visible {
background-color: var(--ads-v2-color-red-50) !important;
}
.error-menuitem:active:not([data-disabled]) {
background-color: var(--ads-v2-color-red-100) !important;
}
.menuitem-nohover:hover {
background-color: transparent !important;
cursor: default !important;
}
.react-datepicker__children-container {
margin-top: -10px !important;
}
.reconnect-datasource-modal {
z-index: 9 !important;
}
/** Conditional vertical margin applied to widgets.
If in a row of widgets (.aligned-widget-row), one of the widgets has a label ([data-field-label-wrapper]), then
all widgets (.anvil-widget-wrapper) in the row other than the widget with the label, will shift down using the
margin-block-start property. This is to ensure that the widgets are aligned vertically.
The value of the margin-block-start property is calculated based on the spacing tokens used by the labels in input like components
*/
.aligned-widget-row:has(.anvil-widget-wrapper [data-field-label-wrapper])
.anvil-widget-wrapper:not(:has([data-field-label-wrapper])) {
margin-block-start: calc(var(--inner-spacing-2) + var(--sizing-3));
}
/** Asymmetric Padding
If a section (has div[data-elevation="false"][elevation="1"]) does not have elevation,
then the padding is set to 0.
elevation="1" is used to denote that the section has elevation.
*/
div.anvil-widget-wrapper:has(div[data-elevation="false"][elevation="1"]) {
padding: var(--outer-sizing-0);
}
/** Asymmetric Padding
If none of the zones (has div[data-elevation="false"][elevation="2"]) in a section have elevation,
then the vertical padding is set to 0 for all zones.
elevation="2" is used to denote that the zone has elevation.
Note: we've used `div.anvil-widget-wrapper:has(div[data-elevation])` to select all zones
because today, we don't have nested sections. So, any widget that has `data-elevation` in another widget that has `data-elevation`
will be a zone.
*/
div.anvil-widget-wrapper:not(:has(div[data-elevation="true"][elevation="2"]))
div.anvil-widget-wrapper:has(div[data-elevation]) {
padding-block: var(--outer-sizing-0);
}