Skip to content

.html.md files contain rendered output #29

@MarcSkovMadsen

Description

@MarcSkovMadsen

Maybe the issue is on "our side" but for panel-material-ui (panel-extensions/panel-material-ui#366) the rendered .html.md files include rendered pyodide output. I don't see that in the input .md files.

Image
ChatFeed.md
# ChatFeed

[Download this notebook from GitHub (right-click to download).](https://raw.githubusercontent.com/panel-extensions/panel-material-ui/main/examples/reference/chat/ChatFeed.ipynb)

---
```{pyodide}
import panel as pn
import panel_material_ui as pmui

pn.extension()
```

The `ChatFeed` is a mid-level layout, that lets you manage a list of [`ChatMessage`](ChatMessage) items.

This layout provides backend methods to:
- Send (append) messages to the chat log.
- Stream tokens to the latest `ChatMessage` in the chat log.
- Execute callbacks when a user sends a message.
- Undo a number of sent `ChatMessage` objects.
- Clear the chat log of all `ChatMessage` objects.

See [`ChatInterface`](ChatInterface) for a high-level, *easy to use*, *ChatGPT like* interface.

Check out the [panel-chat-examples](https://holoviz-topics.github.io/panel-chat-examples/) docs to see applicable examples related to [LangChain](https://python.langchain.com/docs/get_started/introduction), [OpenAI](https://openai.com/blog/chatgpt), [Mistral](https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&ved=2ahUKEwjZtP35yvSBAxU00wIHHerUDZAQFnoECBEQAQ&url=https%3A%2F%2Fdocs.mistral.ai%2F&usg=AOvVaw2qpx09O_zOzSksgjBKiJY_&opi=89978449), [Llama](https://ai.meta.com/llama/), etc. If you have an example to demo, we'd love to add it to the panel-chat-examples gallery!

<img alt="Chat Design Specification" src="https://panel.holoviz.org/assets/ChatDesignSpecification.png"></img>

#### Parameters:

##### Core

* **`objects`** (`List[ChatMessage]`): The messages added to the chat feed.
* **`renderers`** (List[Callable]): A callable or list of callables that accept the value and return a Panel object to render the value. If a list is provided, will attempt to use the first renderer that does not raise an exception. If None, will attempt to infer the renderer from the value.
* **`callback`** (callable): Callback to execute when a user sends a message or when `respond` is called. The signature must include the previous message value `contents`, the previous `user` name, and the component `instance`.

##### Styling

* **`card_params`** (Dict): Parameters to pass to Card, such as `header`, `header_background`, `header_color`, etc.
* **`message_params`** (Dict): Parameters to pass to each ChatMessage, such as `reaction_icons`, `timestamp_format`, `show_avatar`, `show_user`, and `show_timestamp` Params passed that are not ChatFeed params will be forwarded into `message_params`.

##### Other

* **`header`** (Any): The header of the chat feed; commonly used for the title. Can be a string, pane, or widget.
* **`callback_user`** (str): The default user name to use for the message provided by the callback.
* **`callback_avatar`** (str, BytesIO, bytes, ImageBase): The default avatar to use for the entry provided by the callback. Takes precedence over `ChatMessage.default_avatars` if set; else, if None, defaults to the avatar set in `ChatMessage.default_avatars` if matching key exists. Otherwise defaults to the first character of the `callback_user`.
* **`callback_exception`** (str, Callable): How to handle exceptions raised by the callback. If "raise", the exception will be raised. If "summary", a summary will be sent to the chat feed. If "verbose" or "traceback", the full traceback will be sent to the chat feed. If "ignore", the exception will be ignored. If a callable is provided, the signature must contain the `exception` and `instance` arguments and it will be called with the exception.
* **`edit_callback`** (callable): Callback to execute when a user edits a message. The signature must include the previous message value `contents`, the previous `user` name, and the component `instance`.
* **`help_text`** (str): If provided, initializes a chat message in the chat log using the provided help text as the message object and `help` as the user. This is useful for providing instructions, and will not be included in the `serialize` method by default.
* **`placeholder_text`** (str): The text to display next to the placeholder icon.
* **`placeholder_params`** (dict) Defaults to `{"user": " ", "reaction_icons": {}, "show_copy_icon": False, "show_timestamp": False}` Params to pass to the placeholder `ChatMessage`, like `reaction_icons`, `timestamp_format`, `show_avatar`, `show_user`, `show_timestamp`.
* **`placeholder_threshold`** (float): Min duration in seconds of buffering before displaying the placeholder. If 0, the placeholder will be disabled. Defaults to 0.2.
* **`post_hook`** (callable): A hook to execute after a new message is *completely* added, i.e. the generator is exhausted. The `stream` method will trigger this callback on every call. The signature must include the  `message` and `instance` arguments.
* **`auto_scroll_limit`** (int): Max pixel distance from the latest object in the Column to activate automatic scrolling upon update. Setting to 0 disables auto-scrolling.
* **`scroll_button_threshold`** (int): Min pixel distance from the latest object in the Column to display the scroll button. Setting to 0 disables the scroll button.
* **`load_buffer`** (int): The number of objects loaded on each side of the visible objects. When scrolled halfway into the buffer, the feed will automatically load additional objects while unloading objects on the opposite side.
* **`show_activity_dot`** (bool): Whether to show an activity dot on the ChatMessage while streaming the callback response.
* **`view_latest`** (bool): Whether to scroll to the latest object on init. If not enabled the view will be on the first object. Defaults to True.

#### Methods

##### Core

* **`send`**: Sends a value and creates a new message in the chat log. If `respond` is `True`, additionally executes the callback, if provided.
* **`serialize`**: Exports the chat log as a dict; primarily for use with `transformers`.
* **`stream`**: Streams a token and updates the provided message, if provided. Otherwise creates a new message in the chat log, so be sure the returned message is passed back into the method, e.g. `message = chat.stream(token, message=message)`. This method is primarily for outputs that are not generators--notably LangChain. For most cases, use the send method instead.

##### Other

* **`clear`**: Clears the chat log and returns the messages that were cleared.
* **`respond`**: Executes the callback with the latest message in the chat log. Typically called after streaming is completed, i.e. after a for loop where `stream` is called multiple times. If not streaming, use the `respond` keyword argument inside the `send` method instead.
* **`trigger_post_hook`**: Triggers the post hook with the latest message in the chat log. Typically called after streaming is completed, i.e. after a for loop where `stream` is called multiple times. If not streaming, use the `trigger_post_hook` keyword argument inside the `send` method instead.
* **`stop`**: Cancels the current callback task if possible.
* **`scroll_to(index: int)`**: Column will scroll to the object at the specified index.
* **`undo`**: Removes the last `count` of messages from the chat log and returns them. Default `count` is 1.

___

#### Basics

`ChatFeed` can be initialized without any arguments.

```{pyodide}
chat_feed = pmui.ChatFeed()
chat_feed
```

You can send chat messages with the `send` method.

```{pyodide}
message = chat_feed.send(
    "Hello world!",
    user="Bot",
    avatar="B",
    footer_objects=[pmui.Button(label="Footer Object")],
)
```

...

---
[Download this notebook from GitHub (right-click to download).](https://raw.githubusercontent.com/panel-extensions/panel-material-ui/main/examples/reference/chat/ChatFeed.ipynb)
ChatFeed.html.md
# ChatFeed

[Download this notebook from GitHub (right-click to download).](https://raw.githubusercontent.com/panel-extensions/panel-material-ui/main/examples/reference/chat/ChatFeed.ipynb)

---
```python
import panel as pn
import panel_material_ui as pmui

pn.extension()

The ChatFeed is a mid-level layout, that lets you manage a list of ChatMessage items.

This layout provides backend methods to:

  • Send (append) messages to the chat log.
  • Stream tokens to the latest ChatMessage in the chat log.
  • Execute callbacks when a user sends a message.
  • Undo a number of sent ChatMessage objects.
  • Clear the chat log of all ChatMessage objects.

See ChatInterface for a high-level, easy to use, ChatGPT like interface.

Check out the panel-chat-examples docs to see applicable examples related to LangChain, OpenAI, Mistral, Llama, etc. If you have an example to demo, we’d love to add it to the panel-chat-examples gallery!

Chat Design Specification

Parameters:

Core

  • objects (List[ChatMessage]): The messages added to the chat feed.
  • renderers (List[Callable]): A callable or list of callables that accept the value and return a Panel object to render the value. If a list is provided, will attempt to use the first renderer that does not raise an exception. If None, will attempt to infer the renderer from the value.
  • callback (callable): Callback to execute when a user sends a message or when respond is called. The signature must include the previous message value contents, the previous user name, and the component instance.

Styling

  • card_params (Dict): Parameters to pass to Card, such as header, header_background, header_color, etc.
  • message_params (Dict): Parameters to pass to each ChatMessage, such as reaction_icons, timestamp_format, show_avatar, show_user, and show_timestamp Params passed that are not ChatFeed params will be forwarded into message_params.

Other

  • header (Any): The header of the chat feed; commonly used for the title. Can be a string, pane, or widget.
  • callback_user (str): The default user name to use for the message provided by the callback.
  • callback_avatar (str, BytesIO, bytes, ImageBase): The default avatar to use for the entry provided by the callback. Takes precedence over ChatMessage.default_avatars if set; else, if None, defaults to the avatar set in ChatMessage.default_avatars if matching key exists. Otherwise defaults to the first character of the callback_user.
  • callback_exception (str, Callable): How to handle exceptions raised by the callback. If “raise”, the exception will be raised. If “summary”, a summary will be sent to the chat feed. If “verbose” or “traceback”, the full traceback will be sent to the chat feed. If “ignore”, the exception will be ignored. If a callable is provided, the signature must contain the exception and instance arguments and it will be called with the exception.
  • edit_callback (callable): Callback to execute when a user edits a message. The signature must include the previous message value contents, the previous user name, and the component instance.
  • help_text (str): If provided, initializes a chat message in the chat log using the provided help text as the message object and help as the user. This is useful for providing instructions, and will not be included in the serialize method by default.
  • placeholder_text (str): The text to display next to the placeholder icon.
  • placeholder_params (dict) Defaults to {"user": " ", "reaction_icons": {}, "show_copy_icon": False, "show_timestamp": False} Params to pass to the placeholder ChatMessage, like reaction_icons, timestamp_format, show_avatar, show_user, show_timestamp.
  • placeholder_threshold (float): Min duration in seconds of buffering before displaying the placeholder. If 0, the placeholder will be disabled. Defaults to 0.2.
  • post_hook (callable): A hook to execute after a new message is completely added, i.e. the generator is exhausted. The stream method will trigger this callback on every call. The signature must include the message and instance arguments.
  • auto_scroll_limit (int): Max pixel distance from the latest object in the Column to activate automatic scrolling upon update. Setting to 0 disables auto-scrolling.
  • scroll_button_threshold (int): Min pixel distance from the latest object in the Column to display the scroll button. Setting to 0 disables the scroll button.
  • load_buffer (int): The number of objects loaded on each side of the visible objects. When scrolled halfway into the buffer, the feed will automatically load additional objects while unloading objects on the opposite side.
  • show_activity_dot (bool): Whether to show an activity dot on the ChatMessage while streaming the callback response.
  • view_latest (bool): Whether to scroll to the latest object on init. If not enabled the view will be on the first object. Defaults to True.

Methods

Core

  • send: Sends a value and creates a new message in the chat log. If respond is True, additionally executes the callback, if provided.
  • serialize: Exports the chat log as a dict; primarily for use with transformers.
  • stream: Streams a token and updates the provided message, if provided. Otherwise creates a new message in the chat log, so be sure the returned message is passed back into the method, e.g. message = chat.stream(token, message=message). This method is primarily for outputs that are not generators–notably LangChain. For most cases, use the send method instead.

Other

  • clear: Clears the chat log and returns the messages that were cleared.
  • respond: Executes the callback with the latest message in the chat log. Typically called after streaming is completed, i.e. after a for loop where stream is called multiple times. If not streaming, use the respond keyword argument inside the send method instead.
  • trigger_post_hook: Triggers the post hook with the latest message in the chat log. Typically called after streaming is completed, i.e. after a for loop where stream is called multiple times. If not streaming, use the trigger_post_hook keyword argument inside the send method instead.
  • stop: Cancels the current callback task if possible.
  • scroll_to(index: int): Column will scroll to the object at the specified index.
  • undo: Removes the last count of messages from the chat log and returns them. Default count is 1.

Basics

ChatFeed can be initialized without any arguments.

chat_feed = pmui.ChatFeed()
chat_feed
        <script>
          async function embed_bokeh_1 () {
            if (window.Bokeh && window.Bokeh.Panel) {
              await Bokeh.embed.embed_item({"target_id": "output-codecell1-py", "root_id": "p1006", "doc": {"version": "3.7.2", "title": "Panel Application", "roots": [{"type": "object", "name": "panel.models.esm.ReactComponent", "id": "p1006", "attributes": {"name": "Card", "subscribed_events": {"type": "set", "entries": ["dom_event", "data_event"]}, "css_classes": ["chat-feed"], "styles": {"type": "map", "entries": [["padding", "0px"]]}, "stylesheets": ["\\n:host(.pn-loading):before, .pn-loading:before {\\n  background-color: #c3c3c3;\\n  mask-size: auto calc(min(50%, 400px));\\n  -webkit-mask-size: auto calc(min(50%, 400px));\\n}", {"type": "object", "name": "ImportedStyleSheet", "id": "p1003", "attributes": {"url": "https://cdn.holoviz.org/panel/1.7.0/dist/css/loading.css"}}, {"type": "object", "name": "ImportedStyleSheet", "id": "p1004", "attributes": {"url": "https://cdn.holoviz.org/panel/1.7.0/dist/css/chat_feed.css"}}], "min_width": 0, "margin": 5, "sizing_mode": "stretch_width", "align": "start", "css_bundle": "https://cdn.holoviz.org/panel-material-ui/v0.4.0rc1/panel-material-ui.bundle.css", "bundle": "url", "class_name": "Card", "children": ["header", "objects"], "data": {"type": "object", "name": "Card1", "id": "p1005", "attributes": {"name": "Card00157", "tags": ["_\_ref:p1006"], "objects": [{"type": "object", "name": "panel.models.feed.Feed", "id": "p1007", "attributes": {"name": "Feed00156", "subscribed_events": {"type": "set", "entries": ["scroll_button_click"]}, "css_classes": ["chat-feed-log", "scroll-vertical"], "stylesheets": ["\\n:host(.pn-loading):before, .pn-loading:before {\\n  background-color: #c3c3c3;\\n  mask-size: auto calc(min(50%, 400px));\\n  -webkit-mask-size: auto calc(min(50%, 400px));\\n}", {"id": "p1003"}, {"type": "object", "name": "ImportedStyleSheet", "id": "p1010", "attributes": {"url": "https://cdn.holoviz.org/panel/1.7.0/dist/css/listpanel.css"}}, {"type": "object", "name": "ImportedStyleSheet", "id": "p1008", "attributes": {"url": "https://cdn.holoviz.org/panel/1.7.0/dist/bundled/theme/material.css"}}, "\\n.material-icons { font-family: 'Material Icons'; }\\n.material-icons-outlined { font-family: 'Material Icons Outlined'; }\\n", {"id": "p1004"}], "min_width": 0, "margin": 0, "sizing_mode": "stretch_width", "align": "start", "auto_scroll_limit": 200, "scroll_button_threshold": 100, "view_latest": true}}], "theme_config": null, "sx": null, "_names": ["Feed00156"], "collapsible": false, "header_css_classes": ["chat-feed-header"], "hide_header": true, "title_css_classes": ["chat-feed-title"]}}, "esm": "https://cdn.holoviz.org/panel-material-ui/v0.4.0rc1/panel-material-ui.bundle.js", "importmap": {"type": "map", "entries": [["imports", {"type": "map", "entries": [["react", "https://esm.sh/[email protected]"], ["react/", "https://esm.sh/[email protected]/"], ["react-dom", "https://esm.sh/[email protected][email protected]&external=react"], ["react-dom/", "https://esm.sh/[email protected]&[email protected]&external=react/"], ["react-is", "https://esm.sh/[email protected]&external=react"], ["@emotion/cache", "https://esm.sh/@emotion/[email protected],[email protected]"], ["@emotion/react", "https://esm.sh/@emotion/[email protected],[email protected]&external=react,react-is"], ["@emotion/styled", "https://esm.sh/@emotion/[email protected],[email protected]&external=react,react-is"], ["@mui/icons-material/", "https://esm.sh/@mui/[email protected][email protected],[email protected]&external=react,react-dom,react-is,@emotion/react&path=/"], ["@mui/material/", "https://esm.sh/@mui/[email protected][email protected],[email protected]&external=react,react-dom,react-is,@emotion/react&path=/"], ["@mui/x-date-pickers/", "https://esm.sh/@mui/[email protected][email protected],[email protected]&external=react,react-dom,react-is,@emotion/react"], ["mui-color-input", "https://esm.sh/[email protected][email protected],[email protected]&external=react,react-dom,react-is,@emotion/react"], ["dayjs", "https://esm.sh/[email protected][email protected],[email protected]&external=react,react-dom,react-is,@emotion/react"], ["notistack", "https://esm.sh/[email protected][email protected],[email protected]&external=react,react-dom,react-is,@emotion/react"], ["material-icons/", "https://esm.sh/[email protected][email protected],[email protected]&external=react,react-dom,react-is,@emotion/react&path=/"], ["@fontsource/roboto/", "https://esm.sh/@fontsource/[email protected][email protected],[email protected]&external=react,react-dom,react-is,@emotion/react&path=/"]]}], ["scopes", {"type": "map"}]]}}}, {"type": "object", "name": "panel.models.location.Location", "id": "p1012", "attributes": {"name": "location", "reload": false}}], "defs": [{"type": "model", "name": "ReactiveHTML1"}, {"type": "model", "name": "FlexBox1", "properties": [{"name": "align_content", "kind": "Any", "default": "flex-start"}, {"name": "align_items", "kind": "Any", "default": "flex-start"}, {"name": "flex_direction", "kind": "Any", "default": "row"}, {"name": "flex_wrap", "kind": "Any", "default": "wrap"}, {"name": "gap", "kind": "Any", "default": ""}, {"name": "justify_content", "kind": "Any", "default": "flex-start"}]}, {"type": "model", "name": "FloatPanel1", "properties": [{"name": "config", "kind": "Any", "default": {"type": "map"}}, {"name": "contained", "kind": "Any", "default": true}, {"name": "position", "kind": "Any", "default": "right-top"}, {"name": "offsetx", "kind": "Any", "default": null}, {"name": "offsety", "kind": "Any", "default": null}, {"name": "theme", "kind": "Any", "default": "primary"}, {"name": "status", "kind": "Any", "default": "normalized"}]}, {"type": "model", "name": "GridStack1", "properties": [{"name": "ncols", "kind": "Any", "default": null}, {"name": "nrows", "kind": "Any", "default": null}, {"name": "allow_resize", "kind": "Any", "default": true}, {"name": "allow_drag", "kind": "Any", "default": true}, {"name": "state", "kind": "Any", "default": []}]}, {"type": "model", "name": "drag1", "properties": [{"name": "slider_width", "kind": "Any", "default": 5}, {"name": "slider_color", "kind": "Any", "default": "black"}, {"name": "value", "kind": "Any", "default": 50}]}, {"type": "model", "name": "click1", "properties": [{"name": "terminal_output", "kind": "Any", "default": ""}, {"name": "debug_name", "kind": "Any", "default": ""}, {"name": "clears", "kind": "Any", "default": 0}]}, {"type": "model", "name": "FastWrapper1", "properties": [{"name": "object", "kind": "Any", "default": null}, {"name": "style", "kind": "Any", "default": null}]}, {"type": "model", "name": "NotificationArea1", "properties": [{"name": "js_events", "kind": "Any", "default": {"type": "map"}}, {"name": "max_notifications", "kind": "Any", "default": 5}, {"name": "notifications", "kind": "Any", "default": []}, {"name": "position", "kind": "Any", "default": "bottom-right"}, {"name": "_clear", "kind": "Any", "default": 0}, {"name": "types", "kind": "Any", "default": [{"type": "map", "entries": [["type", "warning"], ["background", "#ffc107"], ["icon", {"type": "map", "entries": [["className", "fas fa-exclamation-triangle"], ["tagName", "i"], ["color", "white"]]}]]}, {"type": "map", "entries": [["type", "info"], ["background", "#007bff"], ["icon", {"type": "map", "entries": [["className", "fas fa-info-circle"], ["tagName", "i"], ["color", "white"]]}]]}]}]}, {"type": "model", "name": "Notification", "properties": [{"name": "background", "kind": "Any", "default": null}, {"name": "duration", "kind": "Any", "default": 3000}, {"name": "icon", "kind": "Any", "default": null}, {"name": "message", "kind": "Any", "default": ""}, {"name": "notification_type", "kind": "Any", "default": null}, {"name": "_rendered", "kind": "Any", "default": false}, {"name": "_destroyed", "kind": "Any", "default": false}]}, {"type": "model", "name": "TemplateActions1", "properties": [{"name": "open_modal", "kind": "Any", "default": 0}, {"name": "close_modal", "kind": "Any", "default": 0}]}, {"type": "model", "name": "BootstrapTemplateActions1", "properties": [{"name": "open_modal", "kind": "Any", "default": 0}, {"name": "close_modal", "kind": "Any", "default": 0}]}, {"type": "model", "name": "TemplateEditor1", "properties": [{"name": "layout", "kind": "Any", "default": []}]}, {"type": "model", "name": "MaterialTemplateActions1", "properties": [{"name": "open_modal", "kind": "Any", "default": 0}, {"name": "close_modal", "kind": "Any", "default": 0}]}, {"type": "model", "name": "ReactiveESM1", "properties": [{"name": "esm_constants", "kind": "Any", "default": {"type": "map"}}]}, {"type": "model", "name": "JSComponent1", "properties": [{"name": "esm_constants", "kind": "Any", "default": {"type": "map"}}]}, {"type": "model", "name": "ReactComponent1", "properties": [{"name": "esm_constants", "kind": "Any", "default": {"type": "map"}}]}, {"type": "model", "name": "AnyWidgetComponent1", "properties": [{"name": "esm_constants", "kind": "Any", "default": {"type": "map"}}]}, {"type": "model", "name": "request_value1", "properties": [{"name": "fill", "kind": "Any", "default": "none"}, {"name": "_synced", "kind": "Any", "default": null}, {"name": "_request_sync", "kind": "Any", "default": 0}]}, {"type": "model", "name": "MaterialComponent1", "properties": [{"name": "loading", "kind": "Any", "default": false}, {"name": "dark_theme", "kind": "Any", "default": false}, {"name": "theme_config", "kind": "Any", "default": null}, {"name": "sx", "kind": "Any", "default": null}, {"name": "esm_constants", "kind": "Any", "default": {"type": "map"}}]}, {"type": "model", "name": "MaterialUIComponent1", "properties": [{"name": "loading", "kind": "Any", "default": false}, {"name": "dark_theme", "kind": "Any", "default": false}, {"name": "theme_config", "kind": "Any", "default": null}, {"name": "sx", "kind": "Any", "default": null}, {"name": "esm_constants", "kind": "Any", "default": {"type": "map"}}]}, {"type": "model", "name": "MaterialWidget1", "properties": [{"name": "value", "kind": "Any", "default": null}, {"name": "margin", "kind": "Any", "default": 10}, {"name": "width", "kind": "Any", "default": 300}, {"name": "loading", "kind": "Any", "default": false}, {"name": "dark_theme", "kind": "Any", "default": false}, {"name": "theme_config", "kind": "Any", "default": null}, {"name": "sx", "kind": "Any", "default": null}, {"name": "description", "kind": "Any", "default": ""}, {"name": "disabled", "kind": "Any", "default": false}, {"name": "label", "kind": "Any", "default": ""}, {"name": "esm_constants", "kind": "Any", "default": {"type": "map"}}]}, {"type": "model", "name": "Button1", "properties": [{"name": "label", "kind": "Any", "default": ""}, {"name": "value", "kind": "Any", "default": false}, {"name": "margin", "kind": "Any", "default": 10}, {"name": "width", "kind": "Any", "default": null}, {"name": "loading", "kind": "Any", "default": false}, {"name": "disabled", "kind": "Any", "default": false}, {"name": "dark_theme", "kind": "Any", "default": false}, {"name": "theme_config", "kind": "Any", "default": null}, {"name": "sx", "kind": "Any", "default": null}, {"name": "description", "kind": "Any", "default": null}, {"name": "color", "kind": "Any", "default": "primary"}, {"name": "description_delay", "kind": "Any", "default": 500}, {"name": "clicks", "kind": "Any", "default": 0}, {"name": "disable_elevation", "kind": "Any", "default": false}, {"name": "end_icon", "kind": "Any", "default": null}, {"name": "icon", "kind": "Any", "default": null}, {"name": "icon_size", "kind": "Any", "default": "1em"}, {"name": "size", "kind": "Any", "default": "medium"}, {"name": "variant", "kind": "Any", "default": "contained"}, {"name": "href", "kind": "Any", "default": null}, {"name": "target", "kind": "Any", "default": "_self"}, {"name": "esm_constants", "kind": "Any", "default": {"type": "map"}}]}, {"type": "model", "name": "Fab1", "properties": [{"name": "label", "kind": "Any", "default": ""}, {"name": "value", "kind": "Any", "default": false}, {"name": "margin", "kind": "Any", "default": 10}, {"name": "width", "kind": "Any", "default": null}, {"name": "loading", "kind": "Any", "default": false}, {"name": "disabled", "kind": "Any", "default": false}, {"name": "dark_theme", "kind": "Any", "default": false}, {"name": "theme_config", "kind": "Any", "default": null}, {"name": "sx", "kind": "Any", "default": null}, 

....

Download this notebook from GitHub (right-click to download).


<details>

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions