@helixui/library 1.1.2-next.1 → 1.1.2-next.11

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 (150) hide show
  1. package/custom-elements.json +476 -392
  2. package/dist/components/hx-action-bar/hx-action-bar.d.ts.map +1 -1
  3. package/dist/components/hx-action-bar/index.js +1 -1
  4. package/dist/components/hx-avatar/hx-avatar.styles.d.ts.map +1 -1
  5. package/dist/components/hx-avatar/index.js +1 -1
  6. package/dist/components/hx-badge/hx-badge.styles.d.ts.map +1 -1
  7. package/dist/components/hx-badge/index.js +1 -1
  8. package/dist/components/hx-breadcrumb/hx-breadcrumb-item.d.ts +1 -0
  9. package/dist/components/hx-breadcrumb/hx-breadcrumb-item.d.ts.map +1 -1
  10. package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts +35 -9
  11. package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts.map +1 -1
  12. package/dist/components/hx-breadcrumb/index.js +1 -1
  13. package/dist/components/hx-button/hx-button.d.ts +12 -6
  14. package/dist/components/hx-button/hx-button.d.ts.map +1 -1
  15. package/dist/components/hx-button/hx-button.styles.d.ts.map +1 -1
  16. package/dist/components/hx-button/index.js +1 -1
  17. package/dist/components/hx-clinical-status/hx-clinical-status.d.ts +14 -6
  18. package/dist/components/hx-clinical-status/hx-clinical-status.d.ts.map +1 -1
  19. package/dist/components/hx-clinical-status/hx-clinical-status.styles.d.ts.map +1 -1
  20. package/dist/components/hx-clinical-status/index.d.ts +1 -1
  21. package/dist/components/hx-clinical-status/index.d.ts.map +1 -1
  22. package/dist/components/hx-clinical-status/index.js +1 -1
  23. package/dist/components/hx-combobox/hx-combobox.d.ts +5 -0
  24. package/dist/components/hx-combobox/hx-combobox.d.ts.map +1 -1
  25. package/dist/components/hx-drawer/hx-drawer.d.ts +1 -0
  26. package/dist/components/hx-drawer/hx-drawer.d.ts.map +1 -1
  27. package/dist/components/hx-menu/hx-menu-item.d.ts +5 -0
  28. package/dist/components/hx-menu/hx-menu-item.d.ts.map +1 -1
  29. package/dist/components/hx-menu/hx-menu.d.ts +1 -0
  30. package/dist/components/hx-menu/hx-menu.d.ts.map +1 -1
  31. package/dist/components/hx-menu/hx-menu.styles.d.ts.map +1 -1
  32. package/dist/components/hx-menu/index.js +1 -1
  33. package/dist/components/hx-nav/hx-nav.d.ts +10 -0
  34. package/dist/components/hx-nav/hx-nav.d.ts.map +1 -1
  35. package/dist/components/hx-nav/index.js +1 -1
  36. package/dist/components/hx-pagination/hx-pagination.d.ts.map +1 -1
  37. package/dist/components/hx-pagination/index.js +1 -1
  38. package/dist/components/hx-patient-banner/hx-patient-banner.d.ts +8 -0
  39. package/dist/components/hx-patient-banner/hx-patient-banner.d.ts.map +1 -1
  40. package/dist/components/hx-patient-banner/hx-patient-banner.styles.d.ts.map +1 -1
  41. package/dist/components/hx-patient-banner/index.js +1 -1
  42. package/dist/components/hx-phi-field/hx-phi-field.d.ts +27 -2
  43. package/dist/components/hx-phi-field/hx-phi-field.d.ts.map +1 -1
  44. package/dist/components/hx-phi-field/hx-phi-field.styles.d.ts.map +1 -1
  45. package/dist/components/hx-phi-field/index.js +1 -1
  46. package/dist/components/hx-select/hx-select.d.ts +1 -0
  47. package/dist/components/hx-select/hx-select.d.ts.map +1 -1
  48. package/dist/components/hx-select/hx-select.styles.d.ts.map +1 -1
  49. package/dist/components/hx-select/index.js +1 -1
  50. package/dist/components/hx-side-nav/hx-nav-item.d.ts +5 -0
  51. package/dist/components/hx-side-nav/hx-nav-item.d.ts.map +1 -1
  52. package/dist/components/hx-side-nav/hx-nav-item.styles.d.ts.map +1 -1
  53. package/dist/components/hx-side-nav/hx-side-nav.d.ts.map +1 -1
  54. package/dist/components/hx-side-nav/hx-side-nav.styles.d.ts.map +1 -1
  55. package/dist/components/hx-side-nav/index.js +1 -1
  56. package/dist/components/hx-slider/hx-slider.d.ts +1 -0
  57. package/dist/components/hx-slider/hx-slider.d.ts.map +1 -1
  58. package/dist/components/hx-status-indicator/hx-status-indicator.d.ts +17 -1
  59. package/dist/components/hx-status-indicator/hx-status-indicator.d.ts.map +1 -1
  60. package/dist/components/hx-status-indicator/hx-status-indicator.styles.d.ts.map +1 -1
  61. package/dist/components/hx-status-indicator/index.js +1 -1
  62. package/dist/components/hx-steps/hx-step.d.ts +7 -0
  63. package/dist/components/hx-steps/hx-step.d.ts.map +1 -1
  64. package/dist/components/hx-steps/hx-steps.d.ts.map +1 -1
  65. package/dist/components/hx-steps/index.js +1 -1
  66. package/dist/components/hx-tabs/hx-tab.styles.d.ts.map +1 -1
  67. package/dist/components/hx-tabs/hx-tabs.d.ts +10 -0
  68. package/dist/components/hx-tabs/hx-tabs.d.ts.map +1 -1
  69. package/dist/components/hx-tabs/index.js +1 -1
  70. package/dist/components/hx-time-picker/hx-time-picker.d.ts +3 -0
  71. package/dist/components/hx-time-picker/hx-time-picker.d.ts.map +1 -1
  72. package/dist/components/hx-tree-view/hx-tree-item.d.ts +5 -0
  73. package/dist/components/hx-tree-view/hx-tree-item.d.ts.map +1 -1
  74. package/dist/components/hx-tree-view/hx-tree-view.d.ts +6 -0
  75. package/dist/components/hx-tree-view/hx-tree-view.d.ts.map +1 -1
  76. package/dist/components/hx-tree-view/index.js +1 -1
  77. package/dist/css/helix-all.css +222 -60
  78. package/dist/css/helix-core.css +58 -3
  79. package/dist/css/helix-feedback.css +33 -4
  80. package/dist/css/helix-forms.css +68 -41
  81. package/dist/css/helix-navigation.css +16 -7
  82. package/dist/css/hx-avatar.css +18 -1
  83. package/dist/css/hx-badge.css +6 -2
  84. package/dist/css/hx-button.css +34 -0
  85. package/dist/css/hx-clinical-status.css +4 -2
  86. package/dist/css/hx-menu.css +2 -0
  87. package/dist/css/hx-patient-banner.css +31 -3
  88. package/dist/css/hx-phi-field.css +12 -0
  89. package/dist/css/hx-select.css +68 -41
  90. package/dist/css/hx-side-nav.css +14 -7
  91. package/dist/css/hx-status-indicator.css +33 -4
  92. package/dist/css/index.css +1 -1
  93. package/dist/css/manifest.json +13 -5
  94. package/dist/index.d.ts +1 -1
  95. package/dist/index.d.ts.map +1 -1
  96. package/dist/index.js +17 -17
  97. package/dist/shared/{hx-action-bar-D4bulGQP.js → hx-action-bar-vGFnNwNY.js} +33 -34
  98. package/dist/shared/{hx-action-bar-D4bulGQP.js.map → hx-action-bar-vGFnNwNY.js.map} +1 -1
  99. package/dist/shared/{hx-avatar-7p1cj3lG.js → hx-avatar-CZfA9KEl.js} +27 -10
  100. package/dist/shared/hx-avatar-CZfA9KEl.js.map +1 -0
  101. package/dist/shared/{hx-badge-DCxvskdw.js → hx-badge-Xg7zoh4Q.js} +31 -27
  102. package/dist/shared/hx-badge-Xg7zoh4Q.js.map +1 -0
  103. package/dist/shared/{hx-breadcrumb-item-B2rjepqy.js → hx-breadcrumb-item-CObc-WJl.js} +8 -6
  104. package/dist/shared/hx-breadcrumb-item-CObc-WJl.js.map +1 -0
  105. package/dist/shared/{hx-button-6S3DwuIj.js → hx-button-CC1YH9RZ.js} +52 -12
  106. package/dist/shared/hx-button-CC1YH9RZ.js.map +1 -0
  107. package/dist/shared/{hx-clinical-status-De8yrA5I.js → hx-clinical-status-D6eaplvs.js} +5 -3
  108. package/dist/shared/hx-clinical-status-D6eaplvs.js.map +1 -0
  109. package/dist/shared/hx-combobox-CNAJXIxo.js.map +1 -1
  110. package/dist/shared/hx-drawer-e0qeGxAD.js.map +1 -1
  111. package/dist/shared/{hx-menu-divider-DR4G_rqw.js → hx-menu-divider-puPmRAdN.js} +40 -20
  112. package/dist/shared/hx-menu-divider-puPmRAdN.js.map +1 -0
  113. package/dist/shared/{hx-nav-D377Ngz4.js → hx-nav-CiyqaW2I.js} +112 -99
  114. package/dist/shared/hx-nav-CiyqaW2I.js.map +1 -0
  115. package/dist/shared/{hx-nav-item-ByU2N921.js → hx-nav-item-tM_6bolB.js} +161 -107
  116. package/dist/shared/hx-nav-item-tM_6bolB.js.map +1 -0
  117. package/dist/shared/{hx-pagination-DYhYPqDn.js → hx-pagination-Cb9UEWXz.js} +74 -66
  118. package/dist/shared/{hx-pagination-DYhYPqDn.js.map → hx-pagination-Cb9UEWXz.js.map} +1 -1
  119. package/dist/shared/{hx-patient-banner-BoJHddAL.js → hx-patient-banner-wk4qWmsH.js} +88 -47
  120. package/dist/shared/hx-patient-banner-wk4qWmsH.js.map +1 -0
  121. package/dist/shared/{hx-phi-field-EDWna59z.js → hx-phi-field-DX9z3nu0.js} +67 -33
  122. package/dist/shared/hx-phi-field-DX9z3nu0.js.map +1 -0
  123. package/dist/shared/{hx-select-4-nHL0vd.js → hx-select-BWzxWZs_.js} +82 -55
  124. package/dist/shared/hx-select-BWzxWZs_.js.map +1 -0
  125. package/dist/shared/hx-slider-7Q-e0_pc.js.map +1 -1
  126. package/dist/shared/{hx-status-indicator-4ClvA5mU.js → hx-status-indicator-Dl3Y34mc.js} +76 -35
  127. package/dist/shared/hx-status-indicator-Dl3Y34mc.js.map +1 -0
  128. package/dist/shared/{hx-step-DlANlr2A.js → hx-step-CmNwfcJx.js} +30 -26
  129. package/dist/shared/hx-step-CmNwfcJx.js.map +1 -0
  130. package/dist/shared/{hx-tab-panel-GGjk6Qg4.js → hx-tab-panel-Dnt8aA74.js} +89 -61
  131. package/dist/shared/hx-tab-panel-Dnt8aA74.js.map +1 -0
  132. package/dist/shared/hx-time-picker-BpCRsh_z.js.map +1 -1
  133. package/dist/shared/{hx-tree-item-DTDIBRrI.js → hx-tree-item-C1PhX-HE.js} +50 -19
  134. package/dist/shared/hx-tree-item-C1PhX-HE.js.map +1 -0
  135. package/package.json +3 -3
  136. package/dist/shared/hx-avatar-7p1cj3lG.js.map +0 -1
  137. package/dist/shared/hx-badge-DCxvskdw.js.map +0 -1
  138. package/dist/shared/hx-breadcrumb-item-B2rjepqy.js.map +0 -1
  139. package/dist/shared/hx-button-6S3DwuIj.js.map +0 -1
  140. package/dist/shared/hx-clinical-status-De8yrA5I.js.map +0 -1
  141. package/dist/shared/hx-menu-divider-DR4G_rqw.js.map +0 -1
  142. package/dist/shared/hx-nav-D377Ngz4.js.map +0 -1
  143. package/dist/shared/hx-nav-item-ByU2N921.js.map +0 -1
  144. package/dist/shared/hx-patient-banner-BoJHddAL.js.map +0 -1
  145. package/dist/shared/hx-phi-field-EDWna59z.js.map +0 -1
  146. package/dist/shared/hx-select-4-nHL0vd.js.map +0 -1
  147. package/dist/shared/hx-status-indicator-4ClvA5mU.js.map +0 -1
  148. package/dist/shared/hx-step-DlANlr2A.js.map +0 -1
  149. package/dist/shared/hx-tab-panel-GGjk6Qg4.js.map +0 -1
  150. package/dist/shared/hx-tree-item-DTDIBRrI.js.map +0 -1
