## 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  #### 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 -->
292 lines
7.1 KiB
CSS
Executable File
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);
|
|
}
|