hunk.code_window:     Flux<Datasource> findAllByWorkspaceId(String workspaceId, AclPermission readDatasources);
       Flux<Datasource> saveAll(List<Datasource> datasourceList);
       Mono<Datasource> populateHintMessages(Datasource datasource);
   }
hunk.labels: keep keep keep keep add keep
hunk.after_edit:     Mono<Datasource> getValidDatasourceFromActionMono(ActionDTO actionDTO, AclPermission aclPermission);
  
hunk.file_path: app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/DatasourceServiceCE.java
hunk.type: add
file: import React from "react";
  import BaseWidget, { WidgetProps, WidgetState } from "widgets/BaseWidget";
  import { WidgetType } from "constants/WidgetConstants";
  import DividerComponent from "../component";
  
  import { ValidationTypes } from "constants/WidgetValidation";
  
  class DividerWidget extends BaseWidget<DividerWidgetProps, WidgetState> {
    static getPropertyPaneContentConfig() {
      return [
        {
          sectionName: "General",
          children: [
            {
              helpText: "Controls the visibility of the widget",
              propertyName: "isVisible",
              label: "Visible",
              controlType: "SWITCH",
              isJSConvertible: true,
              isBindProperty: true,
              isTriggerProperty: false,
              validation: { type: ValidationTypes.BOOLEAN },
            },
            {
              propertyName: "animateLoading",
              label: "Animate Loading",
              controlType: "SWITCH",
              helpText: "Controls the loading of the widget",
              defaultValue: true,
              isJSConvertible: true,
              isBindProperty: true,
              isTriggerProperty: false,
              validation: { type: ValidationTypes.BOOLEAN },
            },
          ],
        },
      ];
    }
  
    static getPropertyPaneStyleConfig() {
      return [
        {
          sectionName: "General",
          children: [
            {
              helpText: "Controls widget orientation",
              propertyName: "orientation",
              label: "Direction",
              controlType: "DROP_DOWN",
              options: [
                {
                  label: "Horizontal",
                  value: "horizontal",
                },
                {
                  label: "Vertical",
                  value: "vertical",
                },
              ],
              isJSConvertible: true,
              isBindProperty: true,
              isTriggerProperty: false,
              validation: { type: ValidationTypes.TEXT },
            },
          ],
        },
        {
          sectionName: "Stroke",
          children: [
            {
              helpText: "Controls the stroke color of divider",
              propertyName: "dividerColor",
              label: "Color",
              controlType: "COLOR_PICKER",
              isBindProperty: true,
              isJSConvertible: true,
              isTriggerProperty: false,
              validation: {
                type: ValidationTypes.TEXT,
                params: {
                  regex: /^(?![<|{{]).+/,
                },
              },
            },
            {
              helpText: "Controls the style of the divider",
              propertyName: "strokeStyle",
              label: "Style",
              controlType: "DROP_DOWN",
              options: [
                {
                  label: "Solid",
                  value: "solid",
                  icon: "cap-solid",
                  iconSize: "large",
                },
                {
                  label: "Dashed",
                  value: "dashed",
                  icon: "line-dashed",
                  iconSize: "large",
                },
                {
                  label: "Dotted",
                  value: "dotted",
                  icon: "line-dotted",
                  iconSize: "large",
                },
              ],
              isJSConvertible: true,
              isBindProperty: true,
              isTriggerProperty: false,
              validation: { type: ValidationTypes.TEXT },
            },
            {
              helpText: "Controls the thickness of divider",
              propertyName: "thickness",
              label: "Thickness",
              controlType: "INPUT_TEXT",
              placeholderText: "5",
              isBindProperty: true,
              isTriggerProperty: false,
              validation: {
                type: ValidationTypes.NUMBER,
                params: { min: 0, default: 0 },
              },
            },
          ],
        },
        {
          sectionName: "Cap",
          children: [
            {
              helpText: "Controls the type of divider cap",
              propertyName: "capType",
              label: "Cap",
              controlType: "DROP_DOWN",
              isJSConvertible: true,
              options: [
                {
                  label: "No Cap",
                  value: "nc",
                  icon: "cap-solid",
                  iconSize: "large",
                },
                {
                  label: "Arrow",
                  value: "arrow",
                  icon: "arrow-forward",
                  iconSize: "large",
                },
                {
                  label: "Dot",
                  value: "dot",
                  icon: "cap-dot",
                  iconSize: "large",
                },
              ],
              isBindProperty: true,
              isTriggerProperty: false,
              validation: {
                type: ValidationTypes.TEXT,
                params: {
                  allowedValues: ["nc", "arrow", "dot"],
                  required: true,
                  default: "nc",
                },
              },
            },
            {
              helpText:
                "Changes the position of the cap if a valid cap is selected.",
              propertyName: "capSide",
              label: "Cap Position",
              controlType: "ICON_TABS",
              options: [
                {
                  icon: "DIVIDER_CAP_LEFT",
                  value: -1,
                },
                {
                  icon: "DIVIDER_CAP_ALL",
                  value: 0,
                  width: 48,
                },
                {
                  icon: "DIVIDER_CAP_RIGHT",
                  value: 1,
                },
              ],
              defaultValue: "0",
              isBindProperty: false,
              isTriggerProperty: false,
            },
          ],
        },
      ];
    }
  
    getPageView() {
      return (
        <DividerComponent
          capSide={this.props.capSide}
          capType={this.props.capType}
          dividerColor={this.props.dividerColor}
          orientation={this.props.orientation}
          strokeStyle={this.props.strokeStyle}
          thickness={this.props.thickness}
        />
      );
    }
  
    static getWidgetType(): WidgetType {
      return "DIVIDER_WIDGET";
    }
  }
  
  export interface DividerWidgetProps extends WidgetProps {
    orientation: string;
    capType: string;
    capSide?: number;
    strokeStyle?: "solid" | "dashed" | "dotted";
    dividerColor?: string;
    thickness?: number;
  }
  
  export default DividerWidget;
  