@@ -1,14 +1,17 @@
1
- import { css as u, LitElement as d, html as h } from "lit";
2
- import { property as r, customElement as p } from "lit/decorators.js";
3
- import { tokenStyles as v } from "@helixui/tokens/lit";
4
- const x = u`
1
+ import { css as d, LitElement as p, nothing as v, html as u } from "lit";
2
+ import { property as s, customElement as x } from "lit/decorators.js";
3
+ import { tokenStyles as b } from "@helixui/tokens/lit";
4
+ const _ = d`
5
5
  :host {
6
6
  display: inline-flex;
7
7
  align-items: center;
8
8
  justify-content: center;
9
+ gap: var(--hx-space-2, 0.5rem);
9
10
  position: relative;
10
11
  flex-shrink: 0;
11
12
  --_dot-color: var(--hx-status-indicator-color-default, var(--hx-color-neutral-300, #ced4da));
13
+ /* Default size (md) — always defined so .indicator never collapses to 0x0 */
14
+ --_indicator-size: var(--hx-status-indicator-size-md, var(--hx-space-3, 0.75rem));
12
15
  }
13
16
 
14
17
  .indicator {
@@ -63,18 +66,44 @@ const x = u`
63
66
  }
64
67
  }
65
68
 
69
+ /* ─── Visible label (part="label") ─── */
70
+
71
+ .indicator__label {
72
+ font-size: var(
73
+ --hx-status-indicator-label-font-size,
74
+ var(--hx-font-size-sm, var(--hx-text-sm, 0.875rem))
75
+ );
76
+ color: var(--hx-status-indicator-label-color, var(--hx-color-neutral-700, #374151));
77
+ line-height: 1;
78
+ white-space: nowrap;
79
+ }
80
+
81
+ /* ─── aria-live announcement region (visually hidden) ─── */
82
+
83
+ .indicator__live-region {
84
+ position: absolute;
85
+ width: 1px;
86
+ height: 1px;
87
+ padding: 0;
88
+ margin: -1px;
89
+ overflow: hidden;
90
+ clip: rect(0, 0, 0, 0);
91
+ white-space: nowrap;
92
+ border: 0;
93
+ }
94
+
66
95
  /* ─── Size Variants ─── */
67
96
 
68
- :host([size='sm']) {
97
+ :host([hx-size='sm']) {
69
98
  --_indicator-size: var(--hx-status-indicator-size-sm, var(--hx-space-2, 0.5rem));
70
99
  }
71
100
 
72
- :host([size='md']) {
101
+ :host([hx-size='md']) {
73
102
  --_indicator-size: var(--hx-status-indicator-size-md, var(--hx-space-3, 0.75rem));
74
103
  }
75
104
 
76
- :host([size='lg']) {
77
- --_indicator-size: var(--hx-status-indicator-size-lg, var(--hx-size-4));
105
+ :host([hx-size='lg']) {
106
+ --_indicator-size: var(--hx-status-indicator-size-lg, var(--hx-space-4, 1rem));
78
107
  }
79
108
 
80
109
  /* ─── Status Colors ─── */
@@ -99,25 +128,29 @@ const x = u`
99
128
  --_dot-color: var(--hx-status-indicator-color-unknown, var(--hx-color-neutral-300));
100
129
  }
101
130
  `;
102
- var f = Object.defineProperty, y = Object.getOwnPropertyDescriptor, e = (t, o, n, a) => {
103
- for (var s = a > 1 ? void 0 : a ? y(o, n) : o, l = t.length - 1, c; l >= 0; l--)
104
- (c = t[l]) && (s = (a ? c(o, n, s) : c(s)) || s);
105
- return a && s && f(o, n, s), s;
131
+ var f = Object.defineProperty, y = Object.getOwnPropertyDescriptor, i = (t, r, n, o) => {
132
+ for (var a = o > 1 ? void 0 : o ? y(r, n) : r, l = t.length - 1, c; l >= 0; l--)
133
+ (c = t[l]) && (a = (o ? c(r, n, a) : c(a)) || a);
134
+ return o && a && f(r, n, a), a;
106
135
  };
107
- const _ = {
136
+ const h = {
108
137
  online: "Online",
109
138
  offline: "Offline",
110
139
  away: "Away",
111
140
  busy: "Busy",
112
141
  unknown: "Unknown"
113
142
  };
114
- let i = class extends d {
143
+ let e = class extends p {
115
144
  constructor() {
116
- super(...arguments), this.status = "unknown", this.size = "md", this.pulse = !1, this.label = "";
145
+ super(...arguments), this.status = "unknown", this.size = "md", this.pulse = !1, this.label = "", this.showLabel = !1;
117
146
  }
118
147
  /** @internal */
119
148
  _getLabel() {
120
- return this.label ? this.label : `Status: ${_[this.status] ?? "Unknown"}`;
149
+ return this.label ? this.label : `Status: ${h[this.status] ?? "Unknown"}`;
150
+ }
151
+ /** @internal */
152
+ _getStatusText() {
153
+ return h[this.status] ?? "Unknown";
121
154
  }
122
155
  // ─── Lifecycle ───
123
156
  connectedCallback() {
@@ -129,31 +162,39 @@ let i = class extends d {
129
162
  super.updated(t), (t.has("status") || t.has("label")) && this.setAttribute("aria-label", this._getLabel());
130
163
  }
131
164
  render() {
132
- return h`
165
+ return u`
133
166
  <div class="indicator">
134
167
  <div class="indicator__pulse-ring" part="pulse-ring"></div>
135
168
  <div class="indicator__dot" part="base"></div>
136
169
  </div>
170
+ ${this.showLabel ? u`<span class="indicator__label" part="label">${this._getStatusText()}</span>` : v}
171
+ <!-- aria-live region announces dynamic status changes to screen readers -->
172
+ <span class="indicator__live-region" aria-live="polite" aria-atomic="true"
173
+ >${this._getLabel()}</span
174
+ >
137
175
  `;
138
176
  }
139
177
  };
