Skip to main content
Glama

figma-mcp

clean_node.cpython-312.pyc8.05 kB
� ��g�$��P�ddlZddlZd�Zd�Zd�Zd�Zd�Zd�Zd�Zd �Z d �Z d �Z y) �Nc��t|ddz�}t|ddz�}t|ddz�}d|d�|d�|d��S)zW Convert an RGBA dict into a #RRGGBB hex string (ignoring alpha in this demo). �r���g�b�#�02x)�int)�rgbarrrs �J/Users/jasonzhou/Documents/GitHub/figma-mcp-python/figma_mcp/clean_node.py� rgba_to_hexr sU�� �D��I��O��A� �D��I��O��A� �D��I��O��A� �q��g�a��W�Q�s�G� $�$�c��tj|d��}tj|j ��j �S)zF Create a hash from style data to use as a unique identifier. T)� sort_keys)�json�dumps�hashlib�md5�encode� hexdigest)� style_data� style_strs r � style_hashr s5��� � �:��6�I� �;�;�y�'�'�)� *� 4� 4� 6�6rc�4�ddddd�}|j|d�S)z< Convert Figma alignment values to CSS flex values. z flex-start�centerzflex-endz space-between)�MIN�CENTER�MAX� SPACE_BETWEEN)�get)� figma_val� align_maps r �figma_align_to_flexr#s*�� ���(� �I� �=�=��L� 1�1rc���|r&t|�dk(s|djdd�dk(ry|d}|ddk(r;|d}|jd d �}t|�|d �}t|�}||vr|||<|Sy) zD Process fill styles and add them to the styles dictionary. r�visibleTFN�type�SOLID�color�opacity�)�backgroundColorr))�lenr r r)�fills�styles�fillr(r)r�style_ids r �get_fill_style_idr1 s��� �C��J�!�O�u�Q�x�|�|�I�t�'D��'M�� ��8�D� �F�|�w���W� ���(�(�9�a�(�� +�5�1�� � � �j�)�� �6� !�)�F�8� ��� rc�� �i}d|vr�|d� � dk(r d|d<d|d<n� dk(r d|d<d|d<d |vr |d �d �|d <d |vr |d �d �|d <d |vr |d �d �|d <d |vr |d �d �|d <d|vr |d�d �|d<d|vr7|d}|jdd�}� fd�}� fd�}||�|d<||�|d<d|vr|d}|d�d �|d<|d�d �|d<t|�}|r||d<t|�} | r| |d<|rt|�} | |vr||| <| Sy)zF Process layout styles and add them to the styles dictionary. � layoutMode� HORIZONTAL�flex�display�row� flexDirection�VERTICAL�column� paddingLeft�px� paddingRight� paddingTop� paddingBottom� itemSpacing�gap�primaryAxisAlignItems�counterAxisAlignItemsrc�:���dk(r t|�St|�S�Nr4�r#��val� layout_modes �r �align_map_primaryz.get_layout_style_id.<locals>.align_map_primaryb�!����,�.�.�s�3�3�*�3�/�/rc�:���dk(r t|�St|�SrErFrGs �r �align_map_counterz.get_layout_style_id.<locals>.align_map_countergrKr�justifyContent� alignItems�absoluteBoundingBox�width�height� borderRadiusN)r �get_border_radius�get_corner_smoothingr) �raw_noder.� layout_style� primary_align� counter_alignrJrM�bbox� border_radius�corner_smoothingr0rIs @r �get_layout_style_idr]>s�����L��x���|�,� � �,� &�&,�L�� #�,1�L�� )� �J� &�&,�L�� #�,4�L�� )� �H� $�-5�m�-D�,E�R�*H�L�� '� �X� %�.6�~�.F�-G�r�+J�L�� (� �8� #�,4�\�,B�+C�2�)F�L�� &� �h� &�/7��/H�.I��,L�L�� )� �H� $�%-�m�%<�$=�R�"@�L�� � #�h� .�$�%<�=�M�$�L�L�)@�%�H�M� 0�  0� .?�}�-M�L�)� *�):�=�)I�L�� &���(��-�.��#'��=�/�� 4� �W��$(��N�#3�2�!6� �X��&�h�/�M��'4� �^�$�,�H�5���'7� �^�$���l�+�� �6� !�+�F�8� ��� rc��d|vr|d�d�Sy)z, Extract border radius from a node. � cornerRadiusr<N��rVs r rTrT�s"����!��>�*�+�2�.�.� rc�,�d|vr|ddkDr|d�d�Sy)z/ Extract corner smoothing from a node. �cornerSmoothingrr<Nr`ras r rUrU�s0���H�$��2C�)D�q�)H��,�-�.�b�1�1� rc��|ddk7sd|vryi}|d}d|vr|d|d<d|vr|d|d<d|vr |d�d�|d<d |vr |d �d�|d <d |vr |d �d�|d <d |vrd dddd�}|j|d d �|d<d|vr&|dr!|dd}|ddk(rt|d�|d<|rt|�}||vr|||<|Sy)zD Process text styles and add them to the styles dictionary. r&�TEXT�styleN� fontFamily� fontWeight�fontSizer<� lineHeightPx� lineHeight� letterSpacing�textAlignHorizontal�leftr�right�justify)�LEFTr�RIGHT� JUSTIFIED� textAlignr-rr'r()r r r)rVr.� text_style� node_styler"r/r0s r �get_text_style_idrw�sT�����6�!�W�H�%<���J��'�"�J��z�!�#-�l�#;� �<� ��z�!�#-�l�#;� �<� ��Z��$.�z�$:�#;�2�!>� �:����#�&0��&@�%A��#D� �<� ��*�$�)3�O�)D�(E�R�&H� �?�#�� �*�#�x�'�Xa�b� �"+�-�-� �;P�0Q�SY�"Z� �;���(��x��0��� ��#�� ��<�7� "�"-�d�7�m�"<�J�w� ���j�)�� �6� !�)�F�8� ��� rc��|d}|d|d||jdd�d�}t|jdg�|�}|r||d<t||�}|r||d <t||�}|r||d <|d k(r d |vr|d |d <|d k(r1d|vr-|jdg�D]}|ddk(s� d|vs�|d|d<�d|vrEg|d<|dD]8}|jdd�dk(r�t ||�} |dj | ��:d|vr|d|d<d|vr|d|d<d|vr|d|d<d|vr|d|d<d|vr|d|d<d|vr|d|d<|S)z= Transform a Figma node into a simplified structure. r&�id�namer%T)ryrzr&r%r-� fillStyleId� layoutStyleId� textStyleIdre� characters� RECTANGLE�IMAGE�imageRef�childrenF�componentPropertyReferences�componentProperties�componentPropertyDefinitions�variantProperties�componentSetId� componentId)r r1r]rw�transform_node�append) rVr.� node_type�node� fill_style_id�layout_style_id� text_style_idr/�child�transformed_childs r r�r��s����� �I��t�n��� ���<�<� �4�0�  �D�&�h�l�l�7�B�&?��H�M��+��]��)�(�F�;�O�� /��_��%�h��7�M��+��]���F��|�x�7�%�l�3��\���K��G�x�$7��L�L��"�-�D��F�|�w�&�:��+=�#'� �#3��Z� �.� �X����Z���j�)�E��y�y��D�)�U�2�� .�u�f� =� � �� � #� #�$5� 6� *�%��0�.6�7T�.U�� *�+���(�&.�/D�&E�� "�#�&��1�/7�8V�/W�� +�,��h�&�$,�-@�$A�� �!��8�#�!)�*:�!;�� ���� �&�}�5��]�� �Krc�p�i}t|t�rd|vrt|d|�}n t||�}||d�S)z@ Transform Figma JSON data into a simplified structure. �document)r�r.)� isinstance�dictr�)�raw_datar.r�s r �transform_figma_jsonr�sK�� �F��(�D�!�j�H�&<�!�(�:�"6��?��!�(�F�3���� �r) rrr rr#r1r]rTrUrwr�r�r`rr �<module>r�sB�� ��%�7� 2��<K�Z��)�VH�Tr

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/JayZeeDesign/figma-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server