
    $gB                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZddlm	Z	 ddl
mZ dZdZdZdZd	Zd
ZdZdddZdZdZg dZd Zd%dZd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d  Z%d! Z&d" Z'd# Z(d$ Z)y)&    N   )julia_keywords)reorder_propsz$03207cf0-e2b3-4b91-9ca8-690cf0fb507ez$1b08a953-4be3-4667-9a23-3db579824955ak  
export {funcname}

"""
    {funcname}(;kwargs...){children_signatures}

{docstring}
"""
function {funcname}(; kwargs...)
        available_props = Symbol[{component_props}]
        wild_props = Symbol[{wildcard_symbols}]
        return Component("{funcname}", "{element_name}", "{module_name}", available_props, wild_props; kwargs...)
end
{children_definitions}
z\
    {funcname}(children::Any;kwargs...)
    {funcname}(children_maker::Function;kwargs...)
z
{funcname}(children::Any; kwargs...) = {funcname}(;kwargs..., children = children)
{funcname}(children_maker::Function; kwargs...) = {funcname}(children_maker(); kwargs...)
a  
module {package_name}
using {base_package}

const resources_path = realpath(joinpath( @__DIR__, "..", "deps"))
const version = "{version}"

{component_includes}

function __init__()
    DashBase.register_package(
        DashBase.ResourcePkg(
            "{project_shortname}",
            resources_path,
            version = version,
            [
                {resources_dist}
            ]
        )

    )
end
end
z
name = "{package_name}"
uuid = "{package_uuid}"
{authors}version = "{version}"

[deps]
{base_package} = "{dash_uuid}"

[compat]
julia = "1.2"
{base_package} = "{base_version}"
z
0.1.3, 1.0z0.1)DashDashBasezinclude("jl/{name}.jl")zDashBase.Resource(
    relative_package_path = {relative_package_path},
    external_url = {external_url},
    dynamic = {dynamic},
    async = {async_string},
    type = :{type}
))dash_html_componentsdash_core_components
dash_tablec                 T    | j                  d      }dj                  d |D              S )N_ c              3   <   K   | ]  }|j                           y wN)
capitalize).0ws     g/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/dash/development/_jl_components_generation.py	<genexpr>z"jl_package_name.<locals>.<genexpr>k   s     -a1<<>-s   )splitjoin)
namestringss     r   jl_package_namer   i   s'    A77-1---    c                 n    |rdj                  d | D              }|S dj                  d | D              }|S )N|c              3   >   K   | ]  }d j                  |        yw)z{}-Nformatr   items     r   r   z&stringify_wildcards.<locals>.<genexpr>p   s     B4ELL.B   , c              3   >   K   | ]  }d j                  |        yw)zSymbol("{}-")Nr   r    s     r   r   z&stringify_wildcards.<locals>.<genexpr>r   s     Md_33D9Mr"   )r   )wclist	no_symbolwcstrings      r   stringify_wildcardsr(   n   s;    88B6BB O 99MfMMOr   c                 p    | D cg c]&  }|j                  d      s|j                  dd      ( c}S c c}w )N-*r   )endswithreplace)propskeys     r   get_wildcards_jlr/   v   s,    -2Iccll46HCKKb!IIIs   33c                 h      fd}t        d d d d d d d d	  fd
 fd fd fd||      S )z<Mapping from the PropTypes js type object to the Julia type.c            
          dj                  dj                  d  d   D              dj                  dj                  d  d   j                         D                          S )Nz lists containing elements {}.
{}r#   c              3   >   K   | ]  }d j                  |        yw)z'{}'Nr   r   ts     r   r   z<get_jl_prop_types.<locals>.shape_or_exact.<locals>.<genexpr>   s     E1fmmA&Er"   valuez+Those elements have the following types:
{}
c           
   3   h   K   | ]*  \  }}t        |||d    |j                  dd      d       , yw)requireddescriptionr   r   	prop_nametype_objectr8   r9   
