Aktraiser commited on
Commit
7b4a53b
·
1 Parent(s): c233761

amelioration figjam

Browse files
Files changed (1) hide show
  1. app.py +274 -3
app.py CHANGED
@@ -412,6 +412,257 @@ def list_figma_team_projects(team_id: str = "") -> str:
412
 
413
  return f"📁 **Projets de l'équipe :**\n" + "\n".join(project_list)
414
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
415
  # === CONFIGURATION DE L'APPLICATION GRADIO ===
416
 
417
  def setup_demo():
@@ -534,16 +785,36 @@ def setup_demo():
534
  gr.Markdown("""
535
  ---
536
  ### 🛠️ **Outils MCP disponibles :**
 
 
537
  - `configure_figma_token(token)` - Configure le token d'accès
538
  - `configure_figma_file_id(file_id)` - Configure l'ID du fichier
 
 
539
  - `list_figma_recent_files()` - Liste tous vos fichiers récents avec leurs IDs
540
  - `get_figma_file_info()` - Récupère les infos du fichier
541
- - `create_figma_rectangle(x, y, width, height, name, color)` - Crée un rectangle
542
- - `create_figma_frame(x, y, width, height, name)` - Crée un frame
543
- - `create_figma_text(x, y, text, name, font_size)` - Crée un texte
544
  - `get_figma_comments()` - Récupère les commentaires
545
  - `get_figma_user_info()` - Info utilisateur connecté
546
  - `get_figma_collaborators()` - Récupère les collaborateurs actifs
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
547
  """)
548
 
549
  return demo
 
412
 
413
  return f"📁 **Projets de l'équipe :**\n" + "\n".join(project_list)
414
 