140
- i.styles = [v, x];
141
- e([
142
- r({ type: String, reflect: !0 })
143
- ], i.prototype, "status", 2);
144
- e([
145
- r({ type: String, reflect: !0, attribute: "hx-size" })
146
- ], i.prototype, "size", 2);
147
- e([
148
- r({ type: Boolean, reflect: !0 })
149
- ], i.prototype, "pulse", 2);
150
- e([
151
- r({ type: String })
152
- ], i.prototype, "label", 2);
153
- i = e([
154
- p("hx-status-indicator")
155
- ], i);
178
+ e.styles = [b, _];
179
+ i([
180
+ s({ type: String, reflect: !0 })
181
+ ], e.prototype, "status", 2);
182
+ i([
183
+ s({ type: String, reflect: !0, attribute: "hx-size" })
184
+ ], e.prototype, "size", 2);
185
+ i([
186
+ s({ type: Boolean, reflect: !0 })
187
+ ], e.prototype, "pulse", 2);
188
+ i([
189
+ s({ type: String })
190
+ ], e.prototype, "label", 2);
191
+ i([
192
+ s({ type: Boolean, reflect: !0, attribute: "show-label" })
193
+ ], e.prototype, "showLabel", 2);
194
+ e = i([
195
+ x("hx-status-indicator")
196
+ ], e);
156
197
  export {
157
- i as H
198
+ e as H
158
199
  };
