
    Be.                    p    d Z ddlmZ ddlmZ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e
          ZdS )z<
The Swipe layout enables you to quickly compare two panels
    )annotations)ClassVarListN   )CDN_DIST)ReactiveHTML   )ListLikec                      e Zd ZU dZ ej        g ddd          Z ej        ddd	          Z ej	        d
d          Z
 ej        ddd	          Z ej                    Z ej                    ZdZded<   dZdddddddZe dgZded<    fdZ ej        dd d !          d"             Zed#             Zej        d$             Zed%             Zej        d&             Zd) fd(	Z xZS )*Swipez
    The Swipe layout enables you to quickly compare two panels laid
    out on top of each other with a part of the *before* panel shown
    on one side of a slider and a part of the *after* panel shown on
    the other side.
    )r   r   z;
        The list of child objects that make up the layout.)defaultboundsdoc
precedence   )r      z*
        The width of the slider in pixels)r   r   r   blackz 
        The color of the slider)r   r   2   )r   d   z5
        The percentage of the *after* panel to show.verticalzClassVar[str | None]
_directiona  
    <div id="container" class="swipe-container">
      <div id="before" class="outer">
        <div id="before-inner" class="inner">${_before}</div>
      </div>
      <div id="after" class="outer" style="overflow: hidden;">
        <div id="after-inner" class="inner">${_after}</div>
      </div>
      <div id="slider" class="slider" onmousedown="${script('drag')}"
           style="background: ${slider_color}; width: ${slider_width}px;">
      </div>
    </div>
    z'
          self.adjustSlider()
        z 
          self.value()
        a  
          function endDrag() {
             document.removeEventListener('mouseup', endDrag);
             document.removeEventListener('mousemove', handleDrag);
           }
           function handleDrag(e) {
             e = e || window.event;
             e.preventDefault();
             current = e.clientX
             start = view.el.getBoundingClientRect().left
             value = parseInt(((current-start)/ container.clientWidth)*100)
             data.value = Math.max(0, Math.min(value, 100))
           }
           let e = event || window.event;
           e.preventDefault();
           document.addEventListener('mouseup', endDrag);
           document.addEventListener('mousemove', handleDrag);
        a%  
           before.style.clipPath = `polygon(0% 0%, calc(${data.value}% + 5px) 0%, calc(${data.value}% + 5px) 100%, 0% 100%)`
           after.style.clipPath = `polygon(calc(${data.value}% + 5px) 0%, 100% 0%, 100% 100%, calc(${data.value}% + 5px) 100%)`
           self.adjustSlider()
        zself.adjustSlider()z
           halfWidth = parseInt(data.slider_width/2)
           slider.style.marginLeft = `calc(${data.value}% + 5px - ${halfWidth}px)`
        )renderafter_layoutdragvalueslider_widthadjustSliderzcss/swipe.csszClassVar[List[str]]_stylesheetsc                    d|v r|rt          d          ddlm |                    d|          }|sd d g} t	                      j        ddfd|D             i| d S )NobjectszSEither supply objects as an positional argument or as a keyword argument, not both.r   )panelc                &    g | ]} |          S  r$   ).0objr"   s     2lib/python3.11/site-packages/panel/layout/swipe.py
<listcomp>z"Swipe.__init__.<locals>.<listcomp>j   s!    !@!@!@%%**!@!@!@    r$   )
ValueError	pane.baser"   popsuper__init__)selfr!   paramsr"   	__class__s      @r'   r.   zSwipe.__init__`   s    73   	&%%%%%**Y00 	#TlGKK!@!@!@!@!@!@!@KFKKKKKr)   r!   T)watchon_initc                6    | j         | _        | j        | _        d S N)before_beforeafter_afterr/   s    r'   _update_layoutzSwipe._update_layoutl   s    {jr)   c                4    t          |           r| d         nd S Nr   lenr:   s    r'   r6   zSwipe.beforeq   s    d))-tAww-r)   c                    || d<   d S r=   r$   )r/   r6   s     r'   r6   zSwipe.beforeu   s    Qr)   c                <    t          |           dk    r| d         nd S Nr	   r>   r:   s    r'   r8   zSwipe.aftery   s    d))a--tAwwT1r)   c                    || d<   d S rB   r$   )r/   r8   s     r'   r8   zSwipe.after}   s    Qr)   Nc                    t                                          |          }| D ]}||                    |          z  }|S )a  
        Iterates over the Viewable and any potential children in the
        applying the Selector.

        Arguments
        ---------
        selector: type or callable or None
          The selector allows selecting a subset of Viewables by
          declaring a type or callable function to filter by.

        Returns
        -------
        viewables: list(Viewable)
        )r-   select)r/   selectorr!   r&   r1   s       r'   rE   zSwipe.select   sF     ''..** 	, 	,Cszz(+++GGr)   r5   )__name__
__module____qualname____doc__paramr   r!   Integerr   Colorslider_colorr   	Parameterr7   r9   r   __annotations__	_template_scriptsr   r   r.   dependsr;   propertyr6   setterr8   rE   __classcell__)r1   s   @r'   r   r      s#          ejF 9>JLN N NG !5=7 A- . . .L 5;w 5# $ $ $L EM"X <8 9 9 9E eoGU_F'1J1111I$
 .?# #HL """)L    
L 
L 
L 
L 
L U]9D$777! ! 87! . . X. ]  ] 2 2 X2 \  \         r)   r   )rJ   
__future__r   typingr   r   rK   io.resourcesr   reactiver   baser
   r   r$   r)   r'   <module>r\      s     # " " " " " ! ! ! ! ! ! ! !  # # # # # # # # # # # #      D D D D DHl D D D D Dr)   