415
+ def create_figma_sticky_note(x: str, y: str, text: str, color: str = "yellow", name: str = "Sticky Note") -> str:
416
+ """Crée un post-it dans FigJam"""
417
+ if not figma_config["file_id"]:
418
+ return "❌ ID du fichier requis. Utilisez configure_figma_file_id() d'abord."
419
+
420
+ try:
421
+ x_pos, y_pos = float(x), float(y)
422
+
423
+ # Couleurs disponibles pour les post-its
424
+ colors = {
425
+ "yellow": "🟡",
426
+ "blue": "🔵",
427
+ "green": "🟢",
428
+ "red": "🔴",
429
+ "purple": "🟣",
430
+ "orange": "🟠"
431
+ }
432
+
433
+ color_emoji = colors.get(color.lower(), "🟡")
434
+
435
+ comment_text = f"{color_emoji} **Post-it à créer :**\n- Nom: {name}\n- Position: ({x_pos}, {y_pos})\n- Texte: \"{text}\"\n- Couleur: {color}"
436
+
437
+ comment_data = {
438
+ "message": comment_text,
439
+ "client_meta": {
440
+ "x": x_pos,
441
+ "y": y_pos
442
+ }
443
+ }
444
+
445
+ result = make_figma_request(f"files/{figma_config['file_id']}/comments", "POST", comment_data)
446
+
447
+ if "error" in result:
448
+ return f"❌ Erreur lors de la création du commentaire : {result['error']}"
449
+
450
+ return f"✅ Post-it {color_emoji} \"{text}\" créé à ({x_pos}, {y_pos})"
451
+
452
+ except ValueError:
453
+ return "❌ Les coordonnées doivent être des nombres"
454
+
455
+ def create_figma_section(x: str, y: str, width: str, height: str, title: str, color: str = "blue") -> str:
456
+ """Crée une section dans FigJam pour organiser le contenu"""
457
+ if not figma_config["file_id"]:
458
+ return "❌ ID du fichier requis. Utilisez configure_figma_file_id() d'abord."
459
+
460
+ try:
461
+ x_pos, y_pos = float(x), float(y)
462
+ w, h = float(width), float(height)
463
+
464
+ comment_text = f"📦 **Section à créer :**\n- Titre: {title}\n- Position: ({x_pos}, {y_pos})\n- Taille: {w}x{h}\n- Couleur: {color}"
465
+
466
+ comment_data = {
467
+ "message": comment_text,
468
+ "client_meta": {
469
+ "x": x_pos,
470
+ "y": y_pos
471
+ }
472
+ }
473
+
474
+ result = make_figma_request(f"files/{figma_config['file_id']}/comments", "POST", comment_data)
475
+
476
+ if "error" in result:
477
+ return f"❌ Erreur lors de la création du commentaire : {result['error']}"
478
+
479
+ return f"✅ Section \"{title}\" créée à ({x_pos}, {y_pos}) avec la taille {w}x{h}"
480
+
481
+ except ValueError:
482
+ return "❌ Les coordonnées et dimensions doivent être des nombres"
483
+
484
+ def create_figma_connector(start_x: str, start_y: str, end_x: str, end_y: str, style: str = "solid") -> str:
485
+ """Crée un connecteur entre deux points dans FigJam"""
486
+ if not figma_config["file_id"]:
487
+ return "❌ ID du fichier requis. Utilisez configure_figma_file_id() d'abord."
488
+
489
+ try:
490
+ sx, sy = float(start_x), float(start_y)
491
+ ex, ey = float(end_x), float(end_y)
492
+
493
+ comment_text = f"🔗 **Connecteur à créer :**\n- De: ({sx}, {sy})\n- Vers: ({ex}, {ey})\n- Style: {style}"
494
+
495
+ comment_data = {
496
+ "message": comment_text,
497
+ "client_meta": {
498
+ "x": sx,
499
+ "y": sy
500
+ }
501
+ }
502
+
503
+ result = make_figma_request(f"files/{figma_config['file_id']}/comments", "POST", comment_data)
504
+
505
+ if "error" in result:
506
+ return f"❌ Erreur lors de la création du commentaire : {result['error']}"
507
+
508
+ return f"✅ Connecteur créé de ({sx}, {sy}) vers ({ex}, {ey})"
509
+
510
+ except ValueError:
511
+ return "❌ Toutes les coordonnées doivent être des nombres"
512
+
513
+ def create_figma_shape(x: str, y: str, width: str, height: str, shape_type: str, name: str = "Shape", color: str = "#FF0000") -> str:
514
+ """Crée une forme géométrique (circle, triangle, star, etc.)"""
515
+ if not figma_config["file_id"]:
516
+ return "❌ ID du fichier requis. Utilisez configure_figma_file_id() d'abord."
517
+
518
+ try:
519
+ x_pos, y_pos = float(x), float(y)
520
+ w, h = float(width), float(height)
521
+
522
+ shapes = {
523
+ "circle": "⭕",
524
+ "triangle": "🔺",
525
+ "star": "⭐",
526
+ "diamond": "💎",
527
+ "heart": "❤️",
528
+ "arrow": "➡️"
529
+ }
530
+
531
+ shape_emoji = shapes.get(shape_type.lower(), "🔶")
532
+
533
+ comment_text = f"{shape_emoji} **Forme à créer :**\n- Nom: {name}\n- Type: {shape_type}\n- Position: ({x_pos}, {y_pos})\n- Taille: {w}x{h}\n- Couleur: {color}"
534
+
535
+ comment_data = {
536
+ "message": comment_text,
537
+ "client_meta": {
538
+ "x": x_pos,
539
+ "y": y_pos
540
+ }
541
+ }
542
+
543
+ result = make_figma_request(f"files/{figma_config['file_id']}/comments", "POST", comment_data)
544
+
545
+ if "error" in result:
546
+ return f"❌ Erreur lors de la création du commentaire : {result['error']}"
547
+
548
+ return f"✅ Forme {shape_emoji} {shape_type} créée à ({x_pos}, {y_pos})"
549
+
550
+ except ValueError:
551
+ return "❌ Les coordonnées et dimensions doivent être des nombres"
552
+
553
+ def move_figma_element(element_name: str, new_x: str, new_y: str) -> str:
554
+ """Déplace un élément existant vers une nouvelle position"""
555
+ if not figma_config["file_id"]:
556
+ return "❌ ID du fichier requis. Utilisez configure_figma_file_id() d'abord."
557
+
558
+ try:
559
+ x_pos, y_pos = float(new_x), float(new_y)
560
+
561
+ comment_text = f"🚀 **Déplacement à effectuer :**\n- Élément: {element_name}\n- Nouvelle position: ({x_pos}, {y_pos})"
562
+
563
+ comment_data = {
564
+ "message": comment_text,
565
+ "client_meta": {
566
+ "x": x_pos,
567
+ "y": y_pos
568
+ }
569
+ }
570
+
571
+ result = make_figma_request(f"files/{figma_config['file_id']}/comments", "POST", comment_data)
572
+
573
+ if "error" in result:
574
+ return f"❌ Erreur lors de la création du commentaire : {result['error']}"
575
+
576
+ return f"✅ Instruction de déplacement créée pour {element_name} vers ({x_pos}, {y_pos})"
577
+
578
+ except ValueError:
579
+ return "❌ Les coordonnées doivent être des nombres"
580
+
581
+ def resize_figma_element(element_name: str, new_width: str, new_height: str) -> str:
582
+ """Redimensionne un élément existant"""
583
+ if not figma_config["file_id"]:
584
+ return "❌ ID du fichier requis. Utilisez configure_figma_file_id() d'abord."
585
+
586
+ try:
587
+ w, h = float(new_width), float(new_height)
588
+
589
+ comment_text = f"📏 **Redimensionnement à effectuer :**\n- Élément: {element_name}\n- Nouvelle taille: {w}x{h}"
590
+
591
+ comment_data = {
592
+ "message": comment_text,
593
+ "client_meta": {
594
+ "x": 0,
595
+ "y": 0
596
+ }
597
+ }
598
+
599
+ result = make_figma_request(f"files/{figma_config['file_id']}/comments", "POST", comment_data)
600
+
601
+ if "error" in result:
602
+ return f"❌ Erreur lors de la création du commentaire : {result['error']}"
603
+
604
+ return f"✅ Instruction de redimensionnement créée pour {element_name} → {w}x{h}"
605
+
606
+ except ValueError:
607
+ return "❌ Les dimensions doivent être des nombres"
608
+
609
+ def create_figma_layout_grid(columns: str, rows: str, gap: str = "20") -> str:
610
+ """Crée une grille de layout pour organiser les éléments"""
611
+ if not figma_config["file_id"]:
612
+ return "❌ ID du fichier requis. Utilisez configure_figma_file_id() d'abord."
613
+
614
+ try:
615
+ cols, rows_num, gap_size = int(columns), int(rows), float(gap)
616
+
617
+ comment_text = f"🔲 **Grille de layout à créer :**\n- Colonnes: {cols}\n- Lignes: {rows_num}\n- Espacement: {gap_size}px"
618
+
619
+ comment_data = {
620
+ "message": comment_text,
621
+ "client_meta": {
622
+ "x": 0,
623
+ "y": 0
624
+ }
625
+ }
626
+
627
+ result = make_figma_request(f"files/{figma_config['file_id']}/comments", "POST", comment_data)
628
+
629
+ if "error" in result:
630
+ return f"❌ Erreur lors de la création du commentaire : {result['error']}"
631
+
632
+ return f"✅ Grille {cols}x{rows_num} créée avec espacement de {gap_size}px"
633
+
634
+ except ValueError:
635
+ return "❌ Les valeurs doivent être des nombres"
636
+
637
+ def create_figma_component(x: str, y: str, width: str, height: str, component_name: str, description: str = "") -> str:
638
+ """Crée un composant réutilisable"""
639
+ if not figma_config["file_id"]:
640
+ return "❌ ID du fichier requis. Utilisez configure_figma_file_id() d'abord."
641
+
642
+ try:
643
+ x_pos, y_pos = float(x), float(y)
644
+ w, h = float(width), float(height)
645
+
646
+ comment_text = f"🧩 **Composant à créer :**\n- Nom: {component_name}\n- Position: ({x_pos}, {y_pos})\n- Taille: {w}x{h}\n- Description: {description}"
647
+
648
+ comment_data = {
649
+ "message": comment_text,
650
+ "client_meta": {
651
+ "x": x_pos,
652
+ "y": y_pos
653
+ }
654
+ }
655
+
656
+ result = make_figma_request(f"files/{figma_config['file_id']}/comments", "POST", comment_data)
657
+
658
+ if "error" in result:
659
+ return f"❌ Erreur lors de la création du commentaire : {result['error']}"
660
+
661
+ return f"✅ Composant \"{component_name}\" créé à ({x_pos}, {y_pos})"
662
+
663
+ except ValueError:
664
+ return "❌ Les coordonnées et dimensions doivent être des nombres"
665
+
666
  # === CONFIGURATION DE L'APPLICATION GRADIO ===
