lynx-console 0.1.1 → 0.2.1
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/dist/index.cjs +183 -960
- package/dist/index.css +1257 -461
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +79 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +79 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +183 -960
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -4
- package/src/components/BottomSheet.css +91 -0
- package/src/components/BottomSheet.tsx +10 -10
- package/src/components/ConsolePanel.css +402 -0
- package/src/components/ConsolePanel.tsx +62 -28
- package/src/components/FadeList.tsx +10 -55
- package/{dist/assets/src/components/FloatingButton.css.ts.vanilla-BaG0OI6p.css → src/components/FloatingButton.css} +22 -16
- package/src/components/FloatingButton.tsx +6 -6
- package/src/components/LogPanel.tsx +46 -47
- package/src/components/NetworkDetailSection.tsx +13 -13
- package/src/components/NetworkPanel.css +280 -0
- package/src/components/NetworkPanel.tsx +30 -50
- package/src/components/PerformancePanel.css +249 -0
- package/src/components/PerformancePanel.tsx +40 -40
- package/src/components/Tabs.css +78 -0
- package/src/components/Tabs.tsx +13 -11
- package/src/globals.d.ts +0 -5
- package/src/index.tsx +10 -6
- package/src/styles/global.css +8 -0
- package/src/styles/vars/color.ts +26 -213
- package/src/styles/vars/dimension.ts +5 -74
- package/src/styles/vars/index.css +65 -457
- package/src/styles/vars/index.ts +5 -9
- package/src/styles/vars/radius.ts +1 -11
- package/src/types.ts +8 -0
- package/dist/assets/src/components/BottomSheet.css.ts.vanilla-CulwSDhG.css +0 -83
- package/dist/assets/src/components/ConsolePanel.css.ts.vanilla-DWdhFBJq.css +0 -337
- package/dist/assets/src/components/FadeList.css.ts.vanilla-sppTKMZj.css +0 -12
- package/dist/assets/src/components/NetworkPanel.css.ts.vanilla-BSE4s40D.css +0 -244
- package/dist/assets/src/components/PerformancePanel.css.ts.vanilla-Bb3zG5G8.css +0 -216
- package/dist/assets/src/components/Tabs.css.ts.vanilla-DD7L2oXt.css +0 -50
- package/src/components/BottomSheet.css.ts +0 -93
- package/src/components/ConsolePanel.css.ts +0 -349
- package/src/components/FadeList.css.ts +0 -16
- package/src/components/FloatingButton.css.ts +0 -73
- package/src/components/NetworkPanel.css.ts +0 -277
- package/src/components/PerformancePanel.css.ts +0 -224
- package/src/components/Tabs.css.ts +0 -66
- package/src/styles/global.css.ts +0 -10
- package/src/styles/typography.ts +0 -25
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.
|
|
1
|
+
.fb-wrapper {
|
|
2
2
|
position: fixed;
|
|
3
3
|
z-index: 9999;
|
|
4
4
|
display: flex;
|
|
@@ -6,9 +6,10 @@
|
|
|
6
6
|
align-items: center;
|
|
7
7
|
gap: 8px;
|
|
8
8
|
overflow: visible;
|
|
9
|
-
transition: transform var(--
|
|
9
|
+
transition: transform var(--lynx-console-duration-d4) cubic-bezier(0.4, 0, 0.2, 1);
|
|
10
10
|
}
|
|
11
|
-
|
|
11
|
+
|
|
12
|
+
.fb-button {
|
|
12
13
|
position: relative;
|
|
13
14
|
overflow: hidden;
|
|
14
15
|
padding-left: 8px;
|
|
@@ -16,7 +17,7 @@
|
|
|
16
17
|
padding-top: 4px;
|
|
17
18
|
padding-bottom: 4px;
|
|
18
19
|
border-radius: 12px;
|
|
19
|
-
background-color: var(--
|
|
20
|
+
background-color: var(--lynx-console-color-palette-green-600);
|
|
20
21
|
display: flex;
|
|
21
22
|
flex-direction: column;
|
|
22
23
|
align-items: center;
|
|
@@ -24,7 +25,8 @@
|
|
|
24
25
|
gap: 2px;
|
|
25
26
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
|
26
27
|
}
|
|
27
|
-
|
|
28
|
+
|
|
29
|
+
.fb-shineOverlay {
|
|
28
30
|
position: absolute;
|
|
29
31
|
top: -50%;
|
|
30
32
|
left: -25%;
|
|
@@ -33,35 +35,39 @@
|
|
|
33
35
|
background-color: rgba(255, 255, 255, 0.2);
|
|
34
36
|
border-radius: 9999px;
|
|
35
37
|
}
|
|
36
|
-
|
|
38
|
+
|
|
39
|
+
.fb-title {
|
|
37
40
|
font-size: 0.875rem;
|
|
38
41
|
line-height: 1.1875rem;
|
|
39
|
-
font-weight: var(--
|
|
40
|
-
color: var(--
|
|
42
|
+
font-weight: var(--lynx-console-font-weight-regular);
|
|
43
|
+
color: var(--lynx-console-color-palette-static-white);
|
|
41
44
|
text-align: center;
|
|
42
45
|
}
|
|
43
|
-
|
|
46
|
+
|
|
47
|
+
.fb-subtitle {
|
|
44
48
|
font-size: 0.8125rem;
|
|
45
49
|
line-height: 1.125rem;
|
|
46
|
-
font-weight: var(--
|
|
47
|
-
color: var(--
|
|
50
|
+
font-weight: var(--lynx-console-font-weight-regular);
|
|
51
|
+
color: var(--lynx-console-color-palette-static-white);
|
|
48
52
|
text-align: center;
|
|
49
53
|
}
|
|
50
|
-
|
|
54
|
+
|
|
55
|
+
.fb-reloadButton {
|
|
51
56
|
overflow: visible;
|
|
52
57
|
width: 32px;
|
|
53
58
|
height: 32px;
|
|
54
59
|
border-radius: 16px;
|
|
55
|
-
background-color: var(--
|
|
60
|
+
background-color: var(--lynx-console-color-palette-green-600);
|
|
56
61
|
display: flex;
|
|
57
62
|
align-items: center;
|
|
58
63
|
justify-content: center;
|
|
59
64
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
|
60
65
|
}
|
|
61
|
-
|
|
66
|
+
|
|
67
|
+
.fb-reloadIcon {
|
|
62
68
|
font-size: 20px;
|
|
63
69
|
line-height: 32px;
|
|
64
70
|
margin-bottom: 5px;
|
|
65
|
-
color: var(--
|
|
71
|
+
color: var(--lynx-console-color-palette-static-white);
|
|
66
72
|
text-align: center;
|
|
67
|
-
}
|
|
73
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ReactNode } from "@lynx-js/react";
|
|
2
2
|
import { useLongPressDrag } from "../hooks/useLongPressDrag";
|
|
3
|
-
import
|
|
3
|
+
import "./FloatingButton.css";
|
|
4
4
|
|
|
5
5
|
interface FloatingButtonProps {
|
|
6
6
|
bindtap: () => void;
|
|
@@ -47,7 +47,7 @@ export const FloatingButton = ({
|
|
|
47
47
|
return (
|
|
48
48
|
<>
|
|
49
49
|
<view
|
|
50
|
-
className={
|
|
50
|
+
className={"fb-wrapper"}
|
|
51
51
|
consume-slide-event={[[-180, 180]]}
|
|
52
52
|
style={{
|
|
53
53
|
right: `${right}px`,
|
|
@@ -56,16 +56,16 @@ export const FloatingButton = ({
|
|
|
56
56
|
}}
|
|
57
57
|
{...handlers}
|
|
58
58
|
>
|
|
59
|
-
<view className={
|
|
59
|
+
<view className={"fb-button"}>
|
|
60
60
|
{children}
|
|
61
|
-
<view className={
|
|
61
|
+
<view className={"fb-shineOverlay"} style={SHINE_STYLES[phase]} />
|
|
62
62
|
</view>
|
|
63
63
|
<view
|
|
64
|
-
className={
|
|
64
|
+
className={"fb-reloadButton"}
|
|
65
65
|
catchtouchstart={() => clearTimer()}
|
|
66
66
|
bindtap={handleReload}
|
|
67
67
|
>
|
|
68
|
-
<text className={
|
|
68
|
+
<text className={"fb-reloadIcon"}>{"\u21BB"}</text>
|
|
69
69
|
</view>
|
|
70
70
|
</view>
|
|
71
71
|
</>
|
|
@@ -2,7 +2,7 @@ import { useEffect, useMemo, useRef, useState } from "@lynx-js/react";
|
|
|
2
2
|
import type { BaseEvent, InputInputEvent, NodesRef } from "@lynx-js/types";
|
|
3
3
|
import { stringify } from "javascript-stringify";
|
|
4
4
|
import type { LogEntry, LogLevel } from "../types";
|
|
5
|
-
import
|
|
5
|
+
import "./ConsolePanel.css";
|
|
6
6
|
import { FadeList } from "./FadeList";
|
|
7
7
|
|
|
8
8
|
const LOG_LEVELS: LogLevel[] = ["log", "info", "warn", "error"];
|
|
@@ -139,11 +139,11 @@ export const LogPanel = ({ logs, clearLogs }: LogPanelProps) => {
|
|
|
139
139
|
const isExpanded = expandedArgs.has(key);
|
|
140
140
|
|
|
141
141
|
if (arg === null) {
|
|
142
|
-
return <text className={
|
|
142
|
+
return <text className={"cp-argNull"}>null</text>;
|
|
143
143
|
}
|
|
144
144
|
|
|
145
145
|
if (arg === undefined) {
|
|
146
|
-
return <text className={
|
|
146
|
+
return <text className={"cp-argUndefined"}>undefined</text>;
|
|
147
147
|
}
|
|
148
148
|
|
|
149
149
|
if (typeof arg === "string") {
|
|
@@ -151,17 +151,16 @@ export const LogPanel = ({ logs, clearLogs }: LogPanelProps) => {
|
|
|
151
151
|
const shouldTruncate = arg.length > MAX_LENGTH;
|
|
152
152
|
|
|
153
153
|
if (!shouldTruncate) {
|
|
154
|
-
return <text className={
|
|
154
|
+
return <text className={`cp-argString cp-argString--${level}`}>{arg}</text>;
|
|
155
155
|
}
|
|
156
156
|
|
|
157
|
-
// 문자열이 길 경우 토글 버튼 추가
|
|
158
157
|
return (
|
|
159
|
-
<view className={
|
|
160
|
-
<view className={
|
|
161
|
-
<text className={
|
|
158
|
+
<view className={"cp-argObject"}>
|
|
159
|
+
<view className={"cp-argObjectHeader"} bindtap={() => toggleArg(key)}>
|
|
160
|
+
<text className={"cp-toggleIndicator"}>
|
|
162
161
|
{isExpanded ? "▼" : "▶"}
|
|
163
162
|
</text>
|
|
164
|
-
<text className={
|
|
163
|
+
<text className={`cp-argString cp-argString--${level}`}>
|
|
165
164
|
{isExpanded ? arg : `${arg.slice(0, MAX_LENGTH)}...`}
|
|
166
165
|
</text>
|
|
167
166
|
</view>
|
|
@@ -170,7 +169,7 @@ export const LogPanel = ({ logs, clearLogs }: LogPanelProps) => {
|
|
|
170
169
|
}
|
|
171
170
|
|
|
172
171
|
if (typeof arg === "number" || typeof arg === "boolean") {
|
|
173
|
-
return <text className={
|
|
172
|
+
return <text className={`cp-argPrimitive cp-argPrimitive--${level}`}>{String(arg)}</text>;
|
|
174
173
|
}
|
|
175
174
|
|
|
176
175
|
if (typeof arg === "object") {
|
|
@@ -206,50 +205,50 @@ export const LogPanel = ({ logs, clearLogs }: LogPanelProps) => {
|
|
|
206
205
|
}
|
|
207
206
|
|
|
208
207
|
return (
|
|
209
|
-
<view className={
|
|
210
|
-
<view className={
|
|
211
|
-
<text className={
|
|
208
|
+
<view className={"cp-argObject"}>
|
|
209
|
+
<view className={"cp-argObjectHeader"} bindtap={() => toggleArg(key)}>
|
|
210
|
+
<text className={"cp-toggleIndicator"}>
|
|
212
211
|
{isExpanded ? "▼" : "▶"}
|
|
213
212
|
</text>
|
|
214
|
-
<text className={
|
|
213
|
+
<text className={"cp-argObjectPreview"}>{preview}</text>
|
|
215
214
|
</view>
|
|
216
215
|
{isExpanded && (
|
|
217
|
-
<view className={
|
|
218
|
-
<text className={
|
|
216
|
+
<view className={"cp-argObjectContent"}>
|
|
217
|
+
<text className={"cp-argObjectJson"}>{jsonString}</text>
|
|
219
218
|
</view>
|
|
220
219
|
)}
|
|
221
220
|
</view>
|
|
222
221
|
);
|
|
223
222
|
}
|
|
224
223
|
|
|
225
|
-
return <text className={
|
|
224
|
+
return <text className={`cp-argPrimitive cp-argPrimitive--${level}`}>{String(arg)}</text>;
|
|
226
225
|
};
|
|
227
226
|
|
|
228
227
|
return (
|
|
229
228
|
<view
|
|
230
|
-
className={
|
|
229
|
+
className={"cp-logContainer"}
|
|
231
230
|
bindtap={() => { if (filterOpen) setFilterOpen(false); }}
|
|
232
231
|
>
|
|
233
|
-
<view className={
|
|
234
|
-
<view className={
|
|
232
|
+
<view className={"cp-logHeader"}>
|
|
233
|
+
<view className={"cp-filterWrapper"}>
|
|
235
234
|
<view
|
|
236
|
-
className={
|
|
235
|
+
className={"cp-filterButton"}
|
|
237
236
|
catchtap={() => setFilterOpen((v) => !v)}
|
|
238
237
|
>
|
|
239
|
-
<text className={
|
|
238
|
+
<text className={"cp-filterButtonText"}>Filter ▼</text>
|
|
240
239
|
</view>
|
|
241
240
|
{filterOpen && (
|
|
242
|
-
<view className={
|
|
241
|
+
<view className={"cp-filterDropdown"} catchtap={() => {}}>
|
|
243
242
|
{LOG_LEVELS.map((level) => (
|
|
244
243
|
<view
|
|
245
244
|
key={level}
|
|
246
|
-
className={
|
|
245
|
+
className={"cp-filterOption"}
|
|
247
246
|
bindtap={() => toggleLevel(level)}
|
|
248
247
|
>
|
|
249
|
-
<text className={
|
|
248
|
+
<text className={`cp-filterCheckbox cp-filterCheckbox--${level}`}>
|
|
250
249
|
{enabledLevels.has(level) ? "✅" : "⬜"}
|
|
251
250
|
</text>
|
|
252
|
-
<text className={
|
|
251
|
+
<text className={`cp-filterLabel cp-filterLabel--${level}`}>
|
|
253
252
|
{level.toUpperCase()}
|
|
254
253
|
</text>
|
|
255
254
|
</view>
|
|
@@ -257,11 +256,11 @@ export const LogPanel = ({ logs, clearLogs }: LogPanelProps) => {
|
|
|
257
256
|
</view>
|
|
258
257
|
)}
|
|
259
258
|
</view>
|
|
260
|
-
<view className={
|
|
261
|
-
<text className={
|
|
259
|
+
<view className={"cp-searchWrapper"}>
|
|
260
|
+
<text className={"cp-searchPrompt"}>{"›"}</text>
|
|
262
261
|
<input
|
|
263
262
|
ref={searchInputRef}
|
|
264
|
-
className={
|
|
263
|
+
className={"cp-searchInput"}
|
|
265
264
|
placeholder="Search logs..."
|
|
266
265
|
bindinput={(e: BaseEvent<"bindinput", InputInputEvent>) =>
|
|
267
266
|
setSearchQuery(e.detail.value)
|
|
@@ -269,7 +268,7 @@ export const LogPanel = ({ logs, clearLogs }: LogPanelProps) => {
|
|
|
269
268
|
/>
|
|
270
269
|
{searchQuery.length > 0 && (
|
|
271
270
|
<view
|
|
272
|
-
className={
|
|
271
|
+
className={"cp-searchClear"}
|
|
273
272
|
bindtap={() => {
|
|
274
273
|
setSearchQuery("");
|
|
275
274
|
searchInputRef.current
|
|
@@ -277,26 +276,26 @@ export const LogPanel = ({ logs, clearLogs }: LogPanelProps) => {
|
|
|
277
276
|
.exec();
|
|
278
277
|
}}
|
|
279
278
|
>
|
|
280
|
-
<text className={
|
|
279
|
+
<text className={"cp-searchClearText"}>✕</text>
|
|
281
280
|
</view>
|
|
282
281
|
)}
|
|
283
282
|
</view>
|
|
284
283
|
<view style={{ display: "flex", flexDirection: "row", gap: 8 }}>
|
|
285
|
-
<view className={
|
|
286
|
-
<text className={
|
|
284
|
+
<view className={"cp-clearButton"} bindtap={clearLogs}>
|
|
285
|
+
<text className={"cp-clearButtonText"}>🗑</text>
|
|
287
286
|
</view>
|
|
288
287
|
</view>
|
|
289
288
|
</view>
|
|
290
289
|
<FadeList
|
|
291
290
|
listRef={listRef}
|
|
292
|
-
className={
|
|
291
|
+
className={"cp-logList"}
|
|
293
292
|
preload-buffer-count={10}
|
|
294
293
|
initial-scroll-index={Math.max(0, filteredLogs.length - 1)}
|
|
295
294
|
>
|
|
296
295
|
{filteredLogs.length === 0 ? (
|
|
297
296
|
<list-item item-key="empty-state">
|
|
298
|
-
<view className={
|
|
299
|
-
<text className={
|
|
297
|
+
<view className={"cp-placeholder"}>
|
|
298
|
+
<text className={"cp-placeholderText"}>
|
|
300
299
|
No logs yet. Try console.log("Hello!")
|
|
301
300
|
</text>
|
|
302
301
|
</view>
|
|
@@ -305,20 +304,20 @@ export const LogPanel = ({ logs, clearLogs }: LogPanelProps) => {
|
|
|
305
304
|
filteredLogs.map((log) => {
|
|
306
305
|
return (
|
|
307
306
|
<list-item key={log.id} item-key={log.id}>
|
|
308
|
-
<view className={
|
|
309
|
-
<view className={
|
|
310
|
-
<text className={
|
|
307
|
+
<view className={`cp-logItem cp-logItem--${log.level}`}>
|
|
308
|
+
<view className={"cp-logItemHeader"}>
|
|
309
|
+
<text className={`cp-logLevel cp-logLevel--${log.level}`}>
|
|
311
310
|
{log.level.toUpperCase()}
|
|
312
311
|
</text>
|
|
313
|
-
<text className={
|
|
312
|
+
<text className={"cp-logTime"}>
|
|
314
313
|
{new Date(log.timestamp).toISOString()}
|
|
315
314
|
</text>
|
|
316
315
|
</view>
|
|
317
|
-
<view className={
|
|
316
|
+
<view className={"cp-logArgsContainer"}>
|
|
318
317
|
{log.args.map((arg, index) => (
|
|
319
318
|
<view
|
|
320
319
|
key={`${log.id}-${index.toString()}`}
|
|
321
|
-
className={
|
|
320
|
+
className={"cp-logArgItem"}
|
|
322
321
|
>
|
|
323
322
|
{renderArg(
|
|
324
323
|
arg,
|
|
@@ -334,19 +333,19 @@ export const LogPanel = ({ logs, clearLogs }: LogPanelProps) => {
|
|
|
334
333
|
})
|
|
335
334
|
)}
|
|
336
335
|
</FadeList>
|
|
337
|
-
<view className={
|
|
338
|
-
<text className={
|
|
336
|
+
<view className={"cp-replInputRow"}>
|
|
337
|
+
<text className={"cp-replPrompt"}>{"›"}</text>
|
|
339
338
|
<input
|
|
340
339
|
ref={inputRef}
|
|
341
|
-
className={
|
|
340
|
+
className={"cp-replInput"}
|
|
342
341
|
placeholder="enter code..."
|
|
343
342
|
bindinput={(e: BaseEvent<"bindinput", InputInputEvent>) =>
|
|
344
343
|
setCode(e.detail.value)
|
|
345
344
|
}
|
|
346
345
|
bindconfirm={handleRun}
|
|
347
346
|
/>
|
|
348
|
-
<view className={
|
|
349
|
-
<text className={
|
|
347
|
+
<view className={"cp-replRunButton"} bindtap={handleRun}>
|
|
348
|
+
<text className={"cp-replRunButtonText"}>Run</text>
|
|
350
349
|
</view>
|
|
351
350
|
</view>
|
|
352
351
|
</view>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import "./NetworkPanel.css";
|
|
2
2
|
|
|
3
3
|
interface NetworkDetailSectionProps {
|
|
4
4
|
headers?: Record<string, string> | undefined;
|
|
@@ -14,28 +14,28 @@ export const NetworkDetailSection = ({
|
|
|
14
14
|
return (
|
|
15
15
|
<>
|
|
16
16
|
{/* Headers */}
|
|
17
|
-
<view className={
|
|
18
|
-
<text className={
|
|
17
|
+
<view className={"np-detailSection"}>
|
|
18
|
+
<text className={"np-detailSectionTitle"}>Headers</text>
|
|
19
19
|
{headers && Object.keys(headers).length > 0 ? (
|
|
20
|
-
<view className={
|
|
20
|
+
<view className={"np-table"}>
|
|
21
21
|
{Object.entries(headers).map(([key, value]) => (
|
|
22
|
-
<view key={key} className={
|
|
23
|
-
<text className={
|
|
24
|
-
<text className={
|
|
22
|
+
<view key={key} className={"np-tableRow"}>
|
|
23
|
+
<text className={"np-tableKey"}>{key}</text>
|
|
24
|
+
<text className={"np-tableValue"}>{value}</text>
|
|
25
25
|
</view>
|
|
26
26
|
))}
|
|
27
27
|
</view>
|
|
28
28
|
) : (
|
|
29
|
-
<text className={
|
|
29
|
+
<text className={"np-emptyText"}>No headers</text>
|
|
30
30
|
)}
|
|
31
31
|
</view>
|
|
32
32
|
|
|
33
33
|
{/* Body */}
|
|
34
|
-
<view className={
|
|
35
|
-
<text className={
|
|
36
|
-
{error && <text className={
|
|
37
|
-
{body && <text className={
|
|
38
|
-
{!error && !body && <text className={
|
|
34
|
+
<view className={"np-detailSection"}>
|
|
35
|
+
<text className={"np-detailSectionTitle"}>Body</text>
|
|
36
|
+
{error && <text className={"np-errorText"}>{error}</text>}
|
|
37
|
+
{body && <text className={"np-bodyText"}>{body}</text>}
|
|
38
|
+
{!error && !body && <text className={"np-emptyText"}>No body</text>}
|
|
39
39
|
</view>
|
|
40
40
|
</>
|
|
41
41
|
);
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
.np-container {
|
|
2
|
+
display: flex;
|
|
3
|
+
flex-direction: column;
|
|
4
|
+
flex: 1;
|
|
5
|
+
padding-top: 4px;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.np-header {
|
|
9
|
+
display: flex;
|
|
10
|
+
flex-direction: row;
|
|
11
|
+
align-items: center;
|
|
12
|
+
justify-content: space-between;
|
|
13
|
+
margin-bottom: 8px;
|
|
14
|
+
padding-bottom: 4px;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.np-count {
|
|
18
|
+
font-size: 0.8125rem;
|
|
19
|
+
line-height: 1.125rem;
|
|
20
|
+
font-weight: var(--lynx-console-font-weight-regular);
|
|
21
|
+
color: var(--lynx-console-color-fg-neutral-subtle);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.np-clearButton {
|
|
25
|
+
padding: 3px 6px;
|
|
26
|
+
background-color: var(--lynx-console-color-bg-neutral-weak);
|
|
27
|
+
border-radius: 4px;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.np-clearButtonText {
|
|
31
|
+
font-size: 0.8125rem;
|
|
32
|
+
line-height: 1.125rem;
|
|
33
|
+
font-weight: var(--lynx-console-font-weight-medium);
|
|
34
|
+
color: var(--lynx-console-color-fg-neutral-muted);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.np-list {
|
|
38
|
+
flex: 1;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.np-placeholder {
|
|
42
|
+
display: flex;
|
|
43
|
+
align-items: center;
|
|
44
|
+
justify-content: center;
|
|
45
|
+
height: 100%;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.np-placeholderText {
|
|
49
|
+
font-size: 0.875rem;
|
|
50
|
+
line-height: 1.1875rem;
|
|
51
|
+
font-weight: var(--lynx-console-font-weight-regular);
|
|
52
|
+
color: var(--lynx-console-color-fg-disabled);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.np-item {
|
|
56
|
+
padding: 8px;
|
|
57
|
+
border-bottom-width: 1px;
|
|
58
|
+
border-bottom-color: var(--lynx-console-color-stroke-neutral-weak);
|
|
59
|
+
border-bottom-style: solid;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.np-item--pending {
|
|
63
|
+
background-color: var(--lynx-console-color-palette-gray-100);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.np-item--error {
|
|
67
|
+
background-color: var(--lynx-console-color-palette-red-100);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.np-itemHeader {
|
|
71
|
+
display: flex;
|
|
72
|
+
flex-direction: row;
|
|
73
|
+
align-items: center;
|
|
74
|
+
margin-bottom: 4px;
|
|
75
|
+
gap: 8px;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.np-method {
|
|
79
|
+
font-size: 0.75rem;
|
|
80
|
+
line-height: 1rem;
|
|
81
|
+
font-weight: var(--lynx-console-font-weight-bold);
|
|
82
|
+
padding: 0 4px;
|
|
83
|
+
border-radius: 2px;
|
|
84
|
+
color: var(--lynx-console-color-fg-neutral);
|
|
85
|
+
background-color: var(--lynx-console-color-bg-neutral-weak);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.np-method--GET {
|
|
89
|
+
color: var(--lynx-console-color-palette-blue-600);
|
|
90
|
+
background-color: var(--lynx-console-color-palette-blue-100);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.np-method--POST {
|
|
94
|
+
color: var(--lynx-console-color-palette-green-600);
|
|
95
|
+
background-color: var(--lynx-console-color-palette-green-100);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.np-method--PUT {
|
|
99
|
+
color: var(--lynx-console-color-palette-yellow-600);
|
|
100
|
+
background-color: var(--lynx-console-color-palette-yellow-100);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.np-method--PATCH {
|
|
104
|
+
color: var(--lynx-console-color-palette-purple-600);
|
|
105
|
+
background-color: var(--lynx-console-color-palette-purple-100);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.np-method--DELETE {
|
|
109
|
+
color: var(--lynx-console-color-palette-red-600);
|
|
110
|
+
background-color: var(--lynx-console-color-palette-red-100);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.np-statusCode {
|
|
114
|
+
font-size: 0.75rem;
|
|
115
|
+
line-height: 1rem;
|
|
116
|
+
font-weight: var(--lynx-console-font-weight-bold);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
.np-statusCode--success {
|
|
120
|
+
color: var(--lynx-console-color-palette-green-600);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.np-statusCode--error {
|
|
124
|
+
color: var(--lynx-console-color-palette-red-600);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.np-statusCode--pending {
|
|
128
|
+
color: var(--lynx-console-color-fg-neutral-subtle);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.np-time {
|
|
132
|
+
font-size: 0.75rem;
|
|
133
|
+
line-height: 1rem;
|
|
134
|
+
font-weight: var(--lynx-console-font-weight-regular);
|
|
135
|
+
color: var(--lynx-console-color-fg-neutral-subtle);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
.np-url {
|
|
139
|
+
font-size: 0.8125rem;
|
|
140
|
+
line-height: 1.125rem;
|
|
141
|
+
font-weight: var(--lynx-console-font-weight-regular);
|
|
142
|
+
color: var(--lynx-console-color-fg-neutral);
|
|
143
|
+
word-break: break-all;
|
|
144
|
+
margin-bottom: 4px;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.np-path {
|
|
148
|
+
font-size: 0.8125rem;
|
|
149
|
+
line-height: 1.125rem;
|
|
150
|
+
font-weight: var(--lynx-console-font-weight-regular);
|
|
151
|
+
color: var(--lynx-console-color-fg-neutral);
|
|
152
|
+
word-break: break-all;
|
|
153
|
+
white-space: pre-wrap;
|
|
154
|
+
overflow: visible;
|
|
155
|
+
margin-bottom: 4px;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
.np-details {
|
|
159
|
+
font-size: 0.8125rem;
|
|
160
|
+
line-height: 1.125rem;
|
|
161
|
+
font-weight: var(--lynx-console-font-weight-regular);
|
|
162
|
+
color: var(--lynx-console-color-fg-neutral-subtle);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
.np-detailsContainer {
|
|
166
|
+
margin-top: 12px;
|
|
167
|
+
padding-top: 12px;
|
|
168
|
+
border-top-width: 1px;
|
|
169
|
+
border-top-color: var(--lynx-console-color-stroke-neutral-subtle);
|
|
170
|
+
border-top-style: solid;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
.np-tabs {
|
|
174
|
+
display: flex;
|
|
175
|
+
flex-direction: row;
|
|
176
|
+
gap: 4px;
|
|
177
|
+
padding-bottom: 6px;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
.np-tab {
|
|
181
|
+
padding: 4px 8px;
|
|
182
|
+
border-radius: 4px;
|
|
183
|
+
cursor: pointer;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
.np-tab--active {
|
|
187
|
+
background-color: var(--lynx-console-color-bg-neutral-weak);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
.np-tabText {
|
|
191
|
+
font-size: 0.875rem;
|
|
192
|
+
line-height: 1.1875rem;
|
|
193
|
+
font-weight: var(--lynx-console-font-weight-medium);
|
|
194
|
+
color: var(--lynx-console-color-fg-neutral-subtle);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
.np-tabText--active {
|
|
198
|
+
color: var(--lynx-console-color-fg-neutral);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
.np-tabContent {
|
|
202
|
+
padding-top: 8px;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
.np-detailSection {
|
|
206
|
+
margin-bottom: 12px;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
.np-detailSectionTitle {
|
|
210
|
+
font-size: 0.8125rem;
|
|
211
|
+
line-height: 1.125rem;
|
|
212
|
+
font-weight: var(--lynx-console-font-weight-bold);
|
|
213
|
+
color: var(--lynx-console-color-fg-neutral);
|
|
214
|
+
margin-bottom: 8px;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
.np-table {
|
|
218
|
+
display: flex;
|
|
219
|
+
flex-direction: column;
|
|
220
|
+
gap: 4px;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
.np-tableRow {
|
|
224
|
+
display: flex;
|
|
225
|
+
flex-direction: row;
|
|
226
|
+
gap: 8px;
|
|
227
|
+
padding: 4px 8px;
|
|
228
|
+
background-color: var(--lynx-console-color-bg-neutral-weak);
|
|
229
|
+
border-radius: 2px;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
.np-tableKey {
|
|
233
|
+
font-size: 0.8125rem;
|
|
234
|
+
line-height: 1.125rem;
|
|
235
|
+
font-weight: var(--lynx-console-font-weight-bold);
|
|
236
|
+
color: var(--lynx-console-color-fg-neutral-subtle);
|
|
237
|
+
min-width: 70px;
|
|
238
|
+
flex-shrink: 0;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
.np-tableValue {
|
|
242
|
+
font-size: 0.8125rem;
|
|
243
|
+
line-height: 1.125rem;
|
|
244
|
+
font-weight: var(--lynx-console-font-weight-regular);
|
|
245
|
+
color: var(--lynx-console-color-fg-neutral);
|
|
246
|
+
word-break: break-all;
|
|
247
|
+
flex: 1;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
.np-bodyText {
|
|
251
|
+
font-size: 0.8125rem;
|
|
252
|
+
line-height: 1.125rem;
|
|
253
|
+
font-weight: var(--lynx-console-font-weight-regular);
|
|
254
|
+
color: var(--lynx-console-color-fg-neutral);
|
|
255
|
+
padding: 8px;
|
|
256
|
+
background-color: var(--lynx-console-color-bg-neutral-weak);
|
|
257
|
+
border-radius: 4px;
|
|
258
|
+
word-break: break-all;
|
|
259
|
+
white-space: pre-wrap;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
.np-errorText {
|
|
263
|
+
font-size: 0.8125rem;
|
|
264
|
+
line-height: 1.125rem;
|
|
265
|
+
font-weight: var(--lynx-console-font-weight-regular);
|
|
266
|
+
color: var(--lynx-console-color-palette-red-600);
|
|
267
|
+
padding: 8px;
|
|
268
|
+
background-color: var(--lynx-console-color-palette-red-100);
|
|
269
|
+
border-radius: 4px;
|
|
270
|
+
word-break: break-all;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
.np-emptyText {
|
|
274
|
+
font-size: 0.8125rem;
|
|
275
|
+
line-height: 1.125rem;
|
|
276
|
+
font-weight: var(--lynx-console-font-weight-regular);
|
|
277
|
+
color: var(--lynx-console-color-fg-disabled);
|
|
278
|
+
text-align: center;
|
|
279
|
+
padding: 16px 0;
|
|
280
|
+
}
|