@x1a0f3n9/dsh-client-ui-primitives 0.1.5-rc.3
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/LICENSE +21 -0
- package/README.i18n.yaml +6 -0
- package/README.md +164 -0
- package/README.zh.md +164 -0
- package/lib/Button.module.css +79 -0
- package/lib/ConnectionIndicator.module.css +107 -0
- package/lib/DiffBlock.module.css +101 -0
- package/lib/DisclosureRow.module.css +84 -0
- package/lib/FileTypeIcon.module.css +50 -0
- package/lib/HoverCard.module.css +54 -0
- package/lib/Input.module.css +38 -0
- package/lib/JsonTree.module.css +222 -0
- package/lib/Menu.module.css +248 -0
- package/lib/Modal.module.css +103 -0
- package/lib/OnboardingSurface.module.css +29 -0
- package/lib/Pill.module.css +27 -0
- package/lib/ReadBlock.module.css +111 -0
- package/lib/RiskConfirmation.module.css +73 -0
- package/lib/SearchBlock.module.css +112 -0
- package/lib/StateDot.module.css +73 -0
- package/lib/Switch.module.css +50 -0
- package/lib/Tag.module.css +57 -0
- package/lib/TerminalBlock.module.css +205 -0
- package/lib/Toast.module.css +72 -0
- package/lib/Tooltip.module.css +42 -0
- package/lib/WebBlock.module.css +141 -0
- package/lib/index.js +8030 -0
- package/lib/markdown/CodeBlock.module.css +130 -0
- package/lib/markdown/JsonBlock.module.css +32 -0
- package/lib/markdown/MarkdownText.module.css +321 -0
- package/lib/types/BrandWordmark.d.ts +15 -0
- package/lib/types/Button.d.ts +18 -0
- package/lib/types/CodeFileIcon.d.ts +12 -0
- package/lib/types/ConnectionIndicator.d.ts +25 -0
- package/lib/types/DiffBlock.d.ts +53 -0
- package/lib/types/DisclosureRow.d.ts +29 -0
- package/lib/types/FileTypeIcon.d.ts +43 -0
- package/lib/types/FishLogo.d.ts +16 -0
- package/lib/types/FoldToggle.d.ts +20 -0
- package/lib/types/HoverCard.d.ts +24 -0
- package/lib/types/Input.d.ts +11 -0
- package/lib/types/JsonTree.d.ts +48 -0
- package/lib/types/LinkIcon.d.ts +38 -0
- package/lib/types/Menu.d.ts +85 -0
- package/lib/types/Modal.d.ts +35 -0
- package/lib/types/OnboardingSurface.d.ts +11 -0
- package/lib/types/Pill.d.ts +13 -0
- package/lib/types/ReadBlock.d.ts +47 -0
- package/lib/types/ReferenceIcon.d.ts +16 -0
- package/lib/types/RiskConfirmation.d.ts +20 -0
- package/lib/types/SearchBlock.d.ts +72 -0
- package/lib/types/StateDot.d.ts +18 -0
- package/lib/types/Switch.d.ts +20 -0
- package/lib/types/Tag.d.ts +32 -0
- package/lib/types/TerminalBlock.d.ts +61 -0
- package/lib/types/Toast.d.ts +32 -0
- package/lib/types/Tooltip.d.ts +34 -0
- package/lib/types/WebBlock.d.ts +61 -0
- package/lib/types/ansi.d.ts +17 -0
- package/lib/types/clipboard.d.ts +9 -0
- package/lib/types/code-file-icon-artwork.d.ts +54 -0
- package/lib/types/code-file-types.d.ts +30 -0
- package/lib/types/file-size.d.ts +8 -0
- package/lib/types/head-tail-cap.d.ts +23 -0
- package/lib/types/icons/index.d.ts +194 -0
- package/lib/types/icons/props.d.ts +9 -0
- package/lib/types/index.d.ts +66 -0
- package/lib/types/markdown/CodeBlock.d.ts +28 -0
- package/lib/types/markdown/JsonBlock.d.ts +8 -0
- package/lib/types/markdown/MarkdownText.d.ts +42 -0
- package/lib/types/markdown/cjkFriendlyStrong.d.ts +9 -0
- package/lib/types/markdown/highlight.d.ts +142 -0
- package/lib/types/markdown/incremental.d.ts +80 -0
- package/lib/types/markdown/katex.d.ts +27 -0
- package/lib/types/markdown/mathCompatibility.d.ts +11 -0
- package/lib/types/markdown/parse.d.ts +25 -0
- package/lib/types/markdown/plain-text.d.ts +22 -0
- package/lib/types/markdown/render.d.ts +138 -0
- package/lib/types/markdown/useViewportHighlighting.d.ts +11 -0
- package/lib/types/pointer-grace.d.ts +22 -0
- package/lib/types/rank-by-name.d.ts +22 -0
- package/lib/types/relative-time.d.ts +23 -0
- package/lib/types/use-copy-feedback.d.ts +14 -0
- package/lib/types/useAnchoredMaxHeight.d.ts +11 -0
- package/lib/types/useAnchoredPosition.d.ts +34 -0
- package/lib/types/useDismissOnOutsidePointer.d.ts +11 -0
- package/lib/types/user-text.d.ts +39 -0
- package/lib/user-text.module.css +43 -0
- package/package.json +58 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/* Full-viewport layer (figma Mask + Dialog 451:18655): mask + centered card. */
|
|
2
|
+
.root {
|
|
3
|
+
position: fixed;
|
|
4
|
+
inset: 0;
|
|
5
|
+
z-index: 1000;
|
|
6
|
+
display: flex;
|
|
7
|
+
align-items: center;
|
|
8
|
+
justify-content: center;
|
|
9
|
+
padding: 24px;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/* User/spec mask: rgba(0,0,0,0.24) + blur(2px) via --dsw-alias-bg-mask-1 /
|
|
13
|
+
--dsw-mask-blur (light); dark theme raises mask opacity. */
|
|
14
|
+
.mask {
|
|
15
|
+
position: absolute;
|
|
16
|
+
inset: 0;
|
|
17
|
+
background: var(--dsw-alias-bg-mask-1);
|
|
18
|
+
backdrop-filter: var(--dsw-mask-blur);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/* Dialog card: r24, elevation-prominent, layer-2 fill, pb 24. */
|
|
22
|
+
.dialog {
|
|
23
|
+
position: relative;
|
|
24
|
+
z-index: 1;
|
|
25
|
+
display: flex;
|
|
26
|
+
flex-direction: column;
|
|
27
|
+
gap: 20px;
|
|
28
|
+
width: min(380px, 100%);
|
|
29
|
+
padding: 0 0 24px;
|
|
30
|
+
overflow: hidden;
|
|
31
|
+
border: 0;
|
|
32
|
+
border-radius: 24px;
|
|
33
|
+
background: var(--dsw-alias-bg-layer-2);
|
|
34
|
+
box-shadow: var(--dsw-elevation-prominent);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.content {
|
|
38
|
+
display: flex;
|
|
39
|
+
flex-direction: column;
|
|
40
|
+
width: 100%;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/* Header row (figma Title row): pad l24/t22/r14/b12, SPACE_BETWEEN —
|
|
44
|
+
* title left, close button right. */
|
|
45
|
+
.header {
|
|
46
|
+
display: flex;
|
|
47
|
+
align-items: center;
|
|
48
|
+
justify-content: space-between;
|
|
49
|
+
gap: 8px;
|
|
50
|
+
padding: 22px 14px 12px 24px;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.title {
|
|
54
|
+
margin: 0;
|
|
55
|
+
font-size: 16px;
|
|
56
|
+
line-height: 24px;
|
|
57
|
+
font-weight: 500; /* figma wt510, rendered 500 */
|
|
58
|
+
color: var(--dsw-alias-label-primary);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.close {
|
|
62
|
+
flex: none;
|
|
63
|
+
display: inline-flex;
|
|
64
|
+
align-items: center;
|
|
65
|
+
justify-content: center;
|
|
66
|
+
width: 28px;
|
|
67
|
+
height: 28px;
|
|
68
|
+
border: none;
|
|
69
|
+
border-radius: 8px;
|
|
70
|
+
background: transparent;
|
|
71
|
+
cursor: pointer;
|
|
72
|
+
color: var(--dsw-alias-label-secondary);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.close:hover {
|
|
76
|
+
background: var(--dsw-alias-interactive-bg-hover);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/* Description and body share the 332px content column (24px side pads). */
|
|
80
|
+
.description {
|
|
81
|
+
margin: 0;
|
|
82
|
+
padding: 0 24px;
|
|
83
|
+
font-size: 14px;
|
|
84
|
+
line-height: 22px;
|
|
85
|
+
font-weight: 400;
|
|
86
|
+
color: var(--dsw-alias-label-primary);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.body {
|
|
90
|
+
display: flex;
|
|
91
|
+
flex-direction: column;
|
|
92
|
+
min-width: 0;
|
|
93
|
+
margin-top: 20px;
|
|
94
|
+
padding: 0 24px;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.footer {
|
|
98
|
+
display: flex;
|
|
99
|
+
align-items: center;
|
|
100
|
+
justify-content: flex-end;
|
|
101
|
+
gap: 8px;
|
|
102
|
+
padding: 0 24px;
|
|
103
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/* First-run stage: keep the product top bar visible, then let onboarding own
|
|
2
|
+
the complete workspace instead of presenting another settings modal. */
|
|
3
|
+
.onboardingOverlay {
|
|
4
|
+
position: fixed;
|
|
5
|
+
inset: 0;
|
|
6
|
+
z-index: 1100;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/* Mask */
|
|
10
|
+
.onboardingMask {
|
|
11
|
+
position: absolute;
|
|
12
|
+
left: 0px;
|
|
13
|
+
right: 0px;
|
|
14
|
+
top: 80px;
|
|
15
|
+
bottom: 0px;
|
|
16
|
+
background: rgba(0, 0, 0, 0.24);
|
|
17
|
+
/* Mask-blur */
|
|
18
|
+
backdrop-filter: blur(2px);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.onboardingStage {
|
|
22
|
+
position: absolute;
|
|
23
|
+
z-index: 1;
|
|
24
|
+
inset: 0;
|
|
25
|
+
display: flex;
|
|
26
|
+
justify-content: center;
|
|
27
|
+
overflow: hidden;
|
|
28
|
+
background: var(--dsw-alias-bg-layer-1);
|
|
29
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
.pill {
|
|
2
|
+
display: inline-flex;
|
|
3
|
+
align-items: center;
|
|
4
|
+
gap: 4px;
|
|
5
|
+
height: 24px;
|
|
6
|
+
padding: 0 8px;
|
|
7
|
+
border: none;
|
|
8
|
+
border-radius: 12px;
|
|
9
|
+
font-size: 12px;
|
|
10
|
+
line-height: 18px;
|
|
11
|
+
color: var(--dsw-alias-label-secondary);
|
|
12
|
+
background: var(--dsw-alias-bg-layer-2);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.interactive {
|
|
16
|
+
cursor: pointer;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.interactive:hover {
|
|
20
|
+
background: var(--dsw-alias-interactive-bg-hover);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.active {
|
|
24
|
+
color: var(--dsw-alias-label-primary);
|
|
25
|
+
background: var(--dsw-alias-button-ghost-active-fill);
|
|
26
|
+
box-shadow: inset 0 0 0 1px var(--dsw-alias-button-ghost-active-border);
|
|
27
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
.block {
|
|
2
|
+
--dsl-read-radius: 12px;
|
|
3
|
+
--dsl-read-line-height: 22px;
|
|
4
|
+
/* Fixed-width gutter column for the line numbers, so the content edge stays
|
|
5
|
+
put down the whole window regardless of how wide the numbers grow. */
|
|
6
|
+
--dsl-read-gutter: 48px;
|
|
7
|
+
|
|
8
|
+
position: relative;
|
|
9
|
+
margin: 16px 0;
|
|
10
|
+
color: var(--dsw-alias-label-primary);
|
|
11
|
+
background: var(--dsw-alias-markdown-code-block);
|
|
12
|
+
border-radius: var(--dsl-read-radius);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.banner {
|
|
16
|
+
display: flex;
|
|
17
|
+
justify-content: space-between;
|
|
18
|
+
align-items: center;
|
|
19
|
+
gap: 12px;
|
|
20
|
+
padding: 9px 14px;
|
|
21
|
+
background: var(--dsw-alias-markdown-code-block-banner);
|
|
22
|
+
border-top-left-radius: var(--dsl-read-radius);
|
|
23
|
+
border-top-right-radius: var(--dsl-read-radius);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.label {
|
|
27
|
+
min-width: 0;
|
|
28
|
+
overflow: hidden;
|
|
29
|
+
text-overflow: ellipsis;
|
|
30
|
+
white-space: nowrap;
|
|
31
|
+
color: var(--dsw-alias-label-primary);
|
|
32
|
+
font-family: var(--ds-font-family-code);
|
|
33
|
+
font-size: 12px;
|
|
34
|
+
line-height: 18px;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.action {
|
|
38
|
+
display: flex;
|
|
39
|
+
align-items: center;
|
|
40
|
+
flex-shrink: 0;
|
|
41
|
+
gap: 12px;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.count {
|
|
45
|
+
color: var(--dsw-alias-label-tertiary);
|
|
46
|
+
font: var(--dsw-font-xs-13);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.lang {
|
|
50
|
+
color: var(--dsw-alias-label-tertiary);
|
|
51
|
+
font-family: var(--ds-font-family-code);
|
|
52
|
+
font-size: 12px;
|
|
53
|
+
line-height: 18px;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.copyButton {
|
|
57
|
+
background-color: transparent;
|
|
58
|
+
border: none;
|
|
59
|
+
padding: 0;
|
|
60
|
+
margin: 0;
|
|
61
|
+
color: var(--dsw-alias-label-secondary);
|
|
62
|
+
cursor: pointer;
|
|
63
|
+
font: var(--dsw-font-xs-13);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.body {
|
|
67
|
+
padding: 12px 0;
|
|
68
|
+
font: var(--dsw-font-markdown-code-block);
|
|
69
|
+
overflow-x: auto;
|
|
70
|
+
overflow-y: hidden;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/* One row per file line: a fixed gutter column, then the content. No wrapping —
|
|
74
|
+
a source line's leading whitespace is meaningful and scrolls sideways. */
|
|
75
|
+
.line {
|
|
76
|
+
display: flex;
|
|
77
|
+
min-height: var(--dsl-read-line-height);
|
|
78
|
+
line-height: var(--dsl-read-line-height);
|
|
79
|
+
white-space: pre;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.gutter {
|
|
83
|
+
flex: none;
|
|
84
|
+
width: var(--dsl-read-gutter);
|
|
85
|
+
padding-right: 14px;
|
|
86
|
+
text-align: right;
|
|
87
|
+
color: var(--dsw-alias-label-tertiary);
|
|
88
|
+
/* The gutter is chrome, not content: keep it out of a text selection so a
|
|
89
|
+
copy of the visible rows carries the source, not the line numbers. */
|
|
90
|
+
user-select: none;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.content {
|
|
94
|
+
color: var(--dsw-alias-label-primary);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.expand {
|
|
98
|
+
display: block;
|
|
99
|
+
width: 100%;
|
|
100
|
+
padding: 0 0 0 var(--dsl-read-gutter);
|
|
101
|
+
border: none;
|
|
102
|
+
background-color: transparent;
|
|
103
|
+
color: var(--dsw-alias-label-tertiary);
|
|
104
|
+
cursor: pointer;
|
|
105
|
+
font: inherit;
|
|
106
|
+
text-align: left;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.expand:hover {
|
|
110
|
+
color: var(--dsw-alias-label-secondary);
|
|
111
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
.confirmation {
|
|
2
|
+
width: min(440px, 100%);
|
|
3
|
+
max-height: calc(100vh - 48px);
|
|
4
|
+
overflow: hidden;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.confirmationContent {
|
|
8
|
+
min-height: 0;
|
|
9
|
+
overflow-y: auto;
|
|
10
|
+
overscroll-behavior: contain;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
@supports (height: 100dvh) {
|
|
14
|
+
.confirmation {
|
|
15
|
+
max-height: calc(100dvh - 48px);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.warning {
|
|
20
|
+
display: flex;
|
|
21
|
+
align-items: flex-start;
|
|
22
|
+
gap: 10px;
|
|
23
|
+
color: var(--dsw-alias-label-secondary);
|
|
24
|
+
font-size: 14px;
|
|
25
|
+
line-height: 22px;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.warning p {
|
|
29
|
+
margin: 0;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.warningIcon {
|
|
33
|
+
flex: none;
|
|
34
|
+
margin-top: 2px;
|
|
35
|
+
color: var(--dsw-alias-state-error-primary);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.acknowledgement {
|
|
39
|
+
display: flex;
|
|
40
|
+
align-items: flex-start;
|
|
41
|
+
gap: 10px;
|
|
42
|
+
margin-top: 20px;
|
|
43
|
+
color: var(--dsw-alias-label-primary);
|
|
44
|
+
font-size: 14px;
|
|
45
|
+
line-height: 22px;
|
|
46
|
+
cursor: pointer;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.acknowledgement input {
|
|
50
|
+
flex: none;
|
|
51
|
+
width: 16px;
|
|
52
|
+
height: 16px;
|
|
53
|
+
margin: 3px 0 0;
|
|
54
|
+
accent-color: var(--dsw-alias-button-primary-fill);
|
|
55
|
+
cursor: pointer;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.acknowledgement input:focus-visible {
|
|
59
|
+
outline: 2px solid var(--dsw-alias-border-l4);
|
|
60
|
+
outline-offset: 2px;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.acknowledgement input:disabled {
|
|
64
|
+
cursor: default;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.modalAction {
|
|
68
|
+
min-width: 72px;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.confirmAction {
|
|
72
|
+
min-width: 136px;
|
|
73
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
.block {
|
|
2
|
+
--dsl-search-radius: 12px;
|
|
3
|
+
--dsl-search-line-height: 22px;
|
|
4
|
+
|
|
5
|
+
position: relative;
|
|
6
|
+
margin: 16px 0;
|
|
7
|
+
color: var(--dsw-alias-label-primary);
|
|
8
|
+
background: var(--dsw-alias-markdown-code-block);
|
|
9
|
+
border-radius: var(--dsl-search-radius);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.header {
|
|
13
|
+
display: flex;
|
|
14
|
+
align-items: center;
|
|
15
|
+
gap: 12px;
|
|
16
|
+
padding: 9px 14px;
|
|
17
|
+
background: var(--dsw-alias-markdown-code-block-banner);
|
|
18
|
+
border-top-left-radius: var(--dsl-search-radius);
|
|
19
|
+
border-top-right-radius: var(--dsl-search-radius);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.summary {
|
|
23
|
+
flex: 1;
|
|
24
|
+
min-width: 0;
|
|
25
|
+
overflow: hidden;
|
|
26
|
+
text-overflow: ellipsis;
|
|
27
|
+
white-space: nowrap;
|
|
28
|
+
font: var(--dsw-font-xs-13);
|
|
29
|
+
color: var(--dsw-alias-label-secondary);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.copyButton {
|
|
33
|
+
flex: none;
|
|
34
|
+
background-color: transparent;
|
|
35
|
+
border: none;
|
|
36
|
+
padding: 0;
|
|
37
|
+
margin: 0;
|
|
38
|
+
color: var(--dsw-alias-label-secondary);
|
|
39
|
+
cursor: pointer;
|
|
40
|
+
font: var(--dsw-font-xs-13);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.body {
|
|
44
|
+
padding: 8px 14px 12px 0;
|
|
45
|
+
font: var(--dsw-font-markdown-code-block);
|
|
46
|
+
overflow-x: auto;
|
|
47
|
+
overflow-y: hidden;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/* No wrapping: a match line or a path keeps its content on one row and scrolls
|
|
51
|
+
sideways instead of folding. */
|
|
52
|
+
.line {
|
|
53
|
+
min-height: var(--dsl-search-line-height);
|
|
54
|
+
padding-left: 14px;
|
|
55
|
+
white-space: pre;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/* The 1-based line number ahead of a grep match line, dimmed so the match text
|
|
59
|
+
stays the salient content. */
|
|
60
|
+
.lineNumber {
|
|
61
|
+
color: var(--dsw-alias-label-tertiary);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/* A file group's header: a bold path label plus its match count, the whole row
|
|
65
|
+
the collapse control. */
|
|
66
|
+
.fileHeader {
|
|
67
|
+
display: flex;
|
|
68
|
+
align-items: baseline;
|
|
69
|
+
gap: 8px;
|
|
70
|
+
width: 100%;
|
|
71
|
+
min-height: var(--dsl-search-line-height);
|
|
72
|
+
padding: 0 14px;
|
|
73
|
+
border: none;
|
|
74
|
+
background-color: transparent;
|
|
75
|
+
cursor: pointer;
|
|
76
|
+
font: inherit;
|
|
77
|
+
text-align: left;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.filePath {
|
|
81
|
+
min-width: 0;
|
|
82
|
+
font-weight: 600;
|
|
83
|
+
color: var(--dsw-alias-label-primary);
|
|
84
|
+
white-space: pre;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.fileCount {
|
|
88
|
+
flex: none;
|
|
89
|
+
color: var(--dsw-alias-label-tertiary);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.expand {
|
|
93
|
+
display: block;
|
|
94
|
+
width: 100%;
|
|
95
|
+
padding: 0 14px;
|
|
96
|
+
border: none;
|
|
97
|
+
background-color: transparent;
|
|
98
|
+
color: var(--dsw-alias-label-tertiary);
|
|
99
|
+
cursor: pointer;
|
|
100
|
+
font: inherit;
|
|
101
|
+
text-align: left;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.expand:hover {
|
|
105
|
+
color: var(--dsw-alias-label-secondary);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.empty {
|
|
109
|
+
padding: 12px 14px;
|
|
110
|
+
font: var(--dsw-font-markdown-code-block);
|
|
111
|
+
color: var(--dsw-alias-label-tertiary);
|
|
112
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/* Ongoing blue has no alias token (state-business-primary is the 500 step,
|
|
2
|
+
* not this 450) — component-level var pinned to the static scale instead. */
|
|
3
|
+
.dot,
|
|
4
|
+
.matrix {
|
|
5
|
+
--dsh-state-ongoing: var(--dsw-static-deepseek-450);
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/* Solid states: same-color halo via a 0.10-opacity outer layer (::before)
|
|
9
|
+
* with a 6/10-scale solid core. Layer color rides currentColor set per state. */
|
|
10
|
+
.dot {
|
|
11
|
+
position: relative;
|
|
12
|
+
display: inline-block;
|
|
13
|
+
flex: none;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.dot::before {
|
|
17
|
+
content: '';
|
|
18
|
+
position: absolute;
|
|
19
|
+
inset: 0;
|
|
20
|
+
border-radius: 50%;
|
|
21
|
+
corner-shape: round;
|
|
22
|
+
background: currentColor;
|
|
23
|
+
opacity: 0.1;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.dot::after {
|
|
27
|
+
content: '';
|
|
28
|
+
position: absolute;
|
|
29
|
+
inset: 20%;
|
|
30
|
+
border-radius: 50%;
|
|
31
|
+
corner-shape: round;
|
|
32
|
+
background: currentColor;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.dot[data-state='done'] {
|
|
36
|
+
color: var(--dsw-alias-state-success-primary);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.dot[data-state='warning'] {
|
|
40
|
+
color: var(--dsw-alias-state-warn-primary);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.dot[data-state='error'] {
|
|
44
|
+
color: var(--dsw-alias-state-error-primary);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/* Idle is the absence of activity, not a fourth outcome: it stays on the
|
|
48
|
+
* tertiary label color so it recedes beside the three outcome colors. */
|
|
49
|
+
.dot[data-state='idle'] {
|
|
50
|
+
color: var(--dsw-alias-label-tertiary);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/* Pixel chase: each outer cell holds a discrete brightness step (flat keyframe
|
|
54
|
+
* holds, no tweening — the retro feel), peaking when the chase hits it and
|
|
55
|
+
* decaying over the next three cells. Phase offsets come from per-rect
|
|
56
|
+
* animation-delay (index * -125ms) set inline by the component. */
|
|
57
|
+
.matrix {
|
|
58
|
+
flex: none;
|
|
59
|
+
color: var(--dsh-state-ongoing);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.cell {
|
|
63
|
+
fill: currentColor;
|
|
64
|
+
opacity: 0.15;
|
|
65
|
+
animation: dsh-state-dot-chase 1s infinite;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
@keyframes dsh-state-dot-chase {
|
|
69
|
+
0%, 12.4% { opacity: 1; }
|
|
70
|
+
12.5%, 24.9% { opacity: 0.6; }
|
|
71
|
+
25%, 37.4% { opacity: 0.35; }
|
|
72
|
+
37.5%, 100% { opacity: 0.15; }
|
|
73
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/* The on/off appearance keys off aria-checked rather than a parallel class, so
|
|
2
|
+
* the visual state cannot disagree with the state assistive technology reads.
|
|
3
|
+
*
|
|
4
|
+
* The track is a capsule: its radius is half its height, so the corners consume
|
|
5
|
+
* the whole side and the global superellipse would square the ends off against
|
|
6
|
+
* the round thumb inside it. `corner-shape: round` opts the track out, the way
|
|
7
|
+
* every full-round radius does. The corner-shape spec does not catch this one —
|
|
8
|
+
* it recognizes 50%, 100%, and radii at or above 99px, not a radius that is
|
|
9
|
+
* full-round only relative to its own box. */
|
|
10
|
+
.switch {
|
|
11
|
+
box-sizing: border-box;
|
|
12
|
+
position: relative;
|
|
13
|
+
flex: 0 0 auto;
|
|
14
|
+
width: 36px;
|
|
15
|
+
height: 20px;
|
|
16
|
+
padding: 2px;
|
|
17
|
+
border: 0;
|
|
18
|
+
border-radius: 10px;
|
|
19
|
+
corner-shape: round;
|
|
20
|
+
background: var(--dsw-alias-border-l3);
|
|
21
|
+
cursor: pointer;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.switch[aria-checked='true'] {
|
|
25
|
+
background: var(--dsw-alias-brand-primary);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.switch:disabled {
|
|
29
|
+
cursor: default;
|
|
30
|
+
opacity: 0.5;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.switch:focus-visible {
|
|
34
|
+
outline: 2px solid var(--dsw-alias-brand-primary);
|
|
35
|
+
outline-offset: 2px;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.thumb {
|
|
39
|
+
display: block;
|
|
40
|
+
width: 16px;
|
|
41
|
+
height: 16px;
|
|
42
|
+
border-radius: 50%;
|
|
43
|
+
corner-shape: round;
|
|
44
|
+
background: var(--dsw-alias-label-primary-foreground);
|
|
45
|
+
transition: transform 120ms ease;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.switch[aria-checked='true'] .thumb {
|
|
49
|
+
transform: translateX(16px);
|
|
50
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/* Capsule geometry is fixed: a tag reads as one size everywhere, and only its
|
|
2
|
+
* palette varies. Tone colors ride background/border/color so a render site can
|
|
3
|
+
* still position the tag with its own class without touching the palette. */
|
|
4
|
+
.tag {
|
|
5
|
+
display: inline-flex;
|
|
6
|
+
align-items: center;
|
|
7
|
+
border-radius: 999px;
|
|
8
|
+
corner-shape: round;
|
|
9
|
+
padding: 1px 8px;
|
|
10
|
+
font-size: 11px;
|
|
11
|
+
line-height: 17px;
|
|
12
|
+
font-weight: 500;
|
|
13
|
+
white-space: nowrap;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.tag[data-tone='outline'] {
|
|
17
|
+
border: 0.5px solid var(--dsw-alias-border-l4);
|
|
18
|
+
color: var(--dsw-alias-label-tertiary);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.tag[data-tone='solid'] {
|
|
22
|
+
background: var(--dsw-alias-label-primary);
|
|
23
|
+
color: var(--dsw-alias-bg-layer-3);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.tag[data-tone='neutral'] {
|
|
27
|
+
background: var(--dsw-alias-bg-module-platform);
|
|
28
|
+
color: var(--dsw-alias-label-secondary);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.tag[data-tone='quiet'] {
|
|
32
|
+
color: var(--dsw-alias-label-tertiary);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/* Status tones tint their own color for the fill, so a palette change moves
|
|
36
|
+
* fill and text together and neither needs a second token. The tint is 10%,
|
|
37
|
+
* except `warning`, which keeps the 12% the plugin inventory's conditional
|
|
38
|
+
* tag shipped with — matching it is what makes this a pure consolidation. */
|
|
39
|
+
.tag[data-tone='success'] {
|
|
40
|
+
background: color-mix(in srgb, var(--dsw-alias-state-success-primary) 10%, transparent);
|
|
41
|
+
color: var(--dsw-alias-state-success-primary);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.tag[data-tone='info'] {
|
|
45
|
+
background: color-mix(in srgb, var(--dsw-alias-state-business-primary) 10%, transparent);
|
|
46
|
+
color: var(--dsw-alias-state-business-primary);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.tag[data-tone='warning'] {
|
|
50
|
+
background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 12%, transparent);
|
|
51
|
+
color: var(--dsw-alias-state-warn-primary);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.tag[data-tone='danger'] {
|
|
55
|
+
background: color-mix(in srgb, var(--dsw-alias-state-error-primary) 10%, transparent);
|
|
56
|
+
color: var(--dsw-alias-state-error-primary);
|
|
57
|
+
}
|