make property

({T Function<T extends Adornment>(Make cls, [Iterable? initializers]) $1, T Function<T extends Panel>(MakeOptions cls, [Iterable? initializers]) $2, T Function<T extends GraphObject>(String cls, [Iterable? initializers]) $3, dynamic Function<CT extends ConstructorType<CT>>(CT cls, [Iterable? initializers]) $4}) get make

Overload accessor: $1, $2, $3, $4

Implementation

static ({
  /// This static function builds an object given its class and additional arguments
  /// providing initial properties or GraphObjects that become Panel elements.
  ///
  /// The first argument must be the class type or the name of a class or the name of a predefined kind of Panel.
  /// This function will construct a new instance of that type and use the rest of the arguments to initialize the object.
  /// The first argument cannot be a regular Object (such as a GraphObject) that you are trying to initialize;
  /// for that you can call #setProperties or Diagram#setProperties, although that would
  /// be less efficient than setting properties directly.
  ///
  /// If an initializer argument is an enumerated value, this tries to set the property that seems most appropriate.
  ///
  /// If an initializer argument is a string, this sets a particular property depending on the type of object being built.
  ///   - If the object is a TextBlock, it sets TextBlock#text.
  ///   - If the object is a Shape, it sets Shape#figure.
  ///   - If the object is a Picture, it sets Picture#source.
  ///   - If the object is a Panel (including Part, Node, or Group), it sets Panel#type.
  ///
  /// If an initializer argument is a particular kind of object, this can add that object to the object being built.
  ///   - GraphObjects and RowColumnDefinitions can only be added as elements of Panels.
  ///   - Bindings can only be applied to GraphObjects and RowColumnDefinitions.
  ///   - PathFigures can only be added to Geometry objects.
  ///   - PathSegments can only be added to PathFigure objects.
  ///   - Regular JavaScript Arrays provide a sequence of initializer arguments.
  ///   - Regular JavaScript objects provide property/value pairs that are set on the object being built.
  ///
  /// When the initializer argument is a plain JavaScript Object, there are several ways that that object's properties are applied.
  /// If the property name is a string with a period inside it, this has a special meaning if the object is a Panel or a Diagram.
  /// At the current time only a single period separator is valid syntax for a property string, and it is valid only on Panels and Diagrams.
  ///
  /// For Panels, the substring before the period is used as the name passed to Panel#findObject
  /// to get the actual object on which to set the property, which is the substring after the period.
  /// This is normally useful only on the predefined Panels:
  ///   - a **"Button"** has a Shape named "ButtonBorder" surrounding the content of the Panel.
  ///   - a **"TreeExpanderButton"** has a "ButtonBorder" Shape and a "ButtonIcon" Shape that is the plus-or-minus sign.
  ///   - a **"SubGraphExpanderButton"** has a "ButtonBorder" Shape and a "ButtonIcon" Shape that is the plus-or-minus sign.
  ///   - a **"ContextMenuButton"** has a Shape named "ButtonBorder" surrounding the content of the Panel.
  ///
  /// But you can define your own names that GraphObject.make can build by calling the static function GraphObject.defineBuilder.
  ///
  /// For Diagrams, the substring before the period is used as the name of a property on the Diagram itself
  /// to get the actual object on which to set the property.
  /// As a special case, if such a property value does not exist on the Diagram, it looks on the Diagram#toolManager.
  /// See some examples below.
  ///
  /// Also for Diagrams, and only for Diagrams, if the property name is the name of a DiagramEvent,
  /// the property value must be a DiagramEvent listener function, and Diagram#addDiagramListener is called
  /// using that DiagramEvent name and that function.
  /// Note that all DiagramEvent names are capitalized and do not contain any periods,
  /// so there cannot be any name conflicts with any properties on Diagram or ToolManager.
  /// Although you can register multiple listeners for the same DiagramEvent names, due to JavaScript limitations
  /// those need to be declared using separate JavaScript objects, because JavaScript does not permit duplicate property names
  /// in an Object literal.
  ///
  /// Furthermore for Diagrams, if the property name is `"Changed"` or `"ModelChanged"`,
  /// the property value must be a ChangedEvent listener function, which is called with a ChangedEvent argument.
  /// When the property name is `"Changed"`, it calls Diagram#addChangedListener,
  /// notifying about changes to the Diagram or its Layers or GraphObjects.
  /// When the property name is `"ModelChanged"`, it calls Model#addChangedListener on the Diagram#model,
  /// resulting in notifications about changes to the Model or its data.
  /// This is handy because the Diagram#model property setter will automatically call
  /// Model#removeChangedListener on the old model, thereby avoiding any overhead if there are any
  /// more changes to the old model and also avoiding a reference to the listener which might cause garbage collection retention.
  /// It also will call Model#addChangedListener on the new model, helping implement the same behavior with the new model.
  ///
  /// If the property name is a number and if the object being constructed is a Brush,
  /// the number and value are added to the Brush by calling Brush#addColorStop.
  ///
  /// Otherwise the property name is used as a regular property name on the object being built.
  /// This tries to do some property name and value checking:
  /// when a property is not defined on the object being built, it will signal an error.
  /// Many typos can be found this way that would be ignored by JavaScript code.
  ///
  /// If the property name begins with an underscore, this will not complain about the property being undefined.
  /// Not only is that underscore property set on the object being built, but calls to #copy
  /// will also copy the values of such named properties to the new objects.
  ///
  /// In the samples and in the intro pages this function is called using the alias `$`.
  /// You can use a different short name if you would like to preserve the use of `$` for another JavaScript library.
  /// ```js
  ///  var $ = go.GraphObject.make;
  ///
  ///  var diagram =
  ///    $(go.Diagram, "myDiagramDiv",
  ///      {
  ///         // don't initialize some properties until after a new model has been loaded
  ///         "InitialLayoutCompleted": loadDiagramProperties,
  ///        allowZoom: false,  // don't allow the user to change the diagram's scale
  ///        "grid.visible": true,  // display a background grid for the whole diagram
  ///        "grid.gridCellSize": new go.Size(20, 20),
  ///        // allow double-click in background to create a new node
  ///        "clickCreatingTool.archetypeNodeData": { text: "Node" },
  ///        // allow Ctrl-G to call the groupSelection command
  ///        "commandHandler.archetypeGroupData":
  ///            { text: "Group", isGroup: true, color: "blue" },
  ///        "toolManager.hoverDelay": 100,  // how quickly tooltips are shown
  ///        // mouse wheel zooms instead of scrolls
  ///        "toolManager.mouseWheelBehavior": go.ToolManager.WheelZoom,
  ///        "commandHandler.copiesTree": true,  // for the copy command
  ///        "commandHandler.deletesTree": true, // for the delete command
  ///        "draggingTool.dragsTree": true,  // dragging for both move and copy
  ///        "draggingTool.isGridSnapEnabled": true,
  ///        layout: $(go.TreeLayout,
  ///                  { angle: 90, sorting: go.TreeLayout.SortingAscending })
  ///      });
  ///
  ///  diagram.nodeTemplate =
  ///    $(go.Node, "Auto",  // or go.Panel.Auto
  ///      new go.Binding("location", "loc", go.Point.parse).makeTwoWay(go.Point.stringify),
  ///      $(go.Shape, "RoundedRectangle",
  ///        {
  ///          fill: $(go.Brush, "Linear", { 0: "#FEC901", 1: "#FEA200" }),
  ///          stroke: "gray",
  ///          strokeWidth: 2,
  ///          strokeDashArray: [3, 3]
  ///        }),
  ///      $(go.TextBlock,
  ///        { margin: 5, font: "bold 12pt sans-serif" },
  ///        new go.Binding("text", "key"))
  ///    );
  /// ```
  /// <p class="boxread">
  /// See <a href="../../intro/buildingObjects.html">the Introduction page on building objects</a>
  /// for usage information and examples of GraphObject.make.
  T Function<T extends _i3.Adornment>(
    _i3.Make cls, [
    _i2.Iterable<_i2.dynamic>? initializers,
  ]) $1,

  /// This static function builds an object given its class and additional arguments
  /// providing initial properties or GraphObjects that become Panel elements.
  ///
  /// The first argument must be the class type or the name of a class or the name of a predefined kind of Panel.
  /// This function will construct a new instance of that type and use the rest of the arguments to initialize the object.
  /// The first argument cannot be a regular Object (such as a GraphObject) that you are trying to initialize;
  /// for that you can call #setProperties or Diagram#setProperties, although that would
  /// be less efficient than setting properties directly.
  ///
  /// If an initializer argument is an enumerated value, this tries to set the property that seems most appropriate.
  ///
  /// If an initializer argument is a string, this sets a particular property depending on the type of object being built.
  ///   - If the object is a TextBlock, it sets TextBlock#text.
  ///   - If the object is a Shape, it sets Shape#figure.
  ///   - If the object is a Picture, it sets Picture#source.
  ///   - If the object is a Panel (including Part, Node, or Group), it sets Panel#type.
  ///
  /// If an initializer argument is a particular kind of object, this can add that object to the object being built.
  ///   - GraphObjects and RowColumnDefinitions can only be added as elements of Panels.
  ///   - Bindings can only be applied to GraphObjects and RowColumnDefinitions.
  ///   - PathFigures can only be added to Geometry objects.
  ///   - PathSegments can only be added to PathFigure objects.
  ///   - Regular JavaScript Arrays provide a sequence of initializer arguments.
  ///   - Regular JavaScript objects provide property/value pairs that are set on the object being built.
  ///
  /// When the initializer argument is a plain JavaScript Object, there are several ways that that object's properties are applied.
  /// If the property name is a string with a period inside it, this has a special meaning if the object is a Panel or a Diagram.
  /// At the current time only a single period separator is valid syntax for a property string, and it is valid only on Panels and Diagrams.
  ///
  /// For Panels, the substring before the period is used as the name passed to Panel#findObject
  /// to get the actual object on which to set the property, which is the substring after the period.
  /// This is normally useful only on the predefined Panels:
  ///   - a **"Button"** has a Shape named "ButtonBorder" surrounding the content of the Panel.
  ///   - a **"TreeExpanderButton"** has a "ButtonBorder" Shape and a "ButtonIcon" Shape that is the plus-or-minus sign.
  ///   - a **"SubGraphExpanderButton"** has a "ButtonBorder" Shape and a "ButtonIcon" Shape that is the plus-or-minus sign.
  ///   - a **"ContextMenuButton"** has a Shape named "ButtonBorder" surrounding the content of the Panel.
  ///
  /// But you can define your own names that GraphObject.make can build by calling the static function GraphObject.defineBuilder.
  ///
  /// For Diagrams, the substring before the period is used as the name of a property on the Diagram itself
  /// to get the actual object on which to set the property.
  /// As a special case, if such a property value does not exist on the Diagram, it looks on the Diagram#toolManager.
  /// See some examples below.
  ///
  /// Also for Diagrams, and only for Diagrams, if the property name is the name of a DiagramEvent,
  /// the property value must be a DiagramEvent listener function, and Diagram#addDiagramListener is called
  /// using that DiagramEvent name and that function.
  /// Note that all DiagramEvent names are capitalized and do not contain any periods,
  /// so there cannot be any name conflicts with any properties on Diagram or ToolManager.
  /// Although you can register multiple listeners for the same DiagramEvent names, due to JavaScript limitations
  /// those need to be declared using separate JavaScript objects, because JavaScript does not permit duplicate property names
  /// in an Object literal.
  ///
  /// Furthermore for Diagrams, if the property name is `"Changed"` or `"ModelChanged"`,
  /// the property value must be a ChangedEvent listener function, which is called with a ChangedEvent argument.
  /// When the property name is `"Changed"`, it calls Diagram#addChangedListener,
  /// notifying about changes to the Diagram or its Layers or GraphObjects.
  /// When the property name is `"ModelChanged"`, it calls Model#addChangedListener on the Diagram#model,
  /// resulting in notifications about changes to the Model or its data.
  /// This is handy because the Diagram#model property setter will automatically call
  /// Model#removeChangedListener on the old model, thereby avoiding any overhead if there are any
  /// more changes to the old model and also avoiding a reference to the listener which might cause garbage collection retention.
  /// It also will call Model#addChangedListener on the new model, helping implement the same behavior with the new model.
  ///
  /// If the property name is a number and if the object being constructed is a Brush,
  /// the number and value are added to the Brush by calling Brush#addColorStop.
  ///
  /// Otherwise the property name is used as a regular property name on the object being built.
  /// This tries to do some property name and value checking:
  /// when a property is not defined on the object being built, it will signal an error.
  /// Many typos can be found this way that would be ignored by JavaScript code.
  ///
  /// If the property name begins with an underscore, this will not complain about the property being undefined.
  /// Not only is that underscore property set on the object being built, but calls to #copy
  /// will also copy the values of such named properties to the new objects.
  ///
  /// In the samples and in the intro pages this function is called using the alias `$`.
  /// You can use a different short name if you would like to preserve the use of `$` for another JavaScript library.
  /// ```js
  ///  var $ = go.GraphObject.make;
  ///
  ///  var diagram =
  ///    $(go.Diagram, "myDiagramDiv",
  ///      {
  ///         // don't initialize some properties until after a new model has been loaded
  ///         "InitialLayoutCompleted": loadDiagramProperties,
  ///        allowZoom: false,  // don't allow the user to change the diagram's scale
  ///        "grid.visible": true,  // display a background grid for the whole diagram
  ///        "grid.gridCellSize": new go.Size(20, 20),
  ///        // allow double-click in background to create a new node
  ///        "clickCreatingTool.archetypeNodeData": { text: "Node" },
  ///        // allow Ctrl-G to call the groupSelection command
  ///        "commandHandler.archetypeGroupData":
  ///            { text: "Group", isGroup: true, color: "blue" },
  ///        "toolManager.hoverDelay": 100,  // how quickly tooltips are shown
  ///        // mouse wheel zooms instead of scrolls
  ///        "toolManager.mouseWheelBehavior": go.ToolManager.WheelZoom,
  ///        "commandHandler.copiesTree": true,  // for the copy command
  ///        "commandHandler.deletesTree": true, // for the delete command
  ///        "draggingTool.dragsTree": true,  // dragging for both move and copy
  ///        "draggingTool.isGridSnapEnabled": true,
  ///        layout: $(go.TreeLayout,
  ///                  { angle: 90, sorting: go.TreeLayout.SortingAscending })
  ///      });
  ///
  ///  diagram.nodeTemplate =
  ///    $(go.Node, "Auto",  // or go.Panel.Auto
  ///      new go.Binding("location", "loc", go.Point.parse).makeTwoWay(go.Point.stringify),
  ///      $(go.Shape, "RoundedRectangle",
  ///        {
  ///          fill: $(go.Brush, "Linear", { 0: "#FEC901", 1: "#FEA200" }),
  ///          stroke: "gray",
  ///          strokeWidth: 2,
  ///          strokeDashArray: [3, 3]
  ///        }),
  ///      $(go.TextBlock,
  ///        { margin: 5, font: "bold 12pt sans-serif" },
  ///        new go.Binding("text", "key"))
  ///    );
  /// ```
  /// <p class="boxread">
  /// See <a href="../../intro/buildingObjects.html">the Introduction page on building objects</a>
  /// for usage information and examples of GraphObject.make.
  T Function<T extends _i3.Panel>(
    _i3.MakeOptions cls, [
    _i2.Iterable<_i2.dynamic>? initializers,
  ]) $2,

  /// This static function builds an object given its class and additional arguments
  /// providing initial properties or GraphObjects that become Panel elements.
  ///
  /// The first argument must be the class type or the name of a class or the name of a predefined kind of Panel.
  /// This function will construct a new instance of that type and use the rest of the arguments to initialize the object.
  /// The first argument cannot be a regular Object (such as a GraphObject) that you are trying to initialize;
  /// for that you can call #setProperties or Diagram#setProperties, although that would
  /// be less efficient than setting properties directly.
  ///
  /// If an initializer argument is an enumerated value, this tries to set the property that seems most appropriate.
  ///
  /// If an initializer argument is a string, this sets a particular property depending on the type of object being built.
  ///   - If the object is a TextBlock, it sets TextBlock#text.
  ///   - If the object is a Shape, it sets Shape#figure.
  ///   - If the object is a Picture, it sets Picture#source.
  ///   - If the object is a Panel (including Part, Node, or Group), it sets Panel#type.
  ///
  /// If an initializer argument is a particular kind of object, this can add that object to the object being built.
  ///   - GraphObjects and RowColumnDefinitions can only be added as elements of Panels.
  ///   - Bindings can only be applied to GraphObjects and RowColumnDefinitions.
  ///   - PathFigures can only be added to Geometry objects.
  ///   - PathSegments can only be added to PathFigure objects.
  ///   - Regular JavaScript Arrays provide a sequence of initializer arguments.
  ///   - Regular JavaScript objects provide property/value pairs that are set on the object being built.
  ///
  /// When the initializer argument is a plain JavaScript Object, there are several ways that that object's properties are applied.
  /// If the property name is a string with a period inside it, this has a special meaning if the object is a Panel or a Diagram.
  /// At the current time only a single period separator is valid syntax for a property string, and it is valid only on Panels and Diagrams.
  ///
  /// For Panels, the substring before the period is used as the name passed to Panel#findObject
  /// to get the actual object on which to set the property, which is the substring after the period.
  /// This is normally useful only on the predefined Panels:
  ///   - a **"Button"** has a Shape named "ButtonBorder" surrounding the content of the Panel.
  ///   - a **"TreeExpanderButton"** has a "ButtonBorder" Shape and a "ButtonIcon" Shape that is the plus-or-minus sign.
  ///   - a **"SubGraphExpanderButton"** has a "ButtonBorder" Shape and a "ButtonIcon" Shape that is the plus-or-minus sign.
  ///   - a **"ContextMenuButton"** has a Shape named "ButtonBorder" surrounding the content of the Panel.
  ///
  /// But you can define your own names that GraphObject.make can build by calling the static function GraphObject.defineBuilder.
  ///
  /// For Diagrams, the substring before the period is used as the name of a property on the Diagram itself
  /// to get the actual object on which to set the property.
  /// As a special case, if such a property value does not exist on the Diagram, it looks on the Diagram#toolManager.
  /// See some examples below.
  ///
  /// Also for Diagrams, and only for Diagrams, if the property name is the name of a DiagramEvent,
  /// the property value must be a DiagramEvent listener function, and Diagram#addDiagramListener is called
  /// using that DiagramEvent name and that function.
  /// Note that all DiagramEvent names are capitalized and do not contain any periods,
  /// so there cannot be any name conflicts with any properties on Diagram or ToolManager.
  /// Although you can register multiple listeners for the same DiagramEvent names, due to JavaScript limitations
  /// those need to be declared using separate JavaScript objects, because JavaScript does not permit duplicate property names
  /// in an Object literal.
  ///
  /// Furthermore for Diagrams, if the property name is `"Changed"` or `"ModelChanged"`,
  /// the property value must be a ChangedEvent listener function, which is called with a ChangedEvent argument.
  /// When the property name is `"Changed"`, it calls Diagram#addChangedListener,
  /// notifying about changes to the Diagram or its Layers or GraphObjects.
  /// When the property name is `"ModelChanged"`, it calls Model#addChangedListener on the Diagram#model,
  /// resulting in notifications about changes to the Model or its data.
  /// This is handy because the Diagram#model property setter will automatically call
  /// Model#removeChangedListener on the old model, thereby avoiding any overhead if there are any
  /// more changes to the old model and also avoiding a reference to the listener which might cause garbage collection retention.
  /// It also will call Model#addChangedListener on the new model, helping implement the same behavior with the new model.
  ///
  /// If the property name is a number and if the object being constructed is a Brush,
  /// the number and value are added to the Brush by calling Brush#addColorStop.
  ///
  /// Otherwise the property name is used as a regular property name on the object being built.
  /// This tries to do some property name and value checking:
  /// when a property is not defined on the object being built, it will signal an error.
  /// Many typos can be found this way that would be ignored by JavaScript code.
  ///
  /// If the property name begins with an underscore, this will not complain about the property being undefined.
  /// Not only is that underscore property set on the object being built, but calls to #copy
  /// will also copy the values of such named properties to the new objects.
  ///
  /// In the samples and in the intro pages this function is called using the alias `$`.
  /// You can use a different short name if you would like to preserve the use of `$` for another JavaScript library.
  /// ```js
  ///  var $ = go.GraphObject.make;
  ///
  ///  var diagram =
  ///    $(go.Diagram, "myDiagramDiv",
  ///      {
  ///         // don't initialize some properties until after a new model has been loaded
  ///         "InitialLayoutCompleted": loadDiagramProperties,
  ///        allowZoom: false,  // don't allow the user to change the diagram's scale
  ///        "grid.visible": true,  // display a background grid for the whole diagram
  ///        "grid.gridCellSize": new go.Size(20, 20),
  ///        // allow double-click in background to create a new node
  ///        "clickCreatingTool.archetypeNodeData": { text: "Node" },
  ///        // allow Ctrl-G to call the groupSelection command
  ///        "commandHandler.archetypeGroupData":
  ///            { text: "Group", isGroup: true, color: "blue" },
  ///        "toolManager.hoverDelay": 100,  // how quickly tooltips are shown
  ///        // mouse wheel zooms instead of scrolls
  ///        "toolManager.mouseWheelBehavior": go.ToolManager.WheelZoom,
  ///        "commandHandler.copiesTree": true,  // for the copy command
  ///        "commandHandler.deletesTree": true, // for the delete command
  ///        "draggingTool.dragsTree": true,  // dragging for both move and copy
  ///        "draggingTool.isGridSnapEnabled": true,
  ///        layout: $(go.TreeLayout,
  ///                  { angle: 90, sorting: go.TreeLayout.SortingAscending })
  ///      });
  ///
  ///  diagram.nodeTemplate =
  ///    $(go.Node, "Auto",  // or go.Panel.Auto
  ///      new go.Binding("location", "loc", go.Point.parse).makeTwoWay(go.Point.stringify),
  ///      $(go.Shape, "RoundedRectangle",
  ///        {
  ///          fill: $(go.Brush, "Linear", { 0: "#FEC901", 1: "#FEA200" }),
  ///          stroke: "gray",
  ///          strokeWidth: 2,
  ///          strokeDashArray: [3, 3]
  ///        }),
  ///      $(go.TextBlock,
  ///        { margin: 5, font: "bold 12pt sans-serif" },
  ///        new go.Binding("text", "key"))
  ///    );
  /// ```
  /// <p class="boxread">
  /// See <a href="../../intro/buildingObjects.html">the Introduction page on building objects</a>
  /// for usage information and examples of GraphObject.make.
  T Function<T extends _i3.GraphObject>(
    _i2.String cls, [
    _i2.Iterable<_i2.dynamic>? initializers,
  ]) $3,

  /// This static function builds an object given its class and additional arguments
  /// providing initial properties or GraphObjects that become Panel elements.
  ///
  /// The first argument must be the class type or the name of a class or the name of a predefined kind of Panel.
  /// This function will construct a new instance of that type and use the rest of the arguments to initialize the object.
  /// The first argument cannot be a regular Object (such as a GraphObject) that you are trying to initialize;
  /// for that you can call #setProperties or Diagram#setProperties, although that would
  /// be less efficient than setting properties directly.
  ///
  /// If an initializer argument is an enumerated value, this tries to set the property that seems most appropriate.
  ///
  /// If an initializer argument is a string, this sets a particular property depending on the type of object being built.
  ///   - If the object is a TextBlock, it sets TextBlock#text.
  ///   - If the object is a Shape, it sets Shape#figure.
  ///   - If the object is a Picture, it sets Picture#source.
  ///   - If the object is a Panel (including Part, Node, or Group), it sets Panel#type.
  ///
  /// If an initializer argument is a particular kind of object, this can add that object to the object being built.
  ///   - GraphObjects and RowColumnDefinitions can only be added as elements of Panels.
  ///   - Bindings can only be applied to GraphObjects and RowColumnDefinitions.
  ///   - PathFigures can only be added to Geometry objects.
  ///   - PathSegments can only be added to PathFigure objects.
  ///   - Regular JavaScript Arrays provide a sequence of initializer arguments.
  ///   - Regular JavaScript objects provide property/value pairs that are set on the object being built.
  ///
  /// When the initializer argument is a plain JavaScript Object, there are several ways that that object's properties are applied.
  /// If the property name is a string with a period inside it, this has a special meaning if the object is a Panel or a Diagram.
  /// At the current time only a single period separator is valid syntax for a property string, and it is valid only on Panels and Diagrams.
  ///
  /// For Panels, the substring before the period is used as the name passed to Panel#findObject
  /// to get the actual object on which to set the property, which is the substring after the period.
  /// This is normally useful only on the predefined Panels:
  ///   - a **"Button"** has a Shape named "ButtonBorder" surrounding the content of the Panel.
  ///   - a **"TreeExpanderButton"** has a "ButtonBorder" Shape and a "ButtonIcon" Shape that is the plus-or-minus sign.
  ///   - a **"SubGraphExpanderButton"** has a "ButtonBorder" Shape and a "ButtonIcon" Shape that is the plus-or-minus sign.
  ///   - a **"ContextMenuButton"** has a Shape named "ButtonBorder" surrounding the content of the Panel.
  ///
  /// But you can define your own names that GraphObject.make can build by calling the static function GraphObject.defineBuilder.
  ///
  /// For Diagrams, the substring before the period is used as the name of a property on the Diagram itself
  /// to get the actual object on which to set the property.
  /// As a special case, if such a property value does not exist on the Diagram, it looks on the Diagram#toolManager.
  /// See some examples below.
  ///
  /// Also for Diagrams, and only for Diagrams, if the property name is the name of a DiagramEvent,
  /// the property value must be a DiagramEvent listener function, and Diagram#addDiagramListener is called
  /// using that DiagramEvent name and that function.
  /// Note that all DiagramEvent names are capitalized and do not contain any periods,
  /// so there cannot be any name conflicts with any properties on Diagram or ToolManager.
  /// Although you can register multiple listeners for the same DiagramEvent names, due to JavaScript limitations
  /// those need to be declared using separate JavaScript objects, because JavaScript does not permit duplicate property names
  /// in an Object literal.
  ///
  /// Furthermore for Diagrams, if the property name is `"Changed"` or `"ModelChanged"`,
  /// the property value must be a ChangedEvent listener function, which is called with a ChangedEvent argument.
  /// When the property name is `"Changed"`, it calls Diagram#addChangedListener,
  /// notifying about changes to the Diagram or its Layers or GraphObjects.
  /// When the property name is `"ModelChanged"`, it calls Model#addChangedListener on the Diagram#model,
  /// resulting in notifications about changes to the Model or its data.
  /// This is handy because the Diagram#model property setter will automatically call
  /// Model#removeChangedListener on the old model, thereby avoiding any overhead if there are any
  /// more changes to the old model and also avoiding a reference to the listener which might cause garbage collection retention.
  /// It also will call Model#addChangedListener on the new model, helping implement the same behavior with the new model.
  ///
  /// If the property name is a number and if the object being constructed is a Brush,
  /// the number and value are added to the Brush by calling Brush#addColorStop.
  ///
  /// Otherwise the property name is used as a regular property name on the object being built.
  /// This tries to do some property name and value checking:
  /// when a property is not defined on the object being built, it will signal an error.
  /// Many typos can be found this way that would be ignored by JavaScript code.
  ///
  /// If the property name begins with an underscore, this will not complain about the property being undefined.
  /// Not only is that underscore property set on the object being built, but calls to #copy
  /// will also copy the values of such named properties to the new objects.
  ///
  /// In the samples and in the intro pages this function is called using the alias `$`.
  /// You can use a different short name if you would like to preserve the use of `$` for another JavaScript library.
  /// ```js
  ///  var $ = go.GraphObject.make;
  ///
  ///  var diagram =
  ///    $(go.Diagram, "myDiagramDiv",
  ///      {
  ///         // don't initialize some properties until after a new model has been loaded
  ///         "InitialLayoutCompleted": loadDiagramProperties,
  ///        allowZoom: false,  // don't allow the user to change the diagram's scale
  ///        "grid.visible": true,  // display a background grid for the whole diagram
  ///        "grid.gridCellSize": new go.Size(20, 20),
  ///        // allow double-click in background to create a new node
  ///        "clickCreatingTool.archetypeNodeData": { text: "Node" },
  ///        // allow Ctrl-G to call the groupSelection command
  ///        "commandHandler.archetypeGroupData":
  ///            { text: "Group", isGroup: true, color: "blue" },
  ///        "toolManager.hoverDelay": 100,  // how quickly tooltips are shown
  ///        // mouse wheel zooms instead of scrolls
  ///        "toolManager.mouseWheelBehavior": go.ToolManager.WheelZoom,
  ///        "commandHandler.copiesTree": true,  // for the copy command
  ///        "commandHandler.deletesTree": true, // for the delete command
  ///        "draggingTool.dragsTree": true,  // dragging for both move and copy
  ///        "draggingTool.isGridSnapEnabled": true,
  ///        layout: $(go.TreeLayout,
  ///                  { angle: 90, sorting: go.TreeLayout.SortingAscending })
  ///      });
  ///
  ///  diagram.nodeTemplate =
  ///    $(go.Node, "Auto",  // or go.Panel.Auto
  ///      new go.Binding("location", "loc", go.Point.parse).makeTwoWay(go.Point.stringify),
  ///      $(go.Shape, "RoundedRectangle",
  ///        {
  ///          fill: $(go.Brush, "Linear", { 0: "#FEC901", 1: "#FEA200" }),
  ///          stroke: "gray",
  ///          strokeWidth: 2,
  ///          strokeDashArray: [3, 3]
  ///        }),
  ///      $(go.TextBlock,
  ///        { margin: 5, font: "bold 12pt sans-serif" },
  ///        new go.Binding("text", "key"))
  ///    );
  /// ```
  /// <p class="boxread">
  /// See <a href="../../intro/buildingObjects.html">the Introduction page on building objects</a>
  /// for usage information and examples of GraphObject.make.
  _i2.dynamic Function<CT extends _i3.ConstructorType<CT>>(
    CT cls, [
    _i2.Iterable<_i2.dynamic>? initializers,
  ]) $4,
}) get make => (
      $1: _make$1,
      $2: _make$2,
      $3: _make$3,
      $4: _make$4,
    );