indent_numN)create_prop_docstring_jlget)r   r;   props      r   r   z<get_jl_prop_types.<locals>.shape_or_exact.<locals>.<genexpr>   sG      	 (	4 -"+$(!%j!1$(HH]B$?#$ 	s   02)r   r   itemsr<   s   r   shape_or_exactz)get_jl_prop_types.<locals>.shape_or_exact}   sd    299IIEG0DEE:AA		 	 ,7w+?+E+E+G	 	
 	
r   c                       y)NArray rF   r   r   <lambda>z#get_jl_prop_types.<locals>.<lambda>       r   c                       y)NBoolrF   rF   r   r   rG   z#get_jl_prop_types.<locals>.<lambda>   rH   r   c                       y)NRealrF   rF   r   r   rG   z#get_jl_prop_types.<locals>.<lambda>   rH   r   c                       y)NStringrF   rF   r   r   rG   z#get_jl_prop_types.<locals>.<lambda>   rH   r   c                       y)NDictrF   rF   r   r   rG   z#get_jl_prop_types.<locals>.<lambda>   rH   r   c                       y)Nz#Bool | Real | String | Dict | ArrayrF   rF   r   r   rG   z#get_jl_prop_types.<locals>.<lambda>   rH   r   c                       y)Nzdash componentrF   rF   r   r   rG   z#get_jl_prop_types.<locals>.<lambda>   rH   r   c                       y)Nz8a list of or a singular dash component, string or numberrF   rF   r   r   rG   z#get_jl_prop_types.<locals>.<lambda>   rH   r   c                  X    dj                  dj                  d  d   D                    S )Nza value equal to: {}r#   c              3   V   K   | ]!  }d j                  t        |d                # yw){}r5   N)r   strr3   s     r   r   z6get_jl_prop_types.<locals>.<lambda>.<locals>.<genexpr>   s!     Qqdkk#aj/2Qs   ')r5   r   r   rB   s   r   rG   z#get_jl_prop_types.<locals>.<lambda>   s*    +22IIQK<PQQ
 r   c                  X    dj                  dj                  d  d   D                    S )NrV   z | c              3   l   K   | ],  }t        |      d k7  rdj                  t        |             . yw)r   rV   Nget_jl_typer   )r   subTypes     r   r   z6get_jl_prop_types.<locals>.<lambda>.<locals>.<genexpr>   s3      w'2- K01s   24r5   rX   rB   s   r   rG   z#get_jl_prop_types.<locals>.<lambda>   s.    dkkJJ *73 
 r   c                  n    dt         d         dk7  rdj                  t         d               z   S dz   S )NrE   r5   r   z of {}sr[   rB   s   r   rG   z#get_jl_prop_types.<locals>.<lambda>   sM     {734:   [-A!BC 
 	 r   c                  >    dj                  t         d               S )Nz/Dict with Strings as keys and values of type {}r5   )r   r\   rB   s   r   rG   z#get_jl_prop_types.<locals>.<lambda>   s     JQQG,-
 r   )arrayboolnumberstringobjectanyelementnodeenumunionarrayOfobjectOfshapeexact)dict)r<   rC   s   ` r   get_jl_prop_typesro   z   sL    
" 9(O



 K& &r   c                 d   t        j                  |       }t        |j                               D ]~  \  }}d|vrd|vr|j	                  |        d|v r|d   d   }|dv s1|j	                  |       Cd|v r3|d   d   }|dk(  sUd|d   vs|d   d   dk7  sh|j	                  |       zt
         |S )a  Filter props from the Component arguments to exclude:
        - Those without a "type" or a "flowType" field
        - Those with arg.type.name in {'func', 'symbol', 'instanceOf'}
    Parameters
    ----------
    props: dict
        Dictionary with {propName: propMetadata} structure
    Returns
    -------
    dict
        Filtered dictionary with {propName: propMetadata} structure
    typeflowTypename>   funcsymbol
instanceOf	signaturerd   )copydeepcopylistrA   pop
ValueError)r-   filtered_propsarg_nameargarg_typearg_type_names         r   filter_propsr      s     ]]5)Nn2245 #3!6x( S=6{6*H;;""8,3
OF3M+ Z0C
OF4Kx4W"&&x0%( r   c                 F    | d   }t        |       }||v r ||          }|S y)z
    Convert JS types to Julia types for the component definition
    Parameters
    ----------
    type_object: dict
        react-docgen-generated prop type dictionary
    Returns
    -------
    str
        Julia type string
    rs   rB   r   )ro   )r<   js_type_namejs_to_jl_types	prop_types       r   r\   r\      s8     v&L&;?N~%0N<02	r   c                 F    t        |       j                         }|r|dz  }|S )Nz. )r\   r   )typedata
typestrings     r   print_jl_typer      s(    X&113Jd
r   c                     t        |      }dj                  | d   j                         dv rdnd| |dj                  d t	        |      j                         D              	      S )
a5  Create the Dash component docstring.
    Parameters
    ----------
    component_name: str
        Component name
    props: dict
        Dictionary with {propName: propMetadata} structure
    description: str
        Component description
    Returns
    -------
    str
        Dash component docstring
    r-   z>A{n} {name} component.
{description}
Keyword arguments:
{args}r   aeiounr   r6   c              3   f   K   | ])  \  }}t        |d |v r|d    n|d   |d   |d   d       + yw)rq   rr   r8   r9   r   r:   N)r>   )r   pr@   s      r   r   z&create_docstring_jl.<locals>.<genexpr>  sR      	
 4 %,2dNDLZ@Pj) / 	
s   /1)r   rs   r9   args)r   r   lowerr   r   rA   component_namer-   r9   s      r   create_docstring_jlr      sp      &ENUU"((*g5#2YY 	
 (.446	
 	
	 V  r   c                     t        |      }d|z  }d|v rdj                  || |||rd      S d      S dj                  || |rd	j                  |      nd
|d
k7  rdj                  |      nd
|rd      S d      S )aS  
    Create the Dash component prop docstring
    Parameters
    ----------
    prop_name: str
        Name of the Dash component prop
    type_object: dict
        react-docgen-generated prop type dictionary
    required: bool
        Component is required?
    description: str
        Dash component description
    indent_num: int
        Number of indents to use for the context block
        (creates 2 spaces for every indent)
    is_flow_type: bool
        Does the prop use Flow types? Otherwise, uses PropTypes
    Returns
    -------
    str
        Dash component prop docstring
    rB   z  r6   z`{indent_spacing}- `{name}` ({is_required}): {description}. {name} has the following type: {type}r8   optional)indent_spacingrs   rq   r9   is_requiredz={indent_spacing}- `{name}` ({type}{is_required}){description}z{}; r   z: {}r[   )r;   r<   r8   r9   r=   jl_type_namer   s          r   r>   r>     s    : ;7LJ&N|44:F-!'*2J 5; 5		
 9C 5; 5		
 KQQ%,8V]]<(b3>"3DV]];/""*J R  
 1; R  r   c                 f    | r dj                  | |j                               S |j                         S )Nz{}_{})r   r   )prefixrs   s     r   format_fn_namer   S  s(    ~~fdjjl33::<r   c                    d }| D cg c]  }t         j                   ||j                  dd             ||j                  dd            t        |j                  dd            j	                         |d|j                         v r7dj                  t        |j                  d            j	                               nd	       c}S c c}w )
