@celestia-island/hikari 0.43.10 → 0.43.13
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/package.json +1 -1
- package/src/components/HkAboutModal.scss +12 -1
- package/src/components/HkAdaptiveDialog.scss +2 -2
- package/src/components/HkAffixPicker.scss +55 -27
- package/src/components/HkAlert.scss +35 -31
- package/src/components/HkAltSignIn.scss +10 -4
- package/src/components/HkAuthMethodList.scss +5 -5
- package/src/components/HkAuthSubmitButton.scss +3 -3
- package/src/components/HkAvatar.scss +10 -49
- package/src/components/HkBadge.scss +6 -9
- package/src/components/HkBlockingToast.scss +27 -10
- package/src/components/HkBoard.scss +26 -6
- package/src/components/HkBreadcrumb.scss +82 -268
- package/src/components/HkButton.scss +26 -3
- package/src/components/HkCaptchaWidget.scss +2 -3
- package/src/components/HkCard.scss +14 -8
- package/src/components/HkCheckbox.scss +11 -9
- package/src/components/HkColorPicker.scss +22 -8
- package/src/components/HkContextRing.scss +8 -4
- package/src/components/HkCookieConsent.scss +12 -3
- package/src/components/HkDatePicker.scss +49 -65
- package/src/components/HkDateTimePicker.scss +48 -31
- package/src/components/HkDivider.scss +14 -15
- package/src/components/HkDraggableGrid.scss +41 -11
- package/src/components/HkDraggableList.scss +22 -11
- package/src/components/HkDrawer.scss +24 -4
- package/src/components/HkEmptyState.scss +10 -11
- package/src/components/HkErrorLanding.scss +5 -5
- package/src/components/HkExpansionPanel.scss +6 -2
- package/src/components/HkFab.scss +29 -12
- package/src/components/HkFileBrowserDialog.scss +21 -10
- package/src/components/HkFileField.scss +20 -9
- package/src/components/HkFilePickerField.scss +12 -6
- package/src/components/HkGaugeRing.scss +8 -0
- package/src/components/HkHoverRevealAction.scss +30 -12
- package/src/components/HkIcon.scss +0 -18
- package/src/components/HkIconButton.scss +29 -62
- package/src/components/HkIconButtonVars.scss +8 -28
- package/src/components/HkImageLightbox.scss +4 -3
- package/src/components/HkImagePreview.scss +17 -9
- package/src/components/HkImageViewer.scss +8 -0
- package/src/components/HkInput.scss +28 -28
- package/src/components/HkJsonTree.scss +13 -9
- package/src/components/HkKeywordSearchModal.scss +40 -29
- package/src/components/HkLabel.scss +8 -3
- package/src/components/HkListTransition.scss +16 -1
- package/src/components/HkLoadMore.scss +11 -2
- package/src/components/HkLocalizedInput.scss +11 -11
- package/src/components/HkLogWindow.scss +22 -4
- package/src/components/HkLogo.scss +12 -3
- package/src/components/HkMarkdownRenderer.scss +19 -13
- package/src/components/HkMediaControlBar.scss +2 -4
- package/src/components/HkMediaSlider.scss +0 -2
- package/src/components/HkMenu.scss +32 -20
- package/src/components/HkMenuIdentityItem.scss +3 -3
- package/src/components/HkMinimap.scss +23 -8
- package/src/components/HkModal.scss +17 -20
- package/src/components/HkModalBreadcrumb.scss +25 -6
- package/src/components/HkModelTag.scss +23 -13
- package/src/components/HkNavItem.scss +27 -14
- package/src/components/HkNumberInput.scss +25 -21
- package/src/components/HkPageHeader.scss +7 -6
- package/src/components/HkPasswordInput.scss +36 -36
- package/src/components/HkPhaseTransition.scss +16 -0
- package/src/components/HkPhoneInput.scss +10 -5
- package/src/components/HkPickerPane.scss +32 -5
- package/src/components/HkPlaceholderMarquee.scss +7 -2
- package/src/components/HkPlaceholderMarquee.test.ts +27 -0
- package/src/components/HkPlaceholderMarquee.tsx +14 -6
- package/src/components/HkPopover.scss +18 -10
- package/src/components/HkPopupSelect.scss +28 -7
- package/src/components/HkProgressBar.scss +29 -7
- package/src/components/HkProgressDialog.scss +4 -2
- package/src/components/HkProgressRing.scss +7 -14
- package/src/components/HkProtocolModal.scss +0 -3
- package/src/components/HkQrCode.scss +2 -2
- package/src/components/HkRadio.scss +15 -6
- package/src/components/HkRichInput.scss +29 -13
- package/src/components/HkRollingNumber.scss +14 -6
- package/src/components/HkScrollContainer.scss +20 -8
- package/src/components/HkSearchInput.scss +12 -10
- package/src/components/HkSecretRevealModal.scss +11 -1
- package/src/components/HkSelect.scss +35 -17
- package/src/components/HkSelectionGrid.scss +41 -20
- package/src/components/HkSelectionWaterfall.scss +21 -9
- package/src/components/HkShareBar.scss +14 -5
- package/src/components/HkSidebar.scss +23 -9
- package/src/components/HkSkeleton.scss +16 -8
- package/src/components/HkSlider.scss +12 -2
- package/src/components/HkSpinner.scss +15 -9
- package/src/components/HkSplash.scss +10 -10
- package/src/components/HkStatCard.scss +7 -3
- package/src/components/HkStatusPill.scss +4 -7
- package/src/components/HkStepFlow.scss +24 -4
- package/src/components/HkSwitch.scss +41 -9
- package/src/components/HkTable.scss +25 -20
- package/src/components/HkTabs.scss +40 -26
- package/src/components/HkTag.scss +35 -29
- package/src/components/HkTagInput.scss +22 -16
- package/src/components/HkTextarea.scss +8 -6
- package/src/components/HkThemeToggle.scss +28 -18
- package/src/components/HkTimeline.scss +46 -29
- package/src/components/HkTimeline.test.tsx +39 -0
- package/src/components/HkTimeline.tsx +16 -2
- package/src/components/HkTitleBar.scss +16 -7
- package/src/components/HkToast.scss +40 -10
- package/src/components/HkTokenUsagePanel.scss +11 -6
- package/src/components/HkToolBlock.scss +23 -11
- package/src/components/HkTooltip.scss +5 -9
- package/src/components/HkTree.scss +26 -35
- package/src/components/HkVoiceInputPopup.scss +11 -6
- package/src/components/HkWindowedItem.scss +3 -9
- package/src/components/HkZoomToolbar.scss +12 -10
- package/src/components/_menu-item.scss +4 -3
- package/src/components/window-close.scss +8 -13
- package/src/composables/layoutGeometry.test.ts +177 -0
- package/src/composables/layoutGeometry.ts +231 -0
- package/src/composables/useOverlayScrollbar.test.ts +32 -0
- package/src/composables/useOverlayScrollbar.ts +9 -1
- package/src/composables/usePointerReorder.test.ts +5 -2
- package/src/composables/usePointerReorder.ts +83 -147
|
@@ -93,8 +93,6 @@
|
|
|
93
93
|
top: var(--space-12, 0.75rem);
|
|
94
94
|
right: var(--space-12, 0.75rem);
|
|
95
95
|
z-index: 2;
|
|
96
|
-
background: var(--hi-icon-button-bg);
|
|
97
|
-
color: var(--hi-icon-button-icon-color);
|
|
98
96
|
backdrop-filter: blur(6px);
|
|
99
97
|
|
|
100
98
|
&:hover,
|
|
@@ -115,9 +113,12 @@
|
|
|
115
113
|
}
|
|
116
114
|
}
|
|
117
115
|
|
|
116
|
+
// Focus ring rides INSIDE the chip (negative offset, HkSelectionGrid
|
|
117
|
+
// precedent): an outward ring floats over raw imagery and vanishes on
|
|
118
|
+
// light photos.
|
|
118
119
|
&:focus-visible {
|
|
119
120
|
outline: 2px solid rgb(255 255 255 / 80%);
|
|
120
|
-
outline-offset: 2px;
|
|
121
|
+
outline-offset: -2px;
|
|
121
122
|
}
|
|
122
123
|
}
|
|
123
124
|
|
|
@@ -16,15 +16,23 @@
|
|
|
16
16
|
// Enlarge affordance: the tile acts as a button once the image is up.
|
|
17
17
|
.hk-image-preview.is-zoomable {
|
|
18
18
|
cursor: zoom-in;
|
|
19
|
-
transition: border-color 0.15s ease, box-shadow 0.15s ease;
|
|
19
|
+
transition: border-color 0.15s ease, box-shadow 0.15s ease, filter 0.15s ease;
|
|
20
20
|
|
|
21
21
|
&:hover {
|
|
22
|
-
border-color: var(--hi-color-primary, #
|
|
23
|
-
|
|
22
|
+
border-color: var(--hi-color-primary, #58a6ff);
|
|
23
|
+
// Emphasis drawn INSIDE the border box (HkSelectionGrid precedent):
|
|
24
|
+
// outer spread rings get shaved per-side by overlapping chrome.
|
|
25
|
+
box-shadow: inset 0 0 0 1px var(--hi-color-primary, #58a6ff);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Press feedback matching the house button pattern (HkButton variants,
|
|
29
|
+
// HkSelectionGrid): the tile is role="button" once zoomable.
|
|
30
|
+
&:active {
|
|
31
|
+
filter: brightness(0.95);
|
|
24
32
|
}
|
|
25
33
|
|
|
26
34
|
&:focus-visible {
|
|
27
|
-
outline: 2px solid var(--hi-color-primary, #
|
|
35
|
+
outline: 2px solid var(--hi-color-primary, #58a6ff);
|
|
28
36
|
outline-offset: 2px;
|
|
29
37
|
}
|
|
30
38
|
}
|
|
@@ -35,10 +43,10 @@
|
|
|
35
43
|
width: 100%;
|
|
36
44
|
height: 100%;
|
|
37
45
|
// object-fit comes from the prop (inline style).
|
|
38
|
-
opacity: 1;
|
|
39
|
-
|
|
40
46
|
// Hidden while loading so the shimmer shows through; the real pixels
|
|
41
47
|
// fade in on the load event.
|
|
48
|
+
transition: opacity 0.2s ease;
|
|
49
|
+
|
|
42
50
|
&.is-pending {
|
|
43
51
|
opacity: 0;
|
|
44
52
|
}
|
|
@@ -57,9 +65,9 @@
|
|
|
57
65
|
justify-content: center;
|
|
58
66
|
background: linear-gradient(
|
|
59
67
|
90deg,
|
|
60
|
-
color-mix(in srgb, var(--hi-color-primary, #
|
|
61
|
-
color-mix(in srgb, var(--hi-color-primary, #
|
|
62
|
-
color-mix(in srgb, var(--hi-color-primary, #
|
|
68
|
+
color-mix(in srgb, var(--hi-color-primary, #58a6ff) 8%, transparent) 25%,
|
|
69
|
+
color-mix(in srgb, var(--hi-color-primary, #58a6ff) 18%, transparent) 50%,
|
|
70
|
+
color-mix(in srgb, var(--hi-color-primary, #58a6ff) 8%, transparent) 75%
|
|
63
71
|
);
|
|
64
72
|
background-size: 200% 100%;
|
|
65
73
|
animation: hk-image-preview-shimmer 1.5s ease-in-out infinite;
|
|
@@ -31,3 +31,11 @@
|
|
|
31
31
|
align-items: center;
|
|
32
32
|
justify-content: center;
|
|
33
33
|
}
|
|
34
|
+
|
|
35
|
+
// Reduced motion: pan/zoom keeps working, the transform just stops
|
|
36
|
+
// gliding (house pattern — HkExpansionPanel / HkAffixPicker).
|
|
37
|
+
@media (prefers-reduced-motion: reduce) {
|
|
38
|
+
.hk-image-viewer-img {
|
|
39
|
+
transition: none;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
.hk-input-required {
|
|
21
|
-
margin-
|
|
21
|
+
margin-inline-start: var(--space-2);
|
|
22
22
|
color: rgb(var(--color-error));
|
|
23
23
|
}
|
|
24
24
|
|
|
@@ -34,7 +34,12 @@
|
|
|
34
34
|
border: 1px solid color-mix(in srgb, rgb(var(--color-text)) 14%, transparent);
|
|
35
35
|
border-radius: var(--radius-sm);
|
|
36
36
|
overflow: hidden;
|
|
37
|
-
|
|
37
|
+
/* Longhand on purpose: the comma shorthand attached the duration to the
|
|
38
|
+
* LAST property only, so hover border-color and the focus-within
|
|
39
|
+
* background/box-shadow snapped at 0s (HkButton F5, same disease). */
|
|
40
|
+
transition-property: background-color, border-color, color, box-shadow, opacity, transform, filter;
|
|
41
|
+
transition-duration: var(--duration-normal);
|
|
42
|
+
transition-timing-function: var(--ease-standard);
|
|
38
43
|
color: rgb(var(--color-text));
|
|
39
44
|
|
|
40
45
|
&:hover:not(.hk-input-box-disabled) {
|
|
@@ -63,7 +68,6 @@
|
|
|
63
68
|
}
|
|
64
69
|
|
|
65
70
|
.hk-input-box[data-autogrow] {
|
|
66
|
-
display: flex;
|
|
67
71
|
flex-direction: column;
|
|
68
72
|
align-items: stretch;
|
|
69
73
|
}
|
|
@@ -140,7 +144,6 @@
|
|
|
140
144
|
.hk-input-element.hk-input-textarea {
|
|
141
145
|
position: relative;
|
|
142
146
|
inset: unset;
|
|
143
|
-
width: 100%;
|
|
144
147
|
height: auto;
|
|
145
148
|
flex: 1;
|
|
146
149
|
min-width: 0;
|
|
@@ -163,28 +166,6 @@
|
|
|
163
166
|
resize: none;
|
|
164
167
|
}
|
|
165
168
|
|
|
166
|
-
.hk-input-box[data-autogrow] {
|
|
167
|
-
display: flex;
|
|
168
|
-
flex-direction: column;
|
|
169
|
-
align-items: stretch;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
.hk-input-autogrow {
|
|
173
|
-
flex: 1;
|
|
174
|
-
min-height: 0;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
.hk-input-textarea[data-autogrow] {
|
|
178
|
-
position: relative;
|
|
179
|
-
inset: unset;
|
|
180
|
-
width: 100%;
|
|
181
|
-
flex: 0 0 auto;
|
|
182
|
-
resize: none;
|
|
183
|
-
overflow: hidden;
|
|
184
|
-
min-height: 2.5rem;
|
|
185
|
-
text-align: start;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
169
|
.hk-input-affix {
|
|
189
170
|
display: flex;
|
|
190
171
|
align-items: center;
|
|
@@ -282,10 +263,29 @@
|
|
|
282
263
|
padding: 0;
|
|
283
264
|
border: none;
|
|
284
265
|
background: transparent;
|
|
285
|
-
|
|
266
|
+
/* Contract tokens, not the raw app triplets: --color-text-secondary is a
|
|
267
|
+
* bare "R G B" triplet, so using it directly as a color is invalid at
|
|
268
|
+
* computed-value time (the rule silently inherits); --color-text-primary
|
|
269
|
+
* is not defined anywhere. --hi-color-* wrap the triplets in rgb(). */
|
|
270
|
+
color: var(--hi-color-text-secondary, #888);
|
|
286
271
|
cursor: pointer;
|
|
287
272
|
|
|
288
273
|
&:hover {
|
|
289
|
-
color: var(--color-text-primary, #222);
|
|
274
|
+
color: var(--hi-color-text-primary, #222);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
// Keyboard parity (house icon-button pattern, HkIconButton): this real
|
|
278
|
+
// <button> had a hover state only, so keyboard focus was invisible.
|
|
279
|
+
// Offset 2px is safe here — the toggle rides the box's inline padding,
|
|
280
|
+
// well inside the box's overflow:hidden clip edge.
|
|
281
|
+
&:focus-visible {
|
|
282
|
+
outline: 2px solid rgb(var(--color-primary));
|
|
283
|
+
outline-offset: 2px;
|
|
284
|
+
border-radius: var(--radius-sm);
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
// Press feedback matching the house button pattern (HkButton variants).
|
|
288
|
+
&:active {
|
|
289
|
+
filter: brightness(0.95);
|
|
290
290
|
}
|
|
291
291
|
}
|
|
@@ -50,7 +50,9 @@
|
|
|
50
50
|
display: flex;
|
|
51
51
|
align-items: baseline;
|
|
52
52
|
min-height: 1.55em;
|
|
53
|
-
|
|
53
|
+
/* Inline paddingLeft (tsx) always overrides the left half; spell out the
|
|
54
|
+
dead slot so the live right inset is not mistaken for symmetric. */
|
|
55
|
+
padding: 0 var(--space-6, 0.375rem) 0 0;
|
|
54
56
|
border-radius: var(--radius-xs, 2px);
|
|
55
57
|
cursor: default;
|
|
56
58
|
}
|
|
@@ -70,7 +72,7 @@
|
|
|
70
72
|
width: var(--jt-toggle);
|
|
71
73
|
height: var(--jt-toggle);
|
|
72
74
|
flex-shrink: 0;
|
|
73
|
-
margin-
|
|
75
|
+
margin-inline-end: var(--space-2, 0.125rem);
|
|
74
76
|
/* The toggle box has no text baseline of its own — pin it to the line
|
|
75
77
|
top instead of letting it join the row's baseline group with a
|
|
76
78
|
synthesized border-box baseline. */
|
|
@@ -115,7 +117,7 @@
|
|
|
115
117
|
|
|
116
118
|
.s-jt-colon {
|
|
117
119
|
color: rgb(var(--color-muted));
|
|
118
|
-
margin-
|
|
120
|
+
margin-inline-end: 0.35em;
|
|
119
121
|
}
|
|
120
122
|
|
|
121
123
|
.s-jv-null {
|
|
@@ -123,21 +125,24 @@
|
|
|
123
125
|
font-style: italic;
|
|
124
126
|
}
|
|
125
127
|
|
|
128
|
+
/* Value colors join the shared --code-* family (see tokens.scss) so themes
|
|
129
|
+
restyle the tree together with HkToolBlock's code blocks; fallbacks keep
|
|
130
|
+
the One Dark originals. */
|
|
126
131
|
.s-jv-str {
|
|
127
|
-
color: #98c379;
|
|
132
|
+
color: var(--code-string, #98c379);
|
|
128
133
|
word-break: break-all;
|
|
129
134
|
}
|
|
130
135
|
|
|
131
136
|
.s-jv-num {
|
|
132
|
-
color: #d19a66;
|
|
137
|
+
color: var(--code-number, #d19a66);
|
|
133
138
|
}
|
|
134
139
|
|
|
135
140
|
.s-jv-bool {
|
|
136
|
-
color: #c678dd;
|
|
141
|
+
color: var(--code-keyword, #c678dd);
|
|
137
142
|
}
|
|
138
143
|
|
|
139
144
|
.s-jv-str-raw {
|
|
140
|
-
color: #98c379;
|
|
145
|
+
color: var(--code-string, #98c379);
|
|
141
146
|
white-space: pre-wrap;
|
|
142
147
|
word-break: break-all;
|
|
143
148
|
}
|
|
@@ -146,8 +151,8 @@
|
|
|
146
151
|
color: rgb(var(--color-muted) / 0.6);
|
|
147
152
|
font-size: var(--text-3xs, 0.5rem);
|
|
148
153
|
font-style: italic;
|
|
149
|
-
margin-left: 0.75em;
|
|
150
154
|
font-weight: 400;
|
|
155
|
+
margin-inline-start: 0.75em;
|
|
151
156
|
}
|
|
152
157
|
|
|
153
158
|
.s-jt-badge {
|
|
@@ -162,7 +167,6 @@
|
|
|
162
167
|
}
|
|
163
168
|
|
|
164
169
|
.s-jt-badge.is-open {
|
|
165
|
-
color: rgb(var(--color-muted));
|
|
166
170
|
background: transparent;
|
|
167
171
|
border-color: transparent;
|
|
168
172
|
font-weight: 400;
|
|
@@ -1,23 +1,26 @@
|
|
|
1
1
|
.hk-kw-search {
|
|
2
2
|
display: flex;
|
|
3
3
|
flex-direction: column;
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
/* Token names follow the VALUES this component has always rendered
|
|
5
|
+
* (the old --hi-space-* names never resolved), not the numerals:
|
|
6
|
+
* 1.25rem is --space-20, not --space-10. */
|
|
7
|
+
gap: var(--space-20, 1.25rem);
|
|
8
|
+
padding: var(--space-4, 0.25rem) 0;
|
|
6
9
|
}
|
|
7
10
|
|
|
8
11
|
.hk-kw-search-box {
|
|
9
12
|
display: flex;
|
|
10
13
|
align-items: center;
|
|
11
|
-
gap: var(--
|
|
12
|
-
padding: var(--
|
|
14
|
+
gap: var(--space-8, 0.5rem);
|
|
15
|
+
padding: var(--space-8, 0.5rem) var(--space-12, 0.75rem);
|
|
13
16
|
background: var(--hi-color-surface, rgba(255, 255, 255, 0.95));
|
|
14
|
-
border: 1px solid var(--hk-kw-border,
|
|
17
|
+
border: 1px solid var(--hk-kw-border, rgb(var(--color-border) / 8%));
|
|
15
18
|
border-radius: var(--hi-radius-lg, 0.75rem);
|
|
16
19
|
transition: border-color 0.15s ease, box-shadow 0.15s ease;
|
|
17
20
|
|
|
18
21
|
&:focus-within {
|
|
19
22
|
border-color: var(--hi-color-primary, #58a6ff);
|
|
20
|
-
box-shadow: 0 0 0 3px
|
|
23
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--hi-color-primary, #58a6ff) 12%, transparent);
|
|
21
24
|
}
|
|
22
25
|
}
|
|
23
26
|
|
|
@@ -34,7 +37,7 @@
|
|
|
34
37
|
border: 0;
|
|
35
38
|
outline: none;
|
|
36
39
|
color: var(--hi-color-text-primary, #333);
|
|
37
|
-
font-size: 0.875rem;
|
|
40
|
+
font-size: var(--text-base, 0.875rem);
|
|
38
41
|
}
|
|
39
42
|
|
|
40
43
|
.hk-kw-search-clear {
|
|
@@ -44,12 +47,17 @@
|
|
|
44
47
|
color: var(--hi-color-text-secondary, #666);
|
|
45
48
|
cursor: pointer;
|
|
46
49
|
display: inline-flex;
|
|
47
|
-
padding: var(--
|
|
50
|
+
padding: var(--space-2, 0.125rem);
|
|
48
51
|
border-radius: var(--hi-radius-sm, 0.25rem);
|
|
49
52
|
|
|
50
53
|
&:hover {
|
|
51
54
|
color: var(--hi-color-text-primary, #333);
|
|
52
55
|
}
|
|
56
|
+
|
|
57
|
+
&:focus-visible {
|
|
58
|
+
outline: 2px solid color-mix(in srgb, var(--hi-color-primary, #58a6ff) 55%, transparent);
|
|
59
|
+
outline-offset: 2px;
|
|
60
|
+
}
|
|
53
61
|
}
|
|
54
62
|
|
|
55
63
|
/* ONE SCROLLBAR PER WINDOW (2026-09-08 audit): the results list is NOT a
|
|
@@ -59,17 +67,17 @@
|
|
|
59
67
|
.hk-kw-search-results {
|
|
60
68
|
display: flex;
|
|
61
69
|
flex-direction: column;
|
|
62
|
-
gap: var(--
|
|
63
|
-
padding: 0 var(--
|
|
70
|
+
gap: var(--space-4, 0.25rem);
|
|
71
|
+
padding: 0 var(--space-2, 0.125rem);
|
|
64
72
|
}
|
|
65
73
|
|
|
66
74
|
.hk-kw-search-result {
|
|
67
75
|
appearance: none;
|
|
68
|
-
text-align:
|
|
76
|
+
text-align: start;
|
|
69
77
|
background: transparent;
|
|
70
78
|
border: 1px solid transparent;
|
|
71
79
|
border-radius: var(--hi-radius-sm, 0.25rem);
|
|
72
|
-
padding: var(--
|
|
80
|
+
padding: var(--space-8, 0.5rem) var(--space-12, 0.75rem);
|
|
73
81
|
cursor: pointer;
|
|
74
82
|
width: 100%;
|
|
75
83
|
color: var(--hi-color-text-primary, #333);
|
|
@@ -77,25 +85,28 @@
|
|
|
77
85
|
|
|
78
86
|
&:hover {
|
|
79
87
|
background: var(--hi-color-surface, rgba(255, 255, 255, 0.95));
|
|
80
|
-
border-color:
|
|
88
|
+
border-color: rgb(var(--color-border) / 6%);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
&:focus-visible {
|
|
92
|
+
outline: 2px solid color-mix(in srgb, var(--hi-color-primary, #58a6ff) 55%, transparent);
|
|
93
|
+
outline-offset: 2px;
|
|
81
94
|
}
|
|
82
95
|
}
|
|
83
96
|
|
|
84
97
|
.hk-kw-search-empty {
|
|
85
|
-
|
|
98
|
+
/* 3rem sits beyond the theme scale (--space-40 ends it); the token
|
|
99
|
+
* name documents the intent, the fallback keeps the rendered size. */
|
|
100
|
+
padding: var(--space-48, 3rem) var(--space-8, 0.5rem);
|
|
86
101
|
text-align: center;
|
|
87
|
-
font-size: 0.875rem;
|
|
102
|
+
font-size: var(--text-base, 0.875rem);
|
|
88
103
|
color: var(--hi-color-text-secondary, #666);
|
|
89
104
|
}
|
|
90
105
|
|
|
91
|
-
.hk-kw-search-result-semantic {
|
|
92
|
-
display: block;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
106
|
.hk-kw-search-semantic {
|
|
96
107
|
display: flex;
|
|
97
108
|
flex-direction: column;
|
|
98
|
-
gap: var(--
|
|
109
|
+
gap: var(--space-4, 0.25rem);
|
|
99
110
|
min-width: 0;
|
|
100
111
|
}
|
|
101
112
|
|
|
@@ -103,11 +114,11 @@
|
|
|
103
114
|
display: flex;
|
|
104
115
|
align-items: baseline;
|
|
105
116
|
justify-content: space-between;
|
|
106
|
-
gap: var(--
|
|
117
|
+
gap: var(--space-8, 0.5rem);
|
|
107
118
|
}
|
|
108
119
|
|
|
109
120
|
.hk-kw-search-semantic-title {
|
|
110
|
-
font-size: 0.875rem;
|
|
121
|
+
font-size: var(--text-base, 0.875rem);
|
|
111
122
|
font-weight: 600;
|
|
112
123
|
color: var(--hi-color-text-primary, #333);
|
|
113
124
|
overflow: hidden;
|
|
@@ -117,17 +128,17 @@
|
|
|
117
128
|
|
|
118
129
|
.hk-kw-search-semantic-score {
|
|
119
130
|
flex-shrink: 0;
|
|
120
|
-
font-size: var(--
|
|
131
|
+
font-size: var(--text-xs, 0.75rem);
|
|
121
132
|
font-variant-numeric: tabular-nums;
|
|
122
133
|
color: var(--hi-color-primary, #58a6ff);
|
|
123
|
-
background:
|
|
124
|
-
padding: 0 var(--
|
|
134
|
+
background: color-mix(in srgb, var(--hi-color-primary, #58a6ff) 12%, transparent);
|
|
135
|
+
padding: 0 var(--space-6, 0.375rem);
|
|
125
136
|
border-radius: var(--hi-radius-sm, 0.25rem);
|
|
126
137
|
line-height: 1.5;
|
|
127
138
|
}
|
|
128
139
|
|
|
129
140
|
.hk-kw-search-semantic-snippet {
|
|
130
|
-
font-size: var(--
|
|
141
|
+
font-size: var(--text-xs, 0.75rem);
|
|
131
142
|
color: var(--hi-color-text-secondary, #666);
|
|
132
143
|
line-height: 1.5;
|
|
133
144
|
display: -webkit-box;
|
|
@@ -139,11 +150,11 @@
|
|
|
139
150
|
|
|
140
151
|
.hk-kw-search-semantic-source {
|
|
141
152
|
align-self: flex-start;
|
|
142
|
-
font-size: var(--
|
|
153
|
+
font-size: var(--text-xs, 0.75rem);
|
|
143
154
|
text-transform: uppercase;
|
|
144
155
|
letter-spacing: 0.04em;
|
|
145
156
|
color: var(--hi-color-text-secondary, #666);
|
|
146
|
-
background:
|
|
147
|
-
padding: 0 var(--
|
|
157
|
+
background: rgb(var(--color-border) / 4%);
|
|
158
|
+
padding: 0 var(--space-6, 0.375rem);
|
|
148
159
|
border-radius: var(--hi-radius-sm, 0.25rem);
|
|
149
160
|
}
|
|
@@ -9,16 +9,16 @@
|
|
|
9
9
|
|
|
10
10
|
.hk-label {
|
|
11
11
|
display: inline;
|
|
12
|
-
font-size: var(--
|
|
12
|
+
font-size: var(--text-base, 0.875rem);
|
|
13
13
|
line-height: 1.5;
|
|
14
14
|
color: var(--hi-color-text-primary, #333);
|
|
15
15
|
|
|
16
16
|
&.hk-label-sm {
|
|
17
|
-
font-size: var(--
|
|
17
|
+
font-size: var(--text-xs, 0.75rem);
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
&.hk-label-lg {
|
|
21
|
-
font-size: var(--
|
|
21
|
+
font-size: var(--text-md, 1rem);
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
a {
|
|
@@ -30,5 +30,10 @@
|
|
|
30
30
|
&:hover {
|
|
31
31
|
text-decoration: underline;
|
|
32
32
|
}
|
|
33
|
+
|
|
34
|
+
&:focus-visible {
|
|
35
|
+
outline: 2px solid color-mix(in srgb, var(--hi-color-primary, #58a6ff) 55%, transparent);
|
|
36
|
+
outline-offset: 2px;
|
|
37
|
+
}
|
|
33
38
|
}
|
|
34
39
|
}
|
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
/* FLIP move: vue applies `${name}-move` (runtime-dom resolves moveClass
|
|
2
|
+
* as `${name}-move`), never a bare `.hk-list-move`. pop/slide/fade share
|
|
3
|
+
* the normal duration; grow/reveal define their staggered bases below. */
|
|
4
|
+
.hk-list-pop-move,
|
|
5
|
+
.hk-list-slide-move,
|
|
6
|
+
.hk-list-fade-move {
|
|
2
7
|
transition: transform var(--hi-duration-normal, 0.3s) ease;
|
|
3
8
|
}
|
|
4
9
|
|
|
@@ -52,6 +57,16 @@
|
|
|
52
57
|
transform: translateX(12px);
|
|
53
58
|
}
|
|
54
59
|
|
|
60
|
+
/* RTL: reading direction flips, so slide enters from the right and
|
|
61
|
+
* exits to the left (HkBreadcrumb/HkBlockingToast [dir="rtl"] form). */
|
|
62
|
+
[dir="rtl"] .hk-list-slide-enter-from {
|
|
63
|
+
transform: translateX(12px);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
[dir="rtl"] .hk-list-slide-leave-to {
|
|
67
|
+
transform: translateX(-12px);
|
|
68
|
+
}
|
|
69
|
+
|
|
55
70
|
.hk-list-fade-enter-active {
|
|
56
71
|
transition: opacity var(--hi-duration-normal, 0.3s) ease;
|
|
57
72
|
}
|
|
@@ -25,6 +25,16 @@
|
|
|
25
25
|
background: linear-gradient(to left, transparent, rgb(var(--color-muted) / 35%));
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
+
/* The flex row flips in RTL, so the hairlines mirror too: transparent
|
|
29
|
+
* stays on the outer edge, muted towards the central control. */
|
|
30
|
+
[dir="rtl"] .hk-load-more-rule {
|
|
31
|
+
background: linear-gradient(to left, transparent, rgb(var(--color-muted) / 35%));
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
[dir="rtl"] .hk-load-more-rule-end {
|
|
35
|
+
background: linear-gradient(to right, transparent, rgb(var(--color-muted) / 35%));
|
|
36
|
+
}
|
|
37
|
+
|
|
28
38
|
.hk-load-more-core {
|
|
29
39
|
flex: none;
|
|
30
40
|
display: inline-flex;
|
|
@@ -39,7 +49,7 @@
|
|
|
39
49
|
font-size: var(--text-2xs);
|
|
40
50
|
font-variant-numeric: tabular-nums;
|
|
41
51
|
letter-spacing: 0.04em;
|
|
42
|
-
|
|
52
|
+
transition: opacity 200ms ease;
|
|
43
53
|
}
|
|
44
54
|
|
|
45
55
|
.hk-load-more[data-state="loading"] .hk-load-more-count {
|
|
@@ -49,5 +59,4 @@
|
|
|
49
59
|
.hk-load-more-end {
|
|
50
60
|
font-size: var(--text-2xs);
|
|
51
61
|
letter-spacing: 0.08em;
|
|
52
|
-
color: rgb(var(--color-text-tertiary));
|
|
53
62
|
}
|
|
@@ -20,7 +20,6 @@
|
|
|
20
20
|
* keep focus inside the input. */
|
|
21
21
|
.hk-localized-input-chip {
|
|
22
22
|
padding: 0;
|
|
23
|
-
border-radius: var(--radius-sm, 999px);
|
|
24
23
|
background: transparent;
|
|
25
24
|
color: rgb(var(--color-muted));
|
|
26
25
|
|
|
@@ -54,26 +53,27 @@
|
|
|
54
53
|
* The base HkInput box flows affixes as a flex ROW (single-line input
|
|
55
54
|
* absolutely positioned over the box) — but a textarea-type element is
|
|
56
55
|
* in-flow, so the language chip would land BELOW the field. Pin it to
|
|
57
|
-
* the field's top-
|
|
58
|
-
* of the chip column via the measured affix width.
|
|
56
|
+
* the field's top inline-end corner instead and keep every text line
|
|
57
|
+
* clear of the chip column via the measured affix width. Logical
|
|
58
|
+
* properties throughout: the pinned chips and the textarea clearance
|
|
59
|
+
* mirror with the writing direction, matching the base field's
|
|
60
|
+
* logical padding-inline / margin-inline-start affix layout. */
|
|
59
61
|
.hk-localized-input[data-multiline] {
|
|
60
62
|
.hk-input-affix.hk-input-suffix {
|
|
61
63
|
position: absolute;
|
|
62
|
-
top: 6px;
|
|
63
|
-
|
|
64
|
-
margin-inline-start: 0;
|
|
64
|
+
top: var(--space-6, 6px);
|
|
65
|
+
inset-inline-end: var(--space-8, 8px);
|
|
65
66
|
}
|
|
66
67
|
|
|
67
68
|
.hk-input-affix.hk-input-prefix {
|
|
68
69
|
position: absolute;
|
|
69
|
-
top: 6px;
|
|
70
|
-
|
|
71
|
-
margin-inline-end: 0;
|
|
70
|
+
top: var(--space-6, 6px);
|
|
71
|
+
inset-inline-start: var(--space-8, 8px);
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
.hk-input-element.hk-input-textarea {
|
|
75
|
-
padding-
|
|
76
|
-
padding-
|
|
75
|
+
padding-inline-end: calc(var(--space-12, 12px) + var(--hk-input-affix-end-w, 0px));
|
|
76
|
+
padding-inline-start: calc(var(--space-12, 12px) + var(--hk-input-affix-start-w, 0px));
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
79
|
|
|
@@ -29,9 +29,21 @@
|
|
|
29
29
|
color: rgb(var(--color-muted));
|
|
30
30
|
font-size: var(--text-xs, 0.75rem);
|
|
31
31
|
cursor: pointer;
|
|
32
|
+
/* Declared here on purpose: these s-log classes intentionally escape
|
|
33
|
+
* the `button:where(:not([class^="hk-"])…)` element baseline (base.scss),
|
|
34
|
+
* which currently supplies their transition/focus ring only by accident
|
|
35
|
+
* of the hk- exclusion — do not lean on it. */
|
|
36
|
+
transition: background 200ms ease, color 200ms ease, border-color 200ms ease,
|
|
37
|
+
box-shadow 200ms ease, opacity 200ms ease;
|
|
32
38
|
}
|
|
33
39
|
|
|
34
|
-
.s-log-tab:
|
|
40
|
+
.s-log-tab:focus-visible {
|
|
41
|
+
outline: none;
|
|
42
|
+
box-shadow: 0 0 0 2px rgb(var(--color-surface)), 0 0 0 4px rgb(var(--color-primary));
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.s-log-tab:hover:not([data-active]),
|
|
46
|
+
.s-log-btn:hover:not([data-active]) {
|
|
35
47
|
background: rgb(var(--color-primary) / 12%);
|
|
36
48
|
color: rgb(var(--color-text));
|
|
37
49
|
}
|
|
@@ -51,6 +63,10 @@
|
|
|
51
63
|
display: inline-flex;
|
|
52
64
|
align-items: center;
|
|
53
65
|
justify-content: center;
|
|
66
|
+
/* Reset the element-baseline button padding (base.scss button-base
|
|
67
|
+
* reaches these non-hk buttons): 0.5rem/1rem inside the fixed 1.75rem
|
|
68
|
+
* border-box collapses the content box and off-centers the icon. */
|
|
69
|
+
padding: 0;
|
|
54
70
|
width: 1.75rem;
|
|
55
71
|
height: 1.75rem;
|
|
56
72
|
border: 1px solid var(--border-faint, rgb(var(--color-border) / 12%));
|
|
@@ -58,11 +74,13 @@
|
|
|
58
74
|
background: rgb(var(--color-surface));
|
|
59
75
|
color: rgb(var(--color-muted));
|
|
60
76
|
cursor: pointer;
|
|
77
|
+
transition: background 200ms ease, color 200ms ease, border-color 200ms ease,
|
|
78
|
+
box-shadow 200ms ease, opacity 200ms ease;
|
|
61
79
|
}
|
|
62
80
|
|
|
63
|
-
.s-log-btn:
|
|
64
|
-
|
|
65
|
-
|
|
81
|
+
.s-log-btn:focus-visible {
|
|
82
|
+
outline: none;
|
|
83
|
+
box-shadow: 0 0 0 2px rgb(var(--color-surface)), 0 0 0 4px rgb(var(--color-primary));
|
|
66
84
|
}
|
|
67
85
|
|
|
68
86
|
.s-log-btn[data-active] {
|
|
@@ -13,6 +13,14 @@ a.hk-logo {
|
|
|
13
13
|
text-decoration: none;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
+
/* Keyboard parity (HkButton double ring): the anchor variant otherwise
|
|
17
|
+
* falls back to the rectangular UA outline. The div variant never
|
|
18
|
+
* matches :focus-visible (not focusable without a tsx tabindex). */
|
|
19
|
+
a.hk-logo:focus-visible {
|
|
20
|
+
outline: none;
|
|
21
|
+
box-shadow: 0 0 0 2px rgb(var(--color-surface)), 0 0 0 4px rgb(var(--color-primary));
|
|
22
|
+
}
|
|
23
|
+
|
|
16
24
|
.hk-logo-img {
|
|
17
25
|
display: block;
|
|
18
26
|
border-radius: var(--hi-radius-md, 8px);
|
|
@@ -23,14 +31,15 @@ a.hk-logo {
|
|
|
23
31
|
display: flex;
|
|
24
32
|
align-items: center;
|
|
25
33
|
justify-content: center;
|
|
26
|
-
|
|
34
|
+
/* Contract token with hex fallback (house idiom). No radius here: the
|
|
35
|
+
* only render site is inside .hk-logo, whose matching border-radius +
|
|
36
|
+
* overflow: hidden already clip this exactly-fitting child. */
|
|
37
|
+
background: var(--hi-color-primary, #58a6ff);
|
|
27
38
|
color: rgb(var(--color-on-solid-text, 255 255 255));
|
|
28
|
-
border-radius: var(--hi-radius-md, 8px);
|
|
29
39
|
}
|
|
30
40
|
|
|
31
41
|
.hk-logo-initial {
|
|
32
42
|
font-weight: 700;
|
|
33
43
|
font-size: 50%;
|
|
34
44
|
line-height: 1;
|
|
35
|
-
user-select: none;
|
|
36
45
|
}
|