We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
RangeSlider css_classes not being updated anymore
It seems in 0.12.7 the `css_classes` attribute of the RangeSlider is not being updated anymore by the callbacks. It was working in 0.12.6.
In the example below, both the text input and the slider starts with the `initial` class as expected. When the slider changes, both should gain the `sent-later` class, but only the text input is gaining it...

```
from bokeh.io import curdoc
from bokeh.models import TextInput, RangeSlider
from bokeh.layouts import widgetbox
from bokeh.layouts import column
from bokeh.models import Div

div1 = Div(text="""
        <style>
        .sent-later {
            border-radius: 0.5em;
            padding: 1em;
            border: 3px solid #2397D8;
        }
        </style>
""")


def on_slider_change(attr, old, new):
    slider.css_classes.append('sent-later')
    text.css_classes.append('sent-later')
    print(slider.css_classes)
    print(text.css_classes)


text = TextInput(
        value=str(2),
        title='Population Beta:')

slider = RangeSlider(
        start=0,
        end=10,
        value=(0, 2),
        step=1,
        title='Population Beta')

slider.css_classes = []
slider.css_classes.append('initial')
text.css_classes = []
text.css_classes.append('initial')

slider.on_change('value', on_slider_change)

curdoc().add_root(column(div1, widgetbox(text, slider)))

```


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `bokeh/models/layouts.py`
Content:
```
1 ''' Various kinds of layout components.
2 
3 '''
4 from __future__ import absolute_import
5 
6 import logging
7 logger = logging.getLogger(__name__)
8 
9 from ..core.enums import SizingMode
10 from ..core.has_props import abstract
11 from ..core.properties import Bool, Enum, Int, Instance, List, Seq, String
12 from ..core.validation import warning
13 from ..core.validation.warnings import BOTH_CHILD_AND_ROOT, EMPTY_LAYOUT
14 from ..model import Model
15 
16 @abstract
17 class LayoutDOM(Model):
18     ''' An abstract base class for layout components.
19 
20     '''
21 
22     width = Int(help="""
23     An optional width for the component (in pixels).
24     """)
25 
26     height = Int(help="""
27     An optional height for the component (in pixels).
28     """)
29 
30     disabled = Bool(False, help="""
31     Whether the widget will be disabled when rendered. If ``True``,
32     the widget will be greyed-out, and not respond to UI events.
33     """)
34 
35     sizing_mode = Enum(SizingMode, default="fixed", help="""
36     How the item being displayed should size itself. Possible values are
37     ``"fixed"``, ``"scale_width"``, ``"scale_height"``, ``"scale_both"``, and
38     ``"stretch_both"``.
39 
40     ``"stretch_both"`` elements are completely responsive (independently in width and height) and
41     will resize to occupy all available space, even if this changes the aspect ratio of the element.
42     This is sometimes called outside-in, and is a typical behavior for desktop applications.
43 
44     ``"fixed"`` elements are not responsive. They will retain their original width and height
45     regardless of any subsequent browser window resize events.
46 
47     ``"scale_width"`` elements will responsively resize to fit to the width available, *while
48     maintaining the original aspect ratio*. This is a typical behavior for modern websites. For a
49     ``Plot``, the aspect ratio ``plot_width/plot_height`` is maintained.
50 
51     ``"scale_height"`` elements will responsively resize to fit to the height available, *while
52     maintaining the original aspect ratio*. For a ``Plot``, the aspect ratio
53     ``plot_width/plot_height`` is maintained. A plot with ``"scale_height"`` mode needs
54     to be wrapped in a ``Row`` or ``Column`` to be responsive.
55 
56     ``"scale_both"`` elements will responsively resize to for both the width and height available,
57     *while maintaining the original aspect ratio*.
58 
59     """)
60 
61     css_classes = Seq(String, help="""
62     A list of css class names to add to this DOM element. Note: the class names are
63     simply added as-is, no other guarantees are provided.
64     """)
65 
66 
67 class Spacer(LayoutDOM):
68     ''' A container for space used to fill an empty spot in a row or column.
69 
70     '''
71 
72 
73 class WidgetBox(LayoutDOM):
74     ''' A container for widgets that are part of a layout.
75 
76     '''
77     def __init__(self, *args, **kwargs):
78         if len(args) > 0 and "children" in kwargs:
79             raise ValueError("'children' keyword cannot be used with positional arguments")
80         elif len(args) > 0:
81             kwargs["children"] = list(args)
82         super(WidgetBox, self).__init__(**kwargs)
83 
84     @warning(EMPTY_LAYOUT)
85     def _check_empty_layout(self):
86         from itertools import chain
87         if not list(chain(self.children)):
88             return str(self)
89 
90     @warning(BOTH_CHILD_AND_ROOT)
91     def _check_child_is_also_root(self):
92         problems = []
93         for c in self.children:
94             if c.document is not None and c in c.document.roots:
95                 problems.append(str(c))
96         if problems:
97             return ", ".join(problems)
98         else:
99             return None
100 
101     children = List(Instance('bokeh.models.widgets.Widget'), help="""
102     The list of widgets to put in the layout box.
103     """)
104 
105 
106 @abstract
107 class Box(LayoutDOM):
108     ''' Abstract base class for Row and Column. Do not use directly.
109 
110     '''
111 
112     def __init__(self, *args, **kwargs):
113 
114         if len(args) > 0 and "children" in kwargs:
115             raise ValueError("'children' keyword cannot be used with positional arguments")
116         elif len(args) > 0:
117             kwargs["children"] = list(args)
118 
119         unwrapped_children = kwargs.get("children", [])
120         kwargs["children"] = self._wrap_children(unwrapped_children)
121         super(Box, self).__init__(**kwargs)
122 
123     def _wrap_children(self, children):
124         ''' Wrap any Widgets of a list of child layouts in a WidgetBox.
125         This allows for the convenience of just spelling Row(button1, button2).
126         '''
127         from .widgets.widget import Widget
128         wrapped_children = []
129         for child in children:
130             if isinstance(child, Widget):
131                 child = WidgetBox(
132                     children=[child],
133                     sizing_mode=child.sizing_mode,
134                     width=child.width,
135                     height=child.height,
136                     disabled=child.disabled
137                 )
138             wrapped_children.append(child)
139         return wrapped_children
140 
141     @warning(EMPTY_LAYOUT)
142     def _check_empty_layout(self):
143         from itertools import chain
144         if not list(chain(self.children)):
145             return str(self)
146 
147     @warning(BOTH_CHILD_AND_ROOT)
148     def _check_child_is_also_root(self):
149         problems = []
150         for c in self.children:
151             if c.document is not None and c in c.document.roots:
152                 problems.append(str(c))
153         if problems:
154             return ", ".join(problems)
155         else:
156             return None
157 
158     #TODO Debating the following instead to prevent people adding just a plain
159     #     widget into a box, which sometimes works and sometimes looks disastrous
160     #children = List(
161     #    Either(
162     #        Instance('bokeh.models.layouts.Row'),
163     #        Instance('bokeh.models.layouts.Column'),
164     #        Instance('bokeh.models.plots.Plot'),
165     #        Instance('bokeh.models.layouts.WidgetBox')
166     #    ), help="""
167     #    The list of children, which can be other components including plots, rows, columns, and widgets.
168     #""")
169     children = List(Instance(LayoutDOM), help="""
170     The list of children, which can be other components including plots, rows, columns, and widgets.
171     """)
172 
173 
174 class Row(Box):
175     ''' Lay out child components in a single horizontal row.
176 
177     Children can be specified as positional arguments, as a single argument
178     that is a sequence, or using the ``children`` keyword argument.
179     '''
180 
181 
182 class Column(Box):
183     ''' Lay out child components in a single vertical row.
184 
185     Children can be specified as positional arguments, as a single argument
186     that is a sequence, or using the ``children`` keyword argument.
187     '''
188
```
--- 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/bokeh/models/layouts.py b/bokeh/models/layouts.py
--- a/bokeh/models/layouts.py
+++ b/bokeh/models/layouts.py
@@ -58,10 +58,14 @@
 
     """)
 
-    css_classes = Seq(String, help="""
+    # List in order for in-place changes to trigger changes, ref: https://github.com/bokeh/bokeh/issues/6841
+    css_classes = List(String, help="""
     A list of css class names to add to this DOM element. Note: the class names are
     simply added as-is, no other guarantees are provided.
-    """)
+
+    It is also permissible to assign from tuples, however these are adapted -- the
+    property will always contain a list.
+    """).accepts(Seq(String), lambda x: list(x))
 
 
 class Spacer(LayoutDOM):

{"golden_diff": "diff --git a/bokeh/models/layouts.py b/bokeh/models/layouts.py\n--- a/bokeh/models/layouts.py\n+++ b/bokeh/models/layouts.py\n@@ -58,10 +58,14 @@\n \n     \"\"\")\n \n-    css_classes = Seq(String, help=\"\"\"\n+    # List in order for in-place changes to trigger changes, ref: https://github.com/bokeh/bokeh/issues/6841\n+    css_classes = List(String, help=\"\"\"\n     A list of css class names to add to this DOM element. Note: the class names are\n     simply added as-is, no other guarantees are provided.\n-    \"\"\")\n+\n+    It is also permissible to assign from tuples, however these are adapted -- the\n+    property will always contain a list.\n+    \"\"\").accepts(Seq(String), lambda x: list(x))\n \n \n class Spacer(LayoutDOM):\n", "issue": "RangeSlider css_classes not being updated anymore\nIt seems in 0.12.7 the `css_classes` attribute of the RangeSlider is not being updated anymore by the callbacks. It was working in 0.12.6.\r\nIn the example below, both the text input and the slider starts with the `initial` class as expected. When the slider changes, both should gain the `sent-later` class, but only the text input is gaining it...\r\n\r\n```\r\nfrom bokeh.io import curdoc\r\nfrom bokeh.models import TextInput, RangeSlider\r\nfrom bokeh.layouts import widgetbox\r\nfrom bokeh.layouts import column\r\nfrom bokeh.models import Div\r\n\r\ndiv1 = Div(text=\"\"\"\r\n        <style>\r\n        .sent-later {\r\n            border-radius: 0.5em;\r\n            padding: 1em;\r\n            border: 3px solid #2397D8;\r\n        }\r\n        </style>\r\n\"\"\")\r\n\r\n\r\ndef on_slider_change(attr, old, new):\r\n    slider.css_classes.append('sent-later')\r\n    text.css_classes.append('sent-later')\r\n    print(slider.css_classes)\r\n    print(text.css_classes)\r\n\r\n\r\ntext = TextInput(\r\n        value=str(2),\r\n        title='Population Beta:')\r\n\r\nslider = RangeSlider(\r\n        start=0,\r\n        end=10,\r\n        value=(0, 2),\r\n        step=1,\r\n        title='Population Beta')\r\n\r\nslider.css_classes = []\r\nslider.css_classes.append('initial')\r\ntext.css_classes = []\r\ntext.css_classes.append('initial')\r\n\r\nslider.on_change('value', on_slider_change)\r\n\r\ncurdoc().add_root(column(div1, widgetbox(text, slider)))\r\n\r\n```\r\n\n", "before_files": [{"content": "''' Various kinds of layout components.\n\n'''\nfrom __future__ import absolute_import\n\nimport logging\nlogger = logging.getLogger(__name__)\n\nfrom ..core.enums import SizingMode\nfrom ..core.has_props import abstract\nfrom ..core.properties import Bool, Enum, Int, Instance, List, Seq, String\nfrom ..core.validation import warning\nfrom ..core.validation.warnings import BOTH_CHILD_AND_ROOT, EMPTY_LAYOUT\nfrom ..model import Model\n\n@abstract\nclass LayoutDOM(Model):\n    ''' An abstract base class for layout components.\n\n    '''\n\n    width = Int(help=\"\"\"\n    An optional width for the component (in pixels).\n    \"\"\")\n\n    height = Int(help=\"\"\"\n    An optional height for the component (in pixels).\n    \"\"\")\n\n    disabled = Bool(False, help=\"\"\"\n    Whether the widget will be disabled when rendered. If ``True``,\n    the widget will be greyed-out, and not respond to UI events.\n    \"\"\")\n\n    sizing_mode = Enum(SizingMode, default=\"fixed\", help=\"\"\"\n    How the item being displayed should size itself. Possible values are\n    ``\"fixed\"``, ``\"scale_width\"``, ``\"scale_height\"``, ``\"scale_both\"``, and\n    ``\"stretch_both\"``.\n\n    ``\"stretch_both\"`` elements are completely responsive (independently in width and height) and\n    will resize to occupy all available space, even if this changes the aspect ratio of the element.\n    This is sometimes called outside-in, and is a typical behavior for desktop applications.\n\n    ``\"fixed\"`` elements are not responsive. They will retain their original width and height\n    regardless of any subsequent browser window resize events.\n\n    ``\"scale_width\"`` elements will responsively resize to fit to the width available, *while\n    maintaining the original aspect ratio*. This is a typical behavior for modern websites. For a\n    ``Plot``, the aspect ratio ``plot_width/plot_height`` is maintained.\n\n    ``\"scale_height\"`` elements will responsively resize to fit to the height available, *while\n    maintaining the original aspect ratio*. For a ``Plot``, the aspect ratio\n    ``plot_width/plot_height`` is maintained. A plot with ``\"scale_height\"`` mode needs\n    to be wrapped in a ``Row`` or ``Column`` to be responsive.\n\n    ``\"scale_both\"`` elements will responsively resize to for both the width and height available,\n    *while maintaining the original aspect ratio*.\n\n    \"\"\")\n\n    css_classes = Seq(String, help=\"\"\"\n    A list of css class names to add to this DOM element. Note: the class names are\n    simply added as-is, no other guarantees are provided.\n    \"\"\")\n\n\nclass Spacer(LayoutDOM):\n    ''' A container for space used to fill an empty spot in a row or column.\n\n    '''\n\n\nclass WidgetBox(LayoutDOM):\n    ''' A container for widgets that are part of a layout.\n\n    '''\n    def __init__(self, *args, **kwargs):\n        if len(args) > 0 and \"children\" in kwargs:\n            raise ValueError(\"'children' keyword cannot be used with positional arguments\")\n        elif len(args) > 0:\n            kwargs[\"children\"] = list(args)\n        super(WidgetBox, self).__init__(**kwargs)\n\n    @warning(EMPTY_LAYOUT)\n    def _check_empty_layout(self):\n        from itertools import chain\n        if not list(chain(self.children)):\n            return str(self)\n\n    @warning(BOTH_CHILD_AND_ROOT)\n    def _check_child_is_also_root(self):\n        problems = []\n        for c in self.children:\n            if c.document is not None and c in c.document.roots:\n                problems.append(str(c))\n        if problems:\n            return \", \".join(problems)\n        else:\n            return None\n\n    children = List(Instance('bokeh.models.widgets.Widget'), help=\"\"\"\n    The list of widgets to put in the layout box.\n    \"\"\")\n\n\n@abstract\nclass Box(LayoutDOM):\n    ''' Abstract base class for Row and Column. Do not use directly.\n\n    '''\n\n    def __init__(self, *args, **kwargs):\n\n        if len(args) > 0 and \"children\" in kwargs:\n            raise ValueError(\"'children' keyword cannot be used with positional arguments\")\n        elif len(args) > 0:\n            kwargs[\"children\"] = list(args)\n\n        unwrapped_children = kwargs.get(\"children\", [])\n        kwargs[\"children\"] = self._wrap_children(unwrapped_children)\n        super(Box, self).__init__(**kwargs)\n\n    def _wrap_children(self, children):\n        ''' Wrap any Widgets of a list of child layouts in a WidgetBox.\n        This allows for the convenience of just spelling Row(button1, button2).\n        '''\n        from .widgets.widget import Widget\n        wrapped_children = []\n        for child in children:\n            if isinstance(child, Widget):\n                child = WidgetBox(\n                    children=[child],\n                    sizing_mode=child.sizing_mode,\n                    width=child.width,\n                    height=child.height,\n                    disabled=child.disabled\n                )\n            wrapped_children.append(child)\n        return wrapped_children\n\n    @warning(EMPTY_LAYOUT)\n    def _check_empty_layout(self):\n        from itertools import chain\n        if not list(chain(self.children)):\n            return str(self)\n\n    @warning(BOTH_CHILD_AND_ROOT)\n    def _check_child_is_also_root(self):\n        problems = []\n        for c in self.children:\n            if c.document is not None and c in c.document.roots:\n                problems.append(str(c))\n        if problems:\n            return \", \".join(problems)\n        else:\n            return None\n\n    #TODO Debating the following instead to prevent people adding just a plain\n    #     widget into a box, which sometimes works and sometimes looks disastrous\n    #children = List(\n    #    Either(\n    #        Instance('bokeh.models.layouts.Row'),\n    #        Instance('bokeh.models.layouts.Column'),\n    #        Instance('bokeh.models.plots.Plot'),\n    #        Instance('bokeh.models.layouts.WidgetBox')\n    #    ), help=\"\"\"\n    #    The list of children, which can be other components including plots, rows, columns, and widgets.\n    #\"\"\")\n    children = List(Instance(LayoutDOM), help=\"\"\"\n    The list of children, which can be other components including plots, rows, columns, and widgets.\n    \"\"\")\n\n\nclass Row(Box):\n    ''' Lay out child components in a single horizontal row.\n\n    Children can be specified as positional arguments, as a single argument\n    that is a sequence, or using the ``children`` keyword argument.\n    '''\n\n\nclass Column(Box):\n    ''' Lay out child components in a single vertical row.\n\n    Children can be specified as positional arguments, as a single argument\n    that is a sequence, or using the ``children`` keyword argument.\n    '''\n", "path": "bokeh/models/layouts.py"}], "after_files": [{"content": "''' Various kinds of layout components.\n\n'''\nfrom __future__ import absolute_import\n\nimport logging\nlogger = logging.getLogger(__name__)\n\nfrom ..core.enums import SizingMode\nfrom ..core.has_props import abstract\nfrom ..core.properties import Bool, Enum, Int, Instance, List, Seq, String\nfrom ..core.validation import warning\nfrom ..core.validation.warnings import BOTH_CHILD_AND_ROOT, EMPTY_LAYOUT\nfrom ..model import Model\n\n@abstract\nclass LayoutDOM(Model):\n    ''' An abstract base class for layout components.\n\n    '''\n\n    width = Int(help=\"\"\"\n    An optional width for the component (in pixels).\n    \"\"\")\n\n    height = Int(help=\"\"\"\n    An optional height for the component (in pixels).\n    \"\"\")\n\n    disabled = Bool(False, help=\"\"\"\n    Whether the widget will be disabled when rendered. If ``True``,\n    the widget will be greyed-out, and not respond to UI events.\n    \"\"\")\n\n    sizing_mode = Enum(SizingMode, default=\"fixed\", help=\"\"\"\n    How the item being displayed should size itself. Possible values are\n    ``\"fixed\"``, ``\"scale_width\"``, ``\"scale_height\"``, ``\"scale_both\"``, and\n    ``\"stretch_both\"``.\n\n    ``\"stretch_both\"`` elements are completely responsive (independently in width and height) and\n    will resize to occupy all available space, even if this changes the aspect ratio of the element.\n    This is sometimes called outside-in, and is a typical behavior for desktop applications.\n\n    ``\"fixed\"`` elements are not responsive. They will retain their original width and height\n    regardless of any subsequent browser window resize events.\n\n    ``\"scale_width\"`` elements will responsively resize to fit to the width available, *while\n    maintaining the original aspect ratio*. This is a typical behavior for modern websites. For a\n    ``Plot``, the aspect ratio ``plot_width/plot_height`` is maintained.\n\n    ``\"scale_height\"`` elements will responsively resize to fit to the height available, *while\n    maintaining the original aspect ratio*. For a ``Plot``, the aspect ratio\n    ``plot_width/plot_height`` is maintained. A plot with ``\"scale_height\"`` mode needs\n    to be wrapped in a ``Row`` or ``Column`` to be responsive.\n\n    ``\"scale_both\"`` elements will responsively resize to for both the width and height available,\n    *while maintaining the original aspect ratio*.\n\n    \"\"\")\n\n    # List in order for in-place changes to trigger changes, ref: https://github.com/bokeh/bokeh/issues/6841\n    css_classes = List(String, help=\"\"\"\n    A list of css class names to add to this DOM element. Note: the class names are\n    simply added as-is, no other guarantees are provided.\n\n    It is also permissible to assign from tuples, however these are adapted -- the\n    property will always contain a list.\n    \"\"\").accepts(Seq(String), lambda x: list(x))\n\n\nclass Spacer(LayoutDOM):\n    ''' A container for space used to fill an empty spot in a row or column.\n\n    '''\n\n\nclass WidgetBox(LayoutDOM):\n    ''' A container for widgets that are part of a layout.\n\n    '''\n    def __init__(self, *args, **kwargs):\n        if len(args) > 0 and \"children\" in kwargs:\n            raise ValueError(\"'children' keyword cannot be used with positional arguments\")\n        elif len(args) > 0:\n            kwargs[\"children\"] = list(args)\n        super(WidgetBox, self).__init__(**kwargs)\n\n    @warning(EMPTY_LAYOUT)\n    def _check_empty_layout(self):\n        from itertools import chain\n        if not list(chain(self.children)):\n            return str(self)\n\n    @warning(BOTH_CHILD_AND_ROOT)\n    def _check_child_is_also_root(self):\n        problems = []\n        for c in self.children:\n            if c.document is not None and c in c.document.roots:\n                problems.append(str(c))\n        if problems:\n            return \", \".join(problems)\n        else:\n            return None\n\n    children = List(Instance('bokeh.models.widgets.Widget'), help=\"\"\"\n    The list of widgets to put in the layout box.\n    \"\"\")\n\n\n@abstract\nclass Box(LayoutDOM):\n    ''' Abstract base class for Row and Column. Do not use directly.\n\n    '''\n\n    def __init__(self, *args, **kwargs):\n\n        if len(args) > 0 and \"children\" in kwargs:\n            raise ValueError(\"'children' keyword cannot be used with positional arguments\")\n        elif len(args) > 0:\n            kwargs[\"children\"] = list(args)\n\n        unwrapped_children = kwargs.get(\"children\", [])\n        kwargs[\"children\"] = self._wrap_children(unwrapped_children)\n        super(Box, self).__init__(**kwargs)\n\n    def _wrap_children(self, children):\n        ''' Wrap any Widgets of a list of child layouts in a WidgetBox.\n        This allows for the convenience of just spelling Row(button1, button2).\n        '''\n        from .widgets.widget import Widget\n        wrapped_children = []\n        for child in children:\n            if isinstance(child, Widget):\n                child = WidgetBox(\n                    children=[child],\n                    sizing_mode=child.sizing_mode,\n                    width=child.width,\n                    height=child.height,\n                    disabled=child.disabled\n                )\n            wrapped_children.append(child)\n        return wrapped_children\n\n    @warning(EMPTY_LAYOUT)\n    def _check_empty_layout(self):\n        from itertools import chain\n        if not list(chain(self.children)):\n            return str(self)\n\n    @warning(BOTH_CHILD_AND_ROOT)\n    def _check_child_is_also_root(self):\n        problems = []\n        for c in self.children:\n            if c.document is not None and c in c.document.roots:\n                problems.append(str(c))\n        if problems:\n            return \", \".join(problems)\n        else:\n            return None\n\n    #TODO Debating the following instead to prevent people adding just a plain\n    #     widget into a box, which sometimes works and sometimes looks disastrous\n    #children = List(\n    #    Either(\n    #        Instance('bokeh.models.layouts.Row'),\n    #        Instance('bokeh.models.layouts.Column'),\n    #        Instance('bokeh.models.plots.Plot'),\n    #        Instance('bokeh.models.layouts.WidgetBox')\n    #    ), help=\"\"\"\n    #    The list of children, which can be other components including plots, rows, columns, and widgets.\n    #\"\"\")\n    children = List(Instance(LayoutDOM), help=\"\"\"\n    The list of children, which can be other components including plots, rows, columns, and widgets.\n    \"\"\")\n\n\nclass Row(Box):\n    ''' Lay out child components in a single horizontal row.\n\n    Children can be specified as positional arguments, as a single argument\n    that is a sequence, or using the ``children`` keyword argument.\n    '''\n\n\nclass Column(Box):\n    ''' Lay out child components in a single vertical row.\n\n    Children can be specified as positional arguments, as a single argument\n    that is a sequence, or using the ``children`` keyword argument.\n    '''\n", "path": "bokeh/models/layouts.py"}]}