# Source code for enaml.widgets.web_view

    #------------------------------------------------------------------------------
    # Copyright (c) 2013-2025, Nucleic Development Team.
    #
    # Distributed under the terms of the Modified BSD License.
    #
    # The full license is in the file LICENSE, distributed with this software.
    #------------------------------------------------------------------------------
    from atom.api import Str, Typed, ForwardTyped, set_default

    from enaml.core.declarative import d_, observe

    from .control import Control, ProxyControl

    class ProxyWebView(ProxyControl):
        """ The abstract definition of a proxy WebView object.

        """
        #: A reference to the WebView declaration.
        declaration = ForwardTyped(lambda: WebView)

        def set_url(self, url):
            raise NotImplementedError

        def set_html(self, html):
            raise NotImplementedError

    class WebView(Control):
        """ A widget which displays a web page.

        Unlike the simpler `Html` widget, this widget supports the features
        of a full web browser.

        """
        #: The URL to load in the web view. This can be a path to a remote
        #: resource or a path to a file on the local filesystem. This value
        #: is mutually exclusive of `html`.
        url = d_(Str())

        #: The html to load into the web view. This value is mutually
        #: exclusive of `url`.
        html = d_(Str())

        #: The base url for loading content in statically supplied 'html'.
        base_url = d_(Str())

        #: A web view expands freely in height and width by default.
        hug_width = set_default('ignore')
        hug_height = set_default('ignore')

        #: A reference to the ProxyWebView object.
        proxy = Typed(ProxyWebView)

        #--------------------------------------------------------------------------
        # Observers
        #--------------------------------------------------------------------------
        @observe('url', 'html')
        def _update_proxy(self, change):
            """ An observer which sends state change to the proxy.

            """
            # The superclass handler implementation is sufficient.
            super(WebView, self)._update_proxy(change)