We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Banner edit fields should be larger
### NetBox version

v3.1.6

### Feature type

Change to existing functionality

### Proposed functionality

Currently the Login, Top and Bottom banner edit fields in Config revisions are small input fields: they only show a few words at the time. It makes editing the banners somewhat hard.

I propose that the input fields are shown larger, preferably as multi-line input fields, to make it easier to edit the HTML-containing banners.

### Use case

Communicating upcoming maintenances or specific login instructions is easier when the banner input fields are easier to edit.

### Database changes

None

### External dependencies

None

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `netbox/netbox/config/parameters.py`
Content:
```
1 from django import forms
2 from django.contrib.postgres.forms import SimpleArrayField
3 
4 
5 class ConfigParam:
6 
7     def __init__(self, name, label, default, description='', field=None, field_kwargs=None):
8         self.name = name
9         self.label = label
10         self.default = default
11         self.field = field or forms.CharField
12         self.description = description
13         self.field_kwargs = field_kwargs or {}
14 
15 
16 PARAMS = (
17 
18     # Banners
19     ConfigParam(
20         name='BANNER_LOGIN',
21         label='Login banner',
22         default='',
23         description="Additional content to display on the login page"
24     ),
25     ConfigParam(
26         name='BANNER_TOP',
27         label='Top banner',
28         default='',
29         description="Additional content to display at the top of every page"
30     ),
31     ConfigParam(
32         name='BANNER_BOTTOM',
33         label='Bottom banner',
34         default='',
35         description="Additional content to display at the bottom of every page"
36     ),
37 
38     # IPAM
39     ConfigParam(
40         name='ENFORCE_GLOBAL_UNIQUE',
41         label='Globally unique IP space',
42         default=False,
43         description="Enforce unique IP addressing within the global table",
44         field=forms.BooleanField
45     ),
46     ConfigParam(
47         name='PREFER_IPV4',
48         label='Prefer IPv4',
49         default=False,
50         description="Prefer IPv4 addresses over IPv6",
51         field=forms.BooleanField
52     ),
53 
54     # Racks
55     ConfigParam(
56         name='RACK_ELEVATION_DEFAULT_UNIT_HEIGHT',
57         label='Rack unit height',
58         default=22,
59         description="Default unit height for rendered rack elevations",
60         field=forms.IntegerField
61     ),
62     ConfigParam(
63         name='RACK_ELEVATION_DEFAULT_UNIT_WIDTH',
64         label='Rack unit width',
65         default=220,
66         description="Default unit width for rendered rack elevations",
67         field=forms.IntegerField
68     ),
69 
70     # Security
71     ConfigParam(
72         name='ALLOWED_URL_SCHEMES',
73         label='Allowed URL schemes',
74         default=(
75             'file', 'ftp', 'ftps', 'http', 'https', 'irc', 'mailto', 'sftp', 'ssh', 'tel', 'telnet', 'tftp', 'vnc',
76             'xmpp',
77         ),
78         description="Permitted schemes for URLs in user-provided content",
79         field=SimpleArrayField,
80         field_kwargs={'base_field': forms.CharField()}
81     ),
82 
83     # Pagination
84     ConfigParam(
85         name='PAGINATE_COUNT',
86         label='Default page size',
87         default=50,
88         field=forms.IntegerField
89     ),
90     ConfigParam(
91         name='MAX_PAGE_SIZE',
92         label='Maximum page size',
93         default=1000,
94         field=forms.IntegerField
95     ),
96 
97     # Validation
98     ConfigParam(
99         name='CUSTOM_VALIDATORS',
100         label='Custom validators',
101         default={},
102         description="Custom validation rules (JSON)",
103         field=forms.JSONField
104     ),
105 
106     # NAPALM
107     ConfigParam(
108         name='NAPALM_USERNAME',
109         label='NAPALM username',
110         default='',
111         description="Username to use when connecting to devices via NAPALM"
112     ),
113     ConfigParam(
114         name='NAPALM_PASSWORD',
115         label='NAPALM password',
116         default='',
117         description="Password to use when connecting to devices via NAPALM"
118     ),
119     ConfigParam(
120         name='NAPALM_TIMEOUT',
121         label='NAPALM timeout',
122         default=30,
123         description="NAPALM connection timeout (in seconds)",
124         field=forms.IntegerField
125     ),
126     ConfigParam(
127         name='NAPALM_ARGS',
128         label='NAPALM arguments',
129         default={},
130         description="Additional arguments to pass when invoking a NAPALM driver (as JSON data)",
131         field=forms.JSONField
132     ),
133 
134     # Miscellaneous
135     ConfigParam(
136         name='MAINTENANCE_MODE',
137         label='Maintenance mode',
138         default=False,
139         description="Enable maintenance mode",
140         field=forms.BooleanField
141     ),
142     ConfigParam(
143         name='GRAPHQL_ENABLED',
144         label='GraphQL enabled',
145         default=True,
146         description="Enable the GraphQL API",
147         field=forms.BooleanField
148     ),
149     ConfigParam(
150         name='CHANGELOG_RETENTION',
151         label='Changelog retention',
152         default=90,
153         description="Days to retain changelog history (set to zero for unlimited)",
154         field=forms.IntegerField
155     ),
156     ConfigParam(
157         name='MAPS_URL',
158         label='Maps URL',
159         default='https://maps.google.com/?q=',
160         description="Base URL for mapping geographic locations"
161     ),
162 
163 )
164
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/netbox/netbox/config/parameters.py b/netbox/netbox/config/parameters.py
--- a/netbox/netbox/config/parameters.py
+++ b/netbox/netbox/config/parameters.py
@@ -20,19 +20,28 @@
         name='BANNER_LOGIN',
         label='Login banner',
         default='',
-        description="Additional content to display on the login page"
+        description="Additional content to display on the login page",
+        field_kwargs={
+            'widget': forms.Textarea(),
+        },
     ),
     ConfigParam(
         name='BANNER_TOP',
         label='Top banner',
         default='',
-        description="Additional content to display at the top of every page"
+        description="Additional content to display at the top of every page",
+        field_kwargs={
+            'widget': forms.Textarea(),
+        },
     ),
     ConfigParam(
         name='BANNER_BOTTOM',
         label='Bottom banner',
         default='',
-        description="Additional content to display at the bottom of every page"
+        description="Additional content to display at the bottom of every page",
+        field_kwargs={
+            'widget': forms.Textarea(),
+        },
     ),
 
     # IPAM

{"golden_diff": "diff --git a/netbox/netbox/config/parameters.py b/netbox/netbox/config/parameters.py\n--- a/netbox/netbox/config/parameters.py\n+++ b/netbox/netbox/config/parameters.py\n@@ -20,19 +20,28 @@\n         name='BANNER_LOGIN',\n         label='Login banner',\n         default='',\n-        description=\"Additional content to display on the login page\"\n+        description=\"Additional content to display on the login page\",\n+        field_kwargs={\n+            'widget': forms.Textarea(),\n+        },\n     ),\n     ConfigParam(\n         name='BANNER_TOP',\n         label='Top banner',\n         default='',\n-        description=\"Additional content to display at the top of every page\"\n+        description=\"Additional content to display at the top of every page\",\n+        field_kwargs={\n+            'widget': forms.Textarea(),\n+        },\n     ),\n     ConfigParam(\n         name='BANNER_BOTTOM',\n         label='Bottom banner',\n         default='',\n-        description=\"Additional content to display at the bottom of every page\"\n+        description=\"Additional content to display at the bottom of every page\",\n+        field_kwargs={\n+            'widget': forms.Textarea(),\n+        },\n     ),\n \n     # IPAM\n", "issue": "Banner edit fields should be larger\n### NetBox version\n\nv3.1.6\n\n### Feature type\n\nChange to existing functionality\n\n### Proposed functionality\n\nCurrently the Login, Top and Bottom banner edit fields in Config revisions are small input fields: they only show a few words at the time. It makes editing the banners somewhat hard.\r\n\r\nI propose that the input fields are shown larger, preferably as multi-line input fields, to make it easier to edit the HTML-containing banners.\n\n### Use case\n\nCommunicating upcoming maintenances or specific login instructions is easier when the banner input fields are easier to edit.\n\n### Database changes\n\nNone\n\n### External dependencies\n\nNone\n", "before_files": [{"content": "from django import forms\nfrom django.contrib.postgres.forms import SimpleArrayField\n\n\nclass ConfigParam:\n\n    def __init__(self, name, label, default, description='', field=None, field_kwargs=None):\n        self.name = name\n        self.label = label\n        self.default = default\n        self.field = field or forms.CharField\n        self.description = description\n        self.field_kwargs = field_kwargs or {}\n\n\nPARAMS = (\n\n    # Banners\n    ConfigParam(\n        name='BANNER_LOGIN',\n        label='Login banner',\n        default='',\n        description=\"Additional content to display on the login page\"\n    ),\n    ConfigParam(\n        name='BANNER_TOP',\n        label='Top banner',\n        default='',\n        description=\"Additional content to display at the top of every page\"\n    ),\n    ConfigParam(\n        name='BANNER_BOTTOM',\n        label='Bottom banner',\n        default='',\n        description=\"Additional content to display at the bottom of every page\"\n    ),\n\n    # IPAM\n    ConfigParam(\n        name='ENFORCE_GLOBAL_UNIQUE',\n        label='Globally unique IP space',\n        default=False,\n        description=\"Enforce unique IP addressing within the global table\",\n        field=forms.BooleanField\n    ),\n    ConfigParam(\n        name='PREFER_IPV4',\n        label='Prefer IPv4',\n        default=False,\n        description=\"Prefer IPv4 addresses over IPv6\",\n        field=forms.BooleanField\n    ),\n\n    # Racks\n    ConfigParam(\n        name='RACK_ELEVATION_DEFAULT_UNIT_HEIGHT',\n        label='Rack unit height',\n        default=22,\n        description=\"Default unit height for rendered rack elevations\",\n        field=forms.IntegerField\n    ),\n    ConfigParam(\n        name='RACK_ELEVATION_DEFAULT_UNIT_WIDTH',\n        label='Rack unit width',\n        default=220,\n        description=\"Default unit width for rendered rack elevations\",\n        field=forms.IntegerField\n    ),\n\n    # Security\n    ConfigParam(\n        name='ALLOWED_URL_SCHEMES',\n        label='Allowed URL schemes',\n        default=(\n            'file', 'ftp', 'ftps', 'http', 'https', 'irc', 'mailto', 'sftp', 'ssh', 'tel', 'telnet', 'tftp', 'vnc',\n            'xmpp',\n        ),\n        description=\"Permitted schemes for URLs in user-provided content\",\n        field=SimpleArrayField,\n        field_kwargs={'base_field': forms.CharField()}\n    ),\n\n    # Pagination\n    ConfigParam(\n        name='PAGINATE_COUNT',\n        label='Default page size',\n        default=50,\n        field=forms.IntegerField\n    ),\n    ConfigParam(\n        name='MAX_PAGE_SIZE',\n        label='Maximum page size',\n        default=1000,\n        field=forms.IntegerField\n    ),\n\n    # Validation\n    ConfigParam(\n        name='CUSTOM_VALIDATORS',\n        label='Custom validators',\n        default={},\n        description=\"Custom validation rules (JSON)\",\n        field=forms.JSONField\n    ),\n\n    # NAPALM\n    ConfigParam(\n        name='NAPALM_USERNAME',\n        label='NAPALM username',\n        default='',\n        description=\"Username to use when connecting to devices via NAPALM\"\n    ),\n    ConfigParam(\n        name='NAPALM_PASSWORD',\n        label='NAPALM password',\n        default='',\n        description=\"Password to use when connecting to devices via NAPALM\"\n    ),\n    ConfigParam(\n        name='NAPALM_TIMEOUT',\n        label='NAPALM timeout',\n        default=30,\n        description=\"NAPALM connection timeout (in seconds)\",\n        field=forms.IntegerField\n    ),\n    ConfigParam(\n        name='NAPALM_ARGS',\n        label='NAPALM arguments',\n        default={},\n        description=\"Additional arguments to pass when invoking a NAPALM driver (as JSON data)\",\n        field=forms.JSONField\n    ),\n\n    # Miscellaneous\n    ConfigParam(\n        name='MAINTENANCE_MODE',\n        label='Maintenance mode',\n        default=False,\n        description=\"Enable maintenance mode\",\n        field=forms.BooleanField\n    ),\n    ConfigParam(\n        name='GRAPHQL_ENABLED',\n        label='GraphQL enabled',\n        default=True,\n        description=\"Enable the GraphQL API\",\n        field=forms.BooleanField\n    ),\n    ConfigParam(\n        name='CHANGELOG_RETENTION',\n        label='Changelog retention',\n        default=90,\n        description=\"Days to retain changelog history (set to zero for unlimited)\",\n        field=forms.IntegerField\n    ),\n    ConfigParam(\n        name='MAPS_URL',\n        label='Maps URL',\n        default='https://maps.google.com/?q=',\n        description=\"Base URL for mapping geographic locations\"\n    ),\n\n)\n", "path": "netbox/netbox/config/parameters.py"}], "after_files": [{"content": "from django import forms\nfrom django.contrib.postgres.forms import SimpleArrayField\n\n\nclass ConfigParam:\n\n    def __init__(self, name, label, default, description='', field=None, field_kwargs=None):\n        self.name = name\n        self.label = label\n        self.default = default\n        self.field = field or forms.CharField\n        self.description = description\n        self.field_kwargs = field_kwargs or {}\n\n\nPARAMS = (\n\n    # Banners\n    ConfigParam(\n        name='BANNER_LOGIN',\n        label='Login banner',\n        default='',\n        description=\"Additional content to display on the login page\",\n        field_kwargs={\n            'widget': forms.Textarea(),\n        },\n    ),\n    ConfigParam(\n        name='BANNER_TOP',\n        label='Top banner',\n        default='',\n        description=\"Additional content to display at the top of every page\",\n        field_kwargs={\n            'widget': forms.Textarea(),\n        },\n    ),\n    ConfigParam(\n        name='BANNER_BOTTOM',\n        label='Bottom banner',\n        default='',\n        description=\"Additional content to display at the bottom of every page\",\n        field_kwargs={\n            'widget': forms.Textarea(),\n        },\n    ),\n\n    # IPAM\n    ConfigParam(\n        name='ENFORCE_GLOBAL_UNIQUE',\n        label='Globally unique IP space',\n        default=False,\n        description=\"Enforce unique IP addressing within the global table\",\n        field=forms.BooleanField\n    ),\n    ConfigParam(\n        name='PREFER_IPV4',\n        label='Prefer IPv4',\n        default=False,\n        description=\"Prefer IPv4 addresses over IPv6\",\n        field=forms.BooleanField\n    ),\n\n    # Racks\n    ConfigParam(\n        name='RACK_ELEVATION_DEFAULT_UNIT_HEIGHT',\n        label='Rack unit height',\n        default=22,\n        description=\"Default unit height for rendered rack elevations\",\n        field=forms.IntegerField\n    ),\n    ConfigParam(\n        name='RACK_ELEVATION_DEFAULT_UNIT_WIDTH',\n        label='Rack unit width',\n        default=220,\n        description=\"Default unit width for rendered rack elevations\",\n        field=forms.IntegerField\n    ),\n\n    # Security\n    ConfigParam(\n        name='ALLOWED_URL_SCHEMES',\n        label='Allowed URL schemes',\n        default=(\n            'file', 'ftp', 'ftps', 'http', 'https', 'irc', 'mailto', 'sftp', 'ssh', 'tel', 'telnet', 'tftp', 'vnc',\n            'xmpp',\n        ),\n        description=\"Permitted schemes for URLs in user-provided content\",\n        field=SimpleArrayField,\n        field_kwargs={'base_field': forms.CharField()}\n    ),\n\n    # Pagination\n    ConfigParam(\n        name='PAGINATE_COUNT',\n        label='Default page size',\n        default=50,\n        field=forms.IntegerField\n    ),\n    ConfigParam(\n        name='MAX_PAGE_SIZE',\n        label='Maximum page size',\n        default=1000,\n        field=forms.IntegerField\n    ),\n\n    # Validation\n    ConfigParam(\n        name='CUSTOM_VALIDATORS',\n        label='Custom validators',\n        default={},\n        description=\"Custom validation rules (JSON)\",\n        field=forms.JSONField\n    ),\n\n    # NAPALM\n    ConfigParam(\n        name='NAPALM_USERNAME',\n        label='NAPALM username',\n        default='',\n        description=\"Username to use when connecting to devices via NAPALM\"\n    ),\n    ConfigParam(\n        name='NAPALM_PASSWORD',\n        label='NAPALM password',\n        default='',\n        description=\"Password to use when connecting to devices via NAPALM\"\n    ),\n    ConfigParam(\n        name='NAPALM_TIMEOUT',\n        label='NAPALM timeout',\n        default=30,\n        description=\"NAPALM connection timeout (in seconds)\",\n        field=forms.IntegerField\n    ),\n    ConfigParam(\n        name='NAPALM_ARGS',\n        label='NAPALM arguments',\n        default={},\n        description=\"Additional arguments to pass when invoking a NAPALM driver (as JSON data)\",\n        field=forms.JSONField\n    ),\n\n    # Miscellaneous\n    ConfigParam(\n        name='MAINTENANCE_MODE',\n        label='Maintenance mode',\n        default=False,\n        description=\"Enable maintenance mode\",\n        field=forms.BooleanField\n    ),\n    ConfigParam(\n        name='GRAPHQL_ENABLED',\n        label='GraphQL enabled',\n        default=True,\n        description=\"Enable the GraphQL API\",\n        field=forms.BooleanField\n    ),\n    ConfigParam(\n        name='CHANGELOG_RETENTION',\n        label='Changelog retention',\n        default=90,\n        description=\"Days to retain changelog history (set to zero for unlimited)\",\n        field=forms.IntegerField\n    ),\n    ConfigParam(\n        name='MAPS_URL',\n        label='Maps URL',\n        default='https://maps.google.com/?q=',\n        description=\"Base URL for mapping geographic locations\"\n    ),\n\n)\n", "path": "netbox/netbox/config/parameters.py"}]}