
    ȯei.                        d dl mZ d dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d d	lmZ d d
lmZ erd dlmZ  e
d      ddddd	 	 	 	 	 	 	 	 	 	 	 dd       Z G d d      Zy)    )annotationsN)Path)TYPE_CHECKING)StreamlitAPIException)gather_metrics)get_script_run_ctx)page_icon_and_name)validate_icon_or_emoji)calc_md5)CallablePageFtitleiconurl_pathdefaultStreamlitPagec               "    t        | ||||      S )uy  Configure a page for ``st.navigation`` in a multipage app.

    Call ``st.Page`` to initialize a ``StreamlitPage`` object, and pass it to
    ``st.navigation`` to declare a page in your app.

    When a user navigates to a page, ``st.navigation`` returns the selected
    ``StreamlitPage`` object. Call ``.run()`` on the returned ``StreamlitPage``
    object to execute the page. You can only run the page returned by
    ``st.navigation``, and you can only run it once per app rerun.

    A page can be defined by a Python file or ``Callable``.

    Parameters
    ----------
    page : str, Path, or callable
        The page source as a ``Callable`` or path to a Python file. If the page
        source is defined by a Python file, the path can be a string or
        ``pathlib.Path`` object. Paths can be absolute or relative to the
        entrypoint file. If the page source is defined by a ``Callable``, the
        ``Callable`` can't accept arguments.

    title : str or None
        The title of the page. If this is ``None`` (default), the page title
        (in the browser tab) and label (in the navigation menu) will be
        inferred from the filename or callable name in ``page``. For more
        information, see `Overview of multipage apps
        <https://docs.streamlit.io/st.page.automatic-page-labels>`_.

    icon : str or None
        An optional emoji or icon to display next to the page title and label.
        If ``icon`` is ``None`` (default), no icon is displayed next to the
        page label in the navigation menu, and a Streamlit icon is displayed
        next to the title (in the browser tab). If ``icon`` is a string, the
        following options are valid:

        - A single-character emoji. For example, you can set ``icon="🚨"``
            or ``icon="🔥"``. Emoji short codes are not supported.

        - An icon from the Material Symbols library (rounded style) in the
            format ``":material/icon_name:"`` where "icon_name" is the name
            of the icon in snake case.

            For example, ``icon=":material/thumb_up:"`` will display the
            Thumb Up icon. Find additional icons in the `Material Symbols             <https://fonts.google.com/icons?icon.set=Material+Symbols&icon.style=Rounded>`_
            font library.

        - ``"spinner"``: Displays a spinner as an icon. In this case, the
          spinner only displays next to the page label in the navigation menu.
          The spinner isn't used as the page favicon next to the title in the
          browser tab. The favicon is the default Streamlit icon unless
          otherwise specified with the ``page_icon`` parameter of
          ``st.set_page_config``.

    url_path : str or None
        The page's URL pathname, which is the path relative to the app's root
        URL. If this is ``None`` (default), the URL pathname will be inferred
        from the filename or callable name in ``page``. For more information,
        see `Overview of multipage apps
        <https://docs.streamlit.io/st.page.automatic-page-urls>`_.

        The default page will have a pathname of ``""``, indicating the root
        URL of the app. If you set ``default=True``, ``url_path`` is ignored.
        ``url_path`` can't include forward slashes; paths can't include
        subdirectories.

    default : bool
        Whether this page is the default page to be shown when the app is
        loaded. If ``default`` is ``False`` (default), the page will have a
        nonempty URL pathname. However, if no default page is passed to
        ``st.navigation`` and this is the first page, this page will become the
        default page. If ``default`` is ``True``, then the page will have
        an empty pathname and ``url_path`` will be ignored.

    Returns
    -------
    StreamlitPage
        The page object associated to the given script.

    Example
    -------
    >>> import streamlit as st
    >>>
    >>> def page2():
    >>>     st.title("Second page")
    >>>
    >>> pg = st.navigation([
    >>>     st.Page("page1.py", title="First page", icon="🔥"),
    >>>     st.Page(page2, title="Second page", icon=":material/favorite:"),
    >>> ])
    >>> pg.run()
    r   )r   )pager   r   r   r   s        [/var/www/html/glpi_dashboard/venv/lib/python3.12/site-packages/streamlit/navigation/page.pyr   r       s    J Ex     c                      e Zd ZdZddddd	 	 	 	 	 	 	 	 	 	 	 ddZedd       Zedd       Zedd       Zdd	Z	edd
       Z
y)r   a  A page within a multipage Streamlit app.

    Use ``st.Page`` to initialize a ``StreamlitPage`` object.

    Attributes
    ----------
    icon : str
        The icon of the page.

        If no icon was declared in ``st.Page``, this property returns ``""``.

    title : str
        The title of the page.

        Unless declared otherwise in ``st.Page``, the page title is inferred
        from the filename or callable name. For more information, see
        `Overview of multipage apps
        <https://docs.streamlit.io/st.page.automatic-page-labels>`_.

    url_path : str
        The page's URL pathname, which is the path relative to the app's root
        URL.

        Unless declared otherwise in ``st.Page``, the URL pathname is inferred
        from the filename or callable name. For more information, see
        `Overview of multipage apps
        <https://docs.streamlit.io/st.page.automatic-page-urls>`_.

        The default page will always have a ``url_path`` of ``""`` to indicate
        the root URL (e.g. homepage).

    NFr   c                  || _         t               }|sy |j                  j                  }t	        |t
              rt        |      }t	        |t              r<||z  j                         }|j                         st        d|j                   d      d}d}	t	        |t              rt        |      \  }	}n/t        |d      rt        |j                        }n|t        d      || _        |xs |j                  dd      | _        |t#        |       |xs |	| _        | j                   j'                         dk(  rt        d      || _        |O|j'                         dk(  r|st        d	      |j'                  d
      | _        d
