We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
`Placeholder` has no `disabled` `__init__` keyword parameter
It is intended that `disabled` is one of the "standard" keyword parameters for widgets in Textual; this seems to have never been added to `Placeholder`.

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `src/textual/widgets/_placeholder.py`
Content:
```
1 """Provides a Textual placeholder widget; useful when designing an app's layout."""
2 
3 from __future__ import annotations
4 
5 from itertools import cycle
6 from typing import TYPE_CHECKING, Iterator
7 from weakref import WeakKeyDictionary
8 
9 from typing_extensions import Literal, Self
10 
11 from .. import events
12 
13 if TYPE_CHECKING:
14     from ..app import RenderResult
15 
16 from ..css._error_tools import friendly_list
17 from ..reactive import Reactive, reactive
18 from ..widget import Widget
19 
20 if TYPE_CHECKING:
21     from textual.app import App
22 
23 PlaceholderVariant = Literal["default", "size", "text"]
24 """The different variants of placeholder."""
25 
26 _VALID_PLACEHOLDER_VARIANTS_ORDERED: list[PlaceholderVariant] = [
27     "default",
28     "size",
29     "text",
30 ]
31 _VALID_PLACEHOLDER_VARIANTS: set[PlaceholderVariant] = set(
32     _VALID_PLACEHOLDER_VARIANTS_ORDERED
33 )
34 _PLACEHOLDER_BACKGROUND_COLORS = [
35     "#881177",
36     "#aa3355",
37     "#cc6666",
38     "#ee9944",
39     "#eedd00",
40     "#99dd55",
41     "#44dd88",
42     "#22ccbb",
43     "#00bbcc",
44     "#0099cc",
45     "#3366bb",
46     "#663399",
47 ]
48 _LOREM_IPSUM_PLACEHOLDER_TEXT = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam feugiat ac elit sit amet accumsan. Suspendisse bibendum nec libero quis gravida. Phasellus id eleifend ligula. Nullam imperdiet sem tellus, sed vehicula nisl faucibus sit amet. Praesent iaculis tempor ultricies. Sed lacinia, tellus id rutrum lacinia, sapien sapien congue mauris, sit amet pellentesque quam quam vel nisl. Curabitur vulputate erat pellentesque mauris posuere, non dictum risus mattis."
49 
50 
51 class InvalidPlaceholderVariant(Exception):
52     """Raised when an invalid Placeholder variant is set."""
53 
54 
55 class Placeholder(Widget):
56     """A simple placeholder widget to use before you build your custom widgets.
57 
58     This placeholder has a couple of variants that show different data.
59     Clicking the placeholder cycles through the available variants, but a placeholder
60     can also be initialised in a specific variant.
61 
62     The variants available are:
63 
64     | Variant | Placeholder shows                              |
65     |---------|------------------------------------------------|
66     | default | Identifier label or the ID of the placeholder. |
67     | size    | Size of the placeholder.                       |
68     | text    | Lorem Ipsum text.                              |
69     """
70 
71     DEFAULT_CSS = """
72     Placeholder {
73         content-align: center middle;
74         overflow: hidden;
75         color: $text;
76     }
77     Placeholder.-text {
78         padding: 1;
79     }
80     """
81 
82     # Consecutive placeholders get assigned consecutive colors.
83     _COLORS: WeakKeyDictionary[App, Iterator[str]] = WeakKeyDictionary()
84     _SIZE_RENDER_TEMPLATE = "[b]{} x {}[/b]"
85 
86     variant: Reactive[PlaceholderVariant] = reactive[PlaceholderVariant]("default")
87 
88     _renderables: dict[PlaceholderVariant, str]
89 
90     def __init__(
91         self,
92         label: str | None = None,
93         variant: PlaceholderVariant = "default",
94         *,
95         name: str | None = None,
96         id: str | None = None,
97         classes: str | None = None,
98     ) -> None:
99         """Create a Placeholder widget.
100 
101         Args:
102             label: The label to identify the placeholder.
103                 If no label is present, uses the placeholder ID instead.
104             variant: The variant of the placeholder.
105             name: The name of the placeholder.
106             id: The ID of the placeholder in the DOM.
107             classes: A space separated string with the CSS classes
108                 of the placeholder, if any.
109         """
110         # Create and cache renderables for all the variants.
111         self._renderables = {
112             "default": label if label else f"#{id}" if id else "Placeholder",
113             "size": "",
114             "text": "\n\n".join(_LOREM_IPSUM_PLACEHOLDER_TEXT for _ in range(5)),
115         }
116 
117         super().__init__(name=name, id=id, classes=classes)
118 
119         self.variant = self.validate_variant(variant)
120         """The current variant of the placeholder."""
121 
122         # Set a cycle through the variants with the correct starting point.
123         self._variants_cycle = cycle(_VALID_PLACEHOLDER_VARIANTS_ORDERED)
124         while next(self._variants_cycle) != self.variant:
125             pass
126 
127     async def _on_compose(self, event: events.Compose) -> None:
128         """Set the color for this placeholder."""
129         colors = Placeholder._COLORS.setdefault(
130             self.app, cycle(_PLACEHOLDER_BACKGROUND_COLORS)
131         )
132         self.styles.background = f"{next(colors)} 50%"
133 
134     def render(self) -> RenderResult:
135         """Render the placeholder.
136 
137         Returns:
138             The value to render.
139         """
140         return self._renderables[self.variant]
141 
142     def cycle_variant(self) -> Self:
143         """Get the next variant in the cycle.
144 
145         Returns:
146             The `Placeholder` instance.
147         """
148         self.variant = next(self._variants_cycle)
149         return self
150 
151     def watch_variant(
152         self, old_variant: PlaceholderVariant, variant: PlaceholderVariant
153     ) -> None:
154         self.remove_class(f"-{old_variant}")
155         self.add_class(f"-{variant}")
156 
157     def validate_variant(self, variant: PlaceholderVariant) -> PlaceholderVariant:
158         """Validate the variant to which the placeholder was set."""
159         if variant not in _VALID_PLACEHOLDER_VARIANTS:
160             raise InvalidPlaceholderVariant(
161                 "Valid placeholder variants are "
162                 + f"{friendly_list(_VALID_PLACEHOLDER_VARIANTS)}"
163             )
164         return variant
165 
166     async def _on_click(self, _: events.Click) -> None:
167         """Click handler to cycle through the placeholder variants."""
168         self.cycle_variant()
169 
170     def _on_resize(self, event: events.Resize) -> None:
171         """Update the placeholder "size" variant with the new placeholder size."""
172         self._renderables["size"] = self._SIZE_RENDER_TEMPLATE.format(*event.size)
173         if self.variant == "size":
174             self.refresh()
175
```
--- 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/src/textual/widgets/_placeholder.py b/src/textual/widgets/_placeholder.py
--- a/src/textual/widgets/_placeholder.py
+++ b/src/textual/widgets/_placeholder.py
@@ -73,6 +73,10 @@
         content-align: center middle;
         overflow: hidden;
         color: $text;
