@helixui/library 1.1.2-next.2 → 1.1.2-next.4

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.
Files changed (33) hide show
  1. package/custom-elements.json +623 -629
  2. package/dist/components/hx-avatar/hx-avatar.styles.d.ts.map +1 -1
  3. package/dist/components/hx-avatar/index.js +1 -1
  4. package/dist/components/hx-button/hx-button.d.ts +12 -6
  5. package/dist/components/hx-button/hx-button.d.ts.map +1 -1
  6. package/dist/components/hx-button/hx-button.styles.d.ts.map +1 -1
  7. package/dist/components/hx-button/index.js +1 -1
  8. package/dist/components/hx-clinical-status/hx-clinical-status.d.ts +14 -6
  9. package/dist/components/hx-clinical-status/hx-clinical-status.d.ts.map +1 -1
  10. package/dist/components/hx-clinical-status/hx-clinical-status.styles.d.ts.map +1 -1
  11. package/dist/components/hx-clinical-status/index.d.ts +1 -1
  12. package/dist/components/hx-clinical-status/index.d.ts.map +1 -1
  13. package/dist/components/hx-clinical-status/index.js +1 -1
  14. package/dist/css/helix-all.css +56 -3
  15. package/dist/css/helix-core.css +52 -1
  16. package/dist/css/hx-avatar.css +18 -1
  17. package/dist/css/hx-button.css +34 -0
  18. package/dist/css/hx-clinical-status.css +4 -2
  19. package/dist/css/index.css +1 -1
  20. package/dist/css/manifest.json +2 -1
  21. package/dist/index.d.ts +1 -1
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +3 -3
  24. package/dist/shared/{hx-avatar-7p1cj3lG.js → hx-avatar-CZfA9KEl.js} +27 -10
  25. package/dist/shared/hx-avatar-CZfA9KEl.js.map +1 -0
  26. package/dist/shared/{hx-button-6S3DwuIj.js → hx-button-CC1YH9RZ.js} +52 -12
  27. package/dist/shared/hx-button-CC1YH9RZ.js.map +1 -0
  28. package/dist/shared/{hx-clinical-status-De8yrA5I.js → hx-clinical-status-D6eaplvs.js} +5 -3
  29. package/dist/shared/hx-clinical-status-D6eaplvs.js.map +1 -0
  30. package/package.json +2 -2
  31. package/dist/shared/hx-avatar-7p1cj3lG.js.map +0 -1
  32. package/dist/shared/hx-button-6S3DwuIj.js.map +0 -1
  33. package/dist/shared/hx-clinical-status-De8yrA5I.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"hx-avatar.styles.d.ts","sourceRoot":"","sources":["../../../src/components/hx-avatar/hx-avatar.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB,yBAqH7B,CAAC"}