667
 
668
  def setup_demo():
 
785
  gr.Markdown("""
786
  ---
787
  ### 🛠️ **Outils MCP disponibles :**
788
+
789
+ **📋 Configuration :**
790
  - `configure_figma_token(token)` - Configure le token d'accès
791
  - `configure_figma_file_id(file_id)` - Configure l'ID du fichier
792
+
793
+ **📁 Navigation :**
794
  - `list_figma_recent_files()` - Liste tous vos fichiers récents avec leurs IDs
795
  - `get_figma_file_info()` - Récupère les infos du fichier
 
 
 
796
  - `get_figma_comments()` - Récupère les commentaires
797
  - `get_figma_user_info()` - Info utilisateur connecté
798
  - `get_figma_collaborators()` - Récupère les collaborateurs actifs
799
+
800
+ **🎨 Création d'éléments de base :**
801
+ - `create_figma_rectangle(x, y, width, height, name, color)` - Crée un rectangle
802
+ - `create_figma_frame(x, y, width, height, name)` - Crée un frame
803
+ - `create_figma_text(x, y, text, name, font_size)` - Crée un texte
804
+ - `create_figma_shape(x, y, width, height, shape_type, name, color)` - Crée des formes (circle, triangle, star, diamond, heart, arrow)
805
+
806
+ **🟡 FigJam - Post-its et organisation :**
807
+ - `create_figma_sticky_note(x, y, text, color, name)` - Crée un post-it (couleurs: yellow, blue, green, red, purple, orange)
808
+ - `create_figma_section(x, y, width, height, title, color)` - Crée une section pour organiser
809
+ - `create_figma_connector(start_x, start_y, end_x, end_y, style)` - Crée un connecteur entre points
810
+
811
+ **🔧 Manipulation d'objets :**
812
+ - `move_figma_element(element_name, new_x, new_y)` - Déplace un élément
813
+ - `resize_figma_element(element_name, new_width, new_height)` - Redimensionne un élément
814
+
815
+ **🏗️ Layout et organisation :**
816
+ - `create_figma_layout_grid(columns, rows, gap)` - Crée une grille de layout
817
+ - `create_figma_component(x, y, width, height, component_name, description)` - Crée un composant réutilisable
818
  """)
819
 
820
  return demo