Nc                 ,    | rdj                  |       S dS )Nz"{}"nothingr   )vs    r   nothing_or_stringz4generate_metadata_strings.<locals>.nothing_or_stringZ  s    #$v}}Q3)3r   relative_package_pathr   external_urldynamicr   async:{})r   r   r   rq   async_string)jl_resource_tuple_stringr   r?   rW   r   keys)	resourcesmetatyper   resources       r   generate_metadata_stringsr   Y  s    4 "  	!''"34b9# +8<<+KLY	:;AAC(--/) c(,,w*?&@&F&F&HI 	( 
	
  s   B=Cc                     | t         v S r   )core_packagesproject_shortnames    r   is_core_packager   m  s    --r   c                      t        |       rdS dS )Nr   r   )r   r   s    r   base_package_namer   q  s    ():;:GGr   c                 0    t        |       rt        S t        S r   )r   jl_dash_base_uuidjl_dash_uuidr   s    r   base_package_uidr   u  s     /0A BTTr   c                    t        |       }t        j                  j                  dt	        j
                                t        j                  |       }t        |dg       }t        |dg       }|j                  d      }dj                  t        |d      t        |d      z         }	t        j                  |dj                  |D 
cg c]"  }
t        j                  t        ||
      	      $ c}
      |	|| t!        |       
      }t        j                  j                  d|dz         }t#        |dd      5 }|j%                  |       d d d        t'        dj                  |             y c c}
w # 1 sw Y   )xY w)Nr   _js_dist	_css_distversionz,
jscssr6   )rs   )package_namecomponent_includesresources_distr   r   base_packagesrc.jlr   utf-8encodingGenerated {})r   syspathinsertosgetcwd	importlibimport_modulegetattrr?   r   r   jl_package_file_stringr   jl_component_include_stringr   r   openwriteprint)r   
componentspkg_datar   r   modjs_distcss_distproject_verr   	comp_namepackage_string	file_pathfs                 r   generate_package_filer   y  sW   "#45LHHOOAryy{#

!
!"3
4Cc:r*GsK,H,,y)KZZ!'40
#He
4	5N
 ,22!99
 ",	  ,22'	: 3 
 &+&'89 3 N UL5$89I	iw	/  1	 	.

	
