@d34dman/flowdrop 0.0.43 → 0.0.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/README.md +8 -8
  2. package/dist/api/enhanced-client.d.ts +3 -1
  3. package/dist/api/enhanced-client.js +35 -5
  4. package/dist/components/App.svelte +68 -34
  5. package/dist/components/ConfigForm.svelte +169 -142
  6. package/dist/components/ConfigForm.svelte.d.ts +4 -2
  7. package/dist/components/ConfigPanel.svelte +42 -15
  8. package/dist/components/LogsSidebar.svelte +20 -19
  9. package/dist/components/Navbar.svelte +150 -80
  10. package/dist/components/Navbar.svelte.d.ts +8 -0
  11. package/dist/components/NodeSidebar.svelte +330 -217
  12. package/dist/components/PipelineStatus.svelte +6 -1
  13. package/dist/components/ReadOnlyDetails.svelte +14 -14
  14. package/dist/components/SchemaForm.svelte +49 -30
  15. package/dist/components/SchemaForm.svelte.d.ts +11 -1
  16. package/dist/components/SettingsModal.svelte +279 -0
  17. package/dist/components/SettingsModal.svelte.d.ts +23 -0
  18. package/dist/components/SettingsPanel.svelte +615 -0
  19. package/dist/components/SettingsPanel.svelte.d.ts +21 -0
  20. package/dist/components/ThemeToggle.svelte +186 -0
  21. package/dist/components/ThemeToggle.svelte.d.ts +14 -0
  22. package/dist/components/WorkflowEditor.svelte +110 -36
  23. package/dist/components/form/FormArray.svelte +81 -81
  24. package/dist/components/form/FormAutocomplete.svelte +1014 -0
  25. package/dist/components/form/FormAutocomplete.svelte.d.ts +25 -0
  26. package/dist/components/form/FormCheckboxGroup.svelte +16 -16
  27. package/dist/components/form/FormCodeEditor.svelte +26 -26
  28. package/dist/components/form/FormField.svelte +52 -21
  29. package/dist/components/form/FormFieldLight.svelte +19 -19
  30. package/dist/components/form/FormFieldWrapper.svelte +4 -4
  31. package/dist/components/form/FormMarkdownEditor.svelte +124 -57
  32. package/dist/components/form/FormNumberField.svelte +13 -13
  33. package/dist/components/form/FormRangeField.svelte +16 -16
  34. package/dist/components/form/FormSelect.svelte +15 -15
  35. package/dist/components/form/FormTemplateEditor.svelte +34 -34
  36. package/dist/components/form/FormTextField.svelte +13 -13
  37. package/dist/components/form/FormTextarea.svelte +13 -13
  38. package/dist/components/form/FormToggle.svelte +8 -8
  39. package/dist/components/form/index.d.ts +1 -0
  40. package/dist/components/form/index.js +1 -0
  41. package/dist/components/form/types.d.ts +133 -8
  42. package/dist/components/form/types.js +50 -1
  43. package/dist/components/interrupt/ChoicePrompt.svelte +45 -38
  44. package/dist/components/interrupt/ConfirmationPrompt.svelte +35 -35
  45. package/dist/components/interrupt/FormPrompt.svelte +27 -20
  46. package/dist/components/interrupt/InterruptBubble.svelte +50 -50
  47. package/dist/components/interrupt/TextInputPrompt.svelte +39 -32
  48. package/dist/components/layouts/MainLayout.svelte +233 -34
  49. package/dist/components/layouts/MainLayout.svelte.d.ts +12 -0
  50. package/dist/components/nodes/GatewayNode.svelte +102 -73
  51. package/dist/components/nodes/IdeaNode.svelte +53 -52
  52. package/dist/components/nodes/NotesNode.svelte +120 -88
  53. package/dist/components/nodes/SimpleNode.svelte +67 -47
  54. package/dist/components/nodes/SquareNode.svelte +86 -49
  55. package/dist/components/nodes/TerminalNode.svelte +122 -72
  56. package/dist/components/nodes/ToolNode.svelte +96 -65
  57. package/dist/components/nodes/WorkflowNode.svelte +91 -67
  58. package/dist/components/playground/ChatPanel.svelte +76 -76
  59. package/dist/components/playground/ExecutionLogs.svelte +71 -69
  60. package/dist/components/playground/InputCollector.svelte +59 -59
  61. package/dist/components/playground/MessageBubble.svelte +111 -112
  62. package/dist/components/playground/Playground.svelte +184 -138
  63. package/dist/components/playground/PlaygroundModal.svelte +18 -19
  64. package/dist/components/playground/SessionManager.svelte +68 -67
  65. package/dist/config/defaultPortConfig.js +22 -22
  66. package/dist/core/index.d.ts +2 -0
  67. package/dist/core/index.js +1 -0
  68. package/dist/form/fieldRegistry.d.ts +17 -1
  69. package/dist/form/fieldRegistry.js +18 -2
  70. package/dist/form/index.d.ts +20 -2
  71. package/dist/form/index.js +19 -1
  72. package/dist/helpers/workflowEditorHelper.js +23 -11
  73. package/dist/index.d.ts +5 -0
  74. package/dist/index.js +13 -0
  75. package/dist/services/autoSaveService.d.ts +112 -0
  76. package/dist/services/autoSaveService.js +223 -0
  77. package/dist/services/settingsService.d.ts +92 -0
  78. package/dist/services/settingsService.js +202 -0
  79. package/dist/services/toastService.d.ts +9 -0
  80. package/dist/services/toastService.js +30 -1
  81. package/dist/stores/settingsStore.d.ts +128 -0
  82. package/dist/stores/settingsStore.js +488 -0
  83. package/dist/stores/themeStore.d.ts +68 -0
  84. package/dist/stores/themeStore.js +215 -0
  85. package/dist/styles/base.css +298 -621
  86. package/dist/styles/toast.css +33 -0
  87. package/dist/styles/tokens.css +366 -0
  88. package/dist/types/index.d.ts +78 -0
  89. package/dist/types/index.js +2 -0
  90. package/dist/types/playground.d.ts +12 -0
  91. package/dist/types/settings.d.ts +185 -0
  92. package/dist/types/settings.js +101 -0
  93. package/dist/utils/colors.d.ts +100 -7
  94. package/dist/utils/colors.js +228 -67
  95. package/package.json +3 -3
