§
    ÎÐjDi  ã                   óô  — d dl Z d dlZd dlZd dlmZ d dlZd dlmZ d dl	m
Z
 d dlmZ  G d„ de
¦  «        Z G d„ d	e¦  «        Zd
edefd„Z ed¬¦  «        dedefd„¦   «         Zdedeeef         fd„Zdedefd„Zddœdedededefd„Zddœdeded
ededef
d„Zddœdeded
ededef
d„Zddœdeded
ededef
d „Zd0dd!d"d#œd$ed%eded&edef
d'„Zd0dd(d)dd*œd+ed%ed,edededefd-„Zdefd.„Zdefd/„ZdS )1é    N)Ú	lru_cache)Ú	Extension)ÚTreeprocessor)ÚEscapeHtmlExtensionc                   ó   — e Zd Zd„ ZdS )Ú_SafeHelpLinksc                 óü  — |                      ¦   «         D ]æ}|j        dk    r|                     dd¦  «        }t          j        d|t          j        ¦  «        s|j                             dd ¦  «         Œ_|                     dd¦  «         |                     dd¦  «         ŒŒ|j        d	k    rOt          j        d|                     d
d¦  «        t          j        ¦  «        s|j                             d
d ¦  «         Œçd S )NÚaÚhrefÚ z
^https?://ÚtargetÚ_blankÚrelznoopener noreferrerÚimgÚsrc)	ÚiterÚtagÚgetÚreÚmatchÚ
IGNORECASEÚattribÚpopÚset)ÚselfÚrootÚelementr   s       úAC:\Users\johnn\OneDrive\Documents\AI\shared\gradio\model_infos.pyÚrunz_SafeHelpLinks.run   sî   € Ø—y’y‘{”{ð 
	4ð 
	4ˆGØŒ{˜cÒ!Ð!Ø—{’{ 6¨2Ñ.Ô.�Ý”x ¨tµR´]ÑCÔCð >Ø”N×&Ò& v¨tÑ4Ô4Ð4Ð4à—K’K ¨(Ñ3Ô3Ð3Ø—K’K Ð'<Ñ=Ô=Ð=Ð=Ø” Ò%Ð%Ý”x ¨w¯{ª{¸5À"Ñ/EÔ/EÅrÄ}ÑUÔUð 4Ø”N×&Ò& u¨dÑ3Ô3Ð3øð
	4ð 
	4ó    N)Ú__name__Ú
__module__Ú__qualname__r   © r    r   r   r      s#   € € € € € ð4ð 4ð 4ð 4ð 4r    r   c                   ó   — e Zd Zd„ ZdS )Ú_SafeHelpLinksExtensionc                 óX   — |j                              t          |¦  «        dd¦  «         d S )NÚsafe_help_linksé   )ÚtreeprocessorsÚregisterr   )r   Úmds     r   ÚextendMarkdownz&_SafeHelpLinksExtension.extendMarkdown   s,   € Ø
Ô×"Ò"¥>°"Ñ#5Ô#5Ð7HÈ!ÑLÔLÐLÐLÐLr    N)r!   r"   r#   r-   r$   r    r   r&   r&      s(   € € € € € ðMð Mð Mð Mð Mr    r&   ÚmarkdownÚreturnc                 ón   — t          | pd¦  «                             ¦   «         }|sdS t          |¦  «        S )Nr   )ÚstrÚstripÚ_render_markdown_source)r.   Úsources     r   Ú_render_markdownr5   "   s:   € Ý��˜RÑ Ô ×&Ò&Ñ(Ô(€FØð ØˆrÝ" 6Ñ*Ô*Ð*r    é€   )Úmaxsizer4   c           	      ój   — t          j        | dddt          ¦   «         t          ¦   «         gd¬¦  «        S )NÚtablesÚfenced_codeÚ
sane_listsÚhtml5)Ú
extensionsÚoutput_format)Úmarkdown_moduler.   r   r&   )r4   s    r   r3   r3   )   s@   € õ Ô#ØØ˜m¨\Õ;NÑ;PÔ;PÕRiÑRkÔRkÐlØðñ ô ð r    Ú
model_namec                 óF   — t          |pd¦  «        t          | pd¦  «        fS )NÚModelr   )r1   )Úinfosr@   s     r   Ú_normalize_infosrD   4   s&   € ÝˆzÐ$˜WÑ%Ô%¥s¨5¨;°BÑ'7Ô'7Ð7Ð7r    Úvaluec                 óR   — t          j        | ¦  «                             dd¦  «        S )Nz</z<\/)ÚjsonÚdumpsÚreplace)rE   s    r   Ú_json_script_payloadrJ   8   s"   € ÝŒ:�eÑÔ×$Ò$ T¨6Ñ2Ô2Ð2r    r   )Úextra_classÚpopup_idÚtitlerK   c                ó´   — t          j        |d¬¦  «        }d|rdt          j        |d¬¦  «        › �ndz   }d|› d|› d|› d	t          j        | d¬¦  «        › d
�	S )NT©Úquotezwangp-model-info-triggerú r   z<button type='button' class='z	' title='z' aria-label='z' data-wangp-model-info-open='z'>i</button>)ÚhtmlÚescape)rL   rM   rK   Ú
title_attrÚclassess        r   Úrender_info_triggerrV   <   s¾   € Ý”˜U¨$Ð/Ñ/Ô/€JØ(ÐZeÐ,mÐ,Vµ´¸KÈtÐ0TÑ0TÔ0TÐ,VÐ,VÐ,VÐkmÑn€Gð q¨7ð  qð  q¸Zð  qð  qÐWað  qð  qõ  BFô  BMð  NVð  ^bð  Bcñ  Bcô  Bcð  qð  qð  qð  qr    F©ÚlazyrX   c          	      óš  — t          j        |d¬¦  «        }t          j        |¦  «        }|rj| › d�}t          j        t          t          |¦  «        ¦  «        d¬¦  «        }dt          j        |d¬¦  «        › dt          j        |d¬¦  «        › d|› d�}nd	t          |¦  «        › d
�}dt          j        | d¬¦  «        › d|› d|› d|› d�	S )NTrO   z-payloadFzb<div class='wangp-model-info-content' data-wangp-model-info-content data-wangp-model-info-source='zL'><div class='wangp-model-info-loading'>Loading...</div></div><textarea id='z	' hidden>z</textarea>z&<div class='wangp-model-info-content'>ú</div>z	<div id='z;' class='wangp-model-info-popup' role='dialog' aria-label='z°' data-wangp-model-info-popup hidden><div class='wangp-model-info-card'><div class='wangp-model-info-titlebar' data-wangp-model-info-drag><div class='wangp-model-info-heading'>zŒ</div><button type='button' class='wangp-model-info-close' aria-label='Close information' data-wangp-model-info-close>&times;</button></div>ú</div></div>)rR   rS   rJ   r5   )	rL   rM   r.   rX   rT   Ú
title_htmlÚ
payload_idÚpayloadÚcontents	            r   Úrender_info_popupr`   B   sO  € Ý”˜U¨$Ð/Ñ/Ô/€JÝ”˜UÑ#Ô#€JØð 
^Ø Ð*Ð*Ð*ˆ
Ý”+Õ2Õ3CÀHÑ3MÔ3MÑNÔNÐV[Ð\Ñ\Ô\ˆð`ÕquÔq|ð  ~Hð  PTð  rUñ  rUô  rUð `ð `õ "œ[¨¸4Ð@Ñ@Ô@ð`ð `ð LSð`ð `ð `ð 	ˆð ^Õ;KÈHÑ;UÔ;UÐ]Ð]Ð]ˆð	•D”K °Ð5Ñ5Ô5ð 	ð 	Ðr|ð 	ð 	ð 2<ð	ð 	ð ð	ð 	ð 	ð
r    c                óJ   — t          | |¦  «        t          | |||¬¦  «        z   S ©NrW   )rV   r`   ©rL   rM   r.   rX   s       r   Úrender_info_trigger_and_popuprd   ]   s+   € Ý˜x¨Ñ/Ô/Õ2CÀHÈeÐU]ÐdhÐ2iÑ2iÔ2iÑiÐir    c                ó(   — t          | |||¬¦  «        S rb   )rd   rc   s       r   Ú_render_info_trigger_and_popuprf   a   s   € Ý(¨°5¸(ÈÐNÑNÔNÐNr    rB   é(   )Ú
model_typer@   ÚheightÚdescriptionrh   ri   c                ó–  — |sdt          |¦  «        › d| › d�S t          ||¦  «        \  }}|                     ¦   «         sdt          |¦  «        › d| › d�S dt          j        ddt          |p|¦  «        ¦  «                             d¦  «                             ¦   «         z   }dt          |¦  «        › dt          |||¦  «        › d| › d�S )	Nz5<div class='wangp-model-info-host' style='min-height:z.px'><div class='wangp-model-info-description'>r[   zwangp-model-info-ú[^A-Za-z0-9_-]ú-zpx'>z*<div class='wangp-model-info-description'>)ÚintrD   r2   r   Úsubr1   Úlowerrf   )rj   rC   rh   r@   ri   rM   r.   rL   s           r   Úrender_model_descriptionrq   e   s,  € Øð \ð \ÅsÈ6Á{Ä{ð  \ð  \ð  CNð  \ð  \ð  \ð  	\Ý& u¨jÑ9Ô9�O€Eˆ8Ø�>Š>ÑÔð \ð \ÅsÈ6Á{Ä{ð  \ð  \ð  CNð  \ð  \ð  \ð  	\Ø"¥R¤VÐ,=¸sÅCÈ
ÐH`ÐV`ÑDaÔDaÑ%bÔ%b×%hÒ%hÐilÑ%mÔ%m×%sÒ%sÑ%uÔ%uÑu€Hð	ÅÀFÁÄð 	ð 	Ý)¨(°E¸8ÑDÔDð	ð 	à5@ð	ð 	ð 	ðr    ÚpromptzPrompt Guidelines)rh   Ú	prompt_idrM   rX   Úlabelrs   c                ó  — |sdS t          ||¦  «        \  }}|                     ¦   «         sdS t          j        dd|pd› d|pd› �¦  «                             d¦  «                             ¦   «         }d|› �}	dt          |	|||¬¦  «        › d	�S )
Nr   rl   rm   Úmodelrr   zwangp-prompt-info-z$<div class='wangp-prompt-info-host'>rW   rZ   )rD   r2   r   ro   rp   rf   )
rt   rC   rh   rs   rM   rX   Úpopup_titler.   Ú	popup_keyrL   s
             r   Úrender_prompt_labelry   t   s½   € Øð ØˆrÝ,¨U°EÑ:Ô:Ñ€K�Ø�>Š>ÑÔð ØˆrÝ”Ð(¨#°*Ð2GÀÐ/aÐ/aÈ)ÐJ_ÐW_Ð/aÐ/aÑbÔb×hÒhÐilÑmÔm×sÒsÑuÔu€IØ/ IÐ/Ð/€Hð	Ý)¨(°KÀÐPTÐUÑUÔUð	ð 	ð 	ðr    c                  ó   — dS )Na1$  
.wangp-model-info-host {
    position: relative;
    padding-right: 0;
    display: flex;
    align-items: center;
    gap: 4px;
}
.wangp-model-info-host > .wangp-model-info-trigger {
    position: static;
    order: 1;
    flex: 0 0 22px;
    margin: 0;
    width: 22px;
    height: 22px;
    min-width: 22px;
    min-height: 22px;
    border: 1px solid currentColor;
    background: transparent;
    color: #175a79;
    font: 500 17px/1 Arial, sans-serif;
}
.header-markdown-group .html-container {
    padding: 0 !important;
}
.wangp-model-info-description {
    flex: 1;
    min-width: 0;
    line-height: 1.35;
}
.wangp-prompt-info-host {
    position: relative;
    width: 100%;
    height: 0;
    margin: 0;
    overflow: visible;
    pointer-events: none;
    z-index: 50;
}
.wangp-prompt-info-stack {
    position: relative;
}
.wangp-prompt-info-stack .wangp-prompt-info-anchor {
    position: absolute !important;
    inset: 0 0 auto 0 !important;
    width: 100% !important;
    max-width: 100% !important;
    z-index: 50;
}
.wangp-prompt-info-anchor,
.wangp-prompt-info-anchor > *,
.wangp-prompt-info-anchor .html-container {
    min-height: 0 !important;
    height: 0 !important;
    margin: 0 !important;
    padding: 0 !important;
    border: 0 !important;
    background: transparent !important;
    overflow: visible !important;
    scrollbar-width: none !important;
}
.wangp-prompt-info-anchor::-webkit-scrollbar,
.wangp-prompt-info-anchor *::-webkit-scrollbar {
    display: none !important;
    width: 0 !important;
    height: 0 !important;
}
.wangp-prompt-info-host .wangp-model-info-trigger {
    pointer-events: auto;
    z-index: 60;
    top: 23px;
    right: 8px;
    width: 18px;
    height: 18px;
    min-width: 18px;
    min-height: 18px;
    border: 1px solid var(--button-secondary-border-color, rgba(17, 84, 118, 0.24));
    background: var(--button-secondary-background-fill, rgba(255, 255, 255, 0.86));
    box-shadow: none;
    color: var(--button-secondary-text-color, #155574);
    font-size: 11px;
}
.wangp-prompt-info-host .wangp-model-info-trigger:hover {
    box-shadow: none;
}
.wangp-model-info-trigger {
    position: absolute;
    top: 1px;
    right: 2px;
    width: 26px;
    height: 26px;
    min-width: 26px;
    min-height: 26px;
    padding: 0;
    border: 1px solid var(--button-secondary-border-color, rgba(17, 84, 118, 0.18));
    border-radius: 999px;
    background: var(--button-secondary-background-fill, linear-gradient(180deg, rgba(255, 255, 255, 0.98) 0%, rgba(238, 247, 252, 0.98) 100%));
    color: var(--button-secondary-text-color, #155574);
    box-shadow: none;
    cursor: pointer;
    line-height: 1;
    display: inline-flex;
    align-items: center;
    justify-content: center;
}
.wangp-model-info-trigger:hover {
    border-color: rgba(16, 86, 121, 0.36);
    box-shadow: none;
}
.wangp-model-info-popup[hidden] {
    display: none !important;
}
.wangp-model-info-popup {
    position: fixed;
    top: 96px;
    right: 32px;
    width: min(680px, calc(100vw - 34px));
    max-height: min(78vh, 720px);
    z-index: 1200;
    pointer-events: none;
}
.wangp-model-info-card {
    pointer-events: auto;
    overflow: hidden;
    border-radius: 18px;
    border: 1px solid var(--border-color-primary, rgba(17, 84, 118, 0.16));
    background: var(--background-fill-primary, rgba(255, 255, 255, 0.99));
    box-shadow: 0 28px 62px rgba(7, 31, 48, 0.24);
    color: var(--body-text-color, #174a67);
}
.wangp-model-info-titlebar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 14px;
    padding: 10px 14px 9px 16px;
    background: var(--button-primary-background-fill, linear-gradient(180deg, rgba(16, 86, 121, 0.98) 0%, rgba(10, 59, 84, 0.98) 100%));
    color: var(--button-primary-text-color, #f3fbff);
    cursor: move;
    user-select: none;
    touch-action: none;
}
.wangp-model-info-titlebar:active {
    cursor: move;
}
.wangp-model-info-heading {
    color: var(--button-primary-text-color, #f3fbff) !important;
    font-size: 0.92rem;
    font-weight: 800;
}
.wangp-model-info-close {
    width: 26px;
    height: 26px;
    min-width: 26px;
    min-height: 26px;
    padding: 0;
    border: 1px solid var(--button-primary-border-color, rgba(255, 255, 255, 0.24));
    border-radius: 999px;
    background: rgba(255, 255, 255, 0.12);
    color: var(--button-primary-text-color, #f3fbff);
    cursor: pointer;
    font-size: 20px;
    line-height: 1;
}
.wangp-model-info-content {
    max-height: calc(min(78vh, 720px) - 46px);
    overflow: auto;
    padding: 16px 18px 18px;
    color: var(--body-text-color, #174a67);
    font-size: 0.92rem;
    line-height: 1.5;
}
.wangp-prompt-helper-popup {
    box-sizing: border-box;
    max-height: calc(100vh - 12px);
    min-width: 360px;
    min-height: 320px;
    padding: 0 8px 8px 0;
    border-radius: 18px;
    filter: drop-shadow(0 20px 34px rgba(7, 31, 48, 0.24)) drop-shadow(0 3px 10px rgba(7, 31, 48, 0.14));
    overflow: hidden;
    pointer-events: auto;
    resize: both;
}
.wangp-prompt-helper-popup .wangp-model-info-card {
    display: flex;
    flex-direction: column;
    width: 100%;
    height: 100%;
    max-width: calc(100vw - 24px);
    max-height: 100%;
    box-shadow: none;
    resize: none;
}
.wangp-prompt-helper-popup .wangp-model-info-content {
    flex: 1 1 auto;
    min-height: 0;
    max-height: none;
}
.wangp-model-info-content h1,
.wangp-model-info-content h2,
.wangp-model-info-content h3,
.wangp-model-info-content h4,
.wangp-model-info-content h5,
.wangp-model-info-content h6 {
    margin: 12px 0 7px;
    color: var(--body-text-color, #103f59);
    font-weight: 800;
}
.wangp-model-info-content h1:first-child,
.wangp-model-info-content h2:first-child,
.wangp-model-info-content h3:first-child,
.wangp-model-info-content h4:first-child,
.wangp-model-info-content h5:first-child,
.wangp-model-info-content h6:first-child {
    margin-top: 0;
}
.wangp-model-info-content p,
.wangp-model-info-content ul,
.wangp-model-info-content ol,
.wangp-model-info-content blockquote,
.wangp-model-info-content table {
    margin: 0 0 11px;
}
.wangp-model-info-content ul,
.wangp-model-info-content ol {
    padding-left: 20px;
}
.wangp-model-info-content blockquote {
    padding-left: 13px;
    border-left: 3px solid var(--border-color-primary, rgba(17, 84, 118, 0.24));
}
.wangp-model-info-content table {
    width: 100%;
    border-collapse: collapse;
    overflow-wrap: anywhere;
}
.wangp-model-info-content th,
.wangp-model-info-content td {
    padding: 7px 9px;
    border: 1px solid var(--border-color-primary, rgba(17, 84, 118, 0.18));
    text-align: left;
    vertical-align: top;
}
.wangp-model-info-content th {
    background: var(--background-fill-secondary, rgba(16, 86, 121, 0.08));
}
.wangp-model-info-content code {
    padding: 1px 4px;
    border-radius: 5px;
    background: var(--background-fill-secondary, rgba(16, 86, 121, 0.08));
    color: var(--body-text-color, #0f4967);
}
.wangp-model-info-content pre {
    margin: 8px 0 13px;
    padding: 12px;
    border-radius: 12px;
    border: 1px solid var(--border-color-primary, rgba(17, 84, 118, 0.12));
    background: var(--background-fill-secondary, #f4f9fc);
    overflow: auto;
}
.wangp-model-info-content pre code {
    padding: 0;
    border-radius: 0;
    background: transparent;
    color: var(--body-text-color, #123f58);
}
.wangp-model-info-loading {
    opacity: 0.72;
    font-style: italic;
}
.wangp-confirm-backdrop {
    position: fixed;
    inset: 0;
    z-index: 5000;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 18px;
    background: rgba(7, 27, 38, 0.34);
    backdrop-filter: blur(2px);
}
.wangp-confirm-backdrop[hidden] {
    display: none !important;
}
.wangp-confirm-card {
    width: min(520px, 100%);
    border: 1px solid var(--border-color-primary, rgba(17, 84, 118, 0.18));
    border-radius: 8px;
    background: var(--background-fill-primary, #fff);
    box-shadow: 0 18px 48px rgba(8, 34, 48, 0.28);
    color: var(--body-text-color, #174a67);
    overflow: hidden;
}
.wangp-confirm-title {
    padding: 15px 16px 5px;
    font-size: 1rem;
    font-weight: 800;
}
.wangp-confirm-message {
    padding: 0 16px 14px;
    color: var(--body-text-color-subdued, #5d7787);
    font-size: 0.86rem;
    line-height: 1.35;
}
.wangp-confirm-actions {
    display: flex;
    flex-wrap: wrap;
    justify-content: flex-end;
    gap: 8px;
    padding: 12px 16px;
    border-top: 1px solid var(--border-color-primary, rgba(17, 84, 118, 0.12));
    background: var(--background-fill-secondary, #f4f9fc);
}
.wangp-confirm-actions button {
    min-width: 78px;
    height: 30px;
    padding: 0 12px;
    border: 1px solid var(--border-color-primary, rgba(17, 84, 118, 0.18));
    border-radius: 6px;
    background: var(--button-secondary-background-fill, #fff);
    color: var(--button-secondary-text-color, #174a67);
    cursor: pointer;
    font: inherit;
    font-weight: 700;
}
.wangp-confirm-actions button.primary {
    border-color: rgba(21, 96, 130, 0.34);
    background: #156082;
    color: #fff;
}
.wangp-confirm-actions button.danger {
    border-color: rgba(180, 35, 24, 0.34);
    background: #b42318;
    color: #fff;
}
r$   r$   r    r   Úget_cssr{   ƒ   s   € ðPð Pr    c                  ó   — dS )Na®+  
    window.wangpModelInfo = window.wangpModelInfo || {};
    window.wangpConfirm = function(options) {
        const opts = typeof options === "string" ? { message: options } : (options || {});
        return new Promise((resolve) => {
            const previousFocus = document.activeElement;
            const backdrop = document.createElement("div");
            backdrop.className = "wangp-confirm-backdrop";
            backdrop.setAttribute("role", "dialog");
            backdrop.setAttribute("aria-modal", "true");
            const buttonDefs = Array.isArray(opts.buttons) && opts.buttons.length ? opts.buttons : [
                { text: opts.cancelText || "Cancel", value: false, cancel: true },
                { text: opts.confirmText || "OK", value: true, primary: true, danger: !!opts.danger }
            ];
            backdrop.innerHTML = `
                <div class="wangp-confirm-card">
                    <div class="wangp-confirm-title"></div>
                    <div class="wangp-confirm-message"></div>
                    <div class="wangp-confirm-actions"></div>
                </div>`;
            const title = backdrop.querySelector(".wangp-confirm-title");
            const message = backdrop.querySelector(".wangp-confirm-message");
            const actions = backdrop.querySelector(".wangp-confirm-actions");
            title.textContent = opts.title || "Confirm";
            message.textContent = opts.message || "";
            let defaultButton = null;
            function finish(value) {
                document.removeEventListener("keydown", onKeyDown, true);
                backdrop.remove();
                if (previousFocus && document.contains(previousFocus)) previousFocus.focus();
                resolve(value);
            }
            function buttonValue(def) {
                return Object.prototype.hasOwnProperty.call(def, "value") ? def.value : def.text;
            }
            async function choose(def, event) {
                if (typeof def.action === "function") {
                    const result = await def.action(buttonValue(def), event);
                    if (result === false) return;
                }
                finish(buttonValue(def));
            }
            function onKeyDown(event) {
                if (event.key === "Escape") {
                    event.preventDefault();
                    const cancelDef = buttonDefs.find((def) => def.cancel) || { value: false };
                    finish(buttonValue(cancelDef));
                }
            }
            buttonDefs.forEach((def, index) => {
                const button = document.createElement("button");
                button.type = "button";
                button.textContent = def.text || def.label || String(buttonValue(def));
                button.className = def.className || "";
                button.classList.toggle("primary", !!def.primary);
                button.classList.toggle("danger", !!def.danger);
                button.addEventListener("click", (event) => choose(def, event));
                actions.appendChild(button);
                if (def.autofocus || (!defaultButton && !def.cancel && index === buttonDefs.length - 1)) defaultButton = button;
            });
            backdrop.addEventListener("click", (event) => {
                if (event.target !== backdrop) return;
                const cancelDef = buttonDefs.find((def) => def.cancel) || { value: false };
                finish(buttonValue(cancelDef));
            });
            document.addEventListener("keydown", onKeyDown, true);
            document.body.appendChild(backdrop);
            (defaultButton || actions.querySelector("button"))?.focus();
        });
    };
    window.wangpModelInfo.hydrate = function(popup) {
        const content = popup?.querySelector("[data-wangp-model-info-content]");
        if (!content || content.dataset.wangpHydrated === "1") return;
        const sourceId = content.getAttribute("data-wangp-model-info-source");
        const source = sourceId ? document.getElementById(sourceId) : null;
        if (!source) return;
        try {
            content.innerHTML = JSON.parse(source.value || source.textContent || '""');
            content.dataset.wangpHydrated = "1";
        } catch (_err) {
            content.innerHTML = "<p>Unable to load help content.</p>";
            content.dataset.wangpHydrated = "1";
        }
    };
    window.wangpModelInfo.requestClose = function(popup) {
        if (!popup || popup.hidden) return true;
        const event = new CustomEvent("wangp:model-info-before-close", { bubbles: true, cancelable: true });
        popup.dispatchEvent(event);
        if (event.defaultPrevented) return false;
        popup.hidden = true;
        return true;
    };
    window.wangpModelInfo.open = function(button) {
        const popupId = button?.getAttribute("data-wangp-model-info-open");
        const popup = (popupId ? document.getElementById(popupId) : null)
            || button?.parentElement?.querySelector(".wangp-model-info-popup");
        if (!popup) return;
        const wasOpen = !popup.hidden;
        window.wangpModelInfo.hydrate(popup);
        for (const other of document.querySelectorAll("[data-wangp-model-info-popup], .wangp-model-info-popup")) {
            if (other !== popup && !window.wangpModelInfo.requestClose(other)) return;
        }
        if (wasOpen) {
            window.wangpModelInfo.requestClose(popup);
            return;
        }
        popup.hidden = false;
        const isPromptHelper = popup.getAttribute("data-wangp-prompt-helper-popup") === "1";
        if (isPromptHelper) {
            const width = popup.getBoundingClientRect().width;
            popup.style.setProperty("left", Math.max(12, Math.round((window.innerWidth - width) / 2)) + "px");
            popup.style.setProperty("right", "auto");
            popup.style.setProperty("top", "0px");
        } else {
            popup.style.setProperty("left", "auto");
            popup.style.setProperty("right", "32px");
            popup.style.setProperty("top", "96px");
        }
        popup.dispatchEvent(new CustomEvent("wangp:model-info-opened", { bubbles: true }));
    };
    window.wangpModelInfo.close = function(closeButton) {
        const popup = closeButton?.closest("[data-wangp-model-info-popup], .wangp-model-info-popup");
        window.wangpModelInfo.requestClose(popup);
    };
    window.wangpModelInfo.alignPromptInfoButtons = function() {
        document.querySelectorAll(".wangp-prompt-info-anchor").forEach((anchor) => {
            const trigger = anchor.querySelector(".wangp-prompt-info-host .wangp-model-info-trigger");
            if (!trigger || !anchor.classList.contains("block")) return;
            let target = null;
            for (let sibling = anchor.nextElementSibling; sibling && !target; sibling = sibling.nextElementSibling) {
                if (sibling.classList?.contains("wangp-prompt-info-anchor")) continue;
                const label = sibling.querySelector?.("label");
                if (!label) continue;
                target = label.querySelector("span") || label.firstElementChild || label;
            }
            if (!target) return;
            const host = trigger.closest(".wangp-prompt-info-host");
            const hostRect = host.getBoundingClientRect();
            const targetRect = target.getBoundingClientRect();
            const triggerRect = trigger.getBoundingClientRect();
            if (!hostRect.width || !targetRect.height) return;
            trigger.style.top = Math.max(0, targetRect.top - hostRect.top + (targetRect.height - triggerRect.height) / 2) + "px";
        });
    };
    window.wangpModelInfo.schedulePromptInfoAlign = function() {
        if (window.wangpModelInfo.alignPending) return;
        window.wangpModelInfo.alignPending = true;
        requestAnimationFrame(() => {
            window.wangpModelInfo.alignPending = false;
            window.wangpModelInfo.alignPromptInfoButtons();
        });
    };
    let wangpModelInfoDrag = null;
    document.addEventListener("click", (event) => {
        const openButton = event.target.closest("[data-wangp-model-info-open], .wangp-model-info-trigger");
        if (openButton) {
            event.preventDefault();
            event.stopPropagation();
            window.wangpModelInfo.open(openButton);
            return;
        }
        const closeButton = event.target.closest("[data-wangp-model-info-close], .wangp-model-info-close");
        if (closeButton) {
            event.preventDefault();
            event.stopPropagation();
            window.wangpModelInfo.close(closeButton);
        }
    });
    document.addEventListener("pointerdown", (event) => {
        const handle = event.target.closest("[data-wangp-model-info-drag], .wangp-model-info-titlebar, .wangp-local-file-picker-titlebar");
        if (!handle || event.target.closest("[data-wangp-model-info-close], .wangp-model-info-close, .wangp-local-file-picker-close")) return;
        const popup = handle.closest("[data-wangp-model-info-popup], .wangp-model-info-popup, .wangp-local-file-picker-popup");
        if (!popup) return;
        const rect = popup.getBoundingClientRect();
        popup.style.setProperty("left", rect.left + "px", "important");
        popup.style.setProperty("top", rect.top + "px", "important");
        popup.style.setProperty("right", "auto", "important");
        wangpModelInfoDrag = { popup, pointerId: event.pointerId, offsetX: event.clientX - rect.left, offsetY: event.clientY - rect.top };
        handle.setPointerCapture?.(event.pointerId);
        event.preventDefault();
    });
    document.addEventListener("pointermove", (event) => {
        if (!wangpModelInfoDrag || wangpModelInfoDrag.pointerId !== event.pointerId) return;
        const margin = 10;
        const popup = wangpModelInfoDrag.popup;
        const rect = popup.getBoundingClientRect();
        const left = Math.min(Math.max(margin, event.clientX - wangpModelInfoDrag.offsetX), Math.max(margin, window.innerWidth - rect.width - margin));
        const top = Math.min(Math.max(margin, event.clientY - wangpModelInfoDrag.offsetY), Math.max(margin, window.innerHeight - 48));
        popup.style.setProperty("left", left + "px", "important");
        popup.style.setProperty("top", top + "px", "important");
        event.preventDefault();
    });
    document.addEventListener("pointerup", (event) => {
        if (wangpModelInfoDrag && wangpModelInfoDrag.pointerId === event.pointerId) wangpModelInfoDrag = null;
    });
    document.addEventListener("pointercancel", (event) => {
        if (wangpModelInfoDrag && wangpModelInfoDrag.pointerId === event.pointerId) wangpModelInfoDrag = null;
    });
    if (document.querySelector(".wangp-prompt-info-anchor")) {
        window.addEventListener("load", window.wangpModelInfo.schedulePromptInfoAlign);
        window.addEventListener("resize", window.wangpModelInfo.schedulePromptInfoAlign);
        setTimeout(window.wangpModelInfo.schedulePromptInfoAlign, 250);
        setTimeout(window.wangpModelInfo.schedulePromptInfoAlign, 1200);
    }
r$   r$   r    r   Úget_javascriptr}   ×  s   € ðLð Lr    )N)rR   rG   r   Ú	functoolsr   r.   r?   Úmarkdown.extensionsr   Úmarkdown.treeprocessorsr   Úshared.utils.markdownr   r   r&   r1   r5   r3   ÚtuplerD   rJ   rV   Úboolr`   rd   rf   rn   rq   ry   r{   r}   r$   r    r   ú<module>r„      sÈ  ðà €€€Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ð Ð à "Ð "Ð "Ð "Ø )Ð )Ð )Ð )Ð )Ð )Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1à 5Ð 5Ð 5Ð 5Ð 5Ð 5ð4ð 4ð 4ð 4ð 4�]ñ 4ô 4ð 4ðMð Mð Mð Mð M˜iñ Mô Mð Mð
+˜sð + sð +ð +ð +ð +ð €�3ÐÑÔð Cð ¨Cð ð ð ñ Ôðð8¨ð 8°°c¸3°h´ð 8ð 8ð 8ð 8ð3 ð 3¨ð 3ð 3ð 3ð 3ð JLð qð qð q #ð q¨cð qÀ3ð qÐPSð qð qð qð qð QVð ð ð  ð ¨Cð ¸3ð Èð ÐZ]ð ð ð ð ð6 ]bð jð jð j¨Cð j¸ð jÀsð jÐUYð jÐfið jð jð jð jð ^cð Oð Oð O¨Sð O¸ð OÈð OÐVZð OÐgjð Oð Oð Oð OðÐPRÐfmÐ}ð ð ð ¨#ð È#ð Ð`cð Ðwzð ð  EHð ð ð ð ðÀRÐZbð  rEð  TYð ð ð ˜sð ¸sð ÐTWð Ðknð ð  MQð ð  ^að ð ð ð ðQ�ð Qð Qð Qð Qðh
M˜ð Mð Mð Mð Mð Mð Mr    