*+   s   'E+6E00E9c                 |   |j                  dd      }|j                  d      }t        |       }t        j                  t              }t        j                  |j
                  d d t        j                  |j                  d            j                         dd  z         }|rdj                  |      nd}t        |       }t        j                  |||||t        |   t        |             }	d	}
t        |
d
d      5 }|j!                  |	       d d d        t#        dj                  |
             y # 1 sw Y   $xY w)Nauthorr   r   ir   )hexzauthors = ["{}"]
)r   package_uuidr   authorsr   base_version	dash_uuidzProject.tomlr   r   r   )r?   r   uuidUUIDr   r   hashlibsha256encode	hexdigestr   r   jl_projecttoml_stringjl_base_versionr   r   r   r   )r   r   package_authorr   r   ur   authors_stringr   toml_stringr   r   s               r   generate_toml_filer     s%   \\(B/N,,y)K"#45L		,A99EE$3K'..)<)<W)EFPPRSVSWXXL
 8F##N32  %%67L'..!!!$\2"#45 / K I	iw	/ 1		.

	
*+ s   =D22D;c                    t        t        |            }t        |j                               }t	        | ||      j                  dd      j                  dd      }t        |      }d}	|d d  D ]i  }
|
j                  d      s|
dk(  r|j                  |
       +|
t        v s4|j                  |
       t        j                  d	j                  |
|              k |	d
j                  d |D              z  }	d|v }t        ||       }|rt        j                  |      nd}|rt         j                  |      nd}t"        j                  t        ||       ||	t%        |d      t%        |d      | |||	      S )Nr   z
r6   $z\$r   r*   setPropszZWARNING: prop "{}" in component "{}" is a Julia keyword - REMOVED FROM THE JULIA COMPONENTr#   c              3   >   K   | ]  }d j                  |        yw)r   Nr   )r   r   s     r   r   z(generate_class_string.<locals>.<genexpr>  s     "Fq5<<?"Fr"   children)funcnameF)r&   T)	r   	docstringcomponent_propswildcard_symbolswildcard_nameselement_namemodule_namechildren_signatureschildren_definitions)r   r   rz   r   r   r,   r/   r+   remover   warningswarnr   r   r   jl_children_signaturesjl_children_definitionsjl_component_stringr(   )rs   r-   r9   r   r   r}   	prop_keysr   r%   default_paramtextr!   has_childrenr   r  r  s                  r   generate_class_stringr    s   "<#67N^((*+I 	~;	
 
		e	  e$F ! 
==$*"4T"^#T"MM:&t$	
 "FI"FFF*Lfd+H<H%%x%8b  >J&&&9r  %%-),VuE*6TB%/1 & 
 
r   c                    t        |      }d}t        | ||||      }t        ||       dz   }t        j                  j                  d      st        j                  d       t        j                  j                  dd|      }t        |dd	      5 }	|	j                  |       |	j                  |       d d d        t        d
j                  |             y # 1 sw Y   $xY w)Nr   z$# AUTO GENERATED FILE - DO NOT EDIT
r   zsrc/jlr   jlr   r   r   r   )r   r  r   r   r   existsmakedirsr   r   r   r   r   )
rs   r-   r9   r   r   import_stringclass_string	file_namer   r   s
             r   generate_struct_filer    s    &E;M(e["3VL vt,u4I
 77>>(#
HUD)4I	iw	/ 1		 
.

	
*+	 s   #CCc           	         t         j                  j                  d      rt        j                  d       t        j
                  d       t        j                  |       D ]  \  }}}|D ]  }	t         j                  j                  |	      d   }
|
dv r*t         j                  j                  dt         j                  j                  ||             }t         j                  j                  |      st        j
                  |       t        j                  t         j                  j                  ||	      |         t        | |||       t        | |       y )Ndepsr   )z.pyz.pycz.jsonzdeps/)r   r   r  shutilrmtreer  walksplitextr   relpathrx   r   r   )r   r   metadatar   r   kwargsrel_dirnamer   	filenamesfilename	extensiontarget_dirnames               r   generate_moduler$    s    
ww~~ffKK%'WW->%? M!Q	! 	MH((215I44WW\\6GHN 77>>.1N+KK[(;^L	MM  +Z6J((3r   )F)*rx   r   r  r  r   r   r   r   _all_keywordsr   _py_components_generationr   r   r   r	  r  r  r   r   r   r   r   r   r   r(   r/   ro   r   r\   r   r   r>   r   r   r   r   r   r   r   r  r  r$  rF   r   r   <module>r'     s     	   
    ) 4 ;  6
   
 
 2  
 8   O.
J:z#L( F1p(.HU ,F,>2j,04r   