          if None in (section, title, default, info):
              raise ValueError("Default config items must have a section, title, defult and "
                               "information text")
          if not self.defaults.get(section, None):
              raise ValueError("Section does not exist: {}".format(section))
          if datatype not in (str, bool, float, int, list):
              raise ValueError("'datatype' must be one of str, bool, float or "
                               "int: {} - {}".format(section, title))
          if datatype in (float, int) and (rounding is None or min_max is None):
              raise ValueError("'rounding' and 'min_max' must be set for numerical options")
          if isinstance(datatype, list) and not choices:
              raise ValueError("'choices' must be defined for list based configuration items")
          if not isinstance(choices, (list, tuple)):
 
</s> remove         if None in (section, title, default, info):
            raise ValueError("Default config items must have a section, title, defult and "
                             "information text")
 </s> add         assert (section is not None and
                title is not None and
                default is not None and
                info is not None), ("Default config items must have a section, title, defult and "
                                    "information text") </s> remove         if not isinstance(choices, (list, tuple)):
            raise ValueError("'choices' must be a list or tuple")

        info = self.expand_helptext(info, choices, default, datatype, min_max, fixed)
        self.defaults[section][title] = {"default": default,
                                         "helptext": info,
                                         "type": datatype,
                                         "rounding": rounding,
                                         "min_max": min_max,
                                         "choices": choices,
                                         "gui_radio": gui_radio,
                                         "fixed": fixed,
                                         "group": group}

    @staticmethod
    def expand_helptext(helptext, choices, default, datatype, min_max, fixed):
 </s> add         if choices != "colorchooser" and not isinstance(choices, (list, tuple)):
            raise ValueError("'choices' must be a list or tuple or 'colorchooser")

        info = self._expand_helptext(info, choices, default, datatype, min_max, fixed)
        self.defaults[section].items[title] = ConfigItem(default=default,
                                                         helptext=info,
                                                         datatype=datatype,
                                                         rounding=rounding or 0,
                                                         min_max=min_max,
                                                         choices=choices,
                                                         gui_radio=gui_radio,
                                                         fixed=fixed,
                                                         group=group)

    @classmethod
    def _expand_helptext(cls,
                         helptext: str,
                         choices: Union[str, List[str]],
                         default: ConfigValueType,
                         datatype: type,
                         min_max: Optional[Union[Tuple[int, int], Tuple[float, float]]],
                         fixed: bool) -> str: </s> remove         choices = list() if not choices else choices
 </s> add         choices = [] if not choices else choices </s> remove         if None in (title, info):
            raise ValueError("Default config sections must have a title and "
                             "information text")
        self.defaults[title] = OrderedDict()
        self.defaults[title]["helptext"] = info

    def add_item(self, section=None, title=None, datatype=str, default=None, info=None,
                 rounding=None, min_max=None, choices=None, gui_radio=False, fixed=True,
                 group=None):
 </s> add         self.defaults[title] = ConfigSection(helptext=info, items=OrderedDict())

    def add_item(self,
                 section: Optional[str] = None,
                 title: Optional[str] = None,
                 datatype: type = str,
                 default: ConfigValueType = None,
                 info: Optional[str] = None,
                 rounding: Optional[int] = None,
                 min_max: Optional[Union[Tuple[int, int], Tuple[float, float]]] = None,
                 choices: Optional[Union[str, List[str]]] = None,
                 gui_radio: bool = False,
                 fixed: bool = True,
                 group: Optional[str] = None) -> None: </s> remove     def add_section(self, title=None, info=None):
        """ Add a default section to config file """
 </s> add     def add_section(self, title: str, info: str) -> None:
        """ Add a default section to config file

        Parameters
        ----------
        title: str
            The title for the section
        info: str
            The helptext for the section
        """
            raise ValueError(f"Section does not exist: {section}")
        assert datatype in (str, bool, float, int, list), (
            f"'datatype' must be one of str, bool, float or int: {section} - {title}")
          if None in (section, title, default, info):
              raise ValueError("Default config items must have a section, title, defult and "
                               "information text")
          if not self.defaults.get(section, None):
            raise ValueError(f"Section does not exist: {section}")
        assert datatype in (str, bool, float, int, list), (
            f"'datatype' must be one of str, bool, float or int: {section} - {title}")
            raise ValueError(f"Section does not exist: {section}")
        assert datatype in (str, bool, float, int, list), (
            f"'datatype' must be one of str, bool, float or int: {section} - {title}")
            raise ValueError(f"Section does not exist: {section}")
        assert datatype in (str, bool, float, int, list), (
            f"'datatype' must be one of str, bool, float or int: {section} - {title}")
            raise ValueError(f"Section does not exist: {section}")
        assert datatype in (str, bool, float, int, list), (
            f"'datatype' must be one of str, bool, float or int: {section} - {title}")
          if datatype in (float, int) and (rounding is None or min_max is None):
              raise ValueError("'rounding' and 'min_max' must be set for numerical options")
          if isinstance(datatype, list) and not choices:
              raise ValueError("'choices' must be defined for list based configuration items")
          if not isinstance(choices, (list, tuple)):
keep keep keep keep replace replace replace replace keep keep keep keep keep
 Preview - Allow mask color/opacity configuration
  - typing: lib.config
  - docs: lib.config
  - bugfix: popup_configure - keep assets on top 
lib/config.py