+
+        &:disabled {
+            opacity: 0.7;
+        }
     }
     Placeholder.-text {
         padding: 1;
@@ -95,6 +99,7 @@
         name: str | None = None,
         id: str | None = None,
         classes: str | None = None,
+        disabled: bool = False,
     ) -> None:
         """Create a Placeholder widget.
 
@@ -106,6 +111,7 @@
             id: The ID of the placeholder in the DOM.
             classes: A space separated string with the CSS classes
                 of the placeholder, if any.
+            disabled: Whether the placeholder is disabled or not.
         """
         # Create and cache renderables for all the variants.
         self._renderables = {
@@ -114,7 +120,7 @@
             "text": "\n\n".join(_LOREM_IPSUM_PLACEHOLDER_TEXT for _ in range(5)),
         }
 
-        super().__init__(name=name, id=id, classes=classes)
+        super().__init__(name=name, id=id, classes=classes, disabled=disabled)
 
         self.variant = self.validate_variant(variant)
         """The current variant of the placeholder."""

{"golden_diff": "diff --git a/src/textual/widgets/_placeholder.py b/src/textual/widgets/_placeholder.py\n--- a/src/textual/widgets/_placeholder.py\n+++ b/src/textual/widgets/_placeholder.py\n@@ -73,6 +73,10 @@\n         content-align: center middle;\n         overflow: hidden;\n         color: $text;\n+\n+        &:disabled {\n+            opacity: 0.7;\n+        }\n     }\n     Placeholder.-text {\n         padding: 1;\n@@ -95,6 +99,7 @@\n         name: str | None = None,\n         id: str | None = None,\n         classes: str | None = None,\n+        disabled: bool = False,\n     ) -> None:\n         \"\"\"Create a Placeholder widget.\n \n@@ -106,6 +111,7 @@\n             id: The ID of the placeholder in the DOM.\n             classes: A space separated string with the CSS classes\n                 of the placeholder, if any.\n+            disabled: Whether the placeholder is disabled or not.\n         \"\"\"\n         # Create and cache renderables for all the variants.\n         self._renderables = {\n@@ -114,7 +120,7 @@\n             \"text\": \"\\n\\n\".join(_LOREM_IPSUM_PLACEHOLDER_TEXT for _ in range(5)),\n         }\n \n-        super().__init__(name=name, id=id, classes=classes)\n+        super().__init__(name=name, id=id, classes=classes, disabled=disabled)\n \n         self.variant = self.validate_variant(variant)\n         \"\"\"The current variant of the placeholder.\"\"\"\n", "issue": "`Placeholder` has no `disabled` `__init__` keyword parameter\nIt is intended that `disabled` is one of the \"standard\" keyword parameters for widgets in Textual; this seems to have never been added to `Placeholder`.\n", "before_files": [{"content": "\"\"\"Provides a Textual placeholder widget; useful when designing an app's layout.\"\"\"\n\nfrom __future__ import annotations\n\nfrom itertools import cycle\nfrom typing import TYPE_CHECKING, Iterator\nfrom weakref import WeakKeyDictionary\n\nfrom typing_extensions import Literal, Self\n\nfrom .. import events\n\nif TYPE_CHECKING:\n    from ..app import RenderResult\n\nfrom ..css._error_tools import friendly_list\nfrom ..reactive import Reactive, reactive\nfrom ..widget import Widget\n\nif TYPE_CHECKING:\n    from textual.app import App\n\nPlaceholderVariant = Literal[\"default\", \"size\", \"text\"]\n\"\"\"The different variants of placeholder.\"\"\"\n\n_VALID_PLACEHOLDER_VARIANTS_ORDERED: list[PlaceholderVariant] = [\n    \"default\",\n    \"size\",\n    \"text\",\n]\n_VALID_PLACEHOLDER_VARIANTS: set[PlaceholderVariant] = set(\n    _VALID_PLACEHOLDER_VARIANTS_ORDERED\n)\n_PLACEHOLDER_BACKGROUND_COLORS = [\n    \"#881177\",\n    \"#aa3355\",\n    \"#cc6666\",\n    \"#ee9944\",\n    \"#eedd00\",\n    \"#99dd55\",\n    \"#44dd88\",\n    \"#22ccbb\",\n    \"#00bbcc\",\n    \"#0099cc\",\n    \"#3366bb\",\n    \"#663399\",\n]\n_LOREM_IPSUM_PLACEHOLDER_TEXT = \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam feugiat ac elit sit amet accumsan. Suspendisse bibendum nec libero quis gravida. Phasellus id eleifend ligula. Nullam imperdiet sem tellus, sed vehicula nisl faucibus sit amet. Praesent iaculis tempor ultricies. Sed lacinia, tellus id rutrum lacinia, sapien sapien congue mauris, sit amet pellentesque quam quam vel nisl. Curabitur vulputate erat pellentesque mauris posuere, non dictum risus mattis.\"\n\n\nclass InvalidPlaceholderVariant(Exception):\n    \"\"\"Raised when an invalid Placeholder variant is set.\"\"\"\n\n\nclass Placeholder(Widget):\n    \"\"\"A simple placeholder widget to use before you build your custom widgets.\n\n    This placeholder has a couple of variants that show different data.\n    Clicking the placeholder cycles through the available variants, but a placeholder\n    can also be initialised in a specific variant.\n\n    The variants available are:\n\n    | Variant | Placeholder shows                              |\n    |---------|------------------------------------------------|\n    | default | Identifier label or the ID of the placeholder. |\n    | size    | Size of the placeholder.                       |\n    | text    | Lorem Ipsum text.                              |\n    \"\"\"\n\n    DEFAULT_CSS = \"\"\"\n    Placeholder {\n        content-align: center middle;\n        overflow: hidden;\n        color: $text;\n    }\n    Placeholder.-text {\n        padding: 1;\n    }\n    \"\"\"\n\n    # Consecutive placeholders get assigned consecutive colors.\n    _COLORS: WeakKeyDictionary[App, Iterator[str]] = WeakKeyDictionary()\n    _SIZE_RENDER_TEMPLATE = \"[b]{} x {}[/b]\"\n\n    variant: Reactive[PlaceholderVariant] = reactive[PlaceholderVariant](\"default\")\n\n    _renderables: dict[PlaceholderVariant, str]\n\n    def __init__(\n        self,\n        label: str | None = None,\n        variant: PlaceholderVariant = \"default\",\n        *,\n        name: str | None = None,\n        id: str | None = None,\n        classes: str | None = None,\n    ) -> None:\n        \"\"\"Create a Placeholder widget.\n\n        Args:\n            label: The label to identify the placeholder.\n                If no label is present, uses the placeholder ID instead.\n            variant: The variant of the placeholder.\n            name: The name of the placeholder.\n            id: The ID of the placeholder in the DOM.\n            classes: A space separated string with the CSS classes\n                of the placeholder, if any.\n        \"\"\"\n        # Create and cache renderables for all the variants.\n        self._renderables = {\n            \"default\": label if label else f\"#{id}\" if id else \"Placeholder\",\n            \"size\": \"\",\n            \"text\": \"\\n\\n\".join(_LOREM_IPSUM_PLACEHOLDER_TEXT for _ in range(5)),\n        }\n\n        super().__init__(name=name, id=id, classes=classes)\n\n        self.variant = self.validate_variant(variant)\n        \"\"\"The current variant of the placeholder.\"\"\"\n\n        # Set a cycle through the variants with the correct starting point.\n        self._variants_cycle = cycle(_VALID_PLACEHOLDER_VARIANTS_ORDERED)\n        while next(self._variants_cycle) != self.variant:\n            pass\n\n    async def _on_compose(self, event: events.Compose) -> None:\n        \"\"\"Set the color for this placeholder.\"\"\"\n        colors = Placeholder._COLORS.setdefault(\n            self.app, cycle(_PLACEHOLDER_BACKGROUND_COLORS)\n        )\n        self.styles.background = f\"{next(colors)} 50%\"\n\n    def render(self) -> RenderResult:\n        \"\"\"Render the placeholder.\n\n        Returns:\n            The value to render.\n        \"\"\"\n        return self._renderables[self.variant]\n\n    def cycle_variant(self) -> Self:\n        \"\"\"Get the next variant in the cycle.\n\n        Returns:\n            The `Placeholder` instance.\n        \"\"\"\n        self.variant = next(self._variants_cycle)\n        return self\n\n    def watch_variant(\n        self, old_variant: PlaceholderVariant, variant: PlaceholderVariant\n    ) -> None:\n        self.remove_class(f\"-{old_variant}\")\n        self.add_class(f\"-{variant}\")\n\n    def validate_variant(self, variant: PlaceholderVariant) -> PlaceholderVariant:\n        \"\"\"Validate the variant to which the placeholder was set.\"\"\"\n        if variant not in _VALID_PLACEHOLDER_VARIANTS:\n            raise InvalidPlaceholderVariant(\n                \"Valid placeholder variants are \"\n                + f\"{friendly_list(_VALID_PLACEHOLDER_VARIANTS)}\"\n            )\n        return variant\n\n    async def _on_click(self, _: events.Click) -> None:\n        \"\"\"Click handler to cycle through the placeholder variants.\"\"\"\n        self.cycle_variant()\n\n    def _on_resize(self, event: events.Resize) -> None:\n        \"\"\"Update the placeholder \"size\" variant with the new placeholder size.\"\"\"\n        self._renderables[\"size\"] = self._SIZE_RENDER_TEMPLATE.format(*event.size)\n        if self.variant == \"size\":\n            self.refresh()\n", "path": "src/textual/widgets/_placeholder.py"}], "after_files": [{"content": "\"\"\"Provides a Textual placeholder widget; useful when designing an app's layout.\"\"\"\n\nfrom __future__ import annotations\n\nfrom itertools import cycle\nfrom typing import TYPE_CHECKING, Iterator\nfrom weakref import WeakKeyDictionary\n\nfrom typing_extensions import Literal, Self\n\nfrom .. import events\n\nif TYPE_CHECKING:\n    from ..app import RenderResult\n\nfrom ..css._error_tools import friendly_list\nfrom ..reactive import Reactive, reactive\nfrom ..widget import Widget\n\nif TYPE_CHECKING:\n    from textual.app import App\n\nPlaceholderVariant = Literal[\"default\", \"size\", \"text\"]\n\"\"\"The different variants of placeholder.\"\"\"\n\n_VALID_PLACEHOLDER_VARIANTS_ORDERED: list[PlaceholderVariant] = [\n    \"default\",\n    \"size\",\n    \"text\",\n]\n_VALID_PLACEHOLDER_VARIANTS: set[PlaceholderVariant] = set(\n    _VALID_PLACEHOLDER_VARIANTS_ORDERED\n)\n_PLACEHOLDER_BACKGROUND_COLORS = [\n    \"#881177\",\n    \"#aa3355\",\n    \"#cc6666\",\n    \"#ee9944\",\n    \"#eedd00\",\n    \"#99dd55\",\n    \"#44dd88\",\n    \"#22ccbb\",\n    \"#00bbcc\",\n    \"#0099cc\",\n    \"#3366bb\",\n    \"#663399\",\n]\n_LOREM_IPSUM_PLACEHOLDER_TEXT = \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam feugiat ac elit sit amet accumsan. Suspendisse bibendum nec libero quis gravida. Phasellus id eleifend ligula. Nullam imperdiet sem tellus, sed vehicula nisl faucibus sit amet. Praesent iaculis tempor ultricies. Sed lacinia, tellus id rutrum lacinia, sapien sapien congue mauris, sit amet pellentesque quam quam vel nisl. Curabitur vulputate erat pellentesque mauris posuere, non dictum risus mattis.\"\n\n\nclass InvalidPlaceholderVariant(Exception):\n    \"\"\"Raised when an invalid Placeholder variant is set.\"\"\"\n\n\nclass Placeholder(Widget):\n    \"\"\"A simple placeholder widget to use before you build your custom widgets.\n\n    This placeholder has a couple of variants that show different data.\n    Clicking the placeholder cycles through the available variants, but a placeholder\n    can also be initialised in a specific variant.\n\n    The variants available are:\n\n    | Variant | Placeholder shows                              |\n    |---------|------------------------------------------------|\n    | default | Identifier label or the ID of the placeholder. |\n    | size    | Size of the placeholder.                       |\n    | text    | Lorem Ipsum text.                              |\n    \"\"\"\n\n    DEFAULT_CSS = \"\"\"\n    Placeholder {\n        content-align: center middle;\n        overflow: hidden;\n        color: $text;\n\n        &:disabled {\n            opacity: 0.7;\n        }\n    }\n    Placeholder.-text {\n        padding: 1;\n    }\n    \"\"\"\n\n    # Consecutive placeholders get assigned consecutive colors.\n    _COLORS: WeakKeyDictionary[App, Iterator[str]] = WeakKeyDictionary()\n    _SIZE_RENDER_TEMPLATE = \"[b]{} x {}[/b]\"\n\n    variant: Reactive[PlaceholderVariant] = reactive[PlaceholderVariant](\"default\")\n\n    _renderables: dict[PlaceholderVariant, str]\n\n    def __init__(\n        self,\n        label: str | None = None,\n        variant: PlaceholderVariant = \"default\",\n        *,\n        name: str | None = None,\n        id: str | None = None,\n        classes: str | None = None,\n        disabled: bool = False,\n    ) -> None:\n        \"\"\"Create a Placeholder widget.\n\n        Args:\n            label: The label to identify the placeholder.\n                If no label is present, uses the placeholder ID instead.\n            variant: The variant of the placeholder.\n            name: The name of the placeholder.\n            id: The ID of the placeholder in the DOM.\n            classes: A space separated string with the CSS classes\n                of the placeholder, if any.\n            disabled: Whether the placeholder is disabled or not.\n        \"\"\"\n        # Create and cache renderables for all the variants.\n        self._renderables = {\n            \"default\": label if label else f\"#{id}\" if id else \"Placeholder\",\n            \"size\": \"\",\n            \"text\": \"\\n\\n\".join(_LOREM_IPSUM_PLACEHOLDER_TEXT for _ in range(5)),\n        }\n\n        super().__init__(name=name, id=id, classes=classes, disabled=disabled)\n\n        self.variant = self.validate_variant(variant)\n        \"\"\"The current variant of the placeholder.\"\"\"\n\n        # Set a cycle through the variants with the correct starting point.\n        self._variants_cycle = cycle(_VALID_PLACEHOLDER_VARIANTS_ORDERED)\n        while next(self._variants_cycle) != self.variant:\n            pass\n\n    async def _on_compose(self, event: events.Compose) -> None:\n        \"\"\"Set the color for this placeholder.\"\"\"\n        colors = Placeholder._COLORS.setdefault(\n            self.app, cycle(_PLACEHOLDER_BACKGROUND_COLORS)\n        )\n        self.styles.background = f\"{next(colors)} 50%\"\n\n    def render(self) -> RenderResult:\n        \"\"\"Render the placeholder.\n\n        Returns:\n            The value to render.\n        \"\"\"\n        return self._renderables[self.variant]\n\n    def cycle_variant(self) -> Self:\n        \"\"\"Get the next variant in the cycle.\n\n        Returns:\n            The `Placeholder` instance.\n        \"\"\"\n        self.variant = next(self._variants_cycle)\n        return self\n\n    def watch_variant(\n        self, old_variant: PlaceholderVariant, variant: PlaceholderVariant\n    ) -> None:\n        self.remove_class(f\"-{old_variant}\")\n        self.add_class(f\"-{variant}\")\n\n    def validate_variant(self, variant: PlaceholderVariant) -> PlaceholderVariant:\n        \"\"\"Validate the variant to which the placeholder was set.\"\"\"\n        if variant not in _VALID_PLACEHOLDER_VARIANTS:\n            raise InvalidPlaceholderVariant(\n                \"Valid placeholder variants are \"\n                + f\"{friendly_list(_VALID_PLACEHOLDER_VARIANTS)}\"\n            )\n        return variant\n\n    async def _on_click(self, _: events.Click) -> None:\n        \"\"\"Click handler to cycle through the placeholder variants.\"\"\"\n        self.cycle_variant()\n\n    def _on_resize(self, event: events.Resize) -> None:\n        \"\"\"Update the placeholder \"size\" variant with the new placeholder size.\"\"\"\n        self._renderables[\"size\"] = self._SIZE_RENDER_TEMPLATE.format(*event.size)\n        if self.variant == \"size\":\n            self.refresh()\n", "path": "src/textual/widgets/_placeholder.py"}]}