| j(                  v rt        d      | j$                  rt#        | j$                         d| _        y )Nz!Unable to create Page. The file `z` could not be found. __name__zHCannot infer page title for Callable. Set the `title=` keyword argument._ zKThe title of the page cannot be empty or consist of underscores/spaces onlyzKThe URL path cannot be an empty string unless the page is the default page./z9The URL path cannot contain a nested path (e.g. foo/bar).F)_defaultr   pages_managermain_script_parent
isinstancestrr   resolveis_filer   namer	   hasattrr   _pagereplace_titler
   _iconstrip	_url_path_can_be_called)
selfr   r   r   r   r   ctx	main_pathinferred_nameinferred_icons
             r   __init__zStreamlitPage.__init__   s    & "%%88	dC :DdD!$--/D<<>+7		{BWX  dD!+=d+C(M=T:&.M] (Z  15
 CM$9$9#s$C"4(/-
;;"$']  ,~~2%g+a  &^^C0DNdnn$+O  ::"4::. %*r   c                    | j                   S )a  The title of the page.

        Unless declared otherwise in ``st.Page``, the page title is inferred
        from the filename or callable name. For more information, see
        `Overview of multipage apps
        <https://docs.streamlit.io/st.page.automatic-page-labels>`_.
        )r*   r/   s    r   r   zStreamlitPage.title   s     {{r   c                    | j                   S )zmThe icon of the page.

        If no icon was declared in ``st.Page``, this property returns ``""``.
        )r+   r6   s    r   r   zStreamlitPage.icon  s     zzr   c                6    | j                   rdS | j                  S )a  The page's URL pathname, which is the path relative to the app's         root URL.

        Unless declared otherwise in ``st.Page``, the URL pathname is inferred
        from the filename or callable name. For more information, see
        `Overview of multipage apps
        <https://docs.streamlit.io/st.page.automatic-page-urls>`_.

        The default page will always have a ``url_path`` of ``""`` to indicate
        the root URL (e.g. homepage).
        r   )r   r-   r6   s    r   r   zStreamlitPage.url_path  s     ]]r66r   c                   | j                   st        d      d| _         t               }|sy|j                  | j                        5  t        | j                        r| j                          	 ddd       y|j                  j                  t        | j                              }t        j                  d      }t        | j                        |j                  d<   t        ||j                         ddd       y# 1 sw Y   yxY w)aA  Execute the page.

        When a page is returned by ``st.navigation``, use the ``.run()`` method
        within your entrypoint file to render the page. You can only call this
        method on the page returned by ``st.navigation``. You can only call
        this method once per run of your entrypoint file.

        zbThis page cannot be called directly. Only the page returned from st.navigation can be called once.FN__main____file__)r.   r   r   run_with_active_hash_script_hashcallabler(   r    get_page_script_byte_coder#   types
ModuleType__dict__exec)r/   r0   codemodules       r   runzStreamlitPage.run  s     ""'t  $ "%%d&7&78 	(

#

	( 	( $$>>s4::OD%%j1F*-djj/FOOJ'v'	( 	( 	(s   'C;7A;C;;Dc                ,    t        | j                        S )N)r   r-   r6   s    r   r=   zStreamlitPage._script_hash8  s    ''r   )r   str | Path | Callable[[], None]r   
str | Noner   rI   r   rI   r   boolreturnNone)rK   r#   )rK   rL   )r   
__module____qualname____doc__r4   propertyr   r   r   rF   r=    r   r   r   r      s    J !#J*-J* 	J*
 J* J* J* 
J*X     7 7(< ( (r   )r   rH   r   rI   r   rI   r   rI   r   rJ   rK   r   )
__future__r   r@   pathlibr   typingr   streamlit.errorsr   streamlit.runtime.metrics_utilr   7streamlit.runtime.scriptrunner_utils.script_run_contextr   streamlit.source_utilr	   streamlit.string_utilr
   streamlit.utilr   collections.abcr   r   r   rQ   r   r   <module>r\      s    #     2 9 V 4 8 #(  f
)f f 	f
 f f f fRp( p(r   