@helixui/library 1.1.2-next.2 → 1.1.2-next.25
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/custom-elements.json +387 -405
- package/dist/components/hx-avatar/hx-avatar.styles.d.ts.map +1 -1
- package/dist/components/hx-avatar/index.js +1 -1
- package/dist/components/hx-breadcrumb/hx-breadcrumb-item.d.ts +1 -0
- package/dist/components/hx-breadcrumb/hx-breadcrumb-item.d.ts.map +1 -1
- package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts +10 -8
- package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts.map +1 -1
- package/dist/components/hx-breadcrumb/index.js +1 -1
- package/dist/components/hx-button/hx-button.d.ts +12 -6
- package/dist/components/hx-button/hx-button.d.ts.map +1 -1
- package/dist/components/hx-button/hx-button.styles.d.ts.map +1 -1
- package/dist/components/hx-button/index.js +1 -1
- package/dist/components/hx-clinical-status/hx-clinical-status.d.ts +14 -6
- package/dist/components/hx-clinical-status/hx-clinical-status.d.ts.map +1 -1
- package/dist/components/hx-clinical-status/hx-clinical-status.styles.d.ts.map +1 -1
- package/dist/components/hx-clinical-status/index.d.ts +1 -1
- package/dist/components/hx-clinical-status/index.d.ts.map +1 -1
- package/dist/components/hx-clinical-status/index.js +1 -1
- package/dist/components/hx-menu/hx-menu-item.d.ts +5 -0
- package/dist/components/hx-menu/hx-menu-item.d.ts.map +1 -1
- package/dist/components/hx-menu/hx-menu.d.ts +1 -0
- package/dist/components/hx-menu/hx-menu.d.ts.map +1 -1
- package/dist/components/hx-menu/hx-menu.styles.d.ts.map +1 -1
- package/dist/components/hx-menu/index.js +1 -1
- package/dist/components/hx-nav/hx-nav.d.ts +10 -0
- package/dist/components/hx-nav/hx-nav.d.ts.map +1 -1
- package/dist/components/hx-nav/index.js +1 -1
- package/dist/components/hx-pagination/hx-pagination.d.ts.map +1 -1
- package/dist/components/hx-pagination/index.js +1 -1
- package/dist/components/hx-patient-banner/hx-patient-banner.d.ts +8 -0
- package/dist/components/hx-patient-banner/hx-patient-banner.d.ts.map +1 -1
- package/dist/components/hx-patient-banner/hx-patient-banner.styles.d.ts.map +1 -1
- package/dist/components/hx-patient-banner/index.js +1 -1
- package/dist/components/hx-phi-field/hx-phi-field.d.ts +27 -2
- package/dist/components/hx-phi-field/hx-phi-field.d.ts.map +1 -1
- package/dist/components/hx-phi-field/hx-phi-field.styles.d.ts.map +1 -1
- package/dist/components/hx-phi-field/index.js +1 -1
- package/dist/components/hx-select/hx-select.d.ts +1 -0
- package/dist/components/hx-select/hx-select.d.ts.map +1 -1
- package/dist/components/hx-select/hx-select.styles.d.ts.map +1 -1
- package/dist/components/hx-select/index.js +1 -1
- package/dist/components/hx-side-nav/hx-nav-item.d.ts +5 -0
- package/dist/components/hx-side-nav/hx-nav-item.d.ts.map +1 -1
- package/dist/components/hx-side-nav/hx-side-nav.d.ts.map +1 -1
- package/dist/components/hx-side-nav/index.js +1 -1
- package/dist/components/hx-status-indicator/hx-status-indicator.d.ts +17 -1
- package/dist/components/hx-status-indicator/hx-status-indicator.d.ts.map +1 -1
- package/dist/components/hx-status-indicator/hx-status-indicator.styles.d.ts.map +1 -1
- package/dist/components/hx-status-indicator/index.js +1 -1
- package/dist/components/hx-steps/hx-step.d.ts +7 -0
- package/dist/components/hx-steps/hx-step.d.ts.map +1 -1
- package/dist/components/hx-steps/hx-steps.d.ts.map +1 -1
- package/dist/components/hx-steps/index.js +1 -1
- package/dist/components/hx-tabs/hx-tab.styles.d.ts.map +1 -1
- package/dist/components/hx-tabs/hx-tabs.d.ts +10 -0
- package/dist/components/hx-tabs/hx-tabs.d.ts.map +1 -1
- package/dist/components/hx-tabs/index.js +1 -1
- package/dist/components/hx-tree-view/hx-tree-item.d.ts +5 -0
- package/dist/components/hx-tree-view/hx-tree-item.d.ts.map +1 -1
- package/dist/components/hx-tree-view/hx-tree-view.d.ts +6 -0
- package/dist/components/hx-tree-view/hx-tree-view.d.ts.map +1 -1
- package/dist/components/hx-tree-view/index.js +1 -1
- package/dist/css/helix-all.css +202 -51
- package/dist/css/helix-core.css +52 -1
- package/dist/css/helix-feedback.css +33 -4
- package/dist/css/helix-forms.css +68 -41
- package/dist/css/helix-navigation.css +2 -0
- package/dist/css/hx-avatar.css +18 -1
- package/dist/css/hx-button.css +34 -0
- package/dist/css/hx-clinical-status.css +4 -2
- package/dist/css/hx-menu.css +2 -0
- package/dist/css/hx-patient-banner.css +31 -3
- package/dist/css/hx-phi-field.css +12 -0
- package/dist/css/hx-select.css +68 -41
- package/dist/css/hx-status-indicator.css +33 -4
- package/dist/css/index.css +1 -1
- package/dist/css/manifest.json +13 -5
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -15
- package/dist/shared/{hx-avatar-7p1cj3lG.js → hx-avatar-CZfA9KEl.js} +27 -10
- package/dist/shared/hx-avatar-CZfA9KEl.js.map +1 -0
- package/dist/shared/{hx-breadcrumb-item-B2rjepqy.js → hx-breadcrumb-item-CObc-WJl.js} +8 -6
- package/dist/shared/hx-breadcrumb-item-CObc-WJl.js.map +1 -0
- package/dist/shared/{hx-button-6S3DwuIj.js → hx-button-CC1YH9RZ.js} +52 -12
- package/dist/shared/hx-button-CC1YH9RZ.js.map +1 -0
- package/dist/shared/{hx-clinical-status-De8yrA5I.js → hx-clinical-status-D6eaplvs.js} +5 -3
- package/dist/shared/hx-clinical-status-D6eaplvs.js.map +1 -0
- package/dist/shared/{hx-menu-divider-DR4G_rqw.js → hx-menu-divider-puPmRAdN.js} +40 -20
- package/dist/shared/hx-menu-divider-puPmRAdN.js.map +1 -0
- package/dist/shared/{hx-nav-D377Ngz4.js → hx-nav-CiyqaW2I.js} +112 -99
- package/dist/shared/hx-nav-CiyqaW2I.js.map +1 -0
- package/dist/shared/{hx-nav-item-CuGiJPAf.js → hx-nav-item-tM_6bolB.js} +132 -92
- package/dist/shared/hx-nav-item-tM_6bolB.js.map +1 -0
- package/dist/shared/{hx-pagination-DYhYPqDn.js → hx-pagination-Cb9UEWXz.js} +74 -66
- package/dist/shared/{hx-pagination-DYhYPqDn.js.map → hx-pagination-Cb9UEWXz.js.map} +1 -1
- package/dist/shared/{hx-patient-banner-BoJHddAL.js → hx-patient-banner-wk4qWmsH.js} +88 -47
- package/dist/shared/hx-patient-banner-wk4qWmsH.js.map +1 -0
- package/dist/shared/{hx-phi-field-EDWna59z.js → hx-phi-field-DX9z3nu0.js} +67 -33
- package/dist/shared/hx-phi-field-DX9z3nu0.js.map +1 -0
- package/dist/shared/{hx-select-4-nHL0vd.js → hx-select-BWzxWZs_.js} +82 -55
- package/dist/shared/hx-select-BWzxWZs_.js.map +1 -0
- package/dist/shared/{hx-status-indicator-4ClvA5mU.js → hx-status-indicator-Dl3Y34mc.js} +76 -35
- package/dist/shared/hx-status-indicator-Dl3Y34mc.js.map +1 -0
- package/dist/shared/{hx-step-DlANlr2A.js → hx-step-CmNwfcJx.js} +30 -26
- package/dist/shared/hx-step-CmNwfcJx.js.map +1 -0
- package/dist/shared/{hx-tab-panel-GGjk6Qg4.js → hx-tab-panel-Dnt8aA74.js} +89 -61
- package/dist/shared/hx-tab-panel-Dnt8aA74.js.map +1 -0
- package/dist/shared/{hx-tree-item-DTDIBRrI.js → hx-tree-item-C1PhX-HE.js} +50 -19
- package/dist/shared/hx-tree-item-C1PhX-HE.js.map +1 -0
- package/package.json +2 -2
- package/dist/shared/hx-avatar-7p1cj3lG.js.map +0 -1
- package/dist/shared/hx-breadcrumb-item-B2rjepqy.js.map +0 -1
- package/dist/shared/hx-button-6S3DwuIj.js.map +0 -1
- package/dist/shared/hx-clinical-status-De8yrA5I.js.map +0 -1
- package/dist/shared/hx-menu-divider-DR4G_rqw.js.map +0 -1
- package/dist/shared/hx-nav-D377Ngz4.js.map +0 -1
- package/dist/shared/hx-nav-item-CuGiJPAf.js.map +0 -1
- package/dist/shared/hx-patient-banner-BoJHddAL.js.map +0 -1
- package/dist/shared/hx-phi-field-EDWna59z.js.map +0 -1
- package/dist/shared/hx-select-4-nHL0vd.js.map +0 -1
- package/dist/shared/hx-status-indicator-4ClvA5mU.js.map +0 -1
- package/dist/shared/hx-step-DlANlr2A.js.map +0 -1
- package/dist/shared/hx-tab-panel-GGjk6Qg4.js.map +0 -1
- package/dist/shared/hx-tree-item-DTDIBRrI.js.map +0 -1
package/dist/css/helix-all.css
CHANGED
|
@@ -450,11 +450,28 @@
|
|
|
450
450
|
}
|
|
451
451
|
|
|
452
452
|
/* P1-B: Windows High Contrast Mode — avatar background is stripped by the system,
|
|
453
|
-
leaving no visual boundary.
|
|
453
|
+
leaving no visual boundary. Restore a visible border, explicit foreground, and
|
|
454
|
+
background so the avatar container, initials, and fallback icon all remain
|
|
455
|
+
perceivable at any contrast level.
|
|
454
456
|
WCAG 1.4.11 Non-text Contrast (Level AA). */
|
|
455
457
|
@media (forced-colors: active) {
|
|
456
458
|
.avatar {
|
|
459
|
+
forced-color-adjust: none;
|
|
457
460
|
border: 2px solid ButtonText;
|
|
461
|
+
background-color: Canvas;
|
|
462
|
+
color: CanvasText;
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
.avatar__initials {
|
|
466
|
+
color: CanvasText;
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
.avatar__fallback-icon {
|
|
470
|
+
color: CanvasText;
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
.avatar__image {
|
|
474
|
+
forced-color-adjust: auto;
|
|
458
475
|
}
|
|
459
476
|
}
|
|
460
477
|
/* ── hx-badge ── */
|
|
@@ -1136,6 +1153,40 @@
|
|
|
1136
1153
|
.button__label {
|
|
1137
1154
|
flex: 1 1 auto;
|
|
1138
1155
|
}
|
|
1156
|
+
|
|
1157
|
+
/* ─── High Contrast Mode (forced-colors) ─── */
|
|
1158
|
+
|
|
1159
|
+
@media (forced-colors: active) {
|
|
1160
|
+
.button {
|
|
1161
|
+
/* Ensure button outline is visible in Windows High Contrast mode.
|
|
1162
|
+
ButtonText/ButtonFace are system colors recognized by the browser. */
|
|
1163
|
+
forced-color-adjust: none;
|
|
1164
|
+
background-color: ButtonFace;
|
|
1165
|
+
color: ButtonText;
|
|
1166
|
+
border: 2px solid ButtonText;
|
|
1167
|
+
}
|
|
1168
|
+
|
|
1169
|
+
.button:focus-visible {
|
|
1170
|
+
outline: 3px solid Highlight;
|
|
1171
|
+
outline-offset: 2px;
|
|
1172
|
+
}
|
|
1173
|
+
|
|
1174
|
+
.button[disabled] {
|
|
1175
|
+
background-color: ButtonFace;
|
|
1176
|
+
color: GrayText;
|
|
1177
|
+
border-color: GrayText;
|
|
1178
|
+
opacity: 1;
|
|
1179
|
+
}
|
|
1180
|
+
|
|
1181
|
+
:host([disabled]) {
|
|
1182
|
+
opacity: 1;
|
|
1183
|
+
}
|
|
1184
|
+
|
|
1185
|
+
.button--loading .button__spinner {
|
|
1186
|
+
/* Ensure spinner is visible in HCM */
|
|
1187
|
+
forced-color-adjust: auto;
|
|
1188
|
+
}
|
|
1189
|
+
}
|
|
1139
1190
|
/* ── hx-button-group ── */
|
|
1140
1191
|
:host {
|
|
1141
1192
|
display: inline-flex;
|
|
@@ -2081,7 +2132,8 @@
|
|
|
2081
2132
|
}
|
|
2082
2133
|
|
|
2083
2134
|
.clinical-status__dismiss-button:focus-visible {
|
|
2084
|
-
outline: var(--hx-focus-ring-width, 2px) solid
|
|
2135
|
+
outline: var(--hx-focus-ring-width, 2px) solid
|
|
2136
|
+
var(--hx-focus-ring-color, var(--hx-color-focus, #2563eb));
|
|
2085
2137
|
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
2086
2138
|
opacity: 1;
|
|
2087
2139
|
}
|
|
@@ -2126,7 +2178,8 @@
|
|
|
2126
2178
|
}
|
|
2127
2179
|
|
|
2128
2180
|
.clinical-status__acknowledge-button:focus-visible {
|
|
2129
|
-
outline: var(--hx-focus-ring-width, 2px) solid
|
|
2181
|
+
outline: var(--hx-focus-ring-width, 2px) solid
|
|
2182
|
+
var(--hx-focus-ring-color, var(--hx-color-focus, #2563eb));
|
|
2130
2183
|
outline-offset: var(--hx-focus-ring-offset, 2px);
|
|
2131
2184
|
}
|
|
2132
2185
|
|
|
@@ -4282,6 +4335,8 @@ export const helixGridItemStyles = css`
|
|
|
4282
4335
|
0 2px 4px -2px rgb(0 0 0 / 0.1)
|
|
4283
4336
|
);
|
|
4284
4337
|
min-width: var(--hx-menu-min-width, 10rem);
|
|
4338
|
+
max-height: var(--hx-menu-max-height, 20rem);
|
|
4339
|
+
overflow-y: auto;
|
|
4285
4340
|
outline: none;
|
|
4286
4341
|
}
|
|
4287
4342
|
/* ── hx-meter ── */
|
|
@@ -5230,6 +5285,7 @@ export const helixGridItemStyles = css`
|
|
|
5230
5285
|
--_value-color: var(--hx-patient-banner-value-color, var(--hx-color-neutral-900, #111827));
|
|
5231
5286
|
--_value-font-size: var(--hx-patient-banner-value-font-size, var(--hx-font-size-sm, 0.875rem));
|
|
5232
5287
|
--_photo-size: var(--hx-patient-banner-photo-size, var(--hx-space-10, 2.5rem));
|
|
5288
|
+
--_photo-bg: var(--hx-patient-banner-photo-bg, var(--hx-color-neutral-200, #e5e7eb));
|
|
5233
5289
|
}
|
|
5234
5290
|
|
|
5235
5291
|
* {
|
|
@@ -5247,6 +5303,7 @@ export const helixGridItemStyles = css`
|
|
|
5247
5303
|
border-bottom: var(--hx-border-width-thin, 1px) solid var(--_border-color);
|
|
5248
5304
|
font-family: var(--_font-family);
|
|
5249
5305
|
width: 100%;
|
|
5306
|
+
position: relative;
|
|
5250
5307
|
}
|
|
5251
5308
|
|
|
5252
5309
|
/* ─── Photo Area ─── */
|
|
@@ -5255,12 +5312,15 @@ export const helixGridItemStyles = css`
|
|
|
5255
5312
|
flex-shrink: 0;
|
|
5256
5313
|
width: var(--_photo-size);
|
|
5257
5314
|
height: var(--_photo-size);
|
|
5315
|
+
/* Minimum 44x44px touch target for interactive photo content. */
|
|
5316
|
+
min-width: 44px;
|
|
5317
|
+
min-height: 44px;
|
|
5258
5318
|
border-radius: var(--hx-border-radius-full, 9999px);
|
|
5259
5319
|
overflow: hidden;
|
|
5260
5320
|
display: flex;
|
|
5261
5321
|
align-items: center;
|
|
5262
5322
|
justify-content: center;
|
|
5263
|
-
background-color: var(--
|
|
5323
|
+
background-color: var(--_photo-bg);
|
|
5264
5324
|
}
|
|
5265
5325
|
|
|
5266
5326
|
/* ─── Fields Grid ─── */
|
|
@@ -5306,9 +5366,8 @@ export const helixGridItemStyles = css`
|
|
|
5306
5366
|
:host([aria-invalid='true']) .banner {
|
|
5307
5367
|
border-bottom-color: var(--hx-color-error-400, #f87171);
|
|
5308
5368
|
background-color: var(--hx-color-error-50, #fef2f2);
|
|
5309
|
-
/* Darken label color to maintain 4.5:1 contrast on error-50 background */
|
|
5369
|
+
/* Darken label color to maintain 4.5:1 contrast on error-50 background. */
|
|
5310
5370
|
--_label-color: var(--hx-patient-banner-label-color, var(--hx-color-neutral-700, #374151));
|
|
5311
|
-
position: relative;
|
|
5312
5371
|
}
|
|
5313
5372
|
|
|
5314
5373
|
:host([aria-invalid='true']) .banner::before {
|
|
@@ -5322,6 +5381,30 @@ export const helixGridItemStyles = css`
|
|
|
5322
5381
|
background-color: var(--hx-color-error-500, #ef4444);
|
|
5323
5382
|
border-radius: 0;
|
|
5324
5383
|
}
|
|
5384
|
+
|
|
5385
|
+
/* ─── Visually-hidden violation live region ─── */
|
|
5386
|
+
/* Announces identifier rule violations to screen readers without visible text. */
|
|
5387
|
+
|
|
5388
|
+
.violation-message {
|
|
5389
|
+
position: absolute;
|
|
5390
|
+
width: 1px;
|
|
5391
|
+
height: 1px;
|
|
5392
|
+
padding: 0;
|
|
5393
|
+
margin: -1px;
|
|
5394
|
+
overflow: hidden;
|
|
5395
|
+
clip: rect(0, 0, 0, 0);
|
|
5396
|
+
white-space: nowrap;
|
|
5397
|
+
border-width: 0;
|
|
5398
|
+
}
|
|
5399
|
+
|
|
5400
|
+
/* ─── Motion reduction ─── */
|
|
5401
|
+
|
|
5402
|
+
@media (prefers-reduced-motion: reduce) {
|
|
5403
|
+
* {
|
|
5404
|
+
transition: none !important;
|
|
5405
|
+
animation: none !important;
|
|
5406
|
+
}
|
|
5407
|
+
}
|
|
5325
5408
|
/* ── hx-phi-field ── */
|
|
5326
5409
|
:host {
|
|
5327
5410
|
display: inline-flex;
|
|
@@ -5400,6 +5483,18 @@ export const helixGridItemStyles = css`
|
|
|
5400
5483
|
pointer-events: none;
|
|
5401
5484
|
}
|
|
5402
5485
|
|
|
5486
|
+
/* ─── Disabled State ─── */
|
|
5487
|
+
|
|
5488
|
+
:host([disabled]) {
|
|
5489
|
+
opacity: var(--hx-phi-field-disabled-opacity, var(--hx-opacity-50, 0.5));
|
|
5490
|
+
pointer-events: none;
|
|
5491
|
+
cursor: not-allowed;
|
|
5492
|
+
}
|
|
5493
|
+
|
|
5494
|
+
.phi-field--disabled .phi-field__toggle {
|
|
5495
|
+
cursor: not-allowed;
|
|
5496
|
+
}
|
|
5497
|
+
|
|
5403
5498
|
/* ─── Reduced Motion ─── */
|
|
5404
5499
|
|
|
5405
5500
|
@media (prefers-reduced-motion: reduce) {
|
|
@@ -5948,8 +6043,45 @@ export const helixGridItemStyles = css`
|
|
|
5948
6043
|
}
|
|
5949
6044
|
}
|
|
5950
6045
|
/* ── hx-select ── */
|
|
5951
|
-
:
|
|
6046
|
+
/* ─── 3-tier token cascade: component → semantic → hardcoded fallback ─── */
|
|
6047
|
+
:host {
|
|
5952
6048
|
display: block;
|
|
6049
|
+
|
|
6050
|
+
/* Background & foreground */
|
|
6051
|
+
--_bg: var(--hx-select-bg, var(--hx-color-neutral-0, #ffffff));
|
|
6052
|
+
--_color: var(--hx-select-color, var(--hx-color-neutral-800, #212529));
|
|
6053
|
+
--_placeholder-color: var(--hx-select-placeholder-color, var(--hx-color-neutral-400, #adb5bd));
|
|
6054
|
+
|
|
6055
|
+
/* Label */
|
|
6056
|
+
--_label-color: var(--hx-select-label-color, var(--hx-color-neutral-700, #343a40));
|
|
6057
|
+
|
|
6058
|
+
/* Border */
|
|
6059
|
+
--_border-color: var(--hx-select-border-color, var(--hx-color-neutral-300, #ced4da));
|
|
6060
|
+
--_border-radius: var(--hx-select-border-radius, var(--hx-border-radius-md, 0.375rem));
|
|
6061
|
+
|
|
6062
|
+
/* Focus ring */
|
|
6063
|
+
--_focus-ring-color: var(
|
|
6064
|
+
--hx-select-focus-ring-color,
|
|
6065
|
+
var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
|
|
6066
|
+
);
|
|
6067
|
+
|
|
6068
|
+
/* Error */
|
|
6069
|
+
--_error-color: var(--hx-select-error-color, var(--hx-color-error-500, #dc3545));
|
|
6070
|
+
|
|
6071
|
+
/* Chevron */
|
|
6072
|
+
--_chevron-color: var(--hx-select-chevron-color, var(--hx-color-neutral-500, #6c757d));
|
|
6073
|
+
--_chevron-size: var(--hx-select-chevron-size, 0.5rem);
|
|
6074
|
+
|
|
6075
|
+
/* Listbox */
|
|
6076
|
+
--_listbox-bg: var(--hx-select-listbox-bg, var(--hx-color-neutral-0, #ffffff));
|
|
6077
|
+
--_option-hover-bg: var(--hx-select-option-hover-bg, var(--hx-color-primary-50, #eff6ff));
|
|
6078
|
+
--_option-selected-bg: var(
|
|
6079
|
+
--hx-select-option-selected-bg,
|
|
6080
|
+
var(--hx-color-primary-100, #dbeafe)
|
|
6081
|
+
);
|
|
6082
|
+
|
|
6083
|
+
/* Typography */
|
|
6084
|
+
--_font-family: var(--hx-select-font-family, var(--hx-font-family-sans, sans-serif));
|
|
5953
6085
|
}
|
|
5954
6086
|
|
|
5955
6087
|
:host([disabled]) {
|
|
@@ -5965,7 +6097,7 @@ export const helixGridItemStyles = css`
|
|
|
5965
6097
|
display: flex;
|
|
5966
6098
|
flex-direction: column;
|
|
5967
6099
|
gap: var(--hx-space-1, 0.25rem);
|
|
5968
|
-
font-family: var(--
|
|
6100
|
+
font-family: var(--_font-family);
|
|
5969
6101
|
position: relative;
|
|
5970
6102
|
}
|
|
5971
6103
|
|
|
@@ -5975,7 +6107,7 @@ export const helixGridItemStyles = css`
|
|
|
5975
6107
|
gap: var(--hx-space-1, 0.25rem);
|
|
5976
6108
|
font-size: var(--hx-font-size-sm, 0.875rem);
|
|
5977
6109
|
font-weight: var(--hx-font-weight-medium, 500);
|
|
5978
|
-
color: var(--
|
|
6110
|
+
color: var(--_label-color);
|
|
5979
6111
|
line-height: var(--hx-line-height-normal, 1.5);
|
|
5980
6112
|
}
|
|
5981
6113
|
|
|
@@ -5996,11 +6128,10 @@ export const helixGridItemStyles = css`
|
|
|
5996
6128
|
gap: var(--hx-space-2, 0.5rem);
|
|
5997
6129
|
width: 100%;
|
|
5998
6130
|
min-height: var(--hx-input-height-md, var(--hx-size-10, 2.5rem));
|
|
5999
|
-
border: var(--hx-border-width-thin, 1px) solid
|
|
6000
|
-
|
|
6001
|
-
|
|
6002
|
-
|
|
6003
|
-
color: var(--hx-select-color, var(--hx-color-neutral-800, #212529));
|
|
6131
|
+
border: var(--hx-border-width-thin, 1px) solid var(--_border-color);
|
|
6132
|
+
border-radius: var(--_border-radius);
|
|
6133
|
+
background-color: var(--_bg);
|
|
6134
|
+
color: var(--_color);
|
|
6004
6135
|
font-family: inherit;
|
|
6005
6136
|
font-size: var(--hx-font-size-md, 1rem);
|
|
6006
6137
|
line-height: var(--hx-line-height-normal, 1.5);
|
|
@@ -6015,18 +6146,11 @@ export const helixGridItemStyles = css`
|
|
|
6015
6146
|
|
|
6016
6147
|
.field__trigger:focus,
|
|
6017
6148
|
.field__trigger:focus-visible {
|
|
6018
|
-
border-color: var(
|
|
6019
|
-
--hx-select-focus-ring-color,
|
|
6020
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
|
|
6021
|
-
);
|
|
6149
|
+
border-color: var(--_focus-ring-color);
|
|
6022
6150
|
box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
|
|
6023
6151
|
color-mix(
|
|
6024
6152
|
in srgb,
|
|
6025
|
-
var(
|
|
6026
|
-
--hx-select-focus-ring-color,
|
|
6027
|
-
var(--hx-focus-ring-color, var(--hx-color-primary-400, #60a5fa))
|
|
6028
|
-
)
|
|
6029
|
-
calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
|
|
6153
|
+
var(--_focus-ring-color) calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
|
|
6030
6154
|
transparent
|
|
6031
6155
|
);
|
|
6032
6156
|
}
|
|
@@ -6056,15 +6180,15 @@ export const helixGridItemStyles = css`
|
|
|
6056
6180
|
}
|
|
6057
6181
|
|
|
6058
6182
|
.field__trigger--placeholder .field__trigger-value {
|
|
6059
|
-
color: var(--
|
|
6183
|
+
color: var(--_placeholder-color);
|
|
6060
6184
|
}
|
|
6061
6185
|
|
|
6062
6186
|
.field__chevron {
|
|
6063
6187
|
flex-shrink: 0;
|
|
6064
|
-
width:
|
|
6065
|
-
height:
|
|
6188
|
+
width: calc(var(--_chevron-size) * 1.5);
|
|
6189
|
+
height: var(--_chevron-size);
|
|
6066
6190
|
position: relative;
|
|
6067
|
-
color: var(--
|
|
6191
|
+
color: var(--_chevron-color);
|
|
6068
6192
|
pointer-events: none;
|
|
6069
6193
|
transition: transform var(--hx-transition-fast, 150ms ease);
|
|
6070
6194
|
}
|
|
@@ -6073,11 +6197,11 @@ export const helixGridItemStyles = css`
|
|
|
6073
6197
|
content: '';
|
|
6074
6198
|
position: absolute;
|
|
6075
6199
|
top: 0;
|
|
6076
|
-
left: 2px;
|
|
6077
|
-
width:
|
|
6078
|
-
height:
|
|
6079
|
-
border-inline-end: 1.5px solid currentColor;
|
|
6080
|
-
border-bottom: 1.5px solid currentColor;
|
|
6200
|
+
left: var(--hx-space-px, 2px);
|
|
6201
|
+
width: var(--_chevron-size);
|
|
6202
|
+
height: var(--_chevron-size);
|
|
6203
|
+
border-inline-end: var(--hx-border-width-thin, 1.5px) solid currentColor;
|
|
6204
|
+
border-bottom: var(--hx-border-width-thin, 1.5px) solid currentColor;
|
|
6081
6205
|
transform: rotate(45deg);
|
|
6082
6206
|
}
|
|
6083
6207
|
|
|
@@ -6086,17 +6210,16 @@ export const helixGridItemStyles = css`
|
|
|
6086
6210
|
}
|
|
6087
6211
|
|
|
6088
6212
|
.field--error .field__trigger {
|
|
6089
|
-
border-color: var(--
|
|
6213
|
+
border-color: var(--_error-color);
|
|
6090
6214
|
}
|
|
6091
6215
|
|
|
6092
6216
|
.field--error .field__trigger:focus,
|
|
6093
6217
|
.field--error .field__trigger:focus-visible {
|
|
6094
|
-
border-color: var(--
|
|
6218
|
+
border-color: var(--_error-color);
|
|
6095
6219
|
box-shadow: 0 0 0 var(--hx-focus-ring-width, 2px)
|
|
6096
6220
|
color-mix(
|
|
6097
6221
|
in srgb,
|
|
6098
|
-
var(--
|
|
6099
|
-
calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
|
|
6222
|
+
var(--_error-color) calc(var(--hx-focus-ring-opacity, 0.25) * 100%),
|
|
6100
6223
|
transparent
|
|
6101
6224
|
);
|
|
6102
6225
|
}
|
|
@@ -6107,10 +6230,9 @@ export const helixGridItemStyles = css`
|
|
|
6107
6230
|
left: 0;
|
|
6108
6231
|
right: 0;
|
|
6109
6232
|
z-index: var(--hx-z-index-dropdown, 1000);
|
|
6110
|
-
background-color: var(--
|
|
6111
|
-
border: var(--hx-border-width-thin, 1px) solid
|
|
6112
|
-
|
|
6113
|
-
border-radius: var(--hx-select-border-radius, var(--hx-border-radius-md, 0.375rem));
|
|
6233
|
+
background-color: var(--_listbox-bg);
|
|
6234
|
+
border: var(--hx-border-width-thin, 1px) solid var(--_border-color);
|
|
6235
|
+
border-radius: var(--_border-radius);
|
|
6114
6236
|
box-shadow: var(
|
|
6115
6237
|
--hx-select-listbox-shadow,
|
|
6116
6238
|
0 4px 16px var(--hx-overlay-neutral-12, rgba(13, 17, 23, 0.12))
|
|
@@ -6137,7 +6259,7 @@ export const helixGridItemStyles = css`
|
|
|
6137
6259
|
gap: var(--hx-space-2, 0.5rem);
|
|
6138
6260
|
padding: var(--hx-space-2, 0.5rem) var(--hx-space-3, 0.75rem);
|
|
6139
6261
|
font-size: var(--hx-font-size-md, 1rem);
|
|
6140
|
-
color: var(--
|
|
6262
|
+
color: var(--_color);
|
|
6141
6263
|
cursor: pointer;
|
|
6142
6264
|
user-select: none;
|
|
6143
6265
|
-webkit-user-select: none;
|
|
@@ -6145,23 +6267,23 @@ export const helixGridItemStyles = css`
|
|
|
6145
6267
|
}
|
|
6146
6268
|
|
|
6147
6269
|
.field__option:hover {
|
|
6148
|
-
background-color: var(--
|
|
6270
|
+
background-color: var(--_option-hover-bg);
|
|
6149
6271
|
}
|
|
6150
6272
|
|
|
6151
6273
|
.field__option--selected {
|
|
6152
|
-
background-color: var(--
|
|
6274
|
+
background-color: var(--_option-selected-bg);
|
|
6153
6275
|
font-weight: var(--hx-font-weight-medium, 500);
|
|
6154
6276
|
}
|
|
6155
6277
|
|
|
6156
6278
|
.field__option--focused {
|
|
6157
|
-
background-color: var(--
|
|
6279
|
+
background-color: var(--_option-hover-bg);
|
|
6158
6280
|
outline: var(--hx-focus-ring-width, 2px) solid
|
|
6159
|
-
var(--
|
|
6281
|
+
var(--_focus-ring-color, var(--hx-color-primary-500));
|
|
6160
6282
|
outline-offset: var(--hx-select-option-focus-ring-offset, -2px);
|
|
6161
6283
|
}
|
|
6162
6284
|
|
|
6163
6285
|
.field__option--focused.field__option--selected {
|
|
6164
|
-
background-color: var(--
|
|
6286
|
+
background-color: var(--_option-selected-bg);
|
|
6165
6287
|
}
|
|
6166
6288
|
|
|
6167
6289
|
.field__option--disabled {
|
|
@@ -6180,7 +6302,7 @@ export const helixGridItemStyles = css`
|
|
|
6180
6302
|
.field__no-options {
|
|
6181
6303
|
padding: var(--hx-space-3, 0.75rem);
|
|
6182
6304
|
text-align: center;
|
|
6183
|
-
color: var(--
|
|
6305
|
+
color: var(--_placeholder-color);
|
|
6184
6306
|
font-size: var(--hx-font-size-sm, 0.875rem);
|
|
6185
6307
|
}
|
|
6186
6308
|
|
|
@@ -7541,9 +7663,12 @@ export const helixGridItemStyles = css`
|
|
|
7541
7663
|
display: inline-flex;
|
|
7542
7664
|
align-items: center;
|
|
7543
7665
|
justify-content: center;
|
|
7666
|
+
gap: var(--hx-space-2, 0.5rem);
|
|
7544
7667
|
position: relative;
|
|
7545
7668
|
flex-shrink: 0;
|
|
7546
7669
|
--_dot-color: var(--hx-status-indicator-color-default, var(--hx-color-neutral-300, #ced4da));
|
|
7670
|
+
/* Default size (md) — always defined so .indicator never collapses to 0x0 */
|
|
7671
|
+
--_indicator-size: var(--hx-status-indicator-size-md, var(--hx-space-3, 0.75rem));
|
|
7547
7672
|
}
|
|
7548
7673
|
|
|
7549
7674
|
.indicator {
|
|
@@ -7598,18 +7723,44 @@ export const helixGridItemStyles = css`
|
|
|
7598
7723
|
}
|
|
7599
7724
|
}
|
|
7600
7725
|
|
|
7726
|
+
/* ─── Visible label (part="label") ─── */
|
|
7727
|
+
|
|
7728
|
+
.indicator__label {
|
|
7729
|
+
font-size: var(
|
|
7730
|
+
--hx-status-indicator-label-font-size,
|
|
7731
|
+
var(--hx-font-size-sm, var(--hx-text-sm, 0.875rem))
|
|
7732
|
+
);
|
|
7733
|
+
color: var(--hx-status-indicator-label-color, var(--hx-color-neutral-700, #374151));
|
|
7734
|
+
line-height: 1;
|
|
7735
|
+
white-space: nowrap;
|
|
7736
|
+
}
|
|
7737
|
+
|
|
7738
|
+
/* ─── aria-live announcement region (visually hidden) ─── */
|
|
7739
|
+
|
|
7740
|
+
.indicator__live-region {
|
|
7741
|
+
position: absolute;
|
|
7742
|
+
width: 1px;
|
|
7743
|
+
height: 1px;
|
|
7744
|
+
padding: 0;
|
|
7745
|
+
margin: -1px;
|
|
7746
|
+
overflow: hidden;
|
|
7747
|
+
clip: rect(0, 0, 0, 0);
|
|
7748
|
+
white-space: nowrap;
|
|
7749
|
+
border: 0;
|
|
7750
|
+
}
|
|
7751
|
+
|
|
7601
7752
|
/* ─── Size Variants ─── */
|
|
7602
7753
|
|
|
7603
|
-
:host([size='sm']) {
|
|
7754
|
+
:host([hx-size='sm']) {
|
|
7604
7755
|
--_indicator-size: var(--hx-status-indicator-size-sm, var(--hx-space-2, 0.5rem));
|
|
7605
7756
|
}
|
|
7606
7757
|
|
|
7607
|
-
:host([size='md']) {
|
|
7758
|
+
:host([hx-size='md']) {
|
|
7608
7759
|
--_indicator-size: var(--hx-status-indicator-size-md, var(--hx-space-3, 0.75rem));
|
|
7609
7760
|
}
|
|
7610
7761
|
|
|
7611
|
-
:host([size='lg']) {
|
|
7612
|
-
--_indicator-size: var(--hx-status-indicator-size-lg, var(--hx-
|
|
7762
|
+
:host([hx-size='lg']) {
|
|
7763
|
+
--_indicator-size: var(--hx-status-indicator-size-lg, var(--hx-space-4, 1rem));
|
|
7613
7764
|
}
|
|
7614
7765
|
|
|
7615
7766
|
/* ─── Status Colors ─── */
|
package/dist/css/helix-core.css
CHANGED
|
@@ -110,11 +110,28 @@
|
|
|
110
110
|
}
|
|
111
111
|
|
|
112
112
|
/* P1-B: Windows High Contrast Mode — avatar background is stripped by the system,
|
|
113
|
-
leaving no visual boundary.
|
|
113
|
+
leaving no visual boundary. Restore a visible border, explicit foreground, and
|
|
114
|
+
background so the avatar container, initials, and fallback icon all remain
|
|
115
|
+
perceivable at any contrast level.
|
|
114
116
|
WCAG 1.4.11 Non-text Contrast (Level AA). */
|
|
115
117
|
@media (forced-colors: active) {
|
|
116
118
|
.avatar {
|
|
119
|
+
forced-color-adjust: none;
|
|
117
120
|
border: 2px solid ButtonText;
|
|
121
|
+
background-color: Canvas;
|
|
122
|
+
color: CanvasText;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.avatar__initials {
|
|
126
|
+
color: CanvasText;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
.avatar__fallback-icon {
|
|
130
|
+
color: CanvasText;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.avatar__image {
|
|
134
|
+
forced-color-adjust: auto;
|
|
118
135
|
}
|
|
119
136
|
}
|
|
120
137
|
/* ── hx-badge ── */
|
|
@@ -557,6 +574,40 @@
|
|
|
557
574
|
.button__label {
|
|
558
575
|
flex: 1 1 auto;
|
|
559
576
|
}
|
|
577
|
+
|
|
578
|
+
/* ─── High Contrast Mode (forced-colors) ─── */
|
|
579
|
+
|
|
580
|
+
@media (forced-colors: active) {
|
|
581
|
+
.button {
|
|
582
|
+
/* Ensure button outline is visible in Windows High Contrast mode.
|
|
583
|
+
ButtonText/ButtonFace are system colors recognized by the browser. */
|
|
584
|
+
forced-color-adjust: none;
|
|
585
|
+
background-color: ButtonFace;
|
|
586
|
+
color: ButtonText;
|
|
587
|
+
border: 2px solid ButtonText;
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
.button:focus-visible {
|
|
591
|
+
outline: 3px solid Highlight;
|
|
592
|
+
outline-offset: 2px;
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
.button[disabled] {
|
|
596
|
+
background-color: ButtonFace;
|
|
597
|
+
color: GrayText;
|
|
598
|
+
border-color: GrayText;
|
|
599
|
+
opacity: 1;
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
:host([disabled]) {
|
|
603
|
+
opacity: 1;
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
.button--loading .button__spinner {
|
|
607
|
+
/* Ensure spinner is visible in HCM */
|
|
608
|
+
forced-color-adjust: auto;
|
|
609
|
+
}
|
|
610
|
+
}
|
|
560
611
|
/* ── hx-button-group ── */
|
|
561
612
|
:host {
|
|
562
613
|
display: inline-flex;
|
|
@@ -915,9 +915,12 @@
|
|
|
915
915
|
display: inline-flex;
|
|
916
916
|
align-items: center;
|
|
917
917
|
justify-content: center;
|
|
918
|
+
gap: var(--hx-space-2, 0.5rem);
|
|
918
919
|
position: relative;
|
|
919
920
|
flex-shrink: 0;
|
|
920
921
|
--_dot-color: var(--hx-status-indicator-color-default, var(--hx-color-neutral-300, #ced4da));
|
|
922
|
+
/* Default size (md) — always defined so .indicator never collapses to 0x0 */
|
|
923
|
+
--_indicator-size: var(--hx-status-indicator-size-md, var(--hx-space-3, 0.75rem));
|
|
921
924
|
}
|
|
922
925
|
|
|
923
926
|
.indicator {
|
|
@@ -972,18 +975,44 @@
|
|
|
972
975
|
}
|
|
973
976
|
}
|
|
974
977
|
|
|
978
|
+
/* ─── Visible label (part="label") ─── */
|
|
979
|
+
|
|
980
|
+
.indicator__label {
|
|
981
|
+
font-size: var(
|
|
982
|
+
--hx-status-indicator-label-font-size,
|
|
983
|
+
var(--hx-font-size-sm, var(--hx-text-sm, 0.875rem))
|
|
984
|
+
);
|
|
985
|
+
color: var(--hx-status-indicator-label-color, var(--hx-color-neutral-700, #374151));
|
|
986
|
+
line-height: 1;
|
|
987
|
+
white-space: nowrap;
|
|
988
|
+
}
|
|
989
|
+
|
|
990
|
+
/* ─── aria-live announcement region (visually hidden) ─── */
|
|
991
|
+
|
|
992
|
+
.indicator__live-region {
|
|
993
|
+
position: absolute;
|
|
994
|
+
width: 1px;
|
|
995
|
+
height: 1px;
|
|
996
|
+
padding: 0;
|
|
997
|
+
margin: -1px;
|
|
998
|
+
overflow: hidden;
|
|
999
|
+
clip: rect(0, 0, 0, 0);
|
|
1000
|
+
white-space: nowrap;
|
|
1001
|
+
border: 0;
|
|
1002
|
+
}
|
|
1003
|
+
|
|
975
1004
|
/* ─── Size Variants ─── */
|
|
976
1005
|
|
|
977
|
-
:host([size='sm']) {
|
|
1006
|
+
:host([hx-size='sm']) {
|
|
978
1007
|
--_indicator-size: var(--hx-status-indicator-size-sm, var(--hx-space-2, 0.5rem));
|
|
979
1008
|
}
|
|
980
1009
|
|
|
981
|
-
:host([size='md']) {
|
|
1010
|
+
:host([hx-size='md']) {
|
|
982
1011
|
--_indicator-size: var(--hx-status-indicator-size-md, var(--hx-space-3, 0.75rem));
|
|
983
1012
|
}
|
|
984
1013
|
|
|
985
|
-
:host([size='lg']) {
|
|
986
|
-
--_indicator-size: var(--hx-status-indicator-size-lg, var(--hx-
|
|
1014
|
+
:host([hx-size='lg']) {
|
|
1015
|
+
--_indicator-size: var(--hx-status-indicator-size-lg, var(--hx-space-4, 1rem));
|
|
987
1016
|
}
|
|
988
1017
|
|
|
989
1018
|
/* ─── Status Colors ─── */
|