@@ -510,95 +510,99 @@
510
510
  class:playground--embedded={mode === 'embedded'}
511
511
  class:playground--standalone={mode === 'standalone'}
512
512
  class:playground--modal={mode === 'modal'}
513
+ class:playground--no-sidebar={config.showSidebar === false}
513
514
  >
514
515
  <div class="playground__container">
515
- <!-- Sidebar -->
516
- <aside class="playground__sidebar">
517
- <!-- Sidebar Header -->
518
- <div class="playground__sidebar-header">
519
- <div class="playground__sidebar-title">
520
- <Icon icon="mdi:play-circle-outline" />
521
- <span>Playground</span>
516
+ <!-- Sidebar (conditionally rendered based on config.showSidebar) -->
517
+ {#if config.showSidebar !== false}
518
+ <aside class="playground__sidebar">
519
+ <!-- Sidebar Header -->
520
+ <div class="playground__sidebar-header">
521
+ <div class="playground__sidebar-title">
522
+ <span>Playground</span>
523
+ </div>
524
+ {#if (mode === 'embedded' || mode === 'modal') && onClose}
525
+ <button
526
+ type="button"
527
+ class="playground__sidebar-close"
528
+ onclick={onClose}
529
+ title="Close playground"
530
+ >
531
+ {#if mode === 'modal'}
532
+ <Icon icon="mdi:close" />
533
+ {:else}
534
+ <Icon icon="mdi:dock-right" />
535
+ {/if}
536
+ </button>
537
+ {/if}
522
538
  </div>
523
- {#if (mode === 'embedded' || mode === 'modal') && onClose}
524
- <button
525
- type="button"
526
- class="playground__sidebar-close"
527
- onclick={onClose}
528
- title="Close playground"
529
- >
530
- {#if mode === 'modal'}
531
- <Icon icon="mdi:close" />
532
- {:else}
533
- <Icon icon="mdi:dock-right" />
534
- {/if}
535
- </button>
536
- {/if}
537
- </div>
538
539
 
539
- <!-- Chat Section -->
540
- <div class="playground__section">
541
- <div class="playground__section-header">
542
- <div class="playground__section-title">
543
- <Icon icon="mdi:chat-outline" />
544
- <span>Chat</span>
545
- </div>
540
+ <!-- New Session Section -->
541
+ <div class="playground__section">
546
542
  <button
547
543
  type="button"
548
- class="playground__add-btn"
544
+ class="playground__new-session-btn"
549
545
  onclick={handleCreateSession}
550
546
  disabled={$isLoading}
551
- title="New chat session"
547
+ title="Start a new session"
552
548
  >
553
549
  <Icon icon="mdi:plus" />
550
+ <span>New Session</span>
554
551
  </button>
555
- </div>
556
552
 
557
- <!-- Sessions List -->
558
- <div class="playground__sessions">
559
- {#if $sessions.length === 0 && !$isLoading}
560
- <div class="playground__sessions-empty">
561
- <span>No sessions yet</span>
562
- </div>
563
- {:else}
564
- {#each $sessions as session (session.id)}
565
- <div
566
- class="playground__session"
567
- class:playground__session--active={$currentSession?.id === session.id}
568
- role="button"
569
- tabindex="0"
570
- onclick={() => handleSelectSession(session.id)}
571
- onkeydown={(e) => e.key === 'Enter' && handleSelectSession(session.id)}
572
- >
573
- <span class="playground__session-name" title={session.name}>
574
- {session.name}
575
- </span>
576
- <button
577
- type="button"
578
- class="playground__session-menu"
579
- class:playground__session-menu--delete={pendingDeleteId === session.id}
580
- onclick={(e) => handleDeleteClick(e, session.id)}
581
- title={pendingDeleteId === session.id
582
- ? 'Click to confirm delete'
583
- : 'Delete session'}
584
- >
585
- {#if pendingDeleteId === session.id}
586
- <Icon icon="mdi:check" />
587
- {:else}
588
- <Icon icon="mdi:dots-horizontal" />
589
- {/if}
590
- </button>
553
+ <!-- Sessions List - click a session to load it -->
554
+ <div class="playground__sessions-wrap">
555
+ {#if $sessions.length > 0}
556
+ <p class="playground__sessions-hint">Click a session to load it</p>
557
+ {/if}
558
+ <div class="playground__sessions">
559
+ {#if $sessions.length === 0 && !$isLoading}
560
+ <div class="playground__sessions-empty">
561
+ <span>No sessions yet</span>
591
562
  </div>
592
- {/each}
593
- {/if}
563
+ {:else}
564
+ {#each $sessions as session (session.id)}
565
+ <div
566
+ class="playground__session"
567
+ class:playground__session--active={$currentSession?.id === session.id}
568
+ role="button"
569
+ tabindex="0"
570
+ title="Click to load this session"
571
+ aria-label="Load session: {session.name}"
572
+ onclick={() => handleSelectSession(session.id)}
573
+ onkeydown={(e) => e.key === 'Enter' && handleSelectSession(session.id)}
574
+ >
575
+ <span class="playground__session-name" title={session.name}>
576
+ {session.name}
577
+ </span>
578
+ <button
579
+ type="button"
580
+ class="playground__session-menu"
581
+ class:playground__session-menu--delete={pendingDeleteId === session.id}
582
+ onclick={(e) => handleDeleteClick(e, session.id)}
583
+ title={pendingDeleteId === session.id
584
+ ? 'Click to confirm delete'
585
+ : 'Delete session'}
586
+ >
587
+ {#if pendingDeleteId === session.id}
588
+ <Icon icon="mdi:check" />
589
+ {:else}
590
+ <Icon icon="mdi:dots-horizontal" />
591
+ {/if}
592
+ </button>
593
+ </div>
594
+ {/each}
595
+ {/if}
596
+ </div>
597
+ </div>
594
598
  </div>
595
- </div>
596
- </aside>
599
+ </aside>
600
+ {/if}
597
601
 
598
602
  <!-- Main Content -->
599
603
  <main class="playground__main">
600
- <!-- Session Header -->
601
- {#if $currentSession}
604
+ <!-- Session Header (conditionally rendered based on config.showSessionHeader) -->
605
+ {#if $currentSession && config.showSessionHeader !== false}
602
606
  <header class="playground__header">
603
607
  <h2 class="playground__header-title">{$currentSession.name}</h2>
604
608
  <button
@@ -659,18 +663,24 @@
659
663
  flex-direction: column;
660
664
  height: 100%;
661
665
  overflow: hidden; /* Prevent playground-level scrolling */
662
- background-color: #f8fafc;
666
+ background-color: var(--fd-muted);
663
667
  font-family:
664
668
  -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
665
669
  }
666
670
 
667
671
  .playground--embedded {
668
- border-left: 1px solid #e2e8f0;
672
+ border-left: 1px solid var(--fd-border);
669
673
  box-shadow: -4px 0 20px rgba(0, 0, 0, 0.08);
670
674
  }
671
675
 
672
676
  .playground--standalone {
673
677
  height: 100vh;
678
+ background: var(--fd-layout-background, var(--fd-muted));
679
+ }
680
+
681
+ /* Dark mode override for standalone */
682
+ :global([data-theme='dark']) .playground--standalone {
683
+ background: linear-gradient(135deg, #141418 0%, #1a1a2e 50%, #16162a 100%);
674
684
  }
675
685
 
676
686
  .playground--modal {
@@ -678,6 +688,11 @@
678
688
  width: 100%;
679
689
  }
680
690
 
691
+ /* No sidebar mode - minimal chat widget experience */
692
+ .playground--no-sidebar .playground__main {
693
+ border-left: none;
694
+ }
695
+
681
696
  /* Container */
682
697
  .playground__container {
683
698
  display: flex;
@@ -688,18 +703,22 @@
688
703
  /* Sidebar */
689
704
  .playground__sidebar {
690
705
  width: 220px;
691
- background-color: #fafbfc;
692
- border-right: 1px solid #e5e7eb;
706
+ background-color: var(--fd-background);
707
+ border-right: 1px solid var(--fd-border);
693
708
  display: flex;
694
709
  flex-direction: column;
695
710
  }
696
711
 
712
+ /* Fixed height so sidebar and main session header align on same horizontal line */
697
713
  .playground__sidebar-header {
698
714
  display: flex;
699
715
  align-items: center;
700
716
  justify-content: space-between;
701
- padding: 1rem;
702
- border-bottom: 1px solid #e5e7eb;
717
+ height: 3.25rem;
718
+ padding: 0 1rem;
719
+ border-bottom: 1px solid var(--fd-border);
720
+ box-sizing: border-box;
721
+ flex-shrink: 0;
703
722
  }
704
723
 
705
724
  .playground__sidebar-title {
@@ -708,7 +727,8 @@
708
727
  gap: 0.5rem;
709
728
  font-size: 0.9375rem;
710
729
  font-weight: 600;
711
- color: #1f2937;
730
+ line-height: 1.25;
731
+ color: var(--fd-foreground);
712
732
  }
713
733
 
714
734
  .playground__sidebar-close {
@@ -720,14 +740,14 @@
720
740
  border: none;
721
741
  border-radius: 0.375rem;
722
742
  background: transparent;
723
- color: #6b7280;
743
+ color: var(--fd-muted-foreground);
724
744
  cursor: pointer;
725
745
  transition: all 0.15s ease;
726
746
  }
727
747
 
728
748
  .playground__sidebar-close:hover {
729
- background-color: #f3f4f6;
730
- color: #374151;
749
+ background-color: var(--fd-muted);
750
+ color: var(--fd-foreground);
731
751
  }
732
752
 
733
753
  /* Section */
@@ -736,96 +756,118 @@
736
756
  display: flex;
737
757
  flex-direction: column;
738
758
  min-height: 0;
759
+ padding: 0.75rem 0.5rem 0;
739
760
  }
740
761
 
741
- .playground__section-header {
742
- display: flex;
743
- align-items: center;
744
- justify-content: space-between;
745
- padding: 0.75rem 1rem;
746
- }
747
-
748
- .playground__section-title {
762
+ /* New Session – neutral full-width button with icon */
763
+ .playground__new-session-btn {
749
764
  display: flex;
750
765
  align-items: center;
766
+ justify-content: center;
751
767
  gap: 0.5rem;
752
- font-size: 0.8125rem;
768
+ width: 100%;
769
+ padding: 0.625rem 1rem;
770
+ border: 1px solid var(--fd-border);
771
+ border-radius: var(--fd-radius-md);
772
+ background-color: var(--fd-background);
773
+ color: var(--fd-foreground);
774
+ font-size: 0.875rem;
753
775
  font-weight: 500;
754
- color: #6b7280;
776
+ cursor: pointer;
777
+ transition: background-color 0.15s ease, border-color 0.15s ease, transform 0.1s ease;
778
+ box-sizing: border-box;
755
779
  }
756
780
 
757
- .playground__add-btn {
758
- display: flex;
759
- align-items: center;
760
- justify-content: center;
761
- width: 1.5rem;
762
- height: 1.5rem;
763
- border: none;
764
- border-radius: 0.375rem;
765
- background: transparent;
766
- color: #6b7280;
767
- cursor: pointer;
768
- transition: all 0.15s ease;
781
+ .playground__new-session-btn:hover:not(:disabled) {
782
+ background-color: var(--fd-muted);
783
+ border-color: var(--fd-border);
784
+ transform: translateY(-1px);
769
785
  }
770
786
 
771
- .playground__add-btn:hover:not(:disabled) {
772
- background-color: #e5e7eb;
773
- color: #374151;
787
+ .playground__new-session-btn:focus {
788
+ outline: none;
789
+ box-shadow: 0 0 0 2px var(--fd-ring);
774
790
  }
775
791
 
776
- .playground__add-btn:disabled {
792
+ .playground__new-session-btn:disabled {
777
793
  opacity: 0.5;
778
794
  cursor: not-allowed;
795
+ transform: none;
796
+ }
797
+
798
+ .playground__new-session-btn :global(svg) {
799
+ width: 1.125rem;
800
+ height: 1.125rem;
779
801
  }
780
802
 
781
803
  /* Sessions */
804
+ .playground__sessions-wrap {
805
+ flex: 1;
806
+ display: flex;
807
+ flex-direction: column;
808
+ min-height: 0;
809
+ }
810
+
811
+ .playground__sessions-hint {
812
+ font-size: 0.6875rem;
813
+ color: var(--fd-muted-foreground);
814
+ margin: 0.75rem 0 0.375rem 0.75rem;
815
+ line-height: 1.3;
816
+ }
817
+
782
818
  .playground__sessions {
783
819
  flex: 1;
784
820
  overflow-y: auto;
785
821
  padding: 0 0.5rem 1rem;
822
+ min-height: 0;
786
823
  }
787
824
 
788
825
  .playground__sessions-empty {
789
826
  padding: 1rem;
790
827
  text-align: center;
791
828
  font-size: 0.8125rem;
792
- color: #9ca3af;
829
+ color: var(--fd-muted-foreground);
793
830
  }
794
831
 
832
+ /* Session row - clickable to load session; clear hover/active affordance */
795
833
  .playground__session {
796
834
  display: flex;
797
835
  align-items: center;
798
836
  justify-content: space-between;
799
837
  padding: 0.625rem 0.75rem;
800
838
  margin-bottom: 0.25rem;
801
- border-radius: 0.5rem;
839
+ border-radius: var(--fd-radius-md);
840
+ border-left: 3px solid transparent;
802
841
  cursor: pointer;
803
- transition: all 0.15s ease;
842
+ transition: background-color 0.15s ease, border-left-color 0.15s ease;
804
843
  }
805
844
 
806
845
  .playground__session:hover {
807
- background-color: #f3f4f6;
846
+ background-color: var(--fd-muted);
847
+ border-left-color: var(--fd-border);
808
848
  }
809
849
 
810
850
  .playground__session--active {
811
- background-color: #e0e7ff;
851
+ background-color: var(--fd-primary-muted);
852
+ border-left-color: var(--fd-primary);
812
853
  }
813
854
 
814
855
  .playground__session--active:hover {
815
- background-color: #c7d2fe;
856
+ background-color: var(--fd-primary-muted);
857
+ border-left-color: var(--fd-primary);
816
858
  }
817
859
 
818
860
  .playground__session-name {
819
861
  flex: 1;
820
862
  font-size: 0.875rem;
821
- color: #374151;
863
+ color: var(--fd-foreground);
822
864
  white-space: nowrap;
823
865
  overflow: hidden;
824
866
  text-overflow: ellipsis;
825
867
  }
826
868
 
827
869
  .playground__session--active .playground__session-name {
828
- color: #4338ca;
870
+ color: var(--fd-primary);
829
871
  font-weight: 500;
830
872
  }
831
873
 
@@ -838,7 +880,7 @@
838
880
  border: none;
839
881
  border-radius: 0.25rem;
840
882
  background: transparent;
841
- color: #9ca3af;
883
+ color: var(--fd-muted-foreground);
842
884
  cursor: pointer;
843
885
  opacity: 0;
844
886
  transition: all 0.15s ease;
@@ -849,19 +891,19 @@
849
891
  }
850
892
 
851
893
  .playground__session-menu:hover {
852
- background-color: #fecaca;
853
- color: #dc2626;
894
+ background-color: var(--fd-error-muted);
895
+ color: var(--fd-error);
854
896
  }
855
897
 
856
898
  .playground__session-menu--delete {
857
899
  opacity: 1;
858
- background-color: #dcfce7;
859
- color: #16a34a;
900
+ background-color: var(--fd-success-muted);
901
+ color: var(--fd-success);
860
902
  }
861
903
 
862
904
  .playground__session-menu--delete:hover {
863
- background-color: #bbf7d0;
864
- color: #15803d;
905
+ background-color: var(--fd-success-muted);
906
+ color: var(--fd-success-hover);
865
907
  }
866
908
 
867
909
  /* Main Content */
@@ -872,23 +914,27 @@
872
914
  min-width: 0;
873
915
  min-height: 0; /* Allow proper flex shrinking */
874
916
  overflow: hidden; /* Prevent scrolling - ChatPanel handles it */
875
- background-color: #ffffff;
917
+ background-color: var(--fd-background);
876
918
  }
877
919
 
878
- /* Header */
920
+ /* Header - exact same height as playground__sidebar-header for alignment */
879
921
  .playground__header {
880
922
  display: flex;
881
923
  align-items: center;
882
924
  justify-content: space-between;
883
- padding: 0.875rem 1.25rem;
884
- border-bottom: 1px solid #e5e7eb;
885
- background-color: #fafbfc;
925
+ height: 3.25rem;
926
+ padding: 0 1.25rem;
927
+ border-bottom: 1px solid var(--fd-border);
928
+ background-color: var(--fd-background);
929
+ box-sizing: border-box;
930
+ flex-shrink: 0;
886
931
  }
887
932
 
888
933
  .playground__header-title {
889
934
  font-size: 0.9375rem;
890
935
  font-weight: 600;
891
- color: #1f2937;
936
+ line-height: 1.25;
937
+ color: var(--fd-foreground);
892
938
  margin: 0;
893
939
  }
894
940
 
@@ -901,14 +947,14 @@
901
947
  border: none;
902
948
  border-radius: 0.375rem;
903
949
  background: transparent;
904
- color: #6b7280;
950
+ color: var(--fd-muted-foreground);
905
951
  cursor: pointer;
906
952
  transition: all 0.15s ease;
907
953
  }
908
954
 
909
955
  .playground__header-close:hover {
910
- background-color: #f3f4f6;
911
- color: #374151;
956
+ background-color: var(--fd-muted);
957
+ color: var(--fd-foreground);
912
958
  }
913
959
 
914
960
  /* Error */
@@ -917,9 +963,9 @@
917
963
  align-items: center;
918
964
  gap: 0.5rem;
919
965
  padding: 0.75rem 1rem;
920
- background-color: #fef2f2;
921
- border-bottom: 1px solid #fecaca;
922
- color: #dc2626;
966
+ background-color: var(--fd-error-muted);
967
+ border-bottom: 1px solid var(--fd-error);
968
+ color: var(--fd-error);
923
969
  font-size: 0.875rem;
924
970
  }
925
971
 
@@ -933,13 +979,13 @@
933
979
  border: none;
934
980
  border-radius: 0.25rem;
935
981
  background: transparent;
936
- color: #dc2626;
982
+ color: var(--fd-error);
937
983
  cursor: pointer;
938
984
  transition: background-color 0.15s ease;
939
985
  }
940
986
 
941
987
  .playground__error-dismiss:hover {
942
- background-color: #fee2e2;
988
+ background-color: var(--fd-error-muted);
943
989
  }
944
990
 
945
991
  /* Content */
@@ -958,7 +1004,7 @@
958
1004
  justify-content: center;
959
1005
  flex: 1;
960
1006
  gap: 1rem;
961
- color: #6b7280;
1007
+ color: var(--fd-muted-foreground);
962
1008
  }
963
1009
 
964
1010
  :global(.playground__loading-icon) {
@@ -115,20 +115,19 @@
115
115
  left: 0;
116
116
  right: 0;
117
117
  bottom: 0;
118
- background-color: rgba(0, 0, 0, 0.5);
118
+ background-color: var(--fd-backdrop);
119
+ backdrop-filter: var(--fd-backdrop-blur);
119
120
  display: flex;
120
121
  align-items: center;
121
122
  justify-content: center;
122
123
  z-index: 1100;
123
- padding: 1rem;
124
+ padding: var(--fd-space-4);
124
125
  }
125
126
 
126
127
  .playground-modal {
127
- background: white;
128
- border-radius: 0.75rem;
129
- box-shadow:
130
- 0 20px 25px -5px rgba(0, 0, 0, 0.1),
131
- 0 10px 10px -5px rgba(0, 0, 0, 0.04);
128
+ background: var(--fd-background);
129
+ border-radius: var(--fd-radius-xl);
130
+ box-shadow: var(--fd-shadow-xl);
132
131
  width: 100%;
133
132
  max-width: 90vw;
134
133
  min-width: 800px;
@@ -142,19 +141,19 @@
142
141
  display: flex;
143
142
  align-items: center;
144
143
  justify-content: space-between;
145
- padding: 1rem 1.25rem;
146
- border-bottom: 1px solid #e5e7eb;
147
- background-color: #fafbfc;
144
+ padding: var(--fd-space-4) var(--fd-space-5);
145
+ border-bottom: 1px solid var(--fd-border);
146
+ background-color: var(--fd-muted);
148
147
  flex-shrink: 0;
149
148
  }
150
149
 
151
150
  .playground-modal__title {
152
151
  display: flex;
153
152
  align-items: center;
154
- gap: 0.5rem;
155
- font-size: 1rem;
153
+ gap: var(--fd-space-2);
154
+ font-size: var(--fd-text-base);
156
155
  font-weight: 600;
157
- color: #1f2937;
156
+ color: var(--fd-foreground);
158
157
  margin: 0;
159
158
  }
160
159
 
@@ -166,15 +165,15 @@
166
165
  height: 2rem;
167
166
  border: none;
168
167
  background: transparent;
169
- border-radius: 0.375rem;
170
- color: #6b7280;
168
+ border-radius: var(--fd-radius-md);
169
+ color: var(--fd-muted-foreground);
171
170
  cursor: pointer;
172
- transition: all 0.2s;
171
+ transition: all var(--fd-transition-normal);
173
172
  }
174
173
 
175
174
  .playground-modal__close-btn:hover {
176
- background-color: #f3f4f6;
177
- color: #374151;
175
+ background-color: var(--fd-secondary);
176
+ color: var(--fd-foreground);
178
177
  }
179
178
 
180
179
  .playground-modal__content {
@@ -208,7 +207,7 @@
208
207
  }
209
208
 
210
209
  .playground-modal__header {
211
- padding: 0.875rem 1rem;
210
+ padding: var(--fd-space-3) var(--fd-space-4);
212
211
  }
213
212
  }
214
213