cdd-cli 3.2.0 → 4.0.0
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/.atl/skill-registry.md +30 -0
- package/.editorconfig +12 -0
- package/.eslintrc.json +1 -1
- package/.prettierignore +4 -0
- package/.prettierrc +8 -0
- package/.~lock.ROADMAP.md# +1 -0
- package/CHANGELOG.md +80 -0
- package/README.es.md +198 -0
- package/README.md +81 -23
- package/ROADMAP.md +647 -0
- package/SECURITY.md +5 -0
- package/__mocks__/ink.cjs +17 -0
- package/coverage/clover.xml +471 -500
- package/coverage/coverage-final.json +16 -16
- package/coverage/lcov-report/ContainerCreationPrompt.jsx.html +400 -0
- package/coverage/lcov-report/ControlsHUD.jsx.html +256 -0
- package/coverage/lcov-report/components/ContainerCreationPrompt.jsx.html +394 -0
- package/coverage/lcov-report/components/PromptField.jsx.html +229 -0
- package/coverage/lcov-report/components/SuggestionPanel.jsx.html +268 -0
- package/coverage/lcov-report/components/index.html +146 -0
- package/coverage/lcov-report/helpers/constants.js.html +139 -22
- package/coverage/lcov-report/helpers/containerOptionsBuilder.js.html +75 -42
- package/coverage/lcov-report/helpers/dockerHubService.js.html +310 -0
- package/coverage/lcov-report/helpers/dockerService/serviceComponents/containerActions.js.html +162 -84
- package/coverage/lcov-report/helpers/dockerService/serviceComponents/containerList.js.html +50 -32
- package/coverage/lcov-report/helpers/dockerService/serviceComponents/index.html +21 -21
- package/coverage/lcov-report/helpers/imageNameUtils.js.html +181 -0
- package/coverage/lcov-report/helpers/index.html +84 -54
- package/coverage/lcov-report/helpers/logger.js.html +68 -68
- package/coverage/lcov-report/helpers/safeCall.js.html +15 -15
- package/coverage/lcov-report/helpers/validationHelpers.js.html +66 -114
- package/coverage/lcov-report/hooks/creation/index.html +20 -20
- package/coverage/lcov-report/hooks/creation/useContainerActions.js.html +38 -17
- package/coverage/lcov-report/hooks/creation/useContainerCreation.js.html +593 -89
- package/coverage/lcov-report/hooks/creation/useLogsViewer.js.html +7 -7
- package/coverage/lcov-report/hooks/debug/index.html +5 -5
- package/coverage/lcov-report/hooks/debug/useDebugLogs.js.html +35 -20
- package/coverage/lcov-report/hooks/index.html +40 -40
- package/coverage/lcov-report/hooks/navigation/index.html +19 -19
- package/coverage/lcov-report/hooks/navigation/useContainerSelection.js.html +38 -29
- package/coverage/lcov-report/hooks/useContainerCommandRouter.js.html +119 -80
- package/coverage/lcov-report/hooks/useControls.js.html +306 -123
- package/coverage/lcov-report/hooks/useEraseConfirmation.js.html +8 -8
- package/coverage/lcov-report/hooks/useExitHandler.js.html +50 -41
- package/coverage/lcov-report/index.html +52 -67
- package/coverage/lcov.info +899 -952
- package/dist/App.js +18 -12
- package/dist/components/ContainerCreationPrompt.js +50 -13
- package/dist/components/ContainerList.js +3 -3
- package/dist/components/ContainerRow.js +20 -20
- package/dist/components/ContainerSection.js +3 -3
- package/dist/components/ControlsHUD.js +106 -0
- package/dist/components/Footer.js +2 -2
- package/dist/components/Header.js +7 -7
- package/dist/components/LogViewer.js +3 -3
- package/dist/components/MessageFeedback.js +2 -2
- package/dist/components/PromptField.js +4 -4
- package/dist/components/StatsBar.js +5 -5
- package/dist/components/SuggestionPanel.js +53 -0
- package/dist/components/UsageMenu.js +3 -3
- package/dist/helpers/appInfo.js +7 -7
- package/dist/helpers/constants.js +154 -1
- package/dist/helpers/containerOptionsBuilder.js +3 -3
- package/dist/helpers/dockerHubService.js +111 -0
- package/dist/helpers/dockerService/dockerService.js +1 -1
- package/dist/helpers/dockerService/serviceComponents/containerActions.js +99 -40
- package/dist/helpers/dockerService/serviceComponents/containerList.js +11 -11
- package/dist/helpers/dockerService/serviceComponents/containerLogs.js +9 -9
- package/dist/helpers/dockerService/serviceComponents/containerStats.js +5 -5
- package/dist/helpers/dockerService/serviceComponents/imageUtils.js +1 -1
- package/dist/helpers/exitWithMessage.js +10 -10
- package/dist/helpers/imageNameUtils.js +32 -0
- package/dist/helpers/logger.js +13 -13
- package/dist/helpers/safeCall.js +2 -2
- package/dist/helpers/validationHelpers.js +76 -21
- package/dist/hooks/creation/useContainerActions.js +28 -11
- package/dist/hooks/creation/useContainerCreation.js +452 -62
- package/dist/hooks/creation/useLogsViewer.js +2 -2
- package/dist/hooks/debug/useDebugLogs.js +4 -4
- package/dist/hooks/useContainerCommandRouter.js +14 -14
- package/dist/hooks/useContainers.js +3 -3
- package/dist/hooks/useControls.js +85 -38
- package/dist/hooks/useEraseConfirmation.js +3 -3
- package/dist/index.js +9 -2
- package/jest.config.cjs +7 -0
- package/package.json +7 -3
- package/src/App.jsx +39 -16
- package/src/components/ContainerCreationPrompt.jsx +54 -10
- package/src/components/ContainerList.jsx +3 -3
- package/src/components/ContainerRow.jsx +19 -16
- package/src/components/ContainerSection.jsx +3 -3
- package/src/components/ControlsHUD.jsx +66 -0
- package/src/components/Footer.jsx +2 -2
- package/src/components/Header.jsx +7 -7
- package/src/components/LogViewer.jsx +5 -3
- package/src/components/MessageFeedback.jsx +2 -2
- package/src/components/PromptField.jsx +4 -4
- package/src/components/StatsBar.jsx +11 -7
- package/src/components/SuggestionPanel.jsx +61 -0
- package/src/components/UsageMenu.jsx +18 -13
- package/src/helpers/appInfo.js +7 -7
- package/src/helpers/constants.js +48 -9
- package/src/helpers/containerOptionsBuilder.js +16 -5
- package/src/helpers/dockerHubService.js +75 -0
- package/src/helpers/dockerService/dockerService.js +1 -1
- package/src/helpers/dockerService/serviceComponents/containerActions.js +87 -61
- package/src/helpers/dockerService/serviceComponents/containerList.js +31 -25
- package/src/helpers/dockerService/serviceComponents/containerLogs.js +41 -26
- package/src/helpers/dockerService/serviceComponents/containerStats.js +13 -11
- package/src/helpers/dockerService/serviceComponents/imageUtils.js +5 -4
- package/src/helpers/exitWithMessage.js +13 -7
- package/src/helpers/imageNameUtils.js +32 -0
- package/src/helpers/logger.js +15 -16
- package/src/helpers/safeCall.js +2 -2
- package/src/helpers/validationHelpers.js +13 -29
- package/src/hooks/creation/useContainerActions.js +32 -12
- package/src/hooks/creation/useContainerCreation.js +293 -47
- package/src/hooks/creation/useLogsViewer.js +2 -2
- package/src/hooks/debug/useDebugLogs.js +15 -10
- package/src/hooks/navigation/useContainerSelection.js +17 -14
- package/src/hooks/useContainerCommandRouter.js +71 -58
- package/src/hooks/useContainers.js +4 -4
- package/src/hooks/useControls.js +135 -72
- package/src/hooks/useEraseConfirmation.js +3 -3
- package/src/hooks/useExitHandler.js +29 -26
- package/src/index.js +8 -4
- package/test/ContainerCreationPrompt.dom.test.js +313 -0
- package/test/ControlsHUD.dom.test.js +125 -0
- package/test/SuggestionPanel.dom.test.js +83 -0
- package/test/constants.test.js +41 -0
- package/test/dockerHubService.test.js +213 -0
- package/test/logger.test.js +58 -0
- package/test/resolveImageTag.test.js +26 -0
- package/test/useContainerCreation.dom.test.js +428 -2
- package/test/useContainerCreationHub.dom.test.js +184 -0
- package/test/useControls.dom.test.js +406 -4
|
@@ -131,9 +131,9 @@
|
|
|
131
131
|
<span class="cline-any cline-neutral"> </span>
|
|
132
132
|
<span class="cline-any cline-neutral"> </span>
|
|
133
133
|
<span class="cline-any cline-neutral"> </span>
|
|
134
|
-
<span class="cline-any cline-yes">
|
|
135
|
-
<span class="cline-any cline-yes">
|
|
136
|
-
<span class="cline-any cline-yes">
|
|
134
|
+
<span class="cline-any cline-yes">96x</span>
|
|
135
|
+
<span class="cline-any cline-yes">96x</span>
|
|
136
|
+
<span class="cline-any cline-yes">96x</span>
|
|
137
137
|
<span class="cline-any cline-neutral"> </span>
|
|
138
138
|
<span class="cline-any cline-neutral"> </span>
|
|
139
139
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -155,7 +155,7 @@
|
|
|
155
155
|
<span class="cline-any cline-neutral"> </span>
|
|
156
156
|
<span class="cline-any cline-neutral"> </span>
|
|
157
157
|
<span class="cline-any cline-neutral"> </span>
|
|
158
|
-
<span class="cline-any cline-yes">
|
|
158
|
+
<span class="cline-any cline-yes">96x</span>
|
|
159
159
|
<span class="cline-any cline-neutral"> </span>
|
|
160
160
|
<span class="cline-any cline-neutral"> </span>
|
|
161
161
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -165,8 +165,8 @@
|
|
|
165
165
|
<span class="cline-any cline-neutral"> </span>
|
|
166
166
|
<span class="cline-any cline-neutral"> </span>
|
|
167
167
|
<span class="cline-any cline-neutral"> </span>
|
|
168
|
-
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { useState, useRef } from
|
|
169
|
-
import { safeCall } from
|
|
168
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { useState, useRef } from 'react';
|
|
169
|
+
import { safeCall } from '../../helpers/safeCall.js';
|
|
170
170
|
|
|
171
171
|
/**
|
|
172
172
|
* Custom hook to manage the logs viewer state and stream reference.
|
|
@@ -223,7 +223,7 @@ export function useLogsViewer() {
|
|
|
223
223
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
224
224
|
Code coverage generated by
|
|
225
225
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
226
|
-
at 2026-04-
|
|
226
|
+
at 2026-04-27T22:13:21.150Z
|
|
227
227
|
</div>
|
|
228
228
|
<script src="../../prettify.js"></script>
|
|
229
229
|
<script>
|
|
@@ -44,9 +44,9 @@
|
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">35.29% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>6/
|
|
49
|
+
<span class='fraction'>6/17</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -89,8 +89,8 @@
|
|
|
89
89
|
<td data-value="10" class="abs low">0/10</td>
|
|
90
90
|
<td data-value="40" class="pct low">40%</td>
|
|
91
91
|
<td data-value="5" class="abs low">2/5</td>
|
|
92
|
-
<td data-value="
|
|
93
|
-
<td data-value="
|
|
92
|
+
<td data-value="35.29" class="pct low">35.29%</td>
|
|
93
|
+
<td data-value="17" class="abs low">6/17</td>
|
|
94
94
|
</tr>
|
|
95
95
|
|
|
96
96
|
</tbody>
|
|
@@ -101,7 +101,7 @@
|
|
|
101
101
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
102
102
|
Code coverage generated by
|
|
103
103
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
104
|
-
at 2026-04-
|
|
104
|
+
at 2026-04-27T22:13:21.150Z
|
|
105
105
|
</div>
|
|
106
106
|
<script src="../../prettify.js"></script>
|
|
107
107
|
<script>
|
|
@@ -44,9 +44,9 @@
|
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">35.29% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>6/
|
|
49
|
+
<span class='fraction'>6/17</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -92,17 +92,24 @@
|
|
|
92
92
|
<a name='L27'></a><a href='#L27'>27</a>
|
|
93
93
|
<a name='L28'></a><a href='#L28'>28</a>
|
|
94
94
|
<a name='L29'></a><a href='#L29'>29</a>
|
|
95
|
-
<a name='L30'></a><a href='#L30'>30</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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
96
101
|
<span class="cline-any cline-neutral"> </span>
|
|
97
102
|
<span class="cline-any cline-neutral"> </span>
|
|
98
103
|
<span class="cline-any cline-neutral"> </span>
|
|
99
|
-
<span class="cline-any cline-yes">
|
|
100
|
-
<span class="cline-any cline-yes">
|
|
104
|
+
<span class="cline-any cline-yes">96x</span>
|
|
105
|
+
<span class="cline-any cline-yes">96x</span>
|
|
101
106
|
<span class="cline-any cline-neutral"> </span>
|
|
102
|
-
<span class="cline-any cline-yes">
|
|
103
|
-
<span class="cline-any cline-yes">
|
|
107
|
+
<span class="cline-any cline-yes">96x</span>
|
|
108
|
+
<span class="cline-any cline-yes">20x</span>
|
|
104
109
|
<span class="cline-any cline-no"> </span>
|
|
105
110
|
<span class="cline-any cline-no"> </span>
|
|
111
|
+
<span class="cline-any cline-neutral"> </span>
|
|
112
|
+
<span class="cline-any cline-no"> </span>
|
|
106
113
|
<span class="cline-any cline-no"> </span>
|
|
107
114
|
<span class="cline-any cline-no"> </span>
|
|
108
115
|
<span class="cline-any cline-no"> </span>
|
|
@@ -111,15 +118,18 @@
|
|
|
111
118
|
<span class="cline-any cline-no"> </span>
|
|
112
119
|
<span class="cline-any cline-neutral"> </span>
|
|
113
120
|
<span class="cline-any cline-neutral"> </span>
|
|
121
|
+
<span class="cline-any cline-neutral"> </span>
|
|
114
122
|
<span class="cline-any cline-no"> </span>
|
|
123
|
+
<span class="cline-any cline-neutral"> </span>
|
|
124
|
+
<span class="cline-any cline-neutral"> </span>
|
|
115
125
|
<span class="cline-any cline-no"> </span>
|
|
116
126
|
<span class="cline-any cline-no"> </span>
|
|
117
127
|
<span class="cline-any cline-neutral"> </span>
|
|
118
128
|
<span class="cline-any cline-neutral"> </span>
|
|
119
|
-
<span class="cline-any cline-yes">
|
|
129
|
+
<span class="cline-any cline-yes">20x</span>
|
|
120
130
|
<span class="cline-any cline-neutral"> </span>
|
|
121
131
|
<span class="cline-any cline-neutral"> </span>
|
|
122
|
-
<span class="cline-any cline-yes">
|
|
132
|
+
<span class="cline-any cline-yes">96x</span>
|
|
123
133
|
<span class="cline-any cline-neutral"> </span>
|
|
124
134
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { useState, useEffect } from 'react';
|
|
125
135
|
import { logger } from '../../helpers/logger.js';
|
|
@@ -131,16 +141,21 @@ export function useDebugLogs() {
|
|
|
131
141
|
useEffect(() => {
|
|
132
142
|
const unsubscribe = logger.subscribe(<span class="fstat-no" title="function not covered" >(e</span>ntry) => {
|
|
133
143
|
<span class="cstat-no" title="statement not covered" > setDebugLogs(<span class="fstat-no" title="function not covered" >(p</span>rev) => {</span>
|
|
134
|
-
const extras = <span class="cstat-no" title="statement not covered" >(entry.args || [])
|
|
135
|
-
<span class="
|
|
136
|
-
<span class="cstat-no" title="statement not covered" >
|
|
137
|
-
<span class="cstat-no" title="statement not covered" >
|
|
138
|
-
<span class="cstat-no" title="statement not covered" >
|
|
139
|
-
|
|
140
|
-
<span class="cstat-no" title="statement not covered" >
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
+
const extras = <span class="cstat-no" title="statement not covered" >(entry.args || [])</span>
|
|
145
|
+
.map(<span class="fstat-no" title="function not covered" >(a</span>rg) => {
|
|
146
|
+
<span class="cstat-no" title="statement not covered" > if (typeof arg === 'string') <span class="cstat-no" title="statement not covered" >return arg;</span></span>
|
|
147
|
+
<span class="cstat-no" title="statement not covered" > if (typeof arg === 'number' || typeof arg === 'boolean')</span>
|
|
148
|
+
<span class="cstat-no" title="statement not covered" > return String(arg);</span>
|
|
149
|
+
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
150
|
+
<span class="cstat-no" title="statement not covered" > return JSON.stringify(arg);</span>
|
|
151
|
+
} catch (err) {
|
|
152
|
+
<span class="cstat-no" title="statement not covered" > return '[unserializable]';</span>
|
|
153
|
+
}
|
|
154
|
+
})
|
|
155
|
+
.filter(Boolean);
|
|
156
|
+
const line = <span class="cstat-no" title="statement not covered" >extras.length</span>
|
|
157
|
+
? `${entry.formatted} ${extras.join(' ')}`
|
|
158
|
+
: entry.formatted;
|
|
144
159
|
const next = <span class="cstat-no" title="statement not covered" >[...prev, line];</span>
|
|
145
160
|
<span class="cstat-no" title="statement not covered" > return next.slice(-200);</span>
|
|
146
161
|
});
|
|
@@ -157,7 +172,7 @@ export function useDebugLogs() {
|
|
|
157
172
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
158
173
|
Code coverage generated by
|
|
159
174
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
160
|
-
at 2026-04-
|
|
175
|
+
at 2026-04-27T22:13:21.150Z
|
|
161
176
|
</div>
|
|
162
177
|
<script src="../../prettify.js"></script>
|
|
163
178
|
<script>
|
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">48.63% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>89/183</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">50% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>68/136</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">28.94% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>11/38</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">50.85% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>89/175</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -80,32 +80,32 @@
|
|
|
80
80
|
</thead>
|
|
81
81
|
<tbody><tr>
|
|
82
82
|
<td class="file low" data-value="useContainerCommandRouter.js"><a href="useContainerCommandRouter.js.html">useContainerCommandRouter.js</a></td>
|
|
83
|
-
<td data-value="
|
|
84
|
-
<div class="chart"><div class="cover-fill" style="width:
|
|
83
|
+
<td data-value="33.33" class="pic low">
|
|
84
|
+
<div class="chart"><div class="cover-fill" style="width: 33%"></div><div class="cover-empty" style="width: 67%"></div></div>
|
|
85
85
|
</td>
|
|
86
|
-
<td data-value="
|
|
87
|
-
<td data-value="36" class="abs low">
|
|
88
|
-
<td data-value="
|
|
89
|
-
<td data-value="26" class="abs low">
|
|
90
|
-
<td data-value="
|
|
91
|
-
<td data-value="7" class="abs low">
|
|
92
|
-
<td data-value="
|
|
93
|
-
<td data-value="36" class="abs low">
|
|
86
|
+
<td data-value="33.33" class="pct low">33.33%</td>
|
|
87
|
+
<td data-value="36" class="abs low">12/36</td>
|
|
88
|
+
<td data-value="23.07" class="pct low">23.07%</td>
|
|
89
|
+
<td data-value="26" class="abs low">6/26</td>
|
|
90
|
+
<td data-value="28.57" class="pct low">28.57%</td>
|
|
91
|
+
<td data-value="7" class="abs low">2/7</td>
|
|
92
|
+
<td data-value="33.33" class="pct low">33.33%</td>
|
|
93
|
+
<td data-value="36" class="abs low">12/36</td>
|
|
94
94
|
</tr>
|
|
95
95
|
|
|
96
96
|
<tr>
|
|
97
|
-
<td class="file
|
|
98
|
-
<td data-value="
|
|
99
|
-
<div class="chart"><div class="cover-fill" style="width:
|
|
97
|
+
<td class="file medium" data-value="useControls.js"><a href="useControls.js.html">useControls.js</a></td>
|
|
98
|
+
<td data-value="59.13" class="pic medium">
|
|
99
|
+
<div class="chart"><div class="cover-fill" style="width: 59%"></div><div class="cover-empty" style="width: 41%"></div></div>
|
|
100
100
|
</td>
|
|
101
|
-
<td data-value="
|
|
102
|
-
<td data-value="
|
|
103
|
-
<td data-value="
|
|
104
|
-
<td data-value="
|
|
105
|
-
<td data-value="
|
|
106
|
-
<td data-value="23" class="abs low">
|
|
107
|
-
<td data-value="
|
|
108
|
-
<td data-value="
|
|
101
|
+
<td data-value="59.13" class="pct medium">59.13%</td>
|
|
102
|
+
<td data-value="115" class="abs medium">68/115</td>
|
|
103
|
+
<td data-value="67.77" class="pct medium">67.77%</td>
|
|
104
|
+
<td data-value="90" class="abs medium">61/90</td>
|
|
105
|
+
<td data-value="26.08" class="pct low">26.08%</td>
|
|
106
|
+
<td data-value="23" class="abs low">6/23</td>
|
|
107
|
+
<td data-value="62.96" class="pct medium">62.96%</td>
|
|
108
|
+
<td data-value="108" class="abs medium">68/108</td>
|
|
109
109
|
</tr>
|
|
110
110
|
|
|
111
111
|
<tr>
|
|
@@ -125,17 +125,17 @@
|
|
|
125
125
|
|
|
126
126
|
<tr>
|
|
127
127
|
<td class="file low" data-value="useExitHandler.js"><a href="useExitHandler.js.html">useExitHandler.js</a></td>
|
|
128
|
-
<td data-value="
|
|
129
|
-
<div class="chart"><div class="cover-fill" style="width:
|
|
128
|
+
<td data-value="26.31" class="pic low">
|
|
129
|
+
<div class="chart"><div class="cover-fill" style="width: 26%"></div><div class="cover-empty" style="width: 74%"></div></div>
|
|
130
130
|
</td>
|
|
131
|
-
<td data-value="
|
|
132
|
-
<td data-value="19" class="abs low">
|
|
133
|
-
<td data-value="
|
|
134
|
-
<td data-value="11" class="abs low">
|
|
135
|
-
<td data-value="
|
|
136
|
-
<td data-value="5" class="abs low">
|
|
137
|
-
<td data-value="
|
|
138
|
-
<td data-value="18" class="abs low">
|
|
131
|
+
<td data-value="26.31" class="pct low">26.31%</td>
|
|
132
|
+
<td data-value="19" class="abs low">5/19</td>
|
|
133
|
+
<td data-value="9.09" class="pct low">9.09%</td>
|
|
134
|
+
<td data-value="11" class="abs low">1/11</td>
|
|
135
|
+
<td data-value="40" class="pct low">40%</td>
|
|
136
|
+
<td data-value="5" class="abs low">2/5</td>
|
|
137
|
+
<td data-value="27.77" class="pct low">27.77%</td>
|
|
138
|
+
<td data-value="18" class="abs low">5/18</td>
|
|
139
139
|
</tr>
|
|
140
140
|
|
|
141
141
|
</tbody>
|
|
@@ -146,7 +146,7 @@
|
|
|
146
146
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
147
147
|
Code coverage generated by
|
|
148
148
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
149
|
-
at 2026-04-
|
|
149
|
+
at 2026-04-27T22:13:21.150Z
|
|
150
150
|
</div>
|
|
151
151
|
<script src="../prettify.js"></script>
|
|
152
152
|
<script>
|
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">35.71% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>5/14</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">10% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>1/10</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">50% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>2/4</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">41.66% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>5/12</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -80,17 +80,17 @@
|
|
|
80
80
|
</thead>
|
|
81
81
|
<tbody><tr>
|
|
82
82
|
<td class="file low" data-value="useContainerSelection.js"><a href="useContainerSelection.js.html">useContainerSelection.js</a></td>
|
|
83
|
-
<td data-value="
|
|
84
|
-
<div class="chart"><div class="cover-fill" style="width:
|
|
83
|
+
<td data-value="35.71" class="pic low">
|
|
84
|
+
<div class="chart"><div class="cover-fill" style="width: 35%"></div><div class="cover-empty" style="width: 65%"></div></div>
|
|
85
85
|
</td>
|
|
86
|
-
<td data-value="
|
|
87
|
-
<td data-value="14" class="abs low">
|
|
88
|
-
<td data-value="
|
|
89
|
-
<td data-value="10" class="abs low">
|
|
90
|
-
<td data-value="
|
|
91
|
-
<td data-value="4" class="abs
|
|
92
|
-
<td data-value="
|
|
93
|
-
<td data-value="12" class="abs low">
|
|
86
|
+
<td data-value="35.71" class="pct low">35.71%</td>
|
|
87
|
+
<td data-value="14" class="abs low">5/14</td>
|
|
88
|
+
<td data-value="10" class="pct low">10%</td>
|
|
89
|
+
<td data-value="10" class="abs low">1/10</td>
|
|
90
|
+
<td data-value="50" class="pct medium">50%</td>
|
|
91
|
+
<td data-value="4" class="abs medium">2/4</td>
|
|
92
|
+
<td data-value="41.66" class="pct low">41.66%</td>
|
|
93
|
+
<td data-value="12" class="abs low">5/12</td>
|
|
94
94
|
</tr>
|
|
95
95
|
|
|
96
96
|
</tbody>
|
|
@@ -101,7 +101,7 @@
|
|
|
101
101
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
102
102
|
Code coverage generated by
|
|
103
103
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
104
|
-
at 2026-04-
|
|
104
|
+
at 2026-04-27T22:13:21.150Z
|
|
105
105
|
</div>
|
|
106
106
|
<script src="../../prettify.js"></script>
|
|
107
107
|
<script>
|
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">35.71% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>5/14</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">10% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>1/10</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">50% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>2/4</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">41.66% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>5/12</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -88,14 +88,18 @@
|
|
|
88
88
|
<a name='L23'></a><a href='#L23'>23</a>
|
|
89
89
|
<a name='L24'></a><a href='#L24'>24</a>
|
|
90
90
|
<a name='L25'></a><a href='#L25'>25</a>
|
|
91
|
-
<a name='L26'></a><a href='#L26'>26</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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
92
95
|
<span class="cline-any cline-neutral"> </span>
|
|
93
96
|
<span class="cline-any cline-neutral"> </span>
|
|
94
|
-
<span class="cline-any cline-yes">
|
|
97
|
+
<span class="cline-any cline-yes">96x</span>
|
|
95
98
|
<span class="cline-any cline-neutral"> </span>
|
|
96
|
-
<span class="cline-any cline-yes">
|
|
97
|
-
<span class="cline-any cline-
|
|
98
|
-
<span class="cline-any cline-
|
|
99
|
+
<span class="cline-any cline-yes">96x</span>
|
|
100
|
+
<span class="cline-any cline-neutral"> </span>
|
|
101
|
+
<span class="cline-any cline-yes">12x</span>
|
|
102
|
+
<span class="cline-any cline-yes">12x</span>
|
|
99
103
|
<span class="cline-any cline-neutral"> </span>
|
|
100
104
|
<span class="cline-any cline-neutral"> </span>
|
|
101
105
|
<span class="cline-any cline-no"> </span>
|
|
@@ -111,30 +115,35 @@
|
|
|
111
115
|
<span class="cline-any cline-no"> </span>
|
|
112
116
|
<span class="cline-any cline-neutral"> </span>
|
|
113
117
|
<span class="cline-any cline-neutral"> </span>
|
|
114
|
-
<span class="cline-any cline-
|
|
118
|
+
<span class="cline-any cline-neutral"> </span>
|
|
119
|
+
<span class="cline-any cline-neutral"> </span>
|
|
120
|
+
<span class="cline-any cline-yes">96x</span>
|
|
115
121
|
<span class="cline-any cline-neutral"> </span>
|
|
116
122
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { useState, useCallback } from 'react';
|
|
117
123
|
|
|
118
124
|
export function useContainerSelection(total) {
|
|
119
125
|
const [selected, setSelected] = useState(0);
|
|
120
126
|
|
|
121
|
-
const handleNavigation = useCallback(
|
|
122
|
-
|
|
123
|
-
<span class="
|
|
124
|
-
|
|
127
|
+
const handleNavigation = useCallback(
|
|
128
|
+
(input, key) => {
|
|
129
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (total === 0) {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
125
132
|
|
|
126
|
-
<span class="cstat-no" title="statement not covered" >
|
|
127
|
-
<span class="cstat-no" title="statement not covered" >
|
|
128
|
-
<span class="cstat-no" title="statement not covered" >
|
|
129
|
-
|
|
133
|
+
<span class="cstat-no" title="statement not covered" > if (key.upArrow) {</span>
|
|
134
|
+
<span class="cstat-no" title="statement not covered" > setSelected(<span class="fstat-no" title="function not covered" >(i</span>) => (<span class="cstat-no" title="statement not covered" >i === 0 ? total - 1 : i - 1)</span>);</span>
|
|
135
|
+
<span class="cstat-no" title="statement not covered" > return true;</span>
|
|
136
|
+
}
|
|
130
137
|
|
|
131
|
-
<span class="cstat-no" title="statement not covered" >
|
|
132
|
-
<span class="cstat-no" title="statement not covered" >
|
|
133
|
-
<span class="cstat-no" title="statement not covered" >
|
|
134
|
-
|
|
138
|
+
<span class="cstat-no" title="statement not covered" > if (key.downArrow) {</span>
|
|
139
|
+
<span class="cstat-no" title="statement not covered" > setSelected(<span class="fstat-no" title="function not covered" >(i</span>) => (<span class="cstat-no" title="statement not covered" >i === total - 1 ? 0 : i + 1)</span>);</span>
|
|
140
|
+
<span class="cstat-no" title="statement not covered" > return true;</span>
|
|
141
|
+
}
|
|
135
142
|
|
|
136
|
-
<span class="cstat-no" title="statement not covered" >
|
|
137
|
-
|
|
143
|
+
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
144
|
+
},
|
|
145
|
+
[total]
|
|
146
|
+
);
|
|
138
147
|
|
|
139
148
|
return { selected, setSelected, handleNavigation };
|
|
140
149
|
}
|
|
@@ -145,7 +154,7 @@ export function useContainerSelection(total) {
|
|
|
145
154
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
146
155
|
Code coverage generated by
|
|
147
156
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
148
|
-
at 2026-04-
|
|
157
|
+
at 2026-04-27T22:13:21.150Z
|
|
149
158
|
</div>
|
|
150
159
|
<script src="../../prettify.js"></script>
|
|
151
160
|
<script>
|