159
- //# sourceMappingURL=hx-status-indicator-4ClvA5mU.js.map
200
+ //# sourceMappingURL=hx-status-indicator-Dl3Y34mc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hx-status-indicator-Dl3Y34mc.js","sources":["../../src/components/hx-status-indicator/hx-status-indicator.styles.ts","../../src/components/hx-status-indicator/hx-status-indicator.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const helixStatusIndicatorStyles = css`\n :host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--hx-space-2, 0.5rem);\n position: relative;\n flex-shrink: 0;\n --_dot-color: var(--hx-status-indicator-color-default, var(--hx-color-neutral-300, #ced4da));\n /* Default size (md) — always defined so .indicator never collapses to 0x0 */\n --_indicator-size: var(--hx-status-indicator-size-md, var(--hx-space-3, 0.75rem));\n }\n\n .indicator {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n position: relative;\n width: var(--_indicator-size);\n height: var(--_indicator-size);\n flex-shrink: 0;\n }\n\n .indicator__dot {\n width: 100%;\n height: 100%;\n border-radius: 50%;\n background-color: var(--_dot-color);\n position: relative;\n z-index: 1; /* dot above pulse ring within shadow root */\n }\n\n .indicator__pulse-ring {\n display: none;\n position: absolute;\n inset: 0;\n border-radius: 50%;\n background-color: var(--hx-status-indicator-pulse-color, var(--_dot-color));\n opacity: var(--hx-state-focus-opacity, 0.12); /* intentional: pulse ring start opacity */\n animation: hx-status-pulse var(--hx-status-indicator-pulse-duration, 1.5s) ease-out infinite;\n z-index: 0; /* pulse ring beneath dot within shadow root */\n }\n\n :host([pulse]) .indicator__pulse-ring {\n display: block;\n }\n\n @keyframes hx-status-pulse {\n 0% {\n transform: scale(1);\n opacity: var(--hx-state-focus-opacity, 0.12); /* intentional: pulse ring start opacity */\n }\n 100% {\n transform: scale(var(--hx-status-indicator-pulse-scale, 2.5));\n opacity: 0;\n }\n }\n\n @media (prefers-reduced-motion: reduce) {\n :host([pulse]) .indicator__pulse-ring {\n animation: none;\n display: none;\n }\n }\n\n /* ─── Visible label (part=\"label\") ─── */\n\n .indicator__label {\n font-size: var(\n --hx-status-indicator-label-font-size,\n var(--hx-font-size-sm, var(--hx-text-sm, 0.875rem))\n );\n color: var(--hx-status-indicator-label-color, var(--hx-color-neutral-700, #374151));\n line-height: 1;\n white-space: nowrap;\n }\n\n /* ─── aria-live announcement region (visually hidden) ─── */\n\n .indicator__live-region {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n\n /* ─── Size Variants ─── */\n\n :host([hx-size='sm']) {\n --_indicator-size: var(--hx-status-indicator-size-sm, var(--hx-space-2, 0.5rem));\n }\n\n :host([hx-size='md']) {\n --_indicator-size: var(--hx-status-indicator-size-md, var(--hx-space-3, 0.75rem));\n }\n\n :host([hx-size='lg']) {\n --_indicator-size: var(--hx-status-indicator-size-lg, var(--hx-space-4, 1rem));\n }\n\n /* ─── Status Colors ─── */\n\n :host([status='online']) {\n --_dot-color: var(--hx-status-indicator-color-online, var(--hx-color-success-500));\n }\n\n :host([status='offline']) {\n --_dot-color: var(--hx-status-indicator-color-offline, var(--hx-color-neutral-400));\n }\n\n :host([status='away']) {\n --_dot-color: var(--hx-status-indicator-color-away, var(--hx-color-warning-500));\n }\n\n :host([status='busy']) {\n --_dot-color: var(--hx-status-indicator-color-busy, var(--hx-color-error-500));\n }\n\n :host([status='unknown']) {\n --_dot-color: var(--hx-status-indicator-color-unknown, var(--hx-color-neutral-300));\n }\n`;\n","import { LitElement, html, nothing, type PropertyValues } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { tokenStyles } from '@helixui/tokens/lit';\nimport { devWarn } from '../../utils/dev-warn.js';\nimport { helixStatusIndicatorStyles } from './hx-status-indicator.styles.js';\n\nexport type StatusIndicatorStatus = 'online' | 'offline' | 'away' | 'busy' | 'unknown';\nexport type StatusIndicatorSize = 'sm' | 'md' | 'lg';\n\nconst STATUS_LABELS: Record<StatusIndicatorStatus, string> = {\n online: 'Online',\n offline: 'Offline',\n away: 'Away',\n busy: 'Busy',\n unknown: 'Unknown',\n};\n\n/**\n * A colored dot/badge indicating system or entity health status.\n * Supports an animated pulse ring and an optional visible text label.\n *\n * Status is conveyed through color AND an `aria-label` on the host element.\n * When `show-label` is set, a visible text label is rendered inside the component,\n * ensuring status is not communicated by color alone (WCAG 1.4.1 — Use of Color).\n *\n * Uses `role=\"img\"` with an auto-generated `aria-label` (e.g. \"Status: Online\").\n * When used decoratively alongside visible text that conveys the same status information\n * (e.g. \"Provider is available\"), set `aria-hidden=\"true\"` on the host element to prevent\n * duplicate announcements to screen reader users. This is the recommended composition\n * pattern in healthcare dashboards.\n *\n * @remarks\n * The status vocabulary (`online`, `offline`, `away`, `busy`, `unknown`) is the intentional\n * implementation canonical form for this component. Although a prior spec draft used\n * `active/inactive/error/warning`, the current vocabulary was approved as a deliberate\n * design decision for flexibility and UX clarity in healthcare dashboard contexts.\n *\n * @summary Status indicator dot component.\n *\n * @tag hx-status-indicator\n *\n * @csspart base - The dot element.\n * @csspart pulse-ring - The animated pulse ring element.\n * @csspart label - The visible status label text element (visible when show-label is set).\n *\n * @cssprop [--hx-status-indicator-color-online] - Override color for the \"online\" status dot.\n * @cssprop [--hx-status-indicator-color-offline] - Override color for the \"offline\" status dot.\n * @cssprop [--hx-status-indicator-color-away] - Override color for the \"away\" status dot.\n * @cssprop [--hx-status-indicator-color-busy] - Override color for the \"busy\" status dot.\n * @cssprop [--hx-status-indicator-color-unknown] - Override color for the \"unknown\" status dot.\n * @cssprop [--hx-status-indicator-size-sm] - Override size for the \"sm\" variant.\n * @cssprop [--hx-status-indicator-size-md] - Override size for the \"md\" variant.\n * @cssprop [--hx-status-indicator-size-lg] - Override size for the \"lg\" variant.\n * @cssprop [--hx-status-indicator-pulse-duration] - Override pulse animation duration.\n * @cssprop [--hx-status-indicator-pulse-scale] - Override pulse animation max scale.\n * @cssprop [--hx-status-indicator-pulse-color] - Override pulse ring color independently from dot color.\n * @cssprop [--hx-status-indicator-label-color] - Override label text color.\n * @cssprop [--hx-status-indicator-label-font-size] - Override label font size.\n */\n@customElement('hx-status-indicator')\nexport class HelixStatusIndicator extends LitElement {\n static override styles = [tokenStyles, helixStatusIndicatorStyles];\n\n /**\n * The status to display.\n * @attr status\n */\n @property({ type: String, reflect: true })\n status: 'online' | 'offline' | 'away' | 'busy' | 'unknown' = 'unknown';\n\n /**\n * Size of the indicator dot.\n * @attr hx-size\n */\n @property({ type: String, reflect: true, attribute: 'hx-size' })\n size: 'sm' | 'md' | 'lg' = 'md';\n\n /**\n * Whether to show an animated pulse ring around the dot.\n * Animation is suppressed when prefers-reduced-motion is active.\n * @attr pulse\n * @remarks\n * In Twig (Drupal) templates, render as a bare attribute: `pulse` — NOT `pulse=\"true\"`.\n * The value is ignored; only attribute presence matters.\n */\n @property({ type: Boolean, reflect: true })\n pulse = false;\n\n /**\n * Accessible label for the indicator. Defaults to \"Status: {Status}\".\n * Set aria-hidden=\"true\" on the host when status is conveyed by adjacent text.\n * @attr label\n */\n @property({ type: String })\n label = '';\n\n /**\n * When true, renders a visible text label next to the dot conveying the status.\n * Use this to satisfy WCAG 1.4.1 (Use of Color) when the indicator is not\n * accompanied by other visible text that conveys the same status information.\n * @attr show-label\n */\n @property({ type: Boolean, reflect: true, attribute: 'show-label' })\n showLabel = false;\n\n /** @internal */\n private _getLabel(): string {\n if (this.label) return this.label;\n const statusText = STATUS_LABELS[this.status] ?? 'Unknown';\n return `Status: ${statusText}`;\n }\n\n /** @internal */\n private _getStatusText(): string {\n return STATUS_LABELS[this.status] ?? 'Unknown';\n }\n\n // ─── Lifecycle ───\n\n override connectedCallback(): void {\n super.connectedCallback();\n // Backward compat: accept legacy `size` attribute. When present and `hx-size`\n // is not set, map the value and emit a deprecation warning.\n const legacySize = this.getAttribute('size');\n if (legacySize !== null && !this.hasAttribute('hx-size')) {\n devWarn('hx-status-indicator', 'The \"size\" attribute is deprecated. Use \"hx-size\" instead.');\n this.size = legacySize as StatusIndicatorSize;\n }\n // T3-01-4: Place role=\"img\" on the host element for robust AT traversal.\n // Some screen reader + browser combinations skip shadow children; host-level\n // ARIA attributes are more reliable across the flat accessibility tree.\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'img');\n }\n this.setAttribute('aria-label', this._getLabel());\n }\n\n override updated(changedProperties: PropertyValues<this>): void {\n super.updated(changedProperties);\n // Keep host aria-label in sync when status or label properties change.\n if (changedProperties.has('status') || changedProperties.has('label')) {\n this.setAttribute('aria-label', this._getLabel());\n }\n }\n\n override render() {\n return html`\n <div class=\"indicator\">\n <div class=\"indicator__pulse-ring\" part=\"pulse-ring\"></div>\n <div class=\"indicator__dot\" part=\"base\"></div>\n </div>\n ${this.showLabel\n ? html`<span class=\"indicator__label\" part=\"label\">${this._getStatusText()}</span>`\n : nothing}\n <!-- aria-live region announces dynamic status changes to screen readers -->\n <span class=\"indicator__live-region\" aria-live=\"polite\" aria-atomic=\"true\"\n >${this._getLabel()}</span\n >\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'hx-status-indicator': HelixStatusIndicator;\n }\n}\n"],"names":["helixStatusIndicatorStyles","css","STATUS_LABELS","HelixStatusIndicator","LitElement","legacySize","changedProperties","html","nothing","tokenStyles","__decorateClass","property","customElement"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { css as x, LitElement as u, nothing as m, html as d } from "lit";
2
- import { property as a, customElement as v } from "lit/decorators.js";
1
+ import { css as x, LitElement as v, nothing as m, html as d } from "lit";
2
+ import { property as a, customElement as u } from "lit/decorators.js";
3
3
  import { tokenStyles as f } from "@helixui/tokens/lit";
