@aquera/nile-visualization 2.9.7 → 2.9.9
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/dist/src/nile-chart/nile-chart-config.d.ts +1 -2
- package/dist/src/nile-chart/nile-chart.css.js +45 -399
- package/dist/src/nile-chart/nile-chart.d.ts +2 -0
- package/dist/src/nile-chart/nile-chart.js +38 -3
- package/dist/src/nile-filter-chart/nile-filter-chart.css.js +184 -107
- package/dist/src/nile-filter-chart/nile-filter-chart.d.ts +20 -3
- package/dist/src/nile-filter-chart/nile-filter-chart.js +97 -25
- package/dist/src/nile-filter-chart/utils/prompt.js +210 -60
- package/dist/src/nile-filter-chart/utils/types.d.ts +59 -25
- package/dist/src/nile-kpi-chart/nile-kpi-chart.css.js +18 -314
- package/dist/src/nile-kpi-chart/nile-kpi-chart.d.ts +2 -4
- package/dist/src/nile-kpi-chart/nile-kpi-chart.js +26 -145
- package/package.json +1 -1
- package/dist/src/nile-chart/nile-chart-skeleton.d.ts +0 -2
- package/dist/src/nile-chart/nile-chart-skeleton.js +0 -188
|
@@ -5,7 +5,7 @@ export const styles = css `
|
|
|
5
5
|
.fc-root {
|
|
6
6
|
display: flex;
|
|
7
7
|
flex-direction: column;
|
|
8
|
-
gap: var(--nile-spacing-none, var(--ng-spacing-
|
|
8
|
+
gap: var(--nile-spacing-none, var(--ng-spacing-none));
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
/* ── Group ─── */
|
|
@@ -19,10 +19,10 @@ export const styles = css `
|
|
|
19
19
|
display: flex;
|
|
20
20
|
align-items: center;
|
|
21
21
|
justify-content: space-between;
|
|
22
|
-
padding: var(--nile-spacing-lg, var(--ng-spacing-
|
|
22
|
+
padding: var(--nile-spacing-lg, var(--ng-spacing-lg)) var(--nile-spacing-2xl, var(--ng-spacing-2xl));
|
|
23
23
|
background: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));
|
|
24
24
|
border-bottom: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-secondary));
|
|
25
|
-
gap: var(--nile-spacing-
|
|
25
|
+
gap: var(--nile-spacing-md, var(--ng-spacing-md));
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
.fc-group__header--collapsible {
|
|
@@ -37,11 +37,11 @@ export const styles = css `
|
|
|
37
37
|
.fc-group__header-text {
|
|
38
38
|
display: flex;
|
|
39
39
|
flex-direction: column;
|
|
40
|
-
gap: var(--nile-spacing-2px, var(--ng-spacing-
|
|
40
|
+
gap: var(--nile-spacing-2px, var(--ng-spacing-xxs));
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
.fc-group__label {
|
|
44
|
-
font-size: var(--nile-font-size-sm
|
|
44
|
+
font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));
|
|
45
45
|
font-weight: var(--nile-font-weight-bold, var(--ng-font-weight-700));
|
|
46
46
|
color: var(--nile-colors-dark-900, var(--ng-colors-text-primary-900));
|
|
47
47
|
letter-spacing: 0.02em;
|
|
@@ -55,7 +55,7 @@ export const styles = css `
|
|
|
55
55
|
|
|
56
56
|
.fc-group__chevron {
|
|
57
57
|
font-size: var(--nile-type-scale-5, var(--ng-font-size-text-lg));
|
|
58
|
-
font-weight: var(
|
|
58
|
+
font-weight: var(ng-font-weight-regular);
|
|
59
59
|
color: var(--nile-colors-neutral-700, var(--ng-colors-text-quaternary-500));
|
|
60
60
|
transition: transform 0.2s ease;
|
|
61
61
|
transform: rotate(0deg);
|
|
@@ -79,50 +79,53 @@ export const styles = css `
|
|
|
79
79
|
border-bottom: none;
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
-
/* ── Control card ─── */
|
|
83
82
|
.fc-control {
|
|
84
|
-
padding: var(--nile-spacing-xl, var(--ng-spacing-
|
|
83
|
+
padding: var(--nile-spacing-xl, var(--ng-spacing-xl)) var(--nile-spacing-2xl, var(--ng-spacing-2xl));
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
:host([appearance="minimal"]) .fc-control {
|
|
87
|
+
padding: var(--nile-spacing-6px, var(--ng-spacing-sm));
|
|
85
88
|
}
|
|
86
89
|
|
|
87
90
|
.fc-control__label {
|
|
88
|
-
font-size: var(--nile-font-size-sm
|
|
91
|
+
font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));
|
|
89
92
|
font-weight: var(--nile-font-weight-semi-bold, var(--ng-font-weight-600));
|
|
90
93
|
color: var(--nile-colors-neutral-700, var(--ng-colors-text-tertiary-600));
|
|
91
94
|
text-transform: uppercase;
|
|
92
95
|
letter-spacing: 0.05em;
|
|
93
96
|
line-height: 1.4;
|
|
94
|
-
padding-top: 2px;
|
|
95
|
-
margin-bottom: var(--nile-spacing-4px, var(--ng-spacing-
|
|
97
|
+
padding-top: var(--nile-spacing-2px, var(--ng-spacing-xxs));
|
|
98
|
+
margin-bottom: var(--nile-spacing-4px, var(--ng-spacing-xs));
|
|
96
99
|
overflow: visible;
|
|
97
100
|
}
|
|
98
101
|
|
|
99
102
|
.fc-control__desc {
|
|
100
103
|
font-size: var(--nile-type-scale-2, var(--ng-font-size-text-xs));
|
|
101
104
|
color: var(--nile-colors-neutral-700, var(--ng-colors-text-quaternary-500));
|
|
102
|
-
margin-bottom: var(--nile-spacing-lg, var(--ng-spacing-
|
|
105
|
+
margin-bottom: var(--nile-spacing-lg, var(--ng-spacing-lg));
|
|
103
106
|
line-height: 1.4;
|
|
104
107
|
}
|
|
105
108
|
|
|
106
109
|
.fc-control__body {
|
|
107
110
|
display: flex;
|
|
108
111
|
flex-direction: column;
|
|
109
|
-
gap: var(--nile-spacing-
|
|
112
|
+
gap: var(--nile-spacing-md, var(--ng-spacing-md));
|
|
110
113
|
}
|
|
111
114
|
|
|
112
115
|
/* ── Badge ─── */
|
|
113
116
|
.fc-badge-group {
|
|
114
117
|
display: flex;
|
|
115
118
|
flex-wrap: wrap;
|
|
116
|
-
gap: var(--nile-spacing-6px, var(--ng-spacing-
|
|
119
|
+
gap: var(--nile-spacing-6px, var(--ng-spacing-sm));
|
|
117
120
|
}
|
|
118
121
|
|
|
119
122
|
.fc-badge {
|
|
120
123
|
display: inline-flex;
|
|
121
124
|
align-items: center;
|
|
122
|
-
gap: var(--nile-spacing-6px, var(--ng-spacing-
|
|
123
|
-
padding: var(--nile-spacing-4px, var(--ng-spacing-
|
|
125
|
+
gap: var(--nile-spacing-6px, var(--ng-spacing-sm));
|
|
126
|
+
padding: var(--nile-spacing-4px, var(--ng-spacing-xs)) var(--nile-spacing-14px, var(--ng-spacing-lg-alt));
|
|
124
127
|
border-radius: var(--nile-radius-full, var(--ng-radius-full));
|
|
125
|
-
font-size: var(--nile-font-size-sm
|
|
128
|
+
font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));
|
|
126
129
|
font-weight: var(--nile-font-weight-medium, var(--ng-font-weight-500));
|
|
127
130
|
cursor: pointer;
|
|
128
131
|
border: 1.5px solid var(--nile-colors-neutral-500, var(--ng-colors-border-primary));
|
|
@@ -147,20 +150,20 @@ export const styles = css `
|
|
|
147
150
|
.fc-badge--selected .fc-dot { border-color: var(--nile-colors-white-500, var(--ng-color-graydarkmodealpha-500)); }
|
|
148
151
|
|
|
149
152
|
.fc-dot {
|
|
150
|
-
width: var(--nile-spacing-
|
|
151
|
-
height: var(--nile-spacing-
|
|
153
|
+
width: var(--nile-spacing-md, var(--ng-spacing-md));
|
|
154
|
+
height: var(--nile-spacing-md, var(--ng-spacing-md));
|
|
152
155
|
border-radius: var(--nile-radius-full, var(--ng-radius-full));
|
|
153
156
|
flex-shrink: 0;
|
|
154
157
|
border: 1.5px solid var(--nile-colors-transparent, var(--ng-color-base-transparent));
|
|
155
158
|
}
|
|
156
159
|
|
|
157
160
|
/* ── Slider ─── */
|
|
158
|
-
.fc-slider-wrap { display: flex; flex-direction: column; gap: var(--nile-spacing-10px, var(--ng-spacing-
|
|
161
|
+
.fc-slider-wrap { display: flex; flex-direction: column; gap: var(--nile-spacing-10px, var(--ng-spacing-md-alt)); }
|
|
159
162
|
|
|
160
163
|
.fc-slider-label {
|
|
161
164
|
display: flex;
|
|
162
165
|
justify-content: space-between;
|
|
163
|
-
font-size: var(--nile-font-size-sm
|
|
166
|
+
font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));
|
|
164
167
|
color: var(--nile-colors-neutral-700, var(--ng-colors-text-tertiary-600));
|
|
165
168
|
}
|
|
166
169
|
|
|
@@ -173,7 +176,7 @@ export const styles = css `
|
|
|
173
176
|
|
|
174
177
|
nile-slider::part(base) {
|
|
175
178
|
height: auto;
|
|
176
|
-
padding: var(--nile-spacing-4px, var(--ng-spacing-
|
|
179
|
+
padding: var(--nile-spacing-4px, var(--ng-spacing-xs)) var(--nile-spacing-none, var(--ng-spacing-none));
|
|
177
180
|
}
|
|
178
181
|
|
|
179
182
|
nile-slider::part(range-container) {
|
|
@@ -182,31 +185,25 @@ export const styles = css `
|
|
|
182
185
|
min-width: 0;
|
|
183
186
|
}
|
|
184
187
|
|
|
185
|
-
/* Make the track fill the container and be easier to see */
|
|
186
188
|
nile-slider::part(range) {
|
|
187
189
|
width: 100%;
|
|
188
|
-
height: var(--nile-
|
|
190
|
+
height: var(--nile-spacing-6px, var(--ng-spacing-sm));
|
|
189
191
|
}
|
|
190
192
|
|
|
191
|
-
/* The filled portion between the two handles */
|
|
192
193
|
nile-slider::part(range-completed) {
|
|
193
194
|
background-color: var(--nile-colors-primary-600, var(--ng-color-bluedark-600));
|
|
194
195
|
height: 100%;
|
|
195
196
|
}
|
|
196
197
|
|
|
197
|
-
/* ── Tree ─── */
|
|
198
|
-
/* nile-tree sets font-size:0 on :host for em-based indentation maths.
|
|
199
|
-
Without --nile-type-scale-4 defined the label inherits 0 and becomes invisible.
|
|
200
|
-
We also enable indent guide lines and fix the indent step size. */
|
|
201
198
|
nile-tree {
|
|
202
|
-
--nile-type-scale-4: var(--nile-font-size-sm
|
|
199
|
+
--nile-type-scale-4: var(--nile-type-scale-3, var(--ng-font-size-text-sm));
|
|
203
200
|
--indent-size: 0.875rem;
|
|
204
201
|
--indent-guide-width: 1px;
|
|
205
202
|
--indent-guide-style: solid;
|
|
206
203
|
--indent-guide-color: var(--nile-colors-neutral-400, var(--ng-colors-border-secondary));
|
|
207
204
|
}
|
|
208
205
|
|
|
209
|
-
|
|
206
|
+
|
|
210
207
|
.fc-segmented-scroll {
|
|
211
208
|
overflow-x: auto;
|
|
212
209
|
overflow-y: hidden;
|
|
@@ -222,19 +219,18 @@ export const styles = css `
|
|
|
222
219
|
min-width: max-content;
|
|
223
220
|
}
|
|
224
221
|
|
|
225
|
-
|
|
222
|
+
|
|
226
223
|
.fc-toggle-group {
|
|
227
224
|
display: flex;
|
|
228
225
|
flex-direction: column;
|
|
229
|
-
gap: var(--nile-spacing-10px, var(--ng-spacing-
|
|
226
|
+
gap: var(--nile-spacing-10px, var(--ng-spacing-md-alt));
|
|
230
227
|
}
|
|
231
228
|
|
|
232
229
|
|
|
233
|
-
/* ── Comparison ─── */
|
|
234
230
|
.fc-comparison {
|
|
235
231
|
display: flex;
|
|
236
232
|
align-items: center;
|
|
237
|
-
gap: var(--nile-spacing-10px, var(--ng-spacing-
|
|
233
|
+
gap: var(--nile-spacing-10px, var(--ng-spacing-md-alt));
|
|
238
234
|
}
|
|
239
235
|
|
|
240
236
|
.fc-comparison nile-select { flex: 1; }
|
|
@@ -246,7 +242,7 @@ export const styles = css `
|
|
|
246
242
|
color: var(--nile-colors-white-base, var(--ng-color-base-white));
|
|
247
243
|
background: var(--nile-colors-neutral-700, var(--ng-color-graylightmode-700));
|
|
248
244
|
border-radius: var(--nile-radius-sm, var(--ng-radius-xs));
|
|
249
|
-
padding: 3px var(--nile-spacing-6px, var(--ng-spacing-
|
|
245
|
+
padding: 3px var(--nile-spacing-6px, var(--ng-spacing-sm));
|
|
250
246
|
letter-spacing: 0.05em;
|
|
251
247
|
}
|
|
252
248
|
|
|
@@ -254,26 +250,26 @@ export const styles = css `
|
|
|
254
250
|
.fc-threshold {
|
|
255
251
|
display: flex;
|
|
256
252
|
flex-direction: column;
|
|
257
|
-
gap: var(--nile-spacing-lg, var(--ng-spacing-
|
|
253
|
+
gap: var(--nile-spacing-lg, var(--ng-spacing-lg));
|
|
258
254
|
}
|
|
259
255
|
|
|
260
256
|
.fc-threshold-metric-row {
|
|
261
257
|
display: flex;
|
|
262
258
|
align-items: flex-end;
|
|
263
|
-
gap: var(--nile-spacing-10px, var(--ng-spacing-
|
|
259
|
+
gap: var(--nile-spacing-10px, var(--ng-spacing-md-alt));
|
|
264
260
|
}
|
|
265
261
|
|
|
266
262
|
.fc-threshold-cond-row {
|
|
267
263
|
display: flex;
|
|
268
264
|
align-items: flex-end;
|
|
269
|
-
gap: var(--nile-spacing-lg, var(--ng-spacing-
|
|
270
|
-
padding-left: var(--nile-spacing-4px, var(--ng-spacing-
|
|
265
|
+
gap: var(--nile-spacing-lg, var(--ng-spacing-lg));
|
|
266
|
+
padding-left: var(--nile-spacing-4px, var(--ng-spacing-xs));
|
|
271
267
|
}
|
|
272
268
|
|
|
273
269
|
.fc-threshold-field {
|
|
274
270
|
display: flex;
|
|
275
271
|
flex-direction: column;
|
|
276
|
-
gap: var(--nile-spacing-6px, var(--ng-spacing-
|
|
272
|
+
gap: var(--nile-spacing-6px, var(--ng-spacing-sm));
|
|
277
273
|
}
|
|
278
274
|
|
|
279
275
|
.fc-threshold-field-label {
|
|
@@ -291,25 +287,25 @@ export const styles = css `
|
|
|
291
287
|
.fc-threshold-where {
|
|
292
288
|
flex-shrink: 0;
|
|
293
289
|
align-self: flex-end;
|
|
294
|
-
margin-bottom: var(--nile-spacing-6px, var(--ng-spacing-
|
|
290
|
+
margin-bottom: var(--nile-spacing-6px, var(--ng-spacing-sm));
|
|
295
291
|
font-size: 11px;
|
|
296
292
|
font-weight: var(--nile-font-weight-bold, var(--ng-font-weight-700));
|
|
297
293
|
letter-spacing: 0.06em;
|
|
298
294
|
color: var(--nile-colors-white-base, var(--ng-color-base-white));
|
|
299
295
|
background: var(--nile-colors-dark-500, var(--ng-color-graylightmode-600));
|
|
300
296
|
border-radius: var(--nile-radius-sm, var(--ng-radius-xs));
|
|
301
|
-
padding: var(--nile-spacing-4px, var(--ng-spacing-
|
|
297
|
+
padding: var(--nile-spacing-4px, var(--ng-spacing-xs)) var(--nile-spacing-10px, var(--ng-spacing-md-alt));
|
|
302
298
|
}
|
|
303
299
|
|
|
304
300
|
.fc-threshold-preview {
|
|
305
301
|
display: flex;
|
|
306
302
|
align-items: center;
|
|
307
|
-
gap: var(--nile-spacing-6px, var(--ng-spacing-
|
|
308
|
-
padding: var(--nile-spacing-
|
|
303
|
+
gap: var(--nile-spacing-6px, var(--ng-spacing-sm));
|
|
304
|
+
padding: var(--nile-spacing-md, var(--ng-spacing-md)) var(--nile-spacing-lg, var(--ng-spacing-lg));
|
|
309
305
|
border-radius: var(--nile-radius-radius-lg, var(--ng-radius-sm));
|
|
310
306
|
background: var(--nile-colors-primary-100, var(--ng-colors-bg-brand-primary));
|
|
311
307
|
border: 1px solid var(--nile-colors-primary-400, var(--ng-color-bluedark-200));
|
|
312
|
-
font-size: var(--nile-font-size-sm
|
|
308
|
+
font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));
|
|
313
309
|
color: var(--nile-colors-primary-700, var(--ng-colors-text-brand-secondary-700));
|
|
314
310
|
font-family: monospace;
|
|
315
311
|
}
|
|
@@ -326,18 +322,18 @@ export const styles = css `
|
|
|
326
322
|
.fc-preset-list {
|
|
327
323
|
display: flex;
|
|
328
324
|
flex-direction: column;
|
|
329
|
-
gap: var(--nile-spacing-6px, var(--ng-spacing-
|
|
325
|
+
gap: var(--nile-spacing-6px, var(--ng-spacing-sm));
|
|
330
326
|
}
|
|
331
327
|
|
|
332
328
|
.fc-preset-item {
|
|
333
329
|
display: flex;
|
|
334
330
|
align-items: center;
|
|
335
|
-
gap: var(--nile-spacing-10px, var(--ng-spacing-
|
|
336
|
-
padding: var(--nile-spacing-10px, var(--ng-spacing-
|
|
331
|
+
gap: var(--nile-spacing-10px, var(--ng-spacing-md-alt));
|
|
332
|
+
padding: var(--nile-spacing-10px, var(--ng-spacing-md-alt)) var(--nile-spacing-14px, var(--ng-spacing-lg-alt));
|
|
337
333
|
border-radius: var(--nile-radius-md, var(--ng-radius-md));
|
|
338
334
|
border: 1.5px solid var(--nile-colors-neutral-400, var(--ng-colors-border-secondary));
|
|
339
335
|
background: var(--nile-colors-white-base, var(--ng-color-base-white));
|
|
340
|
-
font-size: var(--nile-font-size-sm
|
|
336
|
+
font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));
|
|
341
337
|
font-weight: var(--nile-font-weight-medium, var(--ng-font-weight-500));
|
|
342
338
|
color: var(--nile-colors-dark-500, var(--ng-colors-text-secondary-700));
|
|
343
339
|
cursor: pointer;
|
|
@@ -372,22 +368,22 @@ export const styles = css `
|
|
|
372
368
|
--fc-prompt-gradient,
|
|
373
369
|
linear-gradient(
|
|
374
370
|
90deg,
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
371
|
+
var(--ng-color-blue-600) 0%,
|
|
372
|
+
var(--ng-color-blue-500) 18%,
|
|
373
|
+
var(--ng-color-cyan-500) 36%,
|
|
374
|
+
var(--ng-color-indigo-500) 54%,
|
|
375
|
+
var(--ng-color-violet-500) 72%,
|
|
376
|
+
var(--ng-color-blue-600) 100%
|
|
381
377
|
)
|
|
382
378
|
);
|
|
383
379
|
background-size: 300% 100%;
|
|
384
380
|
animation: fc-prompt-gradient var(--fc-prompt-gradient-speed, 4.5s) linear infinite;
|
|
385
|
-
box-shadow: 0 6px 6px -6px
|
|
381
|
+
box-shadow: 0 6px 6px -6px color-mix(in srgb, var(--ng-color-blue-500) 45%, transparent);
|
|
386
382
|
}
|
|
387
383
|
|
|
388
384
|
|
|
389
385
|
.fc-prompt:focus-within {
|
|
390
|
-
box-shadow: 0 8px 8px -6px
|
|
386
|
+
box-shadow: 0 8px 8px -6px color-mix(in srgb, var(--ng-color-blue-500) 60%, transparent);
|
|
391
387
|
}
|
|
392
388
|
|
|
393
389
|
.fc-prompt--no-ai-border {
|
|
@@ -404,11 +400,7 @@ export const styles = css `
|
|
|
404
400
|
.fc-prompt--no-ai-border .fc-prompt__inner {
|
|
405
401
|
border: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-secondary));
|
|
406
402
|
}
|
|
407
|
-
|
|
408
|
-
/* ── Error state ─── */
|
|
409
|
-
/* Drop the animated AI gradient and the 2px outer ring; the error reads
|
|
410
|
-
as a thin red border directly on the input with a soft focus halo,
|
|
411
|
-
and a quiet inline message underneath — no heavy box. */
|
|
403
|
+
|
|
412
404
|
.fc-prompt--error {
|
|
413
405
|
padding: 0;
|
|
414
406
|
background: transparent;
|
|
@@ -421,23 +413,23 @@ export const styles = css `
|
|
|
421
413
|
}
|
|
422
414
|
|
|
423
415
|
.fc-prompt--error .fc-prompt__inner {
|
|
424
|
-
background: var(--nile-colors-white-base, var(--ng-colors-bg-primary
|
|
425
|
-
border: 1.5px solid var(--
|
|
416
|
+
background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));
|
|
417
|
+
border: 1.5px solid var(--ng-colors-border-error);
|
|
426
418
|
transition: border-color 0.15s ease, box-shadow 0.15s ease;
|
|
427
419
|
}
|
|
428
420
|
|
|
429
421
|
.fc-prompt--error:focus-within .fc-prompt__inner {
|
|
430
|
-
border-color: var(--
|
|
422
|
+
border-color: var(--ng-colors-border-error-strong);
|
|
431
423
|
box-shadow: 0 0 0 4px rgba(240, 68, 56, 0.14);
|
|
432
424
|
}
|
|
433
425
|
|
|
434
426
|
.fc-prompt__error {
|
|
435
427
|
display: flex;
|
|
436
428
|
align-items: center;
|
|
437
|
-
gap: var(--nile-spacing-6px, var(--ng-spacing-
|
|
438
|
-
margin-top: var(--nile-spacing-6px, var(--ng-spacing-
|
|
439
|
-
padding: 0 var(--nile-spacing-2px, var(--ng-spacing-
|
|
440
|
-
color: var(--
|
|
429
|
+
gap: var(--nile-spacing-6px, var(--ng-spacing-sm));
|
|
430
|
+
margin-top: var(--nile-spacing-6px, var(--ng-spacing-sm));
|
|
431
|
+
padding: 0 var(--nile-spacing-2px, var(--ng-spacing-xxs));
|
|
432
|
+
color: var(--ng-colors-text-error-primary-600);
|
|
441
433
|
font-size: var(--nile-type-scale-2, var(--ng-font-size-text-xs));
|
|
442
434
|
line-height: 1.4;
|
|
443
435
|
animation: fc-prompt-error-in 0.18s ease-out both;
|
|
@@ -450,7 +442,7 @@ export const styles = css `
|
|
|
450
442
|
width: 14px;
|
|
451
443
|
height: 14px;
|
|
452
444
|
border-radius: 50%;
|
|
453
|
-
background: var(--
|
|
445
|
+
background: var(--ng-colors-bg-error-solid);
|
|
454
446
|
color: var(--nile-colors-white-base, var(--ng-color-base-white));
|
|
455
447
|
font-weight: var(--nile-font-weight-bold, var(--ng-font-weight-700));
|
|
456
448
|
font-size: 10px;
|
|
@@ -476,9 +468,8 @@ export const styles = css `
|
|
|
476
468
|
position: relative;
|
|
477
469
|
display: flex;
|
|
478
470
|
align-items: center;
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
border-radius: var(--nile-radius-radius-xl, var(--ng-radius-md));
|
|
471
|
+
padding-right: var(--nile-spacing-md, var(--ng-spacing-md));
|
|
472
|
+
border-radius: var(--nile-radius-md, var(--ng-radius-md));
|
|
482
473
|
background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));
|
|
483
474
|
}
|
|
484
475
|
|
|
@@ -490,7 +481,7 @@ export const styles = css `
|
|
|
490
481
|
outline: none;
|
|
491
482
|
background: transparent;
|
|
492
483
|
border-radius: inherit;
|
|
493
|
-
padding: var(--nile-spacing-md, var(--ng-spacing-
|
|
484
|
+
padding: var(--nile-spacing-md, var(--ng-spacing-md)) var(--nile-spacing-xl, var(--ng-spacing-xl));
|
|
494
485
|
font-family: var(--nile-font-family-serif, var(--ng-font-family-body));
|
|
495
486
|
font-size: var(--nile-type-scale-4, var(--ng-font-size-text-md));
|
|
496
487
|
font-weight: 400;
|
|
@@ -506,17 +497,17 @@ export const styles = css `
|
|
|
506
497
|
.fc-prompt__mode {
|
|
507
498
|
flex-shrink: 0;
|
|
508
499
|
align-self: center;
|
|
509
|
-
margin-left: var(--nile-spacing-md, var(--ng-spacing-
|
|
510
|
-
border-radius: var(--nile-radius-radius-
|
|
500
|
+
margin-left: var(--nile-spacing-md, var(--ng-spacing-md));
|
|
501
|
+
border-radius: var(--nile-radius-radius-2xl, var(--ng-radius-lg));
|
|
511
502
|
overflow: hidden;
|
|
512
503
|
}
|
|
513
504
|
|
|
514
505
|
.fc-prompt__mode nile-button-toggle::part(base) {
|
|
515
506
|
height: 32px;
|
|
516
|
-
padding: 0 var(--nile-spacing-xl, var(--ng-spacing-
|
|
507
|
+
padding: 0 var(--nile-spacing-xl, var(--ng-spacing-xl));
|
|
517
508
|
font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));
|
|
518
509
|
letter-spacing: 0.03em;
|
|
519
|
-
gap: var(--nile-spacing-6px, var(--ng-spacing-
|
|
510
|
+
gap: var(--nile-spacing-6px, var(--ng-spacing-sm));
|
|
520
511
|
}
|
|
521
512
|
|
|
522
513
|
.fc-prompt__mode-icon {
|
|
@@ -525,12 +516,35 @@ export const styles = css `
|
|
|
525
516
|
line-height: 0;
|
|
526
517
|
}
|
|
527
518
|
|
|
519
|
+
/* Compact glyph fallback for the mode toggle — hidden at wide widths;
|
|
520
|
+
swapped in for the text label when the prompt row becomes narrow
|
|
521
|
+
(see container query below). */
|
|
522
|
+
.fc-prompt__mode-glyph {
|
|
523
|
+
display: none;
|
|
524
|
+
align-items: center;
|
|
525
|
+
line-height: 0;
|
|
526
|
+
}
|
|
527
|
+
|
|
528
528
|
/* ── Row layout: prompt input + mode toggle ─── */
|
|
529
529
|
.fc-prompt-row {
|
|
530
530
|
display: flex;
|
|
531
|
-
align-items:
|
|
532
|
-
gap: var(--nile-spacing-md, var(--ng-spacing-
|
|
531
|
+
align-items: flex-start;
|
|
532
|
+
gap: var(--nile-spacing-md, var(--ng-spacing-md));
|
|
533
533
|
width: 100%;
|
|
534
|
+
container-type: inline-size;
|
|
535
|
+
container-name: fc-prompt-row;
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
/* Narrow filter bar: collapse the Prompt / Expression toggle to a
|
|
539
|
+
single glyph per segment so it fits without wrapping. */
|
|
540
|
+
@container fc-prompt-row (max-width: 480px) {
|
|
541
|
+
.fc-prompt__mode-label { display: none; }
|
|
542
|
+
.fc-prompt__mode-icon { display: none; }
|
|
543
|
+
.fc-prompt__mode-glyph { display: inline-flex; }
|
|
544
|
+
.fc-prompt__mode nile-button-toggle::part(base) {
|
|
545
|
+
padding: 0 var(--nile-spacing-md, var(--ng-spacing-md));
|
|
546
|
+
gap: 0;
|
|
547
|
+
}
|
|
534
548
|
}
|
|
535
549
|
|
|
536
550
|
.fc-prompt-row .fc-prompt--row-input {
|
|
@@ -539,13 +553,13 @@ export const styles = css `
|
|
|
539
553
|
}
|
|
540
554
|
|
|
541
555
|
.fc-prompt__mode nile-button-toggle:first-of-type::part(base) {
|
|
542
|
-
border-top-left-radius: var(--nile-radius-radius-
|
|
543
|
-
border-bottom-left-radius: var(--nile-radius-radius-
|
|
556
|
+
border-top-left-radius: var(--nile-radius-radius-2xl, var(--ng-radius-lg));
|
|
557
|
+
border-bottom-left-radius: var(--nile-radius-radius-2xl, var(--ng-radius-lg));
|
|
544
558
|
}
|
|
545
559
|
|
|
546
560
|
.fc-prompt__mode nile-button-toggle:last-of-type::part(base) {
|
|
547
|
-
border-top-right-radius: var(--nile-radius-radius-
|
|
548
|
-
border-bottom-right-radius: var(--nile-radius-radius-
|
|
561
|
+
border-top-right-radius: var(--nile-radius-radius-2xl, var(--ng-radius-lg));
|
|
562
|
+
border-bottom-right-radius: var(--nile-radius-radius-2xl, var(--ng-radius-lg));
|
|
549
563
|
}
|
|
550
564
|
|
|
551
565
|
/* ── Field wrapper + syntax-highlight overlay ─── */
|
|
@@ -559,12 +573,22 @@ export const styles = css `
|
|
|
559
573
|
position: relative;
|
|
560
574
|
flex: 1;
|
|
561
575
|
min-width: 0;
|
|
562
|
-
display:
|
|
576
|
+
display: flex;
|
|
577
|
+
align-items: center;
|
|
578
|
+
gap: var(--nile-spacing-6px, var(--ng-spacing-sm));
|
|
579
|
+
width: 100%;
|
|
580
|
+
}
|
|
581
|
+
.fc-prompt__field-input {
|
|
582
|
+
position: relative;
|
|
583
|
+
flex: 1;
|
|
584
|
+
min-width: 0;
|
|
585
|
+
display: flex;
|
|
586
|
+
align-items: center;
|
|
563
587
|
}
|
|
564
588
|
.fc-prompt__field--highlight .fc-prompt__highlight,
|
|
565
589
|
.fc-prompt__field--highlight .fc-prompt__input {
|
|
566
590
|
box-sizing: border-box;
|
|
567
|
-
padding: var(--nile-spacing-md, var(--ng-spacing-
|
|
591
|
+
padding: var(--nile-spacing-md, var(--ng-spacing-md)) var(--nile-spacing-xl, var(--ng-spacing-xl));
|
|
568
592
|
font-family: var(--nile-font-family-serif, var(--ng-font-family-body));
|
|
569
593
|
font-size: var(--nile-type-scale-4, var(--ng-font-size-text-md));
|
|
570
594
|
font-weight: 400;
|
|
@@ -573,21 +597,24 @@ export const styles = css `
|
|
|
573
597
|
white-space: pre;
|
|
574
598
|
}
|
|
575
599
|
|
|
600
|
+
.fc-prompt__field--highlight .fc-prompt__highlight {
|
|
601
|
+
padding-left: 0;
|
|
602
|
+
padding-right: 0;
|
|
603
|
+
}
|
|
604
|
+
|
|
576
605
|
.fc-prompt__highlight {
|
|
577
606
|
position: absolute;
|
|
578
|
-
|
|
607
|
+
top: 0;
|
|
608
|
+
bottom: 0;
|
|
609
|
+
left: var(--nile-spacing-xl, var(--ng-spacing-xl));
|
|
610
|
+
right: var(--nile-spacing-xl, var(--ng-spacing-xl));
|
|
579
611
|
pointer-events: none;
|
|
580
612
|
color: var(--nile-colors-dark-900, var(--ng-colors-text-primary-900));
|
|
581
|
-
/* overflow-x: auto (not hidden) so JS can sync scrollLeft to the input's
|
|
582
|
-
native horizontal scroll. Without it, white-space: pre content spills
|
|
583
|
-
past the field's right edge and visually overlaps the mode toggle.
|
|
584
|
-
Scrollbar is suppressed since the overlay is non-interactive (only the
|
|
585
|
-
input below it scrolls via keyboard). */
|
|
586
613
|
overflow-x: auto;
|
|
587
614
|
overflow-y: hidden;
|
|
588
|
-
scrollbar-width: none;
|
|
615
|
+
scrollbar-width: none;
|
|
589
616
|
}
|
|
590
|
-
.fc-prompt__highlight::-webkit-scrollbar { display: none; }
|
|
617
|
+
.fc-prompt__highlight::-webkit-scrollbar { display: none; }
|
|
591
618
|
|
|
592
619
|
.fc-prompt__input {
|
|
593
620
|
position: relative;
|
|
@@ -606,12 +633,35 @@ export const styles = css `
|
|
|
606
633
|
color: transparent;
|
|
607
634
|
}
|
|
608
635
|
|
|
636
|
+
.fc-prompt__field--highlight .fc-prompt__input::selection {
|
|
637
|
+
background: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));
|
|
638
|
+
color: transparent;
|
|
639
|
+
}
|
|
640
|
+
.fc-prompt__field--highlight .fc-prompt__input::-moz-selection {
|
|
641
|
+
background: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));
|
|
642
|
+
color: transparent;
|
|
643
|
+
}
|
|
644
|
+
|
|
609
645
|
.fc-prompt__dropdown {
|
|
610
646
|
flex: 1;
|
|
611
647
|
min-width: 0;
|
|
612
648
|
display: block;
|
|
613
649
|
}
|
|
614
650
|
|
|
651
|
+
.fc-prompt__inner > .fc-prompt__dropdown {
|
|
652
|
+
display: block;
|
|
653
|
+
flex: 1;
|
|
654
|
+
min-width: 0;
|
|
655
|
+
width: 100%;
|
|
656
|
+
}
|
|
657
|
+
.fc-prompt__inner > .fc-prompt__dropdown > [slot="trigger"] {
|
|
658
|
+
width: 100%;
|
|
659
|
+
}
|
|
660
|
+
.fc-prompt__inner > .fc-prompt__dropdown::part(trigger) {
|
|
661
|
+
display: block;
|
|
662
|
+
width: 100%;
|
|
663
|
+
}
|
|
664
|
+
|
|
615
665
|
.fc-prompt__dropdown::part(panel) {
|
|
616
666
|
display: flex;
|
|
617
667
|
flex-direction: column;
|
|
@@ -622,18 +672,18 @@ export const styles = css `
|
|
|
622
672
|
border-radius: var(--nile-radius-md, var(--ng-radius-md));
|
|
623
673
|
box-shadow: 0 12px 24px -8px rgba(16, 24, 40, 0.12),
|
|
624
674
|
0 4px 8px -2px rgba(16, 24, 40, 0.06);
|
|
625
|
-
padding: var(--nile-spacing-4px, var(--ng-spacing-
|
|
675
|
+
padding: var(--nile-spacing-4px, var(--ng-spacing-xs));
|
|
626
676
|
}
|
|
627
677
|
|
|
628
678
|
.fc-prompt__suggestion {
|
|
629
679
|
display: flex;
|
|
630
680
|
align-items: center;
|
|
631
681
|
justify-content: space-between;
|
|
632
|
-
gap: var(--nile-spacing-md, var(--ng-spacing-
|
|
682
|
+
gap: var(--nile-spacing-md, var(--ng-spacing-md));
|
|
633
683
|
width: 100%;
|
|
634
|
-
padding: var(--nile-spacing-
|
|
684
|
+
padding: var(--nile-spacing-md, var(--ng-spacing-md)) var(--nile-spacing-md, var(--ng-spacing-md));
|
|
635
685
|
border: 0;
|
|
636
|
-
border-radius: var(--nile-radius-
|
|
686
|
+
border-radius: var(--nile-radius-radius-lg, var(--ng-radius-sm));
|
|
637
687
|
background: transparent;
|
|
638
688
|
font-family: var(--nile-font-family-serif, var(--ng-font-family-body));
|
|
639
689
|
font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));
|
|
@@ -647,20 +697,19 @@ export const styles = css `
|
|
|
647
697
|
.fc-prompt__suggestion:hover {
|
|
648
698
|
background: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));
|
|
649
699
|
}
|
|
650
|
-
|
|
651
|
-
and a left accent bar so it's obvious which row Enter will select. */
|
|
700
|
+
|
|
652
701
|
.fc-prompt__suggestion--active,
|
|
653
702
|
.fc-prompt__suggestion--active:hover {
|
|
654
|
-
background: var(--
|
|
655
|
-
box-shadow: inset 3px 0 0 var(--nile-colors-
|
|
703
|
+
background: var(--ng-colors-bg-brand-secondary);
|
|
704
|
+
box-shadow: inset 3px 0 0 var(--nile-colors-primary-600, var(--ng-colors-bg-brand-solid));
|
|
656
705
|
}
|
|
657
706
|
|
|
658
707
|
.fc-prompt__suggestion-label {
|
|
659
708
|
flex: 1;
|
|
660
709
|
min-width: 0;
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
710
|
+
white-space: normal;
|
|
711
|
+
overflow-wrap: anywhere;
|
|
712
|
+
word-break: break-word;
|
|
664
713
|
}
|
|
665
714
|
|
|
666
715
|
.fc-prompt__suggestion-tag {
|
|
@@ -676,10 +725,38 @@ export const styles = css `
|
|
|
676
725
|
}
|
|
677
726
|
|
|
678
727
|
.fc-prompt__input::placeholder {
|
|
679
|
-
color: var(--nile-colors-
|
|
728
|
+
color: var(--nile-colors-dark-500, var(--ng-colors-text-secondary-700));
|
|
680
729
|
opacity: 0.85;
|
|
681
730
|
}
|
|
682
731
|
|
|
732
|
+
/* ── Clear icon — nile-button variant="ghost" sibling of the input. ─── */
|
|
733
|
+
.fc-prompt__clear-icon {
|
|
734
|
+
flex-shrink: 0;
|
|
735
|
+
margin-right: var(--nile-spacing-6px, var(--ng-spacing-sm));
|
|
736
|
+
line-height: 0;
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
/* nile-button is 40px tall by default; compress it to a 24x24 circle so it
|
|
740
|
+
fits inside the prompt's row. ::part(base) reaches into its shadow root. */
|
|
741
|
+
.fc-prompt__clear-icon::part(base) {
|
|
742
|
+
height: 24px;
|
|
743
|
+
width: 24px;
|
|
744
|
+
min-height: 0;
|
|
745
|
+
padding: 0;
|
|
746
|
+
border-radius: 50%;
|
|
747
|
+
gap: 0;
|
|
748
|
+
background: transparent;
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
.fc-prompt__clear-icon::part(base):hover,
|
|
752
|
+
.fc-prompt__clear-icon::part(base):focus-visible {
|
|
753
|
+
background: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));
|
|
754
|
+
}
|
|
755
|
+
|
|
756
|
+
.fc-prompt__clear-filter {
|
|
757
|
+
flex-shrink: 0;
|
|
758
|
+
}
|
|
759
|
+
|
|
683
760
|
@keyframes fc-prompt-gradient {
|
|
684
761
|
0% { background-position: 0% 50%; }
|
|
685
762
|
100% { background-position: 300% 50%; }
|