@praxisui/dynamic-fields 1.0.0-beta.42 → 1.0.0-beta.43

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.
@@ -5124,6 +5124,14 @@ class MaterialDateRangeComponent extends SimpleBaseInputComponent {
5124
5124
  return items;
5125
5125
  }, ...(ngDevMode ? [{ debugName: "shortcutItems" }] : []));
5126
5126
  activePresetId = () => this.control().value?.preset ?? null;
5127
+ writeValue(value) {
5128
+ const normalized = this.normalizeDateRangeValue(value);
5129
+ super.writeValue(normalized);
5130
+ this.rangeGroup.patchValue({
5131
+ start: normalized?.startDate ?? null,
5132
+ end: normalized?.endDate ?? null,
5133
+ }, { emitEvent: false });
5134
+ }
5127
5135
  ngOnInit() {
5128
5136
  // Contextual validator: start <= end
5129
5137
  this.rangeGroup.addValidators((group) => {
@@ -5154,7 +5162,11 @@ class MaterialDateRangeComponent extends SimpleBaseInputComponent {
5154
5162
  this.control()
5155
5163
  .valueChanges.pipe(takeUntilDestroyed(this.destroyRef))
5156
5164
  .subscribe((val) => {
5157
- this.rangeGroup.patchValue({ start: val?.startDate ?? null, end: val?.endDate ?? null }, { emitEvent: false });
5165
+ const normalized = this.normalizeDateRangeValue(val);
5166
+ this.rangeGroup.patchValue({
5167
+ start: normalized?.startDate ?? null,
5168
+ end: normalized?.endDate ?? null,
5169
+ }, { emitEvent: false });
5158
5170
  });
5159
5171
  // Sync overlay with picker lifecycle
5160
5172
  const p = this.picker;
@@ -5243,6 +5255,84 @@ class MaterialDateRangeComponent extends SimpleBaseInputComponent {
5243
5255
  this.picker?.close?.();
5244
5256
  }
5245
5257
  }
5258
+ normalizeDateRangeValue(value) {
5259
+ if (value === null || value === undefined) {
5260
+ return null;
5261
+ }
5262
+ if (typeof value !== 'object' || Array.isArray(value)) {
5263
+ return null;
5264
+ }
5265
+ const record = value;
5266
+ const startDate = this.coerceDateLike(record['startDate'] ??
5267
+ record['start'] ??
5268
+ record['from'] ??
5269
+ record['initialDate'] ??
5270
+ record['begin']);
5271
+ const endDate = this.coerceDateLike(record['endDate'] ??
5272
+ record['end'] ??
5273
+ record['to'] ??
5274
+ record['finalDate'] ??
5275
+ record['finish']);
5276
+ const hasRange = startDate !== null || endDate !== null;
5277
+ const preset = typeof record['preset'] === 'string' ? record['preset'] : undefined;
5278
+ const timezone = typeof record['timezone'] === 'string' ? record['timezone'] : undefined;
5279
+ const label = typeof record['label'] === 'string' ? record['label'] : undefined;
5280
+ const isComparison = typeof record['isComparison'] === 'boolean'
5281
+ ? record['isComparison']
5282
+ : undefined;
5283
+ if (!hasRange && !preset && !timezone && !label && isComparison === undefined) {
5284
+ return null;
5285
+ }
5286
+ return {
5287
+ startDate,
5288
+ endDate,
5289
+ ...(preset ? { preset } : {}),
5290
+ ...(timezone ? { timezone } : {}),
5291
+ ...(label ? { label } : {}),
5292
+ ...(isComparison !== undefined ? { isComparison } : {}),
5293
+ };
5294
+ }
5295
+ coerceDateLike(value) {
5296
+ if (value === null || value === undefined) {
5297
+ return null;
5298
+ }
5299
+ if (value instanceof Date) {
5300
+ return Number.isNaN(value.getTime()) ? null : value;
5301
+ }
5302
+ if (typeof value === 'number') {
5303
+ const numericDate = new Date(value);
5304
+ return Number.isNaN(numericDate.getTime()) ? null : numericDate;
5305
+ }
5306
+ if (typeof value === 'string') {
5307
+ const raw = value.trim();
5308
+ if (!raw) {
5309
+ return null;
5310
+ }
5311
+ const localIsoDate = raw.match(/^(\d{4})-(\d{2})-(\d{2})(?:[Tt].*)?$/);
5312
+ if (localIsoDate) {
5313
+ const year = Number(localIsoDate[1]);
5314
+ const month = Number(localIsoDate[2]);
5315
+ const day = Number(localIsoDate[3]);
5316
+ const localDate = new Date(year, month - 1, day, 12, 0, 0, 0);
5317
+ return Number.isNaN(localDate.getTime()) ? null : localDate;
5318
+ }
5319
+ const parsedDate = new Date(raw);
5320
+ return Number.isNaN(parsedDate.getTime()) ? null : parsedDate;
5321
+ }
5322
+ if (typeof value === 'object') {
5323
+ const nested = value;
5324
+ const candidate = nested['date'] ??
5325
+ nested['value'] ??
5326
+ nested['startDate'] ??
5327
+ nested['endDate'] ??
5328
+ nested['start'] ??
5329
+ nested['end'];
5330
+ if (candidate !== undefined && candidate !== value) {
5331
+ return this.coerceDateLike(candidate);
5332
+ }
5333
+ }
5334
+ return null;
5335
+ }
5246
5336
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: MaterialDateRangeComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
5247
5337
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.17", type: MaterialDateRangeComponent, isStandalone: true, selector: "pdx-material-date-range", inputs: { readonlyMode: "readonlyMode", disabledMode: "disabledMode", visible: "visible", presentationMode: "presentationMode", metadataInput: ["metadata", "metadataInput"] }, outputs: { validationChange: "validationChange" }, host: { properties: { "class": "componentCssClasses()", "class.praxis-disabled": "disabledMode", "style.display": "visible ? \"block\" : \"none\"", "style.width": "\"100%\"", "attr.data-field-type": "\"dateRange\"", "attr.data-field-name": "metadata()?.name", "attr.data-component-id": "componentId()" } }, providers: [
5248
5338
  {
@@ -21142,14 +21232,17 @@ class FilterInlineDateRangeComponent extends MaterialDateRangeComponent {
21142
21232
  };
21143
21233
  }
21144
21234
  cloneDateRangeValue(value) {
21145
- if (!value) {
21235
+ const normalized = this.normalizeDateRangeValue(value);
21236
+ if (!normalized) {
21146
21237
  return null;
21147
21238
  }
21148
21239
  return {
21149
- startDate: this.coerceDate(value.startDate),
21150
- endDate: this.coerceDate(value.endDate),
21151
- preset: value.preset,
21152
- label: value.label,
21240
+ startDate: this.coerceDate(normalized.startDate),
21241
+ endDate: this.coerceDate(normalized.endDate),
21242
+ preset: normalized.preset,
21243
+ label: normalized.label,
21244
+ timezone: normalized.timezone,
21245
+ isComparison: normalized.isComparison,
21153
21246
  };
21154
21247
  }
21155
21248
  restoreBaselineSelection() {
@@ -21163,7 +21256,7 @@ class FilterInlineDateRangeComponent extends MaterialDateRangeComponent {
21163
21256
  if (this.inlineQuickPresetsApplyMode() === 'confirm' && this.overlayOpen) {
21164
21257
  return this.currentRangeGroupValue();
21165
21258
  }
21166
- return this.control().value;
21259
+ return this.normalizeDateRangeValue(this.control().value);
21167
21260
  }
21168
21261
  rangeDisplayText() {
21169
21262
  const value = this.displayRangeValue();
@@ -26051,6 +26144,110 @@ const PDX_FILTER_INLINE_TREE_SELECT_COMPONENT_METADATA = {
26051
26144
  lib: '@praxisui/dynamic-fields',
26052
26145
  };
26053
26146
 
26147
+ const HEX_PATTERN = /^#([\da-f]{3,4}|[\da-f]{6}|[\da-f]{8})$/i;
26148
+ function clamp01(value) {
26149
+ return Math.max(0, Math.min(1, value));
26150
+ }
26151
+ function clamp255(value) {
26152
+ return Math.max(0, Math.min(255, Math.round(value)));
26153
+ }
26154
+ function parseHexColor(raw) {
26155
+ const normalized = raw.trim();
26156
+ if (!HEX_PATTERN.test(normalized)) {
26157
+ return null;
26158
+ }
26159
+ const hex = normalized.slice(1);
26160
+ if (hex.length === 3 || hex.length === 4) {
26161
+ return {
26162
+ r: Number.parseInt(hex[0] + hex[0], 16),
26163
+ g: Number.parseInt(hex[1] + hex[1], 16),
26164
+ b: Number.parseInt(hex[2] + hex[2], 16),
26165
+ };
26166
+ }
26167
+ return {
26168
+ r: Number.parseInt(hex.slice(0, 2), 16),
26169
+ g: Number.parseInt(hex.slice(2, 4), 16),
26170
+ b: Number.parseInt(hex.slice(4, 6), 16),
26171
+ };
26172
+ }
26173
+ function parseRgbChannel(token) {
26174
+ const part = token.trim();
26175
+ if (!part)
26176
+ return null;
26177
+ if (part.endsWith('%')) {
26178
+ const pct = Number.parseFloat(part.slice(0, -1));
26179
+ if (!Number.isFinite(pct))
26180
+ return null;
26181
+ return clamp255((pct / 100) * 255);
26182
+ }
26183
+ const value = Number.parseFloat(part);
26184
+ if (!Number.isFinite(value))
26185
+ return null;
26186
+ return clamp255(value);
26187
+ }
26188
+ function parseRgbColor(raw) {
26189
+ const normalized = raw.trim().toLowerCase();
26190
+ if (!normalized.startsWith('rgb')) {
26191
+ return null;
26192
+ }
26193
+ const parts = normalized.match(/[\d.]+%?/g) ?? [];
26194
+ if (parts.length < 3) {
26195
+ return null;
26196
+ }
26197
+ const [rRaw, gRaw, bRaw] = parts;
26198
+ if (rRaw === undefined || gRaw === undefined || bRaw === undefined) {
26199
+ return null;
26200
+ }
26201
+ const r = parseRgbChannel(rRaw);
26202
+ const g = parseRgbChannel(gRaw);
26203
+ const b = parseRgbChannel(bRaw);
26204
+ if (r === null || g === null || b === null) {
26205
+ return null;
26206
+ }
26207
+ return { r, g, b };
26208
+ }
26209
+ function parseCssColor(raw) {
26210
+ return parseHexColor(raw) ?? parseRgbColor(raw);
26211
+ }
26212
+ function toRgbString(color) {
26213
+ return `rgb(${color.r}, ${color.g}, ${color.b})`;
26214
+ }
26215
+ function mixRgb(start, end, ratio) {
26216
+ const amount = clamp01(ratio);
26217
+ return {
26218
+ r: clamp255(start.r + (end.r - start.r) * amount),
26219
+ g: clamp255(start.g + (end.g - start.g) * amount),
26220
+ b: clamp255(start.b + (end.b - start.b) * amount),
26221
+ };
26222
+ }
26223
+ function mixCssColors(start, end, ratio) {
26224
+ const startColor = parseCssColor(start);
26225
+ const endColor = parseCssColor(end);
26226
+ if (!startColor || !endColor) {
26227
+ return clamp01(ratio) >= 0.5 ? end : start;
26228
+ }
26229
+ return toRgbString(mixRgb(startColor, endColor, ratio));
26230
+ }
26231
+ function interpolateThreeStopGradientColor(low, mid, high, ratio) {
26232
+ const normalized = clamp01(ratio);
26233
+ if (normalized <= 0)
26234
+ return low;
26235
+ if (normalized >= 1)
26236
+ return high;
26237
+ if (normalized <= 0.5) {
26238
+ return mixCssColors(low, mid, normalized / 0.5);
26239
+ }
26240
+ return mixCssColors(mid, high, (normalized - 0.5) / 0.5);
26241
+ }
26242
+ function applyAlphaToColor(color, alpha) {
26243
+ const parsed = parseCssColor(color);
26244
+ if (!parsed) {
26245
+ return color;
26246
+ }
26247
+ const safeAlpha = clamp01(alpha);
26248
+ return `rgba(${parsed.r}, ${parsed.g}, ${parsed.b}, ${safeAlpha.toFixed(3)})`;
26249
+ }
26250
+
26054
26251
  class FilterInlineRatingComponent extends FilterInlineRangeSliderComponent {
26055
26252
  overlayPositions = [
26056
26253
  { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 8 },
@@ -26166,6 +26363,11 @@ class FilterInlineRatingComponent extends FilterInlineRangeSliderComponent {
26166
26363
  return 'mid';
26167
26364
  return 'high';
26168
26365
  }
26366
+ slotColor(slot) {
26367
+ const slots = this.ratingScaleSlots();
26368
+ const index = Math.max(0, slots.indexOf(slot));
26369
+ return this.ratingGradientColorByIndex(index, slots.length);
26370
+ }
26169
26371
  isSlotInSelectedRange(slot) {
26170
26372
  const range = this.readSelectedRange();
26171
26373
  if (!range) {
@@ -26201,10 +26403,36 @@ class FilterInlineRatingComponent extends FilterInlineRangeSliderComponent {
26201
26403
  const palette = this.parseColorPalette(md.ratingToneColors ?? md.ratingColors ?? md.starColors);
26202
26404
  return this.resolveColorToken(md.ratingToneHighColor, md.ratingHighColor, palette?.high, palette?.max);
26203
26405
  }
26406
+ ratingGradientLowColor() {
26407
+ const md = this.metadata() || {};
26408
+ return this.resolveColorToken(md.ratingGradientLowColor, this.toneLowColor()) || '#ef4444';
26409
+ }
26410
+ ratingGradientMidColor() {
26411
+ const md = this.metadata() || {};
26412
+ return this.resolveColorToken(md.ratingGradientMidColor, this.toneMidColor()) || '#f59e0b';
26413
+ }
26414
+ ratingGradientHighColor() {
26415
+ const md = this.metadata() || {};
26416
+ return this.resolveColorToken(md.ratingGradientHighColor, this.toneHighColor()) || '#22a45d';
26417
+ }
26418
+ ratingGradient() {
26419
+ const low = this.ratingGradientLowColor();
26420
+ const mid = this.ratingGradientMidColor();
26421
+ const high = this.ratingGradientHighColor();
26422
+ return `linear-gradient(90deg, ${low} 0%, ${mid} 50%, ${high} 100%)`;
26423
+ }
26204
26424
  badgeStarColor() {
26205
26425
  const md = this.metadata() || {};
26206
26426
  const palette = this.parseColorPalette(md.ratingToneColors ?? md.ratingColors ?? md.starColors);
26207
- return this.resolveColorToken(md.ratingBadgeColor, md.ratingIndicatorColor, md.ratingToneMidColor, md.ratingMidColor, palette?.badge, palette?.indicator, palette?.mid, palette?.middle);
26427
+ return this.resolveColorToken(md.ratingBadgeColor, md.ratingIndicatorColor, md.ratingToneMidColor, md.ratingMidColor, palette?.badge, palette?.indicator, palette?.mid, palette?.middle, this.ratingGradientMidColor());
26428
+ }
26429
+ ratingGradientColorByIndex(index, total) {
26430
+ const safeTotal = Math.max(2, total);
26431
+ const ratio = safeTotal <= 1 ? 0 : index / (safeTotal - 1);
26432
+ return this.ratingGradientColorByRatio(ratio);
26433
+ }
26434
+ ratingGradientColorByRatio(ratio) {
26435
+ return interpolateThreeStopGradientColor(this.ratingGradientLowColor(), this.ratingGradientMidColor(), this.ratingGradientHighColor(), ratio);
26208
26436
  }
26209
26437
  readSelectedRange() {
26210
26438
  const min = this.minValue();
@@ -26430,6 +26658,7 @@ class FilterInlineRatingComponent extends FilterInlineRangeSliderComponent {
26430
26658
  [class.tone-mid]="slotTone(slot) === 'mid'"
26431
26659
  [class.tone-high]="slotTone(slot) === 'high'"
26432
26660
  [class.is-active]="isSlotInSelectedRange(slot)"
26661
+ [style.color]="slotColor(slot)"
26433
26662
  >
26434
26663
  {{ isSlotInSelectedRange(slot) ? ratingActiveStarIconName() : ratingInactiveStarIconName() }}
26435
26664
  </mat-icon>
@@ -26631,6 +26860,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
26631
26860
  [class.tone-mid]="slotTone(slot) === 'mid'"
26632
26861
  [class.tone-high]="slotTone(slot) === 'high'"
26633
26862
  [class.is-active]="isSlotInSelectedRange(slot)"
26863
+ [style.color]="slotColor(slot)"
26634
26864
  >
26635
26865
  {{ isSlotInSelectedRange(slot) ? ratingActiveStarIconName() : ratingInactiveStarIconName() }}
26636
26866
  </mat-icon>
@@ -26974,6 +27204,50 @@ class FilterInlineDistanceRadiusComponent extends FilterInlineRangeSliderCompone
26974
27204
  const ratio = this.normalizedDistanceRatio();
26975
27205
  return Number((0.12 + ratio * 0.4).toFixed(3));
26976
27206
  }
27207
+ radialFillBackground() {
27208
+ const low = this.distanceGradientLowColor();
27209
+ const mid = this.distanceGradientMidColor();
27210
+ const high = this.distanceGradientHighColor();
27211
+ return `radial-gradient(circle, ${applyAlphaToColor(low, 0.48)} 0%, ${applyAlphaToColor(mid, 0.4)} 58%, ${applyAlphaToColor(high, 0.34)} 100%)`;
27212
+ }
27213
+ distanceRadialValueColor() {
27214
+ return this.gradientColorForRatio(this.normalizedDistanceRatio());
27215
+ }
27216
+ showRadialRangeBand() {
27217
+ const ratios = this.currentNormalizedRangeRatios();
27218
+ if (!ratios) {
27219
+ return false;
27220
+ }
27221
+ return ratios.end - ratios.start > 0.0005;
27222
+ }
27223
+ radialRangeBandGradient() {
27224
+ const ratios = this.currentNormalizedRangeRatios();
27225
+ if (!ratios) {
27226
+ return null;
27227
+ }
27228
+ const innerScale = this.radialScaleForRatio(ratios.start);
27229
+ const outerScale = this.radialScaleForRatio(ratios.end);
27230
+ const innerPct = Math.max(0, Math.min(100, innerScale * 50));
27231
+ const outerPct = Math.max(innerPct, Math.min(100, outerScale * 50));
27232
+ const edgeSoftness = 1.2;
27233
+ const innerStop = Math.max(0, innerPct - edgeSoftness);
27234
+ const outerStop = Math.min(100, outerPct + edgeSoftness);
27235
+ const startColor = this.gradientColorForRatio(ratios.start);
27236
+ const endColor = this.gradientColorForRatio(ratios.end);
27237
+ return `radial-gradient(circle, transparent 0 ${innerStop.toFixed(2)}%, ${startColor} ${innerPct.toFixed(2)}%, ${endColor} ${outerPct.toFixed(2)}%, transparent ${outerStop.toFixed(2)}% 100%)`;
27238
+ }
27239
+ radialRangeBandOpacity() {
27240
+ const override = this.distanceRangeBandOpacityOverride();
27241
+ if (override !== null) {
27242
+ return override;
27243
+ }
27244
+ const ratios = this.currentNormalizedRangeRatios();
27245
+ if (!ratios) {
27246
+ return 0;
27247
+ }
27248
+ const width = Math.max(0, ratios.end - ratios.start);
27249
+ return Number((0.2 + Math.min(0.22, width * 0.45)).toFixed(3));
27250
+ }
26977
27251
  distancePresets() {
26978
27252
  const md = this.metadata() || {};
26979
27253
  const source = md.distancePresets ?? md.quickPresets ?? null;
@@ -27052,6 +27326,18 @@ class FilterInlineDistanceRadiusComponent extends FilterInlineRangeSliderCompone
27052
27326
  const md = this.metadata() || {};
27053
27327
  return this.resolveColorToken(md.distanceGlowColor, md.distanceAccentColor);
27054
27328
  }
27329
+ distanceGradientLowColor() {
27330
+ const md = this.metadata() || {};
27331
+ return (this.resolveColorToken(md.distanceGradientLowColor, md.distanceToneLowColor, md.ratingToneLowColor, md.distanceAccentColor) || '#22c55e');
27332
+ }
27333
+ distanceGradientMidColor() {
27334
+ const md = this.metadata() || {};
27335
+ return (this.resolveColorToken(md.distanceGradientMidColor, md.distanceToneMidColor, md.ratingToneMidColor, md.distanceGlowColor) || '#f59e0b');
27336
+ }
27337
+ distanceGradientHighColor() {
27338
+ const md = this.metadata() || {};
27339
+ return (this.resolveColorToken(md.distanceGradientHighColor, md.distanceToneHighColor, md.ratingToneHighColor, md.distanceAccentColor) || '#ef4444');
27340
+ }
27055
27341
  syncUnitFromMetadata() {
27056
27342
  const md = this.metadata() || {};
27057
27343
  const units = this.availableUnits();
@@ -27071,13 +27357,30 @@ class FilterInlineDistanceRadiusComponent extends FilterInlineRangeSliderCompone
27071
27357
  const min = this.minValue();
27072
27358
  const max = this.maxValue();
27073
27359
  const current = this.currentRadialBaseValue() ?? min;
27360
+ return this.normalizedRatioForValue(current, min, max);
27361
+ }
27362
+ normalizedRatioForValue(value, min, max) {
27074
27363
  if (max <= min)
27075
27364
  return 1;
27076
- const ratio = (current - min) / (max - min);
27365
+ const ratio = (value - min) / (max - min);
27077
27366
  return Math.max(0, Math.min(1, ratio));
27078
27367
  }
27079
27368
  radialFillScale() {
27080
- return 0.2 + this.normalizedDistanceRatio() * 0.8;
27369
+ return this.radialScaleForRatio(this.normalizedDistanceRatio());
27370
+ }
27371
+ radialScaleForRatio(ratio) {
27372
+ return 0.2 + ratio * 0.8;
27373
+ }
27374
+ gradientColorForRatio(ratio) {
27375
+ return interpolateThreeStopGradientColor(this.distanceGradientLowColor(), this.distanceGradientMidColor(), this.distanceGradientHighColor(), ratio);
27376
+ }
27377
+ distanceRangeBandOpacityOverride() {
27378
+ const md = this.metadata() || {};
27379
+ const candidate = Number(md.distanceRangeBandOpacity ?? md.distanceRadialRangeOpacity ?? md.distanceRangeOpacity);
27380
+ if (!Number.isFinite(candidate)) {
27381
+ return null;
27382
+ }
27383
+ return Math.max(0, Math.min(1, Number(candidate.toFixed(3))));
27081
27384
  }
27082
27385
  currentBaseValue() {
27083
27386
  const raw = this.control().value;
@@ -27109,6 +27412,23 @@ class FilterInlineDistanceRadiusComponent extends FilterInlineRangeSliderCompone
27109
27412
  }
27110
27413
  return this.currentBaseValue();
27111
27414
  }
27415
+ currentNormalizedRangeRatios() {
27416
+ if (!this.isRangeMode()) {
27417
+ return null;
27418
+ }
27419
+ const range = this.currentRangeBaseValue();
27420
+ if (!range) {
27421
+ return null;
27422
+ }
27423
+ const min = this.minValue();
27424
+ const max = this.maxValue();
27425
+ let start = this.normalizedRatioForValue(range.start ?? min, min, max);
27426
+ let end = this.normalizedRatioForValue(range.end ?? max, min, max);
27427
+ if (start > end) {
27428
+ [start, end] = [end, start];
27429
+ }
27430
+ return { start, end };
27431
+ }
27112
27432
  clampBaseValue(value) {
27113
27433
  const min = this.minValue();
27114
27434
  const max = this.maxValue();
@@ -27471,6 +27791,10 @@ class FilterInlineDistanceRadiusComponent extends FilterInlineRangeSliderCompone
27471
27791
  [style.--pdx-inline-distance-ring]="distanceRingColor()"
27472
27792
  [style.--pdx-inline-distance-track]="distanceTrackColor()"
27473
27793
  [style.--pdx-inline-distance-glow]="distanceGlowColor()"
27794
+ [style.--pdx-inline-distance-gradient-low]="distanceGradientLowColor()"
27795
+ [style.--pdx-inline-distance-gradient-mid]="distanceGradientMidColor()"
27796
+ [style.--pdx-inline-distance-gradient-high]="distanceGradientHighColor()"
27797
+ [style.--pdx-inline-distance-value-color]="distanceRadialValueColor()"
27474
27798
  [matTooltip]="inlineTooltipText()"
27475
27799
  [matTooltipDisabled]="inlineTooltipDisabled()"
27476
27800
  [matTooltipPosition]="tooltipPosition()"
@@ -27570,7 +27894,15 @@ class FilterInlineDistanceRadiusComponent extends FilterInlineRangeSliderCompone
27570
27894
  class="pdx-inline-distance-fill"
27571
27895
  [style.transform]="radialFillTransform()"
27572
27896
  [style.opacity]="radialFillOpacity()"
27897
+ [style.background]="radialFillBackground()"
27573
27898
  ></span>
27899
+ @if (showRadialRangeBand()) {
27900
+ <span
27901
+ class="pdx-inline-distance-range-band"
27902
+ [style.background]="radialRangeBandGradient()"
27903
+ [style.opacity]="radialRangeBandOpacity()"
27904
+ ></span>
27905
+ }
27574
27906
  <span class="pdx-inline-distance-dot"></span>
27575
27907
  </div>
27576
27908
  </div>
@@ -27663,7 +27995,7 @@ class FilterInlineDistanceRadiusComponent extends FilterInlineRangeSliderCompone
27663
27995
  </div>
27664
27996
  </ng-template>
27665
27997
  </div>
27666
- `, isInline: true, styles: [":host{display:inline-block;width:auto;min-width:0;max-width:100%}.pdx-inline-distance-root{display:inline-block;width:auto;min-width:0;max-width:100%}.pdx-inline-distance-chip{display:inline-flex;align-items:center;gap:6px;width:auto;min-width:0;min-height:42px;min-inline-size:var(--pdx-inline-distance-min-w, 188px);max-width:min(var(--pdx-inline-distance-max-w, 340px),calc(100vw - 48px));padding:0 8px 0 0;border-radius:999px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-high);color:var(--md-sys-color-on-surface-variant);box-sizing:border-box;transition:border-color .12s ease,box-shadow .12s ease,background-color .12s ease,color .12s ease}.pdx-inline-distance-chip.is-active{border-color:var(--md-sys-color-primary);background:var(--md-sys-color-primary);color:var(--md-sys-color-on-primary)}.pdx-inline-distance-chip.is-open{border-color:var(--md-sys-color-primary);box-shadow:0 0 0 2px color-mix(in srgb,var(--md-sys-color-primary) 22%,transparent)}.pdx-inline-distance-trigger{flex:1 1 auto;display:inline-flex;align-items:center;gap:10px;min-width:0;width:100%;min-height:40px;border:0;background:transparent;color:inherit;cursor:pointer;padding:0 12px;text-align:left}.pdx-inline-distance-trigger:focus-visible{outline:2px solid color-mix(in srgb,currentColor 42%,transparent);outline-offset:-2px;border-radius:999px}.pdx-inline-distance-trigger[disabled]{cursor:default;opacity:var(--md-sys-state-disabled-content-opacity, .38)}.pdx-inline-distance-icon{width:18px;height:18px;font-size:18px;line-height:1}.pdx-inline-distance-text{display:inline-block;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.95rem;line-height:1.15;font-weight:500}.pdx-inline-distance-clear{--clear-ring-color: var(--md-sys-color-primary);width:22px;height:22px;min-width:22px;margin-right:10px;display:grid;place-items:center;border:0;border-radius:50%;appearance:none;-webkit-appearance:none;outline:none;padding:0;background:color-mix(in srgb,var(--md-sys-color-on-surface) 10%,transparent);color:inherit;cursor:pointer;line-height:0;font-size:0;transition:background-color .12s ease,box-shadow .12s ease,color .12s ease}.pdx-inline-distance-clear:hover{background:color-mix(in srgb,var(--md-sys-color-on-surface) 18%,transparent)}.pdx-inline-distance-chip.is-active .pdx-inline-distance-clear{--clear-ring-color: var(--md-sys-color-on-primary);background:color-mix(in srgb,var(--md-sys-color-on-primary) 22%,transparent)}.pdx-inline-distance-clear:focus-visible{box-shadow:0 0 0 2px color-mix(in srgb,var(--clear-ring-color) 34%,transparent)}.pdx-inline-distance-clear mat-icon{width:15px;height:15px;font-size:15px}.pdx-inline-distance-panel{width:min(var(--pdx-inline-distance-panel-max-w, 560px),calc(100vw - 24px));min-width:min(var(--pdx-inline-distance-panel-min-w, 320px),calc(100vw - 24px));max-width:min(var(--pdx-inline-distance-panel-max-w, 560px),calc(100vw - 24px));padding:14px 16px;border-radius:16px;border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant) 70%,transparent);background:var(--md-sys-color-surface-container);color:var(--md-sys-color-on-surface);box-shadow:0 14px 30px color-mix(in srgb,var(--md-sys-color-shadow) 20%,transparent);box-sizing:border-box;display:grid;gap:12px}.pdx-inline-distance-header{display:grid;grid-template-columns:auto minmax(0,1fr);gap:10px;align-items:center}.pdx-inline-distance-header-icon{width:36px;height:36px;border-radius:10px;display:grid;place-items:center;background:color-mix(in srgb,var(--md-sys-color-primary) 14%,var(--md-sys-color-surface-container-high));color:var(--pdx-inline-distance-accent, var(--md-sys-color-primary))}.pdx-inline-distance-header-icon mat-icon{width:20px;height:20px;font-size:20px}.pdx-inline-distance-title{font-size:1rem;font-weight:600}.pdx-inline-distance-subtitle{color:var(--md-sys-color-on-surface-variant);font-size:.82rem;line-height:1.25}.pdx-inline-distance-radial-wrap{display:grid;place-items:center;padding-top:2px}.pdx-inline-distance-radial{width:min(196px,52vw);aspect-ratio:1;position:relative;display:grid;place-items:center}.pdx-inline-distance-ring{position:absolute;inset:0;border-radius:50%;border:1px dashed var(--pdx-inline-distance-ring, var(--md-sys-color-outline-variant));transform-origin:center}.pdx-inline-distance-ring.is-active{border-color:color-mix(in srgb,var(--pdx-inline-distance-accent, var(--md-sys-color-primary)) 65%,var(--pdx-inline-distance-ring, var(--md-sys-color-outline-variant)))}.pdx-inline-distance-fill{position:absolute;width:100%;height:100%;border-radius:50%;transform-origin:center;background:radial-gradient(circle,color-mix(in srgb,var(--pdx-inline-distance-glow, var(--md-sys-color-primary)) 26%,transparent) 0%,color-mix(in srgb,var(--pdx-inline-distance-glow, var(--md-sys-color-primary)) 10%,transparent) 58%,transparent 100%)}.pdx-inline-distance-dot{width:22px;height:22px;border-radius:50%;border:3px solid color-mix(in srgb,var(--pdx-inline-distance-accent, var(--md-sys-color-primary)) 75%,white);background:var(--pdx-inline-distance-accent, var(--md-sys-color-primary));box-shadow:0 0 0 6px color-mix(in srgb,var(--pdx-inline-distance-accent, var(--md-sys-color-primary)) 16%,transparent)}.pdx-inline-distance-value{display:inline-flex;align-items:baseline;justify-content:center;gap:2px}.pdx-inline-distance-value-number{font-size:2rem;font-weight:700;line-height:1;color:var(--pdx-inline-distance-accent, var(--md-sys-color-primary))}.pdx-inline-distance-value-unit{font-size:.95rem;color:var(--md-sys-color-on-surface-variant)}.pdx-inline-distance-units{display:inline-grid;grid-auto-flow:column;gap:0;border-radius:12px;border:1px solid var(--md-sys-color-outline-variant);overflow:hidden;justify-self:center}.pdx-inline-distance-unit-btn{min-width:56px;min-height:32px;border:0;background:var(--md-sys-color-surface-container-high);color:var(--md-sys-color-on-surface-variant);font:inherit;font-size:.85rem;font-weight:600;letter-spacing:.02em;padding:0 12px;cursor:pointer}.pdx-inline-distance-unit-btn.is-active{background:color-mix(in srgb,var(--pdx-inline-distance-accent, var(--md-sys-color-primary)) 18%,var(--md-sys-color-surface-container-high));color:var(--md-sys-color-on-surface)}.pdx-inline-distance-unit-btn:focus-visible{outline:2px solid color-mix(in srgb,var(--pdx-inline-distance-accent, var(--md-sys-color-primary)) 38%,transparent);outline-offset:-2px}.pdx-inline-distance-unit-btn[disabled]{opacity:.56;cursor:default}.pdx-inline-distance-slider-wrap{padding-top:2px}.pdx-inline-distance-slider{width:100%}:host ::ng-deep .pdx-inline-distance-slider .mdc-slider__track--inactive{background:var(--pdx-inline-distance-track, var(--md-sys-color-outline-variant))}:host ::ng-deep .pdx-inline-distance-slider .mdc-slider__track--active_fill{border-color:var(--pdx-inline-distance-accent, var(--md-sys-color-primary))}:host ::ng-deep .pdx-inline-distance-slider .mdc-slider__thumb-knob{border-color:var(--pdx-inline-distance-accent, var(--md-sys-color-primary))}.pdx-inline-distance-edges{display:flex;justify-content:space-between;color:var(--md-sys-color-on-surface-variant);font-size:.82rem}.pdx-inline-distance-presets{display:flex;flex-wrap:wrap;gap:8px}.pdx-inline-distance-preset{border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-high);color:var(--md-sys-color-on-surface);border-radius:999px;min-height:31px;padding:0 12px;display:inline-flex;align-items:center;gap:6px;cursor:pointer}.pdx-inline-distance-preset.is-active{border-color:color-mix(in srgb,var(--pdx-inline-distance-accent, var(--md-sys-color-primary)) 80%,var(--md-sys-color-primary));background:var(--pdx-inline-distance-accent, var(--md-sys-color-primary));color:var(--md-sys-color-on-primary);box-shadow:0 8px 16px color-mix(in srgb,var(--pdx-inline-distance-accent, var(--md-sys-color-primary)) 28%,transparent)}.pdx-inline-distance-preset[disabled]{opacity:.56;cursor:default}@media(max-width:768px){.pdx-inline-distance-panel{min-width:min(300px,calc(100vw - 24px));padding:12px}.pdx-inline-distance-radial{width:min(176px,56vw)}.pdx-inline-distance-value-number{font-size:1.8rem}.pdx-inline-distance-preset{min-height:29px;padding:0 10px;font-size:.82rem}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: A11yModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i2$1.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i2$1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "ngmodule", type: MatSliderModule }, { kind: "component", type: i3$1.MatSlider, selector: "mat-slider", inputs: ["disabled", "discrete", "showTickMarks", "min", "color", "disableRipple", "max", "step", "displayWith"], exportAs: ["matSlider"] }, { kind: "directive", type: i3$1.MatSliderThumb, selector: "input[matSliderThumb]", inputs: ["value"], outputs: ["valueChange", "dragStart", "dragEnd"], exportAs: ["matSliderThumb"] }, { kind: "directive", type: i3$1.MatSliderRangeThumb, selector: "input[matSliderStartThumb], input[matSliderEndThumb]", exportAs: ["matSliderRangeThumb"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] });
27998
+ `, isInline: true, styles: [":host{display:inline-block;width:auto;min-width:0;max-width:100%}.pdx-inline-distance-root{display:inline-block;width:auto;min-width:0;max-width:100%}.pdx-inline-distance-chip{display:inline-flex;align-items:center;gap:6px;width:auto;min-width:0;min-height:42px;min-inline-size:var(--pdx-inline-distance-min-w, 188px);max-width:min(var(--pdx-inline-distance-max-w, 340px),calc(100vw - 48px));padding:0 8px 0 0;border-radius:999px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-high);color:var(--md-sys-color-on-surface-variant);box-sizing:border-box;transition:border-color .12s ease,box-shadow .12s ease,background-color .12s ease,color .12s ease}.pdx-inline-distance-chip.is-active{border-color:var(--md-sys-color-primary);background:var(--md-sys-color-primary);color:var(--md-sys-color-on-primary)}.pdx-inline-distance-chip.is-open{border-color:var(--md-sys-color-primary);box-shadow:0 0 0 2px color-mix(in srgb,var(--md-sys-color-primary) 22%,transparent)}.pdx-inline-distance-trigger{flex:1 1 auto;display:inline-flex;align-items:center;gap:10px;min-width:0;width:100%;min-height:40px;border:0;background:transparent;color:inherit;cursor:pointer;padding:0 12px;text-align:left}.pdx-inline-distance-trigger:focus-visible{outline:2px solid color-mix(in srgb,currentColor 42%,transparent);outline-offset:-2px;border-radius:999px}.pdx-inline-distance-trigger[disabled]{cursor:default;opacity:var(--md-sys-state-disabled-content-opacity, .38)}.pdx-inline-distance-icon{width:18px;height:18px;font-size:18px;line-height:1}.pdx-inline-distance-text{display:inline-block;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.95rem;line-height:1.15;font-weight:500}.pdx-inline-distance-clear{--clear-ring-color: var(--md-sys-color-primary);width:22px;height:22px;min-width:22px;margin-right:10px;display:grid;place-items:center;border:0;border-radius:50%;appearance:none;-webkit-appearance:none;outline:none;padding:0;background:color-mix(in srgb,var(--md-sys-color-on-surface) 10%,transparent);color:inherit;cursor:pointer;line-height:0;font-size:0;transition:background-color .12s ease,box-shadow .12s ease,color .12s ease}.pdx-inline-distance-clear:hover{background:color-mix(in srgb,var(--md-sys-color-on-surface) 18%,transparent)}.pdx-inline-distance-chip.is-active .pdx-inline-distance-clear{--clear-ring-color: var(--md-sys-color-on-primary);background:color-mix(in srgb,var(--md-sys-color-on-primary) 22%,transparent)}.pdx-inline-distance-clear:focus-visible{box-shadow:0 0 0 2px color-mix(in srgb,var(--clear-ring-color) 34%,transparent)}.pdx-inline-distance-clear mat-icon{width:15px;height:15px;font-size:15px}.pdx-inline-distance-panel{width:min(var(--pdx-inline-distance-panel-max-w, 560px),calc(100vw - 24px));min-width:min(var(--pdx-inline-distance-panel-min-w, 320px),calc(100vw - 24px));max-width:min(var(--pdx-inline-distance-panel-max-w, 560px),calc(100vw - 24px));padding:14px 16px;border-radius:16px;border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant) 70%,transparent);background:var(--md-sys-color-surface-container);color:var(--md-sys-color-on-surface);box-shadow:0 14px 30px color-mix(in srgb,var(--md-sys-color-shadow) 20%,transparent);box-sizing:border-box;display:grid;gap:12px}.pdx-inline-distance-header{display:grid;grid-template-columns:auto minmax(0,1fr);gap:10px;align-items:center}.pdx-inline-distance-header-icon{width:36px;height:36px;border-radius:10px;display:grid;place-items:center;background:color-mix(in srgb,var(--md-sys-color-primary) 14%,var(--md-sys-color-surface-container-high));color:var(--pdx-inline-distance-accent, var(--md-sys-color-primary))}.pdx-inline-distance-header-icon mat-icon{width:20px;height:20px;font-size:20px}.pdx-inline-distance-title{font-size:1rem;font-weight:600}.pdx-inline-distance-subtitle{color:var(--md-sys-color-on-surface-variant);font-size:.82rem;line-height:1.25}.pdx-inline-distance-radial-wrap{display:grid;place-items:center;padding-top:2px}.pdx-inline-distance-radial{width:min(196px,52vw);aspect-ratio:1;position:relative;display:grid;place-items:center}.pdx-inline-distance-ring{position:absolute;inset:0;border-radius:50%;border:1px dashed var(--pdx-inline-distance-ring, var(--md-sys-color-outline-variant));transform-origin:center}.pdx-inline-distance-ring.is-active{border-color:color-mix(in srgb,var(--pdx-inline-distance-value-color, var(--pdx-inline-distance-accent, var(--md-sys-color-primary))) 65%,var(--pdx-inline-distance-ring, var(--md-sys-color-outline-variant)))}.pdx-inline-distance-fill{position:absolute;width:100%;height:100%;border-radius:50%;transform-origin:center;background:radial-gradient(circle,color-mix(in srgb,var(--pdx-inline-distance-gradient-low, #22c55e) 48%,transparent),color-mix(in srgb,var(--pdx-inline-distance-gradient-mid, #f59e0b) 40%,transparent) 58%,color-mix(in srgb,var(--pdx-inline-distance-gradient-high, #ef4444) 34%,transparent))}.pdx-inline-distance-range-band{position:absolute;inset:0;border-radius:50%;pointer-events:none}.pdx-inline-distance-dot{width:22px;height:22px;border-radius:50%;border:3px solid color-mix(in srgb,var(--pdx-inline-distance-value-color, var(--pdx-inline-distance-accent, var(--md-sys-color-primary))) 75%,white);background:var( --pdx-inline-distance-value-color, var(--pdx-inline-distance-accent, var(--md-sys-color-primary)) );box-shadow:0 0 0 6px color-mix(in srgb,var(--pdx-inline-distance-value-color, var(--pdx-inline-distance-accent, var(--md-sys-color-primary))) 16%,transparent)}.pdx-inline-distance-value{display:inline-flex;align-items:baseline;justify-content:center;gap:2px}.pdx-inline-distance-value-number{font-size:2rem;font-weight:700;line-height:1;color:var( --pdx-inline-distance-value-color, var(--pdx-inline-distance-accent, var(--md-sys-color-primary)) )}.pdx-inline-distance-value-unit{font-size:.95rem;color:var(--md-sys-color-on-surface-variant)}.pdx-inline-distance-units{display:inline-grid;grid-auto-flow:column;gap:0;border-radius:12px;border:1px solid var(--md-sys-color-outline-variant);overflow:hidden;justify-self:center}.pdx-inline-distance-unit-btn{min-width:56px;min-height:32px;border:0;background:var(--md-sys-color-surface-container-high);color:var(--md-sys-color-on-surface-variant);font:inherit;font-size:.85rem;font-weight:600;letter-spacing:.02em;padding:0 12px;cursor:pointer}.pdx-inline-distance-unit-btn.is-active{background:color-mix(in srgb,var(--pdx-inline-distance-accent, var(--md-sys-color-primary)) 18%,var(--md-sys-color-surface-container-high));color:var(--md-sys-color-on-surface)}.pdx-inline-distance-unit-btn:focus-visible{outline:2px solid color-mix(in srgb,var(--pdx-inline-distance-accent, var(--md-sys-color-primary)) 38%,transparent);outline-offset:-2px}.pdx-inline-distance-unit-btn[disabled]{opacity:.56;cursor:default}.pdx-inline-distance-slider-wrap{padding-top:2px}.pdx-inline-distance-slider{width:100%}:host ::ng-deep .pdx-inline-distance-slider .mdc-slider__track--inactive{background:var(--pdx-inline-distance-track, var(--md-sys-color-outline-variant))}:host ::ng-deep .pdx-inline-distance-slider .mdc-slider__track--active_fill{border-color:var(--pdx-inline-distance-accent, var(--md-sys-color-primary))}:host ::ng-deep .pdx-inline-distance-slider .mdc-slider__thumb-knob{border-color:var(--pdx-inline-distance-accent, var(--md-sys-color-primary))}.pdx-inline-distance-edges{display:flex;justify-content:space-between;color:var(--md-sys-color-on-surface-variant);font-size:.82rem}.pdx-inline-distance-presets{display:flex;flex-wrap:wrap;gap:8px}.pdx-inline-distance-preset{border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-high);color:var(--md-sys-color-on-surface);border-radius:999px;min-height:31px;padding:0 12px;display:inline-flex;align-items:center;gap:6px;cursor:pointer}.pdx-inline-distance-preset.is-active{border-color:color-mix(in srgb,var(--pdx-inline-distance-accent, var(--md-sys-color-primary)) 80%,var(--md-sys-color-primary));background:var(--pdx-inline-distance-accent, var(--md-sys-color-primary));color:var(--md-sys-color-on-primary);box-shadow:0 8px 16px color-mix(in srgb,var(--pdx-inline-distance-accent, var(--md-sys-color-primary)) 28%,transparent)}.pdx-inline-distance-preset[disabled]{opacity:.56;cursor:default}@media(max-width:768px){.pdx-inline-distance-panel{min-width:min(300px,calc(100vw - 24px));padding:12px}.pdx-inline-distance-radial{width:min(176px,56vw)}.pdx-inline-distance-value-number{font-size:1.8rem}.pdx-inline-distance-preset{min-height:29px;padding:0 10px;font-size:.82rem}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: A11yModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i2$1.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i2$1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "ngmodule", type: MatSliderModule }, { kind: "component", type: i3$1.MatSlider, selector: "mat-slider", inputs: ["disabled", "discrete", "showTickMarks", "min", "color", "disableRipple", "max", "step", "displayWith"], exportAs: ["matSlider"] }, { kind: "directive", type: i3$1.MatSliderThumb, selector: "input[matSliderThumb]", inputs: ["value"], outputs: ["valueChange", "dragStart", "dragEnd"], exportAs: ["matSliderThumb"] }, { kind: "directive", type: i3$1.MatSliderRangeThumb, selector: "input[matSliderStartThumb], input[matSliderEndThumb]", exportAs: ["matSliderRangeThumb"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] });
27667
27999
  }
27668
28000
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: FilterInlineDistanceRadiusComponent, decorators: [{
27669
28001
  type: Component,
@@ -27686,6 +28018,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
27686
28018
  [style.--pdx-inline-distance-ring]="distanceRingColor()"
27687
28019
  [style.--pdx-inline-distance-track]="distanceTrackColor()"
27688
28020
  [style.--pdx-inline-distance-glow]="distanceGlowColor()"
28021
+ [style.--pdx-inline-distance-gradient-low]="distanceGradientLowColor()"
28022
+ [style.--pdx-inline-distance-gradient-mid]="distanceGradientMidColor()"
28023
+ [style.--pdx-inline-distance-gradient-high]="distanceGradientHighColor()"
28024
+ [style.--pdx-inline-distance-value-color]="distanceRadialValueColor()"
27689
28025
  [matTooltip]="inlineTooltipText()"
27690
28026
  [matTooltipDisabled]="inlineTooltipDisabled()"
27691
28027
  [matTooltipPosition]="tooltipPosition()"
@@ -27785,7 +28121,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
27785
28121
  class="pdx-inline-distance-fill"
27786
28122
  [style.transform]="radialFillTransform()"
27787
28123
  [style.opacity]="radialFillOpacity()"
28124
+ [style.background]="radialFillBackground()"
27788
28125
  ></span>
28126
+ @if (showRadialRangeBand()) {
28127
+ <span
28128
+ class="pdx-inline-distance-range-band"
28129
+ [style.background]="radialRangeBandGradient()"
28130
+ [style.opacity]="radialRangeBandOpacity()"
28131
+ ></span>
28132
+ }
27789
28133
  <span class="pdx-inline-distance-dot"></span>
27790
28134
  </div>
27791
28135
  </div>
@@ -27895,7 +28239,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
27895
28239
  '[attr.data-component-id]': 'componentId()',
27896
28240
  '(window:resize)': 'onViewportResize()',
27897
28241
  '(document:keydown.escape)': 'onDocumentEscape()',
27898
- }, styles: [":host{display:inline-block;width:auto;min-width:0;max-width:100%}.pdx-inline-distance-root{display:inline-block;width:auto;min-width:0;max-width:100%}.pdx-inline-distance-chip{display:inline-flex;align-items:center;gap:6px;width:auto;min-width:0;min-height:42px;min-inline-size:var(--pdx-inline-distance-min-w, 188px);max-width:min(var(--pdx-inline-distance-max-w, 340px),calc(100vw - 48px));padding:0 8px 0 0;border-radius:999px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-high);color:var(--md-sys-color-on-surface-variant);box-sizing:border-box;transition:border-color .12s ease,box-shadow .12s ease,background-color .12s ease,color .12s ease}.pdx-inline-distance-chip.is-active{border-color:var(--md-sys-color-primary);background:var(--md-sys-color-primary);color:var(--md-sys-color-on-primary)}.pdx-inline-distance-chip.is-open{border-color:var(--md-sys-color-primary);box-shadow:0 0 0 2px color-mix(in srgb,var(--md-sys-color-primary) 22%,transparent)}.pdx-inline-distance-trigger{flex:1 1 auto;display:inline-flex;align-items:center;gap:10px;min-width:0;width:100%;min-height:40px;border:0;background:transparent;color:inherit;cursor:pointer;padding:0 12px;text-align:left}.pdx-inline-distance-trigger:focus-visible{outline:2px solid color-mix(in srgb,currentColor 42%,transparent);outline-offset:-2px;border-radius:999px}.pdx-inline-distance-trigger[disabled]{cursor:default;opacity:var(--md-sys-state-disabled-content-opacity, .38)}.pdx-inline-distance-icon{width:18px;height:18px;font-size:18px;line-height:1}.pdx-inline-distance-text{display:inline-block;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.95rem;line-height:1.15;font-weight:500}.pdx-inline-distance-clear{--clear-ring-color: var(--md-sys-color-primary);width:22px;height:22px;min-width:22px;margin-right:10px;display:grid;place-items:center;border:0;border-radius:50%;appearance:none;-webkit-appearance:none;outline:none;padding:0;background:color-mix(in srgb,var(--md-sys-color-on-surface) 10%,transparent);color:inherit;cursor:pointer;line-height:0;font-size:0;transition:background-color .12s ease,box-shadow .12s ease,color .12s ease}.pdx-inline-distance-clear:hover{background:color-mix(in srgb,var(--md-sys-color-on-surface) 18%,transparent)}.pdx-inline-distance-chip.is-active .pdx-inline-distance-clear{--clear-ring-color: var(--md-sys-color-on-primary);background:color-mix(in srgb,var(--md-sys-color-on-primary) 22%,transparent)}.pdx-inline-distance-clear:focus-visible{box-shadow:0 0 0 2px color-mix(in srgb,var(--clear-ring-color) 34%,transparent)}.pdx-inline-distance-clear mat-icon{width:15px;height:15px;font-size:15px}.pdx-inline-distance-panel{width:min(var(--pdx-inline-distance-panel-max-w, 560px),calc(100vw - 24px));min-width:min(var(--pdx-inline-distance-panel-min-w, 320px),calc(100vw - 24px));max-width:min(var(--pdx-inline-distance-panel-max-w, 560px),calc(100vw - 24px));padding:14px 16px;border-radius:16px;border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant) 70%,transparent);background:var(--md-sys-color-surface-container);color:var(--md-sys-color-on-surface);box-shadow:0 14px 30px color-mix(in srgb,var(--md-sys-color-shadow) 20%,transparent);box-sizing:border-box;display:grid;gap:12px}.pdx-inline-distance-header{display:grid;grid-template-columns:auto minmax(0,1fr);gap:10px;align-items:center}.pdx-inline-distance-header-icon{width:36px;height:36px;border-radius:10px;display:grid;place-items:center;background:color-mix(in srgb,var(--md-sys-color-primary) 14%,var(--md-sys-color-surface-container-high));color:var(--pdx-inline-distance-accent, var(--md-sys-color-primary))}.pdx-inline-distance-header-icon mat-icon{width:20px;height:20px;font-size:20px}.pdx-inline-distance-title{font-size:1rem;font-weight:600}.pdx-inline-distance-subtitle{color:var(--md-sys-color-on-surface-variant);font-size:.82rem;line-height:1.25}.pdx-inline-distance-radial-wrap{display:grid;place-items:center;padding-top:2px}.pdx-inline-distance-radial{width:min(196px,52vw);aspect-ratio:1;position:relative;display:grid;place-items:center}.pdx-inline-distance-ring{position:absolute;inset:0;border-radius:50%;border:1px dashed var(--pdx-inline-distance-ring, var(--md-sys-color-outline-variant));transform-origin:center}.pdx-inline-distance-ring.is-active{border-color:color-mix(in srgb,var(--pdx-inline-distance-accent, var(--md-sys-color-primary)) 65%,var(--pdx-inline-distance-ring, var(--md-sys-color-outline-variant)))}.pdx-inline-distance-fill{position:absolute;width:100%;height:100%;border-radius:50%;transform-origin:center;background:radial-gradient(circle,color-mix(in srgb,var(--pdx-inline-distance-glow, var(--md-sys-color-primary)) 26%,transparent) 0%,color-mix(in srgb,var(--pdx-inline-distance-glow, var(--md-sys-color-primary)) 10%,transparent) 58%,transparent 100%)}.pdx-inline-distance-dot{width:22px;height:22px;border-radius:50%;border:3px solid color-mix(in srgb,var(--pdx-inline-distance-accent, var(--md-sys-color-primary)) 75%,white);background:var(--pdx-inline-distance-accent, var(--md-sys-color-primary));box-shadow:0 0 0 6px color-mix(in srgb,var(--pdx-inline-distance-accent, var(--md-sys-color-primary)) 16%,transparent)}.pdx-inline-distance-value{display:inline-flex;align-items:baseline;justify-content:center;gap:2px}.pdx-inline-distance-value-number{font-size:2rem;font-weight:700;line-height:1;color:var(--pdx-inline-distance-accent, var(--md-sys-color-primary))}.pdx-inline-distance-value-unit{font-size:.95rem;color:var(--md-sys-color-on-surface-variant)}.pdx-inline-distance-units{display:inline-grid;grid-auto-flow:column;gap:0;border-radius:12px;border:1px solid var(--md-sys-color-outline-variant);overflow:hidden;justify-self:center}.pdx-inline-distance-unit-btn{min-width:56px;min-height:32px;border:0;background:var(--md-sys-color-surface-container-high);color:var(--md-sys-color-on-surface-variant);font:inherit;font-size:.85rem;font-weight:600;letter-spacing:.02em;padding:0 12px;cursor:pointer}.pdx-inline-distance-unit-btn.is-active{background:color-mix(in srgb,var(--pdx-inline-distance-accent, var(--md-sys-color-primary)) 18%,var(--md-sys-color-surface-container-high));color:var(--md-sys-color-on-surface)}.pdx-inline-distance-unit-btn:focus-visible{outline:2px solid color-mix(in srgb,var(--pdx-inline-distance-accent, var(--md-sys-color-primary)) 38%,transparent);outline-offset:-2px}.pdx-inline-distance-unit-btn[disabled]{opacity:.56;cursor:default}.pdx-inline-distance-slider-wrap{padding-top:2px}.pdx-inline-distance-slider{width:100%}:host ::ng-deep .pdx-inline-distance-slider .mdc-slider__track--inactive{background:var(--pdx-inline-distance-track, var(--md-sys-color-outline-variant))}:host ::ng-deep .pdx-inline-distance-slider .mdc-slider__track--active_fill{border-color:var(--pdx-inline-distance-accent, var(--md-sys-color-primary))}:host ::ng-deep .pdx-inline-distance-slider .mdc-slider__thumb-knob{border-color:var(--pdx-inline-distance-accent, var(--md-sys-color-primary))}.pdx-inline-distance-edges{display:flex;justify-content:space-between;color:var(--md-sys-color-on-surface-variant);font-size:.82rem}.pdx-inline-distance-presets{display:flex;flex-wrap:wrap;gap:8px}.pdx-inline-distance-preset{border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-high);color:var(--md-sys-color-on-surface);border-radius:999px;min-height:31px;padding:0 12px;display:inline-flex;align-items:center;gap:6px;cursor:pointer}.pdx-inline-distance-preset.is-active{border-color:color-mix(in srgb,var(--pdx-inline-distance-accent, var(--md-sys-color-primary)) 80%,var(--md-sys-color-primary));background:var(--pdx-inline-distance-accent, var(--md-sys-color-primary));color:var(--md-sys-color-on-primary);box-shadow:0 8px 16px color-mix(in srgb,var(--pdx-inline-distance-accent, var(--md-sys-color-primary)) 28%,transparent)}.pdx-inline-distance-preset[disabled]{opacity:.56;cursor:default}@media(max-width:768px){.pdx-inline-distance-panel{min-width:min(300px,calc(100vw - 24px));padding:12px}.pdx-inline-distance-radial{width:min(176px,56vw)}.pdx-inline-distance-value-number{font-size:1.8rem}.pdx-inline-distance-preset{min-height:29px;padding:0 10px;font-size:.82rem}}\n"] }]
28242
+ }, styles: [":host{display:inline-block;width:auto;min-width:0;max-width:100%}.pdx-inline-distance-root{display:inline-block;width:auto;min-width:0;max-width:100%}.pdx-inline-distance-chip{display:inline-flex;align-items:center;gap:6px;width:auto;min-width:0;min-height:42px;min-inline-size:var(--pdx-inline-distance-min-w, 188px);max-width:min(var(--pdx-inline-distance-max-w, 340px),calc(100vw - 48px));padding:0 8px 0 0;border-radius:999px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-high);color:var(--md-sys-color-on-surface-variant);box-sizing:border-box;transition:border-color .12s ease,box-shadow .12s ease,background-color .12s ease,color .12s ease}.pdx-inline-distance-chip.is-active{border-color:var(--md-sys-color-primary);background:var(--md-sys-color-primary);color:var(--md-sys-color-on-primary)}.pdx-inline-distance-chip.is-open{border-color:var(--md-sys-color-primary);box-shadow:0 0 0 2px color-mix(in srgb,var(--md-sys-color-primary) 22%,transparent)}.pdx-inline-distance-trigger{flex:1 1 auto;display:inline-flex;align-items:center;gap:10px;min-width:0;width:100%;min-height:40px;border:0;background:transparent;color:inherit;cursor:pointer;padding:0 12px;text-align:left}.pdx-inline-distance-trigger:focus-visible{outline:2px solid color-mix(in srgb,currentColor 42%,transparent);outline-offset:-2px;border-radius:999px}.pdx-inline-distance-trigger[disabled]{cursor:default;opacity:var(--md-sys-state-disabled-content-opacity, .38)}.pdx-inline-distance-icon{width:18px;height:18px;font-size:18px;line-height:1}.pdx-inline-distance-text{display:inline-block;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.95rem;line-height:1.15;font-weight:500}.pdx-inline-distance-clear{--clear-ring-color: var(--md-sys-color-primary);width:22px;height:22px;min-width:22px;margin-right:10px;display:grid;place-items:center;border:0;border-radius:50%;appearance:none;-webkit-appearance:none;outline:none;padding:0;background:color-mix(in srgb,var(--md-sys-color-on-surface) 10%,transparent);color:inherit;cursor:pointer;line-height:0;font-size:0;transition:background-color .12s ease,box-shadow .12s ease,color .12s ease}.pdx-inline-distance-clear:hover{background:color-mix(in srgb,var(--md-sys-color-on-surface) 18%,transparent)}.pdx-inline-distance-chip.is-active .pdx-inline-distance-clear{--clear-ring-color: var(--md-sys-color-on-primary);background:color-mix(in srgb,var(--md-sys-color-on-primary) 22%,transparent)}.pdx-inline-distance-clear:focus-visible{box-shadow:0 0 0 2px color-mix(in srgb,var(--clear-ring-color) 34%,transparent)}.pdx-inline-distance-clear mat-icon{width:15px;height:15px;font-size:15px}.pdx-inline-distance-panel{width:min(var(--pdx-inline-distance-panel-max-w, 560px),calc(100vw - 24px));min-width:min(var(--pdx-inline-distance-panel-min-w, 320px),calc(100vw - 24px));max-width:min(var(--pdx-inline-distance-panel-max-w, 560px),calc(100vw - 24px));padding:14px 16px;border-radius:16px;border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant) 70%,transparent);background:var(--md-sys-color-surface-container);color:var(--md-sys-color-on-surface);box-shadow:0 14px 30px color-mix(in srgb,var(--md-sys-color-shadow) 20%,transparent);box-sizing:border-box;display:grid;gap:12px}.pdx-inline-distance-header{display:grid;grid-template-columns:auto minmax(0,1fr);gap:10px;align-items:center}.pdx-inline-distance-header-icon{width:36px;height:36px;border-radius:10px;display:grid;place-items:center;background:color-mix(in srgb,var(--md-sys-color-primary) 14%,var(--md-sys-color-surface-container-high));color:var(--pdx-inline-distance-accent, var(--md-sys-color-primary))}.pdx-inline-distance-header-icon mat-icon{width:20px;height:20px;font-size:20px}.pdx-inline-distance-title{font-size:1rem;font-weight:600}.pdx-inline-distance-subtitle{color:var(--md-sys-color-on-surface-variant);font-size:.82rem;line-height:1.25}.pdx-inline-distance-radial-wrap{display:grid;place-items:center;padding-top:2px}.pdx-inline-distance-radial{width:min(196px,52vw);aspect-ratio:1;position:relative;display:grid;place-items:center}.pdx-inline-distance-ring{position:absolute;inset:0;border-radius:50%;border:1px dashed var(--pdx-inline-distance-ring, var(--md-sys-color-outline-variant));transform-origin:center}.pdx-inline-distance-ring.is-active{border-color:color-mix(in srgb,var(--pdx-inline-distance-value-color, var(--pdx-inline-distance-accent, var(--md-sys-color-primary))) 65%,var(--pdx-inline-distance-ring, var(--md-sys-color-outline-variant)))}.pdx-inline-distance-fill{position:absolute;width:100%;height:100%;border-radius:50%;transform-origin:center;background:radial-gradient(circle,color-mix(in srgb,var(--pdx-inline-distance-gradient-low, #22c55e) 48%,transparent),color-mix(in srgb,var(--pdx-inline-distance-gradient-mid, #f59e0b) 40%,transparent) 58%,color-mix(in srgb,var(--pdx-inline-distance-gradient-high, #ef4444) 34%,transparent))}.pdx-inline-distance-range-band{position:absolute;inset:0;border-radius:50%;pointer-events:none}.pdx-inline-distance-dot{width:22px;height:22px;border-radius:50%;border:3px solid color-mix(in srgb,var(--pdx-inline-distance-value-color, var(--pdx-inline-distance-accent, var(--md-sys-color-primary))) 75%,white);background:var( --pdx-inline-distance-value-color, var(--pdx-inline-distance-accent, var(--md-sys-color-primary)) );box-shadow:0 0 0 6px color-mix(in srgb,var(--pdx-inline-distance-value-color, var(--pdx-inline-distance-accent, var(--md-sys-color-primary))) 16%,transparent)}.pdx-inline-distance-value{display:inline-flex;align-items:baseline;justify-content:center;gap:2px}.pdx-inline-distance-value-number{font-size:2rem;font-weight:700;line-height:1;color:var( --pdx-inline-distance-value-color, var(--pdx-inline-distance-accent, var(--md-sys-color-primary)) )}.pdx-inline-distance-value-unit{font-size:.95rem;color:var(--md-sys-color-on-surface-variant)}.pdx-inline-distance-units{display:inline-grid;grid-auto-flow:column;gap:0;border-radius:12px;border:1px solid var(--md-sys-color-outline-variant);overflow:hidden;justify-self:center}.pdx-inline-distance-unit-btn{min-width:56px;min-height:32px;border:0;background:var(--md-sys-color-surface-container-high);color:var(--md-sys-color-on-surface-variant);font:inherit;font-size:.85rem;font-weight:600;letter-spacing:.02em;padding:0 12px;cursor:pointer}.pdx-inline-distance-unit-btn.is-active{background:color-mix(in srgb,var(--pdx-inline-distance-accent, var(--md-sys-color-primary)) 18%,var(--md-sys-color-surface-container-high));color:var(--md-sys-color-on-surface)}.pdx-inline-distance-unit-btn:focus-visible{outline:2px solid color-mix(in srgb,var(--pdx-inline-distance-accent, var(--md-sys-color-primary)) 38%,transparent);outline-offset:-2px}.pdx-inline-distance-unit-btn[disabled]{opacity:.56;cursor:default}.pdx-inline-distance-slider-wrap{padding-top:2px}.pdx-inline-distance-slider{width:100%}:host ::ng-deep .pdx-inline-distance-slider .mdc-slider__track--inactive{background:var(--pdx-inline-distance-track, var(--md-sys-color-outline-variant))}:host ::ng-deep .pdx-inline-distance-slider .mdc-slider__track--active_fill{border-color:var(--pdx-inline-distance-accent, var(--md-sys-color-primary))}:host ::ng-deep .pdx-inline-distance-slider .mdc-slider__thumb-knob{border-color:var(--pdx-inline-distance-accent, var(--md-sys-color-primary))}.pdx-inline-distance-edges{display:flex;justify-content:space-between;color:var(--md-sys-color-on-surface-variant);font-size:.82rem}.pdx-inline-distance-presets{display:flex;flex-wrap:wrap;gap:8px}.pdx-inline-distance-preset{border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-high);color:var(--md-sys-color-on-surface);border-radius:999px;min-height:31px;padding:0 12px;display:inline-flex;align-items:center;gap:6px;cursor:pointer}.pdx-inline-distance-preset.is-active{border-color:color-mix(in srgb,var(--pdx-inline-distance-accent, var(--md-sys-color-primary)) 80%,var(--md-sys-color-primary));background:var(--pdx-inline-distance-accent, var(--md-sys-color-primary));color:var(--md-sys-color-on-primary);box-shadow:0 8px 16px color-mix(in srgb,var(--pdx-inline-distance-accent, var(--md-sys-color-primary)) 28%,transparent)}.pdx-inline-distance-preset[disabled]{opacity:.56;cursor:default}@media(max-width:768px){.pdx-inline-distance-panel{min-width:min(300px,calc(100vw - 24px));padding:12px}.pdx-inline-distance-radial{width:min(176px,56vw)}.pdx-inline-distance-value-number{font-size:1.8rem}.pdx-inline-distance-preset{min-height:29px;padding:0 10px;font-size:.82rem}}\n"] }]
27899
28243
  }] });
27900
28244
 
27901
28245
  const PDX_FILTER_INLINE_DISTANCE_RADIUS_COMPONENT_METADATA = {
@@ -28147,7 +28491,9 @@ class FilterInlinePipelineStatusComponent extends SimpleBaseSelectComponent {
28147
28491
  this.onClearClick();
28148
28492
  }
28149
28493
  pipelineOptions() {
28150
- return this.filteredOptions().map((option, index) => this.toVisualOption(option, index));
28494
+ const filtered = this.filteredOptions();
28495
+ const optionPool = this.options();
28496
+ return filtered.map((option) => this.toVisualOption(option, this.resolveOptionOrderIndex(option, optionPool), optionPool.length));
28151
28497
  }
28152
28498
  selectedVisualOptions() {
28153
28499
  const selectedValues = this.selectedValues();
@@ -28158,7 +28504,7 @@ class FilterInlinePipelineStatusComponent extends SimpleBaseSelectComponent {
28158
28504
  selectedValues.forEach((selectedValue, index) => {
28159
28505
  const option = optionPool.find((entry) => this.equalsOptionValue(entry, selectedValue));
28160
28506
  if (option) {
28161
- out.push(this.toVisualOption(option, index));
28507
+ out.push(this.toVisualOption(option, this.resolveOptionOrderIndex(option, optionPool), optionPool.length));
28162
28508
  }
28163
28509
  else {
28164
28510
  out.push({
@@ -28166,7 +28512,7 @@ class FilterInlinePipelineStatusComponent extends SimpleBaseSelectComponent {
28166
28512
  label: String(selectedValue ?? ''),
28167
28513
  subtitle: '',
28168
28514
  value: selectedValue,
28169
- color: this.resolveFallbackColor(index),
28515
+ color: this.resolveFallbackColor(index, selectedValues.length),
28170
28516
  weight: 1,
28171
28517
  disabled: false,
28172
28518
  selected: true,
@@ -28176,7 +28522,8 @@ class FilterInlinePipelineStatusComponent extends SimpleBaseSelectComponent {
28176
28522
  return out;
28177
28523
  }
28178
28524
  pipelineSegments() {
28179
- const options = this.options().map((option, index) => this.toVisualOption(option, index));
28525
+ const optionPool = this.options();
28526
+ const options = optionPool.map((option, index) => this.toVisualOption(option, index, optionPool.length));
28180
28527
  if (!options.length)
28181
28528
  return [];
28182
28529
  const totalWeight = options.reduce((sum, item) => sum + item.weight, 0);
@@ -28198,6 +28545,24 @@ class FilterInlinePipelineStatusComponent extends SimpleBaseSelectComponent {
28198
28545
  selected: option.selected,
28199
28546
  }));
28200
28547
  }
28548
+ pipelineGradientLowColor() {
28549
+ const md = this.metadata() || {};
28550
+ return this.resolveColorToken(md.pipelineGradientLowColor, md.pipelineToneLowColor) || '#64748b';
28551
+ }
28552
+ pipelineGradientMidColor() {
28553
+ const md = this.metadata() || {};
28554
+ return this.resolveColorToken(md.pipelineGradientMidColor, md.pipelineToneMidColor) || '#0ea5e9';
28555
+ }
28556
+ pipelineGradientHighColor() {
28557
+ const md = this.metadata() || {};
28558
+ return this.resolveColorToken(md.pipelineGradientHighColor, md.pipelineToneHighColor) || '#22c55e';
28559
+ }
28560
+ pipelineGradient() {
28561
+ const low = this.pipelineGradientLowColor();
28562
+ const mid = this.pipelineGradientMidColor();
28563
+ const high = this.pipelineGradientHighColor();
28564
+ return `linear-gradient(90deg, ${low} 0%, ${mid} 52%, ${high} 100%)`;
28565
+ }
28201
28566
  pipelineBarAriaLabel() {
28202
28567
  const label = this.placeholderText();
28203
28568
  const selected = this.selectedVisualOptions();
@@ -28305,7 +28670,7 @@ class FilterInlinePipelineStatusComponent extends SimpleBaseSelectComponent {
28305
28670
  isInteractionBlocked() {
28306
28671
  return this.disabledMode || this.isReadonlyEffective() || this.presentationMode;
28307
28672
  }
28308
- toVisualOption(option, index) {
28673
+ toVisualOption(option, index, totalOptions = 0) {
28309
28674
  const raw = option;
28310
28675
  const subtitle = this.resolveOptionSubtitle(raw);
28311
28676
  const weight = this.resolveOptionWeight(raw, subtitle);
@@ -28314,12 +28679,20 @@ class FilterInlinePipelineStatusComponent extends SimpleBaseSelectComponent {
28314
28679
  label: String(option.label ?? raw.text ?? raw.name ?? raw.title ?? option.value ?? '').trim() || `Item ${index + 1}`,
28315
28680
  subtitle,
28316
28681
  value: option.value,
28317
- color: this.resolveOptionColor(raw, index),
28682
+ color: this.resolveOptionColor(raw, index, totalOptions),
28318
28683
  weight,
28319
28684
  disabled: !!option.disabled,
28320
28685
  selected: this.selectedValues().some((entry) => this.equalsOptionValue({ value: entry, label: '' }, option.value)),
28321
28686
  };
28322
28687
  }
28688
+ resolveOptionOrderIndex(option, optionPool) {
28689
+ const matchedIndex = optionPool.findIndex((entry) => this.equalsOptionValue(entry, option.value));
28690
+ if (matchedIndex >= 0) {
28691
+ return matchedIndex;
28692
+ }
28693
+ const fallback = optionPool.indexOf(option);
28694
+ return fallback >= 0 ? fallback : 0;
28695
+ }
28323
28696
  resolveOptionSubtitle(raw) {
28324
28697
  const md = this.metadata() || {};
28325
28698
  const customKey = this.resolveMetadataKey(md.pipelineOptionSubtitleKey, md.optionSubtitleKey);
@@ -28358,7 +28731,7 @@ class FilterInlinePipelineStatusComponent extends SimpleBaseSelectComponent {
28358
28731
  }
28359
28732
  return 1;
28360
28733
  }
28361
- resolveOptionColor(raw, index) {
28734
+ resolveOptionColor(raw, index, totalOptions) {
28362
28735
  const md = this.metadata() || {};
28363
28736
  const customKey = this.resolveMetadataKey(md.pipelineOptionColorKey, md.optionColorKey);
28364
28737
  if (customKey) {
@@ -28379,11 +28752,19 @@ class FilterInlinePipelineStatusComponent extends SimpleBaseSelectComponent {
28379
28752
  if (palette.length) {
28380
28753
  return palette[index % palette.length];
28381
28754
  }
28382
- return this.resolveFallbackColor(index);
28755
+ return this.resolveFallbackColor(index, totalOptions);
28383
28756
  }
28384
- resolveFallbackColor(index) {
28385
- const defaults = ['#64748b', '#0ea5e9', '#f59e0b', '#22c55e', '#ef4444', '#14b8a6'];
28386
- return defaults[index % defaults.length];
28757
+ resolveFallbackColor(index, totalOptions = 0) {
28758
+ const normalizedTotal = Math.max(2, totalOptions);
28759
+ return this.pipelineGradientColorByIndex(index, normalizedTotal);
28760
+ }
28761
+ pipelineGradientColorByIndex(index, total) {
28762
+ const safeTotal = Math.max(2, total);
28763
+ const ratio = Math.max(0, Math.min(1, index / (safeTotal - 1)));
28764
+ return this.pipelineGradientColorByRatio(ratio);
28765
+ }
28766
+ pipelineGradientColorByRatio(ratio) {
28767
+ return interpolateThreeStopGradientColor(this.pipelineGradientLowColor(), this.pipelineGradientMidColor(), this.pipelineGradientHighColor(), ratio);
28387
28768
  }
28388
28769
  parseColorPalette(source) {
28389
28770
  if (Array.isArray(source)) {
@@ -28464,6 +28845,15 @@ class FilterInlinePipelineStatusComponent extends SimpleBaseSelectComponent {
28464
28845
  const text = String(value ?? '').trim();
28465
28846
  return text.length ? text : null;
28466
28847
  }
28848
+ resolveColorToken(...values) {
28849
+ for (const value of values) {
28850
+ const text = this.nonEmptyText(value);
28851
+ if (text) {
28852
+ return text;
28853
+ }
28854
+ }
28855
+ return null;
28856
+ }
28467
28857
  mapRawOption(option, index) {
28468
28858
  if (option && typeof option === 'object') {
28469
28859
  const label = String(option.label ?? option.text ?? option.name ?? option.title ?? '').trim();
@@ -28604,6 +28994,9 @@ class FilterInlinePipelineStatusComponent extends SimpleBaseSelectComponent {
28604
28994
  [style.--pdx-inline-pipeline-max-w.px]="inlineMaxWidthPx || null"
28605
28995
  [style.--pdx-inline-pipeline-panel-min-w.px]="panelMinWidthPx || null"
28606
28996
  [style.--pdx-inline-pipeline-panel-max-w.px]="panelMaxWidthPx || null"
28997
+ [style.--pdx-inline-pipeline-gradient-low]="pipelineGradientLowColor()"
28998
+ [style.--pdx-inline-pipeline-gradient-mid]="pipelineGradientMidColor()"
28999
+ [style.--pdx-inline-pipeline-gradient-high]="pipelineGradientHighColor()"
28607
29000
  [matTooltip]="inlineTooltipText()"
28608
29001
  [matTooltipDisabled]="inlineTooltipDisabled()"
28609
29002
  [matTooltipPosition]="tooltipPosition()"
@@ -28689,7 +29082,12 @@ class FilterInlinePipelineStatusComponent extends SimpleBaseSelectComponent {
28689
29082
  </div>
28690
29083
 
28691
29084
  @if (showPipelineBar() && pipelineSegments().length) {
28692
- <div class="pdx-inline-pipeline-bar" role="img" [attr.aria-label]="pipelineBarAriaLabel()">
29085
+ <div
29086
+ class="pdx-inline-pipeline-bar"
29087
+ role="img"
29088
+ [style.background]="pipelineGradient()"
29089
+ [attr.aria-label]="pipelineBarAriaLabel()"
29090
+ >
28693
29091
  @for (segment of pipelineSegments(); track segment.id) {
28694
29092
  <span
28695
29093
  class="pdx-inline-pipeline-segment"
@@ -28809,6 +29207,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
28809
29207
  [style.--pdx-inline-pipeline-max-w.px]="inlineMaxWidthPx || null"
28810
29208
  [style.--pdx-inline-pipeline-panel-min-w.px]="panelMinWidthPx || null"
28811
29209
  [style.--pdx-inline-pipeline-panel-max-w.px]="panelMaxWidthPx || null"
29210
+ [style.--pdx-inline-pipeline-gradient-low]="pipelineGradientLowColor()"
29211
+ [style.--pdx-inline-pipeline-gradient-mid]="pipelineGradientMidColor()"
29212
+ [style.--pdx-inline-pipeline-gradient-high]="pipelineGradientHighColor()"
28812
29213
  [matTooltip]="inlineTooltipText()"
28813
29214
  [matTooltipDisabled]="inlineTooltipDisabled()"
28814
29215
  [matTooltipPosition]="tooltipPosition()"
@@ -28894,7 +29295,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
28894
29295
  </div>
28895
29296
 
28896
29297
  @if (showPipelineBar() && pipelineSegments().length) {
28897
- <div class="pdx-inline-pipeline-bar" role="img" [attr.aria-label]="pipelineBarAriaLabel()">
29298
+ <div
29299
+ class="pdx-inline-pipeline-bar"
29300
+ role="img"
29301
+ [style.background]="pipelineGradient()"
29302
+ [attr.aria-label]="pipelineBarAriaLabel()"
29303
+ >
28898
29304
  @for (segment of pipelineSegments(); track segment.id) {
28899
29305
  <span
28900
29306
  class="pdx-inline-pipeline-segment"
@@ -29161,15 +29567,15 @@ class FilterInlineScorePriorityComponent extends FilterInlineRangeSliderComponen
29161
29567
  const visual = [];
29162
29568
  if (hasExplicitRanges) {
29163
29569
  rawBands
29164
- .map((band, index) => {
29570
+ .map((band) => {
29165
29571
  const start = this.scoreClampValue(this.scoreToFiniteNumber(band.start ?? band.from ?? band.min ?? band.valueStart) ?? min);
29166
29572
  const end = this.scoreClampValue(this.scoreToFiniteNumber(band.end ?? band.to ?? band.max ?? band.valueEnd) ?? max);
29167
- return { band, index, start: Math.min(start, end), end: Math.max(start, end) };
29573
+ return { band, start: Math.min(start, end), end: Math.max(start, end) };
29168
29574
  })
29169
29575
  .sort((a, b) => a.start - b.start)
29170
- .forEach(({ band, index, start, end }) => {
29576
+ .forEach(({ band, start, end }, sortedIndex) => {
29171
29577
  const safeEnd = end === start ? this.scoreClampValue(start + this.stepValue()) : end;
29172
- visual.push(this.scoreBuildBandVisual(band, index, start, Math.max(start, safeEnd), min, max));
29578
+ visual.push(this.scoreBuildBandVisual(band, sortedIndex, start, Math.max(start, safeEnd), min, max, rawBands.length));
29173
29579
  });
29174
29580
  }
29175
29581
  else {
@@ -29179,7 +29585,7 @@ class FilterInlineScorePriorityComponent extends FilterInlineRangeSliderComponen
29179
29585
  const end = index === rawBands.length - 1
29180
29586
  ? max
29181
29587
  : min + (span * (index + 1)) / rawBands.length;
29182
- visual.push(this.scoreBuildBandVisual(band, index, start, end, min, max));
29588
+ visual.push(this.scoreBuildBandVisual(band, index, start, end, min, max, rawBands.length));
29183
29589
  });
29184
29590
  }
29185
29591
  return visual;
@@ -29189,7 +29595,10 @@ class FilterInlineScorePriorityComponent extends FilterInlineRangeSliderComponen
29189
29595
  if (!bands.length) {
29190
29596
  const md = this.metadata() || {};
29191
29597
  const fallback = String(md.scoreEmptyGradient ?? md.priorityEmptyGradient ?? '').trim();
29192
- return fallback || 'linear-gradient(90deg, #6b7280 0%, #9ca3af 100%)';
29598
+ if (fallback.length) {
29599
+ return fallback;
29600
+ }
29601
+ return `linear-gradient(90deg, ${this.scoreGradientLowColor()} 0%, ${this.scoreGradientMidColor()} 50%, ${this.scoreGradientHighColor()} 100%)`;
29193
29602
  }
29194
29603
  return `linear-gradient(90deg, ${bands
29195
29604
  .map((band) => `${band.color} ${band.startPct.toFixed(2)}%, ${band.color} ${band.endPct.toFixed(2)}%`)
@@ -29376,7 +29785,7 @@ class FilterInlineScorePriorityComponent extends FilterInlineRangeSliderComponen
29376
29785
  }
29377
29786
  return { start, end };
29378
29787
  }
29379
- scoreBuildBandVisual(rawBand, index, start, end, min, max) {
29788
+ scoreBuildBandVisual(rawBand, index, start, end, min, max, totalBands) {
29380
29789
  const safeStart = this.scoreClampValue(start);
29381
29790
  const safeEnd = this.scoreClampValue(end);
29382
29791
  const label = String(rawBand.label ?? rawBand.name ?? rawBand.title ?? '').trim() ||
@@ -29384,7 +29793,7 @@ class FilterInlineScorePriorityComponent extends FilterInlineRangeSliderComponen
29384
29793
  const id = String(rawBand.id ?? rawBand.key ?? label.toLowerCase().replace(/\s+/g, '-')).trim() ||
29385
29794
  `score-band-${index}`;
29386
29795
  const color = String(rawBand.color ?? rawBand.toneColor ?? rawBand.backgroundColor ?? '').trim() ||
29387
- this.scoreFallbackColor(index);
29796
+ this.scoreFallbackColor(index, totalBands);
29388
29797
  const startPct = this.scoreRangeToPct(safeStart, min, max);
29389
29798
  const endPct = this.scoreRangeToPct(safeEnd, min, max);
29390
29799
  return {
@@ -29398,13 +29807,13 @@ class FilterInlineScorePriorityComponent extends FilterInlineRangeSliderComponen
29398
29807
  centerPct: (startPct + endPct) / 2,
29399
29808
  };
29400
29809
  }
29401
- scoreFallbackColor(index) {
29810
+ scoreFallbackColor(index, totalBands = 0) {
29402
29811
  const md = this.metadata() || {};
29403
29812
  const configured = this.parseColorList(md.scorePalette ?? md.priorityPalette ?? md.palette);
29404
- const palette = configured.length
29405
- ? configured
29406
- : ['#16a34a', '#f59e0b', '#0ea5e9', '#ef4444', '#8b5cf6', '#14b8a6'];
29407
- return palette[index % palette.length];
29813
+ if (configured.length) {
29814
+ return configured[index % configured.length];
29815
+ }
29816
+ return this.scoreGradientColorByIndex(index, Math.max(2, totalBands));
29408
29817
  }
29409
29818
  scoreParseBandsSource(source) {
29410
29819
  if (Array.isArray(source)) {
@@ -29514,7 +29923,27 @@ class FilterInlineScorePriorityComponent extends FilterInlineRangeSliderComponen
29514
29923
  scoreSelectedFallbackColor() {
29515
29924
  const md = this.metadata() || {};
29516
29925
  const configured = String(md.scoreValueFallbackColor ?? md.priorityValueFallbackColor ?? '').trim();
29517
- return configured || '#334155';
29926
+ return configured || this.scoreGradientMidColor();
29927
+ }
29928
+ scoreGradientLowColor() {
29929
+ const md = this.metadata() || {};
29930
+ return this.resolveColorToken(md.scoreGradientLowColor, md.priorityGradientLowColor, md.scoreToneLowColor, md.priorityToneLowColor) || '#16a34a';
29931
+ }
29932
+ scoreGradientMidColor() {
29933
+ const md = this.metadata() || {};
29934
+ return this.resolveColorToken(md.scoreGradientMidColor, md.priorityGradientMidColor, md.scoreToneMidColor, md.priorityToneMidColor) || '#f59e0b';
29935
+ }
29936
+ scoreGradientHighColor() {
29937
+ const md = this.metadata() || {};
29938
+ return this.resolveColorToken(md.scoreGradientHighColor, md.priorityGradientHighColor, md.scoreToneHighColor, md.priorityToneHighColor) || '#ef4444';
29939
+ }
29940
+ scoreGradientColorByIndex(index, total) {
29941
+ const safeTotal = Math.max(2, total);
29942
+ const ratio = safeTotal <= 1 ? 0 : index / (safeTotal - 1);
29943
+ return this.scoreGradientColorByRatio(ratio);
29944
+ }
29945
+ scoreGradientColorByRatio(ratio) {
29946
+ return interpolateThreeStopGradientColor(this.scoreGradientLowColor(), this.scoreGradientMidColor(), this.scoreGradientHighColor(), ratio);
29518
29947
  }
29519
29948
  resolveScoreText(configKey, fallback, ...legacyKeys) {
29520
29949
  const md = this.metadata() || {};
@@ -29591,6 +30020,15 @@ class FilterInlineScorePriorityComponent extends FilterInlineRangeSliderComponen
29591
30020
  const text = String(value ?? '').trim();
29592
30021
  return text.length ? text : null;
29593
30022
  }
30023
+ resolveColorToken(...values) {
30024
+ for (const value of values) {
30025
+ const text = String(value ?? '').trim();
30026
+ if (text.length) {
30027
+ return text;
30028
+ }
30029
+ }
30030
+ return null;
30031
+ }
29594
30032
  scoreRecalculateInlineSizeBounds() {
29595
30033
  const viewportWidth = typeof window !== 'undefined' ? window.innerWidth : 1280;
29596
30034
  const isMobile = viewportWidth <= 768;
@@ -30309,6 +30747,24 @@ class FilterInlineRelativePeriodComponent extends SimpleBaseSelectComponent {
30309
30747
  const percent = Math.round(this.progressPercent());
30310
30748
  return `${this.placeholderText()}: ${percent}%`;
30311
30749
  }
30750
+ progressGradientLowColor() {
30751
+ const md = this.metadata() || {};
30752
+ return this.resolveColorToken(md.relativePeriodProgressGradientLowColor, md.relativePeriodProgressLowColor) || '#64748b';
30753
+ }
30754
+ progressGradientMidColor() {
30755
+ const md = this.metadata() || {};
30756
+ return this.resolveColorToken(md.relativePeriodProgressGradientMidColor, md.relativePeriodProgressMidColor) || '#0ea5e9';
30757
+ }
30758
+ progressGradientHighColor() {
30759
+ const md = this.metadata() || {};
30760
+ return this.resolveColorToken(md.relativePeriodProgressGradientHighColor, md.relativePeriodProgressHighColor) || '#22c55e';
30761
+ }
30762
+ progressGradient() {
30763
+ const low = this.progressGradientLowColor();
30764
+ const mid = this.progressGradientMidColor();
30765
+ const high = this.progressGradientHighColor();
30766
+ return `linear-gradient(90deg, ${low} 0%, ${mid} 50%, ${high} 100%)`;
30767
+ }
30312
30768
  cardColumns() {
30313
30769
  const md = this.metadata() || {};
30314
30770
  const configured = Number(md.relativePeriodColumns ?? md.columns);
@@ -30549,6 +31005,15 @@ class FilterInlineRelativePeriodComponent extends SimpleBaseSelectComponent {
30549
31005
  const text = String(value ?? '').trim();
30550
31006
  return text.length ? text : null;
30551
31007
  }
31008
+ resolveColorToken(...values) {
31009
+ for (const value of values) {
31010
+ const text = String(value ?? '').trim();
31011
+ if (text.length) {
31012
+ return text;
31013
+ }
31014
+ }
31015
+ return null;
31016
+ }
30552
31017
  mapRawOption(option, index) {
30553
31018
  if (option && typeof option === 'object') {
30554
31019
  const label = String(option.label ?? option.text ?? option.name ?? option.title ?? '').trim();
@@ -30682,6 +31147,9 @@ class FilterInlineRelativePeriodComponent extends SimpleBaseSelectComponent {
30682
31147
  [style.--pdx-inline-relative-max-w.px]="inlineMaxWidthPx || null"
30683
31148
  [style.--pdx-inline-relative-panel-min-w.px]="panelMinWidthPx || null"
30684
31149
  [style.--pdx-inline-relative-panel-max-w.px]="panelMaxWidthPx || null"
31150
+ [style.--pdx-inline-relative-progress-gradient-low]="progressGradientLowColor()"
31151
+ [style.--pdx-inline-relative-progress-gradient-mid]="progressGradientMidColor()"
31152
+ [style.--pdx-inline-relative-progress-gradient-high]="progressGradientHighColor()"
30685
31153
  [matTooltip]="inlineTooltipText()"
30686
31154
  [matTooltipDisabled]="inlineTooltipDisabled()"
30687
31155
  [matTooltipPosition]="tooltipPosition()"
@@ -30769,7 +31237,11 @@ class FilterInlineRelativePeriodComponent extends SimpleBaseSelectComponent {
30769
31237
  @if (showProgressBar()) {
30770
31238
  <div class="pdx-inline-relative-progress" role="img" [attr.aria-label]="progressAriaLabel()">
30771
31239
  <span class="pdx-inline-relative-progress-track">
30772
- <span class="pdx-inline-relative-progress-fill" [style.width.%]="progressPercent()"></span>
31240
+ <span
31241
+ class="pdx-inline-relative-progress-fill"
31242
+ [style.width.%]="progressPercent()"
31243
+ [style.background]="progressGradient()"
31244
+ ></span>
30773
31245
  </span>
30774
31246
  <div class="pdx-inline-relative-progress-labels" aria-hidden="true">
30775
31247
  <span>{{ progressStartLabel() }}</span>
@@ -30841,6 +31313,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
30841
31313
  [style.--pdx-inline-relative-max-w.px]="inlineMaxWidthPx || null"
30842
31314
  [style.--pdx-inline-relative-panel-min-w.px]="panelMinWidthPx || null"
30843
31315
  [style.--pdx-inline-relative-panel-max-w.px]="panelMaxWidthPx || null"
31316
+ [style.--pdx-inline-relative-progress-gradient-low]="progressGradientLowColor()"
31317
+ [style.--pdx-inline-relative-progress-gradient-mid]="progressGradientMidColor()"
31318
+ [style.--pdx-inline-relative-progress-gradient-high]="progressGradientHighColor()"
30844
31319
  [matTooltip]="inlineTooltipText()"
30845
31320
  [matTooltipDisabled]="inlineTooltipDisabled()"
30846
31321
  [matTooltipPosition]="tooltipPosition()"
@@ -30928,7 +31403,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
30928
31403
  @if (showProgressBar()) {
30929
31404
  <div class="pdx-inline-relative-progress" role="img" [attr.aria-label]="progressAriaLabel()">
30930
31405
  <span class="pdx-inline-relative-progress-track">
30931
- <span class="pdx-inline-relative-progress-fill" [style.width.%]="progressPercent()"></span>
31406
+ <span
31407
+ class="pdx-inline-relative-progress-fill"
31408
+ [style.width.%]="progressPercent()"
31409
+ [style.background]="progressGradient()"
31410
+ ></span>
30932
31411
  </span>
30933
31412
  <div class="pdx-inline-relative-progress-labels" aria-hidden="true">
30934
31413
  <span>{{ progressStartLabel() }}</span>
@@ -31203,7 +31682,8 @@ class FilterInlineSentimentComponent extends SimpleBaseSelectComponent {
31203
31682
  return `${option.label}. ${option.subtitle}`;
31204
31683
  }
31205
31684
  sentimentOptions() {
31206
- return this.options().map((option, index) => this.toVisualOption(option, index));
31685
+ const optionPool = this.options();
31686
+ return optionPool.map((option, index) => this.toVisualOption(option, index, optionPool.length));
31207
31687
  }
31208
31688
  selectedOptions() {
31209
31689
  return this.sentimentOptions().filter((option) => option.selected);
@@ -31298,7 +31778,7 @@ class FilterInlineSentimentComponent extends SimpleBaseSelectComponent {
31298
31778
  return null;
31299
31779
  }
31300
31780
  }
31301
- toVisualOption(option, index) {
31781
+ toVisualOption(option, index, totalOptions = 0) {
31302
31782
  const raw = option;
31303
31783
  return {
31304
31784
  id: String(raw.id ?? raw.key ?? `sentiment-option-${index}`),
@@ -31306,7 +31786,7 @@ class FilterInlineSentimentComponent extends SimpleBaseSelectComponent {
31306
31786
  `Opcao ${index + 1}`,
31307
31787
  subtitle: String(raw.subtitle ?? raw.description ?? '').trim(),
31308
31788
  emoji: this.resolveOptionEmoji(raw),
31309
- color: this.resolveOptionColor(raw, index),
31789
+ color: this.resolveOptionColor(raw, index, totalOptions),
31310
31790
  value: option.value,
31311
31791
  disabled: !!option.disabled,
31312
31792
  selected: this.selectedValues().some((entry) => this.equalsOptionValue(entry, option.value)),
@@ -31324,7 +31804,7 @@ class FilterInlineSentimentComponent extends SimpleBaseSelectComponent {
31324
31804
  const fallback = String(raw.emoji ?? raw.iconText ?? '').trim();
31325
31805
  return fallback || '🙂';
31326
31806
  }
31327
- resolveOptionColor(raw, index) {
31807
+ resolveOptionColor(raw, index, totalOptions = 0) {
31328
31808
  const md = this.metadata() || {};
31329
31809
  const customKey = this.resolveMetadataKey(md.sentimentColorKey, md.optionColorKey);
31330
31810
  if (customKey) {
@@ -31341,8 +31821,15 @@ class FilterInlineSentimentComponent extends SimpleBaseSelectComponent {
31341
31821
  if (palette.length) {
31342
31822
  return palette[index % palette.length];
31343
31823
  }
31344
- const defaults = ['#d32f2f', '#f59e0b', '#9ca3af', '#34d399', '#14b8a6'];
31345
- return defaults[index % defaults.length];
31824
+ return this.sentimentGradientColorByIndex(index, Math.max(2, totalOptions));
31825
+ }
31826
+ sentimentGradientColorByIndex(index, totalOptions) {
31827
+ const safeTotal = Math.max(2, totalOptions);
31828
+ const ratio = safeTotal <= 1 ? 0 : index / (safeTotal - 1);
31829
+ return this.sentimentGradientColorByRatio(ratio);
31830
+ }
31831
+ sentimentGradientColorByRatio(ratio) {
31832
+ return interpolateThreeStopGradientColor(this.sentimentGradientLowColor(), this.sentimentGradientMidColor(), this.sentimentGradientHighColor(), ratio);
31346
31833
  }
31347
31834
  parseColorList(source) {
31348
31835
  if (Array.isArray(source)) {
@@ -31451,6 +31938,15 @@ class FilterInlineSentimentComponent extends SimpleBaseSelectComponent {
31451
31938
  const text = String(value ?? '').trim();
31452
31939
  return text.length ? text : null;
31453
31940
  }
31941
+ resolveColorToken(...values) {
31942
+ for (const value of values) {
31943
+ const text = String(value ?? '').trim();
31944
+ if (text.length) {
31945
+ return text;
31946
+ }
31947
+ }
31948
+ return null;
31949
+ }
31454
31950
  mapRawOption(option, index) {
31455
31951
  if (option && typeof option === 'object') {
31456
31952
  const label = String(option.label ?? option.text ?? option.name ?? option.title ?? '').trim();
@@ -31570,6 +32066,24 @@ class FilterInlineSentimentComponent extends SimpleBaseSelectComponent {
31570
32066
  multipleMode() {
31571
32067
  return this.multiple();
31572
32068
  }
32069
+ sentimentGradientLowColor() {
32070
+ const md = this.metadata() || {};
32071
+ return this.resolveColorToken(md.sentimentGradientLowColor, md.sentimentToneLowColor) || '#ef4444';
32072
+ }
32073
+ sentimentGradientMidColor() {
32074
+ const md = this.metadata() || {};
32075
+ return this.resolveColorToken(md.sentimentGradientMidColor, md.sentimentToneMidColor) || '#f59e0b';
32076
+ }
32077
+ sentimentGradientHighColor() {
32078
+ const md = this.metadata() || {};
32079
+ return this.resolveColorToken(md.sentimentGradientHighColor, md.sentimentToneHighColor) || '#22c55e';
32080
+ }
32081
+ sentimentGradient() {
32082
+ const low = this.sentimentGradientLowColor();
32083
+ const mid = this.sentimentGradientMidColor();
32084
+ const high = this.sentimentGradientHighColor();
32085
+ return `linear-gradient(90deg, ${low} 0%, ${mid} 50%, ${high} 100%)`;
32086
+ }
31573
32087
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: FilterInlineSentimentComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
31574
32088
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.17", type: FilterInlineSentimentComponent, isStandalone: true, selector: "pdx-filter-inline-sentiment", inputs: { readonlyMode: "readonlyMode", disabledMode: "disabledMode", visible: "visible", presentationMode: "presentationMode" }, host: { listeners: { "window:resize": "onViewportResize()", "document:keydown.escape": "onDocumentEscape()" }, properties: { "class": "componentCssClasses()", "class.praxis-disabled": "disabledMode", "style.display": "visible ? \"inline-block\" : \"none\"", "style.width": "\"auto\"", "style.maxWidth": "\"100%\"", "attr.data-field-type": "\"filter-sentiment-inline\"", "attr.data-field-name": "metadata()?.name", "attr.data-component-id": "componentId()" } }, providers: [
31575
32089
  {
@@ -31584,6 +32098,9 @@ class FilterInlineSentimentComponent extends SimpleBaseSelectComponent {
31584
32098
  [style.--pdx-inline-sentiment-max-w.px]="inlineMaxWidthPx || null"
31585
32099
  [style.--pdx-inline-sentiment-panel-min-w.px]="panelMinWidthPx || null"
31586
32100
  [style.--pdx-inline-sentiment-panel-max-w.px]="panelMaxWidthPx || null"
32101
+ [style.--pdx-inline-sentiment-gradient-low]="sentimentGradientLowColor()"
32102
+ [style.--pdx-inline-sentiment-gradient-mid]="sentimentGradientMidColor()"
32103
+ [style.--pdx-inline-sentiment-gradient-high]="sentimentGradientHighColor()"
31587
32104
  [matTooltip]="inlineTooltipText()"
31588
32105
  [matTooltipDisabled]="inlineTooltipDisabled()"
31589
32106
  [matTooltipPosition]="tooltipPosition()"
@@ -31669,7 +32186,12 @@ class FilterInlineSentimentComponent extends SimpleBaseSelectComponent {
31669
32186
  </div>
31670
32187
 
31671
32188
  @if (showSentimentBar() && sentimentOptions().length) {
31672
- <div class="pdx-inline-sentiment-bar" role="img" [attr.aria-label]="sentimentBarAriaLabel()">
32189
+ <div
32190
+ class="pdx-inline-sentiment-bar"
32191
+ role="img"
32192
+ [style.background]="sentimentGradient()"
32193
+ [attr.aria-label]="sentimentBarAriaLabel()"
32194
+ >
31673
32195
  @for (option of sentimentOptions(); track option.id) {
31674
32196
  <span
31675
32197
  class="pdx-inline-sentiment-segment"
@@ -31738,6 +32260,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
31738
32260
  [style.--pdx-inline-sentiment-max-w.px]="inlineMaxWidthPx || null"
31739
32261
  [style.--pdx-inline-sentiment-panel-min-w.px]="panelMinWidthPx || null"
31740
32262
  [style.--pdx-inline-sentiment-panel-max-w.px]="panelMaxWidthPx || null"
32263
+ [style.--pdx-inline-sentiment-gradient-low]="sentimentGradientLowColor()"
32264
+ [style.--pdx-inline-sentiment-gradient-mid]="sentimentGradientMidColor()"
32265
+ [style.--pdx-inline-sentiment-gradient-high]="sentimentGradientHighColor()"
31741
32266
  [matTooltip]="inlineTooltipText()"
31742
32267
  [matTooltipDisabled]="inlineTooltipDisabled()"
31743
32268
  [matTooltipPosition]="tooltipPosition()"
@@ -31823,7 +32348,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
31823
32348
  </div>
31824
32349
 
31825
32350
  @if (showSentimentBar() && sentimentOptions().length) {
31826
- <div class="pdx-inline-sentiment-bar" role="img" [attr.aria-label]="sentimentBarAriaLabel()">
32351
+ <div
32352
+ class="pdx-inline-sentiment-bar"
32353
+ role="img"
32354
+ [style.background]="sentimentGradient()"
32355
+ [attr.aria-label]="sentimentBarAriaLabel()"
32356
+ >
31827
32357
  @for (option of sentimentOptions(); track option.id) {
31828
32358
  <span
31829
32359
  class="pdx-inline-sentiment-segment"