4
4
  const b = x`
5
5
  :host {
@@ -54,27 +54,27 @@ const b = x`
54
54
  --hx-steps-description-font-size: var(--hx-font-size-sm, 0.875rem);
55
55
  }
56
56
  `;
57
- var _ = Object.defineProperty, y = Object.getOwnPropertyDescriptor, p = (t, r, i, s) => {
58
- for (var e = s > 1 ? void 0 : s ? y(r, i) : r, l = t.length - 1, h; l >= 0; l--)
59
- (h = t[l]) && (e = (s ? h(r, i, e) : h(e)) || e);
60
- return s && e && _(r, i, e), e;
57
+ var _ = Object.defineProperty, g = Object.getOwnPropertyDescriptor, p = (t, i, r, s) => {
58
+ for (var e = s > 1 ? void 0 : s ? g(i, r) : i, l = t.length - 1, h; l >= 0; l--)
59
+ (h = t[l]) && (e = (s ? h(i, r, e) : h(e)) || e);
60
+ return s && e && _(i, r, e), e;
61
61
  };
62
- let c = class extends u {
62
+ let c = class extends v {
63
63
  constructor() {
64
64
  super(...arguments), this.orientation = "horizontal", this.size = "md", this.ariaLabel = null, this._handleSlotChange = () => {
65
65
  this._syncChildren();
66
66
  }, this._handleStepClickInternal = (t) => {
67
67
  t.stopPropagation();
68
- const r = this._getSteps(), i = t.composedPath().find(
68
+ const i = this._getSteps(), r = t.composedPath().find(
69
69
  (e) => e instanceof Element && e.tagName.toLowerCase() === "hx-step"
70
70
  );
71
- if (!i) return;
72
- const s = r.indexOf(i);
71
+ if (!r) return;
72
+ const s = i.indexOf(r);
73
73
  this.dispatchEvent(
74
74
  new CustomEvent("hx-step-click", {
75
75
  bubbles: !0,
76
76
  composed: !0,
77
- detail: { step: i, index: s }
77
+ detail: { step: r, index: s }
78
78
  })
79
79
  );
80
80
  };
@@ -83,7 +83,7 @@ let c = class extends u {
83
83
  connectedCallback() {
84
84
  super.connectedCallback();
85
85
  const t = this.getAttribute("size");
86
- t !== null && !this.hasAttribute("hx-size") && (this.size = t), this.hasAttribute("role") || this.setAttribute("role", "none"), this.addEventListener("hx-step-click-internal", this._handleStepClickInternal);
86
+ t !== null && !this.hasAttribute("hx-size") && (this.size = t), this.ariaLabel, this.hasAttribute("role") || this.setAttribute("role", "none"), this.addEventListener("hx-step-click-internal", this._handleStepClickInternal);
87
87
  }
88
88
  disconnectedCallback() {
89
89
  super.disconnectedCallback(), this.removeEventListener("hx-step-click-internal", this._handleStepClickInternal);
@@ -101,8 +101,8 @@ let c = class extends u {
101
101
  }
102
102
  /** @internal */
103
103
  _syncChildren() {
104
- this._getSteps().forEach((r, i) => {
105
- r.orientation = this.orientation, r.size = this.size, r.index = i;
104
+ this._getSteps().forEach((i, r) => {
105
+ i.orientation = this.orientation, i.size = this.size, i.index = r;
106
106
  });
107
107
  }
108
108
  // ─── Render ───
@@ -125,9 +125,9 @@ p([
125
125
  a({ type: String, attribute: "aria-label" })
126
126
  ], c.prototype, "ariaLabel", 2);
127
127
  c = p([
128
- v("hx-steps")
128
+ u("hx-steps")
129
129
  ], c);
130
- const g = x`
130
+ const y = x`
131
131
  :host {
132
132
  display: flex;
133
133
  flex: var(--hx-steps-item-flex, 1);
@@ -348,14 +348,14 @@ const g = x`
348
348
  }
349
349
  }
350
350
  `;
351
- var z = Object.defineProperty, w = Object.getOwnPropertyDescriptor, n = (t, r, i, s) => {
352
- for (var e = s > 1 ? void 0 : s ? w(r, i) : r, l = t.length - 1, h; l >= 0; l--)
353
- (h = t[l]) && (e = (s ? h(r, i, e) : h(e)) || e);
354
- return s && e && z(r, i, e), e;
351
+ var z = Object.defineProperty, w = Object.getOwnPropertyDescriptor, n = (t, i, r, s) => {
352
+ for (var e = s > 1 ? void 0 : s ? w(i, r) : i, l = t.length - 1, h; l >= 0; l--)
353
+ (h = t[l]) && (e = (s ? h(i, r, e) : h(e)) || e);
354
+ return s && e && z(i, r, e), e;
355
355
  };
356
- let o = class extends u {
356
+ let o = class extends v {
357
357
  constructor() {
358
- super(...arguments), this.label = "", this.status = "pending", this.description = "", this.disabled = !1, this.orientation = "horizontal", this.size = "md", this.index = 0, this._handleKeydown = (t) => {
358
+ super(...arguments), this.label = "", this.status = "pending", this.description = "", this.disabled = !1, this.orientation = "horizontal", this.size = "md", this.index = 0, this._liveMessage = "", this._handleKeydown = (t) => {
359
359
  (t.key === "Enter" || t.key === " ") && (t.preventDefault(), this._handleClick());
360
360
  };
361
361
  }
@@ -366,6 +366,9 @@ let o = class extends u {
366
366
  disconnectedCallback() {
367
367
  super.disconnectedCallback(), this.removeEventListener("keydown", this._handleKeydown);
368
368
  }
369
+ willUpdate(t) {
370
+ t.has("status") && t.get("status") !== void 0 && (this.status === "complete" ? this._liveMessage = "Complete" : this.status === "error" ? this._liveMessage = "Error" : this._liveMessage = "");
371
+ }
369
372
  updated(t) {
370
373
  super.updated(t), t.has("status") && (this.status === "active" ? this.setAttribute("aria-current", "step") : this.removeAttribute("aria-current")), t.has("disabled") && (this.disabled ? (this.setAttribute("tabindex", "-1"), this.setAttribute("aria-disabled", "true")) : (this.setAttribute("tabindex", "0"), this.removeAttribute("aria-disabled"))), t.has("orientation") && this.setAttribute("orientation", this.orientation), t.has("size") && this.setAttribute("size", this.size);
371
374
  }
@@ -419,7 +422,7 @@ let o = class extends u {
419
422
  // ─── Render ───
420
423
  render() {
421
424
  return d`
