@aquera/nile-elements 2.0.2 → 2.0.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.
- package/README.md +19 -0
- package/demo/nxtgen-classes.css +2 -2
- package/demo/nxtgen-properties.css +2 -2
- package/demo/nxtgen-utilities.css +4 -4
- package/demo/nxtgen.css +2 -2
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.js +1120 -674
- package/dist/nile-empty-state/nile-empty-state.cjs.js +1 -1
- package/dist/nile-empty-state/nile-empty-state.cjs.js.map +1 -1
- package/dist/nile-empty-state/nile-empty-state.css.cjs.js +1 -1
- package/dist/nile-empty-state/nile-empty-state.css.cjs.js.map +1 -1
- package/dist/nile-empty-state/nile-empty-state.css.esm.js +129 -6
- package/dist/nile-empty-state/nile-empty-state.esm.js +45 -31
- package/dist/nile-pagination/nile-pagination.cjs.js +1 -1
- package/dist/nile-pagination/nile-pagination.cjs.js.map +1 -1
- package/dist/nile-pagination/nile-pagination.esm.js +25 -25
- package/dist/nile-segmented-progress-bar/index.cjs.js +2 -0
- package/dist/nile-segmented-progress-bar/index.cjs.js.map +1 -0
- package/dist/nile-segmented-progress-bar/index.esm.js +1 -0
- package/dist/nile-segmented-progress-bar/nile-segmented-progress-bar.cjs.js +2 -0
- package/dist/nile-segmented-progress-bar/nile-segmented-progress-bar.cjs.js.map +1 -0
- package/dist/nile-segmented-progress-bar/nile-segmented-progress-bar.css.cjs.js +2 -0
- package/dist/nile-segmented-progress-bar/nile-segmented-progress-bar.css.cjs.js.map +1 -0
- package/dist/nile-segmented-progress-bar/nile-segmented-progress-bar.css.esm.js +243 -0
- package/dist/nile-segmented-progress-bar/nile-segmented-progress-bar.esm.js +69 -0
- package/dist/nile-wysiwyg-editor/engine/commands.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/commands.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/engine/commands.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/create-state.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/create-state.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/index.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/index.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/code-highlight.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/code-highlight.cjs.js.map +1 -1
- package/dist/nile-wysiwyg-editor/engine/plugins/code-highlight.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/index.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/index.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/nile-wysiwyg-editor.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/code-block-menu.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/code-block-menu.esm.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/source-view.cjs.js +1 -1
- package/dist/nile-wysiwyg-editor/ui/source-view.esm.js +1 -1
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/nile-empty-state/nile-empty-state.css.js +127 -4
- package/dist/src/nile-empty-state/nile-empty-state.css.js.map +1 -1
- package/dist/src/nile-empty-state/nile-empty-state.d.ts +35 -5
- package/dist/src/nile-empty-state/nile-empty-state.js +159 -42
- package/dist/src/nile-empty-state/nile-empty-state.js.map +1 -1
- package/dist/src/nile-empty-state/nile-empty-state.test.d.ts +1 -0
- package/dist/src/nile-empty-state/nile-empty-state.test.js +186 -15
- package/dist/src/nile-empty-state/nile-empty-state.test.js.map +1 -1
- package/dist/src/nile-pagination/nile-pagination.js +5 -5
- package/dist/src/nile-pagination/nile-pagination.js.map +1 -1
- package/dist/src/nile-segmented-progress-bar/index.d.ts +2 -0
- package/dist/src/nile-segmented-progress-bar/index.js +2 -0
- package/dist/src/nile-segmented-progress-bar/index.js.map +1 -0
- package/dist/src/nile-segmented-progress-bar/nile-segmented-progress-bar.css.d.ts +9 -0
- package/dist/src/nile-segmented-progress-bar/nile-segmented-progress-bar.css.js +252 -0
- package/dist/src/nile-segmented-progress-bar/nile-segmented-progress-bar.css.js.map +1 -0
- package/dist/src/nile-segmented-progress-bar/nile-segmented-progress-bar.d.ts +135 -0
- package/dist/src/nile-segmented-progress-bar/nile-segmented-progress-bar.js +373 -0
- package/dist/src/nile-segmented-progress-bar/nile-segmented-progress-bar.js.map +1 -0
- package/dist/src/nile-segmented-progress-bar/nile-segmented-progress-bar.test.d.ts +1 -0
- package/dist/src/nile-segmented-progress-bar/nile-segmented-progress-bar.test.js +961 -0
- package/dist/src/nile-segmented-progress-bar/nile-segmented-progress-bar.test.js.map +1 -0
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/xml-09119317.cjs.js +2 -0
- package/dist/xml-09119317.cjs.js.map +1 -0
- package/dist/{xml-25c4108a.esm.js → xml-9bf771b3.esm.js} +1 -1
- package/package.json +2 -1
- package/src/index.ts +5 -0
- package/src/nile-empty-state/nile-empty-state.css.ts +127 -4
- package/src/nile-empty-state/nile-empty-state.test.ts +192 -15
- package/src/nile-empty-state/nile-empty-state.ts +195 -34
- package/src/nile-pagination/nile-pagination.ts +5 -5
- package/src/nile-segmented-progress-bar/index.ts +5 -0
- package/src/nile-segmented-progress-bar/nile-segmented-progress-bar.css.ts +254 -0
- package/src/nile-segmented-progress-bar/nile-segmented-progress-bar.test.ts +1298 -0
- package/src/nile-segmented-progress-bar/nile-segmented-progress-bar.ts +437 -0
- package/vscode-html-custom-data.json +192 -16
- package/dist/xml-90fd974e.cjs.js +0 -2
- package/dist/xml-90fd974e.cjs.js.map +0 -1
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright Aquera Inc 2026
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the BSD-3-Clause license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
import { css } from 'lit';
|
|
8
|
+
export const styles = css `
|
|
9
|
+
:host {
|
|
10
|
+
-webkit-font-smoothing: var(
|
|
11
|
+
--nile-webkit-font-smoothing,
|
|
12
|
+
var(--ng-webkit-font-smoothing)
|
|
13
|
+
);
|
|
14
|
+
-moz-osx-font-smoothing: var(
|
|
15
|
+
--nile-moz-osx-font-smoothing,
|
|
16
|
+
var(--ng-moz-osx-font-smoothing)
|
|
17
|
+
);
|
|
18
|
+
text-rendering: var(--nile-text-rendering, var(--ng-text-rendering));
|
|
19
|
+
display: block;
|
|
20
|
+
width: 100%;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.segmented-progress-bar {
|
|
24
|
+
display: flex;
|
|
25
|
+
flex-direction: column;
|
|
26
|
+
gap: var(--nile-spacing-sm, var(--ng-spacing-2));
|
|
27
|
+
box-sizing: border-box;
|
|
28
|
+
width: 100%;
|
|
29
|
+
min-width: 0;
|
|
30
|
+
font-family: var(--nile-font-family-serif, var(--ng-font-family-body));
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/* #region Label */
|
|
34
|
+
|
|
35
|
+
.segmented-progress-bar__label {
|
|
36
|
+
font-size: var(--nile-type-scale-2, var(--ng-font-size-text-sm));
|
|
37
|
+
line-height: var(--nile-type-scale-5, var(--ng-line-height-text-sm));
|
|
38
|
+
font-weight: var(--nile-font-weight-medium, var(--ng-font-weight-medium));
|
|
39
|
+
color: var(--nile-colors-dark-900, var(--ng-colors-text-primary-900));
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/* #endregion */
|
|
43
|
+
|
|
44
|
+
/* #region Track */
|
|
45
|
+
|
|
46
|
+
.segmented-progress-bar__track {
|
|
47
|
+
display: flex;
|
|
48
|
+
flex-wrap: nowrap;
|
|
49
|
+
align-items: stretch;
|
|
50
|
+
width: 100%;
|
|
51
|
+
min-width: 0;
|
|
52
|
+
box-sizing: border-box;
|
|
53
|
+
overflow: hidden;
|
|
54
|
+
background-color: var(
|
|
55
|
+
--nile-progress-bar-track-color-stroke,
|
|
56
|
+
var(--ng-colors-bg-quaternary)
|
|
57
|
+
);
|
|
58
|
+
border-radius: var(--nile-radius-none, var(--ng-radius-none));
|
|
59
|
+
height: var(--nile-height-8px, var(--ng-height-8px));
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.segmented-progress-bar--rounded .segmented-progress-bar__track {
|
|
63
|
+
border-radius: var(--nile-radius-full, var(--ng-radius-full));
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.segmented-progress-bar--small .segmented-progress-bar__track {
|
|
67
|
+
height: var(--nile-height-4px, var(--ng-height-4px));
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.segmented-progress-bar--medium .segmented-progress-bar__track {
|
|
71
|
+
height: var(--nile-height-8px, var(--ng-height-8px));
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.segmented-progress-bar--large .segmented-progress-bar__track {
|
|
75
|
+
height: var(--nile-height-12px, var(--ng-height-12px));
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.segmented-progress-bar__track nile-lite-tooltip {
|
|
79
|
+
display: contents;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/* #endregion */
|
|
83
|
+
|
|
84
|
+
/* #region Segments */
|
|
85
|
+
|
|
86
|
+
.segmented-progress-bar__segment {
|
|
87
|
+
appearance: none;
|
|
88
|
+
-webkit-appearance: none;
|
|
89
|
+
display: block;
|
|
90
|
+
padding: var(--nile-spacing-none, var(--ng-spacing-0));
|
|
91
|
+
margin: var(--nile-spacing-none, var(--ng-spacing-0));
|
|
92
|
+
border: none;
|
|
93
|
+
border-radius: var(--nile-radius-none, var(--ng-radius-none));
|
|
94
|
+
height: 100%;
|
|
95
|
+
align-self: stretch;
|
|
96
|
+
box-sizing: border-box;
|
|
97
|
+
cursor: pointer;
|
|
98
|
+
flex-grow: 0;
|
|
99
|
+
transition: opacity 0.15s ease-in-out;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.segmented-progress-bar__segment:hover {
|
|
103
|
+
opacity: 0.85;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.segmented-progress-bar__segment:focus-visible {
|
|
107
|
+
outline: var(--nile-height-2px, var(--ng-height-2px)) solid
|
|
108
|
+
var(--nile-colors-brand-600, var(--ng-colors-border-brand));
|
|
109
|
+
outline-offset: var(--nile-height-1px, var(--ng-height-1px));
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/* #endregion */
|
|
113
|
+
|
|
114
|
+
.segmented-progress-bar__palette-0 {
|
|
115
|
+
background-color: var(--nile-colors-green-500, var(--ng-componentcolors-utility-success-500));
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
.segmented-progress-bar__palette-1 {
|
|
119
|
+
background-color: var(--nile-colors-red-500, var(--ng-componentcolors-utility-error-500));
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.segmented-progress-bar__palette-2 {
|
|
123
|
+
background-color: var(--nile-colors-orange-500, var(--ng-componentcolors-utility-orange-500));
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
.segmented-progress-bar__palette-3 {
|
|
127
|
+
background-color: var(--nile-colors-blue-500, var(--ng-componentcolors-utility-blue-500));
|
|
128
|
+
}
|
|
129
|
+
.segmented-progress-bar__palette-4 {
|
|
130
|
+
background-color: var(--nile-colors-neutral-700, var(--ng-componentcolors-utility-gray-500));
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.segmented-progress-bar__palette-5 {
|
|
134
|
+
background-color: var(--nile-colors-purple-500, var(--ng-componentcolors-utility-purple-500));
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.segmented-progress-bar__palette-6 {
|
|
138
|
+
background-color: var(--nile-colors-yellow-500, var(--ng-componentcolors-utility-warning-500));
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
.segmented-progress-bar__palette-7 {
|
|
142
|
+
background-color: var(--nile-colors-pink-500, var(--ng-componentcolors-utility-pink-500));
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
.segmented-progress-bar__palette-8 {
|
|
146
|
+
background-color: var(--nile-colors-indigo-500, var(--ng-componentcolors-utility-indigo-500));
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.segmented-progress-bar__palette-9 {
|
|
150
|
+
background-color: var(--nile-colors-fuchsia-500, var(--ng-componentcolors-utility-fuchsia-500));
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/* #endregion */
|
|
154
|
+
|
|
155
|
+
/* #region Legend */
|
|
156
|
+
|
|
157
|
+
.segmented-progress-bar__legend {
|
|
158
|
+
display: flex;
|
|
159
|
+
flex-wrap: wrap;
|
|
160
|
+
align-items: center;
|
|
161
|
+
column-gap: var(--nile-spacing-lg, var(--ng-spacing-4));
|
|
162
|
+
row-gap: var(--nile-spacing-sm, var(--ng-spacing-2));
|
|
163
|
+
width: 100%;
|
|
164
|
+
min-width: 0;
|
|
165
|
+
margin-top: var(--nile-spacing-xs, var(--ng-spacing-1));
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
.segmented-progress-bar__legend-item {
|
|
169
|
+
appearance: none;
|
|
170
|
+
-webkit-appearance: none;
|
|
171
|
+
display: inline-flex;
|
|
172
|
+
align-items: center;
|
|
173
|
+
gap: var(--nile-spacing-xs, var(--ng-spacing-2));
|
|
174
|
+
padding: var(--nile-spacing-none, var(--ng-spacing-0));
|
|
175
|
+
margin: var(--nile-spacing-none, var(--ng-spacing-0));
|
|
176
|
+
border: none;
|
|
177
|
+
background: none;
|
|
178
|
+
border-radius: var(--nile-radius-xs, var(--ng-radius-xs));
|
|
179
|
+
cursor: pointer;
|
|
180
|
+
/* Keep swatch, label and value on one line — never break mid-entry. */
|
|
181
|
+
white-space: nowrap;
|
|
182
|
+
flex: 0 0 auto;
|
|
183
|
+
max-width: 100%;
|
|
184
|
+
font-family: inherit;
|
|
185
|
+
text-align: left;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
.segmented-progress-bar__legend-item:focus-visible {
|
|
189
|
+
outline: var(--nile-height-2px, var(--ng-height-2px)) solid
|
|
190
|
+
var(--nile-colors-brand-600, var(--ng-colors-border-brand));
|
|
191
|
+
outline-offset: var(--nile-height-2px, var(--ng-height-2px));
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
.segmented-progress-bar__legend-swatch {
|
|
195
|
+
flex: none;
|
|
196
|
+
width: var(--nile-height-10px, var(--ng-height-10px));
|
|
197
|
+
height: var(--nile-height-10px, var(--ng-height-10px));
|
|
198
|
+
border-radius: var(--nile-radius-xxs, var(--ng-radius-xxs));
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
.segmented-progress-bar__legend-label {
|
|
202
|
+
font-size: var(--nile-type-scale-2, var(--ng-font-size-text-sm));
|
|
203
|
+
line-height: var(--nile-type-scale-5, var(--ng-line-height-text-sm));
|
|
204
|
+
font-weight: var(--nile-font-weight-regular, var(--ng-font-weight-regular));
|
|
205
|
+
color: var(--nile-colors-text-secondary, var(--ng-colors-text-secondary-700));
|
|
206
|
+
overflow: hidden;
|
|
207
|
+
text-overflow: ellipsis;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
.segmented-progress-bar__legend-value {
|
|
211
|
+
font-size: var(--nile-type-scale-2, var(--ng-font-size-text-sm));
|
|
212
|
+
line-height: var(--nile-type-scale-5, var(--ng-line-height-text-sm));
|
|
213
|
+
font-weight: var(--nile-font-weight-bold, var(--ng-font-weight-semibold));
|
|
214
|
+
color: var(--nile-colors-dark-900, var(--ng-colors-text-primary-900));
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/* #endregion */
|
|
218
|
+
|
|
219
|
+
/* #region Sizes — legend scales with the bar */
|
|
220
|
+
|
|
221
|
+
.segmented-progress-bar--small .segmented-progress-bar__legend-swatch {
|
|
222
|
+
width: var(--nile-height-8px, var(--ng-height-8px));
|
|
223
|
+
height: var(--nile-height-8px, var(--ng-height-8px));
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
.segmented-progress-bar--small .segmented-progress-bar__legend-label,
|
|
227
|
+
.segmented-progress-bar--small .segmented-progress-bar__legend-value {
|
|
228
|
+
font-size: var(--nile-type-scale-1, var(--ng-font-size-text-xs));
|
|
229
|
+
line-height: var(--nile-type-scale-4, var(--ng-line-height-text-xs));
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
.segmented-progress-bar--large .segmented-progress-bar__legend-swatch {
|
|
233
|
+
width: var(--nile-height-12px, var(--ng-height-12px));
|
|
234
|
+
height: var(--nile-height-12px, var(--ng-height-12px));
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
.segmented-progress-bar--large .segmented-progress-bar__legend-label,
|
|
238
|
+
.segmented-progress-bar--large .segmented-progress-bar__legend-value {
|
|
239
|
+
font-size: var(--nile-type-scale-3, var(--ng-font-size-text-md));
|
|
240
|
+
line-height: var(--nile-type-scale-6, var(--ng-line-height-text-md));
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/* #endregion */
|
|
244
|
+
|
|
245
|
+
@media (prefers-reduced-motion: reduce) {
|
|
246
|
+
.segmented-progress-bar__segment {
|
|
247
|
+
transition: none;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
`;
|
|
251
|
+
export default [styles];
|
|
252
|
+
//# sourceMappingURL=nile-segmented-progress-bar.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nile-segmented-progress-bar.css.js","sourceRoot":"","sources":["../../../src/nile-segmented-progress-bar/nile-segmented-progress-bar.css.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkPxB,CAAC;AAEF,eAAe,CAAC,MAAM,CAAC,CAAC","sourcesContent":["/**\n * Copyright Aquera Inc 2026\n *\n * This source code is licensed under the BSD-3-Clause license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { css } from 'lit';\n\nexport const styles = css`\n :host {\n -webkit-font-smoothing: var(\n --nile-webkit-font-smoothing,\n var(--ng-webkit-font-smoothing)\n );\n -moz-osx-font-smoothing: var(\n --nile-moz-osx-font-smoothing,\n var(--ng-moz-osx-font-smoothing)\n );\n text-rendering: var(--nile-text-rendering, var(--ng-text-rendering));\n display: block;\n width: 100%;\n }\n\n .segmented-progress-bar {\n display: flex;\n flex-direction: column;\n gap: var(--nile-spacing-sm, var(--ng-spacing-2));\n box-sizing: border-box;\n width: 100%;\n min-width: 0;\n font-family: var(--nile-font-family-serif, var(--ng-font-family-body));\n }\n\n /* #region Label */\n\n .segmented-progress-bar__label {\n font-size: var(--nile-type-scale-2, var(--ng-font-size-text-sm));\n line-height: var(--nile-type-scale-5, var(--ng-line-height-text-sm));\n font-weight: var(--nile-font-weight-medium, var(--ng-font-weight-medium));\n color: var(--nile-colors-dark-900, var(--ng-colors-text-primary-900));\n }\n\n /* #endregion */\n\n /* #region Track */\n\n .segmented-progress-bar__track {\n display: flex;\n flex-wrap: nowrap;\n align-items: stretch;\n width: 100%;\n min-width: 0;\n box-sizing: border-box;\n overflow: hidden;\n background-color: var(\n --nile-progress-bar-track-color-stroke,\n var(--ng-colors-bg-quaternary)\n );\n border-radius: var(--nile-radius-none, var(--ng-radius-none));\n height: var(--nile-height-8px, var(--ng-height-8px));\n }\n\n .segmented-progress-bar--rounded .segmented-progress-bar__track {\n border-radius: var(--nile-radius-full, var(--ng-radius-full));\n }\n\n .segmented-progress-bar--small .segmented-progress-bar__track {\n height: var(--nile-height-4px, var(--ng-height-4px));\n }\n\n .segmented-progress-bar--medium .segmented-progress-bar__track {\n height: var(--nile-height-8px, var(--ng-height-8px));\n }\n\n .segmented-progress-bar--large .segmented-progress-bar__track {\n height: var(--nile-height-12px, var(--ng-height-12px));\n }\n \n .segmented-progress-bar__track nile-lite-tooltip {\n display: contents;\n }\n\n /* #endregion */\n\n /* #region Segments */\n\n .segmented-progress-bar__segment {\n appearance: none;\n -webkit-appearance: none;\n display: block;\n padding: var(--nile-spacing-none, var(--ng-spacing-0));\n margin: var(--nile-spacing-none, var(--ng-spacing-0));\n border: none;\n border-radius: var(--nile-radius-none, var(--ng-radius-none));\n height: 100%;\n align-self: stretch;\n box-sizing: border-box;\n cursor: pointer;\n flex-grow: 0;\n transition: opacity 0.15s ease-in-out;\n }\n\n .segmented-progress-bar__segment:hover {\n opacity: 0.85;\n }\n\n .segmented-progress-bar__segment:focus-visible {\n outline: var(--nile-height-2px, var(--ng-height-2px)) solid\n var(--nile-colors-brand-600, var(--ng-colors-border-brand));\n outline-offset: var(--nile-height-1px, var(--ng-height-1px));\n }\n\n /* #endregion */\n\n .segmented-progress-bar__palette-0 {\n background-color: var(--nile-colors-green-500, var(--ng-componentcolors-utility-success-500));\n }\n\n .segmented-progress-bar__palette-1 {\n background-color: var(--nile-colors-red-500, var(--ng-componentcolors-utility-error-500));\n }\n\n .segmented-progress-bar__palette-2 {\n background-color: var(--nile-colors-orange-500, var(--ng-componentcolors-utility-orange-500));\n }\n\n .segmented-progress-bar__palette-3 {\n background-color: var(--nile-colors-blue-500, var(--ng-componentcolors-utility-blue-500));\n }\n .segmented-progress-bar__palette-4 {\n background-color: var(--nile-colors-neutral-700, var(--ng-componentcolors-utility-gray-500));\n }\n\n .segmented-progress-bar__palette-5 {\n background-color: var(--nile-colors-purple-500, var(--ng-componentcolors-utility-purple-500));\n }\n\n .segmented-progress-bar__palette-6 {\n background-color: var(--nile-colors-yellow-500, var(--ng-componentcolors-utility-warning-500));\n }\n\n .segmented-progress-bar__palette-7 {\n background-color: var(--nile-colors-pink-500, var(--ng-componentcolors-utility-pink-500));\n }\n\n .segmented-progress-bar__palette-8 {\n background-color: var(--nile-colors-indigo-500, var(--ng-componentcolors-utility-indigo-500));\n }\n\n .segmented-progress-bar__palette-9 {\n background-color: var(--nile-colors-fuchsia-500, var(--ng-componentcolors-utility-fuchsia-500));\n }\n\n /* #endregion */\n\n /* #region Legend */\n\n .segmented-progress-bar__legend {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n column-gap: var(--nile-spacing-lg, var(--ng-spacing-4));\n row-gap: var(--nile-spacing-sm, var(--ng-spacing-2));\n width: 100%;\n min-width: 0;\n margin-top: var(--nile-spacing-xs, var(--ng-spacing-1));\n }\n\n .segmented-progress-bar__legend-item {\n appearance: none;\n -webkit-appearance: none;\n display: inline-flex;\n align-items: center;\n gap: var(--nile-spacing-xs, var(--ng-spacing-2));\n padding: var(--nile-spacing-none, var(--ng-spacing-0));\n margin: var(--nile-spacing-none, var(--ng-spacing-0));\n border: none;\n background: none;\n border-radius: var(--nile-radius-xs, var(--ng-radius-xs));\n cursor: pointer;\n /* Keep swatch, label and value on one line — never break mid-entry. */\n white-space: nowrap;\n flex: 0 0 auto;\n max-width: 100%;\n font-family: inherit;\n text-align: left;\n }\n\n .segmented-progress-bar__legend-item:focus-visible {\n outline: var(--nile-height-2px, var(--ng-height-2px)) solid\n var(--nile-colors-brand-600, var(--ng-colors-border-brand));\n outline-offset: var(--nile-height-2px, var(--ng-height-2px));\n }\n\n .segmented-progress-bar__legend-swatch {\n flex: none;\n width: var(--nile-height-10px, var(--ng-height-10px));\n height: var(--nile-height-10px, var(--ng-height-10px));\n border-radius: var(--nile-radius-xxs, var(--ng-radius-xxs));\n }\n\n .segmented-progress-bar__legend-label {\n font-size: var(--nile-type-scale-2, var(--ng-font-size-text-sm));\n line-height: var(--nile-type-scale-5, var(--ng-line-height-text-sm));\n font-weight: var(--nile-font-weight-regular, var(--ng-font-weight-regular));\n color: var(--nile-colors-text-secondary, var(--ng-colors-text-secondary-700));\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .segmented-progress-bar__legend-value {\n font-size: var(--nile-type-scale-2, var(--ng-font-size-text-sm));\n line-height: var(--nile-type-scale-5, var(--ng-line-height-text-sm));\n font-weight: var(--nile-font-weight-bold, var(--ng-font-weight-semibold));\n color: var(--nile-colors-dark-900, var(--ng-colors-text-primary-900));\n }\n\n /* #endregion */\n\n /* #region Sizes — legend scales with the bar */\n\n .segmented-progress-bar--small .segmented-progress-bar__legend-swatch {\n width: var(--nile-height-8px, var(--ng-height-8px));\n height: var(--nile-height-8px, var(--ng-height-8px));\n }\n\n .segmented-progress-bar--small .segmented-progress-bar__legend-label,\n .segmented-progress-bar--small .segmented-progress-bar__legend-value {\n font-size: var(--nile-type-scale-1, var(--ng-font-size-text-xs));\n line-height: var(--nile-type-scale-4, var(--ng-line-height-text-xs));\n }\n\n .segmented-progress-bar--large .segmented-progress-bar__legend-swatch {\n width: var(--nile-height-12px, var(--ng-height-12px));\n height: var(--nile-height-12px, var(--ng-height-12px));\n }\n\n .segmented-progress-bar--large .segmented-progress-bar__legend-label,\n .segmented-progress-bar--large .segmented-progress-bar__legend-value {\n font-size: var(--nile-type-scale-3, var(--ng-font-size-text-md));\n line-height: var(--nile-type-scale-6, var(--ng-line-height-text-md));\n }\n\n /* #endregion */\n\n @media (prefers-reduced-motion: reduce) {\n .segmented-progress-bar__segment {\n transition: none;\n }\n }\n`;\n\nexport default [styles];\n"]}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright Aquera Inc 2026
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the BSD-3-Clause license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
import NileElement from '../internal/nile-element';
|
|
8
|
+
import type { CSSResultGroup, PropertyValues, TemplateResult } from 'lit';
|
|
9
|
+
import '../nile-lite-tooltip/index';
|
|
10
|
+
/** A single slice of the distribution rendered by `nile-segmented-progress-bar`. */
|
|
11
|
+
export interface NileProgressSegment {
|
|
12
|
+
/** Legend label, also used in the default tooltip text. */
|
|
13
|
+
label: string;
|
|
14
|
+
/** Raw magnitude of this segment. */
|
|
15
|
+
value: number;
|
|
16
|
+
/** Any CSS color; falls back to the palette rotation when omitted. */
|
|
17
|
+
color?: string;
|
|
18
|
+
/** Overrides the default tooltip content for this segment. */
|
|
19
|
+
tooltip?: string;
|
|
20
|
+
}
|
|
21
|
+
/** Placement values forwarded to `nile-lite-tooltip`. */
|
|
22
|
+
export type NileSegmentTooltipPlacement = 'top' | 'top-start' | 'top-end' | 'right' | 'right-start' | 'right-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'left-start' | 'left-end' | 'auto' | 'auto-start' | 'auto-end';
|
|
23
|
+
/**
|
|
24
|
+
* Nile segmented progress bar component.
|
|
25
|
+
*
|
|
26
|
+
* @tag nile-segmented-progress-bar
|
|
27
|
+
*
|
|
28
|
+
* @summary A config-driven, responsive multi-segment progress / distribution bar
|
|
29
|
+
* with an optional wrapping legend — a single rounded track split into colored
|
|
30
|
+
* proportional segments (for example Success / Failure / Errors / Running / Other).
|
|
31
|
+
* @status experimental
|
|
32
|
+
*
|
|
33
|
+
* @event nile-segment-click - Emitted when a segment or its legend entry is activated by click,
|
|
34
|
+
* `Enter` or `Space`. The `detail` contains `{ segment, index, percentage }`.
|
|
35
|
+
*
|
|
36
|
+
* @csspart container - The component's base wrapper.
|
|
37
|
+
* @csspart label - The optional heading above the bar.
|
|
38
|
+
* @csspart bar - The bar/track element (also exposed as `track`).
|
|
39
|
+
* @csspart track - The bar/track element (also exposed as `bar`).
|
|
40
|
+
* @csspart segment - An individual colored segment inside the track.
|
|
41
|
+
* @csspart legend - The wrapping legend row.
|
|
42
|
+
* @csspart legend-item - A single legend entry (swatch + label + value).
|
|
43
|
+
* @csspart legend-swatch - The small rounded square in the segment color.
|
|
44
|
+
* @csspart legend-label - The legend entry's label text.
|
|
45
|
+
* @csspart legend-value - The legend entry's bold value.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* <nile-segmented-progress-bar
|
|
49
|
+
* label="Run outcomes"
|
|
50
|
+
* .segments=${[
|
|
51
|
+
* { label: 'Success', value: 45623 },
|
|
52
|
+
* { label: 'Failure', value: 50342 },
|
|
53
|
+
* { label: 'Errors', value: 682 },
|
|
54
|
+
* { label: 'Running', value: 166 },
|
|
55
|
+
* { label: 'Other', value: 1552 },
|
|
56
|
+
* ]}
|
|
57
|
+
* ></nile-segmented-progress-bar>
|
|
58
|
+
*/
|
|
59
|
+
export declare class NileSegmentedProgressBar extends NileElement {
|
|
60
|
+
static styles: CSSResultGroup;
|
|
61
|
+
/** The segments to distribute across the bar. This is the component's config. */
|
|
62
|
+
segments: NileProgressSegment[];
|
|
63
|
+
/** Optional heading rendered above the bar. Nothing renders when empty. */
|
|
64
|
+
label: string;
|
|
65
|
+
/** Renders the legend below the bar. */
|
|
66
|
+
showLegend: boolean;
|
|
67
|
+
/** Wraps every segment in a `nile-lite-tooltip`. */
|
|
68
|
+
showTooltip: boolean;
|
|
69
|
+
/** Renders the bold value alongside each legend label. */
|
|
70
|
+
showValues: boolean;
|
|
71
|
+
/** The thickness of the bar. */
|
|
72
|
+
size: 'small' | 'medium' | 'large';
|
|
73
|
+
/**
|
|
74
|
+
* Optional denominator. When omitted the denominator is the sum of the segment
|
|
75
|
+
* values, so the segments always fill 100%. When larger than the sum, the
|
|
76
|
+
* remainder renders as an unfilled track.
|
|
77
|
+
*/
|
|
78
|
+
total?: number;
|
|
79
|
+
/** Rounds the bar's outer ends. */
|
|
80
|
+
rounded: boolean;
|
|
81
|
+
/**
|
|
82
|
+
* Minimum rendered width, in pixels, of a non-zero segment. Guarantees sub-1%
|
|
83
|
+
* segments stay a discernible sliver. The largest segment absorbs whatever
|
|
84
|
+
* overflow this introduces, so the row still totals exactly 100%.
|
|
85
|
+
*/
|
|
86
|
+
minSegmentWidth: number;
|
|
87
|
+
/** Passed straight through to `nile-lite-tooltip`'s `placement`. */
|
|
88
|
+
tooltipPlacement: NileSegmentTooltipPlacement;
|
|
89
|
+
/** Coerces a configured value into a usable, non-negative, finite number. */
|
|
90
|
+
private sanitizeValue;
|
|
91
|
+
/** The sanitized magnitude of every configured segment, in config order. */
|
|
92
|
+
private get values();
|
|
93
|
+
/** The sum of every sanitized segment value. */
|
|
94
|
+
private get sum();
|
|
95
|
+
/** The denominator the percentages are computed against. */
|
|
96
|
+
private get denominator();
|
|
97
|
+
/** Each segment's share of the denominator, in config order. */
|
|
98
|
+
private get percentages();
|
|
99
|
+
/**
|
|
100
|
+
* The index of the widest rendered segment. That segment is the one allowed to
|
|
101
|
+
* shrink, so it absorbs the overflow introduced by `minSegmentWidth` on the
|
|
102
|
+
* tiny ones and the row still adds up to exactly 100% of the track.
|
|
103
|
+
*/
|
|
104
|
+
private get largestIndex();
|
|
105
|
+
/** Formats a percentage to one decimal, trimming a trailing `.0`. */
|
|
106
|
+
private formatPercentage;
|
|
107
|
+
/** The default tooltip / aria text for a segment. */
|
|
108
|
+
private describeSegment;
|
|
109
|
+
/** The tooltip content for a segment, honouring a per-segment override. */
|
|
110
|
+
private tooltipFor;
|
|
111
|
+
/**
|
|
112
|
+
* A single sentence describing the whole distribution, used as the track's
|
|
113
|
+
* accessible name so screen readers get the breakdown without tabbing it.
|
|
114
|
+
*/
|
|
115
|
+
private get accessibleSummary();
|
|
116
|
+
updated(changedProperties: PropertyValues): void;
|
|
117
|
+
/** Logs invalid config the way `nile-progress-bar` reports out-of-range values. */
|
|
118
|
+
private validateConfig;
|
|
119
|
+
private activate;
|
|
120
|
+
/**
|
|
121
|
+
* `Enter` and `Space` activate a segment or legend entry. The affordances are
|
|
122
|
+
* `role="button"` elements rather than native buttons, so activation is wired
|
|
123
|
+
* up explicitly and a key press never double-fires alongside a synthetic click.
|
|
124
|
+
*/
|
|
125
|
+
private handleKeyDown;
|
|
126
|
+
private renderSegment;
|
|
127
|
+
private renderLegendItem;
|
|
128
|
+
render(): TemplateResult;
|
|
129
|
+
}
|
|
130
|
+
export default NileSegmentedProgressBar;
|
|
131
|
+
declare global {
|
|
132
|
+
interface HTMLElementTagNameMap {
|
|
133
|
+
'nile-segmented-progress-bar': NileSegmentedProgressBar;
|
|
134
|
+
}
|
|
135
|
+
}
|