1
+ {"version":3,"file":"hx-avatar.styles.d.ts","sourceRoot":"","sources":["../../../src/components/hx-avatar/hx-avatar.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB,yBAsI7B,CAAC"}
@@ -1,4 +1,4 @@
1
- import { H as e } from "../../shared/hx-avatar-7p1cj3lG.js";
1
+ import { H as e } from "../../shared/hx-avatar-CZfA9KEl.js";
2
2
  export {
3
3
  e as HelixAvatar
4
4
  };
@@ -109,14 +109,20 @@ export declare class HelixButton extends HelixButton_base {
109
109
  updated(changedProperties: PropertyValues<this>): void;
110
110
  /** @internal */
111
111
  private _handleDefaultSlotChange;
112
- /** @private */
113
- /** @internal */
112
+ /**
113
+ * @private
114
+ * @internal
115
+ */
114
116
  private _handleClick;
115
- /** @private */
116
- /** @internal */
117
+ /**
118
+ * @private
119
+ * @internal
120
+ */
117
121
  private _renderSpinner;
118
- /** @private */
119
- /** @internal */
122
+ /**
123
+ * @private
124
+ * @internal
125
+ */
120
126
  private _renderInner;
121
127
  render(): TemplateResult<1>;
122
128
  }
@@ -1 +1 @@
1
- {"version":3,"file":"hx-button.d.ts","sourceRoot":"","sources":["../../../src/components/hx-button/hx-button.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAiB,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;;AAS1F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,qBACa,WAAY,SAAQ,gBAA8B;IAC7D,OAAgB,MAAM,4BAAoC;IAI1D,gBAAgB;IAChB,MAAM,CAAC,cAAc,UAAQ;IAE7B,gBAAgB;IAChB,OAAO,CAAC,UAAU,CAAmB;;IAUrC;;;OAGG;IAEH,OAAO,EAAE,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAa;IAE3F;;;OAGG;IAEH,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAQ;IAEhC;;;OAGG;IAEH,QAAQ,UAAS;IAEjB;;;;OAIG;IAEH,OAAO,UAAS;IAEhB;;;OAGG;IAEH,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAY;IAE/C;;;OAGG;IAEH,IAAI,EAAE,MAAM,GAAG,SAAS,CAAa;IAErC;;;OAGG;IAEH,MAAM,EAAE,MAAM,GAAG,SAAS,CAAa;IAEvC;;;OAGG;IAEH,IAAI,EAAE,MAAM,GAAG,SAAS,CAAa;IAErC;;;OAGG;IAEH,KAAK,EAAE,MAAM,GAAG,SAAS,CAAa;IAEtC;;;;OAIG;IAEH,IAAI,UAAS;IAEb;;;;OAIG;IAEH,QAAQ,UAAS;IAIjB,mDAAmD;IACnD,IAAI,IAAI,IAAI,eAAe,GAAG,IAAI,CAEjC;IAED,gBAAgB;IAChB,oBAAoB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAM7C,gBAAgB;IAChB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAO5B;IAEF,OAAO,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAgB/D,gBAAgB;IAChB,OAAO,CAAC,wBAAwB;IAahC,eAAe;IACf,gBAAgB;IAChB,OAAO,CAAC,YAAY;IAgCpB,eAAe;IACf,gBAAgB;IAChB,OAAO,CAAC,cAAc;IA6BtB,eAAe;IACf,gBAAgB;IAChB,OAAO,CAAC,YAAY;IAiBX,MAAM;CAyChB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,WAAW,EAAE,WAAW,CAAC;KAC1B;CACF"}
1
+ {"version":3,"file":"hx-button.d.ts","sourceRoot":"","sources":["../../../src/components/hx-button/hx-button.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAiB,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;;AAS1F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,qBACa,WAAY,SAAQ,gBAA8B;IAC7D,OAAgB,MAAM,4BAAoC;IAI1D,gBAAgB;IAChB,MAAM,CAAC,cAAc,UAAQ;IAE7B,gBAAgB;IAChB,OAAO,CAAC,UAAU,CAAmB;;IAUrC;;;OAGG;IAEH,OAAO,EAAE,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAa;IAE3F;;;OAGG;IAEH,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAQ;IAEhC;;;OAGG;IAEH,QAAQ,UAAS;IAEjB;;;;OAIG;IAEH,OAAO,UAAS;IAEhB;;;OAGG;IAEH,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAY;IAE/C;;;OAGG;IAEH,IAAI,EAAE,MAAM,GAAG,SAAS,CAAa;IAErC;;;OAGG;IAEH,MAAM,EAAE,MAAM,GAAG,SAAS,CAAa;IAEvC;;;OAGG;IAEH,IAAI,EAAE,MAAM,GAAG,SAAS,CAAa;IAErC;;;OAGG;IAEH,KAAK,EAAE,MAAM,GAAG,SAAS,CAAa;IAEtC;;;;OAIG;IAEH,IAAI,UAAS;IAEb;;;;OAIG;IAEH,QAAQ,UAAS;IAIjB,mDAAmD;IACnD,IAAI,IAAI,IAAI,eAAe,GAAG,IAAI,CAEjC;IAED,gBAAgB;IAChB,oBAAoB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAM7C,gBAAgB;IAChB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAO5B;IAEF,OAAO,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAgB/D,gBAAgB;IAChB,OAAO,CAAC,wBAAwB;IAahC;;;OAGG;IACH,OAAO,CAAC,YAAY;IAgCpB;;;OAGG;IACH,OAAO,CAAC,cAAc;IA6BtB;;;OAGG;IACH,OAAO,CAAC,YAAY;IAiBX,MAAM;CAyChB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,WAAW,EAAE,WAAW,CAAC;KAC1B;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"hx-button.styles.d.ts","sourceRoot":"","sources":["../../../src/components/hx-button/hx-button.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB,yBAsQ7B,CAAC"}
1
+ {"version":3,"file":"hx-button.styles.d.ts","sourceRoot":"","sources":["../../../src/components/hx-button/hx-button.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB,yBAwS7B,CAAC"}
@@ -1,4 +1,4 @@
1
- import { H as e } from "../../shared/hx-button-6S3DwuIj.js";
1
+ import { H as e } from "../../shared/hx-button-CC1YH9RZ.js";
2
2
  export {
3
3
  e as HelixButton
4
4
  };
@@ -1,3 +1,4 @@
1
+ import { PropertyValues } from 'lit';
1
2
  import { HelixElement } from '../../base/index.js';
2
3
  /** Clinical severity level for alert fatigue prevention. */
3
4
  export type ClinicalSeverity = 'info' | 'warning' | 'critical' | 'emergent';
@@ -12,8 +13,8 @@ export type ClinicalSeverity = 'info' | 'warning' | 'critical' | 'emergent';
12
13
  *
13
14
  * @slot - Default slot for additional message content.
14
15
  *
15
- * @fires {CustomEvent} hx-dismiss - Dispatched when the user dismisses the status.
16
- * @fires {CustomEvent} hx-acknowledge - Dispatched when the user acknowledges a critical/emergent status.
16
+ * @fires {CustomEvent<void>} hx-dismiss - Dispatched when the user dismisses the status.
17
+ * @fires {CustomEvent<{ severity: ClinicalSeverity; persistent: boolean }>} hx-acknowledge - Dispatched when the user acknowledges a critical/emergent status.
17
18
  *
18
19
  * @csspart container - The outer status container.
19
20
  * @csspart icon - The icon container.
@@ -80,9 +81,15 @@ export declare class HelixClinicalStatus extends HelixElement {
80
81
  private _hasSlottedContent;
81
82
  /** @internal */
82
83
  private _acknowledged;
83
- /** SSR-safe unique ID for ARIA relationships. */
84
+ /**
85
+ * SSR-safe unique ID for ARIA relationships.
86
+ * @internal
87
+ */
84
88
  private _componentId;
85
- /** @internal Tracks whether `persistent` was explicitly set by the consumer. */
89
+ /**
90
+ * Tracks whether `persistent` was explicitly set by the consumer.
91
+ * @internal
92
+ */
86
93
  private _persistentExplicitlySet;
87
94
  /** Returns true when the severity requires assertive announcement. */
88
95
  private get _isAssertive();
@@ -96,7 +103,7 @@ export declare class HelixClinicalStatus extends HelixElement {
96
103
  private get _effectivePersistent();
97
104
  connectedCallback(): void;
98
105
  attributeChangedCallback(name: string, _old: string | null, value: string | null): void;
99
- protected updated(changedProperties: Map<PropertyKey, unknown>): void;
106
+ protected updated(changedProperties: PropertyValues<this>): void;
100
107
  /** @internal */
101
108
  private _renderInfoIcon;
102
109
  /** @internal */
@@ -122,5 +129,6 @@ declare global {
122
129
  'hx-clinical-status': HelixClinicalStatus;
123
130
  }
124
131
  }
125
- export type { HelixClinicalStatus as HxClinicalStatus };
132
+ /** Canonical type alias for the hx-clinical-status component. */
133
+ export type HxClinicalStatus = HelixClinicalStatus;
126
134
  //# sourceMappingURL=hx-clinical-status.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hx-clinical-status.d.ts","sourceRoot":"","sources":["../../../src/components/hx-clinical-status/hx-clinical-status.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAInD,4DAA4D;AAC5D,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;AAI5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,qBACa,mBAAoB,SAAQ,YAAY;IACnD,OAAgB,MAAM,4BAA4C;IAIlE;;;;;;;OAOG;IAEH,QAAQ,EAAE,gBAAgB,CAAU;IAEpC;;;OAGG;IAEH,OAAO,SAAM;IAEb;;;;OAIG;IAEH,WAAW,UAAS;IAEpB;;;;;OAKG;IAEH,UAAU,UAAS;IAEnB;;;OAGG;IAEH,IAAI,SAAM;IAEV;;;;OAIG;IAEH,OAAO,UAAS;IAIhB,gBAAgB;IAEhB,OAAO,CAAC,kBAAkB,CAAS;IAEnC,gBAAgB;IAEhB,OAAO,CAAC,aAAa,CAAS;IAE9B,iDAAiD;IACjD,OAAO,CAAC,YAAY,CAAY;IAEhC,gFAAgF;IAChF,OAAO,CAAC,wBAAwB,CAAS;IAIzC,sEAAsE;IACtE,OAAO,KAAK,YAAY,GAEvB;IAED,2DAA2D;IAC3D,OAAO,KAAK,KAAK,GAEhB;IAED,0EAA0E;IAC1E,OAAO,CAAC,cAAc;IAUtB,uEAAuE;IACvE,OAAO,KAAK,uBAAuB,GAElC;IAED,uEAAuE;IACvE,OAAO,KAAK,oBAAoB,GAK/B;IAIQ,iBAAiB,IAAI,IAAI;IAKzB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;cAO7E,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,IAAI;IAS9E,gBAAgB;IAChB,OAAO,CAAC,eAAe;IAQvB,gBAAgB;IAChB,OAAO,CAAC,kBAAkB;IAQ1B,gBAAgB;IAChB,OAAO,CAAC,mBAAmB;IAQ3B,gBAAgB;IAChB,OAAO,CAAC,mBAAmB;IAQ3B,gBAAgB;IAChB,OAAO,CAAC,kBAAkB;IAc1B,gBAAgB;IAChB,OAAO,CAAC,gBAAgB;IAUxB,gBAAgB;IAChB,OAAO,CAAC,iBAAiB;IAOzB,gBAAgB;IAChB,OAAO,CAAC,cAAc;IAStB,gBAAgB;IAChB,OAAO,CAAC,kBAAkB;IAgBjB,MAAM;CA+DhB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,oBAAoB,EAAE,mBAAmB,CAAC;KAC3C;CACF;AAED,YAAY,EAAE,mBAAmB,IAAI,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"hx-clinical-status.d.ts","sourceRoot":"","sources":["../../../src/components/hx-clinical-status/hx-clinical-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAIzD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAInD,4DAA4D;AAC5D,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;AAI5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,qBACa,mBAAoB,SAAQ,YAAY;IACnD,OAAgB,MAAM,4BAA4C;IAIlE;;;;;;;OAOG;IAEH,QAAQ,EAAE,gBAAgB,CAAU;IAEpC;;;OAGG;IAEH,OAAO,SAAM;IAEb;;;;OAIG;IAEH,WAAW,UAAS;IAEpB;;;;;OAKG;IAEH,UAAU,UAAS;IAEnB;;;OAGG;IAEH,IAAI,SAAM;IAEV;;;;OAIG;IAEH,OAAO,UAAS;IAIhB,gBAAgB;IAEhB,OAAO,CAAC,kBAAkB,CAAS;IAEnC,gBAAgB;IAEhB,OAAO,CAAC,aAAa,CAAS;IAE9B;;;OAGG;IACH,OAAO,CAAC,YAAY,CAAY;IAEhC;;;OAGG;IACH,OAAO,CAAC,wBAAwB,CAAS;IAIzC,sEAAsE;IACtE,OAAO,KAAK,YAAY,GAEvB;IAED,2DAA2D;IAC3D,OAAO,KAAK,KAAK,GAEhB;IAED,0EAA0E;IAC1E,OAAO,CAAC,cAAc;IAUtB,uEAAuE;IACvE,OAAO,KAAK,uBAAuB,GAElC;IAED,uEAAuE;IACvE,OAAO,KAAK,oBAAoB,GAK/B;IAIQ,iBAAiB,IAAI,IAAI;IAKzB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;cAO7E,OAAO,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IASzE,gBAAgB;IAChB,OAAO,CAAC,eAAe;IAQvB,gBAAgB;IAChB,OAAO,CAAC,kBAAkB;IAQ1B,gBAAgB;IAChB,OAAO,CAAC,mBAAmB;IAQ3B,gBAAgB;IAChB,OAAO,CAAC,mBAAmB;IAQ3B,gBAAgB;IAChB,OAAO,CAAC,kBAAkB;IAc1B,gBAAgB;IAChB,OAAO,CAAC,gBAAgB;IAUxB,gBAAgB;IAChB,OAAO,CAAC,iBAAiB;IAOzB,gBAAgB;IAChB,OAAO,CAAC,cAAc;IAStB,gBAAgB;IAChB,OAAO,CAAC,kBAAkB;IAgBjB,MAAM;CA+DhB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,oBAAoB,EAAE,mBAAmB,CAAC;KAC3C;CACF;AAED,iEAAiE;AACjE,MAAM,MAAM,gBAAgB,GAAG,mBAAmB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"hx-clinical-status.styles.d.ts","sourceRoot":"","sources":["../../../src/components/hx-clinical-status/hx-clinical-status.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,yBAAyB,yBAsPrC,CAAC"}
1
+ {"version":3,"file":"hx-clinical-status.styles.d.ts","sourceRoot":"","sources":["../../../src/components/hx-clinical-status/hx-clinical-status.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,yBAAyB,yBAwPrC,CAAC"}
@@ -1,3 +1,3 @@
1
1
  export { HelixClinicalStatus } from './hx-clinical-status.js';
2
- export type { ClinicalSeverity } from './hx-clinical-status.js';
2
+ export type { ClinicalSeverity, HxClinicalStatus } from './hx-clinical-status.js';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/hx-clinical-status/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/hx-clinical-status/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -1,4 +1,4 @@
1
- import { H as l } from "../../shared/hx-clinical-status-De8yrA5I.js";
1
+ import { H as l } from "../../shared/hx-clinical-status-D6eaplvs.js";
2
2
  export {
3
3
  l as HelixClinicalStatus
4
4
  };
@@ -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. Add a border so the avatar remains perceivable.
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 var(--hx-focus-ring-color, #2563eb);
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 var(--hx-focus-ring-color, #2563eb);
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
 
@@ -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. Add a border so the avatar remains perceivable.
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;
@@ -108,10 +108,27 @@
108
108
  }
109
109
 
110
110
  /* P1-B: Windows High Contrast Mode — avatar background is stripped by the system,
111
- leaving no visual boundary. Add a border so the avatar remains perceivable.
111
+ leaving no visual boundary. Restore a visible border, explicit foreground, and
112
+ background so the avatar container, initials, and fallback icon all remain
113
+ perceivable at any contrast level.
112
114
  WCAG 1.4.11 Non-text Contrast (Level AA). */
113
115
  @media (forced-colors: active) {
114
116
  .avatar {
117
+ forced-color-adjust: none;
115
118
  border: 2px solid ButtonText;
119
+ background-color: Canvas;
120
+ color: CanvasText;
121
+ }
122
+
123
+ .avatar__initials {
124
+ color: CanvasText;
125
+ }
126
+
127
+ .avatar__fallback-icon {
128
+ color: CanvasText;
129
+ }
130
+
131
+ .avatar__image {
132
+ forced-color-adjust: auto;
116
133
  }
117
134
  }
@@ -260,3 +260,37 @@
260
260
  .button__label {
261
261
  flex: 1 1 auto;
262
262
  }
263
+
264
+ /* ─── High Contrast Mode (forced-colors) ─── */
265
+
266
+ @media (forced-colors: active) {
267
+ .button {
268
+ /* Ensure button outline is visible in Windows High Contrast mode.
269
+ ButtonText/ButtonFace are system colors recognized by the browser. */
270
+ forced-color-adjust: none;
271
+ background-color: ButtonFace;
272
+ color: ButtonText;
273
+ border: 2px solid ButtonText;
274
+ }
275
+
276
+ .button:focus-visible {
277
+ outline: 3px solid Highlight;
278
+ outline-offset: 2px;
279
+ }
280
+
281
+ .button[disabled] {
282
+ background-color: ButtonFace;
283
+ color: GrayText;
284
+ border-color: GrayText;
285
+ opacity: 1;
286
+ }
287
+
288
+ :host([disabled]) {
289
+ opacity: 1;
290
+ }
291
+
292
+ .button--loading .button__spinner {
293
+ /* Ensure spinner is visible in HCM */
294
+ forced-color-adjust: auto;
295
+ }
296
+ }
@@ -184,7 +184,8 @@
184
184
  }
185
185
 
186
186
  .clinical-status__dismiss-button:focus-visible {
187
- outline: var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, #2563eb);
187
+ outline: var(--hx-focus-ring-width, 2px) solid
188
+ var(--hx-focus-ring-color, var(--hx-color-focus, #2563eb));
188
189
  outline-offset: var(--hx-focus-ring-offset, 2px);
189
190
  opacity: 1;
190
191
  }
@@ -229,7 +230,8 @@
229
230
  }
230
231
 
231
232
  .clinical-status__acknowledge-button:focus-visible {
232
- outline: var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, #2563eb);
233
+ outline: var(--hx-focus-ring-width, 2px) solid
234
+ var(--hx-focus-ring-color, var(--hx-color-focus, #2563eb));
233
235
  outline-offset: var(--hx-focus-ring-offset, 2px);
234
236
  }
235
237
 
@@ -1,4 +1,4 @@
1
- /* index.css — generated 2026-03-26T20:25:41.828Z */
1
+ /* index.css — generated 2026-03-26T21:57:25.690Z */
2
2
  /* Imports all per-component CSS files for Drupal asset pipeline */
3
3
 
4
4
  @import './hx-accordion.css';
@@ -1,5 +1,5 @@
1
1
  {
2
- "generated": "2026-03-26T20:25:41.827Z",
2
+ "generated": "2026-03-26T21:57:25.689Z",
3
3
  "components": [
4
4
  {
5
5
  "name": "hx-accordion",
@@ -462,6 +462,7 @@
462
462
  "--hx-color-error-700",
463
463
  "--hx-color-error-800",
464
464
  "--hx-color-error-900",
465
+ "--hx-color-focus",
465
466
  "--hx-color-info-200",
466
467
  "--hx-color-info-50",
467
468
  "--hx-color-info-500",
package/dist/index.d.ts CHANGED
@@ -34,7 +34,7 @@ export { HelixCarouselItem } from './components/hx-carousel/index.js';
34
34
  export { HelixCheckbox } from './components/hx-checkbox/index.js';
35
35
  export { HelixCheckboxGroup } from './components/hx-checkbox-group/index.js';
36
36
  export { HelixClinicalStatus } from './components/hx-clinical-status/index.js';
37
- export type { ClinicalSeverity } from './components/hx-clinical-status/index.js';
37
+ export type { ClinicalSeverity, HxClinicalStatus } from './components/hx-clinical-status/index.js';
38
38
  export { HelixCodeSnippet } from './components/hx-code-snippet/index.js';
39
39
  export { HelixColorPicker } from './components/hx-color-picker/index.js';
40
40
  export { HelixCombobox, type ComboboxOption, type HxComboboxSize } from './components/hx-combobox/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,17 +1,17 @@
1
1
  import { H as d, a as h } from "./shared/hx-accordion-_KeulaQR.js";
2
2
  import { H as b } from "./shared/hx-action-bar-vGFnNwNY.js";
3
3
  import { H as S } from "./shared/hx-alert-DRZYP0Oo.js";
4
- import { H as g } from "./shared/hx-avatar-7p1cj3lG.js";
4
+ import { H as g } from "./shared/hx-avatar-CZfA9KEl.js";
5
5
  import { H as v } from "./shared/hx-badge-Xg7zoh4Q.js";
6
6
  import { H as y } from "./shared/hx-banner-2RS7Nux4.js";
7
7
  import { H as E, a as B } from "./shared/hx-breadcrumb-item-B2rjepqy.js";
8
- import { H as w } from "./shared/hx-button-6S3DwuIj.js";
8
+ import { H as w } from "./shared/hx-button-CC1YH9RZ.js";
9
9
  import { H as A } from "./shared/hx-button-group-ChTQsnQj.js";
10
10
  import { H as L } from "./shared/hx-card-dIKdcMhr.js";
11
11
  import { H as N, a as R } from "./shared/hx-carousel-item-Cm8a1nAi.js";
12
12
  import { H as U } from "./shared/hx-checkbox-_WUiuTo9.js";
13
13
  import { H as V } from "./shared/hx-checkbox-group-B-ci-dxp.js";
14
- import { H as W } from "./shared/hx-clinical-status-De8yrA5I.js";
14
+ import { H as W } from "./shared/hx-clinical-status-D6eaplvs.js";
15
15
  import { H as Y } from "./shared/hx-code-snippet-CQsyvthi.js";
16
16
  import { H as q } from "./shared/hx-color-picker-Dk2Myvaf.js";
17
17
  import { H as J } from "./shared/hx-combobox-CNAJXIxo.js";
@@ -2,7 +2,7 @@ import { css as _, LitElement as y, html as v, nothing as d } from "lit";
2
2
  import { property as l, state as c, customElement as z } from "lit/decorators.js";
3
3
  import { classMap as p } from "lit/directives/class-map.js";
4
4
  import { tokenStyles as S } from "@helixui/tokens/lit";
5
- import { d as m } from "./dev-warn-YlwPHjtX.js";
5
+ import { d as g } from "./dev-warn-YlwPHjtX.js";
6
6
  const w = _`
7
7
  :host {
8
8
  display: inline-block;
@@ -113,16 +113,33 @@ const w = _`
113
113
  }
114
114
 
115
115
  /* P1-B: Windows High Contrast Mode — avatar background is stripped by the system,
116
- leaving no visual boundary. Add a border so the avatar remains perceivable.
116
+ leaving no visual boundary. Restore a visible border, explicit foreground, and
117
+ background so the avatar container, initials, and fallback icon all remain
118
+ perceivable at any contrast level.
117
119
  WCAG 1.4.11 Non-text Contrast (Level AA). */
118
120
  @media (forced-colors: active) {
119
121
  .avatar {
122
+ forced-color-adjust: none;
120
123
  border: 2px solid ButtonText;
124
+ background-color: Canvas;
125
+ color: CanvasText;
126
+ }
127
+
128
+ .avatar__initials {
129
+ color: CanvasText;
130
+ }
131
+
132
+ .avatar__fallback-icon {
133
+ color: CanvasText;
134
+ }
135
+
136
+ .avatar__image {
137
+ forced-color-adjust: auto;
121
138
  }
122
139
  }
123
140
  `;
124
- var E = Object.defineProperty, $ = Object.getOwnPropertyDescriptor, o = (t, r, e, a) => {
125
- for (var s = a > 1 ? void 0 : a ? $(r, e) : r, n = t.length - 1, h; n >= 0; n--)
141
+ var E = Object.defineProperty, C = Object.getOwnPropertyDescriptor, o = (t, r, e, a) => {
142
+ for (var s = a > 1 ? void 0 : a ? C(r, e) : r, n = t.length - 1, h; n >= 0; n--)
126
143
  (h = t[n]) && (s = (a ? h(r, e, s) : h(s)) || s);
127
144
  return a && s && E(r, e, s), s;
128
145
  };
@@ -137,12 +154,12 @@ let i = class extends y {
137
154
  willUpdate(t) {
138
155
  t.has("src") && (this._imgError = !1), (t.has("src") || t.has("alt")) && this.src && this.alt, (t.has("initials") || t.has("label")) && this.initials && this.label;
139
156
  const r = ["xs", "sm", "md", "lg", "xl"];
140
- t.has("size") && !r.includes(this.size) && m(
157
+ t.has("size") && !r.includes(this.size) && g(
141
158
  "hx-avatar",
142
159
  `Invalid hx-size="${String(this.size)}". Valid values: xs, sm, md, lg, xl. Rendering with "md".`
143
160
  );
144
161
  const e = ["circle", "square"];
145
- t.has("shape") && !e.includes(this.shape) && m(
162
+ t.has("shape") && !e.includes(this.shape) && g(
146
163
  "hx-avatar",
147
164
  `Invalid shape="${String(this.shape)}". Valid values: circle, square. Rendering with "circle".`
148
165
  );
@@ -188,10 +205,10 @@ let i = class extends y {
188
205
  }
189
206
  // ─── Render ───
190
207
  render() {
191
- const t = this.src, r = this._hasDefaultSlot, e = !r && !!t && !this._imgError, a = !r && !e && !!this.initials.trim(), s = !r && !e && !a, n = e ? this.alt || this.label || "Avatar" : a ? this.label || this.initials : this.label || "Avatar", h = ["xs", "sm", "md", "lg", "xl"], g = ["circle", "square"], f = h.includes(this.size) ? this.size : "md", x = g.includes(this.shape) ? this.shape : "circle", u = {
208
+ const t = this.src, r = this._hasDefaultSlot, e = !r && !!t && !this._imgError, a = !r && !e && !!this.initials.trim(), s = !r && !e && !a, n = e ? this.alt || this.label || "Avatar" : a ? this.label || this.initials : this.label || "Avatar", h = ["xs", "sm", "md", "lg", "xl"], m = ["circle", "square"], f = h.includes(this.size) ? this.size : "md", u = m.includes(this.shape) ? this.shape : "circle", x = {
192
209
  avatar: !0,
193
210
  [`avatar--${f}`]: !0,
194
- [`avatar--${x}`]: !0
211
+ [`avatar--${u}`]: !0
195
212
  }, b = {
196
213
  avatar__badge: !0,
197
214
  "avatar__badge--hidden": !this._hasBadgeSlot
@@ -200,7 +217,7 @@ let i = class extends y {
200
217
  <div class="avatar-wrapper">
201
218
  <div
202
219
  part="avatar"
203
- class=${p(u)}
220
+ class=${p(x)}
204
221
  role=${r ? d : "img"}
205
222
  aria-label=${r ? d : n}
206
223
  >
@@ -258,4 +275,4 @@ i = o([
258
275
  export {
259
276
  i as H
260
277
  };
261
- //# sourceMappingURL=hx-avatar-7p1cj3lG.js.map
278
+ //# sourceMappingURL=hx-avatar-CZfA9KEl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hx-avatar-CZfA9KEl.js","sources":["../../src/components/hx-avatar/hx-avatar.styles.ts","../../src/components/hx-avatar/hx-avatar.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const helixAvatarStyles = css`\n :host {\n display: inline-block;\n }\n\n /* P2-5: Respect the HTML hidden attribute — custom elements with explicit display ignore it otherwise. */\n :host([hidden]) {\n display: none !important;\n }\n\n /* P0-2: Wrapper provides the positioning context for the badge slot, outside overflow: hidden. */\n .avatar-wrapper {\n position: relative;\n display: inline-flex;\n }\n\n .avatar {\n display: flex;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n width: var(--hx-avatar-size);\n height: var(--hx-avatar-size);\n background-color: var(--hx-avatar-bg, var(--hx-color-primary-100));\n color: var(--hx-avatar-color, var(--hx-color-primary-700));\n border-radius: var(--hx-avatar-border-radius);\n flex-shrink: 0;\n }\n\n /* ─── Size Variants ─── */\n\n .avatar--xs {\n --hx-avatar-size: var(--hx-size-6, 1.5rem);\n --hx-avatar-font-size: var(--hx-font-size-2xs, 0.625rem);\n }\n\n .avatar--sm {\n --hx-avatar-size: var(--hx-size-8, 2rem);\n --hx-avatar-font-size: var(--hx-font-size-xs, 0.75rem);\n }\n\n .avatar--md {\n --hx-avatar-size: var(--hx-size-10, 2.5rem);\n --hx-avatar-font-size: var(--hx-font-size-sm, 0.875rem);\n }\n\n .avatar--lg {\n --hx-avatar-size: var(--hx-size-12, 3rem);\n --hx-avatar-font-size: var(--hx-font-size-md, 1rem);\n }\n\n .avatar--xl {\n --hx-avatar-size: var(--hx-size-16, 4rem);\n --hx-avatar-font-size: var(--hx-font-size-lg, 1.125rem);\n }\n\n /* ─── Shape Variants ─── */\n\n .avatar--circle {\n --hx-avatar-border-radius: 50%;\n }\n\n .avatar--square {\n --hx-avatar-border-radius: var(--hx-border-radius-md, 0.375rem);\n }\n\n /* ─── Image ─── */\n\n .avatar__image {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n }\n\n /* ─── Initials ─── */\n\n .avatar__initials {\n font-family: var(--hx-font-family-sans, sans-serif);\n font-size: var(--hx-avatar-font-size);\n font-weight: var(--hx-font-weight-semibold, 600);\n line-height: 1;\n text-transform: uppercase;\n letter-spacing: var(--hx-letter-spacing-wide, 0.025em);\n user-select: none;\n }\n\n /* ─── Fallback Icon ─── */\n\n .avatar__fallback-icon {\n width: 60%;\n height: 60%;\n color: var(--hx-avatar-color, var(--hx-color-primary-700));\n }\n\n /* ─── Badge Slot ─── */\n\n /* P0-2: Positioned relative to .avatar-wrapper — outside the overflow: hidden on .avatar. */\n .avatar__badge {\n position: absolute;\n bottom: 0;\n right: 0;\n }\n\n /* P2-2: Hide the badge wrapper when no slot content is present, preserving slotchange detection. */\n .avatar__badge--hidden {\n display: none;\n }\n\n /* P1-B: Windows High Contrast Mode — avatar background is stripped by the system,\n leaving no visual boundary. Restore a visible border, explicit foreground, and\n background so the avatar container, initials, and fallback icon all remain\n perceivable at any contrast level.\n WCAG 1.4.11 Non-text Contrast (Level AA). */\n @media (forced-colors: active) {\n .avatar {\n forced-color-adjust: none;\n border: 2px solid ButtonText;\n background-color: Canvas;\n color: CanvasText;\n }\n\n .avatar__initials {\n color: CanvasText;\n }\n\n .avatar__fallback-icon {\n color: CanvasText;\n }\n\n .avatar__image {\n forced-color-adjust: auto;\n }\n }\n`;\n","import { LitElement, html, nothing, type PropertyValues } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { tokenStyles } from '@helixui/tokens/lit';\nimport { helixAvatarStyles } from './hx-avatar.styles.js';\nimport { devWarn } from '../../utils/dev-warn.js';\n\n/**\n * A user avatar component that displays an image, initials, or a fallback icon.\n * Supports a badge slot for status indicator overlays.\n *\n * @summary User avatar with image, initials, and fallback icon support for healthcare applications.\n *\n * @tag hx-avatar\n *\n * @slot - Default slot for custom avatar content. Overrides src and initials when slotted content is present.\n * @slot badge - Status indicator overlay, positioned at the bottom-right of the avatar container.\n *\n * @csspart avatar - The outer container element.\n * @csspart image - The img element shown when src is provided.\n * @csspart initials - The initials text span shown as a fallback.\n * @csspart fallback-icon - The SVG person silhouette shown when no src or initials are available.\n * @csspart badge - The badge slot container.\n *\n * @cssprop [--hx-avatar-size] - Computed width and height from the size variant.\n * @cssprop [--hx-avatar-border-radius] - Circle = 50%, Square = var(--hx-border-radius-md).\n * @cssprop [--hx-avatar-bg=var(--hx-color-primary-100)] - Background color of the avatar container.\n * @cssprop [--hx-avatar-color=var(--hx-color-primary-700)] - Text and icon color inside the avatar.\n * @cssprop [--hx-avatar-font-size] - Font size for the initials text, set per size variant.\n */\n@customElement('hx-avatar')\nexport class HelixAvatar extends LitElement {\n static override styles = [tokenStyles, helixAvatarStyles];\n\n /**\n * Image URL. When provided and successfully loaded, displays the image.\n * @attr src\n */\n @property({ type: String })\n src: string | undefined = undefined;\n\n /**\n * Accessible label for the image. Required when `src` is provided.\n * Used as the container's aria-label in image mode.\n * @attr alt\n */\n @property({ type: String })\n alt = '';\n\n /**\n * Human-readable accessible name for non-image states (initials, fallback icon).\n * In healthcare contexts, provide the full person name (e.g., \"Dr. Jane Doe\") rather than\n * relying on raw initials, which screen readers announce as individual letters.\n * When set, takes precedence over raw initials and the generic \"Avatar\" fallback.\n * @attr label\n */\n @property({ type: String })\n label = '';\n\n /**\n * Fallback initials text displayed when no image is available.\n * @attr initials\n */\n @property({ type: String })\n initials = '';\n\n /**\n * Size variant of the avatar.\n * @attr hx-size\n */\n @property({ type: String, reflect: true, attribute: 'hx-size' })\n size: 'xs' | 'sm' | 'md' | 'lg' | 'xl' = 'md';\n\n /**\n * Shape variant of the avatar.\n * @attr shape\n */\n @property({ type: String, reflect: true })\n shape: 'circle' | 'square' = 'circle';\n\n /**\n * Tracks whether the image failed to load, triggering the fallback chain.\n * @internal\n */\n @state()\n private _imgError = false;\n\n /**\n * Tracks whether the default slot has assigned content.\n * @internal\n */\n @state()\n private _hasDefaultSlot = false;\n\n /**\n * Tracks whether the badge slot has assigned content.\n * @internal\n */\n @state()\n private _hasBadgeSlot = false;\n\n // ─── Lifecycle ───\n\n // P1-A / P2-B: Use willUpdate() instead of updated() for property validation\n // and derived state. willUpdate() runs before render() and does not schedule\n // a second update cycle when @state() properties are mutated.\n override willUpdate(changedProperties: PropertyValues<this>): void {\n // P0-1: Reset image error state when src changes so a new valid src renders correctly.\n if (changedProperties.has('src')) {\n this._imgError = false;\n }\n\n // P1-2: Warn when src is provided without alt — silent accessibility failure in healthcare UIs.\n if (changedProperties.has('src') || changedProperties.has('alt')) {\n if (this.src && !this.alt) {\n devWarn(\n 'hx-avatar',\n 'Accessibility: \"alt\" attribute is required when \"src\" is provided. ' +\n 'Without alt text, screen readers announce a non-descriptive label. ' +\n 'Add alt=\"Full name or description\" to your hx-avatar element.',\n );\n }\n }\n\n // P2-A: Warn when initials are used without label — screen readers announce\n // raw initials as individual letters (e.g., \"J D\") instead of a name.\n if (changedProperties.has('initials') || changedProperties.has('label')) {\n if (this.initials && !this.label) {\n devWarn(\n 'hx-avatar',\n 'Accessibility: \"label\" attribute is recommended when \"initials\" is provided. ' +\n 'Without label, screen readers announce raw initials as individual letters. ' +\n 'Add label=\"Full Name\" to your hx-avatar element.',\n );\n }\n }\n\n // P2-1: Warn when invalid size or shape attribute values are used (e.g., from Twig templates).\n const validSizes: ReadonlyArray<string> = ['xs', 'sm', 'md', 'lg', 'xl'];\n if (changedProperties.has('size') && !validSizes.includes(this.size)) {\n devWarn(\n 'hx-avatar',\n `Invalid hx-size=\"${String(this.size)}\". Valid values: xs, sm, md, lg, xl. Rendering with \"md\".`,\n );\n }\n const validShapes: ReadonlyArray<string> = ['circle', 'square'];\n if (changedProperties.has('shape') && !validShapes.includes(this.shape)) {\n devWarn(\n 'hx-avatar',\n `Invalid shape=\"${String(this.shape)}\". Valid values: circle, square. Rendering with \"circle\".`,\n );\n }\n }\n\n // ─── Slot Change Handling ───\n\n /** @internal */\n private _handleSlotChange(e: Event): void {\n const slot = e.target as HTMLSlotElement;\n const nodes = slot.assignedNodes({ flatten: true });\n this._hasDefaultSlot = nodes.some((node) => {\n if (node.nodeType === Node.ELEMENT_NODE) return true;\n if (node.nodeType === Node.TEXT_NODE) {\n return (node.textContent ?? '').trim().length > 0;\n }\n return false;\n });\n }\n\n /** @internal */\n private _handleBadgeSlotChange(e: Event): void {\n const slot = e.target as HTMLSlotElement;\n const nodes = slot.assignedNodes({ flatten: true });\n this._hasBadgeSlot = nodes.some((node) => {\n if (node.nodeType === Node.ELEMENT_NODE) return true;\n if (node.nodeType === Node.TEXT_NODE) {\n return (node.textContent ?? '').trim().length > 0;\n }\n return false;\n });\n\n // P2-C: Warn when badge slot content lacks an accessible name.\n // A plain <span class=\"dot\"></span> badge is invisible to screen readers.\n if (this._hasBadgeSlot) {\n const hasAccessibleName = nodes.some((node) => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as Element;\n return (\n el.hasAttribute('aria-label') ||\n el.hasAttribute('aria-labelledby') ||\n !!el.getAttribute('role')\n );\n }\n return false;\n });\n if (!hasAccessibleName) {\n devWarn(\n 'hx-avatar',\n 'Accessibility: badge slot content should have an accessible name ' +\n '(aria-label, role, etc.). Without it, the badge is invisible to screen readers.',\n );\n }\n }\n }\n\n // ─── Image Error Handling ───\n\n /** @internal */\n private _handleImgError(): void {\n this._imgError = true;\n }\n\n // ─── Fallback Icon ───\n\n /** @internal */\n private _renderFallbackIcon() {\n return html`\n <svg\n part=\"fallback-icon\"\n class=\"avatar__fallback-icon\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n fill=\"currentColor\"\n >\n <path\n d=\"M12 12c2.7 0 4.8-2.1 4.8-4.8S14.7 2.4 12 2.4 7.2 4.5 7.2 7.2 9.3 12 12 12zm0 2.4c-3.2 0-9.6 1.6-9.6 4.8v2.4h19.2v-2.4c0-3.2-6.4-4.8-9.6-4.8z\"\n />\n </svg>\n `;\n }\n\n // ─── Render ───\n\n override render() {\n const src = this.src;\n const showSlot = this._hasDefaultSlot;\n const showImage = !showSlot && !!src && !this._imgError;\n const showInitials = !showSlot && !showImage && !!this.initials.trim();\n const showFallback = !showSlot && !showImage && !showInitials;\n\n // P1-1 / P1-7: Use label property for human-readable accessible name in non-image states.\n const ariaLabel = showImage\n ? this.alt || this.label || 'Avatar'\n : showInitials\n ? this.label || this.initials\n : this.label || 'Avatar';\n\n // P2-1: Safe class fallback for invalid attribute values supplied via HTML/Twig.\n const validSizes: ReadonlyArray<string> = ['xs', 'sm', 'md', 'lg', 'xl'];\n const validShapes: ReadonlyArray<string> = ['circle', 'square'];\n const sizeClass = validSizes.includes(this.size) ? this.size : 'md';\n const shapeClass = validShapes.includes(this.shape) ? this.shape : 'circle';\n\n const classes = {\n avatar: true,\n [`avatar--${sizeClass}`]: true,\n [`avatar--${shapeClass}`]: true,\n };\n\n // P2-2: Badge wrapper is hidden (not removed) when empty so slotchange detection still works.\n const badgeClasses = {\n avatar__badge: true,\n 'avatar__badge--hidden': !this._hasBadgeSlot,\n };\n\n return html`\n <div class=\"avatar-wrapper\">\n <div\n part=\"avatar\"\n class=${classMap(classes)}\n role=${showSlot ? nothing : 'img'}\n aria-label=${showSlot ? nothing : ariaLabel}\n >\n <slot @slotchange=${this._handleSlotChange}></slot>\n ${showImage && src\n ? html`<img\n part=\"image\"\n class=\"avatar__image\"\n src=${src}\n alt=${this.alt}\n aria-hidden=\"true\"\n loading=\"lazy\"\n @error=${this._handleImgError}\n />`\n : nothing}\n ${showInitials\n ? html`<span part=\"initials\" class=\"avatar__initials\">${this.initials.trim()}</span>`\n : nothing}\n ${showFallback ? this._renderFallbackIcon() : nothing}\n </div>\n <span part=\"badge\" class=${classMap(badgeClasses)}>\n <slot name=\"badge\" @slotchange=${this._handleBadgeSlotChange}></slot>\n </span>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'hx-avatar': HelixAvatar;\n }\n}\n"],"names":["helixAvatarStyles","css","HelixAvatar","LitElement","changedProperties","validSizes","devWarn","validShapes","e","nodes","node","el","html","src","showSlot","showImage","showInitials","showFallback","ariaLabel","sizeClass","shapeClass","classes","badgeClasses","classMap","nothing","tokenStyles","__decorateClass","property","state","customElement"],"mappings":"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"}