@marktoflow/gui 2.0.3 → 2.0.4
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.
- package/README.md +5 -3
- package/client.log +0 -0
- package/dist/client/assets/{index-DtX_BPDj.js → index-iXI2YSzR.js} +47 -47
- package/dist/client/assets/index-iXI2YSzR.js.map +1 -0
- package/dist/client/index.html +1 -1
- package/dist/server/routes/tools.js +29 -884
- package/dist/server/routes/tools.js.map +1 -1
- package/dist/server/services/WorkflowService.js +4 -1
- package/dist/server/services/WorkflowService.js.map +1 -1
- package/dist/server/services/agents/openai-provider.js +31 -1
- package/dist/server/services/agents/openai-provider.js.map +1 -1
- package/dist/shared/constants.js +5 -0
- package/dist/shared/constants.js.map +1 -1
- package/package.json +20 -6
- package/server.log +0 -0
- package/coverage/base.css +0 -224
- package/coverage/block-navigation.js +0 -87
- package/coverage/client/App.tsx.html +0 -2230
- package/coverage/client/components/Accessibility/LiveRegion.tsx.html +0 -166
- package/coverage/client/components/Accessibility/SkipNav.tsx.html +0 -106
- package/coverage/client/components/Accessibility/index.html +0 -131
- package/coverage/client/components/Admin/AuditViewer.tsx.html +0 -214
- package/coverage/client/components/Admin/EnvironmentSwitcher.tsx.html +0 -187
- package/coverage/client/components/Admin/RoleManager.tsx.html +0 -250
- package/coverage/client/components/Admin/SecretsVault.tsx.html +0 -241
- package/coverage/client/components/Admin/index.html +0 -161
- package/coverage/client/components/Canvas/AlignmentTools.tsx.html +0 -694
- package/coverage/client/components/Canvas/Canvas.tsx.html +0 -1513
- package/coverage/client/components/Canvas/DataPreviewBadge.tsx.html +0 -307
- package/coverage/client/components/Canvas/ExecutionInputDialog.tsx.html +0 -769
- package/coverage/client/components/Canvas/ExecutionOverlay.tsx.html +0 -2938
- package/coverage/client/components/Canvas/ForEachNode.tsx.html +0 -568
- package/coverage/client/components/Canvas/GroupNode.tsx.html +0 -421
- package/coverage/client/components/Canvas/IfElseNode.tsx.html +0 -508
- package/coverage/client/components/Canvas/InlineEditor.tsx.html +0 -472
- package/coverage/client/components/Canvas/NodeContextMenu.tsx.html +0 -661
- package/coverage/client/components/Canvas/NodeTooltip.tsx.html +0 -316
- package/coverage/client/components/Canvas/OutputNode.tsx.html +0 -418
- package/coverage/client/components/Canvas/ParallelNode.tsx.html +0 -556
- package/coverage/client/components/Canvas/StepNode.tsx.html +0 -463
- package/coverage/client/components/Canvas/StickyNoteNode.tsx.html +0 -442
- package/coverage/client/components/Canvas/SubWorkflowNode.tsx.html +0 -508
- package/coverage/client/components/Canvas/SwitchNode.tsx.html +0 -640
- package/coverage/client/components/Canvas/Toolbar.tsx.html +0 -1030
- package/coverage/client/components/Canvas/TransformNode.tsx.html +0 -667
- package/coverage/client/components/Canvas/TriggerNode.tsx.html +0 -469
- package/coverage/client/components/Canvas/TryCatchNode.tsx.html +0 -577
- package/coverage/client/components/Canvas/WhileNode.tsx.html +0 -595
- package/coverage/client/components/Canvas/index.html +0 -446
- package/coverage/client/components/Canvas/index.ts.html +0 -157
- package/coverage/client/components/Collaboration/ActivityFeed.tsx.html +0 -253
- package/coverage/client/components/Collaboration/CommentThread.tsx.html +0 -397
- package/coverage/client/components/Collaboration/LockIndicator.tsx.html +0 -172
- package/coverage/client/components/Collaboration/PresenceIndicator.tsx.html +0 -214
- package/coverage/client/components/Collaboration/index.html +0 -161
- package/coverage/client/components/CommandPalette/CommandItem.tsx.html +0 -313
- package/coverage/client/components/CommandPalette/CommandPalette.tsx.html +0 -685
- package/coverage/client/components/CommandPalette/index.html +0 -131
- package/coverage/client/components/Debug/VariableInspector.tsx.html +0 -529
- package/coverage/client/components/Debug/index.html +0 -116
- package/coverage/client/components/Editor/InputsEditor.tsx.html +0 -1459
- package/coverage/client/components/Editor/NewStepWizard.tsx.html +0 -1117
- package/coverage/client/components/Editor/StepEditor.tsx.html +0 -1681
- package/coverage/client/components/Editor/YamlEditor.tsx.html +0 -565
- package/coverage/client/components/Editor/index.html +0 -161
- package/coverage/client/components/Execution/TimelineView.tsx.html +0 -397
- package/coverage/client/components/Execution/index.html +0 -116
- package/coverage/client/components/Onboarding/OnboardingTour.tsx.html +0 -265
- package/coverage/client/components/Onboarding/index.html +0 -116
- package/coverage/client/components/Panels/PropertiesPanel.tsx.html +0 -2035
- package/coverage/client/components/Panels/ValidationPanel.tsx.html +0 -856
- package/coverage/client/components/Panels/index.html +0 -131
- package/coverage/client/components/Prompt/ChangePreview.tsx.html +0 -928
- package/coverage/client/components/Prompt/PromptHistoryPanel.tsx.html +0 -712
- package/coverage/client/components/Prompt/PromptInput.tsx.html +0 -415
- package/coverage/client/components/Prompt/index.html +0 -146
- package/coverage/client/components/Settings/ProviderSwitcher.tsx.html +0 -1306
- package/coverage/client/components/Settings/SettingsPanel.tsx.html +0 -355
- package/coverage/client/components/Settings/controls/SettingNumber.tsx.html +0 -211
- package/coverage/client/components/Settings/controls/SettingSelect.tsx.html +0 -196
- package/coverage/client/components/Settings/controls/SettingToggle.tsx.html +0 -199
- package/coverage/client/components/Settings/controls/index.html +0 -146
- package/coverage/client/components/Settings/index.html +0 -131
- package/coverage/client/components/Settings/sections/AISettings.tsx.html +0 -154
- package/coverage/client/components/Settings/sections/CanvasSettings.tsx.html +0 -220
- package/coverage/client/components/Settings/sections/EditorSettings.tsx.html +0 -208
- package/coverage/client/components/Settings/sections/ExecutionSettings.tsx.html +0 -172
- package/coverage/client/components/Settings/sections/GeneralSettings.tsx.html +0 -151
- package/coverage/client/components/Settings/sections/NotificationSettings.tsx.html +0 -190
- package/coverage/client/components/Settings/sections/index.html +0 -191
- package/coverage/client/components/Sidebar/ImportDialog.tsx.html +0 -856
- package/coverage/client/components/Sidebar/NewWorkflowDialog.tsx.html +0 -694
- package/coverage/client/components/Sidebar/Sidebar.tsx.html +0 -1456
- package/coverage/client/components/Sidebar/index.html +0 -146
- package/coverage/client/components/Templates/TemplateCard.tsx.html +0 -181
- package/coverage/client/components/Templates/TemplateGallery.tsx.html +0 -307
- package/coverage/client/components/Templates/index.html +0 -131
- package/coverage/client/components/Versions/DiffViewer.tsx.html +0 -220
- package/coverage/client/components/Versions/VersionHistory.tsx.html +0 -352
- package/coverage/client/components/Versions/index.html +0 -131
- package/coverage/client/components/common/Breadcrumb.tsx.html +0 -205
- package/coverage/client/components/common/Button.tsx.html +0 -289
- package/coverage/client/components/common/ContextMenu.tsx.html +0 -691
- package/coverage/client/components/common/KeyboardShortcuts.tsx.html +0 -541
- package/coverage/client/components/common/Modal.tsx.html +0 -364
- package/coverage/client/components/common/Tabs.tsx.html +0 -256
- package/coverage/client/components/common/ThemeToggle.tsx.html +0 -301
- package/coverage/client/components/common/index.html +0 -206
- package/coverage/client/components/index.html +0 -116
- package/coverage/client/components/index.ts.html +0 -181
- package/coverage/client/hooks/index.html +0 -176
- package/coverage/client/hooks/index.ts.html +0 -97
- package/coverage/client/hooks/useAIPrompt.ts.html +0 -409
- package/coverage/client/hooks/useCanvas.ts.html +0 -739
- package/coverage/client/hooks/useWebSocket.ts.html +0 -580
- package/coverage/client/hooks/useWorkflow.ts.html +0 -502
- package/coverage/client/index.html +0 -131
- package/coverage/client/main.tsx.html +0 -115
- package/coverage/client/stores/agentStore.ts.html +0 -421
- package/coverage/client/stores/canvasStore.ts.html +0 -1129
- package/coverage/client/stores/collaborationStore.ts.html +0 -544
- package/coverage/client/stores/commandStore.ts.html +0 -610
- package/coverage/client/stores/editorStore.ts.html +0 -484
- package/coverage/client/stores/executionStore.ts.html +0 -1594
- package/coverage/client/stores/governanceStore.ts.html +0 -493
- package/coverage/client/stores/index.html +0 -341
- package/coverage/client/stores/index.ts.html +0 -112
- package/coverage/client/stores/layoutStore.ts.html +0 -439
- package/coverage/client/stores/navigationStore.ts.html +0 -232
- package/coverage/client/stores/onboardingStore.ts.html +0 -247
- package/coverage/client/stores/promptStore.ts.html +0 -430
- package/coverage/client/stores/settingsStore.ts.html +0 -472
- package/coverage/client/stores/themeStore.ts.html +0 -271
- package/coverage/client/stores/versionStore.ts.html +0 -340
- package/coverage/client/stores/workflowStore.ts.html +0 -739
- package/coverage/client/utils/applyDagreLayout.ts.html +0 -286
- package/coverage/client/utils/cn.ts.html +0 -112
- package/coverage/client/utils/index.html +0 -206
- package/coverage/client/utils/index.ts.html +0 -97
- package/coverage/client/utils/platform.ts.html +0 -223
- package/coverage/client/utils/serviceIcons.tsx.html +0 -376
- package/coverage/client/utils/stepValidation.ts.html +0 -550
- package/coverage/client/utils/workflowToGraph.ts.html +0 -1624
- package/coverage/coverage-final.json +0 -107
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +0 -461
- package/coverage/prettify.css +0 -1
- package/coverage/prettify.js +0 -2
- package/coverage/shared/constants.ts.html +0 -655
- package/coverage/shared/index.html +0 -146
- package/coverage/shared/settings.ts.html +0 -406
- package/coverage/shared/types.ts.html +0 -622
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +0 -210
- package/dist/client/assets/index-DtX_BPDj.js.map +0 -1
|
@@ -1,1030 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
<!doctype html>
|
|
3
|
-
<html lang="en">
|
|
4
|
-
|
|
5
|
-
<head>
|
|
6
|
-
<title>Code coverage report for client/components/Canvas/Toolbar.tsx</title>
|
|
7
|
-
<meta charset="utf-8" />
|
|
8
|
-
<link rel="stylesheet" href="../../../prettify.css" />
|
|
9
|
-
<link rel="stylesheet" href="../../../base.css" />
|
|
10
|
-
<link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" />
|
|
11
|
-
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
12
|
-
<style type='text/css'>
|
|
13
|
-
.coverage-summary .sorter {
|
|
14
|
-
background-image: url(../../../sort-arrow-sprite.png);
|
|
15
|
-
}
|
|
16
|
-
</style>
|
|
17
|
-
</head>
|
|
18
|
-
|
|
19
|
-
<body>
|
|
20
|
-
<div class='wrapper'>
|
|
21
|
-
<div class='pad1'>
|
|
22
|
-
<h1><a href="../../../index.html">All files</a> / <a href="index.html">client/components/Canvas</a> Toolbar.tsx</h1>
|
|
23
|
-
<div class='clearfix'>
|
|
24
|
-
|
|
25
|
-
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">0% </span>
|
|
27
|
-
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>0/209</span>
|
|
29
|
-
</div>
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">0% </span>
|
|
34
|
-
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>0/1</span>
|
|
36
|
-
</div>
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">0% </span>
|
|
41
|
-
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>0/1</span>
|
|
43
|
-
</div>
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">0% </span>
|
|
48
|
-
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>0/209</span>
|
|
50
|
-
</div>
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
</div>
|
|
54
|
-
<p class="quiet">
|
|
55
|
-
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
|
56
|
-
</p>
|
|
57
|
-
<template id="filterTemplate">
|
|
58
|
-
<div class="quiet">
|
|
59
|
-
Filter:
|
|
60
|
-
<input type="search" id="fileSearch">
|
|
61
|
-
</div>
|
|
62
|
-
</template>
|
|
63
|
-
</div>
|
|
64
|
-
<div class='status-line low'></div>
|
|
65
|
-
<pre><table class="coverage">
|
|
66
|
-
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
|
-
<a name='L2'></a><a href='#L2'>2</a>
|
|
68
|
-
<a name='L3'></a><a href='#L3'>3</a>
|
|
69
|
-
<a name='L4'></a><a href='#L4'>4</a>
|
|
70
|
-
<a name='L5'></a><a href='#L5'>5</a>
|
|
71
|
-
<a name='L6'></a><a href='#L6'>6</a>
|
|
72
|
-
<a name='L7'></a><a href='#L7'>7</a>
|
|
73
|
-
<a name='L8'></a><a href='#L8'>8</a>
|
|
74
|
-
<a name='L9'></a><a href='#L9'>9</a>
|
|
75
|
-
<a name='L10'></a><a href='#L10'>10</a>
|
|
76
|
-
<a name='L11'></a><a href='#L11'>11</a>
|
|
77
|
-
<a name='L12'></a><a href='#L12'>12</a>
|
|
78
|
-
<a name='L13'></a><a href='#L13'>13</a>
|
|
79
|
-
<a name='L14'></a><a href='#L14'>14</a>
|
|
80
|
-
<a name='L15'></a><a href='#L15'>15</a>
|
|
81
|
-
<a name='L16'></a><a href='#L16'>16</a>
|
|
82
|
-
<a name='L17'></a><a href='#L17'>17</a>
|
|
83
|
-
<a name='L18'></a><a href='#L18'>18</a>
|
|
84
|
-
<a name='L19'></a><a href='#L19'>19</a>
|
|
85
|
-
<a name='L20'></a><a href='#L20'>20</a>
|
|
86
|
-
<a name='L21'></a><a href='#L21'>21</a>
|
|
87
|
-
<a name='L22'></a><a href='#L22'>22</a>
|
|
88
|
-
<a name='L23'></a><a href='#L23'>23</a>
|
|
89
|
-
<a name='L24'></a><a href='#L24'>24</a>
|
|
90
|
-
<a name='L25'></a><a href='#L25'>25</a>
|
|
91
|
-
<a name='L26'></a><a href='#L26'>26</a>
|
|
92
|
-
<a name='L27'></a><a href='#L27'>27</a>
|
|
93
|
-
<a name='L28'></a><a href='#L28'>28</a>
|
|
94
|
-
<a name='L29'></a><a href='#L29'>29</a>
|
|
95
|
-
<a name='L30'></a><a href='#L30'>30</a>
|
|
96
|
-
<a name='L31'></a><a href='#L31'>31</a>
|
|
97
|
-
<a name='L32'></a><a href='#L32'>32</a>
|
|
98
|
-
<a name='L33'></a><a href='#L33'>33</a>
|
|
99
|
-
<a name='L34'></a><a href='#L34'>34</a>
|
|
100
|
-
<a name='L35'></a><a href='#L35'>35</a>
|
|
101
|
-
<a name='L36'></a><a href='#L36'>36</a>
|
|
102
|
-
<a name='L37'></a><a href='#L37'>37</a>
|
|
103
|
-
<a name='L38'></a><a href='#L38'>38</a>
|
|
104
|
-
<a name='L39'></a><a href='#L39'>39</a>
|
|
105
|
-
<a name='L40'></a><a href='#L40'>40</a>
|
|
106
|
-
<a name='L41'></a><a href='#L41'>41</a>
|
|
107
|
-
<a name='L42'></a><a href='#L42'>42</a>
|
|
108
|
-
<a name='L43'></a><a href='#L43'>43</a>
|
|
109
|
-
<a name='L44'></a><a href='#L44'>44</a>
|
|
110
|
-
<a name='L45'></a><a href='#L45'>45</a>
|
|
111
|
-
<a name='L46'></a><a href='#L46'>46</a>
|
|
112
|
-
<a name='L47'></a><a href='#L47'>47</a>
|
|
113
|
-
<a name='L48'></a><a href='#L48'>48</a>
|
|
114
|
-
<a name='L49'></a><a href='#L49'>49</a>
|
|
115
|
-
<a name='L50'></a><a href='#L50'>50</a>
|
|
116
|
-
<a name='L51'></a><a href='#L51'>51</a>
|
|
117
|
-
<a name='L52'></a><a href='#L52'>52</a>
|
|
118
|
-
<a name='L53'></a><a href='#L53'>53</a>
|
|
119
|
-
<a name='L54'></a><a href='#L54'>54</a>
|
|
120
|
-
<a name='L55'></a><a href='#L55'>55</a>
|
|
121
|
-
<a name='L56'></a><a href='#L56'>56</a>
|
|
122
|
-
<a name='L57'></a><a href='#L57'>57</a>
|
|
123
|
-
<a name='L58'></a><a href='#L58'>58</a>
|
|
124
|
-
<a name='L59'></a><a href='#L59'>59</a>
|
|
125
|
-
<a name='L60'></a><a href='#L60'>60</a>
|
|
126
|
-
<a name='L61'></a><a href='#L61'>61</a>
|
|
127
|
-
<a name='L62'></a><a href='#L62'>62</a>
|
|
128
|
-
<a name='L63'></a><a href='#L63'>63</a>
|
|
129
|
-
<a name='L64'></a><a href='#L64'>64</a>
|
|
130
|
-
<a name='L65'></a><a href='#L65'>65</a>
|
|
131
|
-
<a name='L66'></a><a href='#L66'>66</a>
|
|
132
|
-
<a name='L67'></a><a href='#L67'>67</a>
|
|
133
|
-
<a name='L68'></a><a href='#L68'>68</a>
|
|
134
|
-
<a name='L69'></a><a href='#L69'>69</a>
|
|
135
|
-
<a name='L70'></a><a href='#L70'>70</a>
|
|
136
|
-
<a name='L71'></a><a href='#L71'>71</a>
|
|
137
|
-
<a name='L72'></a><a href='#L72'>72</a>
|
|
138
|
-
<a name='L73'></a><a href='#L73'>73</a>
|
|
139
|
-
<a name='L74'></a><a href='#L74'>74</a>
|
|
140
|
-
<a name='L75'></a><a href='#L75'>75</a>
|
|
141
|
-
<a name='L76'></a><a href='#L76'>76</a>
|
|
142
|
-
<a name='L77'></a><a href='#L77'>77</a>
|
|
143
|
-
<a name='L78'></a><a href='#L78'>78</a>
|
|
144
|
-
<a name='L79'></a><a href='#L79'>79</a>
|
|
145
|
-
<a name='L80'></a><a href='#L80'>80</a>
|
|
146
|
-
<a name='L81'></a><a href='#L81'>81</a>
|
|
147
|
-
<a name='L82'></a><a href='#L82'>82</a>
|
|
148
|
-
<a name='L83'></a><a href='#L83'>83</a>
|
|
149
|
-
<a name='L84'></a><a href='#L84'>84</a>
|
|
150
|
-
<a name='L85'></a><a href='#L85'>85</a>
|
|
151
|
-
<a name='L86'></a><a href='#L86'>86</a>
|
|
152
|
-
<a name='L87'></a><a href='#L87'>87</a>
|
|
153
|
-
<a name='L88'></a><a href='#L88'>88</a>
|
|
154
|
-
<a name='L89'></a><a href='#L89'>89</a>
|
|
155
|
-
<a name='L90'></a><a href='#L90'>90</a>
|
|
156
|
-
<a name='L91'></a><a href='#L91'>91</a>
|
|
157
|
-
<a name='L92'></a><a href='#L92'>92</a>
|
|
158
|
-
<a name='L93'></a><a href='#L93'>93</a>
|
|
159
|
-
<a name='L94'></a><a href='#L94'>94</a>
|
|
160
|
-
<a name='L95'></a><a href='#L95'>95</a>
|
|
161
|
-
<a name='L96'></a><a href='#L96'>96</a>
|
|
162
|
-
<a name='L97'></a><a href='#L97'>97</a>
|
|
163
|
-
<a name='L98'></a><a href='#L98'>98</a>
|
|
164
|
-
<a name='L99'></a><a href='#L99'>99</a>
|
|
165
|
-
<a name='L100'></a><a href='#L100'>100</a>
|
|
166
|
-
<a name='L101'></a><a href='#L101'>101</a>
|
|
167
|
-
<a name='L102'></a><a href='#L102'>102</a>
|
|
168
|
-
<a name='L103'></a><a href='#L103'>103</a>
|
|
169
|
-
<a name='L104'></a><a href='#L104'>104</a>
|
|
170
|
-
<a name='L105'></a><a href='#L105'>105</a>
|
|
171
|
-
<a name='L106'></a><a href='#L106'>106</a>
|
|
172
|
-
<a name='L107'></a><a href='#L107'>107</a>
|
|
173
|
-
<a name='L108'></a><a href='#L108'>108</a>
|
|
174
|
-
<a name='L109'></a><a href='#L109'>109</a>
|
|
175
|
-
<a name='L110'></a><a href='#L110'>110</a>
|
|
176
|
-
<a name='L111'></a><a href='#L111'>111</a>
|
|
177
|
-
<a name='L112'></a><a href='#L112'>112</a>
|
|
178
|
-
<a name='L113'></a><a href='#L113'>113</a>
|
|
179
|
-
<a name='L114'></a><a href='#L114'>114</a>
|
|
180
|
-
<a name='L115'></a><a href='#L115'>115</a>
|
|
181
|
-
<a name='L116'></a><a href='#L116'>116</a>
|
|
182
|
-
<a name='L117'></a><a href='#L117'>117</a>
|
|
183
|
-
<a name='L118'></a><a href='#L118'>118</a>
|
|
184
|
-
<a name='L119'></a><a href='#L119'>119</a>
|
|
185
|
-
<a name='L120'></a><a href='#L120'>120</a>
|
|
186
|
-
<a name='L121'></a><a href='#L121'>121</a>
|
|
187
|
-
<a name='L122'></a><a href='#L122'>122</a>
|
|
188
|
-
<a name='L123'></a><a href='#L123'>123</a>
|
|
189
|
-
<a name='L124'></a><a href='#L124'>124</a>
|
|
190
|
-
<a name='L125'></a><a href='#L125'>125</a>
|
|
191
|
-
<a name='L126'></a><a href='#L126'>126</a>
|
|
192
|
-
<a name='L127'></a><a href='#L127'>127</a>
|
|
193
|
-
<a name='L128'></a><a href='#L128'>128</a>
|
|
194
|
-
<a name='L129'></a><a href='#L129'>129</a>
|
|
195
|
-
<a name='L130'></a><a href='#L130'>130</a>
|
|
196
|
-
<a name='L131'></a><a href='#L131'>131</a>
|
|
197
|
-
<a name='L132'></a><a href='#L132'>132</a>
|
|
198
|
-
<a name='L133'></a><a href='#L133'>133</a>
|
|
199
|
-
<a name='L134'></a><a href='#L134'>134</a>
|
|
200
|
-
<a name='L135'></a><a href='#L135'>135</a>
|
|
201
|
-
<a name='L136'></a><a href='#L136'>136</a>
|
|
202
|
-
<a name='L137'></a><a href='#L137'>137</a>
|
|
203
|
-
<a name='L138'></a><a href='#L138'>138</a>
|
|
204
|
-
<a name='L139'></a><a href='#L139'>139</a>
|
|
205
|
-
<a name='L140'></a><a href='#L140'>140</a>
|
|
206
|
-
<a name='L141'></a><a href='#L141'>141</a>
|
|
207
|
-
<a name='L142'></a><a href='#L142'>142</a>
|
|
208
|
-
<a name='L143'></a><a href='#L143'>143</a>
|
|
209
|
-
<a name='L144'></a><a href='#L144'>144</a>
|
|
210
|
-
<a name='L145'></a><a href='#L145'>145</a>
|
|
211
|
-
<a name='L146'></a><a href='#L146'>146</a>
|
|
212
|
-
<a name='L147'></a><a href='#L147'>147</a>
|
|
213
|
-
<a name='L148'></a><a href='#L148'>148</a>
|
|
214
|
-
<a name='L149'></a><a href='#L149'>149</a>
|
|
215
|
-
<a name='L150'></a><a href='#L150'>150</a>
|
|
216
|
-
<a name='L151'></a><a href='#L151'>151</a>
|
|
217
|
-
<a name='L152'></a><a href='#L152'>152</a>
|
|
218
|
-
<a name='L153'></a><a href='#L153'>153</a>
|
|
219
|
-
<a name='L154'></a><a href='#L154'>154</a>
|
|
220
|
-
<a name='L155'></a><a href='#L155'>155</a>
|
|
221
|
-
<a name='L156'></a><a href='#L156'>156</a>
|
|
222
|
-
<a name='L157'></a><a href='#L157'>157</a>
|
|
223
|
-
<a name='L158'></a><a href='#L158'>158</a>
|
|
224
|
-
<a name='L159'></a><a href='#L159'>159</a>
|
|
225
|
-
<a name='L160'></a><a href='#L160'>160</a>
|
|
226
|
-
<a name='L161'></a><a href='#L161'>161</a>
|
|
227
|
-
<a name='L162'></a><a href='#L162'>162</a>
|
|
228
|
-
<a name='L163'></a><a href='#L163'>163</a>
|
|
229
|
-
<a name='L164'></a><a href='#L164'>164</a>
|
|
230
|
-
<a name='L165'></a><a href='#L165'>165</a>
|
|
231
|
-
<a name='L166'></a><a href='#L166'>166</a>
|
|
232
|
-
<a name='L167'></a><a href='#L167'>167</a>
|
|
233
|
-
<a name='L168'></a><a href='#L168'>168</a>
|
|
234
|
-
<a name='L169'></a><a href='#L169'>169</a>
|
|
235
|
-
<a name='L170'></a><a href='#L170'>170</a>
|
|
236
|
-
<a name='L171'></a><a href='#L171'>171</a>
|
|
237
|
-
<a name='L172'></a><a href='#L172'>172</a>
|
|
238
|
-
<a name='L173'></a><a href='#L173'>173</a>
|
|
239
|
-
<a name='L174'></a><a href='#L174'>174</a>
|
|
240
|
-
<a name='L175'></a><a href='#L175'>175</a>
|
|
241
|
-
<a name='L176'></a><a href='#L176'>176</a>
|
|
242
|
-
<a name='L177'></a><a href='#L177'>177</a>
|
|
243
|
-
<a name='L178'></a><a href='#L178'>178</a>
|
|
244
|
-
<a name='L179'></a><a href='#L179'>179</a>
|
|
245
|
-
<a name='L180'></a><a href='#L180'>180</a>
|
|
246
|
-
<a name='L181'></a><a href='#L181'>181</a>
|
|
247
|
-
<a name='L182'></a><a href='#L182'>182</a>
|
|
248
|
-
<a name='L183'></a><a href='#L183'>183</a>
|
|
249
|
-
<a name='L184'></a><a href='#L184'>184</a>
|
|
250
|
-
<a name='L185'></a><a href='#L185'>185</a>
|
|
251
|
-
<a name='L186'></a><a href='#L186'>186</a>
|
|
252
|
-
<a name='L187'></a><a href='#L187'>187</a>
|
|
253
|
-
<a name='L188'></a><a href='#L188'>188</a>
|
|
254
|
-
<a name='L189'></a><a href='#L189'>189</a>
|
|
255
|
-
<a name='L190'></a><a href='#L190'>190</a>
|
|
256
|
-
<a name='L191'></a><a href='#L191'>191</a>
|
|
257
|
-
<a name='L192'></a><a href='#L192'>192</a>
|
|
258
|
-
<a name='L193'></a><a href='#L193'>193</a>
|
|
259
|
-
<a name='L194'></a><a href='#L194'>194</a>
|
|
260
|
-
<a name='L195'></a><a href='#L195'>195</a>
|
|
261
|
-
<a name='L196'></a><a href='#L196'>196</a>
|
|
262
|
-
<a name='L197'></a><a href='#L197'>197</a>
|
|
263
|
-
<a name='L198'></a><a href='#L198'>198</a>
|
|
264
|
-
<a name='L199'></a><a href='#L199'>199</a>
|
|
265
|
-
<a name='L200'></a><a href='#L200'>200</a>
|
|
266
|
-
<a name='L201'></a><a href='#L201'>201</a>
|
|
267
|
-
<a name='L202'></a><a href='#L202'>202</a>
|
|
268
|
-
<a name='L203'></a><a href='#L203'>203</a>
|
|
269
|
-
<a name='L204'></a><a href='#L204'>204</a>
|
|
270
|
-
<a name='L205'></a><a href='#L205'>205</a>
|
|
271
|
-
<a name='L206'></a><a href='#L206'>206</a>
|
|
272
|
-
<a name='L207'></a><a href='#L207'>207</a>
|
|
273
|
-
<a name='L208'></a><a href='#L208'>208</a>
|
|
274
|
-
<a name='L209'></a><a href='#L209'>209</a>
|
|
275
|
-
<a name='L210'></a><a href='#L210'>210</a>
|
|
276
|
-
<a name='L211'></a><a href='#L211'>211</a>
|
|
277
|
-
<a name='L212'></a><a href='#L212'>212</a>
|
|
278
|
-
<a name='L213'></a><a href='#L213'>213</a>
|
|
279
|
-
<a name='L214'></a><a href='#L214'>214</a>
|
|
280
|
-
<a name='L215'></a><a href='#L215'>215</a>
|
|
281
|
-
<a name='L216'></a><a href='#L216'>216</a>
|
|
282
|
-
<a name='L217'></a><a href='#L217'>217</a>
|
|
283
|
-
<a name='L218'></a><a href='#L218'>218</a>
|
|
284
|
-
<a name='L219'></a><a href='#L219'>219</a>
|
|
285
|
-
<a name='L220'></a><a href='#L220'>220</a>
|
|
286
|
-
<a name='L221'></a><a href='#L221'>221</a>
|
|
287
|
-
<a name='L222'></a><a href='#L222'>222</a>
|
|
288
|
-
<a name='L223'></a><a href='#L223'>223</a>
|
|
289
|
-
<a name='L224'></a><a href='#L224'>224</a>
|
|
290
|
-
<a name='L225'></a><a href='#L225'>225</a>
|
|
291
|
-
<a name='L226'></a><a href='#L226'>226</a>
|
|
292
|
-
<a name='L227'></a><a href='#L227'>227</a>
|
|
293
|
-
<a name='L228'></a><a href='#L228'>228</a>
|
|
294
|
-
<a name='L229'></a><a href='#L229'>229</a>
|
|
295
|
-
<a name='L230'></a><a href='#L230'>230</a>
|
|
296
|
-
<a name='L231'></a><a href='#L231'>231</a>
|
|
297
|
-
<a name='L232'></a><a href='#L232'>232</a>
|
|
298
|
-
<a name='L233'></a><a href='#L233'>233</a>
|
|
299
|
-
<a name='L234'></a><a href='#L234'>234</a>
|
|
300
|
-
<a name='L235'></a><a href='#L235'>235</a>
|
|
301
|
-
<a name='L236'></a><a href='#L236'>236</a>
|
|
302
|
-
<a name='L237'></a><a href='#L237'>237</a>
|
|
303
|
-
<a name='L238'></a><a href='#L238'>238</a>
|
|
304
|
-
<a name='L239'></a><a href='#L239'>239</a>
|
|
305
|
-
<a name='L240'></a><a href='#L240'>240</a>
|
|
306
|
-
<a name='L241'></a><a href='#L241'>241</a>
|
|
307
|
-
<a name='L242'></a><a href='#L242'>242</a>
|
|
308
|
-
<a name='L243'></a><a href='#L243'>243</a>
|
|
309
|
-
<a name='L244'></a><a href='#L244'>244</a>
|
|
310
|
-
<a name='L245'></a><a href='#L245'>245</a>
|
|
311
|
-
<a name='L246'></a><a href='#L246'>246</a>
|
|
312
|
-
<a name='L247'></a><a href='#L247'>247</a>
|
|
313
|
-
<a name='L248'></a><a href='#L248'>248</a>
|
|
314
|
-
<a name='L249'></a><a href='#L249'>249</a>
|
|
315
|
-
<a name='L250'></a><a href='#L250'>250</a>
|
|
316
|
-
<a name='L251'></a><a href='#L251'>251</a>
|
|
317
|
-
<a name='L252'></a><a href='#L252'>252</a>
|
|
318
|
-
<a name='L253'></a><a href='#L253'>253</a>
|
|
319
|
-
<a name='L254'></a><a href='#L254'>254</a>
|
|
320
|
-
<a name='L255'></a><a href='#L255'>255</a>
|
|
321
|
-
<a name='L256'></a><a href='#L256'>256</a>
|
|
322
|
-
<a name='L257'></a><a href='#L257'>257</a>
|
|
323
|
-
<a name='L258'></a><a href='#L258'>258</a>
|
|
324
|
-
<a name='L259'></a><a href='#L259'>259</a>
|
|
325
|
-
<a name='L260'></a><a href='#L260'>260</a>
|
|
326
|
-
<a name='L261'></a><a href='#L261'>261</a>
|
|
327
|
-
<a name='L262'></a><a href='#L262'>262</a>
|
|
328
|
-
<a name='L263'></a><a href='#L263'>263</a>
|
|
329
|
-
<a name='L264'></a><a href='#L264'>264</a>
|
|
330
|
-
<a name='L265'></a><a href='#L265'>265</a>
|
|
331
|
-
<a name='L266'></a><a href='#L266'>266</a>
|
|
332
|
-
<a name='L267'></a><a href='#L267'>267</a>
|
|
333
|
-
<a name='L268'></a><a href='#L268'>268</a>
|
|
334
|
-
<a name='L269'></a><a href='#L269'>269</a>
|
|
335
|
-
<a name='L270'></a><a href='#L270'>270</a>
|
|
336
|
-
<a name='L271'></a><a href='#L271'>271</a>
|
|
337
|
-
<a name='L272'></a><a href='#L272'>272</a>
|
|
338
|
-
<a name='L273'></a><a href='#L273'>273</a>
|
|
339
|
-
<a name='L274'></a><a href='#L274'>274</a>
|
|
340
|
-
<a name='L275'></a><a href='#L275'>275</a>
|
|
341
|
-
<a name='L276'></a><a href='#L276'>276</a>
|
|
342
|
-
<a name='L277'></a><a href='#L277'>277</a>
|
|
343
|
-
<a name='L278'></a><a href='#L278'>278</a>
|
|
344
|
-
<a name='L279'></a><a href='#L279'>279</a>
|
|
345
|
-
<a name='L280'></a><a href='#L280'>280</a>
|
|
346
|
-
<a name='L281'></a><a href='#L281'>281</a>
|
|
347
|
-
<a name='L282'></a><a href='#L282'>282</a>
|
|
348
|
-
<a name='L283'></a><a href='#L283'>283</a>
|
|
349
|
-
<a name='L284'></a><a href='#L284'>284</a>
|
|
350
|
-
<a name='L285'></a><a href='#L285'>285</a>
|
|
351
|
-
<a name='L286'></a><a href='#L286'>286</a>
|
|
352
|
-
<a name='L287'></a><a href='#L287'>287</a>
|
|
353
|
-
<a name='L288'></a><a href='#L288'>288</a>
|
|
354
|
-
<a name='L289'></a><a href='#L289'>289</a>
|
|
355
|
-
<a name='L290'></a><a href='#L290'>290</a>
|
|
356
|
-
<a name='L291'></a><a href='#L291'>291</a>
|
|
357
|
-
<a name='L292'></a><a href='#L292'>292</a>
|
|
358
|
-
<a name='L293'></a><a href='#L293'>293</a>
|
|
359
|
-
<a name='L294'></a><a href='#L294'>294</a>
|
|
360
|
-
<a name='L295'></a><a href='#L295'>295</a>
|
|
361
|
-
<a name='L296'></a><a href='#L296'>296</a>
|
|
362
|
-
<a name='L297'></a><a href='#L297'>297</a>
|
|
363
|
-
<a name='L298'></a><a href='#L298'>298</a>
|
|
364
|
-
<a name='L299'></a><a href='#L299'>299</a>
|
|
365
|
-
<a name='L300'></a><a href='#L300'>300</a>
|
|
366
|
-
<a name='L301'></a><a href='#L301'>301</a>
|
|
367
|
-
<a name='L302'></a><a href='#L302'>302</a>
|
|
368
|
-
<a name='L303'></a><a href='#L303'>303</a>
|
|
369
|
-
<a name='L304'></a><a href='#L304'>304</a>
|
|
370
|
-
<a name='L305'></a><a href='#L305'>305</a>
|
|
371
|
-
<a name='L306'></a><a href='#L306'>306</a>
|
|
372
|
-
<a name='L307'></a><a href='#L307'>307</a>
|
|
373
|
-
<a name='L308'></a><a href='#L308'>308</a>
|
|
374
|
-
<a name='L309'></a><a href='#L309'>309</a>
|
|
375
|
-
<a name='L310'></a><a href='#L310'>310</a>
|
|
376
|
-
<a name='L311'></a><a href='#L311'>311</a>
|
|
377
|
-
<a name='L312'></a><a href='#L312'>312</a>
|
|
378
|
-
<a name='L313'></a><a href='#L313'>313</a>
|
|
379
|
-
<a name='L314'></a><a href='#L314'>314</a>
|
|
380
|
-
<a name='L315'></a><a href='#L315'>315</a>
|
|
381
|
-
<a name='L316'></a><a href='#L316'>316</a></td><td class="line-coverage quiet"><span class="cline-any cline-no"> </span>
|
|
382
|
-
<span class="cline-any cline-neutral"> </span>
|
|
383
|
-
<span class="cline-any cline-neutral"> </span>
|
|
384
|
-
<span class="cline-any cline-neutral"> </span>
|
|
385
|
-
<span class="cline-any cline-neutral"> </span>
|
|
386
|
-
<span class="cline-any cline-neutral"> </span>
|
|
387
|
-
<span class="cline-any cline-neutral"> </span>
|
|
388
|
-
<span class="cline-any cline-neutral"> </span>
|
|
389
|
-
<span class="cline-any cline-neutral"> </span>
|
|
390
|
-
<span class="cline-any cline-neutral"> </span>
|
|
391
|
-
<span class="cline-any cline-neutral"> </span>
|
|
392
|
-
<span class="cline-any cline-neutral"> </span>
|
|
393
|
-
<span class="cline-any cline-neutral"> </span>
|
|
394
|
-
<span class="cline-any cline-neutral"> </span>
|
|
395
|
-
<span class="cline-any cline-neutral"> </span>
|
|
396
|
-
<span class="cline-any cline-neutral"> </span>
|
|
397
|
-
<span class="cline-any cline-neutral"> </span>
|
|
398
|
-
<span class="cline-any cline-neutral"> </span>
|
|
399
|
-
<span class="cline-any cline-neutral"> </span>
|
|
400
|
-
<span class="cline-any cline-neutral"> </span>
|
|
401
|
-
<span class="cline-any cline-neutral"> </span>
|
|
402
|
-
<span class="cline-any cline-neutral"> </span>
|
|
403
|
-
<span class="cline-any cline-neutral"> </span>
|
|
404
|
-
<span class="cline-any cline-neutral"> </span>
|
|
405
|
-
<span class="cline-any cline-neutral"> </span>
|
|
406
|
-
<span class="cline-any cline-neutral"> </span>
|
|
407
|
-
<span class="cline-any cline-neutral"> </span>
|
|
408
|
-
<span class="cline-any cline-neutral"> </span>
|
|
409
|
-
<span class="cline-any cline-neutral"> </span>
|
|
410
|
-
<span class="cline-any cline-neutral"> </span>
|
|
411
|
-
<span class="cline-any cline-neutral"> </span>
|
|
412
|
-
<span class="cline-any cline-neutral"> </span>
|
|
413
|
-
<span class="cline-any cline-neutral"> </span>
|
|
414
|
-
<span class="cline-any cline-neutral"> </span>
|
|
415
|
-
<span class="cline-any cline-neutral"> </span>
|
|
416
|
-
<span class="cline-any cline-neutral"> </span>
|
|
417
|
-
<span class="cline-any cline-neutral"> </span>
|
|
418
|
-
<span class="cline-any cline-no"> </span>
|
|
419
|
-
<span class="cline-any cline-no"> </span>
|
|
420
|
-
<span class="cline-any cline-no"> </span>
|
|
421
|
-
<span class="cline-any cline-no"> </span>
|
|
422
|
-
<span class="cline-any cline-no"> </span>
|
|
423
|
-
<span class="cline-any cline-no"> </span>
|
|
424
|
-
<span class="cline-any cline-no"> </span>
|
|
425
|
-
<span class="cline-any cline-no"> </span>
|
|
426
|
-
<span class="cline-any cline-no"> </span>
|
|
427
|
-
<span class="cline-any cline-no"> </span>
|
|
428
|
-
<span class="cline-any cline-no"> </span>
|
|
429
|
-
<span class="cline-any cline-no"> </span>
|
|
430
|
-
<span class="cline-any cline-no"> </span>
|
|
431
|
-
<span class="cline-any cline-no"> </span>
|
|
432
|
-
<span class="cline-any cline-no"> </span>
|
|
433
|
-
<span class="cline-any cline-neutral"> </span>
|
|
434
|
-
<span class="cline-any cline-no"> </span>
|
|
435
|
-
<span class="cline-any cline-no"> </span>
|
|
436
|
-
<span class="cline-any cline-no"> </span>
|
|
437
|
-
<span class="cline-any cline-neutral"> </span>
|
|
438
|
-
<span class="cline-any cline-neutral"> </span>
|
|
439
|
-
<span class="cline-any cline-no"> </span>
|
|
440
|
-
<span class="cline-any cline-no"> </span>
|
|
441
|
-
<span class="cline-any cline-no"> </span>
|
|
442
|
-
<span class="cline-any cline-neutral"> </span>
|
|
443
|
-
<span class="cline-any cline-no"> </span>
|
|
444
|
-
<span class="cline-any cline-no"> </span>
|
|
445
|
-
<span class="cline-any cline-no"> </span>
|
|
446
|
-
<span class="cline-any cline-no"> </span>
|
|
447
|
-
<span class="cline-any cline-no"> </span>
|
|
448
|
-
<span class="cline-any cline-no"> </span>
|
|
449
|
-
<span class="cline-any cline-no"> </span>
|
|
450
|
-
<span class="cline-any cline-neutral"> </span>
|
|
451
|
-
<span class="cline-any cline-no"> </span>
|
|
452
|
-
<span class="cline-any cline-no"> </span>
|
|
453
|
-
<span class="cline-any cline-no"> </span>
|
|
454
|
-
<span class="cline-any cline-no"> </span>
|
|
455
|
-
<span class="cline-any cline-no"> </span>
|
|
456
|
-
<span class="cline-any cline-no"> </span>
|
|
457
|
-
<span class="cline-any cline-neutral"> </span>
|
|
458
|
-
<span class="cline-any cline-no"> </span>
|
|
459
|
-
<span class="cline-any cline-no"> </span>
|
|
460
|
-
<span class="cline-any cline-no"> </span>
|
|
461
|
-
<span class="cline-any cline-neutral"> </span>
|
|
462
|
-
<span class="cline-any cline-neutral"> </span>
|
|
463
|
-
<span class="cline-any cline-no"> </span>
|
|
464
|
-
<span class="cline-any cline-no"> </span>
|
|
465
|
-
<span class="cline-any cline-no"> </span>
|
|
466
|
-
<span class="cline-any cline-neutral"> </span>
|
|
467
|
-
<span class="cline-any cline-no"> </span>
|
|
468
|
-
<span class="cline-any cline-neutral"> </span>
|
|
469
|
-
<span class="cline-any cline-no"> </span>
|
|
470
|
-
<span class="cline-any cline-neutral"> </span>
|
|
471
|
-
<span class="cline-any cline-neutral"> </span>
|
|
472
|
-
<span class="cline-any cline-no"> </span>
|
|
473
|
-
<span class="cline-any cline-no"> </span>
|
|
474
|
-
<span class="cline-any cline-no"> </span>
|
|
475
|
-
<span class="cline-any cline-no"> </span>
|
|
476
|
-
<span class="cline-any cline-no"> </span>
|
|
477
|
-
<span class="cline-any cline-no"> </span>
|
|
478
|
-
<span class="cline-any cline-no"> </span>
|
|
479
|
-
<span class="cline-any cline-neutral"> </span>
|
|
480
|
-
<span class="cline-any cline-no"> </span>
|
|
481
|
-
<span class="cline-any cline-no"> </span>
|
|
482
|
-
<span class="cline-any cline-no"> </span>
|
|
483
|
-
<span class="cline-any cline-no"> </span>
|
|
484
|
-
<span class="cline-any cline-no"> </span>
|
|
485
|
-
<span class="cline-any cline-neutral"> </span>
|
|
486
|
-
<span class="cline-any cline-neutral"> </span>
|
|
487
|
-
<span class="cline-any cline-no"> </span>
|
|
488
|
-
<span class="cline-any cline-no"> </span>
|
|
489
|
-
<span class="cline-any cline-no"> </span>
|
|
490
|
-
<span class="cline-any cline-no"> </span>
|
|
491
|
-
<span class="cline-any cline-no"> </span>
|
|
492
|
-
<span class="cline-any cline-no"> </span>
|
|
493
|
-
<span class="cline-any cline-neutral"> </span>
|
|
494
|
-
<span class="cline-any cline-no"> </span>
|
|
495
|
-
<span class="cline-any cline-no"> </span>
|
|
496
|
-
<span class="cline-any cline-neutral"> </span>
|
|
497
|
-
<span class="cline-any cline-no"> </span>
|
|
498
|
-
<span class="cline-any cline-neutral"> </span>
|
|
499
|
-
<span class="cline-any cline-neutral"> </span>
|
|
500
|
-
<span class="cline-any cline-no"> </span>
|
|
501
|
-
<span class="cline-any cline-no"> </span>
|
|
502
|
-
<span class="cline-any cline-no"> </span>
|
|
503
|
-
<span class="cline-any cline-no"> </span>
|
|
504
|
-
<span class="cline-any cline-no"> </span>
|
|
505
|
-
<span class="cline-any cline-no"> </span>
|
|
506
|
-
<span class="cline-any cline-neutral"> </span>
|
|
507
|
-
<span class="cline-any cline-no"> </span>
|
|
508
|
-
<span class="cline-any cline-neutral"> </span>
|
|
509
|
-
<span class="cline-any cline-neutral"> </span>
|
|
510
|
-
<span class="cline-any cline-no"> </span>
|
|
511
|
-
<span class="cline-any cline-no"> </span>
|
|
512
|
-
<span class="cline-any cline-no"> </span>
|
|
513
|
-
<span class="cline-any cline-no"> </span>
|
|
514
|
-
<span class="cline-any cline-no"> </span>
|
|
515
|
-
<span class="cline-any cline-no"> </span>
|
|
516
|
-
<span class="cline-any cline-no"> </span>
|
|
517
|
-
<span class="cline-any cline-no"> </span>
|
|
518
|
-
<span class="cline-any cline-no"> </span>
|
|
519
|
-
<span class="cline-any cline-no"> </span>
|
|
520
|
-
<span class="cline-any cline-no"> </span>
|
|
521
|
-
<span class="cline-any cline-no"> </span>
|
|
522
|
-
<span class="cline-any cline-no"> </span>
|
|
523
|
-
<span class="cline-any cline-no"> </span>
|
|
524
|
-
<span class="cline-any cline-neutral"> </span>
|
|
525
|
-
<span class="cline-any cline-no"> </span>
|
|
526
|
-
<span class="cline-any cline-neutral"> </span>
|
|
527
|
-
<span class="cline-any cline-neutral"> </span>
|
|
528
|
-
<span class="cline-any cline-no"> </span>
|
|
529
|
-
<span class="cline-any cline-no"> </span>
|
|
530
|
-
<span class="cline-any cline-no"> </span>
|
|
531
|
-
<span class="cline-any cline-no"> </span>
|
|
532
|
-
<span class="cline-any cline-no"> </span>
|
|
533
|
-
<span class="cline-any cline-no"> </span>
|
|
534
|
-
<span class="cline-any cline-no"> </span>
|
|
535
|
-
<span class="cline-any cline-no"> </span>
|
|
536
|
-
<span class="cline-any cline-no"> </span>
|
|
537
|
-
<span class="cline-any cline-no"> </span>
|
|
538
|
-
<span class="cline-any cline-no"> </span>
|
|
539
|
-
<span class="cline-any cline-no"> </span>
|
|
540
|
-
<span class="cline-any cline-no"> </span>
|
|
541
|
-
<span class="cline-any cline-no"> </span>
|
|
542
|
-
<span class="cline-any cline-neutral"> </span>
|
|
543
|
-
<span class="cline-any cline-no"> </span>
|
|
544
|
-
<span class="cline-any cline-neutral"> </span>
|
|
545
|
-
<span class="cline-any cline-neutral"> </span>
|
|
546
|
-
<span class="cline-any cline-no"> </span>
|
|
547
|
-
<span class="cline-any cline-neutral"> </span>
|
|
548
|
-
<span class="cline-any cline-no"> </span>
|
|
549
|
-
<span class="cline-any cline-neutral"> </span>
|
|
550
|
-
<span class="cline-any cline-neutral"> </span>
|
|
551
|
-
<span class="cline-any cline-no"> </span>
|
|
552
|
-
<span class="cline-any cline-no"> </span>
|
|
553
|
-
<span class="cline-any cline-no"> </span>
|
|
554
|
-
<span class="cline-any cline-no"> </span>
|
|
555
|
-
<span class="cline-any cline-no"> </span>
|
|
556
|
-
<span class="cline-any cline-no"> </span>
|
|
557
|
-
<span class="cline-any cline-no"> </span>
|
|
558
|
-
<span class="cline-any cline-no"> </span>
|
|
559
|
-
<span class="cline-any cline-no"> </span>
|
|
560
|
-
<span class="cline-any cline-no"> </span>
|
|
561
|
-
<span class="cline-any cline-no"> </span>
|
|
562
|
-
<span class="cline-any cline-no"> </span>
|
|
563
|
-
<span class="cline-any cline-no"> </span>
|
|
564
|
-
<span class="cline-any cline-no"> </span>
|
|
565
|
-
<span class="cline-any cline-no"> </span>
|
|
566
|
-
<span class="cline-any cline-no"> </span>
|
|
567
|
-
<span class="cline-any cline-no"> </span>
|
|
568
|
-
<span class="cline-any cline-no"> </span>
|
|
569
|
-
<span class="cline-any cline-no"> </span>
|
|
570
|
-
<span class="cline-any cline-no"> </span>
|
|
571
|
-
<span class="cline-any cline-no"> </span>
|
|
572
|
-
<span class="cline-any cline-no"> </span>
|
|
573
|
-
<span class="cline-any cline-no"> </span>
|
|
574
|
-
<span class="cline-any cline-no"> </span>
|
|
575
|
-
<span class="cline-any cline-neutral"> </span>
|
|
576
|
-
<span class="cline-any cline-no"> </span>
|
|
577
|
-
<span class="cline-any cline-neutral"> </span>
|
|
578
|
-
<span class="cline-any cline-neutral"> </span>
|
|
579
|
-
<span class="cline-any cline-no"> </span>
|
|
580
|
-
<span class="cline-any cline-no"> </span>
|
|
581
|
-
<span class="cline-any cline-no"> </span>
|
|
582
|
-
<span class="cline-any cline-no"> </span>
|
|
583
|
-
<span class="cline-any cline-neutral"> </span>
|
|
584
|
-
<span class="cline-any cline-no"> </span>
|
|
585
|
-
<span class="cline-any cline-no"> </span>
|
|
586
|
-
<span class="cline-any cline-no"> </span>
|
|
587
|
-
<span class="cline-any cline-no"> </span>
|
|
588
|
-
<span class="cline-any cline-no"> </span>
|
|
589
|
-
<span class="cline-any cline-no"> </span>
|
|
590
|
-
<span class="cline-any cline-neutral"> </span>
|
|
591
|
-
<span class="cline-any cline-no"> </span>
|
|
592
|
-
<span class="cline-any cline-neutral"> </span>
|
|
593
|
-
<span class="cline-any cline-neutral"> </span>
|
|
594
|
-
<span class="cline-any cline-no"> </span>
|
|
595
|
-
<span class="cline-any cline-no"> </span>
|
|
596
|
-
<span class="cline-any cline-no"> </span>
|
|
597
|
-
<span class="cline-any cline-no"> </span>
|
|
598
|
-
<span class="cline-any cline-no"> </span>
|
|
599
|
-
<span class="cline-any cline-no"> </span>
|
|
600
|
-
<span class="cline-any cline-no"> </span>
|
|
601
|
-
<span class="cline-any cline-neutral"> </span>
|
|
602
|
-
<span class="cline-any cline-neutral"> </span>
|
|
603
|
-
<span class="cline-any cline-neutral"> </span>
|
|
604
|
-
<span class="cline-any cline-no"> </span>
|
|
605
|
-
<span class="cline-any cline-no"> </span>
|
|
606
|
-
<span class="cline-any cline-no"> </span>
|
|
607
|
-
<span class="cline-any cline-no"> </span>
|
|
608
|
-
<span class="cline-any cline-no"> </span>
|
|
609
|
-
<span class="cline-any cline-no"> </span>
|
|
610
|
-
<span class="cline-any cline-no"> </span>
|
|
611
|
-
<span class="cline-any cline-no"> </span>
|
|
612
|
-
<span class="cline-any cline-no"> </span>
|
|
613
|
-
<span class="cline-any cline-neutral"> </span>
|
|
614
|
-
<span class="cline-any cline-no"> </span>
|
|
615
|
-
<span class="cline-any cline-no"> </span>
|
|
616
|
-
<span class="cline-any cline-neutral"> </span>
|
|
617
|
-
<span class="cline-any cline-no"> </span>
|
|
618
|
-
<span class="cline-any cline-neutral"> </span>
|
|
619
|
-
<span class="cline-any cline-no"> </span>
|
|
620
|
-
<span class="cline-any cline-no"> </span>
|
|
621
|
-
<span class="cline-any cline-neutral"> </span>
|
|
622
|
-
<span class="cline-any cline-neutral"> </span>
|
|
623
|
-
<span class="cline-any cline-neutral"> </span>
|
|
624
|
-
<span class="cline-any cline-no"> </span>
|
|
625
|
-
<span class="cline-any cline-no"> </span>
|
|
626
|
-
<span class="cline-any cline-no"> </span>
|
|
627
|
-
<span class="cline-any cline-no"> </span>
|
|
628
|
-
<span class="cline-any cline-no"> </span>
|
|
629
|
-
<span class="cline-any cline-no"> </span>
|
|
630
|
-
<span class="cline-any cline-no"> </span>
|
|
631
|
-
<span class="cline-any cline-neutral"> </span>
|
|
632
|
-
<span class="cline-any cline-neutral"> </span>
|
|
633
|
-
<span class="cline-any cline-no"> </span>
|
|
634
|
-
<span class="cline-any cline-neutral"> </span>
|
|
635
|
-
<span class="cline-any cline-neutral"> </span>
|
|
636
|
-
<span class="cline-any cline-no"> </span>
|
|
637
|
-
<span class="cline-any cline-no"> </span>
|
|
638
|
-
<span class="cline-any cline-no"> </span>
|
|
639
|
-
<span class="cline-any cline-no"> </span>
|
|
640
|
-
<span class="cline-any cline-neutral"> </span>
|
|
641
|
-
<span class="cline-any cline-no"> </span>
|
|
642
|
-
<span class="cline-any cline-no"> </span>
|
|
643
|
-
<span class="cline-any cline-neutral"> </span>
|
|
644
|
-
<span class="cline-any cline-neutral"> </span>
|
|
645
|
-
<span class="cline-any cline-no"> </span>
|
|
646
|
-
<span class="cline-any cline-no"> </span>
|
|
647
|
-
<span class="cline-any cline-no"> </span>
|
|
648
|
-
<span class="cline-any cline-no"> </span>
|
|
649
|
-
<span class="cline-any cline-no"> </span>
|
|
650
|
-
<span class="cline-any cline-neutral"> </span>
|
|
651
|
-
<span class="cline-any cline-no"> </span>
|
|
652
|
-
<span class="cline-any cline-neutral"> </span>
|
|
653
|
-
<span class="cline-any cline-neutral"> </span>
|
|
654
|
-
<span class="cline-any cline-neutral"> </span>
|
|
655
|
-
<span class="cline-any cline-neutral"> </span>
|
|
656
|
-
<span class="cline-any cline-neutral"> </span>
|
|
657
|
-
<span class="cline-any cline-neutral"> </span>
|
|
658
|
-
<span class="cline-any cline-neutral"> </span>
|
|
659
|
-
<span class="cline-any cline-neutral"> </span>
|
|
660
|
-
<span class="cline-any cline-neutral"> </span>
|
|
661
|
-
<span class="cline-any cline-neutral"> </span>
|
|
662
|
-
<span class="cline-any cline-no"> </span>
|
|
663
|
-
<span class="cline-any cline-no"> </span>
|
|
664
|
-
<span class="cline-any cline-no"> </span>
|
|
665
|
-
<span class="cline-any cline-no"> </span>
|
|
666
|
-
<span class="cline-any cline-no"> </span>
|
|
667
|
-
<span class="cline-any cline-no"> </span>
|
|
668
|
-
<span class="cline-any cline-no"> </span>
|
|
669
|
-
<span class="cline-any cline-no"> </span>
|
|
670
|
-
<span class="cline-any cline-no"> </span>
|
|
671
|
-
<span class="cline-any cline-no"> </span>
|
|
672
|
-
<span class="cline-any cline-no"> </span>
|
|
673
|
-
<span class="cline-any cline-no"> </span>
|
|
674
|
-
<span class="cline-any cline-no"> </span>
|
|
675
|
-
<span class="cline-any cline-neutral"> </span>
|
|
676
|
-
<span class="cline-any cline-no"> </span>
|
|
677
|
-
<span class="cline-any cline-no"> </span>
|
|
678
|
-
<span class="cline-any cline-no"> </span>
|
|
679
|
-
<span class="cline-any cline-no"> </span>
|
|
680
|
-
<span class="cline-any cline-no"> </span>
|
|
681
|
-
<span class="cline-any cline-no"> </span>
|
|
682
|
-
<span class="cline-any cline-neutral"> </span>
|
|
683
|
-
<span class="cline-any cline-no"> </span>
|
|
684
|
-
<span class="cline-any cline-neutral"> </span>
|
|
685
|
-
<span class="cline-any cline-no"> </span>
|
|
686
|
-
<span class="cline-any cline-no"> </span>
|
|
687
|
-
<span class="cline-any cline-no"> </span>
|
|
688
|
-
<span class="cline-any cline-no"> </span>
|
|
689
|
-
<span class="cline-any cline-no"> </span>
|
|
690
|
-
<span class="cline-any cline-neutral"> </span>
|
|
691
|
-
<span class="cline-any cline-no"> </span>
|
|
692
|
-
<span class="cline-any cline-neutral"> </span>
|
|
693
|
-
<span class="cline-any cline-no"> </span>
|
|
694
|
-
<span class="cline-any cline-no"> </span>
|
|
695
|
-
<span class="cline-any cline-no"> </span>
|
|
696
|
-
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" >import { useState, useEffect, useRef, useCallback } from 'react';</span></span></span>
|
|
697
|
-
import {
|
|
698
|
-
Plus,
|
|
699
|
-
Play,
|
|
700
|
-
Pause,
|
|
701
|
-
Layout,
|
|
702
|
-
ZoomIn,
|
|
703
|
-
ZoomOut,
|
|
704
|
-
Maximize,
|
|
705
|
-
Save,
|
|
706
|
-
Undo,
|
|
707
|
-
Redo,
|
|
708
|
-
Copy,
|
|
709
|
-
Trash2,
|
|
710
|
-
Bot,
|
|
711
|
-
ChevronDown,
|
|
712
|
-
CheckCircle,
|
|
713
|
-
GripVertical,
|
|
714
|
-
X,
|
|
715
|
-
} from 'lucide-react';
|
|
716
|
-
import { useCanvas } from '../../hooks/useCanvas';
|
|
717
|
-
import { useEditorStore } from '../../stores/editorStore';
|
|
718
|
-
import { useReactFlow } from '@xyflow/react';
|
|
719
|
-
import { getModKey } from '../../utils/platform';
|
|
720
|
-
import { useAgentStore } from '../../stores/agentStore';
|
|
721
|
-
import { ProviderSwitcher } from '../Settings/ProviderSwitcher';
|
|
722
|
-
import { AlignmentTools } from './AlignmentTools';
|
|
723
|
-
import { useLayoutStore } from '../../stores/layoutStore';
|
|
724
|
-
|
|
725
|
-
interface ToolbarProps {
|
|
726
|
-
onAddStep: () => void;
|
|
727
|
-
onExecute?: () => void;
|
|
728
|
-
onSave?: () => void;
|
|
729
|
-
onValidate?: () => void;
|
|
730
|
-
isExecuting?: boolean;
|
|
731
|
-
}
|
|
732
|
-
|
|
733
|
-
<span class="cstat-no" title="statement not covered" >export function Toolbar({</span>
|
|
734
|
-
<span class="cstat-no" title="statement not covered" > onAddStep,</span>
|
|
735
|
-
<span class="cstat-no" title="statement not covered" > onExecute,</span>
|
|
736
|
-
<span class="cstat-no" title="statement not covered" > onSave,</span>
|
|
737
|
-
<span class="cstat-no" title="statement not covered" > onValidate,</span>
|
|
738
|
-
<span class="cstat-no" title="statement not covered" > isExecuting = false,</span>
|
|
739
|
-
<span class="cstat-no" title="statement not covered" >}: ToolbarProps) {</span>
|
|
740
|
-
<span class="cstat-no" title="statement not covered" > const { autoLayout, fitView, selectedNodes, deleteSelected, duplicateSelected } =</span>
|
|
741
|
-
<span class="cstat-no" title="statement not covered" > useCanvas();</span>
|
|
742
|
-
<span class="cstat-no" title="statement not covered" > const { undo, redo, undoStack, redoStack } = useEditorStore();</span>
|
|
743
|
-
<span class="cstat-no" title="statement not covered" > const { zoomIn, zoomOut } = useReactFlow();</span>
|
|
744
|
-
<span class="cstat-no" title="statement not covered" > const modKey = getModKey();</span>
|
|
745
|
-
<span class="cstat-no" title="statement not covered" > const { providers, activeProviderId, loadProviders } = useAgentStore();</span>
|
|
746
|
-
<span class="cstat-no" title="statement not covered" > const [showProviderSwitcher, setShowProviderSwitcher] = useState(false);</span>
|
|
747
|
-
<span class="cstat-no" title="statement not covered" > const { toolbarVisible, toolbarPosition, setToolbarPosition, setToolbarVisible } = useLayoutStore();</span>
|
|
748
|
-
|
|
749
|
-
<span class="cstat-no" title="statement not covered" > const canUndo = undoStack.length > 0;</span>
|
|
750
|
-
<span class="cstat-no" title="statement not covered" > const canRedo = redoStack.length > 0;</span>
|
|
751
|
-
<span class="cstat-no" title="statement not covered" > const hasSelection = selectedNodes.length > 0;</span>
|
|
752
|
-
|
|
753
|
-
// Drag state
|
|
754
|
-
<span class="cstat-no" title="statement not covered" > const toolbarRef = useRef<HTMLDivElement>(null);</span>
|
|
755
|
-
<span class="cstat-no" title="statement not covered" > const isDragging = useRef(false);</span>
|
|
756
|
-
<span class="cstat-no" title="statement not covered" > const dragOffset = useRef({ x: 0, y: 0 });</span>
|
|
757
|
-
|
|
758
|
-
<span class="cstat-no" title="statement not covered" > const handlePointerDown = useCallback((e: React.PointerEvent) => {</span>
|
|
759
|
-
<span class="cstat-no" title="statement not covered" > if (!toolbarRef.current) return;</span>
|
|
760
|
-
<span class="cstat-no" title="statement not covered" > isDragging.current = true;</span>
|
|
761
|
-
<span class="cstat-no" title="statement not covered" > const rect = toolbarRef.current.getBoundingClientRect();</span>
|
|
762
|
-
<span class="cstat-no" title="statement not covered" > dragOffset.current = { x: e.clientX - rect.left, y: e.clientY - rect.top };</span>
|
|
763
|
-
<span class="cstat-no" title="statement not covered" > (e.target as HTMLElement).setPointerCapture(e.pointerId);</span>
|
|
764
|
-
<span class="cstat-no" title="statement not covered" > }, []);</span>
|
|
765
|
-
|
|
766
|
-
<span class="cstat-no" title="statement not covered" > const handlePointerMove = useCallback((e: React.PointerEvent) => {</span>
|
|
767
|
-
<span class="cstat-no" title="statement not covered" > if (!isDragging.current) return;</span>
|
|
768
|
-
<span class="cstat-no" title="statement not covered" > const x = e.clientX - dragOffset.current.x;</span>
|
|
769
|
-
<span class="cstat-no" title="statement not covered" > const y = e.clientY - dragOffset.current.y;</span>
|
|
770
|
-
<span class="cstat-no" title="statement not covered" > setToolbarPosition({ x, y });</span>
|
|
771
|
-
<span class="cstat-no" title="statement not covered" > }, [setToolbarPosition]);</span>
|
|
772
|
-
|
|
773
|
-
<span class="cstat-no" title="statement not covered" > const handlePointerUp = useCallback(() => {</span>
|
|
774
|
-
<span class="cstat-no" title="statement not covered" > isDragging.current = false;</span>
|
|
775
|
-
<span class="cstat-no" title="statement not covered" > }, []);</span>
|
|
776
|
-
|
|
777
|
-
// Load providers on mount
|
|
778
|
-
<span class="cstat-no" title="statement not covered" > useEffect(() => {</span>
|
|
779
|
-
<span class="cstat-no" title="statement not covered" > loadProviders();</span>
|
|
780
|
-
<span class="cstat-no" title="statement not covered" > }, [loadProviders]);</span>
|
|
781
|
-
|
|
782
|
-
<span class="cstat-no" title="statement not covered" > const activeProvider = providers.find((p) => p.id === activeProviderId);</span>
|
|
783
|
-
|
|
784
|
-
<span class="cstat-no" title="statement not covered" > if (!toolbarVisible) return null;</span>
|
|
785
|
-
|
|
786
|
-
// Determine positioning style
|
|
787
|
-
<span class="cstat-no" title="statement not covered" > const isDefaultPosition = toolbarPosition.x === 0 && toolbarPosition.y === 0;</span>
|
|
788
|
-
<span class="cstat-no" title="statement not covered" > const positionStyle: React.CSSProperties = isDefaultPosition</span>
|
|
789
|
-
<span class="cstat-no" title="statement not covered" > ? {}</span>
|
|
790
|
-
<span class="cstat-no" title="statement not covered" > : { left: toolbarPosition.x, top: toolbarPosition.y, transform: 'none' };</span>
|
|
791
|
-
<span class="cstat-no" title="statement not covered" > const positionClass = isDefaultPosition</span>
|
|
792
|
-
<span class="cstat-no" title="statement not covered" > ? 'absolute top-4 left-1/2 -translate-x-1/2'</span>
|
|
793
|
-
<span class="cstat-no" title="statement not covered" > : 'fixed';</span>
|
|
794
|
-
|
|
795
|
-
<span class="cstat-no" title="statement not covered" > return (</span>
|
|
796
|
-
<span class="cstat-no" title="statement not covered" > <div</span>
|
|
797
|
-
<span class="cstat-no" title="statement not covered" > ref={toolbarRef}</span>
|
|
798
|
-
<span class="cstat-no" title="statement not covered" > className={`${positionClass} z-10 flex items-center gap-1 px-2 py-1.5 bg-bg-panel/95 backdrop-blur border border-border-default rounded-lg shadow-lg`}</span>
|
|
799
|
-
<span class="cstat-no" title="statement not covered" > style={positionStyle}</span>
|
|
800
|
-
>
|
|
801
|
-
{/* Drag Handle */}
|
|
802
|
-
<span class="cstat-no" title="statement not covered" > <div</span>
|
|
803
|
-
<span class="cstat-no" title="statement not covered" > onPointerDown={handlePointerDown}</span>
|
|
804
|
-
<span class="cstat-no" title="statement not covered" > onPointerMove={handlePointerMove}</span>
|
|
805
|
-
<span class="cstat-no" title="statement not covered" > onPointerUp={handlePointerUp}</span>
|
|
806
|
-
<span class="cstat-no" title="statement not covered" > className="cursor-grab active:cursor-grabbing p-1 rounded hover:bg-bg-hover text-text-muted"</span>
|
|
807
|
-
<span class="cstat-no" title="statement not covered" > title="Drag to reposition"</span>
|
|
808
|
-
>
|
|
809
|
-
<span class="cstat-no" title="statement not covered" > <GripVertical className="w-4 h-4" /></span>
|
|
810
|
-
<span class="cstat-no" title="statement not covered" > </div></span>
|
|
811
|
-
|
|
812
|
-
<span class="cstat-no" title="statement not covered" > <ToolbarDivider /></span>
|
|
813
|
-
|
|
814
|
-
{/* Add Step */}
|
|
815
|
-
<span class="cstat-no" title="statement not covered" > <ToolbarButton</span>
|
|
816
|
-
<span class="cstat-no" title="statement not covered" > icon={<Plus className="w-4 h-4" />}</span>
|
|
817
|
-
<span class="cstat-no" title="statement not covered" > label="Add Step"</span>
|
|
818
|
-
<span class="cstat-no" title="statement not covered" > onClick={onAddStep}</span>
|
|
819
|
-
<span class="cstat-no" title="statement not covered" > shortcut="N"</span>
|
|
820
|
-
<span class="cstat-no" title="statement not covered" > /></span>
|
|
821
|
-
|
|
822
|
-
<span class="cstat-no" title="statement not covered" > <ToolbarDivider /></span>
|
|
823
|
-
|
|
824
|
-
{/* Undo/Redo */}
|
|
825
|
-
<span class="cstat-no" title="statement not covered" > <ToolbarButton</span>
|
|
826
|
-
<span class="cstat-no" title="statement not covered" > icon={<Undo className="w-4 h-4" />}</span>
|
|
827
|
-
<span class="cstat-no" title="statement not covered" > label="Undo"</span>
|
|
828
|
-
<span class="cstat-no" title="statement not covered" > onClick={() => undo()}</span>
|
|
829
|
-
<span class="cstat-no" title="statement not covered" > disabled={!canUndo}</span>
|
|
830
|
-
<span class="cstat-no" title="statement not covered" > shortcut={`${modKey}Z`}</span>
|
|
831
|
-
<span class="cstat-no" title="statement not covered" > /></span>
|
|
832
|
-
<span class="cstat-no" title="statement not covered" > <ToolbarButton</span>
|
|
833
|
-
<span class="cstat-no" title="statement not covered" > icon={<Redo className="w-4 h-4" />}</span>
|
|
834
|
-
<span class="cstat-no" title="statement not covered" > label="Redo"</span>
|
|
835
|
-
<span class="cstat-no" title="statement not covered" > onClick={() => redo()}</span>
|
|
836
|
-
<span class="cstat-no" title="statement not covered" > disabled={!canRedo}</span>
|
|
837
|
-
<span class="cstat-no" title="statement not covered" > shortcut={`${modKey}⇧Z`}</span>
|
|
838
|
-
<span class="cstat-no" title="statement not covered" > /></span>
|
|
839
|
-
|
|
840
|
-
<span class="cstat-no" title="statement not covered" > <ToolbarDivider /></span>
|
|
841
|
-
|
|
842
|
-
{/* Selection actions */}
|
|
843
|
-
<span class="cstat-no" title="statement not covered" > <ToolbarButton</span>
|
|
844
|
-
<span class="cstat-no" title="statement not covered" > icon={<Copy className="w-4 h-4" />}</span>
|
|
845
|
-
<span class="cstat-no" title="statement not covered" > label="Duplicate"</span>
|
|
846
|
-
<span class="cstat-no" title="statement not covered" > onClick={duplicateSelected}</span>
|
|
847
|
-
<span class="cstat-no" title="statement not covered" > disabled={!hasSelection}</span>
|
|
848
|
-
<span class="cstat-no" title="statement not covered" > shortcut={`${modKey}D`}</span>
|
|
849
|
-
<span class="cstat-no" title="statement not covered" > /></span>
|
|
850
|
-
<span class="cstat-no" title="statement not covered" > <ToolbarButton</span>
|
|
851
|
-
<span class="cstat-no" title="statement not covered" > icon={<Trash2 className="w-4 h-4" />}</span>
|
|
852
|
-
<span class="cstat-no" title="statement not covered" > label="Delete"</span>
|
|
853
|
-
<span class="cstat-no" title="statement not covered" > onClick={deleteSelected}</span>
|
|
854
|
-
<span class="cstat-no" title="statement not covered" > disabled={!hasSelection}</span>
|
|
855
|
-
<span class="cstat-no" title="statement not covered" > shortcut="⌫"</span>
|
|
856
|
-
<span class="cstat-no" title="statement not covered" > /></span>
|
|
857
|
-
|
|
858
|
-
<span class="cstat-no" title="statement not covered" > <ToolbarDivider /></span>
|
|
859
|
-
|
|
860
|
-
{/* Alignment Tools */}
|
|
861
|
-
<span class="cstat-no" title="statement not covered" > <AlignmentTools /></span>
|
|
862
|
-
|
|
863
|
-
<span class="cstat-no" title="statement not covered" > <ToolbarDivider /></span>
|
|
864
|
-
|
|
865
|
-
{/* Layout & Zoom */}
|
|
866
|
-
<span class="cstat-no" title="statement not covered" > <ToolbarButton</span>
|
|
867
|
-
<span class="cstat-no" title="statement not covered" > icon={<Layout className="w-4 h-4" />}</span>
|
|
868
|
-
<span class="cstat-no" title="statement not covered" > label="Auto Layout"</span>
|
|
869
|
-
<span class="cstat-no" title="statement not covered" > onClick={autoLayout}</span>
|
|
870
|
-
<span class="cstat-no" title="statement not covered" > shortcut={`${modKey}L`}</span>
|
|
871
|
-
<span class="cstat-no" title="statement not covered" > /></span>
|
|
872
|
-
<span class="cstat-no" title="statement not covered" > <ToolbarButton</span>
|
|
873
|
-
<span class="cstat-no" title="statement not covered" > icon={<ZoomIn className="w-4 h-4" />}</span>
|
|
874
|
-
<span class="cstat-no" title="statement not covered" > label="Zoom In"</span>
|
|
875
|
-
<span class="cstat-no" title="statement not covered" > onClick={() => zoomIn()}</span>
|
|
876
|
-
<span class="cstat-no" title="statement not covered" > shortcut={`${modKey}+`}</span>
|
|
877
|
-
<span class="cstat-no" title="statement not covered" > /></span>
|
|
878
|
-
<span class="cstat-no" title="statement not covered" > <ToolbarButton</span>
|
|
879
|
-
<span class="cstat-no" title="statement not covered" > icon={<ZoomOut className="w-4 h-4" />}</span>
|
|
880
|
-
<span class="cstat-no" title="statement not covered" > label="Zoom Out"</span>
|
|
881
|
-
<span class="cstat-no" title="statement not covered" > onClick={() => zoomOut()}</span>
|
|
882
|
-
<span class="cstat-no" title="statement not covered" > shortcut={`${modKey}-`}</span>
|
|
883
|
-
<span class="cstat-no" title="statement not covered" > /></span>
|
|
884
|
-
<span class="cstat-no" title="statement not covered" > <ToolbarButton</span>
|
|
885
|
-
<span class="cstat-no" title="statement not covered" > icon={<Maximize className="w-4 h-4" />}</span>
|
|
886
|
-
<span class="cstat-no" title="statement not covered" > label="Fit View"</span>
|
|
887
|
-
<span class="cstat-no" title="statement not covered" > onClick={fitView}</span>
|
|
888
|
-
<span class="cstat-no" title="statement not covered" > shortcut={`${modKey}0`}</span>
|
|
889
|
-
<span class="cstat-no" title="statement not covered" > /></span>
|
|
890
|
-
|
|
891
|
-
<span class="cstat-no" title="statement not covered" > <ToolbarDivider /></span>
|
|
892
|
-
|
|
893
|
-
{/* AI Provider */}
|
|
894
|
-
<span class="cstat-no" title="statement not covered" > <button</span>
|
|
895
|
-
<span class="cstat-no" title="statement not covered" > onClick={() => setShowProviderSwitcher(true)}</span>
|
|
896
|
-
<span class="cstat-no" title="statement not covered" > className="flex items-center gap-1.5 px-2 py-1.5 rounded text-sm text-text-secondary hover:text-text-primary hover:bg-bg-hover transition-colors"</span>
|
|
897
|
-
<span class="cstat-no" title="statement not covered" > title="Select AI Provider"</span>
|
|
898
|
-
>
|
|
899
|
-
<span class="cstat-no" title="statement not covered" > <Bot className="w-4 h-4" /></span>
|
|
900
|
-
<span class="cstat-no" title="statement not covered" > <span className="hidden sm:inline text-xs"></span>
|
|
901
|
-
<span class="cstat-no" title="statement not covered" > {activeProvider?.name || 'No Provider'}</span>
|
|
902
|
-
<span class="cstat-no" title="statement not covered" > </span></span>
|
|
903
|
-
<span class="cstat-no" title="statement not covered" > <ChevronDown className="w-3 h-3" /></span>
|
|
904
|
-
<span class="cstat-no" title="statement not covered" > </button></span>
|
|
905
|
-
|
|
906
|
-
<span class="cstat-no" title="statement not covered" > <ToolbarDivider /></span>
|
|
907
|
-
|
|
908
|
-
{/* Validate */}
|
|
909
|
-
<span class="cstat-no" title="statement not covered" > {onValidate && (</span>
|
|
910
|
-
<span class="cstat-no" title="statement not covered" > <ToolbarButton</span>
|
|
911
|
-
<span class="cstat-no" title="statement not covered" > icon={<CheckCircle className="w-4 h-4" />}</span>
|
|
912
|
-
<span class="cstat-no" title="statement not covered" > label="Validate"</span>
|
|
913
|
-
<span class="cstat-no" title="statement not covered" > onClick={onValidate}</span>
|
|
914
|
-
<span class="cstat-no" title="statement not covered" > shortcut={`${modKey}T`}</span>
|
|
915
|
-
<span class="cstat-no" title="statement not covered" > /></span>
|
|
916
|
-
)}
|
|
917
|
-
|
|
918
|
-
{/* Execute */}
|
|
919
|
-
<span class="cstat-no" title="statement not covered" > {onExecute && (</span>
|
|
920
|
-
<span class="cstat-no" title="statement not covered" > <button</span>
|
|
921
|
-
<span class="cstat-no" title="statement not covered" > onClick={() => onExecute()}</span>
|
|
922
|
-
<span class="cstat-no" title="statement not covered" > className={`flex items-center gap-2 px-3 py-1.5 rounded-lg text-sm font-medium transition-colors ${</span>
|
|
923
|
-
<span class="cstat-no" title="statement not covered" > isExecuting</span>
|
|
924
|
-
<span class="cstat-no" title="statement not covered" > ? 'bg-error hover:bg-error/90 text-text-inverse'</span>
|
|
925
|
-
<span class="cstat-no" title="statement not covered" > : 'bg-accent hover:bg-accent-hover text-text-inverse'</span>
|
|
926
|
-
<span class="cstat-no" title="statement not covered" > }`}</span>
|
|
927
|
-
<span class="cstat-no" title="statement not covered" > title={`${isExecuting ? 'Stop' : 'Execute'} (${modKey}⏎)`}</span>
|
|
928
|
-
>
|
|
929
|
-
<span class="cstat-no" title="statement not covered" > {isExecuting ? (</span>
|
|
930
|
-
<span class="cstat-no" title="statement not covered" > <Pause className="w-4 h-4" /></span>
|
|
931
|
-
) : (
|
|
932
|
-
<span class="cstat-no" title="statement not covered" > <Play className="w-4 h-4" /></span>
|
|
933
|
-
)}
|
|
934
|
-
<span class="cstat-no" title="statement not covered" > <span className="hidden sm:inline">{isExecuting ? 'Stop' : 'Execute'}</span></span>
|
|
935
|
-
<span class="cstat-no" title="statement not covered" > </button></span>
|
|
936
|
-
)}
|
|
937
|
-
|
|
938
|
-
{/* Save */}
|
|
939
|
-
<span class="cstat-no" title="statement not covered" > {onSave && (</span>
|
|
940
|
-
<span class="cstat-no" title="statement not covered" > <ToolbarButton</span>
|
|
941
|
-
<span class="cstat-no" title="statement not covered" > icon={<Save className="w-4 h-4" />}</span>
|
|
942
|
-
<span class="cstat-no" title="statement not covered" > label="Save"</span>
|
|
943
|
-
<span class="cstat-no" title="statement not covered" > onClick={onSave}</span>
|
|
944
|
-
<span class="cstat-no" title="statement not covered" > shortcut={`${modKey}S`}</span>
|
|
945
|
-
<span class="cstat-no" title="statement not covered" > /></span>
|
|
946
|
-
)}
|
|
947
|
-
|
|
948
|
-
<span class="cstat-no" title="statement not covered" > <ToolbarDivider /></span>
|
|
949
|
-
|
|
950
|
-
{/* Hide Toolbar */}
|
|
951
|
-
<span class="cstat-no" title="statement not covered" > <button</span>
|
|
952
|
-
<span class="cstat-no" title="statement not covered" > onClick={() => setToolbarVisible(false)}</span>
|
|
953
|
-
<span class="cstat-no" title="statement not covered" > className="p-1.5 rounded hover:bg-bg-hover text-text-muted hover:text-text-secondary transition-colors"</span>
|
|
954
|
-
<span class="cstat-no" title="statement not covered" > title="Hide toolbar"</span>
|
|
955
|
-
>
|
|
956
|
-
<span class="cstat-no" title="statement not covered" > <X className="w-3.5 h-3.5" /></span>
|
|
957
|
-
<span class="cstat-no" title="statement not covered" > </button></span>
|
|
958
|
-
|
|
959
|
-
{/* Provider Switcher Modal */}
|
|
960
|
-
<span class="cstat-no" title="statement not covered" > <ProviderSwitcher</span>
|
|
961
|
-
<span class="cstat-no" title="statement not covered" > open={showProviderSwitcher}</span>
|
|
962
|
-
<span class="cstat-no" title="statement not covered" > onOpenChange={setShowProviderSwitcher}</span>
|
|
963
|
-
<span class="cstat-no" title="statement not covered" > /></span>
|
|
964
|
-
<span class="cstat-no" title="statement not covered" > </div></span>
|
|
965
|
-
);
|
|
966
|
-
<span class="cstat-no" title="statement not covered" >}</span>
|
|
967
|
-
|
|
968
|
-
interface ToolbarButtonProps {
|
|
969
|
-
icon: React.ReactNode;
|
|
970
|
-
label: string;
|
|
971
|
-
onClick: () => void;
|
|
972
|
-
disabled?: boolean;
|
|
973
|
-
shortcut?: string;
|
|
974
|
-
variant?: 'default' | 'primary' | 'destructive';
|
|
975
|
-
}
|
|
976
|
-
|
|
977
|
-
<span class="cstat-no" title="statement not covered" >function ToolbarButton({</span>
|
|
978
|
-
<span class="cstat-no" title="statement not covered" > icon,</span>
|
|
979
|
-
<span class="cstat-no" title="statement not covered" > label,</span>
|
|
980
|
-
<span class="cstat-no" title="statement not covered" > onClick,</span>
|
|
981
|
-
<span class="cstat-no" title="statement not covered" > disabled,</span>
|
|
982
|
-
<span class="cstat-no" title="statement not covered" > shortcut,</span>
|
|
983
|
-
<span class="cstat-no" title="statement not covered" > variant = 'default',</span>
|
|
984
|
-
<span class="cstat-no" title="statement not covered" >}: ToolbarButtonProps) {</span>
|
|
985
|
-
<span class="cstat-no" title="statement not covered" > const variantClasses = {</span>
|
|
986
|
-
<span class="cstat-no" title="statement not covered" > default: 'text-text-secondary hover:text-text-primary hover:bg-bg-hover',</span>
|
|
987
|
-
<span class="cstat-no" title="statement not covered" > primary: 'text-accent hover:text-accent-hover hover:bg-accent-muted',</span>
|
|
988
|
-
<span class="cstat-no" title="statement not covered" > destructive: 'text-error hover:text-error hover:bg-error-bg',</span>
|
|
989
|
-
<span class="cstat-no" title="statement not covered" > };</span>
|
|
990
|
-
|
|
991
|
-
<span class="cstat-no" title="statement not covered" > return (</span>
|
|
992
|
-
<span class="cstat-no" title="statement not covered" > <button</span>
|
|
993
|
-
<span class="cstat-no" title="statement not covered" > onClick={onClick}</span>
|
|
994
|
-
<span class="cstat-no" title="statement not covered" > disabled={disabled}</span>
|
|
995
|
-
<span class="cstat-no" title="statement not covered" > className={`relative group p-2 rounded transition-colors disabled:opacity-40 disabled:cursor-not-allowed ${variantClasses[variant]}`}</span>
|
|
996
|
-
<span class="cstat-no" title="statement not covered" > title={`${label}${shortcut ? ` (${shortcut})` : ''}`}</span>
|
|
997
|
-
>
|
|
998
|
-
<span class="cstat-no" title="statement not covered" > {icon}</span>
|
|
999
|
-
{/* Tooltip */}
|
|
1000
|
-
<span class="cstat-no" title="statement not covered" > <div className="absolute top-full left-1/2 -translate-x-1/2 mt-2 px-2 py-1 bg-bg-elevated border border-border-default rounded text-xs text-text-primary whitespace-nowrap opacity-0 group-hover:opacity-100 transition-opacity pointer-events-none z-tooltip shadow-lg"></span>
|
|
1001
|
-
<span class="cstat-no" title="statement not covered" > {label}</span>
|
|
1002
|
-
<span class="cstat-no" title="statement not covered" > {shortcut && <span className="ml-2 text-text-muted">{shortcut}</span>}</span>
|
|
1003
|
-
<span class="cstat-no" title="statement not covered" > </div></span>
|
|
1004
|
-
<span class="cstat-no" title="statement not covered" > </button></span>
|
|
1005
|
-
);
|
|
1006
|
-
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1007
|
-
|
|
1008
|
-
<span class="cstat-no" title="statement not covered" >function ToolbarDivider() {</span>
|
|
1009
|
-
<span class="cstat-no" title="statement not covered" > return <div className="w-px h-6 bg-border-default mx-1" />;</span>
|
|
1010
|
-
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1011
|
-
</pre></td></tr></table></pre>
|
|
1012
|
-
|
|
1013
|
-
<div class='push'></div><!-- for sticky footer -->
|
|
1014
|
-
</div><!-- /wrapper -->
|
|
1015
|
-
<div class='footer quiet pad2 space-top1 center small'>
|
|
1016
|
-
Code coverage generated by
|
|
1017
|
-
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1018
|
-
at 2026-02-09T21:07:24.535Z
|
|
1019
|
-
</div>
|
|
1020
|
-
<script src="../../../prettify.js"></script>
|
|
1021
|
-
<script>
|
|
1022
|
-
window.onload = function () {
|
|
1023
|
-
prettyPrint();
|
|
1024
|
-
};
|
|
1025
|
-
</script>
|
|
1026
|
-
<script src="../../../sorter.js"></script>
|
|
1027
|
-
<script src="../../../block-navigation.js"></script>
|
|
1028
|
-
</body>
|
|
1029
|
-
</html>
|
|
1030
|
-
|