#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

name: Enhancement Request
title: "[Enhancement] Enhancement title"
description: I want to suggest an enhancement for this project
labels: [ "enhancement" ]
body:
  - type: markdown
    attributes:
      value: |
        For better global communication, Please write in English.

  - type: checkboxes
    attributes:
      label: Search before asking
      description: >
        Please make sure to search in the [issues](https://github.com/apache/eventmesh/issues?q=is%3Aissue)
        first to see whether the same issue was reported already.
      options:
        - label: >
            I had searched in the [issues](https://github.com/apache/eventmesh/issues?q=is%3Aissue) and found
            no similar issues.
          required: true

  - type: textarea
    attributes:
      label: Enhancement Request
      description: Describe the suggestion.
      placeholder: >
        First of all: Have you checked the docs https://github.com/apache/eventmesh/tree/develop/docs,
        or GitHub issues whether someone else has already reported your issue?
    validations:
      required: true

  - type: textarea
    attributes:
      label: Describe the solution you'd like
      description: Describe the suggestion.
      placeholder: >
        A clear and concise description of what you want to happen. Add any considered drawbacks.
    validations:
      required: true

  - type: checkboxes
    attributes:
      label: Are you willing to submit PR?
      description: >
        This is absolutely not required, but we are happy to guide you in the contribution process
        especially if you already have a good understanding of how to implement the fix.
      options:
        - label: Yes I am willing to submit a PR!

  - type: checkboxes
    attributes:
      label: Code of Conduct
      description: >
        The Code of Conduct helps create a safe space for everyone. We require that everyone agrees to it..
      options:
        - label: I agree to follow this project's [Code of Conduct](https://www.apache.org/foundation/policies/conduct) *
  - type: markdown
    attributes:
      value: "Thanks for completing our form!"
