@aquera/nile-visualization 2.9.8 → 2.9.10
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 -0
- package/dist/src/nile-chart/nile-chart-skeleton.d.ts +2 -0
- package/dist/src/nile-chart/nile-chart-skeleton.js +184 -0
- package/dist/src/nile-chart/nile-chart.css.js +421 -36
- package/dist/src/nile-chart/nile-chart.d.ts +3 -0
- package/dist/src/nile-chart/nile-chart.js +33 -17
- package/dist/src/nile-filter-chart/nile-filter-chart.css.js +196 -124
- 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 +211 -61
- package/dist/src/nile-filter-chart/utils/types.d.ts +60 -27
- package/package.json +1 -1
|
@@ -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;
|
|
@@ -367,48 +363,41 @@ export const styles = css `
|
|
|
367
363
|
display: block;
|
|
368
364
|
width: 100%;
|
|
369
365
|
border-radius: var(--nile-radius-radius-2xl, var(--ng-radius-lg));
|
|
366
|
+
padding: 0;
|
|
367
|
+
background: transparent;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
.fc-prompt .fc-prompt__inner {
|
|
371
|
+
border: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-secondary));
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
.fc-prompt--ai-border {
|
|
370
375
|
padding: 2px;
|
|
371
376
|
background: var(
|
|
372
377
|
--fc-prompt-gradient,
|
|
373
378
|
linear-gradient(
|
|
374
379
|
90deg,
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
380
|
+
var(--ng-color-blue-600) 0%,
|
|
381
|
+
var(--ng-color-blue-500) 18%,
|
|
382
|
+
var(--ng-color-cyan-500) 36%,
|
|
383
|
+
var(--ng-color-indigo-500) 54%,
|
|
384
|
+
var(--ng-color-violet-500) 72%,
|
|
385
|
+
var(--ng-color-blue-600) 100%
|
|
381
386
|
)
|
|
382
387
|
);
|
|
383
388
|
background-size: 300% 100%;
|
|
384
389
|
animation: fc-prompt-gradient var(--fc-prompt-gradient-speed, 4.5s) linear infinite;
|
|
385
|
-
box-shadow: 0 6px 6px -6px
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
.fc-prompt:focus-within {
|
|
390
|
-
box-shadow: 0 8px 8px -6px rgba(59, 130, 246, 0.6);
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
.fc-prompt--no-ai-border {
|
|
394
|
-
padding: 0;
|
|
395
|
-
background: transparent;
|
|
396
|
-
animation: none;
|
|
397
|
-
box-shadow: none;
|
|
390
|
+
box-shadow: 0 6px 6px -6px color-mix(in srgb, var(--ng-color-blue-500) 45%, transparent);
|
|
398
391
|
}
|
|
399
392
|
|
|
400
|
-
.fc-prompt--
|
|
401
|
-
|
|
393
|
+
.fc-prompt--ai-border .fc-prompt__inner {
|
|
394
|
+
border: 0;
|
|
402
395
|
}
|
|
403
396
|
|
|
404
|
-
.fc-prompt--
|
|
405
|
-
|
|
397
|
+
.fc-prompt--ai-border:focus-within {
|
|
398
|
+
box-shadow: 0 8px 8px -6px color-mix(in srgb, var(--ng-color-blue-500) 60%, transparent);
|
|
406
399
|
}
|
|
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. */
|
|
400
|
+
|
|
412
401
|
.fc-prompt--error {
|
|
413
402
|
padding: 0;
|
|
414
403
|
background: transparent;
|
|
@@ -421,23 +410,23 @@ export const styles = css `
|
|
|
421
410
|
}
|
|
422
411
|
|
|
423
412
|
.fc-prompt--error .fc-prompt__inner {
|
|
424
|
-
background: var(--nile-colors-white-base, var(--ng-colors-bg-primary
|
|
425
|
-
border: 1.5px solid var(--
|
|
413
|
+
background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));
|
|
414
|
+
border: 1.5px solid var(--ng-colors-border-error);
|
|
426
415
|
transition: border-color 0.15s ease, box-shadow 0.15s ease;
|
|
427
416
|
}
|
|
428
417
|
|
|
429
418
|
.fc-prompt--error:focus-within .fc-prompt__inner {
|
|
430
|
-
border-color: var(--
|
|
419
|
+
border-color: var(--ng-colors-border-error-strong);
|
|
431
420
|
box-shadow: 0 0 0 4px rgba(240, 68, 56, 0.14);
|
|
432
421
|
}
|
|
433
422
|
|
|
434
423
|
.fc-prompt__error {
|
|
435
424
|
display: flex;
|
|
436
425
|
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(--
|
|
426
|
+
gap: var(--nile-spacing-6px, var(--ng-spacing-sm));
|
|
427
|
+
margin-top: var(--nile-spacing-6px, var(--ng-spacing-sm));
|
|
428
|
+
padding: 0 var(--nile-spacing-2px, var(--ng-spacing-xxs));
|
|
429
|
+
color: var(--ng-colors-text-error-primary-600);
|
|
441
430
|
font-size: var(--nile-type-scale-2, var(--ng-font-size-text-xs));
|
|
442
431
|
line-height: 1.4;
|
|
443
432
|
animation: fc-prompt-error-in 0.18s ease-out both;
|
|
@@ -450,7 +439,7 @@ export const styles = css `
|
|
|
450
439
|
width: 14px;
|
|
451
440
|
height: 14px;
|
|
452
441
|
border-radius: 50%;
|
|
453
|
-
background: var(--
|
|
442
|
+
background: var(--ng-colors-bg-error-solid);
|
|
454
443
|
color: var(--nile-colors-white-base, var(--ng-color-base-white));
|
|
455
444
|
font-weight: var(--nile-font-weight-bold, var(--ng-font-weight-700));
|
|
456
445
|
font-size: 10px;
|
|
@@ -476,9 +465,8 @@ export const styles = css `
|
|
|
476
465
|
position: relative;
|
|
477
466
|
display: flex;
|
|
478
467
|
align-items: center;
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
border-radius: var(--nile-radius-radius-xl, var(--ng-radius-md));
|
|
468
|
+
padding-right: var(--nile-spacing-md, var(--ng-spacing-md));
|
|
469
|
+
border-radius: var(--nile-radius-md, var(--ng-radius-md));
|
|
482
470
|
background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));
|
|
483
471
|
}
|
|
484
472
|
|
|
@@ -490,7 +478,7 @@ export const styles = css `
|
|
|
490
478
|
outline: none;
|
|
491
479
|
background: transparent;
|
|
492
480
|
border-radius: inherit;
|
|
493
|
-
padding: var(--nile-spacing-md, var(--ng-spacing-
|
|
481
|
+
padding: var(--nile-spacing-md, var(--ng-spacing-md)) var(--nile-spacing-xl, var(--ng-spacing-xl));
|
|
494
482
|
font-family: var(--nile-font-family-serif, var(--ng-font-family-body));
|
|
495
483
|
font-size: var(--nile-type-scale-4, var(--ng-font-size-text-md));
|
|
496
484
|
font-weight: 400;
|
|
@@ -506,17 +494,17 @@ export const styles = css `
|
|
|
506
494
|
.fc-prompt__mode {
|
|
507
495
|
flex-shrink: 0;
|
|
508
496
|
align-self: center;
|
|
509
|
-
margin-left: var(--nile-spacing-md, var(--ng-spacing-
|
|
510
|
-
border-radius: var(--nile-radius-radius-
|
|
497
|
+
margin-left: var(--nile-spacing-md, var(--ng-spacing-md));
|
|
498
|
+
border-radius: var(--nile-radius-radius-2xl, var(--ng-radius-lg));
|
|
511
499
|
overflow: hidden;
|
|
512
500
|
}
|
|
513
501
|
|
|
514
502
|
.fc-prompt__mode nile-button-toggle::part(base) {
|
|
515
503
|
height: 32px;
|
|
516
|
-
padding: 0 var(--nile-spacing-xl, var(--ng-spacing-
|
|
504
|
+
padding: 0 var(--nile-spacing-xl, var(--ng-spacing-xl));
|
|
517
505
|
font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));
|
|
518
506
|
letter-spacing: 0.03em;
|
|
519
|
-
gap: var(--nile-spacing-6px, var(--ng-spacing-
|
|
507
|
+
gap: var(--nile-spacing-6px, var(--ng-spacing-sm));
|
|
520
508
|
}
|
|
521
509
|
|
|
522
510
|
.fc-prompt__mode-icon {
|
|
@@ -525,12 +513,35 @@ export const styles = css `
|
|
|
525
513
|
line-height: 0;
|
|
526
514
|
}
|
|
527
515
|
|
|
516
|
+
/* Compact glyph fallback for the mode toggle — hidden at wide widths;
|
|
517
|
+
swapped in for the text label when the prompt row becomes narrow
|
|
518
|
+
(see container query below). */
|
|
519
|
+
.fc-prompt__mode-glyph {
|
|
520
|
+
display: none;
|
|
521
|
+
align-items: center;
|
|
522
|
+
line-height: 0;
|
|
523
|
+
}
|
|
524
|
+
|
|
528
525
|
/* ── Row layout: prompt input + mode toggle ─── */
|
|
529
526
|
.fc-prompt-row {
|
|
530
527
|
display: flex;
|
|
531
|
-
align-items:
|
|
532
|
-
gap: var(--nile-spacing-md, var(--ng-spacing-
|
|
528
|
+
align-items: flex-start;
|
|
529
|
+
gap: var(--nile-spacing-md, var(--ng-spacing-md));
|
|
533
530
|
width: 100%;
|
|
531
|
+
container-type: inline-size;
|
|
532
|
+
container-name: fc-prompt-row;
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
/* Narrow filter bar: collapse the Prompt / Expression toggle to a
|
|
536
|
+
single glyph per segment so it fits without wrapping. */
|
|
537
|
+
@container fc-prompt-row (max-width: 480px) {
|
|
538
|
+
.fc-prompt__mode-label { display: none; }
|
|
539
|
+
.fc-prompt__mode-icon { display: none; }
|
|
540
|
+
.fc-prompt__mode-glyph { display: inline-flex; }
|
|
541
|
+
.fc-prompt__mode nile-button-toggle::part(base) {
|
|
542
|
+
padding: 0 var(--nile-spacing-md, var(--ng-spacing-md));
|
|
543
|
+
gap: 0;
|
|
544
|
+
}
|
|
534
545
|
}
|
|
535
546
|
|
|
536
547
|
.fc-prompt-row .fc-prompt--row-input {
|
|
@@ -539,13 +550,13 @@ export const styles = css `
|
|
|
539
550
|
}
|
|
540
551
|
|
|
541
552
|
.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-
|
|
553
|
+
border-top-left-radius: var(--nile-radius-radius-2xl, var(--ng-radius-lg));
|
|
554
|
+
border-bottom-left-radius: var(--nile-radius-radius-2xl, var(--ng-radius-lg));
|
|
544
555
|
}
|
|
545
556
|
|
|
546
557
|
.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-
|
|
558
|
+
border-top-right-radius: var(--nile-radius-radius-2xl, var(--ng-radius-lg));
|
|
559
|
+
border-bottom-right-radius: var(--nile-radius-radius-2xl, var(--ng-radius-lg));
|
|
549
560
|
}
|
|
550
561
|
|
|
551
562
|
/* ── Field wrapper + syntax-highlight overlay ─── */
|
|
@@ -559,12 +570,22 @@ export const styles = css `
|
|
|
559
570
|
position: relative;
|
|
560
571
|
flex: 1;
|
|
561
572
|
min-width: 0;
|
|
562
|
-
display:
|
|
573
|
+
display: flex;
|
|
574
|
+
align-items: center;
|
|
575
|
+
gap: var(--nile-spacing-6px, var(--ng-spacing-sm));
|
|
576
|
+
width: 100%;
|
|
577
|
+
}
|
|
578
|
+
.fc-prompt__field-input {
|
|
579
|
+
position: relative;
|
|
580
|
+
flex: 1;
|
|
581
|
+
min-width: 0;
|
|
582
|
+
display: flex;
|
|
583
|
+
align-items: center;
|
|
563
584
|
}
|
|
564
585
|
.fc-prompt__field--highlight .fc-prompt__highlight,
|
|
565
586
|
.fc-prompt__field--highlight .fc-prompt__input {
|
|
566
587
|
box-sizing: border-box;
|
|
567
|
-
padding: var(--nile-spacing-md, var(--ng-spacing-
|
|
588
|
+
padding: var(--nile-spacing-md, var(--ng-spacing-md)) var(--nile-spacing-xl, var(--ng-spacing-xl));
|
|
568
589
|
font-family: var(--nile-font-family-serif, var(--ng-font-family-body));
|
|
569
590
|
font-size: var(--nile-type-scale-4, var(--ng-font-size-text-md));
|
|
570
591
|
font-weight: 400;
|
|
@@ -573,21 +594,24 @@ export const styles = css `
|
|
|
573
594
|
white-space: pre;
|
|
574
595
|
}
|
|
575
596
|
|
|
597
|
+
.fc-prompt__field--highlight .fc-prompt__highlight {
|
|
598
|
+
padding-left: 0;
|
|
599
|
+
padding-right: 0;
|
|
600
|
+
}
|
|
601
|
+
|
|
576
602
|
.fc-prompt__highlight {
|
|
577
603
|
position: absolute;
|
|
578
|
-
|
|
604
|
+
top: 0;
|
|
605
|
+
bottom: 0;
|
|
606
|
+
left: var(--nile-spacing-xl, var(--ng-spacing-xl));
|
|
607
|
+
right: var(--nile-spacing-xl, var(--ng-spacing-xl));
|
|
579
608
|
pointer-events: none;
|
|
580
609
|
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
610
|
overflow-x: auto;
|
|
587
611
|
overflow-y: hidden;
|
|
588
|
-
scrollbar-width: none;
|
|
612
|
+
scrollbar-width: none;
|
|
589
613
|
}
|
|
590
|
-
.fc-prompt__highlight::-webkit-scrollbar { display: none; }
|
|
614
|
+
.fc-prompt__highlight::-webkit-scrollbar { display: none; }
|
|
591
615
|
|
|
592
616
|
.fc-prompt__input {
|
|
593
617
|
position: relative;
|
|
@@ -595,7 +619,6 @@ export const styles = css `
|
|
|
595
619
|
width: 100%;
|
|
596
620
|
border: 0;
|
|
597
621
|
outline: none;
|
|
598
|
-
background: transparent;
|
|
599
622
|
color: var(--nile-colors-dark-900, var(--ng-colors-text-primary-900));
|
|
600
623
|
caret-color: var(--nile-colors-dark-900, var(--ng-colors-text-primary-900));
|
|
601
624
|
}
|
|
@@ -606,12 +629,35 @@ export const styles = css `
|
|
|
606
629
|
color: transparent;
|
|
607
630
|
}
|
|
608
631
|
|
|
632
|
+
.fc-prompt__field--highlight .fc-prompt__input::selection {
|
|
633
|
+
background: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));
|
|
634
|
+
color: transparent;
|
|
635
|
+
}
|
|
636
|
+
.fc-prompt__field--highlight .fc-prompt__input::-moz-selection {
|
|
637
|
+
background: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));
|
|
638
|
+
color: transparent;
|
|
639
|
+
}
|
|
640
|
+
|
|
609
641
|
.fc-prompt__dropdown {
|
|
610
642
|
flex: 1;
|
|
611
643
|
min-width: 0;
|
|
612
644
|
display: block;
|
|
613
645
|
}
|
|
614
646
|
|
|
647
|
+
.fc-prompt__inner > .fc-prompt__dropdown {
|
|
648
|
+
display: block;
|
|
649
|
+
flex: 1;
|
|
650
|
+
min-width: 0;
|
|
651
|
+
width: 100%;
|
|
652
|
+
}
|
|
653
|
+
.fc-prompt__inner > .fc-prompt__dropdown > [slot="trigger"] {
|
|
654
|
+
width: 100%;
|
|
655
|
+
}
|
|
656
|
+
.fc-prompt__inner > .fc-prompt__dropdown::part(trigger) {
|
|
657
|
+
display: block;
|
|
658
|
+
width: 100%;
|
|
659
|
+
}
|
|
660
|
+
|
|
615
661
|
.fc-prompt__dropdown::part(panel) {
|
|
616
662
|
display: flex;
|
|
617
663
|
flex-direction: column;
|
|
@@ -622,18 +668,18 @@ export const styles = css `
|
|
|
622
668
|
border-radius: var(--nile-radius-md, var(--ng-radius-md));
|
|
623
669
|
box-shadow: 0 12px 24px -8px rgba(16, 24, 40, 0.12),
|
|
624
670
|
0 4px 8px -2px rgba(16, 24, 40, 0.06);
|
|
625
|
-
padding: var(--nile-spacing-4px, var(--ng-spacing-
|
|
671
|
+
padding: var(--nile-spacing-4px, var(--ng-spacing-xs));
|
|
626
672
|
}
|
|
627
673
|
|
|
628
674
|
.fc-prompt__suggestion {
|
|
629
675
|
display: flex;
|
|
630
676
|
align-items: center;
|
|
631
677
|
justify-content: space-between;
|
|
632
|
-
gap: var(--nile-spacing-md, var(--ng-spacing-
|
|
678
|
+
gap: var(--nile-spacing-md, var(--ng-spacing-md));
|
|
633
679
|
width: 100%;
|
|
634
|
-
padding: var(--nile-spacing-
|
|
680
|
+
padding: var(--nile-spacing-md, var(--ng-spacing-md)) var(--nile-spacing-md, var(--ng-spacing-md));
|
|
635
681
|
border: 0;
|
|
636
|
-
border-radius: var(--nile-radius-
|
|
682
|
+
border-radius: var(--nile-radius-radius-lg, var(--ng-radius-sm));
|
|
637
683
|
background: transparent;
|
|
638
684
|
font-family: var(--nile-font-family-serif, var(--ng-font-family-body));
|
|
639
685
|
font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));
|
|
@@ -647,20 +693,19 @@ export const styles = css `
|
|
|
647
693
|
.fc-prompt__suggestion:hover {
|
|
648
694
|
background: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));
|
|
649
695
|
}
|
|
650
|
-
|
|
651
|
-
and a left accent bar so it's obvious which row Enter will select. */
|
|
696
|
+
|
|
652
697
|
.fc-prompt__suggestion--active,
|
|
653
698
|
.fc-prompt__suggestion--active:hover {
|
|
654
|
-
background: var(--
|
|
655
|
-
box-shadow: inset 3px 0 0 var(--nile-colors-
|
|
699
|
+
background: var(--ng-colors-bg-brand-secondary);
|
|
700
|
+
box-shadow: inset 3px 0 0 var(--nile-colors-primary-600, var(--ng-colors-bg-brand-solid));
|
|
656
701
|
}
|
|
657
702
|
|
|
658
703
|
.fc-prompt__suggestion-label {
|
|
659
704
|
flex: 1;
|
|
660
705
|
min-width: 0;
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
706
|
+
white-space: normal;
|
|
707
|
+
overflow-wrap: anywhere;
|
|
708
|
+
word-break: break-word;
|
|
664
709
|
}
|
|
665
710
|
|
|
666
711
|
.fc-prompt__suggestion-tag {
|
|
@@ -676,10 +721,38 @@ export const styles = css `
|
|
|
676
721
|
}
|
|
677
722
|
|
|
678
723
|
.fc-prompt__input::placeholder {
|
|
679
|
-
color: var(--nile-colors-
|
|
724
|
+
color: var(--nile-colors-dark-500, var(--ng-colors-text-secondary-700));
|
|
680
725
|
opacity: 0.85;
|
|
681
726
|
}
|
|
682
727
|
|
|
728
|
+
/* ── Clear icon — nile-button variant="ghost" sibling of the input. ─── */
|
|
729
|
+
.fc-prompt__clear-icon {
|
|
730
|
+
flex-shrink: 0;
|
|
731
|
+
margin-right: var(--nile-spacing-6px, var(--ng-spacing-sm));
|
|
732
|
+
line-height: 0;
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
/* nile-button is 40px tall by default; compress it to a 24x24 circle so it
|
|
736
|
+
fits inside the prompt's row. ::part(base) reaches into its shadow root. */
|
|
737
|
+
.fc-prompt__clear-icon::part(base) {
|
|
738
|
+
height: 24px;
|
|
739
|
+
width: 24px;
|
|
740
|
+
min-height: 0;
|
|
741
|
+
padding: 0;
|
|
742
|
+
border-radius: 50%;
|
|
743
|
+
gap: 0;
|
|
744
|
+
background: transparent;
|
|
745
|
+
}
|
|
746
|
+
|
|
747
|
+
.fc-prompt__clear-icon::part(base):hover,
|
|
748
|
+
.fc-prompt__clear-icon::part(base):focus-visible {
|
|
749
|
+
background: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
.fc-prompt__clear-filter {
|
|
753
|
+
flex-shrink: 0;
|
|
754
|
+
}
|
|
755
|
+
|
|
683
756
|
@keyframes fc-prompt-gradient {
|
|
684
757
|
0% { background-position: 0% 50%; }
|
|
685
758
|
100% { background-position: 300% 50%; }
|
|
@@ -687,7 +760,6 @@ export const styles = css `
|
|
|
687
760
|
|
|
688
761
|
@media (prefers-reduced-motion: reduce) {
|
|
689
762
|
.fc-prompt {
|
|
690
|
-
/* Respect any consumer-supplied gradient — just stop animating it. */
|
|
691
763
|
animation: none;
|
|
692
764
|
}
|
|
693
765
|
}
|