422
- <div part="base" class="step" role="button" @click=${this._handleClick}>
425
+ <div part="base" class="step" @click=${this._handleClick}>
423
426
  <div class="step__track">
424
427
  <div part="indicator" class="step__indicator">${this._renderIndicatorContent()}</div>
425
428
  <div part="connector" class="step__connector" aria-hidden="true"></div>
@@ -433,10 +436,11 @@ let o = class extends u {
433
436
  </div>
434
437
  </div>
435
438
  </div>
439
+ <div aria-live="polite" aria-atomic="true" class="sr-only">${this._liveMessage}</div>
436
440
  `;
437
441
  }
438
442
  };
439
- o.styles = [f, g];
443
+ o.styles = [f, y];
440
444
  n([
441
445
  a({ type: String, reflect: !0 })
442
446
  ], o.prototype, "label", 2);
@@ -459,10 +463,10 @@ n([
459
463
  a({ type: Number })
460
464
  ], o.prototype, "index", 2);
461
465
  o = n([
462
- v("hx-step")
466
+ u("hx-step")
463
467
  ], o);
464
468
  export {
465
469
  o as H,
466
470
  c as a
467
471
  };
468
- //# sourceMappingURL=hx-step-DlANlr2A.js.map
472
+ //# sourceMappingURL=hx-step-CmNwfcJx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hx-step-CmNwfcJx.js","sources":["../../src/components/hx-steps/hx-steps.styles.ts","../../src/components/hx-steps/hx-steps.ts","../../src/components/hx-steps/hx-step.styles.ts","../../src/components/hx-steps/hx-step.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const helixStepsStyles = css`\n :host {\n display: block;\n\n /* ─── Size defaults (md) ─── */\n --hx-steps-indicator-size: var(--hx-size-8, 2rem);\n --hx-steps-indicator-font-size: var(--hx-font-size-sm, 0.875rem);\n --hx-steps-indicator-icon-size: var(--hx-size-4, 1rem);\n --hx-steps-label-font-size: var(--hx-font-size-sm, 0.875rem);\n --hx-steps-description-font-size: var(--hx-font-size-xs, 0.75rem);\n\n /* ─── Item layout defaults (horizontal) ─── */\n --hx-steps-item-flex: 1;\n --hx-steps-item-width: auto;\n }\n\n .steps {\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n }\n\n /* ─── Orientation: vertical ─── */\n\n :host([orientation='vertical']) {\n --hx-steps-item-flex: initial;\n --hx-steps-item-width: 100%;\n }\n\n :host([orientation='vertical']) .steps {\n flex-direction: column;\n }\n\n /* ─── Size: sm ─── */\n\n :host([size='sm']) {\n --hx-steps-indicator-size: var(--hx-size-6, 1.5rem);\n --hx-steps-indicator-font-size: var(--hx-font-size-xs, 0.75rem);\n --hx-steps-indicator-icon-size: var(--hx-space-3, 0.75rem);\n --hx-steps-label-font-size: var(--hx-font-size-xs, 0.75rem);\n --hx-steps-description-font-size: var(--hx-font-size-xs, 0.75rem);\n }\n\n /* ─── Size: lg ─── */\n\n :host([size='lg']) {\n --hx-steps-indicator-size: var(--hx-size-10, 2.5rem);\n --hx-steps-indicator-font-size: var(--hx-font-size-md, 1rem);\n --hx-steps-indicator-icon-size: var(--hx-size-5, 1.25rem);\n --hx-steps-label-font-size: var(--hx-font-size-md, 1rem);\n --hx-steps-description-font-size: var(--hx-font-size-sm, 0.875rem);\n }\n`;\n","import { LitElement, html, nothing, type PropertyValues } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { tokenStyles } from '@helixui/tokens/lit';\nimport { devWarn } from '../../utils/dev-warn.js';\nimport { helixStepsStyles } from './hx-steps.styles.js';\nimport type { HelixStep } from './hx-step.js';\n\n/**\n * A multi-step wizard / stepper progress indicator. Renders a sequence of\n * `<hx-step>` children as a horizontal or vertical step tracker with connector\n * lines and status-based styling.\n *\n * Provide an `aria-label` on `<hx-steps>` to describe the step process for assistive technology.\n *\n * @summary Multi-step progress indicator container.\n *\n * @tag hx-steps\n *\n * @slot - Default slot for `<hx-step>` elements.\n *\n * @fires {CustomEvent<{step: HelixStep, index: number}>} hx-step-click - Dispatched when\n * a step is clicked. Detail contains the clicked `step` element and its zero-based `index`.\n *\n * @csspart base - The inner wrapper element.\n *\n * @cssprop [--hx-steps-indicator-size=2rem] - Step indicator circle diameter.\n * @cssprop [--hx-steps-connector-color=var(--hx-color-neutral-200)] - Connector line color.\n * @cssprop [--hx-steps-label-color=var(--hx-color-neutral-600)] - Step label text color.\n * @cssprop [--hx-steps-description-color=var(--hx-color-neutral-500)] - Step description color.\n */\n@customElement('hx-steps')\nexport class HelixSteps extends LitElement {\n static override styles = [tokenStyles, helixStepsStyles];\n\n // ─── Public Properties ───\n\n /**\n * Layout orientation of the steps.\n * @attr orientation\n */\n @property({ type: String, reflect: true })\n orientation: 'horizontal' | 'vertical' = 'horizontal';\n\n /**\n * Size variant of the steps.\n * @attr hx-size\n */\n @property({ type: String, reflect: true, attribute: 'hx-size' })\n size: 'sm' | 'md' | 'lg' = 'md';\n\n /**\n * Accessible label for the list. Forwarded to the inner list element.\n * @attr aria-label\n */\n @property({ type: String, attribute: 'aria-label' })\n ariaLabel: string | null = null;\n\n // ─── Lifecycle ───\n\n override connectedCallback(): void {\n super.connectedCallback();\n // Backward compat: accept legacy `size` attribute. When present and `hx-size`\n // is not set, map the value and emit a deprecation warning.\n const legacySize = this.getAttribute('size');\n if (legacySize !== null && !this.hasAttribute('hx-size')) {\n devWarn('hx-steps', 'The \"size\" attribute is deprecated. Use \"hx-size\" instead.');\n this.size = legacySize as 'sm' | 'md' | 'lg';\n }\n // STEPS-002: WCAG 2.1 SC 4.1.2 — the inner list must have an accessible name.\n // Warn developers when aria-label is missing so the list is not anonymous.\n if (!this.ariaLabel) {\n devWarn(\n 'hx-steps',\n 'An \"aria-label\" attribute is required to provide an accessible name for the steps list (WCAG 2.1 SC 4.1.2).',\n );\n }\n // WCAG 4.1.2: suppress the host element's implicit ARIA role so only the\n // inner div[role=\"list\"] is announced. Mirrors the hx-action-bar pattern.\n // Without this, the consumer's aria-label attribute on the host causes dual\n // announcement — once for the host element and once for the inner list.\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'none');\n }\n this.addEventListener('hx-step-click-internal', this._handleStepClickInternal);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener('hx-step-click-internal', this._handleStepClickInternal);\n }\n\n override firstUpdated(): void {\n this._syncChildren();\n }\n\n override updated(changedProperties: PropertyValues<this>): void {\n super.updated(changedProperties);\n if (changedProperties.has('orientation') || changedProperties.has('size')) {\n this._syncChildren();\n }\n }\n\n // ─── Child Sync ───\n\n /** @internal */\n private _getSteps(): HelixStep[] {\n return Array.from(this.querySelectorAll(':scope > hx-step')) as HelixStep[];\n }\n\n /** @internal */\n private _syncChildren(): void {\n const steps = this._getSteps();\n steps.forEach((step, i) => {\n step.orientation = this.orientation;\n step.size = this.size;\n step.index = i;\n });\n }\n\n // ─── Event Handling ───\n\n /** @internal */\n private _handleSlotChange = (): void => {\n this._syncChildren();\n };\n\n /** @internal */\n private _handleStepClickInternal = (e: Event): void => {\n e.stopPropagation();\n const steps = this._getSteps();\n const step = e\n .composedPath()\n .find(\n (el): el is HelixStep => el instanceof Element && el.tagName.toLowerCase() === 'hx-step',\n );\n if (!step) return;\n const index = steps.indexOf(step);\n\n /**\n * Dispatched when a step is clicked.\n * @event hx-step-click\n */\n this.dispatchEvent(\n new CustomEvent<{ step: HelixStep; index: number }>('hx-step-click', {\n bubbles: true,\n composed: true,\n detail: { step, index },\n }),\n );\n };\n\n // ─── Render ───\n\n override render() {\n return html`\n <div part=\"base\" class=\"steps\" role=\"list\" aria-label=${this.ariaLabel ?? nothing}>\n <slot @slotchange=${this._handleSlotChange}></slot>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'hx-steps': HelixSteps;\n }\n}\n","import { css } from 'lit';\n\nexport const helixStepStyles = css`\n :host {\n display: flex;\n flex: var(--hx-steps-item-flex, 1);\n width: var(--hx-steps-item-width, auto);\n min-width: 0;\n }\n\n /* ─── Visually Hidden (SR only) ─── */\n\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n }\n\n /* ─── Step Wrapper ─── */\n\n .step {\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n cursor: pointer;\n }\n\n /* ─── Focus ─── */\n\n :host(:focus-visible) .step__indicator {\n outline: var(--hx-focus-ring-width, 2px) solid var(--hx-color-primary-500);\n outline-offset: var(--hx-focus-ring-offset, 2px);\n }\n\n /* ─── Track (indicator + connector) ─── */\n\n .step__track {\n display: flex;\n flex-direction: row;\n align-items: center;\n width: 100%;\n }\n\n /* ─── Indicator ─── */\n\n .step__indicator {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: var(--hx-steps-indicator-size, 2rem);\n height: var(--hx-steps-indicator-size, 2rem);\n border-radius: var(--hx-border-radius-full, 9999px);\n border: var(--hx-border-width-medium, 2px) solid var(--hx-color-neutral-300);\n background-color: var(--hx-color-neutral-0);\n color: var(--hx-color-neutral-500);\n font-size: var(--hx-steps-indicator-font-size, var(--hx-font-size-sm));\n font-weight: var(--hx-font-weight-semibold);\n font-family: var(--hx-font-family-sans);\n transition:\n background-color var(--hx-transition-fast, 150ms ease),\n border-color var(--hx-transition-fast, 150ms ease),\n color var(--hx-transition-fast, 150ms ease);\n position: relative;\n z-index: 1;\n }\n\n .step__indicator svg {\n width: var(--hx-steps-indicator-icon-size, 1rem);\n height: var(--hx-steps-indicator-icon-size, 1rem);\n }\n\n /* ─── Connector ─── */\n\n .step__connector {\n flex: 1;\n height: var(--hx-steps-connector-thickness, var(--hx-border-width, 2px));\n min-width: 0;\n background-color: var(--hx-steps-connector-color, var(--hx-color-neutral-200));\n transition: background-color var(--hx-transition-fast, 150ms ease);\n }\n\n :host(:last-child) .step__connector {\n display: none;\n }\n\n /* ─── Label Area ─── */\n\n .step__label-area {\n text-align: center;\n margin-top: var(--hx-space-2, 0.5rem);\n width: 100%;\n padding: 0 var(--hx-space-1, 0.25rem);\n }\n\n .step__label {\n font-family: var(--hx-font-family-sans);\n font-size: var(--hx-steps-label-font-size, var(--hx-font-size-sm));\n font-weight: var(--hx-font-weight-medium);\n color: var(--hx-steps-label-color, var(--hx-color-neutral-600));\n line-height: var(--hx-line-height-tight, 1.25);\n }\n\n .step__description {\n font-family: var(--hx-font-family-sans);\n font-size: var(--hx-steps-description-font-size, var(--hx-font-size-xs));\n color: var(--hx-steps-description-color, var(--hx-color-neutral-500));\n margin-top: var(--hx-space-1, 0.25rem);\n line-height: var(--hx-line-height-normal, 1.5);\n }\n\n /* ─── Status: active ─── */\n\n /* Active: outlined indicator (in-progress) — visually distinct from complete (filled) */\n :host([status='active']) .step__indicator {\n border-color: var(--hx-color-primary-500);\n background-color: var(--hx-color-primary-500);\n color: var(--hx-color-neutral-0);\n }\n\n :host([status='active']) .step__label {\n color: var(--hx-color-primary-700);\n font-weight: var(--hx-font-weight-semibold);\n }\n\n /* ─── Status: complete ─── */\n\n /* Complete: filled indicator with darker shade — visually distinct from active */\n :host([status='complete']) .step__indicator {\n border-color: var(--hx-color-primary-700);\n background-color: var(--hx-color-primary-700);\n color: var(--hx-color-neutral-0);\n }\n\n :host([status='complete']) .step__connector {\n background-color: var(--hx-steps-connector-complete-color, var(--hx-color-primary-500));\n }\n\n :host([status='complete']) .step__label {\n color: var(--hx-color-neutral-700);\n }\n\n /* ─── Status: error ─── */\n\n :host([status='error']) .step__indicator {\n border-color: var(--hx-color-error-500);\n background-color: var(--hx-color-error-500);\n color: var(--hx-color-neutral-0);\n }\n\n :host([status='error']) .step__label {\n color: var(--hx-color-error-700);\n }\n\n /* ─── Status: disabled ─── */\n\n :host([disabled]) .step {\n cursor: not-allowed;\n opacity: var(--hx-opacity-disabled, 0.5);\n pointer-events: none;\n }\n\n :host([disabled]) .step__indicator {\n border-color: var(--hx-color-neutral-300);\n background-color: var(--hx-color-neutral-100);\n color: var(--hx-color-neutral-400);\n }\n\n /* ─── Vertical Layout ─── */\n\n :host([orientation='vertical']) {\n flex: initial;\n width: 100%;\n }\n\n :host([orientation='vertical']) .step {\n flex-direction: row;\n align-items: flex-start;\n gap: var(--hx-space-3, 0.75rem);\n }\n\n :host([orientation='vertical']) .step__track {\n flex-direction: column;\n align-items: center;\n width: auto;\n flex-shrink: 0;\n }\n\n :host([orientation='vertical']) .step__connector {\n width: var(--hx-steps-connector-thickness, var(--hx-border-width, 2px));\n height: auto;\n min-height: var(--hx-space-8, 2rem);\n flex: 1;\n }\n\n :host([orientation='vertical']) .step__label-area {\n text-align: start;\n margin-top: 0;\n padding-bottom: var(--hx-space-4, 1rem);\n padding-inline-start: 0;\n }\n\n :host([orientation='vertical']:last-child) .step__label-area {\n padding-bottom: 0;\n }\n\n @media (prefers-reduced-motion: reduce) {\n .step__indicator {\n transition: none;\n }\n\n .step__connector {\n transition: none;\n }\n }\n`;\n","import { LitElement, html, type PropertyValues } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { tokenStyles } from '@helixui/tokens/lit';\nimport { helixStepStyles } from './hx-step.styles.js';\n\n/**\n * An individual step, designed to be used inside an `<hx-steps>` container.\n * Represents a single step in a multi-step wizard or progress indicator.\n *\n * @summary Individual step item within an `<hx-steps>` progress indicator.\n *\n * @tag hx-step\n *\n * @slot icon - Custom icon for the step indicator. Shown when status is `pending` or `active`.\n * @slot label - Step label text. Falls back to the `label` property.\n * @slot description - Step description text. Falls back to the `description` property.\n *\n * @csspart base - The outermost wrapper element.\n * @csspart indicator - The circular step indicator.\n * @csspart connector - The line connecting this step to the next.\n * @csspart label - The step label element.\n * @csspart description - The step description element.\n *\n * @cssprop [--hx-steps-indicator-size=2rem] - Indicator circle diameter.\n * @cssprop [--hx-steps-indicator-font-size=var(--hx-font-size-sm)] - Indicator text size.\n * @cssprop [--hx-steps-indicator-icon-size=1rem] - Indicator icon size.\n * @cssprop [--hx-steps-label-font-size=var(--hx-font-size-sm)] - Label font size.\n * @cssprop [--hx-steps-description-font-size=var(--hx-font-size-xs)] - Description font size.\n * @cssprop [--hx-steps-connector-color=var(--hx-color-neutral-200)] - Connector line color.\n * @cssprop [--hx-steps-connector-complete-color=var(--hx-color-primary-500)] - Connector color when step is complete.\n * @cssprop [--hx-steps-connector-thickness=var(--hx-border-width,2px)] - Connector line thickness.\n * @cssprop [--hx-steps-label-color=var(--hx-color-neutral-600)] - Label text color.\n * @cssprop [--hx-steps-description-color=var(--hx-color-neutral-500)] - Description text color.\n */\n@customElement('hx-step')\nexport class HelixStep extends LitElement {\n static override styles = [tokenStyles, helixStepStyles];\n\n // ─── Public Properties ───\n\n /**\n * The step label text.\n * @attr label\n */\n @property({ type: String, reflect: true })\n label = '';\n\n /**\n * Current status of the step.\n * @attr status\n */\n @property({ type: String, reflect: true })\n status: 'pending' | 'active' | 'complete' | 'error' = 'pending';\n\n /**\n * Optional description text shown below the label.\n * @attr description\n */\n @property({ type: String, reflect: true })\n description = '';\n\n /**\n * Whether the step is disabled and non-interactive.\n * @attr disabled\n */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n // ─── Internal Properties (set by parent hx-steps) ───\n\n /**\n * Layout orientation. Set by the parent `<hx-steps>` container via JS property.\n * Do not set this attribute directly on `<hx-step>` — use the `orientation`\n * property on the parent `<hx-steps>` container instead. The parent will\n * propagate the value to all child steps via `_syncChildren()`.\n * @internal\n */\n @property({ attribute: false })\n orientation: 'horizontal' | 'vertical' = 'horizontal';\n\n /**\n * Size variant. Set by the parent `<hx-steps>` container via JS property.\n * Do not set this attribute directly on `<hx-step>` — use the `size` property\n * on the parent `<hx-steps>` container instead. The parent will propagate the\n * value to all child steps via `_syncChildren()`.\n * @internal\n */\n @property({ attribute: false })\n size: 'sm' | 'md' | 'lg' = 'md';\n\n /**\n * Zero-based index of this step. Set by the parent `<hx-steps>` container.\n * @internal\n */\n @property({ type: Number })\n index = 0;\n\n // ─── Internal State ───\n\n /**\n * Text for the aria-live region, updated on status transitions.\n * Non-reactive: computed in willUpdate() to avoid an extra render cycle.\n * @internal\n */\n private _liveMessage = '';\n\n // ─── Lifecycle ───\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'listitem');\n }\n this.setAttribute('tabindex', this.disabled ? '-1' : '0');\n this.addEventListener('keydown', this._handleKeydown);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener('keydown', this._handleKeydown);\n }\n\n override willUpdate(changedProperties: PropertyValues<this>): void {\n if (changedProperties.has('status')) {\n // STEPS-003: announce status transitions to screen readers via aria-live region.\n // Only announce on transitions (not initial render) by checking the previous value.\n // Using a non-reactive field here avoids scheduling an extra render cycle.\n const prev = changedProperties.get('status');\n if (prev !== undefined) {\n if (this.status === 'complete') {\n this._liveMessage = 'Complete';\n } else if (this.status === 'error') {\n this._liveMessage = 'Error';\n } else {\n this._liveMessage = '';\n }\n }\n }\n }\n\n override updated(changedProperties: PropertyValues<this>): void {\n super.updated(changedProperties);\n if (changedProperties.has('status')) {\n if (this.status === 'active') {\n this.setAttribute('aria-current', 'step');\n } else {\n this.removeAttribute('aria-current');\n }\n }\n if (changedProperties.has('disabled')) {\n if (this.disabled) {\n this.setAttribute('tabindex', '-1');\n this.setAttribute('aria-disabled', 'true');\n } else {\n this.setAttribute('tabindex', '0');\n this.removeAttribute('aria-disabled');\n }\n }\n if (changedProperties.has('orientation')) {\n this.setAttribute('orientation', this.orientation);\n }\n if (changedProperties.has('size')) {\n this.setAttribute('size', this.size);\n }\n }\n\n // ─── Event Handling ───\n\n /** @internal */\n private _handleKeydown = (event: KeyboardEvent): void => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this._handleClick();\n }\n };\n\n /** @internal */\n private _handleClick(): void {\n if (this.disabled) {\n return;\n }\n\n /**\n * Internal event dispatched to signal step click to the parent container.\n * @internal\n */\n this.dispatchEvent(\n new CustomEvent<void>('hx-step-click-internal', {\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n // ─── Render Helpers ───\n\n /** @internal */\n private _renderCheckmark() {\n return html`\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M20 6L9 17l-5-5\" />\n </svg>\n <span class=\"sr-only\">Complete</span>\n `;\n }\n\n /** @internal */\n private _renderXMark() {\n return html`\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n >\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n <span class=\"sr-only\">Error</span>\n `;\n }\n\n /** @internal */\n private _renderIndicatorContent() {\n if (this.status === 'complete') {\n return this._renderCheckmark();\n }\n if (this.status === 'error') {\n return this._renderXMark();\n }\n return html`<slot name=\"icon\">${this.index + 1}</slot>`;\n }\n\n // ─── Render ───\n\n override render() {\n return html`\n <div part=\"base\" class=\"step\" @click=${this._handleClick}>\n <div class=\"step__track\">\n <div part=\"indicator\" class=\"step__indicator\">${this._renderIndicatorContent()}</div>\n <div part=\"connector\" class=\"step__connector\" aria-hidden=\"true\"></div>\n </div>\n <div class=\"step__label-area\">\n <div part=\"label\" class=\"step__label\">\n <slot name=\"label\">${this.label}</slot>\n </div>\n <div part=\"description\" class=\"step__description\">\n <slot name=\"description\">${this.description}</slot>\n </div>\n </div>\n </div>\n <div aria-live=\"polite\" aria-atomic=\"true\" class=\"sr-only\">${this._liveMessage}</div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'hx-step': HelixStep;\n }\n}\n"],"names":["helixStepsStyles","css","HelixSteps","LitElement","e","steps","step","el","index","legacySize","changedProperties","i","html","nothing","tokenStyles","__decorateClass","property","customElement","helixStepStyles","HelixStep","event"],"mappings":"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"}