carriera-intern 1.1.137 → 1.1.139

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.
@@ -180,6 +180,68 @@ const PDFJS_ASSET_BASE = new InjectionToken('PDFJS_ASSET_BASE', {
180
180
  factory: () => '/assets/pdfjs/',
181
181
  });
182
182
 
183
+ // Non-breaking space, so a grouped number never wraps across lines.
184
+ const NON_BREAKING_SPACE = ' ';
185
+ const NUMBER_FORMAT_SEPARATORS = {
186
+ DecimalPointCommaThousands: { thousands: ',', decimal: '.' },
187
+ DecimalCommaSpaceThousands: { thousands: NON_BREAKING_SPACE, decimal: ',' },
188
+ DecimalCommaPeriodThousands: { thousands: '.', decimal: ',' },
189
+ DecimalPointSpaceThousands: { thousands: NON_BREAKING_SPACE, decimal: '.' },
190
+ };
191
+ const DEFAULT_NUMBER_FORMAT = 'DecimalPointCommaThousands';
192
+
193
+ // Placeholders double as moment tokens, so a pattern joins into a moment format.
194
+ const DATE_PART_PLACEHOLDERS = {
195
+ month: 'MM',
196
+ day: 'DD',
197
+ year: 'YYYY',
198
+ shortYear: 'YY',
199
+ };
200
+ const DATE_FORMAT_PATTERNS = {
201
+ MmDdYyyy: { parts: ['month', 'day', 'year'], separator: '/' },
202
+ DdMmYyyy: { parts: ['day', 'month', 'year'], separator: '/' },
203
+ YyyyMmDd: { parts: ['year', 'month', 'day'], separator: '-' },
204
+ DdMmYyyyDot: { parts: ['day', 'month', 'year'], separator: '.' },
205
+ };
206
+ // Shown when no date format is set: the month-first date with a two digit year.
207
+ const DEFAULT_DATE_FORMAT_PATTERN = {
208
+ parts: ['month', 'day', 'shortYear'],
209
+ separator: '/',
210
+ };
211
+ const getDateFormatPattern = (dateFormat) => dateFormat ? DATE_FORMAT_PATTERNS[dateFormat] : DEFAULT_DATE_FORMAT_PATTERN;
212
+
213
+ // Moment formats of the time shown in the input.
214
+ const TIME_FORMAT_PATTERNS = {
215
+ TwelveHour: 'hh:mm A',
216
+ TwentyFourHour: 'HH:mm',
217
+ };
218
+ const DEFAULT_TIME_FORMAT = 'TwelveHour';
219
+
220
+ // National format, used when a phone input is not international.
221
+ const PHONE_MASK = '(000) 000-0000';
222
+ // Dial code prepended to a pasted number without a country code.
223
+ const DEFAULT_PHONE_DIAL_CODE = '1';
224
+ // Longest number allowed by E.164, country code included.
225
+ const PHONE_MAX_DIGITS = 15;
226
+ // Starter set. A dial code that is not listed gets the default format:
227
+ // country code, a space, then the national number in groups of three.
228
+ const PHONE_COUNTRIES = [
229
+ { dialCode: '1', mask: '+0 (000) 000-0000' }, // US, Canada
230
+ { dialCode: '44', mask: '+00 0000 000000' }, // United Kingdom
231
+ { dialCode: '52', mask: '+00 00 0000 0000' }, // Mexico
232
+ { dialCode: '381', mask: '+000 00 000 0000' }, // Serbia
233
+ ];
234
+ // Dial codes are prefix-free: a number starting with 1 or 7 has a one-digit
235
+ // code, one starting with any of these has a two-digit code, and every other
236
+ // code is three digits. That is enough to split off a code that is not listed.
237
+ // prettier-ignore
238
+ const PHONE_TWO_DIGIT_DIAL_CODES = [
239
+ '20', '27', '30', '31', '32', '33', '34', '36', '39', '40', '41', '43',
240
+ '44', '45', '46', '47', '48', '49', '51', '52', '53', '54', '55', '56',
241
+ '57', '58', '60', '61', '62', '63', '64', '65', '66', '81', '82', '84',
242
+ '86', '90', '91', '92', '93', '94', '95', '98',
243
+ ];
244
+
183
245
  class DocumentThumbnailHelper {
184
246
  static previewTargetWidth() {
185
247
  const ratio = Math.min(globalThis.devicePixelRatio || 1, 2);
@@ -260,6 +322,22 @@ const DropdownTypes = [
260
322
  'accident-truck',
261
323
  'accident-trailer',
262
324
  ];
325
+ const NumberFormats = [
326
+ 'DecimalPointCommaThousands', // 1,234.56
327
+ 'DecimalCommaSpaceThousands', // 1 234,56
328
+ 'DecimalCommaPeriodThousands', // 1.234,56
329
+ 'DecimalPointSpaceThousands', // 1 234.56
330
+ ];
331
+ const DateFormats = [
332
+ 'MmDdYyyy', // 10/02/2026
333
+ 'DdMmYyyy', // 02/10/2026
334
+ 'YyyyMmDd', // 2026-10-02
335
+ 'DdMmYyyyDot', // 02.10.2026
336
+ ];
337
+ const TimeFormats = [
338
+ 'TwelveHour', // 08:05 PM
339
+ 'TwentyFourHour', // 20:05
340
+ ];
263
341
  const sizes = [
264
342
  22, 26,
265
343
  // 34 For later versions when applicant is done
@@ -633,23 +711,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImpo
633
711
  }] });
634
712
 
635
713
  class NumberFormatPipe {
636
- transform(value) {
714
+ transform(value, numberFormat = DEFAULT_NUMBER_FORMAT) {
637
715
  if (!value)
638
716
  return '';
717
+ const { thousands, decimal } = NUMBER_FORMAT_SEPARATORS[numberFormat];
639
718
  if (value.includes('.')) {
640
719
  const [integerPart, decimalPart] = value.split('.');
641
720
  // Cap decimal places to maximum 2
642
721
  const cappedDecimalPart = decimalPart ? decimalPart.substring(0, 2) : '';
643
- // Format the integer part with commas
644
- const formattedInteger = integerPart.replace(/\B(?=(\d{3})+(?!\d))/g, ',');
722
+ // Format the integer part with thousands separators
723
+ const formattedInteger = integerPart.replace(/\B(?=(\d{3})+(?!\d))/g, thousands);
645
724
  // If there's a decimal part, show it (capped at 2 places)
646
725
  if (decimalPart !== undefined) {
647
- return `${formattedInteger}.${cappedDecimalPart}`;
726
+ return `${formattedInteger}${decimal}${cappedDecimalPart}`;
648
727
  }
649
728
  // If user just typed a decimal point, show it
650
- return `${formattedInteger}.`;
729
+ return `${formattedInteger}${decimal}`;
651
730
  }
652
- return value.replace(/\B(?=(\d{3})+(?!\d))/g, ',');
731
+ return value.replace(/\B(?=(\d{3})+(?!\d))/g, thousands);
653
732
  }
654
733
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NumberFormatPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
655
734
  static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.33", ngImport: i0, type: NumberFormatPipe, isStandalone: true, name: "numberFormat" });
@@ -663,8 +742,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImpo
663
742
 
664
743
  class ErrorMessagePipe {
665
744
  numberFormatPipe = new NumberFormatPipe();
666
- transform(errors, customErrors // custom error messages to be displayed in the input
667
- ) {
745
+ transform(errors, customErrors, // custom error messages to be displayed in the input
746
+ numberFormat) {
668
747
  if (!errors)
669
748
  return [];
670
749
  // Create a map of custom errors for quick lookup
@@ -678,8 +757,8 @@ class ErrorMessagePipe {
678
757
  required: () => 'Required',
679
758
  minlength: (value) => `${value.requiredLength} Characters Min`,
680
759
  maxlength: (value) => `${value.requiredLength} Characters Max`,
681
- min: (value) => `Min ${this.numberFormatPipe.transform(String(value.min))}`,
682
- max: (value) => `Max ${this.numberFormatPipe.transform(String(value.max))}`,
760
+ min: (value) => `Min ${this.numberFormatPipe.transform(String(value.min), numberFormat)}`,
761
+ max: (value) => `Max ${this.numberFormatPipe.transform(String(value.max), numberFormat)}`,
683
762
  hasUppercase: () => 'Must contain at least one uppercase letter',
684
763
  hasNumber: () => 'Must contain at least one number',
685
764
  hasSymbol: () => 'Must contain at least one symbol',
@@ -2141,6 +2220,78 @@ class MaskHelper {
2141
2220
  }
2142
2221
  }
2143
2222
 
2223
+ class PhoneHelper {
2224
+ static extractDigits(value) {
2225
+ return value.replace(/\D/g, '');
2226
+ }
2227
+ /**
2228
+ * Finds the country whose dial code the digits start with. Dial codes are
2229
+ * prefix-free, so at most one of the leading 1, 2 or 3 digits can match.
2230
+ */
2231
+ static findCountry(digits, countries) {
2232
+ for (let length = 1; length <= 3; length++) {
2233
+ const dialCode = digits.slice(0, length);
2234
+ const country = countries.find((c) => c.dialCode === dialCode);
2235
+ if (country)
2236
+ return country;
2237
+ }
2238
+ return undefined;
2239
+ }
2240
+ /**
2241
+ * Length of the dial code the digits start with, for codes that are not
2242
+ * in the lookup table.
2243
+ */
2244
+ static dialCodeLength(digits) {
2245
+ if (digits[0] === '1' || digits[0] === '7')
2246
+ return 1;
2247
+ return PHONE_TWO_DIGIT_DIAL_CODES.includes(digits.slice(0, 2)) ? 2 : 3;
2248
+ }
2249
+ /**
2250
+ * Picks the mask for the given digits.
2251
+ * @param digits The digits entered so far, country code included.
2252
+ * @param isInternational Whether the input takes a country code.
2253
+ * @param countries The dial code lookup table.
2254
+ * @returns The mask pattern to apply.
2255
+ */
2256
+ static resolveMask(digits, isInternational, countries) {
2257
+ if (!isInternational)
2258
+ return PHONE_MASK;
2259
+ const country = this.findCountry(digits, countries);
2260
+ if (country)
2261
+ return country.mask;
2262
+ const dialCodeLength = this.dialCodeLength(digits);
2263
+ const national = '0'
2264
+ .repeat(PHONE_MAX_DIGITS - dialCodeLength)
2265
+ .match(/.{1,3}/g)
2266
+ .join(' ');
2267
+ return `+${'0'.repeat(dialCodeLength)} ${national}`;
2268
+ }
2269
+ /**
2270
+ * Prepares a pasted number for the mask. Typed input never needs this:
2271
+ * the mask supplies the `+`, so it is always international.
2272
+ * @param value The raw text, before the mask strips it.
2273
+ * @param isInternational Whether the input takes a country code.
2274
+ * @param defaultDialCode Dial code for a number that has none.
2275
+ * @returns The digits to format.
2276
+ */
2277
+ static normalize(value, isInternational, defaultDialCode) {
2278
+ const raw = (value || '').trim();
2279
+ const digits = this.extractDigits(raw);
2280
+ if (!isInternational) {
2281
+ // A national number written with its country code, ex. +1 (202) 555-0123
2282
+ const hasDialCode = digits.startsWith(defaultDialCode) &&
2283
+ (raw.startsWith('+') || digits.length === defaultDialCode.length + 10);
2284
+ return hasDialCode ? digits.slice(defaultDialCode.length) : digits;
2285
+ }
2286
+ if (!digits || raw.startsWith('+'))
2287
+ return digits;
2288
+ if (raw.startsWith('00'))
2289
+ return digits.slice(2);
2290
+ // No country code: drop the trunk prefix and assume the default country
2291
+ return defaultDialCode + digits.replace(/^0+/, '');
2292
+ }
2293
+ }
2294
+
2144
2295
  class PasswordDirective {
2145
2296
  el;
2146
2297
  /**
@@ -2476,6 +2627,11 @@ class NumberFormatDirective {
2476
2627
  disableDecimals = input(false, ...(ngDevMode ? [{ debugName: "disableDecimals" }] : []));
2477
2628
  prefix = input('', ...(ngDevMode ? [{ debugName: "prefix" }] : []));
2478
2629
  clampToMax = input(false, ...(ngDevMode ? [{ debugName: "clampToMax" }] : []));
2630
+ /**
2631
+ * Thousands and decimal separators used to display and parse the value.
2632
+ * The real value always keeps '.' as its decimal separator.
2633
+ */
2634
+ numberFormat = input(...(ngDevMode ? [undefined, { debugName: "numberFormat" }] : []));
2479
2635
  /**
2480
2636
  * Stores the unformatted, "real" numeric value of the input.
2481
2637
  * This is the value that should be used for calculations or form submissions,
@@ -2484,6 +2640,19 @@ class NumberFormatDirective {
2484
2640
  realValue = '';
2485
2641
  constructor(el) {
2486
2642
  this.el = el;
2643
+ // Re-render the current value when the separators change
2644
+ effect(() => {
2645
+ this.numberFormat();
2646
+ if (this.appNumberFormat() && this.realValue !== '') {
2647
+ this.updateDisplayValue();
2648
+ }
2649
+ });
2650
+ }
2651
+ get resolvedNumberFormat() {
2652
+ return this.numberFormat() ?? DEFAULT_NUMBER_FORMAT;
2653
+ }
2654
+ get decimalSeparator() {
2655
+ return NUMBER_FORMAT_SEPARATORS[this.resolvedNumberFormat].decimal;
2487
2656
  }
2488
2657
  /**
2489
2658
  * Lifecycle hook that is called after Angular has initialized all data-bound
@@ -2522,7 +2691,7 @@ class NumberFormatDirective {
2522
2691
  const oldValue = input.value;
2523
2692
  const oldRealValue = this.realValue;
2524
2693
  const maxValue = this.max();
2525
- this.realValue = this.extractNumericValue(oldValue);
2694
+ this.realValue = this.extractDisplayedValue(oldValue);
2526
2695
  if (maxValue !== undefined && maxValue !== null) {
2527
2696
  const numericValue = Number(this.realValue);
2528
2697
  if (!Number.isNaN(numericValue) && numericValue > maxValue) {
@@ -2561,11 +2730,11 @@ class NumberFormatDirective {
2561
2730
  // If there's a selection
2562
2731
  event.preventDefault(); // Prevent default cut
2563
2732
  const cutText = input.value.slice(start, end);
2564
- event.clipboardData?.setData('text', this.extractNumericValue(cutText)); // Put numeric part on clipboard
2733
+ event.clipboardData?.setData('text', this.toClipboardValue(cutText)); // Put numeric part on clipboard
2565
2734
  // Reconstruct value without the cut part
2566
2735
  const oldValue = input.value;
2567
2736
  const valueAfterCut = input.value.slice(0, start) + input.value.slice(end);
2568
- this.realValue = this.extractNumericValue(valueAfterCut);
2737
+ this.realValue = this.extractDisplayedValue(valueAfterCut);
2569
2738
  this.updateDisplayValue();
2570
2739
  const newValue = input.value;
2571
2740
  const newCursorPos = this.calculateCursorPosition(start, oldValue, newValue);
@@ -2591,7 +2760,7 @@ class NumberFormatDirective {
2591
2760
  event.preventDefault(); // Prevent default copy
2592
2761
  const selectedText = input.value.slice(start, end);
2593
2762
  // Copy the underlying numeric value of the selection
2594
- event.clipboardData?.setData('text', this.extractNumericValue(selectedText));
2763
+ event.clipboardData?.setData('text', this.toClipboardValue(selectedText));
2595
2764
  }
2596
2765
  }
2597
2766
  /**
@@ -2624,8 +2793,8 @@ class NumberFormatDirective {
2624
2793
  event.altKey) {
2625
2794
  return; // Don't prevent default for these
2626
2795
  }
2627
- // Allow a single decimal point if not already present in the realValue
2628
- if (event.key === '.' &&
2796
+ // Allow a single decimal separator if not already present in the realValue
2797
+ if (event.key === this.decimalSeparator &&
2629
2798
  !this.realValue.includes('.') &&
2630
2799
  !this.disableDecimals()) {
2631
2800
  // If the input is empty or realValue is empty, prepend '0' before the decimal
@@ -2650,7 +2819,7 @@ class NumberFormatDirective {
2650
2819
  const afterSelection = currentValue.slice(end);
2651
2820
  const simulatedValue = beforeSelection + event.key + afterSelection;
2652
2821
  // Extract numeric value from simulated result
2653
- const simulatedNumericValue = this.extractNumericValue(simulatedValue);
2822
+ const simulatedNumericValue = this.extractDisplayedValue(simulatedValue);
2654
2823
  const simulatedNumber = Number(simulatedNumericValue);
2655
2824
  // Prevent if it would exceed max
2656
2825
  if (!Number.isNaN(simulatedNumber) && simulatedNumber > maxValue) {
@@ -2692,6 +2861,32 @@ class NumberFormatDirective {
2692
2861
  }
2693
2862
  return cleanValue;
2694
2863
  }
2864
+ /**
2865
+ * Extracts a clean numeric string from text shown in the input, where the
2866
+ * decimal separator is the one of the current number format.
2867
+ * @param value - The displayed text to clean.
2868
+ * @returns A string representing the extracted numeric value.
2869
+ */
2870
+ extractDisplayedValue(value) {
2871
+ const decimal = this.decimalSeparator;
2872
+ if (decimal === '.')
2873
+ return this.extractNumericValue(value);
2874
+ const normalized = value
2875
+ .split('')
2876
+ .filter((char) => /\d/.test(char) || char === decimal)
2877
+ .join('')
2878
+ .split(decimal)
2879
+ .join('.');
2880
+ return this.extractNumericValue(normalized);
2881
+ }
2882
+ /**
2883
+ * Numeric part of a displayed selection for the clipboard: no thousands
2884
+ * separators or prefix, decimal separator of the current number format so
2885
+ * it can be pasted back.
2886
+ */
2887
+ toClipboardValue(value) {
2888
+ return this.extractDisplayedValue(value).replace('.', this.decimalSeparator);
2889
+ }
2695
2890
  /**
2696
2891
  * Updates the input element's display value with the formatted version
2697
2892
  * of the current `realValue`.
@@ -2705,6 +2900,7 @@ class NumberFormatDirective {
2705
2900
  return;
2706
2901
  }
2707
2902
  let [integerPart, decimalPart] = this.realValue.split('.');
2903
+ const decimal = this.decimalSeparator;
2708
2904
  if (integerPart.length > 1) {
2709
2905
  integerPart = integerPart.replace(/^0+/, '') || '0';
2710
2906
  }
@@ -2713,20 +2909,20 @@ class NumberFormatDirective {
2713
2909
  formattedValue = integerPart;
2714
2910
  // Still add decimal part if it exists and formatting is not disabled
2715
2911
  if (this.realValue.endsWith('.')) {
2716
- formattedValue = formattedValue + '.';
2912
+ formattedValue = formattedValue + decimal;
2717
2913
  }
2718
2914
  else if (decimalPart !== undefined) {
2719
- formattedValue = formattedValue + '.' + decimalPart;
2915
+ formattedValue = formattedValue + decimal + decimalPart;
2720
2916
  }
2721
2917
  }
2722
2918
  else {
2723
2919
  // Use full formatting with NumberFormatPipe
2724
- const formattedInteger = new NumberFormatPipe().transform(integerPart);
2920
+ const formattedInteger = new NumberFormatPipe().transform(integerPart, this.resolvedNumberFormat);
2725
2921
  if (this.realValue.endsWith('.')) {
2726
- formattedValue = formattedInteger + '.';
2922
+ formattedValue = formattedInteger + decimal;
2727
2923
  }
2728
2924
  else if (decimalPart !== undefined) {
2729
- formattedValue = formattedInteger + '.' + decimalPart;
2925
+ formattedValue = formattedInteger + decimal + decimalPart;
2730
2926
  }
2731
2927
  else {
2732
2928
  formattedValue = formattedInteger;
@@ -2769,12 +2965,15 @@ class NumberFormatDirective {
2769
2965
  adjustedOldCursorPos = 0;
2770
2966
  // Count digits before cursor in old value (excluding prefix)
2771
2967
  const beforeCursor = oldValueWithoutPrefix.substring(0, adjustedOldCursorPos);
2772
- const digitsBeforeCursor = (beforeCursor.match(/[\d.]/g) || []).length;
2968
+ const decimal = this.decimalSeparator;
2969
+ const isSignificant = (char) => /\d/.test(char) || char === decimal;
2970
+ const digitsBeforeCursor = beforeCursor.split('').filter(isSignificant)
2971
+ .length;
2773
2972
  // Find position in new value where we have the same number of digits
2774
2973
  let digitCount = 0;
2775
2974
  let newCursorPos = prefixLength;
2776
2975
  for (let i = 0; i < newValueWithoutPrefix.length; i++) {
2777
- if (/[\d.]/.test(newValueWithoutPrefix[i])) {
2976
+ if (isSignificant(newValueWithoutPrefix[i])) {
2778
2977
  digitCount++;
2779
2978
  if (digitCount >= digitsBeforeCursor) {
2780
2979
  newCursorPos = prefixLength + i + 1;
@@ -2825,7 +3024,7 @@ class NumberFormatDirective {
2825
3024
  this.updateDisplayValue();
2826
3025
  }
2827
3026
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NumberFormatDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
2828
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.33", type: NumberFormatDirective, isStandalone: true, selector: "[appNumberFormat]", inputs: { appNumberFormat: { classPropertyName: "appNumberFormat", publicName: "appNumberFormat", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, isNumberFormattingDisabled: { classPropertyName: "isNumberFormattingDisabled", publicName: "isNumberFormattingDisabled", isSignal: true, isRequired: false, transformFunction: null }, disableDecimals: { classPropertyName: "disableDecimals", publicName: "disableDecimals", isSignal: true, isRequired: false, transformFunction: null }, prefix: { classPropertyName: "prefix", publicName: "prefix", isSignal: true, isRequired: false, transformFunction: null }, clampToMax: { classPropertyName: "clampToMax", publicName: "clampToMax", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "input": "onInput($event)", "cut": "onCut($event)", "copy": "onCopy($event)", "keydown": "onKeydown($event)" } }, providers: [NumberFormatPipe], ngImport: i0 });
3027
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.33", type: NumberFormatDirective, isStandalone: true, selector: "[appNumberFormat]", inputs: { appNumberFormat: { classPropertyName: "appNumberFormat", publicName: "appNumberFormat", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, isNumberFormattingDisabled: { classPropertyName: "isNumberFormattingDisabled", publicName: "isNumberFormattingDisabled", isSignal: true, isRequired: false, transformFunction: null }, disableDecimals: { classPropertyName: "disableDecimals", publicName: "disableDecimals", isSignal: true, isRequired: false, transformFunction: null }, prefix: { classPropertyName: "prefix", publicName: "prefix", isSignal: true, isRequired: false, transformFunction: null }, clampToMax: { classPropertyName: "clampToMax", publicName: "clampToMax", isSignal: true, isRequired: false, transformFunction: null }, numberFormat: { classPropertyName: "numberFormat", publicName: "numberFormat", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "input": "onInput($event)", "cut": "onCut($event)", "copy": "onCopy($event)", "keydown": "onKeydown($event)" } }, providers: [NumberFormatPipe], ngImport: i0 });
2829
3028
  }
2830
3029
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: NumberFormatDirective, decorators: [{
2831
3030
  type: Directive,
@@ -2833,7 +3032,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImpo
2833
3032
  selector: '[appNumberFormat]',
2834
3033
  providers: [NumberFormatPipe],
2835
3034
  }]
2836
- }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { appNumberFormat: [{ type: i0.Input, args: [{ isSignal: true, alias: "appNumberFormat", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], isNumberFormattingDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "isNumberFormattingDisabled", required: false }] }], disableDecimals: [{ type: i0.Input, args: [{ isSignal: true, alias: "disableDecimals", required: false }] }], prefix: [{ type: i0.Input, args: [{ isSignal: true, alias: "prefix", required: false }] }], clampToMax: [{ type: i0.Input, args: [{ isSignal: true, alias: "clampToMax", required: false }] }], onInput: [{
3035
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { appNumberFormat: [{ type: i0.Input, args: [{ isSignal: true, alias: "appNumberFormat", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], isNumberFormattingDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "isNumberFormattingDisabled", required: false }] }], disableDecimals: [{ type: i0.Input, args: [{ isSignal: true, alias: "disableDecimals", required: false }] }], prefix: [{ type: i0.Input, args: [{ isSignal: true, alias: "prefix", required: false }] }], clampToMax: [{ type: i0.Input, args: [{ isSignal: true, alias: "clampToMax", required: false }] }], numberFormat: [{ type: i0.Input, args: [{ isSignal: true, alias: "numberFormat", required: false }] }], onInput: [{
2837
3036
  type: HostListener,
2838
3037
  args: ['input', ['$event']]
2839
3038
  }], onCut: [{
@@ -2860,11 +3059,29 @@ class MaskDirective {
2860
3059
  appMask = input('', ...(ngDevMode ? [{ debugName: "appMask" }] : []));
2861
3060
  reveal = input(0, ...(ngDevMode ? [{ debugName: "reveal" }] : []));
2862
3061
  hide = input(0, ...(ngDevMode ? [{ debugName: "hide" }] : []));
3062
+ /**
3063
+ * Whether the input is a phone number. The mask is then picked from the
3064
+ * digits entered instead of `appMask`.
3065
+ */
3066
+ phone = input(false, ...(ngDevMode ? [{ debugName: "phone" }] : []));
3067
+ /**
3068
+ * Whether a phone input takes a country code and is formatted by country.
3069
+ * Otherwise it is a national number, ex. (000) 000-0000.
3070
+ */
3071
+ isInternational = input(false, ...(ngDevMode ? [{ debugName: "isInternational" }] : []));
3072
+ phoneCountries = input(undefined, ...(ngDevMode ? [{ debugName: "phoneCountries" }] : []));
3073
+ defaultDialCode = input(undefined, ...(ngDevMode ? [{ debugName: "defaultDialCode" }] : []));
2863
3074
  /**
2864
3075
  * Stores the unmasked, "real" value of the input, containing only
2865
3076
  * the characters entered by the user that fit the mask placeholders.
2866
3077
  */
2867
3078
  realValue = '';
3079
+ /**
3080
+ * Text of a paste that replaces the whole phone value, kept until the
3081
+ * 'input' event that follows so its country code can be read before the
3082
+ * mask strips it.
3083
+ */
3084
+ pastedPhone = null;
2868
3085
  constructor(el) {
2869
3086
  this.el = el;
2870
3087
  }
@@ -2875,8 +3092,23 @@ class MaskDirective {
2875
3092
  isHandledByPassword() {
2876
3093
  return this.reveal() !== 0 || this.hide() !== 0;
2877
3094
  }
3095
+ isMasked() {
3096
+ return !!this.appMask() || this.phone();
3097
+ }
3098
+ /**
3099
+ * The mask for the given user input. Phone inputs resolve it from the
3100
+ * digits, so the format follows the country code as it is entered.
3101
+ */
3102
+ resolveMask(realValue) {
3103
+ if (!this.phone())
3104
+ return this.appMask();
3105
+ return PhoneHelper.resolveMask(realValue, this.isInternational(), this.phoneCountries() ?? PHONE_COUNTRIES);
3106
+ }
3107
+ normalizePhone(value) {
3108
+ return PhoneHelper.normalize(value, this.isInternational(), this.defaultDialCode() ?? DEFAULT_PHONE_DIAL_CODE);
3109
+ }
2878
3110
  ngOnInit() {
2879
- if (this.appMask() && this.el.nativeElement.value) {
3111
+ if (this.isMasked() && this.el.nativeElement.value) {
2880
3112
  this.formatValue(this.el.nativeElement.value);
2881
3113
  this.setCursorToEnd();
2882
3114
  }
@@ -2886,9 +3118,15 @@ class MaskDirective {
2886
3118
  * formatting the value as the user types or pastes.
2887
3119
  */
2888
3120
  onInput(event) {
2889
- if (!this.appMask() || this.isHandledByPassword())
3121
+ if (!this.isMasked() || this.isHandledByPassword())
2890
3122
  return;
2891
3123
  const input = this.el.nativeElement;
3124
+ if (this.pastedPhone !== null) {
3125
+ this.formatValue(this.normalizePhone(this.pastedPhone));
3126
+ this.pastedPhone = null;
3127
+ this.setCursorToEnd();
3128
+ return;
3129
+ }
2892
3130
  const cursorPosition = input.selectionStart || 0;
2893
3131
  const oldValue = input.value;
2894
3132
  this.formatValue(input.value);
@@ -2901,8 +3139,18 @@ class MaskDirective {
2901
3139
  * cleans it, and integrates it into the masked value.
2902
3140
  */
2903
3141
  onPaste(event) {
2904
- if (!this.appMask())
3142
+ if (!this.isMasked())
2905
3143
  return;
3144
+ if (this.phone()) {
3145
+ const input = this.el.nativeElement;
3146
+ const replacesValue = (input.selectionStart || 0) === 0 &&
3147
+ (input.selectionEnd || 0) === input.value.length;
3148
+ if (replacesValue) {
3149
+ this.pastedPhone = event.clipboardData?.getData('text') ?? null;
3150
+ // Dropped if the paste is cancelled and no 'input' event follows
3151
+ setTimeout(() => (this.pastedPhone = null));
3152
+ }
3153
+ }
2906
3154
  //event.preventDefault();
2907
3155
  //const pastedData = event.clipboardData?.getData('text') || '';
2908
3156
  //this.formatValue(this.realValue + pastedData);
@@ -2913,7 +3161,7 @@ class MaskDirective {
2913
3161
  * from the input copies the unmasked, "real" value.
2914
3162
  */
2915
3163
  onCopy(event) {
2916
- if (!this.appMask() || this.isHandledByPassword())
3164
+ if (!this.isMasked() || this.isHandledByPassword())
2917
3165
  return;
2918
3166
  const selection = this.el.nativeElement.value.substring(this.el.nativeElement.selectionStart || 0, this.el.nativeElement.selectionEnd || 0);
2919
3167
  if (selection) {
@@ -2928,7 +3176,7 @@ class MaskDirective {
2928
3176
  * the corresponding part from the real value and reformats the input.
2929
3177
  */
2930
3178
  onCut(event) {
2931
- if (!this.appMask() || this.isHandledByPassword())
3179
+ if (!this.isMasked() || this.isHandledByPassword())
2932
3180
  return;
2933
3181
  const input = this.el.nativeElement;
2934
3182
  const start = input.selectionStart || 0;
@@ -2953,8 +3201,7 @@ class MaskDirective {
2953
3201
  * the mask pattern, preventing invalid characters from being entered.
2954
3202
  */
2955
3203
  onKeydown(event) {
2956
- const mask = this.appMask();
2957
- if (!mask)
3204
+ if (!this.isMasked())
2958
3205
  return;
2959
3206
  const controlKeys = [
2960
3207
  'Backspace',
@@ -2970,6 +3217,8 @@ class MaskDirective {
2970
3217
  if (controlKeys.includes(event.key) || event.metaKey || event.ctrlKey) {
2971
3218
  return;
2972
3219
  }
3220
+ // A phone mask can change with the digit being typed
3221
+ const mask = this.resolveMask(/^\d$/.test(event.key) ? this.realValue + event.key : this.realValue);
2973
3222
  const placeholders = mask.replace(/[^0a*]/g, '');
2974
3223
  const selectionStart = this.el.nativeElement.selectionStart || 0;
2975
3224
  const selectionEnd = this.el.nativeElement.selectionEnd || 0;
@@ -3002,10 +3251,12 @@ class MaskDirective {
3002
3251
  * @param value The current value from the input field.
3003
3252
  */
3004
3253
  formatValue(value) {
3005
- const mask = this.appMask();
3006
- if (!mask)
3254
+ if (!this.isMasked())
3007
3255
  return;
3008
- const extractedValue = MaskHelper.extractUserInput(value);
3256
+ const extractedValue = this.phone()
3257
+ ? PhoneHelper.extractDigits(value)
3258
+ : MaskHelper.extractUserInput(value);
3259
+ const mask = this.resolveMask(extractedValue);
3009
3260
  const { formattedValue, finalRealValue } = MaskHelper.applyMask(extractedValue, mask);
3010
3261
  this.realValue = finalRealValue;
3011
3262
  this.el.nativeElement.value = formattedValue;
@@ -3066,7 +3317,7 @@ class MaskDirective {
3066
3317
  * @param value The new value to set.
3067
3318
  */
3068
3319
  setRealValue(value) {
3069
- if (this.appMask()) {
3320
+ if (this.isMasked()) {
3070
3321
  this.formatValue(value || '');
3071
3322
  this.setCursorToEnd();
3072
3323
  }
@@ -3075,14 +3326,14 @@ class MaskDirective {
3075
3326
  }
3076
3327
  }
3077
3328
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: MaskDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
3078
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.33", type: MaskDirective, isStandalone: true, selector: "[appMask]", inputs: { appMask: { classPropertyName: "appMask", publicName: "appMask", isSignal: true, isRequired: false, transformFunction: null }, reveal: { classPropertyName: "reveal", publicName: "reveal", isSignal: true, isRequired: false, transformFunction: null }, hide: { classPropertyName: "hide", publicName: "hide", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "input": "onInput($event)", "paste": "onPaste($event)", "copy": "onCopy($event)", "cut": "onCut($event)", "keydown": "onKeydown($event)" } }, ngImport: i0 });
3329
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.33", type: MaskDirective, isStandalone: true, selector: "[appMask]", inputs: { appMask: { classPropertyName: "appMask", publicName: "appMask", isSignal: true, isRequired: false, transformFunction: null }, reveal: { classPropertyName: "reveal", publicName: "reveal", isSignal: true, isRequired: false, transformFunction: null }, hide: { classPropertyName: "hide", publicName: "hide", isSignal: true, isRequired: false, transformFunction: null }, phone: { classPropertyName: "phone", publicName: "phone", isSignal: true, isRequired: false, transformFunction: null }, isInternational: { classPropertyName: "isInternational", publicName: "isInternational", isSignal: true, isRequired: false, transformFunction: null }, phoneCountries: { classPropertyName: "phoneCountries", publicName: "phoneCountries", isSignal: true, isRequired: false, transformFunction: null }, defaultDialCode: { classPropertyName: "defaultDialCode", publicName: "defaultDialCode", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "input": "onInput($event)", "paste": "onPaste($event)", "copy": "onCopy($event)", "cut": "onCut($event)", "keydown": "onKeydown($event)" } }, ngImport: i0 });
3079
3330
  }
3080
3331
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: MaskDirective, decorators: [{
3081
3332
  type: Directive,
3082
3333
  args: [{
3083
3334
  selector: '[appMask]',
3084
3335
  }]
3085
- }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { appMask: [{ type: i0.Input, args: [{ isSignal: true, alias: "appMask", required: false }] }], reveal: [{ type: i0.Input, args: [{ isSignal: true, alias: "reveal", required: false }] }], hide: [{ type: i0.Input, args: [{ isSignal: true, alias: "hide", required: false }] }], onInput: [{
3336
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { appMask: [{ type: i0.Input, args: [{ isSignal: true, alias: "appMask", required: false }] }], reveal: [{ type: i0.Input, args: [{ isSignal: true, alias: "reveal", required: false }] }], hide: [{ type: i0.Input, args: [{ isSignal: true, alias: "hide", required: false }] }], phone: [{ type: i0.Input, args: [{ isSignal: true, alias: "phone", required: false }] }], isInternational: [{ type: i0.Input, args: [{ isSignal: true, alias: "isInternational", required: false }] }], phoneCountries: [{ type: i0.Input, args: [{ isSignal: true, alias: "phoneCountries", required: false }] }], defaultDialCode: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultDialCode", required: false }] }], onInput: [{
3086
3337
  type: HostListener,
3087
3338
  args: ['input', ['$event']]
3088
3339
  }], onPaste: [{
@@ -3821,7 +4072,8 @@ class InputComponent {
3821
4072
  onRealValueChange(event) {
3822
4073
  this.value.set(event.detail);
3823
4074
  this.searchValue.set(event.detail);
3824
- if (this.config().type === 'number') {
4075
+ // An empty number input stays empty (null) instead of becoming 0
4076
+ if (this.config().type === 'number' && event.detail !== '') {
3825
4077
  this.dispatchOnChange(Number(event.detail));
3826
4078
  return;
3827
4079
  }
@@ -3996,7 +4248,8 @@ class InputComponent {
3996
4248
  if (!this.inputRef || !this.inputRef.nativeElement) {
3997
4249
  return;
3998
4250
  }
3999
- let type = !!this.config().mask && !this.isPartiallyMasked()
4251
+ let type = (!!this.config().mask || this.config().type === 'phone') &&
4252
+ !this.isPartiallyMasked()
4000
4253
  ? 'masked'
4001
4254
  : this.config().type;
4002
4255
  if ((type === 'password' || type === 'account') &&
@@ -4543,9 +4796,9 @@ class InputComponent {
4543
4796
  }
4544
4797
  }
4545
4798
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: InputComponent, deps: [{ token: i1.NgControl, optional: true, self: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
4546
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: InputComponent, isStandalone: true, selector: "cai-input", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, preselectedOptions: { classPropertyName: "preselectedOptions", publicName: "preselectedOptions", isSignal: true, isRequired: false, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null }, hideValidation: { classPropertyName: "hideValidation", publicName: "hideValidation", isSignal: true, isRequired: false, transformFunction: null }, showNoResults: { classPropertyName: "showNoResults", publicName: "showNoResults", isSignal: true, isRequired: false, transformFunction: null }, preselectedUnit: { classPropertyName: "preselectedUnit", publicName: "preselectedUnit", isSignal: true, isRequired: false, transformFunction: null }, unassignedCount: { classPropertyName: "unassignedCount", publicName: "unassignedCount", isSignal: true, isRequired: false, transformFunction: null }, forceInvalidStyling: { classPropertyName: "forceInvalidStyling", publicName: "forceInvalidStyling", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onBlur: "onBlur", onFocused: "onFocused", onReset: "onReset", onValueChange: "onValueChange", onOptionAdded: "onOptionAdded", onAdd: "onAdd", onSelectionChange: "onSelectionChange", onSelectedObject: "onSelectedObject", onSelectedGroup: "onSelectedGroup", onClear: "onClear", onAutofill: "onAutofill", onScrolledToBottom: "onScrolledToBottom", onScrolledToBottomGroup: "onScrolledToBottomGroup", onSearch: "onSearch", onValueAdded: "onValueAdded", onRemove: "onRemove", onHoverRemove: "onHoverRemove" }, host: { listeners: { "realValueChange": "onRealValueChange($event)" } }, viewQueries: [{ propertyName: "inputRef", first: true, predicate: ["inputRef"], descendants: true }, { propertyName: "containerRef", first: true, predicate: ["containerRef"], descendants: true }, { propertyName: "dropdown", first: true, predicate: ["dropdown"], descendants: true }, { propertyName: "closeTooltip", first: true, predicate: ["closeTooltip"], descendants: true }, { propertyName: "PasswordDirective", first: true, predicate: PasswordDirective, descendants: true }, { propertyName: "NumberFormatDirective", first: true, predicate: NumberFormatDirective, descendants: true }, { propertyName: "MaskDirective", first: true, predicate: MaskDirective, descendants: true }], ngImport: i0, template: "<!-- #region Variables -->\n@let valid =\n ngControl?.valid &&\n (ngControl?.touched || ngControl?.dirty) &&\n !isAdding() &&\n !isDisabled();\n@let invalid =\n ngControl?.invalid &&\n (ngControl?.touched || ngControl?.dirty) &&\n !isAdding() &&\n !isDisabled();\n@let subcontent =\n config().subcontent ||\n (config().dropdown === \"subcontent\" &&\n selectedOption() &&\n cast(selectedOption(), \"dropdownOption\")![config().optionLabel || \"label\"]);\n\n@let name = config().name;\n@let password = config().type === \"password\" || config().type === \"account\";\n\n@let optionLabel = this.config().optionLabel || \"label\";\n@let dropdownType = this.config().dropdown;\n\n@let focusedOptionIndex = keyboardNavigationState().singleIndex;\n@let groupedNavigationState = keyboardNavigationState().groupedNavigationState;\n\n@let tooltipClass =\n config().inverse\n ? \"tooltip input-tooltip tooltip-bg-white-700 tooltip-text-black-500\"\n : \"tooltip input-tooltip\";\n\n<!-- #region Multiple selection -->\n@if (config().dropdown === \"multiple\" && !!multipleSelectedOptions().length) {\n <div\n (pointerdown)=\"focus($event)\"\n (mouseenter)=\"toggleHovered(true)\"\n (mouseleave)=\"toggleHovered(false)\"\n class=\"multiple-container\"\n [class]=\"{\n focused: focused(),\n hovered: hovered(),\n }\"\n >\n <label class=\"multiple-label\">{{ name }}</label>\n\n @for (option of multipleSelectedOptions(); track $index) {\n <div class=\"multiple-selected\">\n <p>{{ cast(option, \"dropdownOption\")![optionLabel || \"label\"] }}</p>\n <button\n type=\"button\"\n class=\"\"\n (pointerdown)=\"handleOption(option, $event)\"\n [tabIndex]=\"-1\"\n ngbTooltip=\"Clear\"\n [placement]=\"'top'\"\n [tooltipClass]=\"tooltipClass\"\n [autoClose]=\"true\"\n #closeTooltip=\"ngbTooltip\"\n [container]=\"'body'\"\n >\n <svg-icon\n name=\"cai-cancel\"\n class=\"multiple-remove-button multiple-remove-icon bg-icon\"\n ></svg-icon>\n </button>\n </div>\n }\n </div>\n}\n<!-- #endregion -->\n\n@let hasFloatingError =\n invalid &&\n (config().errorBehavior === \"floating\" ||\n (!!config().inTable && config().placeholderBehavior !== \"static\"));\n\n<div\n class=\"app-input-container\"\n [class]=\"\n {\n config: config(),\n hideValidation: hideValidation(),\n isPasswordVisible: visible(),\n isInvalid: !!invalid || forceInvalidStyling(),\n isValid: !!valid && !forceInvalidStyling(),\n isHovered: hovered(),\n hasText: hasText(),\n isAdding: isAdding(),\n selectedOption: selectedOption(),\n } | inputClass\n \"\n ngbDropdown\n [autoClose]=\"false\"\n #dropdown=\"ngbDropdown\"\n dropdownClass=\"cai-dropdown\"\n #containerRef\n [ngbTooltip]=\"errorTooltip\"\n [disableTooltip]=\"!hasFloatingError\"\n [container]=\"'body'\"\n [placement]=\"['bottom', 'top']\"\n tooltipClass=\"tooltip tooltip-bg-red-500 input-tooltip \"\n (pointerdown)=\"focus($event)\"\n (mouseenter)=\"dropdownType === 'multiple' && toggleHovered(true)\"\n (mouseleave)=\"dropdownType === 'multiple' && toggleHovered(false)\"\n>\n @if (config().icon && !password && !config().withButtons) {\n <div\n class=\"icon-container\"\n (pointerdown)=\"focus($event)\"\n [class]=\"{\n 'colored-icon': config().iconColor,\n }\"\n [style.--icon-color]=\"config().iconColor || ''\"\n >\n <svg-icon class=\"icon\" [name]=\"config().icon || ''\"></svg-icon>\n @if (!config().noSeparator) {\n <div class=\"separator\"></div>\n }\n </div>\n }\n @if (password) {\n <div class=\"icon-container\" (pointerdown)=\"toggleVisibility($event)\">\n <div\n class=\"password-icons\"\n [ngbTooltip]=\"passwordTooltip\"\n [container]=\"'body'\"\n [tooltipClass]=\"tooltipClass\"\n [autoClose]=\"true\"\n [placement]=\"'top'\"\n [openDelay]=\"600\"\n >\n <svg-icon\n class=\"icon password-key hover-icon\"\n name=\"cai-password-key\"\n ></svg-icon>\n <svg-icon\n class=\"icon password-shown hover-icon\"\n name=\"cai-password-shown\"\n ></svg-icon>\n <svg-icon\n class=\"icon password-hidden hover-icon\"\n name=\"cai-password-hidden\"\n ></svg-icon>\n </div>\n <div class=\"separator\"></div>\n </div>\n }\n\n <input\n class=\"app-input\"\n [tabindex]=\"isDisabled() ? '-1' : '0'\"\n [type]=\"\n password && !isPartiallyMasked()\n ? visible()\n ? 'text'\n : 'password'\n : 'text'\n \"\n [required]=\"config().required\"\n [disabled]=\"isDisabled()\"\n (input)=\"onInput($event)\"\n (blur)=\"dispatchOnBlur()\"\n [id]=\"id()\"\n [attr.aria-label]=\"config().label\"\n [attr.name]=\"\n config().autocomplete ? config().autocomplete : randomAutocomplete()\n \"\n [placeholder]=\"config()?.placeholder || ''\"\n [autocomplete]=\"\n config().autocomplete ? config().autocomplete : randomAutocomplete()\n \"\n #inputRef\n [appPassword]=\"password\"\n [appMask]=\"config().mask || ''\"\n [appNumberRangeList]=\"config().numberRangeList || false\"\n [reveal]=\"config().reveal || 0\"\n [hide]=\"config().hide || 0\"\n [account]=\"config().type === 'account'\"\n [visible]=\"visible()\"\n [appNumberFormat]=\"config().type === 'number'\"\n [isNumberFormattingDisabled]=\"config().isNumberFormattingDisabled || false\"\n [disableDecimals]=\"config().disableDecimals || false\"\n [prefix]=\"config().prefix || ''\"\n [max]=\"config().max\"\n [clampToMax]=\"config().clampToMax || false\"\n (keydown)=\"handleKeydown($event)\"\n (focus)=\"onFocus($event)\"\n />\n @if (\n !(dropdownType === \"multiple\" && !!multipleSelectedOptions().length) &&\n config().placeholderBehavior !== \"hidden\"\n ) {\n <label\n class=\"app-input-label\"\n [class.placeholder-color]=\"this.config().placeholderColor\"\n [style.--placeholder-color]=\"this.config().placeholderColor || ''\"\n (click)=\"focus($event)\"\n >\n <!-- Truck Trailer Driver Dropdown label -->\n @if (dropdownType === \"dispatch\" || dropdownType === \"ftl-dispatch\") {\n <p class=\"truck-item app-input-name\">Truck</p>\n <p class=\"trailer-item\">Trailer</p>\n <p>Driver</p>\n <p class=\"sub-label\">Rate</p>\n }\n <!-- Split Load -->\n @else if (dropdownType === \"split-driver\") {\n <p class=\"app-input-name\">{{ name }}</p>\n <p class=\"sub-label\">Rate</p>\n } @else if (\n dropdownType === \"split-truck\" || dropdownType === \"split-trailer\"\n ) {\n <p class=\"app-input-name\">{{ name }}</p>\n <p class=\"sub-label\">Location</p>\n }\n <!-- Dropdown variants -->\n @else if (dropdownType === \"broker\") {\n <p class=\"app-input-name\">{{ name }}</p>\n <p class=\"sub-label\">Credit</p>\n } @else if (dropdownType === \"contact\") {\n <p class=\"app-input-name\">{{ name }}</p>\n <p class=\"sub-label\">Phone</p>\n } @else if (dropdownType === \"shipper\") {\n <p class=\"app-input-name\">{{ name }}</p>\n <p class=\"sub-label\">Address</p>\n } @else if (dropdownType === \"owner\") {\n <p class=\"owner-ein app-input-name\">EIN</p>\n <p class=\"app-input-name\">Company Name</p>\n } @else if (dropdownType === \"fuelcard\") {\n <p class=\"fuelcard-number app-input-name\">Card No.</p>\n <p class=\"fuelcard-brand app-input-name\">Provider</p>\n <p class=\"app-input-name\">Nickname</p>\n }\n <!-- Accident -->\n @else if (dropdownType === \"accident-driver\") {\n <p class=\"accident-name app-input-name\">{{ name }}</p>\n <p class=\"accident-dob app-input-name\">DOB</p>\n <p class=\"accident-cdl-number app-input-name\">CDL No.</p>\n <p class=\"accident-state app-input-name\">CDL State</p>\n } @else if (\n dropdownType === \"accident-truck\" || dropdownType === \"accident-trailer\"\n ) {\n <p class=\"accident-unit app-input-name\">{{ name }}</p>\n <p class=\"accident-vin app-input-name\">VIN</p>\n <p class=\"accident-plate app-input-name\">Lic. Plate No.</p>\n <p class=\"accident-state app-input-name\">Lic. State</p>\n }\n <!-- Default Dropdown label -->\n @else {\n <span class=\"app-input-name\">{{ name }}</span>\n }\n </label>\n }\n @if (config().type === \"number\" && config().withButtons) {\n <div class=\"number-container\">\n <div class=\"number-buttons\">\n <div class=\"separator\"></div>\n <div\n class=\"plus-button-container\"\n ngbTooltip=\"Add\"\n [tooltipClass]=\"tooltipClass\"\n [container]=\"'body'\"\n [autoClose]=\"true\"\n [openDelay]=\"600\"\n [placement]=\"'top'\"\n (pointerdown)=\"increment($event)\"\n >\n <svg-icon name=\"cai-plus\" class=\"bg-icon plus-icon\"></svg-icon>\n </div>\n <div\n class=\"minus-button-container\"\n ngbTooltip=\"Remove\"\n [placement]=\"'top'\"\n [container]=\"'body'\"\n [tooltipClass]=\"tooltipClass\"\n [autoClose]=\"true\"\n [openDelay]=\"600\"\n (pointerdown)=\"decrement($event)\"\n >\n <svg-icon name=\"cai-minus\" class=\"bg-icon minus-icon\"></svg-icon>\n </div>\n </div>\n </div>\n }\n @if (!config().inTable) {\n @if (!dropdownType) {\n <svg-icon\n name=\"cai-checkmark\"\n class=\"app-input-icon positive-icon\"\n ></svg-icon>\n <svg-icon\n name=\"cai-status-warning\"\n class=\"app-input-icon warning-icon\"\n ></svg-icon>\n }\n }\n\n @if (\n invalid &&\n config().errorBehavior !== \"hidden\" &&\n (ngControl?.errors | errorMessage: config().customErrors)[0] &&\n !(config().inTable && config().placeholderBehavior !== \"static\")\n ) {\n <div class=\"app-input-error\">\n {{ (ngControl?.errors | errorMessage: config().customErrors)[0] }}\n </div>\n }\n\n <!-- Accept button -->\n @if ((config().add && isAdding()) || config().isEdit) {\n <button\n type=\"button\"\n class=\"app-input-icon button-icon accept-button\"\n (pointerdown)=\"addOption()\"\n [tabIndex]=\"-1\"\n ngbTooltip=\"Confirm\"\n [openDelay]=\"600\"\n [placement]=\"'top'\"\n [tooltipClass]=\"tooltipClass\"\n [container]=\"'body'\"\n [autoClose]=\"true\"\n >\n <svg-icon class=\"bg-icon\" name=\"cai-checkmark\"></svg-icon>\n </button>\n }\n\n <!-- Cancel button -->\n <button\n type=\"button\"\n class=\"app-input-icon button-icon cancel-button\"\n (pointerdown)=\"reset($event)\"\n (mouseenter)=\"onClearHover(true)\"\n (mouseleave)=\"onClearHover(false)\"\n [tabIndex]=\"-1\"\n ngbTooltip=\"{{\n hasText()\n | clearTooltip\n : isAdding()\n : config().isEdit || false\n : config().placeholderBehavior || 'dynamic'\n : dropdownType === 'multiple'\n : config().hasResetButton\n : canTooltipBeVisible()\n }}\"\n [openDelay]=\"600\"\n [tooltipClass]=\"tooltipClass\"\n [placement]=\"'top'\"\n [container]=\"'body'\"\n [autoClose]=\"true\"\n #closeTooltip=\"ngbTooltip\"\n >\n @let iconName =\n config().hasResetButton\n ? \"cai-reset\"\n : config().removable\n ? \"cai-delete\"\n : \"cai-cancel\";\n <svg-icon class=\"bg-icon\" [name]=\"iconName\"></svg-icon>\n </button>\n\n <div class=\"dropdown-anchor\" ngbDropdownAnchor></div>\n <!-- Dropdown menu -->\n\n @let hasLoader = isLoading() !== undefined;\n\n @if (hasLoader) {\n <div class=\"loader\" [class.loading]=\"isLoading()\">\n <svg-icon name=\"cai-loader\" class=\"loader-icon\"></svg-icon>\n </div>\n }\n\n @if (dropdownType) {\n @let maxHeight =\n ((dropdownOptions()?.length || (showNoResults() ? 1 : 0)) +\n (config().add ? 1 : 0)) *\n 30 +\n 4;\n\n @let animateDropdown =\n dropdownType !== \"toll\" &&\n dropdownType !== \"fuel-stop-transaction\" &&\n dropdownType !== \"dispatch\" &&\n dropdownType !== \"ftl-dispatch\" &&\n dropdownType !== \"split-driver\" &&\n dropdownType !== \"split-truck\" &&\n dropdownType !== \"split-trailer\";\n\n @let unfilteredHeight =\n dropdownType === \"contact\" || !animateDropdown\n ? 244\n : ((options()?.length || (showNoResults() ? 1 : 0)) +\n (config().add ? 1 : 0)) *\n 30 +\n 4;\n\n <div\n ngbDropdownMenu\n class=\"dropdown-menu input-dropdown-menu\"\n [class]=\"{\n 'hide-dropdown':\n config().dropdownAutocomplete &&\n !dropdownOptions()?.length &&\n !(showNoResults() && value()),\n 'animate-dropdown': animateDropdown,\n 'size-22': config().size === 22,\n 'has-stroke': config().hasStroke,\n }\"\n [class.closing]=\"closing()\"\n [style.--unfiltered-height]=\"\n unfilteredHeight > 244 ? '244px' : unfilteredHeight + 'px'\n \"\n [style.--max-height]=\"maxHeight > 244 ? '244px' : maxHeight + 'px'\"\n [style.width.px]=\"containerWidth()\"\n [tabindex]=\"-1\"\n (pointerdown)=\"onDropdownBackgroundClick($event)\"\n (mousedown)=\"$event.preventDefault()\"\n (pointerup)=\"stopEventPropagation($event)\"\n (mouseup)=\"stopEventPropagation($event)\"\n (click)=\"stopEventPropagation($event)\"\n >\n <div\n class=\"dropdown-menu-content\"\n [tabindex]=\"-1\"\n caiInfiniteScroll\n [scrollThreshold]=\"50\"\n (scrolledToBottom)=\"onDropdownScrolledToBottom()\"\n >\n @if (config().add) {\n <button\n class=\"dropdown-item add-new\"\n [class.focused]=\"\n focusedOptionIndex === -1 ||\n groupedNavigationState?.groupIndex === -1\n \"\n (click)=\"handleAddingOption($event)\"\n >\n <p>ADD NEW</p>\n <svg-icon name=\"cai-plus\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n <ng-container *ngTemplateOutlet=\"dropdownMenuRef\"></ng-container>\n </div>\n </div>\n\n @if (!config().dropdownAutocomplete) {\n <div\n class=\"dropdown-icon-container\"\n [class.open]=\"dropdown.isOpen() && !closing()\"\n (pointerdown)=\"onDropdownIconClick($event)\"\n >\n <svg-icon\n name=\"cai-arrow-secondary-down\"\n class=\"dropdown-icon icon\"\n ></svg-icon>\n </div>\n }\n @let specialDropdown =\n dropdownType === \"dispatch\" ||\n dropdownType === \"ftl-dispatch\" ||\n dropdownType === \"broker\" ||\n dropdownType === \"contact\" ||\n dropdownType === \"shipper\" ||\n dropdownType === \"bank\" ||\n dropdownType === \"dispatcher\" ||\n dropdownType === \"driver-owner\" ||\n dropdownType === \"truck-owner\" ||\n dropdownType === \"truck\" ||\n dropdownType === \"trailer\" ||\n dropdownType === \"hazardous\" ||\n dropdownType === \"state\" ||\n dropdownType === \"owner\" ||\n dropdownType === \"fuelcard\" ||\n dropdownType === \"pm\" ||\n dropdownType === \"color\" ||\n dropdownType === \"make\" ||\n dropdownType === \"toll\" ||\n dropdownType === \"provider\" ||\n dropdownType === \"split-driver\" ||\n dropdownType === \"split-truck\" ||\n dropdownType === \"split-trailer\" ||\n dropdownType === \"accident-driver\" ||\n dropdownType === \"accident-truck\" ||\n dropdownType === \"accident-trailer\";\n <!-- Placeholder -->\n @if (specialDropdown) {\n <ng-container *ngTemplateOutlet=\"selectedOptionRef\"></ng-container>\n } @else if (\n (config().add || config().search) &&\n !inputRef.value &&\n !this.isAdding() &&\n dropdownType !== \"subcontent\"\n ) {\n <div class=\"dropdown-selected\">\n @if (config().placeholderBehavior === \"static\") {\n <p class=\"selected-label-hidden\">\n {{ name + (config().required ? \" *\" : \"\") }}\n </p>\n <p class=\"selected-text\">\n {{\n selectedOption() &&\n cast(selectedOption(), \"dropdownOption\")![\n optionLabel || \"label\"\n ]\n }}\n </p>\n } @else {\n @if (\n selectedOption() &&\n cast(selectedOption(), \"dropdownOption\")![\n optionLabel || \"label\"\n ] === \"Hazardous\"\n ) {\n <svg-icon name=\"cai-violation-hazmat\" class=\"icon\"></svg-icon>\n <p class=\"dropdown-selected-content\">\n {{\n selectedOption() &&\n cast(selectedOption(), \"dropdownOption\")![\n optionLabel || \"label\"\n ]\n }}\n </p>\n } @else {\n <p class=\"dropdown-selected-content\">\n {{\n selectedOption() &&\n cast(selectedOption(), \"dropdownOption\")![\n optionLabel || \"label\"\n ]\n }}\n </p>\n }\n }\n </div>\n }\n } @else if (config().isEdit && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <p class=\"dropdown-selected-content\">{{ name }}</p>\n </div>\n }\n @if (config().passwordRequirements) {\n <div\n class=\"dropdown-menu password-requirement\"\n ngbDropdownMenu\n [style.width.px]=\"containerWidth()\"\n [class.closing]=\"closing()\"\n (pointerup)=\"stopEventPropagation($event)\"\n (mouseup)=\"stopEventPropagation($event)\"\n (click)=\"stopEventPropagation($event)\"\n >\n <ng-container *ngTemplateOutlet=\"passwordRequirementsRef\"></ng-container>\n </div>\n }\n @if (subcontent) {\n <p class=\"subcontent\">\n @if (!(config().alignment === \"right\")) {\n <span class=\"subcontent-hide\"\n >{{\n config().search\n ? selectedOption() &&\n cast(selectedOption(), \"dropdownOption\")![\n optionLabel || \"label\"\n ]\n : inputRef.value\n }}\n </span>\n }\n {{ subcontent }}\n </p>\n }\n</div>\n\n<!-- #region Templates -->\n\n<!-- #region Password requirements -->\n<ng-template #passwordRequirementsRef>\n @let isMinLengthValid =\n !this.ngControl?.errors?.[\"minlength\"] && this.value();\n @let isHasNumberValid =\n !this.ngControl?.errors?.[\"hasNumber\"] && this.value();\n @let isHasSymbolValid =\n !this.ngControl?.errors?.[\"hasSymbol\"] && this.value();\n @let isHasUppercaseValid =\n !this.ngControl?.errors?.[\"hasUppercase\"] && this.value();\n\n <p>Strong Password Requirement</p>\n <ul>\n <li [class.valid]=\"isMinLengthValid\">\n <svg-icon\n [name]=\"isMinLengthValid ? 'cai-checkmark' : 'cai-cancel'\"\n [class]=\"isMinLengthValid ? 'checkmark' : 'cancel'\"\n class=\"icon\"\n ></svg-icon\n ><span>Minimum 8 characters</span>\n </li>\n <li [class.valid]=\"isHasNumberValid\">\n <svg-icon\n class=\"icon\"\n [name]=\"isHasNumberValid ? 'cai-checkmark' : 'cai-cancel'\"\n [class]=\"isHasNumberValid ? 'checkmark' : 'cancel'\"\n ></svg-icon\n ><span>One number</span>\n </li>\n <li [class.valid]=\"isHasSymbolValid\">\n <svg-icon\n class=\"icon\"\n [name]=\"isHasSymbolValid ? 'cai-checkmark' : 'cai-cancel'\"\n [class]=\"isHasSymbolValid ? 'checkmark' : 'cancel'\"\n ></svg-icon\n ><span>One symbol</span>\n </li>\n <li [class.valid]=\"isHasUppercaseValid\">\n <svg-icon\n class=\"icon\"\n [name]=\"isHasUppercaseValid ? 'cai-checkmark' : 'cai-cancel'\"\n [class]=\"isHasUppercaseValid ? 'checkmark' : 'cancel'\"\n ></svg-icon\n ><span>One upper-case letter</span>\n </li>\n </ul>\n</ng-template>\n<!-- #endregion -->\n@let search = config().search;\n\n<ng-template #dropdownMenuRef>\n @switch (dropdownType) {\n @case (\"dispatch\") {\n <ng-container *ngTemplateOutlet=\"dispatchesRef\"></ng-container>\n }\n @case (\"ftl-dispatch\") {\n <ng-container *ngTemplateOutlet=\"ftlDispatchRef\"></ng-container>\n }\n @case (\"broker\") {\n <ng-container *ngTemplateOutlet=\"brokerRef\"></ng-container>\n }\n @case (\"contact\") {\n <ng-container *ngTemplateOutlet=\"contactRef\"></ng-container>\n }\n @case (\"shipper\") {\n <ng-container *ngTemplateOutlet=\"shipperRef\"></ng-container>\n }\n @case (\"bank\") {\n <ng-container *ngTemplateOutlet=\"bankRef\"></ng-container>\n }\n @case (\"dispatcher\") {\n <ng-container *ngTemplateOutlet=\"dispatcherRef\"></ng-container>\n }\n @case (\"driver-owner\") {\n <ng-container *ngTemplateOutlet=\"driverOwnerRef\"></ng-container>\n }\n @case (\"truck-owner\") {\n <ng-container *ngTemplateOutlet=\"truckOwnerRef\"></ng-container>\n }\n @case (\"trailer\") {\n <ng-container *ngTemplateOutlet=\"trailerRef\"></ng-container>\n }\n @case (\"truck\") {\n <ng-container *ngTemplateOutlet=\"truckRef\"></ng-container>\n }\n @case (\"hazardous\") {\n <ng-container *ngTemplateOutlet=\"hazardousRef\"></ng-container>\n }\n @case (\"state\") {\n <ng-container *ngTemplateOutlet=\"stateRef\"></ng-container>\n }\n @case (\"owner\") {\n <ng-container *ngTemplateOutlet=\"ownerRef\"></ng-container>\n }\n @case (\"fuelcard\") {\n <ng-container *ngTemplateOutlet=\"fuelcardRef\"></ng-container>\n }\n @case (\"pm\") {\n <ng-container *ngTemplateOutlet=\"pmRef\"></ng-container>\n }\n @case (\"multiple\") {\n <ng-container *ngTemplateOutlet=\"multipleRef\"></ng-container>\n }\n @case (\"make\") {\n <ng-container *ngTemplateOutlet=\"makeRef\"></ng-container>\n }\n @case (\"toll\") {\n <ng-container *ngTemplateOutlet=\"tollRef\"></ng-container>\n }\n @case (\"color\") {\n <ng-container *ngTemplateOutlet=\"colorRef\"></ng-container>\n }\n @case (\"fuel-stop-transaction\") {\n <ng-container *ngTemplateOutlet=\"fuelStopTransactionRef\"></ng-container>\n }\n @case (\"provider\") {\n <ng-container *ngTemplateOutlet=\"providerRef\"></ng-container>\n }\n @case (\"split-driver\") {\n <ng-container *ngTemplateOutlet=\"splitDriverRef\"></ng-container>\n }\n @case (\"split-truck\") {\n <ng-container *ngTemplateOutlet=\"splitTruckRef\"></ng-container>\n }\n @case (\"split-trailer\") {\n <ng-container *ngTemplateOutlet=\"splitTrailerRef\"></ng-container>\n }\n @case (\"accident-driver\") {\n <ng-container *ngTemplateOutlet=\"accidentDriverRef\"></ng-container>\n }\n @case (\"accident-truck\") {\n <ng-container *ngTemplateOutlet=\"accidentTruckRef\"></ng-container>\n }\n @case (\"accident-trailer\") {\n <ng-container *ngTemplateOutlet=\"accidentTrailerRef\"></ng-container>\n }\n @case (\"subcontent\") {\n <ng-container *ngTemplateOutlet=\"dropdownOptionsRef\"></ng-container>\n }\n @default {\n <ng-container *ngTemplateOutlet=\"dropdownOptionsRef\"></ng-container>\n }\n }\n</ng-template>\n\n<ng-template #selectedOptionRef>\n @switch (dropdownType) {\n @case (\"dispatch\") {\n <ng-container *ngTemplateOutlet=\"selectedDispatchRef\"></ng-container>\n }\n @case (\"ftl-dispatch\") {\n <ng-container *ngTemplateOutlet=\"selectedDispatchRef\"></ng-container>\n }\n @case (\"broker\") {\n <ng-container *ngTemplateOutlet=\"selectedBrokerRef\"></ng-container>\n }\n @case (\"contact\") {\n <ng-container *ngTemplateOutlet=\"selectedContactRef\"></ng-container>\n }\n @case (\"shipper\") {\n <ng-container *ngTemplateOutlet=\"selectedShipperRef\"></ng-container>\n }\n @case (\"bank\") {\n <ng-container *ngTemplateOutlet=\"selectedBankRef\"></ng-container>\n }\n @case (\"dispatcher\") {\n <ng-container *ngTemplateOutlet=\"selectedDispatcherRef\"></ng-container>\n }\n @case (\"driver-owner\") {\n <ng-container *ngTemplateOutlet=\"selectedDriverOwnerRef\"></ng-container>\n }\n @case (\"truck-owner\") {\n <ng-container *ngTemplateOutlet=\"selectedTruckOwnerRef\"></ng-container>\n }\n @case (\"trailer\") {\n <ng-container *ngTemplateOutlet=\"selectedTrailerRef\"></ng-container>\n }\n @case (\"truck\") {\n <ng-container *ngTemplateOutlet=\"selectedTruckRef\"></ng-container>\n }\n @case (\"hazardous\") {\n <ng-container *ngTemplateOutlet=\"selectedHazardousRef\"></ng-container>\n }\n @case (\"state\") {\n <ng-container *ngTemplateOutlet=\"selectedStateRef\"></ng-container>\n }\n @case (\"owner\") {\n <ng-container *ngTemplateOutlet=\"selectedOwnerRef\"></ng-container>\n }\n @case (\"fuelcard\") {\n <ng-container *ngTemplateOutlet=\"selectedFuelcardRef\"></ng-container>\n }\n @case (\"pm\") {\n <ng-container *ngTemplateOutlet=\"selectedPmRef\"></ng-container>\n }\n @case (\"make\") {\n <ng-container *ngTemplateOutlet=\"selectedMakeRef\"></ng-container>\n }\n @case (\"toll\") {\n <ng-container *ngTemplateOutlet=\"selectedTollRef\"></ng-container>\n }\n @case (\"color\") {\n <ng-container *ngTemplateOutlet=\"selectedColorRef\"></ng-container>\n }\n @case (\"provider\") {\n <ng-container *ngTemplateOutlet=\"selectedProviderRef\"></ng-container>\n }\n @case (\"split-driver\") {\n <ng-container *ngTemplateOutlet=\"selectedSplitDriverRef\"></ng-container>\n }\n @case (\"split-truck\") {\n <ng-container *ngTemplateOutlet=\"selectedSplitTruckRef\"></ng-container>\n }\n @case (\"split-trailer\") {\n <ng-container *ngTemplateOutlet=\"selectedSplitTrailerRef\"></ng-container>\n }\n @case (\"accident-driver\") {\n <ng-container\n *ngTemplateOutlet=\"selectedAccidentDriverRef\"\n ></ng-container>\n }\n @case (\"accident-truck\") {\n <ng-container *ngTemplateOutlet=\"selectedAccidentTruckRef\"></ng-container>\n }\n @case (\"accident-trailer\") {\n <ng-container\n *ngTemplateOutlet=\"selectedAccidentTrailerRef\"\n ></ng-container>\n }\n }\n</ng-template>\n\n<!-- Standard dropdown -->\n<ng-template #dropdownOptionsRef>\n @if (dropdownOptions().length) {\n @for (option of dropdownOptions(); track $index; let index = $index) {\n @let dropdownOption = cast(option, \"dropdownOption\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ dropdownOption.id }}\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'dropdownOption')?.id === dropdownOption.id,\n focused: focusedOptionIndex === index,\n }\"\n (click)=\"handleOption(dropdownOption, $event)\"\n >\n @if (dropdownOption[optionLabel] === \"Hazardous\") {\n <svg-icon name=\"cai-violation-hazmat\" class=\"icon\"></svg-icon>\n }\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (dropdownOption[optionLabel] | highlightSearch: value())\n : dropdownOption[optionLabel]\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #multipleRef>\n @if (dropdownOptions().length) {\n @for (option of dropdownOptions(); track $index; let index = $index) {\n @let dropdownOption = cast(option, \"dropdownOption\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ dropdownOption.id }}\"\n (click)=\"handleOption(dropdownOption, $event)\"\n [class]=\"{\n selected: isSelectedOption(dropdownOption),\n focused: focusedOptionIndex === index,\n }\"\n >\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (dropdownOption[optionLabel] | highlightSearch: value())\n : dropdownOption[optionLabel]\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #bankRef>\n @if (dropdownOptions().length) {\n @for (bank of dropdownOptions(); track $index; let index = $index) {\n @let bankOption = cast(bank, \"bank\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ bankOption.id }}\"\n (click)=\"handleOption(bankOption, $event)\"\n [class]=\"{\n selected: cast(selectedOption(), 'bank')?.id === bankOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n @if (bankOption.logoName) {\n <svg-icon\n class=\"full-icon\"\n [name]=\"bankOption.logoName.slice(0, -4)\"\n ></svg-icon>\n } @else {\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (bankOption.name || '' | highlightSearch: value())\n : bankOption.name\n \"\n ></p>\n }\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #makeRef>\n @if (dropdownOptions().length) {\n @for (make of dropdownOptions(); track $index; let index = $index) {\n @let makeOption = cast(make, \"make\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ makeOption.id }}\"\n (click)=\"handleOption(makeOption, $event)\"\n [class]=\"{\n selected: cast(selectedOption(), 'make')?.id === makeOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n @if (makeOption.logoName) {\n <svg-icon\n class=\"full-icon\"\n [name]=\"makeOption.logoName.slice(0, -4)\"\n ></svg-icon>\n } @else {\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (makeOption.name || '' | highlightSearch: value())\n : makeOption.name\n \"\n ></p>\n }\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Broker -->\n<ng-template #brokerRef>\n @if (dropdownOptions().length) {\n @for (broker of dropdownOptions(); track $index; let index = $index) {\n @let brokerOption = cast(broker, \"broker\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"broker-{{ brokerOption.id }}\"\n (click)=\"\n !(brokerOption.dnu || brokerOption.ban) &&\n handleOption(brokerOption, $event)\n \"\n [class]=\"{\n selected: cast(selectedOption(), 'broker')?.id === brokerOption.id,\n focused: focusedOptionIndex === index,\n banned: brokerOption.dnu || brokerOption.ban,\n dnu: brokerOption.dnu,\n }\"\n >\n @if (brokerOption?.dnu || brokerOption?.ban) {\n <svg-icon name=\"cai-minus\" class=\"round-icon\"></svg-icon>\n } @else if (brokerOption?.fraudCheck) {\n <svg-icon\n name=\"cai-status-warning-lite\"\n class=\"fraud-icon\"\n ></svg-icon>\n }\n <p\n class=\"dropdown-content\"\n [innerHTML]=\"\n search\n ? (brokerOption.businessName || '' | highlightSearch: value())\n : brokerOption.businessName\n \"\n ></p>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-base\">\n @if (!brokerOption.creditLimit) {\n <p>Unlimited</p>\n } @else {\n <p>{{ brokerOption.availableCredit || 0 | currency }}</p>\n <div\n class=\"progress-bar\"\n [style.--progress]=\"\n (\n brokerOption\n | brokerProgress: brokerOption.dnu || brokerOption.ban\n ).activePercentageOfPaid + '%'\n \"\n [class]=\"\n (\n brokerOption\n | brokerProgress: brokerOption.dnu || brokerOption.ban\n ).status\n \"\n ></div>\n }\n </div>\n <div class=\"end-item-hover\">\n <p>\n {{ brokerOption.loadsCount }} |\n {{ brokerOption.availableCredit || 0 | currency }}\n </p>\n <svg-icon name=\"cai-load\" class=\"icon\"></svg-icon>\n </div>\n </div>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Contact dropdown -->\n<ng-template #contactRef>\n @if (dropdownOptions().length) {\n @for (contact of dropdownOptions(); track $index; let index = $index) {\n @let contactOption = cast(contact, \"contact\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item split-option\"\n id=\"contact-{{ contact.id }}\"\n (click)=\"handleOption(contact, $event)\"\n [class]=\"{\n selected: cast(selectedOption(), 'contact')?.id === contact.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <p\n class=\"text-truncate\"\n [innerHTML]=\"\n search\n ? (contactOption.contactName || '' | highlightSearch: value())\n : contactOption.contactName\n \"\n ></p>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-base\">\n <p class=\"text-truncate\">{{ contactOption.department?.name }}</p>\n </div>\n <div class=\"end-item-hover\">\n <p class=\"text-truncate\">\n {{ contactOption.phone }}\n {{\n contactOption.extensionPhone\n ? \"x\" + contactOption.extensionPhone\n : \"\"\n }}\n </p>\n </div>\n </div>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Owner dropdown -->\n<ng-template #ownerRef>\n @if (dropdownOptions().length) {\n @for (owner of dropdownOptions(); track $index; let index = $index) {\n @let ownerOption = cast(owner, \"owner\");\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"owner-{{ ownerOption?.id }}\"\n (click)=\"handleOption(ownerOption!, $event)\"\n [class]=\"{\n selected: cast(selectedOption(), 'owner')?.id === ownerOption?.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <p\n class=\"owner-ein\"\n [innerHTML]=\"\n search\n ? (ownerOption?.ein || '' | highlightSearch: value())\n : ownerOption?.ein\n \"\n ></p>\n <p\n [innerHTML]=\"\n search\n ? (ownerOption?.name || '' | highlightSearch: value())\n : ownerOption?.name\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Fuelcard dropdown -->\n<ng-template #fuelcardRef>\n @if (dropdownOptions().length) {\n @for (fuelcard of dropdownOptions(); track $index; let index = $index) {\n @let fuelcardOption = cast(fuelcard, \"fuelCard\");\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"fuelcard-{{ fuelcardOption?.id }}\"\n (click)=\"handleOption(fuelcardOption!, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'fuelCard')?.id === fuelcardOption?.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <p\n class=\"fuelcard-number\"\n [innerHTML]=\"\n search\n ? (fuelcardOption?.number || '' | highlightSearch: value())\n : fuelcardOption?.number\n \"\n ></p>\n <p\n class=\"fuelcard-brand\"\n [innerHTML]=\"\n search\n ? (fuelcardOption?.brand || '' | highlightSearch: value())\n : fuelcardOption?.brand\n \"\n ></p>\n <p\n [innerHTML]=\"\n search\n ? (fuelcardOption?.account || '' | highlightSearch: value())\n : fuelcardOption?.account\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Accident driver dropdown -->\n<ng-template #accidentDriverRef>\n @if (dropdownOptions().length) {\n @for (driver of dropdownOptions(); track $index; let index = $index) {\n @let driverOption = cast(driver, \"accidentDriver\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"accident-driver-{{ driverOption.id }}\"\n (click)=\"handleOption(driverOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'accidentDriver')?.id === driverOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <div class=\"dropdown-subitem accident-name\">\n <cai-avatar\n [driver]=\"driverOption\"\n [size]=\"18\"\n [inverse]=\"true\"\n [hover]=\"false\"\n ></cai-avatar>\n <p\n [innerHTML]=\"\n driverOption.firstName + ' ' + driverOption.lastName\n | highlightSearch: value()\n \"\n ></p>\n </div>\n <p class=\"accident-dob\">\n {{ driverOption.dateOfBirth | date: \"MM/dd/yy\" }}\n </p>\n <p\n class=\"accident-cdl-number\"\n [innerHTML]=\"driverOption.cdlNumber || '' | highlightSearch: value()\"\n ></p>\n <div class=\"dropdown-subitem accident-state\">\n <p\n [innerHTML]=\"\n driverOption.cdlState?.stateShortName || ''\n | highlightSearch: value()\n \"\n ></p>\n @if (\n driverOption.cdlState?.countryType?.name &&\n driverOption.cdlState?.stateShortName\n ) {\n <svg-icon\n class=\"icon\"\n [name]=\"\n 'cai-' +\n driverOption.cdlState?.countryType?.name?.toLowerCase() +\n '-' +\n driverOption.cdlState?.stateShortName?.toLowerCase()\n \"\n ></svg-icon>\n }\n </div>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Accident truck dropdown -->\n<ng-template #accidentTruckRef>\n @if (dropdownOptions().length) {\n @for (truck of dropdownOptions(); track $index; let index = $index) {\n @let truckOption = cast(truck, \"accidentTruck\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"accident-truck-{{ truckOption.id }}\"\n (click)=\"handleOption(truckOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'accidentTruck')?.id === truckOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <div class=\"dropdown-subitem accident-unit\">\n @if (truckOption.truckType?.logoName) {\n <svg-icon\n class=\"truck-icon truck-trailer-icon-colors\"\n [class]=\"truckOption.truckType!.logoName.slice(0, -4)\"\n [name]=\"truckOption.truckType!.logoName.slice(0, -4)\"\n ></svg-icon>\n }\n <p\n [innerHTML]=\"truckOption.truckNumber | highlightSearch: value()\"\n ></p>\n </div>\n <p\n class=\"accident-vin\"\n [innerHTML]=\"truckOption.vin || '' | highlightSearch: value()\"\n ></p>\n <p\n class=\"accident-plate\"\n [innerHTML]=\"\n truckOption.licensePlateNumber || '' | highlightSearch: value()\n \"\n ></p>\n <div class=\"dropdown-subitem accident-state\">\n <p\n [innerHTML]=\"\n truckOption.licenseState?.stateShortName || ''\n | highlightSearch: value()\n \"\n ></p>\n @if (\n truckOption.licenseState?.countryType?.name &&\n truckOption.licenseState?.stateShortName\n ) {\n <svg-icon\n class=\"icon\"\n [name]=\"\n 'cai-' +\n truckOption.licenseState?.countryType?.name?.toLowerCase() +\n '-' +\n truckOption.licenseState?.stateShortName?.toLowerCase()\n \"\n ></svg-icon>\n }\n </div>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Accident trailer dropdown -->\n<ng-template #accidentTrailerRef>\n @if (dropdownOptions().length) {\n @for (trailer of dropdownOptions(); track $index; let index = $index) {\n @let trailerOption = cast(trailer, \"accidentTrailer\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"accident-trailer-{{ trailerOption.id }}\"\n (click)=\"handleOption(trailerOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'accidentTrailer')?.id === trailerOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <div class=\"dropdown-subitem accident-unit\">\n @if (trailerOption.trailerType?.logoName) {\n <svg-icon\n class=\"trailer-icon truck-trailer-icon-colors\"\n [class]=\"trailerOption.trailerType!.logoName.slice(0, -4)\"\n [name]=\"trailerOption.trailerType!.logoName.slice(0, -4)\"\n ></svg-icon>\n }\n <p\n [innerHTML]=\"trailerOption.trailerNumber | highlightSearch: value()\"\n ></p>\n </div>\n <p\n class=\"accident-vin\"\n [innerHTML]=\"trailerOption.vin || '' | highlightSearch: value()\"\n ></p>\n <p\n class=\"accident-plate\"\n [innerHTML]=\"\n trailerOption.licensePlateNumber || '' | highlightSearch: value()\n \"\n ></p>\n <div class=\"dropdown-subitem accident-state\">\n <p\n [innerHTML]=\"\n trailerOption.licenseState?.stateShortName || ''\n | highlightSearch: value()\n \"\n ></p>\n @if (\n trailerOption.licenseState?.countryType?.name &&\n trailerOption.licenseState?.stateShortName\n ) {\n <svg-icon\n class=\"icon\"\n [name]=\"\n 'cai-' +\n trailerOption.licenseState?.countryType?.name?.toLowerCase() +\n '-' +\n trailerOption.licenseState?.stateShortName?.toLowerCase()\n \"\n ></svg-icon>\n }\n </div>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Shipper dropdown -->\n<ng-template #shipperRef>\n @if (dropdownOptions().length) {\n @for (shipper of dropdownOptions(); track $index; let index = $index) {\n @let shipperOption = cast(shipper, \"shipper\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item split-option\"\n id=\"shipper-{{ shipperOption.id }}\"\n (click)=\"handleOption(shipperOption, $event)\"\n [class]=\"{\n selected: cast(selectedOption(), 'shipper')?.id === shipperOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <p\n class=\"text-truncate\"\n [innerHTML]=\"\n search\n ? (shipperOption.businessName || '' | highlightSearch: value())\n : shipperOption.businessName\n \"\n ></p>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-base\">\n <p\n class=\"text-truncate\"\n [innerHTML]=\"\n search\n ? (shipperOption.address?.address || ''\n | highlightSearch: value())\n : shipperOption.address?.address\n \"\n ></p>\n </div>\n <div class=\"end-item-hover\">\n <p>\n {{ shipperOption.pickupCount }} Pickup |\n {{ shipperOption.deliveryCount }} Delivery\n </p>\n <svg-icon name=\"cai-load\" class=\"icon\"></svg-icon>\n </div>\n </div>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Dispatch dropdown -->\n<ng-template #dispatchesRef>\n @if (dropdownOptions().length) {\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n (click)=\"resetSelection()\"\n [class]=\"{\n selected: !selectedOption(),\n }\"\n >\n <p>Unassigned</p>\n <div class=\"unassigned-ltl\">\n <p>{{ unassignedCount() }}</p>\n <svg-icon name=\"cai-ltl-single\" class=\"icon-sm\"></svg-icon>\n </div>\n </button>\n @for (\n dispatchBoard of dropdownOptions();\n track dispatchBoard.id;\n let groupIndex = $index\n ) {\n <!-- Temporary variant since BE doesn't support boards -->\n @let dispatchBoardOption = cast(dispatchBoard, \"dispatchBoard\")!;\n\n @let isNoBoardsVariant =\n dispatchBoardOption.dispatcher === \"NOBOARDSVARIANT\";\n @if (dispatchBoardOption.count > 0) {\n @if (!isNoBoardsVariant) {\n @let isGroupFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === 0;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item\"\n (click)=\"fold(dispatchBoardOption.id, $event)\"\n [class]=\"{\n unfolded: dispatchBoardOption.dispatches?.length || 0 > 0,\n focused: isGroupFocused,\n }\"\n >\n <p>\n {{\n dispatchBoardOption.teamBoard\n ? \"Team Board\"\n : dispatchBoardOption.dispatcher\n }}\n </p>\n <p class=\"counter\">{{ dispatchBoardOption.count }}</p>\n <svg-icon\n name=\"cai-arrow-primary-up\"\n class=\"group-icon icon\"\n ></svg-icon>\n </button>\n }\n @if (\n dispatchBoardOption.dispatches &&\n dispatchBoardOption.dispatches.length > 0\n ) {\n @for (\n dispatch of dispatchBoardOption.dispatches;\n track dispatch.id;\n let optionIndex = $index\n ) {\n @let isOptionFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === optionIndex + 1;\n <!-- +1 since optionIndex is 0 for the group item header -->\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n (click)=\"handleOption(dispatch, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'dispatch')?.id === dispatch.id,\n focused: isOptionFocused,\n }\"\n >\n <div class=\"dropdown-subitem truck-item\">\n <svg-icon\n class=\"truck-icon truck-trailer-icon-colors\"\n [class]=\"dispatch.truck.truckType.logoName.slice(0, -4)\"\n [name]=\"dispatch.truck.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p\n class=\"truck-number\"\n [innerHTML]=\"\n dispatch.truck.truckNumber | highlightSearch: value()\n \"\n ></p>\n </div>\n <div class=\"dropdown-subitem trailer-item\">\n @if (dispatch.trailer) {\n <svg-icon\n class=\"trailer-icon truck-trailer-icon-colors\"\n [class]=\"dispatch.trailer.trailerType.logoName.slice(0, -4)\"\n [name]=\"dispatch.trailer.trailerType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p\n class=\"trailer-number\"\n [innerHTML]=\"\n dispatch.trailer.trailerNumber | highlightSearch: value()\n \"\n ></p>\n }\n </div>\n <div class=\"dropdown-subitem\">\n @if (dispatch.coDriver) {\n <svg-icon class=\"dispatch-icon\" name=\"cai-people\"></svg-icon>\n <p\n class=\"driver-name\"\n [innerHTML]=\"\n dispatch.driver.firstName +\n ' & ' +\n dispatch.coDriver.firstName | highlightSearch: value()\n \"\n ></p>\n } @else {\n <cai-avatar\n [driver]=\"dispatch.driver\"\n [size]=\"18\"\n [inverse]=\"true\"\n [hover]=\"false\"\n ></cai-avatar>\n <p\n class=\"driver-name\"\n [innerHTML]=\"\n dispatch.driver.firstName + ' ' + dispatch.driver.lastName\n | highlightSearch: value()\n \"\n ></p>\n }\n </div>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-hover\">\n <p>{{ dispatch.payType }}</p>\n <svg-icon name=\"cai-driver\" class=\"icon-sm\"></svg-icon>\n </div>\n <div class=\"end-item-base dispatch-ltl\">\n <p>{{ dispatch.numberOfSingleLtlLoads }}</p>\n <svg-icon name=\"cai-ltl-single\" class=\"icon-sm\"></svg-icon>\n </div>\n </div>\n </button>\n }\n } @else if (isNoBoardsVariant) {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n }\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- ftl dispatch dropdown -->\n<ng-template #ftlDispatchRef>\n @if (dropdownOptions().length) {\n @for (\n dispatchBoard of dropdownOptions();\n track dispatchBoard.id;\n let groupIndex = $index\n ) {\n @let dispatchBoardOption = cast(dispatchBoard, \"dispatchBoard\")!;\n @let isGroupFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === 0;\n @let isNoBoardsVariant =\n dispatchBoardOption.dispatcher === \"NOBOARDSVARIANT\";\n @if (dispatchBoardOption.count > 0) {\n @if (!isNoBoardsVariant) {\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item\"\n (click)=\"fold(dispatchBoardOption.id, $event)\"\n [class]=\"{\n unfolded: dispatchBoardOption.dispatches?.length || 0 > 0,\n focused: isGroupFocused,\n }\"\n >\n <p>\n {{\n dispatchBoardOption.teamBoard\n ? \"Team Board\"\n : dispatchBoardOption.dispatcher\n }}\n </p>\n <p class=\"counter\">{{ dispatchBoardOption.count }}</p>\n <svg-icon\n name=\"cai-arrow-primary-up\"\n class=\"group-icon icon\"\n ></svg-icon>\n </button>\n }\n @if (\n dispatchBoardOption.dispatches &&\n dispatchBoardOption.dispatches.length > 0\n ) {\n @for (\n dispatch of dispatchBoardOption.dispatches;\n track dispatch.id;\n let optionIndex = $index\n ) {\n @let isOptionFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === optionIndex + 1;\n <!-- +1 since optionIndex is 0 for the group item header -->\n <button\n class=\"dropdown-item\"\n (click)=\"handleOption(dispatch, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'dispatch')?.id === dispatch.id,\n focused: isOptionFocused,\n }\"\n >\n <div class=\"dropdown-subitem truck-item\">\n <svg-icon\n class=\"truck-icon truck-trailer-icon-colors\"\n [class]=\"dispatch.truck.truckType.logoName.slice(0, -4)\"\n [name]=\"dispatch.truck.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p\n class=\"truck-number\"\n [innerHTML]=\"\n dispatch.truck.truckNumber | highlightSearch: value()\n \"\n ></p>\n </div>\n <div class=\"dropdown-subitem trailer-item\">\n @if (dispatch.trailer) {\n <svg-icon\n class=\"trailer-icon truck-trailer-icon-colors\"\n [class]=\"dispatch.trailer.trailerType.logoName.slice(0, -4)\"\n [name]=\"dispatch.trailer.trailerType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p\n class=\"trailer-number\"\n [innerHTML]=\"\n dispatch.trailer.trailerNumber | highlightSearch: value()\n \"\n ></p>\n }\n </div>\n <div class=\"dropdown-subitem\">\n @if (dispatch.coDriver) {\n <svg-icon class=\"dispatch-icon\" name=\"cai-people\"></svg-icon>\n <p\n class=\"driver-name\"\n [innerHTML]=\"\n dispatch.driver.firstName +\n ' & ' +\n dispatch.coDriver.firstName | highlightSearch: value()\n \"\n ></p>\n } @else {\n <cai-avatar\n [driver]=\"dispatch.driver\"\n [size]=\"18\"\n [inverse]=\"true\"\n [hover]=\"false\"\n ></cai-avatar>\n <p\n class=\"driver-name\"\n [innerHTML]=\"\n dispatch.driver.firstName + ' ' + dispatch.driver.lastName\n | highlightSearch: value()\n \"\n ></p>\n }\n </div>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-hover\">\n <!-- Load Status -->\n @let dispatchStatus = dispatch.status | dispatchStatus;\n @if (dispatchStatus) {\n <div\n class=\"dispatch-status\"\n [class]=\"dispatchStatus.statusClass\"\n >\n @if (dispatchStatus.badge) {\n <p\n class=\"status-block\"\n [class]=\"dispatchStatus.badge.color\"\n >\n {{ dispatchStatus.badge.text }}\n </p>\n }\n {{ dispatchStatus.label }}\n @if (dispatch.status?.statusCheckInNumber) {\n <p class=\"status-block\">\n {{ dispatch.status?.statusCheckInNumber }}\n </p>\n }\n </div>\n <p class=\"dispatch-separator\">|</p>\n }\n <p class=\"dispatch-load-count\">\n {{ dispatch?.pendingLoadCount }}\n </p>\n <svg-icon name=\"cai-load\" class=\"icon-sm\"></svg-icon>\n </div>\n <div class=\"end-item-base\">\n <p>{{ dispatch.payType }}</p>\n <svg-icon name=\"cai-driver\" class=\"icon-sm\"></svg-icon>\n </div>\n </div>\n </button>\n }\n } @else if (isNoBoardsVariant) {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n }\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #splitDriverRef>\n @if (dropdownOptions().length) {\n @for (splitDriverBoard of dropdownOptions(); track splitDriverBoard.id) {\n @let driverBoard = cast(splitDriverBoard, \"splitDriverBoard\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item\"\n (click)=\"fold(driverBoard.id, $event)\"\n [class]=\"{\n unfolded: (driverBoard.drivers?.length ?? 0) > 0,\n }\"\n >\n <p>\n {{\n driverBoard.isTeamBoard ? \"Team Board\" : driverBoard.dispatcherName\n }}\n </p>\n <!-- TODO: Change to count once BE is fixed -->\n <p class=\"counter\">{{ driverBoard.drivers?.length || 0 }}</p>\n <svg-icon\n name=\"cai-arrow-primary-up\"\n class=\"group-icon icon\"\n ></svg-icon>\n </button>\n @for (driver of driverBoard.drivers || []; track driver.id) {\n @let driverOption = cast(driver, \"splitDriver\")!;\n <button\n class=\"dropdown-item\"\n (click)=\"handleOption(driverOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'splitDriver')?.id === driverOption.id,\n }\"\n >\n <div class=\"dropdown-subitem\">\n <div class=\"dropdown-avatar\">\n <cai-avatar\n [driver]=\"driverOption\"\n [size]=\"18\"\n [inverse]=\"true\"\n [hover]=\"false\"\n ></cai-avatar>\n </div>\n <p\n class=\"driver-name\"\n [innerHTML]=\"\n driverOption.firstName + ' ' + driverOption.lastName\n | highlightSearch: value()\n \"\n ></p>\n </div>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-hover\">\n @let dispatchStatus =\n driverOption.dispatchStatus | dispatchStatus;\n @if (dispatchStatus) {\n <div\n class=\"dispatch-status\"\n [class]=\"dispatchStatus.statusClass\"\n >\n @if (dispatchStatus.badge) {\n <p\n class=\"status-block\"\n [class]=\"dispatchStatus.badge.color\"\n >\n {{ dispatchStatus.badge.text }}\n </p>\n }\n {{ dispatchStatus.label }}\n @if (driverOption.dispatchStatus?.statusCheckInNumber) {\n <p class=\"status-block\">\n {{ driverOption.dispatchStatus?.statusCheckInNumber }}\n </p>\n }\n </div>\n <p class=\"dispatch-separator\">|</p>\n }\n <p class=\"dispatch-load-count\">\n {{ driverOption.pendingLoadsCount }}\n </p>\n <svg-icon name=\"cai-load\" class=\"icon-sm\"></svg-icon>\n </div>\n <div class=\"end-item-base\">\n <p>{{ driverOption.payTypeValue }}</p>\n </div>\n </div>\n </button>\n }\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #splitTruckRef>\n @if (dropdownOptions().length) {\n @for (splitTruckBoard of dropdownOptions(); track splitTruckBoard.id) {\n @let truckBoard = cast(splitTruckBoard, \"splitTruckBoard\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item\"\n (click)=\"fold(truckBoard.id, $event)\"\n [class]=\"{\n unfolded: (truckBoard.trucks?.length ?? 0) > 0,\n }\"\n >\n <p>\n {{\n truckBoard.isTeamBoard ? \"Team Board\" : truckBoard.dispatcherName\n }}\n </p>\n <!-- TODO: Change to count once BE is fixed -->\n <p class=\"counter\">{{ truckBoard.trucks?.length || 0 }}</p>\n <svg-icon\n name=\"cai-arrow-primary-up\"\n class=\"group-icon icon\"\n ></svg-icon>\n </button>\n @for (truck of truckBoard.trucks || []; track truck.id) {\n @let truckOption = cast(truck, \"splitTruck\")!;\n <button\n class=\"dropdown-item\"\n (click)=\"handleOption(truckOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'splitTruck')?.id === truckOption.id,\n }\"\n >\n <div class=\"dropdown-subitem truck-item\">\n <svg-icon\n class=\"truck-icon\"\n [style.--truck-color]=\"truckOption.color?.code || ''\"\n [name]=\"truckOption.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p\n class=\"truck-number\"\n [innerHTML]=\"truckOption.truckNumber | highlightSearch: value()\"\n ></p>\n </div>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-hover\">\n @let dispatchStatus = truckOption.dispatchStatus | dispatchStatus;\n @if (dispatchStatus) {\n <div\n class=\"dispatch-status\"\n [class]=\"dispatchStatus.statusClass\"\n >\n @if (dispatchStatus.badge) {\n <p\n class=\"status-block\"\n [class]=\"dispatchStatus.badge.color\"\n >\n {{ dispatchStatus.badge.text }}\n </p>\n }\n {{ dispatchStatus.label }}\n @if (truckOption.dispatchStatus?.statusCheckInNumber) {\n <p class=\"status-block\">\n {{ truckOption.dispatchStatus?.statusCheckInNumber }}\n </p>\n }\n </div>\n <p class=\"dispatch-separator\">|</p>\n }\n <p class=\"dispatch-load-count\">\n {{ truckOption.pendingLoadsCount }}\n </p>\n <svg-icon name=\"cai-load\" class=\"icon-sm\"></svg-icon>\n </div>\n <div class=\"end-item-base\">\n @if (\n truckOption.location?.city &&\n truckOption.location?.stateShortName\n ) {\n <p>\n {{ truckOption.location?.city }},\n {{ truckOption.location?.stateShortName }}\n </p>\n }\n </div>\n </div>\n </button>\n }\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #splitTrailerRef>\n @if (dropdownOptions().length) {\n @for (splitTrailerBoard of dropdownOptions(); track splitTrailerBoard.id) {\n @let trailerBoard = cast(splitTrailerBoard, \"splitTrailerBoard\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item\"\n (click)=\"fold(trailerBoard.id, $event)\"\n [class]=\"{\n unfolded: (trailerBoard.trailers?.length ?? 0) > 0,\n }\"\n >\n <p>\n {{\n trailerBoard.isTeamBoard\n ? \"Team Board\"\n : trailerBoard.dispatcherName\n }}\n </p>\n <!-- TODO: Change to count once BE is fixed -->\n <p class=\"counter\">{{ trailerBoard.trailers?.length || 0 }}</p>\n <svg-icon\n name=\"cai-arrow-primary-up\"\n class=\"group-icon icon\"\n ></svg-icon>\n </button>\n @for (trailer of trailerBoard.trailers || []; track trailer.id) {\n @let trailerOption = cast(trailer, \"splitTrailer\")!;\n <button\n class=\"dropdown-item\"\n (click)=\"handleOption(trailerOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'splitTrailer')?.id === trailerOption.id,\n }\"\n >\n <div class=\"dropdown-subitem trailer-item\">\n <svg-icon\n class=\"trailer-icon\"\n [style.--trailer-color]=\"trailerOption.color?.code || ''\"\n [name]=\"trailerOption.trailerType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p\n class=\"trailer-number\"\n [innerHTML]=\"\n trailerOption.trailerNumber | highlightSearch: value()\n \"\n ></p>\n </div>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-hover\">\n @let dispatchStatus =\n trailerOption.dispatchStatus | dispatchStatus;\n @if (dispatchStatus) {\n <div\n class=\"dispatch-status\"\n [class]=\"dispatchStatus.statusClass\"\n >\n @if (dispatchStatus.badge) {\n <p\n class=\"status-block\"\n [class]=\"dispatchStatus.badge.color\"\n >\n {{ dispatchStatus.badge.text }}\n </p>\n }\n {{ dispatchStatus.label }}\n @if (trailerOption.dispatchStatus?.statusCheckInNumber) {\n <p class=\"status-block\">\n {{ trailerOption.dispatchStatus?.statusCheckInNumber }}\n </p>\n }\n </div>\n <p class=\"dispatch-separator\">|</p>\n }\n <p class=\"dispatch-load-count\">\n {{ trailerOption.pendingLoadsCount }}\n </p>\n <svg-icon name=\"cai-load\" class=\"icon-sm\"></svg-icon>\n </div>\n <div class=\"end-item-base\">\n @if (\n trailerOption.location?.city &&\n trailerOption.location?.stateShortName\n ) {\n <p>\n {{ trailerOption.location?.city }},\n {{ trailerOption.location?.stateShortName }}\n </p>\n }\n </div>\n </div>\n </button>\n }\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #tollRef>\n @if (dropdownOptions().length) {\n @for (toll of dropdownOptions(); track $index; let groupIndex = $index) {\n @let tollOption = cast(toll, \"tollOption\")!;\n @let isGroupFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === 0;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item pe-none\"\n [class]=\"{\n unfolded: tollOption.tollTransponders?.length || 0 > 0,\n focused: isGroupFocused,\n }\"\n >\n <p>\n {{ tollOption.groupName }}\n </p>\n </button>\n @let tollTransponders = tollOption.tollTransponders || [];\n @for (\n tollTransponder of tollTransponders;\n track tollTransponder.id;\n let optionIndex = $index\n ) {\n @let isOptionFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === optionIndex + 1;\n <!-- +1 since optionIndex is 0 for the group item header -->\n <button\n class=\"dropdown-item\"\n (click)=\"handleOption(tollTransponder, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'tollTransponderOption')?.id ===\n tollTransponder.id,\n focused: isOptionFocused,\n }\"\n >\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (tollTransponder.name || '' | highlightSearch: value())\n : tollTransponder.name\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Dispatcher dropdown -->\n\n<ng-template #dispatcherRef>\n @if (dropdownOptions().length) {\n @for (dispatcher of dropdownOptions(); track $index; let index = $index) {\n @let dispatcherOption = cast(dispatcher, \"dispatcher\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ dispatcherOption.id }}\"\n (click)=\"handleOption(dispatcherOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'dispatcher')?.id === dispatcherOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <cai-avatar\n [driver]=\"{\n id: dispatcherOption?.id || 0,\n firstName: (dispatcherOption?.fullName || ' ').split(' ')[0] || '',\n lastName: (dispatcherOption?.fullName || ' ').split(' ')[1] || '',\n avatarFile: dispatcherOption?.avatarFile,\n colorFlag: dispatcherOption?.colorFlag,\n }\"\n [rounded]=\"!config().squareAvatar\"\n [hover]=\"false\"\n ></cai-avatar>\n <p\n class=\"dropdown-content-hazardous\"\n [innerHTML]=\"\n search\n ? (dispatcherOption.fullName || '' | highlightSearch: value())\n : dispatcherOption.fullName\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Driver Owner dropdown -->\n\n<ng-template #driverOwnerRef>\n @if (dropdownOptions().length) {\n @for (driverOwner of dropdownOptions(); track $index; let index = $index) {\n @let driverOwnerOption = cast(driverOwner, \"driverOwner\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ driverOwnerOption.id }}\"\n (click)=\"handleOption(driverOwnerOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'driverOwner')?.id === driverOwnerOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <cai-avatar\n [driver]=\"{\n id: driverOwnerOption?.id || 0,\n firstName: (driverOwnerOption?.fullName || ' ').split(' ')[0] || '',\n lastName: (driverOwnerOption?.fullName || ' ').split(' ')[1] || '',\n avatarFile: driverOwnerOption?.avatarFile,\n colorFlag: driverOwnerOption?.colorFlag,\n owner: driverOwnerOption?.driverType === 'OwnerOperator',\n driverType: {\n id: 0,\n name: (driverOwnerOption?.driverType | driverTypeLabel),\n },\n }\"\n [rounded]=\"false\"\n [hover]=\"false\"\n ></cai-avatar>\n <p\n class=\"dropdown-content\"\n [innerHTML]=\"\n search\n ? (driverOwnerOption.fullName || '' | highlightSearch: value())\n : driverOwnerOption.fullName\n \"\n ></p>\n <div class=\"dropdown-subitem-end\">\n <p class=\"driver-type\">\n {{ driverOwnerOption.driverType | driverTypeLabel }}\n </p>\n </div>\n <svg-icon\n name=\"cai-checkmark\"\n class=\"dropdown-item-icon no-margin\"\n ></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Truck Owner dropdown -->\n\n<ng-template #truckOwnerRef>\n @if (dropdownOptions().length) {\n @for (truckOwner of dropdownOptions(); track $index; let index = $index) {\n @let truckOwnerOption = cast(truckOwner, \"truckOwner\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ truckOwnerOption.id }}\"\n (click)=\"handleOption(truckOwnerOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'truckOwner')?.id === truckOwnerOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <div class=\"dropdown-subitem truck-owner-unit\">\n @if (truckOwnerOption.truckType?.logoName) {\n <svg-icon\n class=\"truck-icon truck-trailer-icon-colors\"\n [class]=\"truckOwnerOption.truckType.logoName.slice(0, -4)\"\n [name]=\"truckOwnerOption.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n }\n <p\n class=\"dropdown-content\"\n [innerHTML]=\"\n search\n ? (truckOwnerOption.truckNumber || ''\n | highlightSearch: value())\n : truckOwnerOption.truckNumber\n \"\n ></p>\n @if (truckOwnerOption.model) {\n <p class=\"truck-owner-bullet\">\u2022</p>\n <p\n class=\"dropdown-content\"\n [innerHTML]=\"\n search\n ? (truckOwnerOption.model | highlightSearch: value())\n : truckOwnerOption.model\n \"\n ></p>\n }\n </div>\n <div class=\"dropdown-subitem-end\">\n <p class=\"driver-type\">\n {{ truckOwnerOption.driverType | truckOwnershipLabel }}\n </p>\n </div>\n <svg-icon\n name=\"cai-checkmark\"\n class=\"dropdown-item-icon no-margin\"\n ></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #truckRef>\n @if (dropdownOptions().length) {\n @for (truck of dropdownOptions(); track $index; let index = $index) {\n @let truckOption = cast(truck, \"truckOption\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ truckOption.id }}\"\n (click)=\"handleOption(truckOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'truckOption')?.id === truckOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (truckOption.name || '' | highlightSearch: value())\n : truckOption.name\n \"\n ></p>\n <svg-icon\n class=\"truck-trailer-option truck-trailer-icon-colors\"\n [class]=\"truckOption.logoName.slice(0, -4)\"\n [name]=\"truckOption.logoName.slice(0, -4)\"\n ></svg-icon>\n <svg-icon\n name=\"cai-checkmark\"\n class=\"dropdown-item-icon no-margin\"\n ></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #trailerRef>\n @if (dropdownOptions().length) {\n @for (truck of dropdownOptions(); track $index; let index = $index) {\n @let trailerOption = cast(truck, \"trailerOption\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ trailerOption.id }}\"\n (click)=\"handleOption(trailerOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'trailerOption')?.id === trailerOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (trailerOption.name || '' | highlightSearch: value())\n : trailerOption.name\n \"\n ></p>\n\n <svg-icon\n class=\"truck-trailer-option truck-trailer-icon-colors\"\n [class]=\"trailerOption.logoName.slice(0, -4)\"\n [name]=\"trailerOption.logoName.slice(0, -4)\"\n ></svg-icon>\n <svg-icon\n name=\"cai-checkmark\"\n class=\"dropdown-item-icon no-margin\"\n ></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #providerRef>\n @if (dropdownOptions().length) {\n @for (provider of dropdownOptions(); track $index; let index = $index) {\n @let providerOption = cast(provider, \"provider\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ providerOption?.id }}\"\n (click)=\"handleOption(providerOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'provider')?.id === providerOption?.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <svg-icon\n class=\"full-icon\"\n [name]=\"'cai-' + providerOption?.name?.toLowerCase()\"\n ></svg-icon>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Hazardous dropdown -->\n<ng-template #hazardousRef>\n @if (dropdownOptions().length) {\n @for (hazardous of dropdownOptions(); track $index; let index = $index) {\n @let hazardousOption = cast(hazardous, \"hazardous\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ hazardousOption.id }}\"\n (click)=\"handleOption(hazardousOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'hazardous')?.id === hazardousOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <svg-icon [name]=\"hazardousOption.logoName?.slice(0, -4)\"></svg-icon>\n <p\n class=\"dropdown-content-hazardous\"\n [innerHTML]=\"\n search\n ? (hazardousOption.description || '' | highlightSearch: value())\n : hazardousOption.description\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #pmRef>\n @if (dropdownOptions().length) {\n @for (pm of dropdownOptions(); track $index; let index = $index) {\n @let pmOption = cast(pm, \"pmOption\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ pmOption.id }}\"\n (click)=\"handleOption(pmOption, $event)\"\n [class]=\"{\n selected: cast(selectedOption(), 'pmOption')?.id === pmOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <svg-icon\n class=\"icon\"\n [name]=\"pmOption.title | remapPmIcons\"\n ></svg-icon>\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (pmOption.title || '' | highlightSearch: value())\n : pmOption.title\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #colorRef>\n @if (dropdownOptions().length) {\n @for (color of dropdownOptions(); track $index; let index = $index) {\n @let colorOption = cast(color, \"colorOption\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item color-item\"\n id=\"option-{{ colorOption.id }}\"\n (click)=\"handleOption(colorOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'colorOption')?.id === colorOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <svg-icon\n class=\"icon cai-color\"\n [name]=\"'cai-color'\"\n [style.--color]=\"colorOption?.code\"\n [style.--hover-color]=\"colorOption?.hoverCode\"\n ></svg-icon>\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (colorOption.name || '' | highlightSearch: value())\n : colorOption.name\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #stateRef>\n @if (dropdownOptions().length) {\n @for (state of dropdownOptions(); track $index; let index = $index) {\n @let stateOption = cast(state, \"state\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ stateOption.id }}\"\n (click)=\"handleOption(stateOption, $event)\"\n [class]=\"{\n selected: cast(selectedOption(), 'state')?.id === stateOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <svg-icon\n class=\"icon\"\n [name]=\"\n 'cai-' +\n stateOption?.countryType?.name?.toLowerCase() +\n '-' +\n stateOption?.stateShortName?.toLowerCase()\n \"\n ></svg-icon>\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (stateOption.stateShortName +\n ' ' +\n (config().fullState\n ? ' (' + stateOption?.stateName + ')'\n : '') || '' | highlightSearch: value())\n : stateOption.stateShortName +\n ' ' +\n (config().fullState ? ' (' + stateOption?.stateName + ')' : '')\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #fuelStopTransactionRef>\n @if (dropdownOptions().length) {\n @for (\n franchise of dropdownOptions();\n track franchise.id;\n let groupIndex = $index\n ) {\n @let isGroupFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === 0;\n @let franchiseOption = cast(franchise, \"franchise\")!;\n @if (franchiseOption?.count !== null) {\n <div\n class=\"dropdown-group\"\n [class.no-items]=\"!franchiseOption?.count\"\n [class]=\"{\n active: openGroup() === franchiseOption.id,\n }\"\n [style.--max-height]=\"\n openGroup() === franchiseOption.id\n ? 30 * ((franchiseOption.fuelStopStores?.length || 0) + 1) + 'px'\n : '26px'\n \"\n >\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item\"\n (click)=\"fold(franchiseOption.id, $event, franchiseOption)\"\n [class]=\"{\n unfolded: openGroup() === franchiseOption.id,\n focused: isGroupFocused,\n }\"\n >\n <p\n [innerHTML]=\"\n franchiseOption?.businessName || '' | highlightSearch: value()\n \"\n ></p>\n <p class=\"counter\">{{ franchiseOption.count }}</p>\n <svg-icon\n name=\"cai-arrow-primary-up\"\n class=\"group-icon icon\"\n ></svg-icon>\n </button>\n @if (openGroup() === franchiseOption.id) {\n @if (franchiseOption.fuelStopStores?.length || 0 > 0) {\n @for (\n fuelStopStore of franchiseOption.fuelStopStores;\n track fuelStopStore.id\n ) {\n @let isOptionFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === $index + 1;\n <!-- +1 since optionIndex is 0 for the group item header -->\n <button\n tabindex=\"-1\"\n class=\"dropdown-item fuel-stop-transaction-store\"\n [class]=\"{\n focused: isOptionFocused,\n }\"\n (click)=\"handleOption(fuelStopStore, $event)\"\n >\n <p\n [innerHTML]=\"\n fuelStopStore?.store ?? '' | highlightSearch: value()\n \"\n ></p>\n @let city = fuelStopStore?.address?.city ?? \"\";\n @let state = fuelStopStore?.address?.stateShortName ?? \"\";\n @let zip = fuelStopStore?.address?.zipCode ?? \"\";\n <p\n class=\"fuel-stop-transaction-store-address\"\n [innerHTML]=\"\n city + (state || zip ? ', ' : '') + state + ' ' + zip\n | highlightSearch: value()\n \"\n ></p>\n\n @if (fuelStopStore?.[\"favourite\"]) {\n <svg-icon\n name=\"cai-favorite\"\n class=\"favorite-icon\"\n ></svg-icon>\n }\n </button>\n }\n <!-- Infinite scroll trigger - emits event when item comes into view -->\n <div\n class=\"dropdown-infinite-scroll-item\"\n caiIntersectionObserver\n [threshold]=\"0.1\"\n (inView)=\"onDropdownScrolledToBottom(true)\"\n ></div>\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n }\n </div>\n } @else {\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n [class.focused]=\"\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === 0\n \"\n (click)=\"handleOption(franchiseOption, $event)\"\n >\n <p\n class=\"fuel-stop-transaction-nostore\"\n [innerHTML]=\"\n franchiseOption?.businessName || '' | highlightSearch: value()\n \"\n ></p>\n </button>\n }\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- #endregion -->\n\n<!-- #region Selected options -->\n\n<!-- selected dispatch -->\n<ng-template #selectedDispatchRef>\n @let dispatchOption = cast(selectedOption(), \"dispatch\");\n @if (dispatchOption && !inputRef.value && !isAdding()) {\n <div class=\"dropdown-selected\">\n <div class=\"dropdown-subitem truck-item\">\n <svg-icon\n class=\"truck-icon\"\n [name]=\"dispatchOption!.truck.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p class=\"truck-number\">\n {{ dispatchOption!.truck.truckNumber }}\n </p>\n </div>\n <div class=\"dropdown-subitem trailer-item\">\n @if (dispatchOption!.trailer) {\n <svg-icon\n class=\"trailer-icon\"\n [name]=\"\n cast(\n selectedOption(),\n 'dispatch'\n )!.trailer?.trailerType?.logoName?.slice(0, -4)\n \"\n ></svg-icon>\n <p class=\"trailer-number\">\n {{ dispatchOption!.trailer?.trailerNumber }}\n </p>\n }\n </div>\n <div class=\"dropdown-subitem\">\n @if (dispatchOption!.coDriver) {\n <svg-icon class=\"dispatch-icon\" name=\"cai-people\"></svg-icon>\n <p class=\"driver-name\">\n {{\n dispatchOption!.driver.firstName +\n \" & \" +\n dispatchOption!.coDriver?.firstName\n }}\n </p>\n } @else {\n <cai-avatar\n [driver]=\"dispatchOption!.driver\"\n [size]=\"18\"\n [hover]=\"false\"\n ></cai-avatar>\n <p class=\"driver-name\">\n {{\n dispatchOption!.driver.firstName +\n \" \" +\n dispatchOption!.driver.lastName\n }}\n </p>\n }\n </div>\n <p class=\"selected-end-item\">\n {{ dispatchOption!.payType }}\n </p>\n </div>\n } @else {\n @if (!inputRef.value && this.config().dropdown == \"dispatch\") {\n <p class=\"dropdown-selected\">Unassigned</p>\n }\n }\n</ng-template>\n\n<!-- selected broker -->\n<ng-template #selectedBrokerRef>\n @let brokerOption = cast(selectedOption(), \"broker\");\n @if (brokerOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n @if (brokerOption!.fraudCheck) {\n <svg-icon name=\"cai-status-warning-lite\" class=\"fraud-icon\"></svg-icon>\n }\n <p class=\"dropdown-selected-content\">{{ brokerOption!.businessName }}</p>\n <div class=\"selected-end-item\">\n @if (!brokerOption!.creditLimit) {\n <p>Unlimited</p>\n } @else {\n <p>\n {{ brokerOption!.availableCredit || 0 | currency }}\n </p>\n <div\n class=\"progress-bar\"\n [style.--progress]=\"\n (\n brokerOption!\n | brokerProgress: brokerOption!.dnu || brokerOption!.ban\n ).activePercentageOfPaid + '%'\n \"\n [class]=\"\n (\n brokerOption!\n | brokerProgress: brokerOption!.dnu || brokerOption!.ban\n ).status\n \"\n ></div>\n }\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedContactRef>\n @let contactOption = cast(selectedOption(), \"contact\");\n @if (contactOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <p class=\"dropdown-selected-content\">{{ contactOption?.contactName }}</p>\n <div class=\"selected-end-item\">\n <p>\n {{ contactOption?.phone }}\n {{\n contactOption?.extensionPhone\n ? \"x\" + contactOption?.extensionPhone\n : \"\"\n }}\n </p>\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedShipperRef>\n @let shipperOption = cast(selectedOption(), \"shipper\");\n @if (shipperOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <p class=\"dropdown-selected-content\">{{ shipperOption?.businessName }}</p>\n <div class=\"selected-end-item selected-end-item-truncate\">\n <p class=\"text-truncate\">{{ shipperOption?.address?.address }}</p>\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedOwnerRef>\n @let ownerOption = cast(selectedOption(), \"owner\");\n @if (ownerOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <p class=\"owner-ein\">{{ ownerOption?.ein }}</p>\n <p class=\"\">{{ ownerOption?.name }}</p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedFuelcardRef>\n @let fuelcardOption = cast(selectedOption(), \"fuelCard\");\n @if (fuelcardOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <p class=\"fuelcard-number\">\n {{ fuelcardOption?.number }}\n </p>\n <p class=\"fuelcard-brand\">\n {{ fuelcardOption?.brand }}\n </p>\n <p class=\"\">\n {{ fuelcardOption?.account }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedBankRef>\n @let bankOption = cast(selectedOption(), \"bank\");\n @if (bankOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n @if (bankOption?.logoName) {\n <svg-icon\n class=\"option-icon full-size\"\n [name]=\"bankOption?.logoName?.slice(0, -4) || ''\"\n ></svg-icon>\n } @else {\n <p class=\"dropdown-selected-content\">{{ bankOption?.name }}</p>\n }\n </div>\n }\n</ng-template>\n\n<ng-template #selectedProviderRef>\n @let providerOption = cast(selectedOption(), \"provider\");\n @if (providerOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon full-size\"\n [name]=\"'cai-' + providerOption?.name?.toLowerCase()\"\n ></svg-icon>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedMakeRef>\n @let makeOption = cast(selectedOption(), \"make\");\n @if (makeOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n @if (makeOption?.logoName) {\n <svg-icon\n class=\"option-icon full-size\"\n [name]=\"makeOption?.logoName?.slice(0, -4) || ''\"\n ></svg-icon>\n } @else {\n <p class=\"dropdown-selected-content\">{{ makeOption?.name }}</p>\n }\n </div>\n }\n</ng-template>\n\n<ng-template #selectedStateRef>\n @let stateOption = cast(selectedOption(), \"state\");\n @if (stateOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon\"\n [name]=\"\n 'cai-' +\n stateOption?.countryType?.name?.toLowerCase() +\n '-' +\n stateOption?.stateShortName?.toLowerCase()\n \"\n ></svg-icon>\n <p class=\"dropdown-selected-content\">\n {{ stateOption?.stateShortName }}\n {{ config().fullState ? \" (\" + stateOption?.stateName + \")\" : \"\" }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedDispatcherRef>\n @let dispatcherOption = cast(selectedOption(), \"dispatcher\");\n @if (dispatcherOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <cai-avatar\n [driver]=\"{\n id: dispatcherOption?.id || 0,\n firstName: (dispatcherOption?.fullName || ' ').split(' ')[0] || '',\n lastName: (dispatcherOption?.fullName || ' ').split(' ')[1] || '',\n avatarFile: dispatcherOption?.avatarFile,\n colorFlag: dispatcherOption?.colorFlag,\n }\"\n [rounded]=\"!config().squareAvatar\"\n ></cai-avatar>\n <p class=\"dropdown-selected-content\">{{ dispatcherOption?.fullName }}</p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedDriverOwnerRef>\n @let driverOwnerOption = cast(selectedOption(), \"driverOwner\");\n @if (driverOwnerOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <cai-avatar\n [driver]=\"{\n id: driverOwnerOption?.id || 0,\n firstName: (driverOwnerOption?.fullName || ' ').split(' ')[0] || '',\n lastName: (driverOwnerOption?.fullName || ' ').split(' ')[1] || '',\n avatarFile: driverOwnerOption?.avatarFile,\n colorFlag: driverOwnerOption?.colorFlag,\n owner: driverOwnerOption?.driverType === 'OwnerOperator',\n driverType: {\n id: 0,\n name: (driverOwnerOption?.driverType | driverTypeLabel),\n },\n }\"\n [rounded]=\"false\"\n ></cai-avatar>\n <p class=\"dropdown-selected-content\">{{ driverOwnerOption?.fullName }}</p>\n <p class=\"selected-end-item driver-type\">\n {{ driverOwnerOption?.driverType | driverTypeLabel }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedTruckOwnerRef>\n @let truckOwnerOption = cast(selectedOption(), \"truckOwner\");\n @if (truckOwnerOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n @if (truckOwnerOption.truckType?.logoName) {\n <svg-icon\n class=\"truck-icon option-icon\"\n [name]=\"truckOwnerOption.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n }\n <p class=\"dropdown-selected-content\">\n {{ truckOwnerOption.truckNumber }}\n @if (truckOwnerOption.model) {\n <span class=\"truck-owner-bullet\">\u2022</span>\n {{ truckOwnerOption.model }}\n }\n </p>\n <p class=\"selected-end-item driver-type\">\n {{ truckOwnerOption.driverType | truckOwnershipLabel }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedTruckRef>\n @let truckOption = cast(selectedOption(), \"truckOption\");\n @if (truckOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon\"\n [name]=\"truckOption?.logoName?.slice(0, -4)\"\n ></svg-icon>\n <p class=\"dropdown-selected-content\">{{ truckOption?.name }}</p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedTrailerRef>\n @let trailerOption = cast(selectedOption(), \"trailerOption\");\n @if (trailerOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon\"\n [name]=\"trailerOption?.logoName?.slice(0, -4)\"\n ></svg-icon>\n <p class=\"dropdown-selected-content\">{{ trailerOption?.name }}</p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedHazardousRef>\n @let hazardousOption = cast(selectedOption(), \"hazardous\");\n @if (hazardousOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"hazard-icon\"\n [name]=\"hazardousOption?.logoName?.slice(0, -4)\"\n ></svg-icon>\n <p class=\"dropdown-selected-content dropdown-selected-hazardous\">\n {{ hazardousOption?.description }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedPmRef>\n @let pmOption = cast(selectedOption(), \"pmOption\");\n @if (pmOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon\"\n [name]=\"pmOption?.title | remapPmIcons\"\n ></svg-icon>\n <p class=\"dropdown-selected-content\">\n {{ pmOption?.title }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedColorRef>\n @let colorOption = cast(selectedOption(), \"colorOption\");\n @if (colorOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon cai-color\"\n [name]=\"'cai-color'\"\n [style.--color]=\"colorOption?.code\"\n [style.--hover-color]=\"colorOption?.hoverCode\"\n ></svg-icon>\n <p class=\"dropdown-selected-content\">\n {{ colorOption?.name }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedTollRef>\n @let tollOption = cast(selectedOption(), \"tollTransponderOption\");\n @if (tollOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <p class=\"dropdown-selected-content\">\n {{ tollOption?.name }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedSplitDriverRef>\n @let splitDriverOption = cast(selectedOption(), \"splitDriver\");\n @if (splitDriverOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <div class=\"dropdown-selected-content\">\n <div class=\"dropdown-subitem\">\n <cai-avatar [driver]=\"splitDriverOption\" [size]=\"18\"></cai-avatar>\n <p class=\"driver-name\">\n {{ splitDriverOption.firstName + \" \" + splitDriverOption.lastName }}\n </p>\n </div>\n </div>\n\n <p class=\"selected-end-item\">\n {{ splitDriverOption.payTypeValue }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedSplitTruckRef>\n @let splitTruckOption = cast(selectedOption(), \"splitTruck\");\n @if (splitTruckOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <div class=\"dropdown-selected-content\">\n <div class=\"dropdown-subitem trailer-item\">\n <svg-icon\n class=\"trailer-icon\"\n [name]=\"splitTruckOption!.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p class=\"trailer-number\">\n {{ splitTruckOption!.truckNumber }}\n </p>\n </div>\n </div>\n <p class=\"selected-end-item\">\n @if (\n splitTruckOption!.location?.city &&\n splitTruckOption!.location?.stateShortName\n ) {\n {{ splitTruckOption!.location?.city }},\n {{ splitTruckOption!.location?.stateShortName }}\n }\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedSplitTrailerRef>\n @let splitTrailerOption = cast(selectedOption(), \"splitTrailer\");\n @if (splitTrailerOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <div class=\"dropdown-selected-content\">\n <div class=\"dropdown-subitem truck-item\">\n <svg-icon\n class=\"truck-icon\"\n [name]=\"splitTrailerOption!.trailerType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p class=\"truck-number\">\n {{ splitTrailerOption!.trailerNumber }}\n </p>\n </div>\n </div>\n <p class=\"selected-end-item\">\n @if (\n splitTrailerOption!.location?.city &&\n splitTrailerOption!.location?.stateShortName\n ) {\n {{ splitTrailerOption!.location?.city }},\n {{ splitTrailerOption!.location?.stateShortName }}\n }\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedAccidentDriverRef>\n @let accidentDriverOption = cast(selectedOption(), \"accidentDriver\");\n @if (accidentDriverOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <div class=\"dropdown-subitem accident-name\">\n <cai-avatar\n [driver]=\"accidentDriverOption!\"\n [size]=\"18\"\n [hover]=\"false\"\n ></cai-avatar>\n <p>\n {{\n accidentDriverOption!.firstName +\n \" \" +\n accidentDriverOption!.lastName\n }}\n </p>\n </div>\n <p class=\"accident-dob\">\n {{ accidentDriverOption!.dateOfBirth | date: \"MM/dd/yy\" }}\n </p>\n <p class=\"accident-cdl-number\">\n {{ accidentDriverOption!.cdlNumber }}\n </p>\n <div class=\"dropdown-subitem accident-state\">\n <p>{{ accidentDriverOption!.cdlState?.stateShortName }}</p>\n @if (\n accidentDriverOption!.cdlState?.countryType?.name &&\n accidentDriverOption!.cdlState?.stateShortName\n ) {\n <svg-icon\n class=\"icon option-icon\"\n [name]=\"\n 'cai-' +\n accidentDriverOption!.cdlState?.countryType?.name?.toLowerCase() +\n '-' +\n accidentDriverOption!.cdlState?.stateShortName?.toLowerCase()\n \"\n ></svg-icon>\n }\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedAccidentTruckRef>\n @let accidentTruckOption = cast(selectedOption(), \"accidentTruck\");\n @if (accidentTruckOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <div class=\"dropdown-subitem accident-unit\">\n @if (accidentTruckOption!.truckType?.logoName) {\n <svg-icon\n class=\"truck-icon option-icon\"\n [name]=\"accidentTruckOption!.truckType!.logoName.slice(0, -4)\"\n ></svg-icon>\n }\n <p>{{ accidentTruckOption!.truckNumber }}</p>\n </div>\n <p class=\"accident-vin\">{{ accidentTruckOption!.vin }}</p>\n <p class=\"accident-plate\">\n {{ accidentTruckOption!.licensePlateNumber }}\n </p>\n <div class=\"dropdown-subitem accident-state\">\n <p>{{ accidentTruckOption!.licenseState?.stateShortName }}</p>\n @if (\n accidentTruckOption!.licenseState?.countryType?.name &&\n accidentTruckOption!.licenseState?.stateShortName\n ) {\n <svg-icon\n class=\"icon option-icon\"\n [name]=\"\n 'cai-' +\n accidentTruckOption!.licenseState?.countryType?.name?.toLowerCase() +\n '-' +\n accidentTruckOption!.licenseState?.stateShortName?.toLowerCase()\n \"\n ></svg-icon>\n }\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedAccidentTrailerRef>\n @let accidentTrailerOption = cast(selectedOption(), \"accidentTrailer\");\n @if (accidentTrailerOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <div class=\"dropdown-subitem accident-unit\">\n @if (accidentTrailerOption!.trailerType?.logoName) {\n <svg-icon\n class=\"trailer-icon option-icon\"\n [name]=\"accidentTrailerOption!.trailerType!.logoName.slice(0, -4)\"\n ></svg-icon>\n }\n <p>{{ accidentTrailerOption!.trailerNumber }}</p>\n </div>\n <p class=\"accident-vin\">{{ accidentTrailerOption!.vin }}</p>\n <p class=\"accident-plate\">\n {{ accidentTrailerOption!.licensePlateNumber }}\n </p>\n <div class=\"dropdown-subitem accident-state\">\n <p>{{ accidentTrailerOption!.licenseState?.stateShortName }}</p>\n @if (\n accidentTrailerOption!.licenseState?.countryType?.name &&\n accidentTrailerOption!.licenseState?.stateShortName\n ) {\n <svg-icon\n class=\"icon option-icon\"\n [name]=\"\n 'cai-' +\n accidentTrailerOption!.licenseState?.countryType?.name?.toLowerCase() +\n '-' +\n accidentTrailerOption!.licenseState?.stateShortName?.toLowerCase()\n \"\n ></svg-icon>\n }\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #passwordTooltip>\n {{ visible() ? \"Hide\" : \"Show\" }}\n</ng-template>\n\n<ng-template #errorTooltip>\n @if (\n (config().errorBehavior === \"floating\" ||\n (config().errorBehavior === \"static\" && hasText()) ||\n config().inTable) &&\n invalid &&\n !dropdown.isOpen()\n ) {\n {{ (ngControl?.errors | errorMessage: config().customErrors)[0] }}\n }\n</ng-template>\n\n<!-- #endregion -->\n", styles: ["input:-webkit-autofill,input:-webkit-autofill:hover,input:-webkit-autofill:focus,input:-webkit-autofill:active{transition:background-color 5000s ease-in-out 0s!important}input:-webkit-autofill:focus{-webkit-text-fill-color:#ffffff!important}input:-moz-autofill,input:-moz-autofill-preview{filter:none}*,*:before,*:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}p,ul,ol,dl,blockquote,figure,pre{margin:0}button,input,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button{background:none;border:none;padding:0}img,svg,video,canvas,audio,iframe,embed,object{display:block;max-width:100%;height:auto}ul,ol{padding-left:1.5rem;list-style-position:outside}a{color:inherit;text-decoration:inherit}table{border-collapse:collapse;border-spacing:0}:focus:not(:focus-visible){outline:none}.app-input-container{--color-text: #2f2f2f;--color-text-negative: #df3c3c;--color-text-heading: #424242;--color-text-subtle: #919191;--color-text-inverse: #ffffff;--color-icon-neutral: #919191;--color-icon-negative: #e66767;--color-icon-positive: #6692f1;--color-icon-inverse: rgba(255, 255, 255, .6980392157);--color-icon-disable: #cccccc;--color-surface-neutral: #eeeeee;--color-surface-neutral-hover: #dadada;--color-surface-neutral-focus: #1d1d1d;--color-surface-positive: #e9effd;--color-surface-positive-hover: #bed0f9;--color-surface-positive-focus: #0b49d1;--color-surface-negative: #fbe9e9;--color-surface-negative-hover: #f4bebe;--color-surface-negative-focus: #c20c0c;--color-surface-disable: #f7f7f7;position:relative;border-radius:2px;background-color:var(--color-surface-neutral);color:var(--color-text);transition:background-color .1s cubic-bezier(.46,.03,.51,.95);display:flex}.app-input-container.inverse{--color-text: #ffffff;--color-text-negative: #ed9292;--color-text-heading: #ffffff;--color-text-inverse: #ffffff;--color-icon-neutral: #aaaaaa;--color-icon-negative: #ed9292;--color-icon-positive: #92b1f5;--color-icon-disable: #6c6c6c;--color-surface-neutral: #424242;--color-surface-neutral-hover: #6c6c6c;--color-surface-neutral-focus: #dadada;--color-surface-positive: rgba(59, 115, 237, .2);--color-surface-positive-hover: #2f519a;--color-surface-positive-focus: #0b49d1;--color-surface-negative: rgba(223, 60, 60, .2);--color-surface-negative-hover: #923030;--color-surface-negative-focus: #c20c0c;--color-surface-disable: rgba(66, 66, 66, .4)}.app-input-container.inverse:not(.has-error):not(.has-valid) .app-input:focus-visible{color:#2f2f2f}.app-input-container.inverse:not(.has-error):not(.has-valid):has(.app-input:focus-visible) .icon,.app-input-container.inverse:not(.has-error):not(.has-valid):has(.app-input:focus-visible) .icon-sm{color:#919191!important}.app-input-container.inverse:not(.has-error):not(.has-valid):has(.app-input:focus-visible) .separator{background-color:#919191!important}.app-input-container.inverse:not(.has-error):not(.has-valid):has(.app-input:focus-visible) .bg-icon{background-color:#919191!important;color:#dadada}.app-input-container.inverse.is-empty:has(.app-input:focus-visible) .icon,.app-input-container.inverse.is-empty:has(.app-input:focus-visible) .icon-sm{color:#919191!important}.app-input-container.inverse.is-empty:has(.app-input:focus-visible) .bg-icon{background-color:#919191!important;color:#dadada}.app-input-container.inverse.is-empty:has(.app-input:focus-visible) .separator{background-color:#919191!important}.app-input-container.inverse.has-text:has(.app-input:disabled) .app-input-label{color:#424242!important}.app-input-container.hovered{background-color:var(--color-surface-neutral-hover)}.app-input-container.hovered:not(:has(.app-input:disabled)) .sub-label,.app-input-container.hovered:not(:has(.app-input:disabled)) .app-input-label .accident-state{margin-right:44px}@media(hover:hover){.app-input-container:hover{background-color:var(--color-surface-neutral-hover)}.app-input-container:hover:not(:has(.app-input:disabled)) .sub-label,.app-input-container:hover:not(:has(.app-input:disabled)) .app-input-label .accident-state{margin-right:44px}}.app-input-container.has-text .app-input-label{transform:translateY(-20px);font-weight:600;font-size:11px;color:var(--color-text-heading)!important}.app-input-container.has-text.fade-placeholder .app-input-label{transform:translateY(0);opacity:0}.app-input-container.has-text .subcontent{opacity:1!important}.app-input-container.has-text.static-placeholder .app-input-label{transform:translateY(0);opacity:1;color:var(--color-text)}@media(hover:hover){.app-input-container.has-text.is-address:hover .button-icon{opacity:1;pointer-events:auto}.app-input-container.has-text.is-address:hover .bg-icon{background-color:var(--color-icon-neutral);color:var(--color-surface-neutral-hover)}}.app-input-container.has-text.is-address:has(.app-input:focus-visible) .button-icon{opacity:1;pointer-events:auto}.app-input-container.has-text.is-address:has(.app-input:focus-visible) .bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-neutral-focus)}.app-input-container:has(.app-input:focus-visible){background-color:var(--color-surface-neutral-focus)}.app-input-container:has(.app-input:focus-visible) .app-input-label{transform:translateY(-20px);font-weight:600;font-size:11px;color:var(--color-text-heading)!important}.app-input-container:has(.app-input:focus-visible) .subcontent{opacity:1!important;color:#ffffffb2;left:unset!important;right:4px!important}.app-input-container:has(.app-input:focus-visible).has-text .subcontent{right:26px!important}.app-input-container:has(.app-input:focus-visible) .sub-label,.app-input-container:has(.app-input:focus-visible) .app-input-label .accident-state{margin-right:44px}.app-input-container:has(.app-input:focus-visible).fade-placeholder .app-input-label{transform:translateY(0);opacity:0}.app-input-container:has(.app-input:focus-visible).static-placeholder .app-input-label{transform:translateY(0);opacity:1;color:var(--color-text-inverse)!important}.app-input-container:has(.app-input:focus-visible) .bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-neutral-focus)}.app-input-container:has(.app-input:focus-visible) .separator{background-color:var(--color-icon-inverse)!important}.app-input-container:has(.app-input:disabled){background-color:var(--color-surface-disable)}.app-input-container:has(.app-input:disabled).hovered{background-color:var(--color-surface-disable)}@media(hover:hover){.app-input-container:has(.app-input:disabled):hover{background-color:var(--color-surface-disable)}}.app-input-container:has(.app-input:disabled):focus{background-color:var(--color-surface-disable)}.app-input-container:has(.app-input:disabled) .app-input-label{color:var(--color-text-subtle)}.app-input-container:has(.app-input:disabled) .separator{background-color:var(--color-icon-disable)}.app-input-container:has(.app-input:disabled) .dropdown-icon-container{opacity:0;pointer-events:none!important}.app-input-container:has(.app-input:disabled) .dropdown-selected:has(.selected-end-item){width:100%}.app-input-container:has(.app-input:disabled) .driver-type{color:#919191}.app-input-container:has(.app-input:disabled) .icon-container{pointer-events:none!important}.app-input-container:has(.app-input:disabled):not(.disabled-removable) .cancel-button{display:none!important}.app-input-container:has(.app-input:required):not(:has(.app-input:disabled)) .app-input-name:after{content:\" *\";color:var(--color-text-negative)}@media(hover:hover){.app-input-container:not(.has-error).is-empty:not(:has(.app-input:focus-visible)) .dropdown-icon-container:hover .dropdown-icon{color:#424242!important}}@media(hover:hover){.app-input-container:not(.has-error).is-empty:not(:has(.app-input:focus-visible)) .hover-icon:hover{color:#424242!important}}@media(hover:hover){.app-input-container:not(.has-error).is-empty:has(.app-input:focus-visible) .dropdown-icon-container:hover .dropdown-icon{color:#fff!important}}@media(hover:hover){.app-input-container:not(.has-error).is-empty:has(.app-input:focus-visible) .hover-icon:hover{color:#fff!important}}@media(hover:hover){.app-input-container:not(.has-error):not(.has-valid):has(.app-input:focus-visible) .dropdown-icon-container:hover .dropdown-icon{color:#fff!important}}@media(hover:hover){.app-input-container:not(.has-error):not(.has-valid):has(.app-input:focus-visible) .hover-icon:hover{color:#fff!important}}.app-input-container.canceled .app-input-label,.app-input-container.canceled .app-input{color:var(--color-text-subtle)!important}.app-input-container.canceled .icon-container .icon,.app-input-container.canceled .icon-container .icon-sm{color:var(--color-icon-disable)!important}.subcontent{pointer-events:none;position:absolute;left:6px;color:#919191;-webkit-user-select:none;user-select:none;top:50%;transform:translateY(-50%);transition:right .1s ease-in-out,left .1s ease-in-out,transform .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95),color .1s cubic-bezier(.46,.03,.51,.95);opacity:0;font-family:Montserrat;font-weight:400;font-style:Regular;font-size:14px;line-height:18px;letter-spacing:0%;height:18px;overflow:hidden}.subcontent .subcontent-hide{opacity:0!important}.app-input-label{position:absolute;display:flex;gap:4px;left:0;font-size:14px;line-height:18px;font-weight:400;pointer-events:none;padding:.25rem 6px;color:var(--color-text);transition:transform .1s ease-in-out,font-weight .1s ease-in-out,color .1s ease-in-out,font-size .1s ease-in-out,opacity .1s ease-in-out;transform:translateY(0);-webkit-user-select:none;user-select:none}.app-input-label.placeholder-color{color:var(--placeholder-color)!important}.app-input{padding:.25rem 6px;width:100%;font-size:14px;line-height:18px;font-weight:400;border:0;outline:none;margin-top:auto;background-color:transparent;transition:color .1s cubic-bezier(.46,.03,.51,.95);color:var(--color-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;position:relative}.app-input:focus-visible{color:var(--color-text-inverse)}@media(pointer:coarse){.app-input{font-size:16px;transform:scale(.875);transform-origin:left center;height:26px}}.app-input-error{position:absolute;bottom:-16px;right:6px;font-size:11px;font-weight:600;opacity:0;pointer-events:none;-webkit-user-select:none;user-select:none;transition:opacity .1s cubic-bezier(.46,.03,.51,.95),transform .1s cubic-bezier(.46,.03,.51,.95);color:var(--color-text-negative);transform:translateY(-10px)}.app-input-container.has-error{background-color:var(--color-surface-negative)}.app-input-container.has-error:not(.has-icon):not(.has-password):not(.has-right) .app-input{padding-right:26px}.app-input-container.has-error:has(.app-input:focus-visible):not(.has-right) .app-input{padding-right:26px}@media(hover:hover){.app-input-container.has-error:hover:not(.has-right) .app-input{padding-right:26px}}.app-input-container.has-error.has-right .app-input{padding-right:6px;padding-left:26px}.app-input-container.has-error.hovered{background-color:var(--color-surface-negative-hover)}.app-input-container.has-error.hovered.has-text .button-icon{opacity:1;pointer-events:auto}.app-input-container.has-error.hovered.has-text .bg-icon{background-color:var(--color-icon-negative);color:var(--color-surface-negative-hover)}@media(hover:hover){.app-input-container.has-error:hover{background-color:var(--color-surface-negative-hover)}.app-input-container.has-error:hover.has-text .button-icon{opacity:1;pointer-events:auto}.app-input-container.has-error:hover.has-text .bg-icon{background-color:var(--color-icon-negative);color:var(--color-surface-negative-hover)}}.app-input-container.has-error:has(.app-input:focus-visible){background-color:var(--color-surface-negative-focus);color:var(--color-text-inverse)}.app-input-container.has-error:has(.app-input:focus-visible).has-text .button-icon{opacity:1}.app-input-container.has-error:has(.app-input:focus-visible).has-text .bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-negative-focus)}.app-input-container.has-error:has(.app-input:focus-visible).is-empty,.app-input-container.has-error:has(.app-input:focus-visible).has-dropdown:not(.has-selected){background-color:var(--color-surface-neutral-focus)!important}.app-input-container.has-error:has(.app-input:focus-visible).is-empty .app-input-error,.app-input-container.has-error:has(.app-input:focus-visible).has-dropdown:not(.has-selected) .app-input-error{opacity:0}.app-input-container.has-error:has(.app-input:focus-visible).is-empty .bg-icon,.app-input-container.has-error:has(.app-input:focus-visible).has-dropdown:not(.has-selected) .bg-icon{color:var(--color-surface-neutral-focus)!important}.app-input-container.has-error:has(.app-input:not(:focus-visible)).app-input-container:not(:hover) .warning-icon,.app-input-container.has-error.is-empty:has(.app-input:not(:focus-visible)) .warning-icon{opacity:1!important}.app-input-container.has-error .app-input-error{opacity:1;transform:translateY(0);pointer-events:auto}.app-input-container.has-error .app-input::selection{background-color:#ffffff4d}.app-input-container.has-error .icon-container .separator,.app-input-container.has-error .dropdown-icon-container .separator{background-color:var(--color-icon-negative)}.app-input-container.has-error .icon-container .icon,.app-input-container.has-error .icon-container .icon-sm,.app-input-container.has-error .dropdown-icon-container .icon,.app-input-container.has-error .dropdown-icon-container .icon-sm{color:var(--color-icon-negative)}@media(hover:hover){.app-input-container.has-error:not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .bg-icon:hover{background-color:#c20c0c!important}}@media(hover:hover){.app-input-container.has-error:not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .dropdown-icon-container:hover .dropdown-icon{color:#c20c0c!important}}@media(hover:hover){.app-input-container.has-error:not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .hover-icon:hover{color:#c20c0c!important}}@media(hover:hover){.app-input-container.has-error:not(.removable):has(.app-input:focus-visible) .bg-icon:hover{background-color:#fff!important}}@media(hover:hover){.app-input-container.has-error:not(.removable):has(.app-input:focus-visible) .dropdown-icon-container:hover .dropdown-icon{color:#fff!important}}@media(hover:hover){.app-input-container.has-error:not(.removable):has(.app-input:focus-visible) .hover-icon:hover{color:#fff!important}}.app-input-container.has-valid:not(.has-icon):not(.has-password):not(.has-right) .app-input{padding-right:26px}.app-input-container.has-valid:has(.app-input:focus-visible):not(.has-right) .app-input{padding-right:26px}@media(hover:hover){.app-input-container.has-valid:hover:not(.has-right) .app-input{padding-right:26px}}.app-input-container.has-valid.has-right .app-input{padding-right:6px;padding-left:26px}.app-input-container.has-valid.has-text:not(.has-dropdown):not(.in-table),.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):not(.in-table),.app-input-container.has-valid.has-multiple-dropdown.has-text:not(.in-table){background-color:var(--color-surface-positive)}.app-input-container.has-valid.has-text:not(.has-dropdown).hovered,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown).hovered,.app-input-container.has-valid.has-multiple-dropdown.has-text.hovered{background-color:var(--color-surface-positive-hover)}.app-input-container.has-valid.has-text:not(.has-dropdown).hovered .button-icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown).hovered .button-icon,.app-input-container.has-valid.has-multiple-dropdown.has-text.hovered .button-icon{opacity:1;pointer-events:auto}.app-input-container.has-valid.has-text:not(.has-dropdown).hovered .bg-icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown).hovered .bg-icon,.app-input-container.has-valid.has-multiple-dropdown.has-text.hovered .bg-icon{background-color:var(--color-icon-positive);color:var(--color-surface-positive-hover)}@media(hover:hover){.app-input-container.has-valid.has-text:not(.has-dropdown):hover,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):hover,.app-input-container.has-valid.has-multiple-dropdown.has-text:hover{background-color:var(--color-surface-positive-hover)}.app-input-container.has-valid.has-text:not(.has-dropdown):hover .button-icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):hover .button-icon,.app-input-container.has-valid.has-multiple-dropdown.has-text:hover .button-icon{opacity:1;pointer-events:auto}.app-input-container.has-valid.has-text:not(.has-dropdown):hover .bg-icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):hover .bg-icon,.app-input-container.has-valid.has-multiple-dropdown.has-text:hover .bg-icon{background-color:var(--color-icon-positive);color:var(--color-surface-positive-hover)}}.app-input-container.has-valid.has-text:not(.has-dropdown):has(.app-input:focus-visible),.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):has(.app-input:focus-visible),.app-input-container.has-valid.has-multiple-dropdown.has-text:has(.app-input:focus-visible){background-color:var(--color-surface-positive-focus);color:var(--color-text-inverse)}.app-input-container.has-valid.has-text:not(.has-dropdown):has(.app-input:focus-visible) .button-icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):has(.app-input:focus-visible) .button-icon,.app-input-container.has-valid.has-multiple-dropdown.has-text:has(.app-input:focus-visible) .button-icon{opacity:1;pointer-events:auto}.app-input-container.has-valid.has-text:not(.has-dropdown):has(.app-input:focus-visible) .bg-icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):has(.app-input:focus-visible) .bg-icon,.app-input-container.has-valid.has-multiple-dropdown.has-text:has(.app-input:focus-visible) .bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-positive-focus)}.app-input-container.has-valid.has-text:not(.has-dropdown):has(.app-input:not(:focus-visible)).app-input-container:not(:hover) .positive-icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):has(.app-input:not(:focus-visible)).app-input-container:not(:hover) .positive-icon,.app-input-container.has-valid.has-multiple-dropdown.has-text:has(.app-input:not(:focus-visible)).app-input-container:not(:hover) .positive-icon{opacity:1}.app-input-container.has-valid.has-text:not(.has-dropdown) .app-input::selection,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown) .app-input::selection,.app-input-container.has-valid.has-multiple-dropdown.has-text .app-input::selection{background-color:#ffffff4d}.app-input-container.has-valid.has-text:not(.has-dropdown) .icon-container .separator,.app-input-container.has-valid.has-text:not(.has-dropdown) .dropdown-icon-container .separator,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown) .icon-container .separator,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown) .dropdown-icon-container .separator,.app-input-container.has-valid.has-multiple-dropdown.has-text .icon-container .separator,.app-input-container.has-valid.has-multiple-dropdown.has-text .dropdown-icon-container .separator{background-color:var(--color-icon-positive)}.app-input-container.has-valid.has-text:not(.has-dropdown) .icon-container .icon,.app-input-container.has-valid.has-text:not(.has-dropdown) .icon-container .icon-sm,.app-input-container.has-valid.has-text:not(.has-dropdown) .dropdown-icon-container .icon,.app-input-container.has-valid.has-text:not(.has-dropdown) .dropdown-icon-container .icon-sm,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown) .icon-container .icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown) .icon-container .icon-sm,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown) .dropdown-icon-container .icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown) .dropdown-icon-container .icon-sm,.app-input-container.has-valid.has-multiple-dropdown.has-text .icon-container .icon,.app-input-container.has-valid.has-multiple-dropdown.has-text .icon-container .icon-sm,.app-input-container.has-valid.has-multiple-dropdown.has-text .dropdown-icon-container .icon,.app-input-container.has-valid.has-multiple-dropdown.has-text .dropdown-icon-container .icon-sm{color:var(--color-icon-positive)}.app-input-container.has-valid.has-text:not(.has-dropdown) .icon-container .password-key,.app-input-container.has-valid.has-text:not(.has-dropdown) .dropdown-icon-container .password-key,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown) .icon-container .password-key,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown) .dropdown-icon-container .password-key,.app-input-container.has-valid.has-multiple-dropdown.has-text .icon-container .password-key,.app-input-container.has-valid.has-multiple-dropdown.has-text .dropdown-icon-container .password-key{opacity:0;pointer-events:none}@media(hover:hover){.app-input-container.has-valid.has-text:not(.has-dropdown):not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .bg-icon:hover,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .bg-icon:hover,.app-input-container.has-valid.has-multiple-dropdown.has-text:not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .bg-icon:hover{background-color:#0b49d1!important}}@media(hover:hover){.app-input-container.has-valid.has-text:not(.has-dropdown):not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .dropdown-icon-container:hover .dropdown-icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .dropdown-icon-container:hover .dropdown-icon,.app-input-container.has-valid.has-multiple-dropdown.has-text:not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .dropdown-icon-container:hover .dropdown-icon{color:#0b49d1!important}}@media(hover:hover){.app-input-container.has-valid.has-text:not(.has-dropdown):not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .hover-icon:hover,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .hover-icon:hover,.app-input-container.has-valid.has-multiple-dropdown.has-text:not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .hover-icon:hover{color:#0b49d1!important}}@media(hover:hover){.app-input-container.has-valid.has-text:not(.has-dropdown):not(.removable):has(.app-input:focus-visible) .bg-icon:hover,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):not(.removable):has(.app-input:focus-visible) .bg-icon:hover,.app-input-container.has-valid.has-multiple-dropdown.has-text:not(.removable):has(.app-input:focus-visible) .bg-icon:hover{background-color:#fff!important}}@media(hover:hover){.app-input-container.has-valid.has-text:not(.has-dropdown):not(.removable):has(.app-input:focus-visible) .dropdown-icon-container:hover .dropdown-icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):not(.removable):has(.app-input:focus-visible) .dropdown-icon-container:hover .dropdown-icon,.app-input-container.has-valid.has-multiple-dropdown.has-text:not(.removable):has(.app-input:focus-visible) .dropdown-icon-container:hover .dropdown-icon{color:#fff!important}}@media(hover:hover){.app-input-container.has-valid.has-text:not(.has-dropdown):not(.removable):has(.app-input:focus-visible) .hover-icon:hover,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):not(.removable):has(.app-input:focus-visible) .hover-icon:hover,.app-input-container.has-valid.has-multiple-dropdown.has-text:not(.removable):has(.app-input:focus-visible) .hover-icon:hover{color:#fff!important}}.in-table,.in-table.has-error,.in-table.has-valid.has-text{background-color:transparent}.in-table.has-error:not(:hover).in-table:not(.app-input-container:has(.app-input:focus-visible)) .app-input{color:var(--color-text-negative)}.in-table.has-error:not(:hover).in-table:not(.app-input-container:has(.app-input:focus-visible)):not(.static-placeholder) .app-input-label{color:var(--color-text-negative)}.in-table .dropdown-icon-container{opacity:0}@media(hover:hover){.in-table:hover .dropdown-icon-container{opacity:1}}.in-table:has(.app-input:focus-visible) .dropdown-icon-container{opacity:1}.app-input-icon{position:absolute;right:4px;top:4px;pointer-events:none;transition:color .1s cubic-bezier(.46,.03,.51,.95),background-color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95)}.button-icon{opacity:0;pointer-events:none}@media(hover:hover){.button-icon:hover{cursor:pointer}}.bg-icon{background-color:var(--color-icon-neutral);color:var(--color-surface-neutral);border-radius:1px;height:18px;width:18px;padding:0;display:grid;place-items:center;transition:background-color .1s cubic-bezier(.46,.03,.51,.95),color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95),transform .1s cubic-bezier(.46,.03,.51,.95);transform-box:border-box;transform-origin:center;will-change:transform}.bg-icon svg{transition:transform .1s cubic-bezier(.46,.03,.51,.95)}@media(hover:hover){.bg-icon:hover{transform:scale(1.2222222222)}.bg-icon:hover svg{transform:scale(.8181818182)}}.bg-icon:active{transform:scale(1)}.round-icon{background-color:#919191;color:#2f2f2f;border-radius:50%;height:18px;width:18px;padding:0;display:grid;place-items:center;transition:background-color .1s cubic-bezier(.46,.03,.51,.95),color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95)}.positive-icon{color:var(--color-icon-positive);height:18px;width:18px;display:grid;place-items:center;opacity:0}.warning-icon{color:var(--color-icon-negative);height:18px;width:18px;display:grid;place-items:center;opacity:0}.text-color-positive:not(:hover):not(:has(.app-input:focus-visible)) .app-input{color:#3b73ed}.is-plan.has-selected .app-input,.is-plan.has-selected .dropdown-selected-content,.is-plan.has-selected .selected-text{font-weight:700}.is-plan.has-selected:not(:has(.app-input:focus-visible)) .app-input,.is-plan.has-selected:not(:has(.app-input:focus-visible)) .dropdown-selected-content,.is-plan.has-selected:not(:has(.app-input:focus-visible)) .selected-text{color:#3b73ed}@media(hover:hover){.is-plan.has-selected:not(:has(.app-input:focus-visible)):hover .app-input,.is-plan.has-selected:not(:has(.app-input:focus-visible)):hover .dropdown-selected-content,.is-plan.has-selected:not(:has(.app-input:focus-visible)):hover .selected-text{color:#0b49d1}}.floating-error .app-input-error{opacity:0!important}.static-error .app-input-error{pointer-events:none!important;transform:translateY(calc(-100% - 4px))!important;transition:margin .1s ease-in-out,opacity .1s ease-in-out}.static-error.has-icon .app-input-error{margin-right:26px!important}.static-error:has(.app-input:not(:focus-visible)) .app-input-error{opacity:1}.static-error.has-text .app-input-error{opacity:0!important}.static-placeholder .app-input-label{position:relative;white-space:nowrap;font-size:11px;font-weight:600}.static-placeholder .dropdown-selected{overflow:hidden;display:flex!important;justify-content:left!important}.static-placeholder .dropdown-selected .selected-label-hidden{width:max-content;font-size:11px;font-weight:600;opacity:0;-webkit-user-select:none;user-select:none;pointer-events:none}.static-placeholder .dropdown-selected .selected-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;display:inline-block}.static-placeholder .app-input{padding-left:0!important}.static-placeholder.has-dropdown .cancel-button{display:none}.static-placeholder.has-dropdown .dropdown-icon-container .dropdown-icon{opacity:0;pointer-events:none}.static-placeholder.has-dropdown:not(:has(.app-input:disabled)):has(.app-input:focus-visible) .icon-container .icon,.static-placeholder.has-dropdown:not(:has(.app-input:disabled)):has(.app-input:focus-visible) .icon-container .icon-sm{opacity:0}.static-placeholder.has-dropdown:not(:has(.app-input:disabled)):has(.app-input:focus-visible) .dropdown-icon-container{z-index:5;pointer-events:auto;cursor:pointer}.static-placeholder.has-dropdown:not(:has(.app-input:disabled)):has(.app-input:focus-visible) .dropdown-icon-container .dropdown-icon{opacity:1!important}@media(hover:hover){.static-placeholder.has-dropdown:not(:has(.app-input:disabled)):hover .icon-container .icon,.static-placeholder.has-dropdown:not(:has(.app-input:disabled)):hover .icon-container .icon-sm{opacity:0}.static-placeholder.has-dropdown:not(:has(.app-input:disabled)):hover .dropdown-icon-container{z-index:5;pointer-events:auto;cursor:pointer}.static-placeholder.has-dropdown:not(:has(.app-input:disabled)):hover .dropdown-icon-container .dropdown-icon{opacity:1!important}}.static-placeholder.has-dropdown .dropdown-icon-container{right:4px!important;left:auto!important}.app-input-container.has-icon:has(.app-input:focus-visible) .icon-container .icon,.app-input-container.has-icon:has(.app-input:focus-visible) .icon-container .icon-sm,.app-input-container.has-icon:has(.app-input:focus-visible) .dropdown-icon-container .icon,.app-input-container.has-icon:has(.app-input:focus-visible) .dropdown-icon-container .icon-sm,.app-input-container.has-password:has(.app-input:focus-visible) .icon-container .icon,.app-input-container.has-password:has(.app-input:focus-visible) .icon-container .icon-sm,.app-input-container.has-password:has(.app-input:focus-visible) .dropdown-icon-container .icon,.app-input-container.has-password:has(.app-input:focus-visible) .dropdown-icon-container .icon-sm,.app-input-container.has-dropdown:has(.app-input:focus-visible) .icon-container .icon,.app-input-container.has-dropdown:has(.app-input:focus-visible) .icon-container .icon-sm,.app-input-container.has-dropdown:has(.app-input:focus-visible) .dropdown-icon-container .icon,.app-input-container.has-dropdown:has(.app-input:focus-visible) .dropdown-icon-container .icon-sm{color:var(--color-icon-inverse)!important}.app-input-container.has-icon.colored-icon .icon-container .icon,.app-input-container.has-icon.colored-icon .icon-container .icon-sm,.app-input-container.has-password.colored-icon .icon-container .icon,.app-input-container.has-password.colored-icon .icon-container .icon-sm,.app-input-container.has-dropdown.colored-icon .icon-container .icon,.app-input-container.has-dropdown.colored-icon .icon-container .icon-sm{color:var(--icon-color)}.app-input-container.has-icon.is-empty:has(.app-input:disabled) .icon-container .icon,.app-input-container.has-icon.is-empty:has(.app-input:disabled) .icon-container .icon-sm,.app-input-container.has-icon.is-empty:has(.app-input:disabled) .dropdown-icon-container .icon,.app-input-container.has-icon.is-empty:has(.app-input:disabled) .dropdown-icon-container .icon-sm,.app-input-container.has-password.is-empty:has(.app-input:disabled) .icon-container .icon,.app-input-container.has-password.is-empty:has(.app-input:disabled) .icon-container .icon-sm,.app-input-container.has-password.is-empty:has(.app-input:disabled) .dropdown-icon-container .icon,.app-input-container.has-password.is-empty:has(.app-input:disabled) .dropdown-icon-container .icon-sm,.app-input-container.has-dropdown.is-empty:has(.app-input:disabled) .icon-container .icon,.app-input-container.has-dropdown.is-empty:has(.app-input:disabled) .icon-container .icon-sm,.app-input-container.has-dropdown.is-empty:has(.app-input:disabled) .dropdown-icon-container .icon,.app-input-container.has-dropdown.is-empty:has(.app-input:disabled) .dropdown-icon-container .icon-sm{color:var(--color-icon-disable)!important}.app-input-container.has-icon .positive-icon,.app-input-container.has-icon .warning-icon,.app-input-container.has-password .positive-icon,.app-input-container.has-password .warning-icon,.app-input-container.has-dropdown .positive-icon,.app-input-container.has-dropdown .warning-icon{display:none!important}.app-input-container.has-icon .icon,.app-input-container.has-icon .icon-sm,.app-input-container.has-password .icon,.app-input-container.has-password .icon-sm,.app-input-container.has-dropdown .icon,.app-input-container.has-dropdown .icon-sm{height:18px;width:18px;display:grid;place-items:center;color:var(--color-icon-neutral);transition:color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95);opacity:1}.app-input-container.has-icon:has(.app-input:focus-visible):not(.static-placeholder) .dropdown-selected,.app-input-container.has-password:has(.app-input:focus-visible):not(.static-placeholder) .dropdown-selected,.app-input-container.has-dropdown:has(.app-input:focus-visible):not(.static-placeholder) .dropdown-selected{width:calc(100% - 48px)!important}@media(hover:hover){.app-input-container.has-icon:hover:not(:has(.app-input:disabled)):not(.static-placeholder) .dropdown-selected,.app-input-container.has-password:hover:not(:has(.app-input:disabled)):not(.static-placeholder) .dropdown-selected,.app-input-container.has-dropdown:hover:not(:has(.app-input:disabled)):not(.static-placeholder) .dropdown-selected{width:calc(100% - 48px)!important}}.icon-sm{height:14px;width:14px}.app-input-container.has-icon .icon-container,.app-input-container.has-password .icon-container{height:26px;display:flex;justify-items:center;align-items:center;gap:4px;padding:.25rem 0 .25rem 6px}@media(hover:hover){.app-input-container.has-icon .icon-container:hover,.app-input-container.has-password .icon-container:hover{cursor:text}}.app-input-container.has-icon .subcontent,.app-input-container.has-password .subcontent{left:32px}.app-input-container.has-icon .app-input-label,.app-input-container.has-password .app-input-label{left:27px}.app-input-container.has-icon .app-input,.app-input-container.has-password .app-input{padding-left:4px}.separator{height:14px;width:1px;border-radius:2px;background-color:var(--color-icon-neutral);transition:background-color .1s cubic-bezier(.46,.03,.51,.95);opacity:40%}.has-password .password-icons{display:grid;place-items:center;position:relative;height:18px;width:18px}.has-password .password-icons .icon,.has-password .password-icons .icon-sm{position:absolute;opacity:0}.has-password.is-empty:has(.app-input:not(:focus-visible)) .password-key{opacity:1!important}.has-password.is-empty:has(.app-input:not(:focus-visible)) .password-icons{pointer-events:none}.has-password:has(.app-input:disabled) .password-icons{pointer-events:none}.has-password.has-text .password-hidden,.has-password:has(.app-input:focus-visible) .password-hidden{opacity:1!important}@media(hover:hover){.has-password.has-text .password-hidden:hover,.has-password:has(.app-input:focus-visible) .password-hidden:hover{cursor:pointer}}.has-visible.has-text .password-shown,.has-visible:has(.app-input:focus-visible) .password-shown{opacity:1!important}@media(hover:hover){.has-visible.has-text .password-shown:hover,.has-visible:has(.app-input:focus-visible) .password-shown:hover{cursor:pointer}}.has-visible.has-text .password-hidden,.has-visible:has(.app-input:focus-visible) .password-hidden{opacity:0!important;pointer-events:none}.has-number .number-container{position:relative;display:flex;justify-content:center;align-items:center;right:4px;pointer-events:none}.has-number .number-buttons{display:flex;gap:4px;position:absolute;right:0;justify-content:center;align-items:center;opacity:0;transition:opacity .1s cubic-bezier(.46,.03,.51,.95);pointer-events:none}.has-number .plus-icon,.has-number .minus-icon{cursor:pointer;pointer-events:none}.has-number:has(.app-input:focus-visible){cursor:text}.has-number:has(.app-input:focus-visible) .number-buttons{opacity:1}.has-number:has(.app-input:focus-visible) .plus-icon{pointer-events:auto}.has-number:has(.app-input:focus-visible) .minus-icon{pointer-events:auto}.has-number:has(.app-input:focus-visible) .button-icon{opacity:0!important;pointer-events:none!important}.has-number:has(.app-input:focus-visible) .number-container{width:60px}.has-number:has(.app-input:focus-visible) .subcontent{right:52px!important}.has-number:has(.app-input:focus-visible).has-text .subcontent{right:52px!important}.colored-icon .icon,.colored-icon .icon-sm{color:var(--icon-color)!important}.dropdown-anchor{position:absolute;width:100%;-webkit-user-select:none;user-select:none;pointer-events:none;opacity:0}.dropdown-infinite-scroll-item{width:100%;-webkit-user-select:none;user-select:none;pointer-events:none;opacity:0;height:0}.dropdown-menu{min-width:0px!important;width:100%;border:0;margin-top:4px;top:30px;height:var(--unfiltered-height);min-height:var(--unfiltered-height);padding:0!important;overflow:hidden;border-radius:0!important;background:transparent!important}.dropdown-menu.has-stroke .dropdown-menu-content{outline:1px solid #6c6c6c;outline-offset:-1px}.dropdown-menu .dropdown-menu-content{position:absolute;width:100%;background-color:#2f2f2f;border-radius:3px;padding:4px 0 4px 4px;max-height:244px;z-index:1100!important;overflow-y:scroll;margin-top:auto!important;scroll-padding:6px 0}.dropdown-menu .dropdown-menu-content::-webkit-scrollbar{background-color:#2f2f2f;border-radius:0 3px 3px 0;width:4px}.dropdown-menu .dropdown-menu-content::-webkit-scrollbar-thumb{width:4px;background:#2f2f2f;border-left:2px solid #919191;background-clip:padding-box;border-radius:1px 3px 3px 1px}@supports (-moz-appearance: none){.dropdown-menu .dropdown-menu-content{padding-right:4px;scrollbar-width:4px;scrollbar-color:#919191 transparent;scrollbar-gutter:stable!important}@media(hover:hover){.dropdown-menu .dropdown-menu-content:hover{scrollbar-color:#919191 transparent;scrollbar-width:4px!important;scrollbar-gutter:stable!important}}}@-moz-document url-prefix(){.dropdown-menu .dropdown-menu-content{overflow:-moz-scrollbars-vertical;scrollbar-width:4px;scrollbar-color:#919191 transparent}}.option-icon{color:#6c6c6c;transition:color .1s cubic-bezier(.46,.03,.51,.95)}.option-icon.full-size{width:max-content;min-width:100%;height:18px!important;min-height:18px;flex-shrink:0;overflow:hidden}.option-icon.full-size svg{height:18px;width:max-content}.cai-color{color:var(--color)!important;transition:color .1s cubic-bezier(.46,.03,.51,.95)}@media(hover:hover){.color-item:hover .cai-color{color:var(--hover-color)!important}}.dropdown-item{color:#fff;font-weight:400;font-size:14px;line-height:18px;height:26px;padding:4px;width:100%;scroll-margin:6px 0;outline:1px solid transparent;outline-offset:-1px;display:flex;align-items:center;justify-content:left;gap:4px;background-color:#2f2f2f;transition:background-color .1s cubic-bezier(.46,.03,.51,.95),color .1s cubic-bezier(.46,.03,.51,.95),outline .1s cubic-bezier(.46,.03,.51,.95);border-radius:2px;position:relative}.dropdown-item.focused{outline:1px solid #6c6c6c!important}.dropdown-item.focused .end-item-base{opacity:0}.dropdown-item.focused .end-item-hover{opacity:1}.dropdown-item.focused .full-icon{color:#ffffffb2}.dropdown-item.focused .truck-trailer-option{opacity:1}.dropdown-item .icon,.dropdown-item .icon-sm{color:#919191}.dropdown-item .dropdown-content-with-icon{max-width:calc(100% - 22px);overflow-x:hidden;word-break:break-all;text-overflow:ellipsis;white-space:nowrap}.dropdown-item .dropdown-content-hazardous{max-width:calc(100% - 40px);overflow-x:hidden;word-break:break-all;text-overflow:ellipsis;white-space:nowrap}.dropdown-item .dropdown-content{max-width:70%;overflow-x:hidden;word-break:break-all;text-overflow:ellipsis;white-space:nowrap}@media(hover:hover){.dropdown-item:hover:not(.no-hover){background-color:#424242}.dropdown-item:hover:not(.no-hover) .end-item-base{opacity:0}.dropdown-item:hover:not(.no-hover) .end-item-hover{opacity:1}.dropdown-item:hover:not(.no-hover) .full-icon{color:#ffffffb2}.dropdown-item:hover:not(.no-hover) .truck-trailer-option{opacity:1}}.dropdown-item.no-hover{cursor:default;pointer-events:none}.dropdown-item:focus-visible{background-color:#424242;border:0;outline:none}.dropdown-item:not(:first-child){margin-top:4px}.dropdown-item.banned{color:#919191;cursor:default}@media(hover:hover){.dropdown-item.banned:hover{color:#919191;background-color:#2f2f2f}.dropdown-item.banned:hover .end-item-base{opacity:0}.dropdown-item.banned:hover .end-item-hover{opacity:1}}.dropdown-item.dnu .round-icon{background-color:#e66767}.dropdown-item.selected .dispatch-load-count,.dropdown-item.selected .unassigned-ltl,.dropdown-item.selected .unassigned-ltl .icon,.dropdown-item.selected .unassigned-ltl .icon-sm{color:#92b1f5}.dropdown-item:not(:hover):not(.focused):not(.selected) .truck-icon{color:#919191}.dropdown-item:not(:hover):not(.focused):not(.selected) .trailer-icon{color:#919191}@media(hover:hover){.dropdown-avatar:hover{z-index:20}}.no-results{color:#919191;font-weight:700;cursor:default;pointer-events:none}.add-new{color:#92b1f5!important;font-weight:700;font-size:11px}.add-new .dropdown-item-icon{opacity:1}@media(hover:hover){.add-new:hover{background-color:#3b73ed66!important;color:#fff!important}}.selected{font-weight:700}.selected .dropdown-item-icon{opacity:1}.selected .dropdown-item-count{color:#fff;background-color:#3b73ed}.selected .full-icon{color:#fff}.selected .end-item-base,.selected .end-item-hover{font-weight:700;color:#92b1f5}.selected .end-item-base .icon,.selected .end-item-base .icon-sm,.selected .end-item-hover .icon,.selected .end-item-hover .icon-sm{color:#92b1f5}.dropdown-item-icon{opacity:0;color:#92b1f5;width:14px;height:14px;margin-left:auto}.dropdown-item-icon.no-margin{margin-left:0}.dropdown-item-count{position:absolute;right:6px;top:50%;transform:translateY(-50%);padding:2px 5px;border-radius:10px;background-color:#424242;color:#ffffffb2;min-width:18px;line-height:14px;font-weight:600;font-size:11px;text-align:center}.fraud-icon{color:#fab15c!important;height:18px;width:18px}.dropdown-icon-container{position:absolute;right:4px;top:50%;transform:translateY(-50%);width:18px;height:18px;display:grid;place-items:center;transition:opacity .1s cubic-bezier(.46,.03,.51,.95)}.dropdown-icon-container.open .dropdown-icon{transform:rotateX(180deg)}.dropdown-icon{transition:transform .1s cubic-bezier(.46,.03,.51,.95),color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95)!important;transform:rotateX(0);cursor:pointer}.has-dropdown .app-input-icon{right:26px}.has-dropdown:has(.app-input:focus-visible) .subcontent{right:26px!important}.has-dropdown:has(.app-input:focus-visible).has-text .subcontent,.has-dropdown:has(.app-input:focus-visible).has-selected .subcontent{right:48px!important}.has-dropdown:has(.app-input:focus-visible):not(.static-placeholder):not(.is-adding) .app-input{padding-right:48px!important}@media(hover:hover){.has-dropdown:hover:not(.static-placeholder):not(.is-adding) .app-input{padding-right:48px!important}}.has-right .app-input{text-align:right}@media(pointer:coarse){.has-right .app-input{transform-origin:right center}}.has-right .positive-icon,.has-right .app-input-icon{left:4px;right:auto}.has-right .cancel-button{z-index:1}.has-right.has-number .plus-button-container{order:2}.has-right.has-number .minus-button-container{order:1}.has-right.static-placeholder .app-input-icon{right:4px!important;left:auto!important;opacity:0!important}.has-right.static-placeholder:has(.app-input:focus-visible) .cancel-button{opacity:0!important;pointer-events:none!important}.has-right.static-placeholder.removable .cancel-button .bg-icon{background-color:transparent!important}@media(hover:hover){.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)).has-valid.has-text .cancel-button .bg-icon{color:var(--color-icon-positive)!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)).has-valid.has-text .cancel-button .bg-icon:hover{color:#c20c0c!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)).has-valid.has-text:has(.app-input:focus-visible) .cancel-button .bg-icon{color:var(--color-icon-inverse)!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)).has-valid.has-text:has(.app-input:focus-visible) .cancel-button .bg-icon:hover{color:#fff!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)):not(.has-text) .cancel-button .bg-icon{color:var(--color-icon-neutral)!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)):not(.has-text) .cancel-button .bg-icon:hover{color:#c20c0c!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)):not(.has-text):has(.app-input:focus-visible) .cancel-button .bg-icon{color:var(--color-icon-inverse)!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)):not(.has-text):has(.app-input:focus-visible) .cancel-button .bg-icon:hover{color:#fff!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)).has-error .cancel-button .bg-icon{color:var(--color-icon-negative)!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)).has-error .cancel-button .bg-icon:hover{color:#c20c0c!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)) .cancel-button{opacity:1!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)) .cancel-button .bg-icon{opacity:1!important;pointer-events:auto!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)) .icon-container .icon,.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)) .icon-container .icon-sm{opacity:0!important}}@media(hover:hover){.has-right.static-placeholder:hover:not(:has(.app-input:focus-visible)):not(:has(.app-input:disabled)).has-text .cancel-button{opacity:1!important}}.has-right .app-input{order:1}.has-right.has-subcontent .app-input{flex:1;min-width:0;word-break:none}.has-right .dropdown-selected{margin-left:0!important;text-align:right!important;right:0!important;left:0!important;justify-content:flex-end!important;width:100%!important}.has-right .subcontent{position:relative!important;order:1;display:grid;place-items:center;padding-right:4px;height:unset!important;transform:translateY(0)!important;left:0!important;right:unset!important}.has-right .subcontent .subcontent-hide{display:none!important}.has-right.has-text .subcontent{left:0!important;right:unset!important}.has-right:has(.app-input:focus-visible) .subcontent{left:0!important;right:unset!important}.has-right.has-icon .subcontent,.has-right.has-password .subcontent{padding-right:0!important;padding-left:4px}.has-right.has-icon .dropdown-selected,.has-right.has-password .dropdown-selected{width:calc(100% - 24px)!important}.has-right.has-icon .app-input,.has-right.has-password .app-input{padding-right:0!important}.has-right.has-icon .app-input-label,.has-right.has-password .app-input-label{left:0!important}.has-right.has-icon.fade-placeholder .app-input-label,.has-right.has-password.fade-placeholder .app-input-label{left:auto!important;right:24px!important}.has-right.has-icon .icon-container,.has-right.has-password .icon-container{width:30px;padding-left:4px}.has-right.has-icon .icon-container .icon,.has-right.has-icon .icon-container .icon-sm,.has-right.has-password .icon-container .icon,.has-right.has-password .icon-container .icon-sm{order:2}.has-right.has-dropdown .app-input-icon{left:26px}.has-right.has-dropdown .dropdown-icon-container{left:4px}.has-right .warning-icon{display:none!important}.has-right.has-number .separator{order:3}.has-right.has-number .number-buttons{left:0;right:unset}.has-right.has-number .number-container{left:4px;right:unset}.has-right.has-number.app-input-container:has(.app-input:focus-visible) .app-input{padding-left:4px}@media(hover:hover){.has-right.has-number.app-input-container:hover:not(:has(.app-input:disabled)) .number-container{width:60px}.has-right.has-number.app-input-container:hover:not(:has(.app-input:disabled)) .app-input{padding-left:4px}}.has-right .icon-container{order:2;margin-right:4px}.has-right .icon-container .password-icons{order:2}.has-right.fade-placeholder .app-input-label{right:0!important;left:auto!important}.has-right.fade-placeholder:has(.app-input:required) .app-input-name:after{content:none!important}.has-right.fade-placeholder:has(.app-input:required) .app-input-name:before{content:\"* \";color:var(--color-text-negative)}@media(hover:hover){.removable:has(.cancel-button:hover).in-table{background-color:transparent!important}.removable:has(.cancel-button:hover).in-table .separator{background-color:var(--color-icon-negative)!important}}@media(hover:hover){.removable:has(.cancel-button:hover):not(.in-table){background-color:var(--color-surface-negative-hover)!important}.removable:has(.cancel-button:hover):not(.in-table) .separator{background-color:var(--color-icon-negative)!important}}@media(hover:hover){.removable:has(.cancel-button:hover):has(.app-input:focus-visible){background-color:var(--color-surface-negative-focus)!important}.removable:has(.cancel-button:hover):has(.app-input:focus-visible) .separator{background-color:var(--color-icon-inverse)!important}}.no-clear .cancel-button{display:none!important}.is-adding{padding-right:20px}.is-adding .dropdown-icon{opacity:0!important}.is-adding .accept-button{pointer-events:none;opacity:0!important}@media(hover:hover){.is-adding:not(.removable):has(.app-input:focus-visible) .bg-icon:hover{background-color:#fff!important}}@media(hover:hover){.is-adding:not(.removable):has(.app-input:focus-visible) .dropdown-icon-container:hover .dropdown-icon{color:#fff!important}}@media(hover:hover){.is-adding:not(.removable):has(.app-input:focus-visible) .hover-icon:hover{color:#fff!important}}.is-adding:has(.app-input:focus-visible){padding-right:48px!important}@media(hover:hover){.is-adding:hover{padding-right:48px!important}}.is-adding.has-right{padding-left:26px}.is-adding.has-right.has-right:has(.app-input:focus-visible){padding-left:40px}@media(hover:hover){.is-adding.has-right.has-right:hover{padding-left:40px}}.is-adding .app-input-icon{right:4px}@media(hover:hover){.is-adding.has-text:hover .button-icon{opacity:1;pointer-events:auto!important}.is-adding.has-text:hover .accept-button{pointer-events:auto;opacity:1!important}}.is-adding.has-text:has(.app-input:focus-visible) .button-icon{opacity:1;pointer-events:auto!important}.is-adding.has-text:has(.app-input:focus-visible) .accept-button{pointer-events:auto;opacity:1!important}.is-adding .cancel-button{opacity:1!important;pointer-events:auto}.is-adding .dropdown-icon-container{pointer-events:none}.is-adding .accept-button{right:26px;pointer-events:auto}.dropdown-selected{-webkit-user-select:none;user-select:none;position:absolute;top:50%;transform:translateY(-50%);left:0;width:calc(100% - 22px);pointer-events:none;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;word-break:break-all;padding:.25rem 6px;font-size:14px;line-height:18px;font-weight:400;border:0;outline:none;margin-top:auto;background-color:transparent;transition:color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95),width .1s ease-in-out;color:var(--color-text);display:flex;gap:4px}.dropdown-selected .dropdown-selected-content{overflow:hidden;-webkit-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex:1}.dropdown-selected .dropdown-selected-hazardous{max-width:calc(100% - 22px)}p.dropdown-selected{-webkit-user-select:none;user-select:none;display:block}.app-input-container:has(.app-input:focus-visible) .dropdown-selected{color:#fff;opacity:.7}.app-input-container:has(.app-input:focus-visible) .dropdown-selected .option-icon{color:#fff!important}.has-icon .positive-icon,.has-icon .warning-icon{display:none}.has-icon .dropdown-selected{left:27px;width:calc(100% - 49px)}@media(hover:hover){.has-icon:hover .dropdown-selected{width:calc(100% - 71px)}}.has-icon.app-input-container:has(.app-input:focus-visible) .dropdown-selected{width:calc(100% - 71px)}.hazard-icon{height:18px;width:max-content}.has-dispatch .app-input-label{transform:translateY(-20px);font-weight:600;font-size:11px;color:var(--color-text-heading)!important}.dispatch-load-count{color:#dadada;font-weight:700}.dispatch-separator{color:#919191;font-weight:400}.dispatch-status{font-family:Montserrat;font-weight:700;font-style:Bold;font-size:11px;line-height:14px;letter-spacing:0%;text-transform:uppercase;color:#ffffffb2;border-radius:2px;padding:2px 4px;display:flex;justify-content:center;align-items:center;gap:4px}.dispatch-status.status-available{background-color:#50ac2533}.dispatch-status.status-dispatched{background-color:#3b73ed33}.dispatch-status.status-arrivedpickup,.dispatch-status.status-checkedinpickup,.dispatch-status.status-checkedin,.dispatch-status.status-loading,.dispatch-status.status-loaded{background-color:#259f9433}.dispatch-status.status-arriveddelivery,.dispatch-status.status-checkedindelivery,.dispatch-status.status-offloading,.dispatch-status.status-offloaded,.dispatch-status.status-empty{background-color:#ff704333}.dispatch-status.status-canceled{background-color:#df3c3c33}.dispatch-status.status-off,.dispatch-status.status-deadheading,.dispatch-status.status-break,.dispatch-status.status-split{background-color:#91919133}.dispatch-status.status-towing{background-color:#9e47ec33}.dispatch-status.status-repair,.dispatch-status.status-dispatchedrepair,.dispatch-status.status-loadedrepair{background-color:#865e3a33}.dispatch-status .status-block{border-radius:1px;background-color:#aaa;padding-left:2px;padding-right:2px;font-family:Montserrat;font-weight:700;font-style:Bold;font-size:11px;line-height:12px;text-align:center;color:#2f2f2f;min-width:12px;height:12px}.dispatch-status .status-block.blue{background-color:#6692f1}.dispatch-status .status-block.green{background-color:#56b4ac}.dispatch-status .status-block.orange{background-color:#ff906d}.has-ftl-dispatch,.has-dispatch{min-width:600px}.has-ftl-dispatch:has(.app-input:focus-visible) .dropdown-selected .dispatch-icon,.has-ftl-dispatch:has(.app-input:focus-visible) .dropdown-selected .trailer-icon,.has-ftl-dispatch:has(.app-input:focus-visible) .dropdown-selected .truck-icon,.has-dispatch:has(.app-input:focus-visible) .dropdown-selected .dispatch-icon,.has-dispatch:has(.app-input:focus-visible) .dropdown-selected .trailer-icon,.has-dispatch:has(.app-input:focus-visible) .dropdown-selected .truck-icon{color:#fff}.dropdown-subitem{display:flex;justify-content:left;align-items:center;gap:4px}.truck-item{width:128px}.trailer-item{width:138px}.truck-trailer-option{opacity:0;transition:opacity .1s cubic-bezier(.46,.03,.51,.95);margin-left:auto}.truck-trailer-icon-colors.ic_truck_semi-truck,.truck-trailer-icon-colors.ic_truck_semi-wSleeper{color:#92b1f5}.truck-trailer-icon-colors.ic_truck_box-truck,.truck-trailer-icon-colors.ic_truck_reefer,.truck-trailer-icon-colors.ic_truck_cargo-van{color:#fbc88b}.truck-trailer-icon-colors.ic_truck_cement,.truck-trailer-icon-colors.ic_truck_dump,.truck-trailer-icon-colors.ic_truck_garbage{color:#ed9292}.truck-trailer-icon-colors.ic_truck_tow-truck,.truck-trailer-icon-colors.ic_truck_car-hauler,.truck-trailer-icon-colors.ic_truck_spotter{color:#86c9c3}.truck-trailer-icon-colors.ic_trailer_flatbed,.truck-trailer-icon-colors.ic_trailer_low-boy,.truck-trailer-icon-colors.ic_trailer_step-deck{color:#92b1f5}.truck-trailer-icon-colors.ic_trailer_chassis,.truck-trailer-icon-colors.ic_trailer_container{color:#80d6f1}.truck-trailer-icon-colors.ic_trailer_conestoga,.truck-trailer-icon-colors.ic_trailer_side-kit{color:#8785e8}.truck-trailer-icon-colors.ic_trailer_dryvan,.truck-trailer-icon-colors.ic_trailer_reefer{color:#fbc88b}.truck-trailer-icon-colors.ic_trailer_end-dump,.truck-trailer-icon-colors.ic_trailer_bottom-dump,.truck-trailer-icon-colors.ic_trailer_hopper{color:#ed9292}.truck-trailer-icon-colors.ic_trailer_tanker,.truck-trailer-icon-colors.ic_trailer_tanker-pneumatic{color:#ed93bb}.truck-trailer-icon-colors.ic_trailer_carhauler,.truck-trailer-icon-colors.ic_trailer_carhauler-stinger{color:#86c9c3}.sub-label{margin-left:auto;margin-right:22px;opacity:0;transition:margin .1s ease-in-out,opacity .1s ease-in-out;color:#6c6c6c}.app-input-label:has(.sub-label),.app-input-label:has(.accident-state){width:100%}.has-selected .sub-label{opacity:1}.dispatch-icon,.trailer-icon,.truck-icon{color:#919191;transition:color .1s cubic-bezier(.46,.03,.51,.95)}.truck-icon,.trailer-icon{width:42px}.truck-number{width:80px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.trailer-number{width:90px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.driver-name{max-width:170px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.dropdown-subitem-end{margin-left:auto;position:relative;height:26px;width:auto;display:flex;justify-content:right;align-items:center;font-family:Montserrat;font-weight:400;font-size:11px;line-height:18px;letter-spacing:0%;text-align:right;vertical-align:bottom}.end-item-base{position:absolute;display:flex;justify-content:right;align-items:center;width:max-content;gap:4px;color:#919191;transition:color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95);text-align:right}.dispatch-ltl{font-family:Montserrat;font-weight:700;font-size:11px;line-height:18px;letter-spacing:0%;text-align:right}.unassigned-ltl{margin-left:auto;display:flex;justify-content:right;align-items:center;width:max-content;gap:4px;color:#919191;transition:color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95);font-family:Montserrat;font-weight:700;font-size:11px;line-height:18px;letter-spacing:0%;text-align:right}.end-item-hover{position:absolute;display:flex;justify-content:right;align-items:center;gap:4px;width:max-content;opacity:0;color:#919191;transition:color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95)}.selected-end-item{margin-left:auto;font-family:Montserrat;font-weight:400;font-size:11px;line-height:18px;letter-spacing:0%;text-align:right;display:flex;justify-content:right;align-items:center;gap:4px}.group-item{font-family:Montserrat;font-weight:700!important;font-size:11px!important;line-height:18px;letter-spacing:0%;vertical-align:middle;text-transform:uppercase;background-color:#2f2f2f;color:#aaa!important}.group-item:not(:first-child){border-top:1px solid #424242}.group-item .group-icon{margin-left:auto;transform:rotate(180deg);transition:transform .1s cubic-bezier(.46,.03,.51,.95)}.group-item.unfolded{color:#fff!important}.group-item.unfolded .group-icon{transform:rotate(0)}.counter{background-color:#424242;padding:1px 4px;border-radius:60px;font-family:Montserrat;font-weight:600;font-size:11px;min-width:18px;line-height:14px;letter-spacing:0%;text-align:center;vertical-align:middle;color:#ffffffb2;transition:color .1s cubic-bezier(.46,.03,.51,.95)}.password-requirement{padding:6px;background-color:#fffffff2!important;box-shadow:0 0 4px #0006;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);overflow-y:hidden}.password-requirement p{font-family:Montserrat;font-weight:600;font-size:11px;line-height:14px;letter-spacing:0%;vertical-align:middle;color:#6c6c6c;font-style:italic}.password-requirement .icon,.password-requirement .icon-sm{width:14px!important;height:14px!important}.password-requirement .icon.checkmark,.password-requirement .checkmark.icon-sm{color:#ccc}.password-requirement .icon.cancel,.password-requirement .cancel.icon-sm{color:#e66767}.password-requirement ul{list-style-type:none;margin:6px 0 0;padding:0}.password-requirement ul li{color:#424242;font-size:11px;font-style:italic;font-weight:500;line-height:14px;display:flex;gap:4px}.password-requirement ul li.valid{color:#919191!important}.password-requirement ul li:not(:first-child){margin-top:6px}@media(hover:hover){.has-end-item:not(:has(.app-input:disabled)):hover .dropdown-selected{width:calc(100% - 44px)}}.has-end-item:not(:has(.app-input:disabled)):has(.app-input:focus-visible) .dropdown-selected{width:calc(100% - 44px)}.progress-bar{width:24px;height:8px;border-radius:2px;position:relative;transition:background-color .1s cubic-bezier(.46,.03,.51,.95)}.progress-bar:after{content:\"\";position:absolute;top:0;width:var(--progress);height:100%;transition:background-color .1s cubic-bezier(.46,.03,.51,.95)}.progress-bar.low{background-color:#df3c3c33}.progress-bar.low:after{background-color:#e66767}.progress-bar.medium{background-color:#f89b2e33}.progress-bar.medium:after{background-color:#fab15c}.progress-bar.high{background-color:#56b4ac33}.progress-bar.high:after{background-color:#56b4ac}.progress-bar.disable{background-color:#91919133}.progress-bar.disable:after{display:none}.app-input-container:has(.app-input:focus-visible) .selected-end-item .progress-bar{background-color:#fff!important}.full-icon{color:#919191}.fuelcard-number{width:216px}.fuelcard-brand{width:132px}.owner-ein{width:118px}.accident-name,.accident-unit,.accident-dob,.accident-cdl-number,.accident-vin,.accident-plate{flex-shrink:0}.accident-name>p,.accident-unit>p{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.accident-name{width:218px}.accident-unit{width:170px}.accident-dob,.accident-cdl-number,.accident-vin,.accident-plate{text-align:right;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.accident-dob{width:134px}.accident-cdl-number{width:140px}.accident-vin{width:182px}.accident-plate{width:140px}.accident-state{margin-left:auto;justify-content:flex-end;text-align:right}.app-input-label .accident-state{margin-right:22px;white-space:nowrap;transition:margin .1s ease-in-out}.has-multiple-dropdown.has-text{border-top-left-radius:0!important;border-top-right-radius:0!important}.multiple-container{display:flex;flex-wrap:wrap;gap:4px;padding:4px;border-top-left-radius:2px;border-top-right-radius:2px;position:relative;transition:background-color .1s ease-in-out;background-color:#e9effd}.multiple-container.hovered{background-color:#bed0f9}.multiple-container.hovered .multiple-selected{background-color:#e9effd}.multiple-container.focused{background-color:#0b49d1}.multiple-container.focused .multiple-selected{background-color:#3b73ed;color:#fff}.multiple-selected{background-color:#bed0f9;color:#2f2f2f;transition:background-color .1s ease-in-out,color .1s ease-in-out;display:flex;align-items:center;justify-content:space-between;width:100%;cursor:pointer;padding:2px 4px;-webkit-user-select:none;user-select:none;font-family:Montserrat;font-size:14px;font-weight:400;line-height:18px;width:209px;height:22px;border-radius:1px}.multiple-selected p{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}@media(hover:hover){.multiple-selected:hover{color:#2f2f2f!important;background-color:#fff!important}.multiple-selected:hover .multiple-remove-button{opacity:1}}.multiple-selected .multiple-remove-button{opacity:0;background-color:#6692f1;color:#fff;width:14px;height:14px}.multiple-selected .multiple-remove-button .multiple-remove-icon{width:12px;height:12px}.multiple-label{color:#424242;-webkit-user-select:none;user-select:none;pointer-events:none;font-family:Montserrat;font-size:11px;font-style:normal;font-weight:600;position:absolute;top:0;left:6px;transform:translateY(-14px)}.dropdown-group{border-radius:2px;transition:background-color .1s cubic-bezier(.46,.03,.51,.95),max-height .1s cubic-bezier(.46,.03,.51,.95),height .1s ease-in-out;margin-top:4px;max-height:var(--max-height);height:var(--max-height);overflow:hidden}.dropdown-group.no-items{cursor:default;pointer-events:none}.dropdown-group .group-item{outline:none;color:#fff!important;font-weight:400!important;font-size:14px!important;display:flex;transition:font-weight .1s ease-in-out,background-color .1s cubic-bezier(.46,.03,.51,.95),color .1s cubic-bezier(.46,.03,.51,.95);padding-left:6px;padding-right:6px}.dropdown-group .group-item.unfolded .counter{color:#fff}@media(hover:hover){.dropdown-group .group-item:hover .counter{color:#fff}}.dropdown-group .group-item.unfolded{font-weight:700!important}.dropdown-group .group-item .counter{margin-left:auto}.dropdown-group .group-item .group-icon{margin-left:0}.dropdown-group.active{background-color:#424242}@media(hover:hover){.dropdown-group.active .group-item:hover{background-color:#424242}}.dropdown-group.active .dropdown-item{background-color:#424242}@media(hover:hover){.dropdown-group:hover:not(.no-items){background-color:#424242}.dropdown-group:hover:not(.no-items) .group-item:hover{background-color:#424242}.dropdown-group:hover:not(.no-items) .dropdown-item{background-color:#424242}}.dropdown-group.active{padding:4px;padding-top:0!important}.dropdown-group.active .group-item{position:relative!important;padding-left:2px!important;padding-right:2px!important}@media(hover:hover){.dropdown-group .dropdown-item:not(.group-item):hover{background-color:#6c6c6c!important}}.fuel-stop-transaction-store{display:flex;gap:4px}.fuel-stop-transaction-store .fuel-stop-transaction-store-address{font-size:11px;color:#ccc;margin-left:auto}.fuel-stop-transaction-store .favorite-icon{color:#92b1f5;width:14px;height:14px}.fuel-stop-transaction-nostore{padding-left:2px;padding-right:2px}.hide-dropdown{opacity:0;pointer-events:none;transition:opacity .1s cubic-bezier(.46,.03,.51,.95)}.dropdown-menu:not(.hide-dropdown) .dropdown-menu-content{transition:max-height .2s cubic-bezier(.46,.03,.51,.95),opacity .2s cubic-bezier(.46,.03,.51,.95),height .1s ease-in-out;animation:dropdown-menu-opening .2s cubic-bezier(.46,.03,.51,.95)}.dropdown-menu:not(.hide-dropdown).animate-dropdown .dropdown-menu-content{max-height:var(--max-height);height:var(--max-height)}.closing:not(.hide-dropdown) .dropdown-menu-content{animation:dropdown-menu-closing .2s cubic-bezier(.46,.03,.51,.95);opacity:0;max-height:0}@keyframes dropdown-menu-opening{0%{max-height:0;opacity:0}to{max-height:244px;opacity:1}}@keyframes dropdown-menu-closing{0%{max-height:244px;opacity:1}to{max-height:0;opacity:0}}.app-input-container:has(.app-input:focus-visible).has-dropdown .loader.loading,.app-input-container:has(.app-input:focus-visible).has-text .loader.loading{opacity:1!important}.app-input-container:has(.app-input:focus-visible).has-dropdown.has-text .loader{transform:translate(-48px)}.loader{position:absolute;top:4px;right:0;transform:translate(-26px);pointer-events:none;z-index:1000;width:18px;height:18px;display:flex;align-items:center;justify-content:center;transition:opacity .1s ease-in-out,transform .1s ease-in-out;opacity:0}.loader-icon{width:14px;height:14px;animation:spin .8s ease-in-out infinite;transform-origin:center;display:flex;align-items:center;justify-content:center}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.size-22{height:22px}.size-22 .icon,.size-22 .icon-sm{height:14px!important;width:14px!important}.size-22 .bg-icon{height:14px!important;width:14px!important;padding:2px!important}.size-22 .icon-container{height:22px!important;padding-top:2px;padding-bottom:2px;padding-left:4px!important}.size-22 .app-input{padding-top:2px;padding-bottom:2px;padding-left:4px}@media(pointer:coarse){.size-22 .app-input{height:22px}}.size-22 .app-input-label{padding-top:2px;padding-bottom:2px;padding-left:4px}.size-22.has-icon .app-input-label{padding-left:0!important}.size-22 .app-input-icon{height:14px!important;width:14px!important}.size-22.has-text .app-input-label,.size-22:has(.app-input:focus-visible) .app-input-label{transform:translateY(-18px)}.size-22 .loader{top:2px;transform:translate(-22px)!important}.strikethrough .app-input,.strikethrough .dropdown-selected-content{text-decoration:line-through}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.split-option>p{max-width:calc(50% - 2px)}.split-option .dropdown-subitem-end{width:calc(50% - 2px)}.split-option .end-item-base,.split-option .end-item-hover{max-width:100%}.selected-end-item-truncate{max-width:50%}.truck-owner-unit{min-width:0}.truck-owner-unit .dropdown-content{max-width:none;min-width:0}.truck-owner-bullet{flex-shrink:0;color:#919191}\n"], dependencies: [{ kind: "directive", type:
4799
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: InputComponent, isStandalone: true, selector: "cai-input", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, preselectedOptions: { classPropertyName: "preselectedOptions", publicName: "preselectedOptions", isSignal: true, isRequired: false, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null }, hideValidation: { classPropertyName: "hideValidation", publicName: "hideValidation", isSignal: true, isRequired: false, transformFunction: null }, showNoResults: { classPropertyName: "showNoResults", publicName: "showNoResults", isSignal: true, isRequired: false, transformFunction: null }, preselectedUnit: { classPropertyName: "preselectedUnit", publicName: "preselectedUnit", isSignal: true, isRequired: false, transformFunction: null }, unassignedCount: { classPropertyName: "unassignedCount", publicName: "unassignedCount", isSignal: true, isRequired: false, transformFunction: null }, forceInvalidStyling: { classPropertyName: "forceInvalidStyling", publicName: "forceInvalidStyling", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onBlur: "onBlur", onFocused: "onFocused", onReset: "onReset", onValueChange: "onValueChange", onOptionAdded: "onOptionAdded", onAdd: "onAdd", onSelectionChange: "onSelectionChange", onSelectedObject: "onSelectedObject", onSelectedGroup: "onSelectedGroup", onClear: "onClear", onAutofill: "onAutofill", onScrolledToBottom: "onScrolledToBottom", onScrolledToBottomGroup: "onScrolledToBottomGroup", onSearch: "onSearch", onValueAdded: "onValueAdded", onRemove: "onRemove", onHoverRemove: "onHoverRemove" }, host: { listeners: { "realValueChange": "onRealValueChange($event)" } }, viewQueries: [{ propertyName: "inputRef", first: true, predicate: ["inputRef"], descendants: true }, { propertyName: "containerRef", first: true, predicate: ["containerRef"], descendants: true }, { propertyName: "dropdown", first: true, predicate: ["dropdown"], descendants: true }, { propertyName: "closeTooltip", first: true, predicate: ["closeTooltip"], descendants: true }, { propertyName: "PasswordDirective", first: true, predicate: PasswordDirective, descendants: true }, { propertyName: "NumberFormatDirective", first: true, predicate: NumberFormatDirective, descendants: true }, { propertyName: "MaskDirective", first: true, predicate: MaskDirective, descendants: true }], ngImport: i0, template: "<!-- #region Variables -->\n@let valid =\n ngControl?.valid &&\n (ngControl?.touched || ngControl?.dirty) &&\n !isAdding() &&\n !isDisabled();\n@let invalid =\n ngControl?.invalid &&\n (ngControl?.touched || ngControl?.dirty) &&\n !isAdding() &&\n !isDisabled();\n@let subcontent =\n config().subcontent ||\n (config().dropdown === \"subcontent\" &&\n selectedOption() &&\n cast(selectedOption(), \"dropdownOption\")![config().optionLabel || \"label\"]);\n\n@let name = config().name;\n@let password = config().type === \"password\" || config().type === \"account\";\n\n@let optionLabel = this.config().optionLabel || \"label\";\n@let dropdownType = this.config().dropdown;\n\n@let focusedOptionIndex = keyboardNavigationState().singleIndex;\n@let groupedNavigationState = keyboardNavigationState().groupedNavigationState;\n\n@let tooltipClass =\n config().inverse\n ? \"tooltip input-tooltip tooltip-bg-white-700 tooltip-text-black-500\"\n : \"tooltip input-tooltip\";\n\n<!-- #region Multiple selection -->\n@if (config().dropdown === \"multiple\" && !!multipleSelectedOptions().length) {\n <div\n (pointerdown)=\"focus($event)\"\n (mouseenter)=\"toggleHovered(true)\"\n (mouseleave)=\"toggleHovered(false)\"\n class=\"multiple-container\"\n [class]=\"{\n focused: focused(),\n hovered: hovered(),\n }\"\n >\n <label class=\"multiple-label\">{{ name }}</label>\n\n @for (option of multipleSelectedOptions(); track $index) {\n <div class=\"multiple-selected\">\n <p>{{ cast(option, \"dropdownOption\")![optionLabel || \"label\"] }}</p>\n <button\n type=\"button\"\n class=\"\"\n (pointerdown)=\"handleOption(option, $event)\"\n [tabIndex]=\"-1\"\n ngbTooltip=\"Clear\"\n [placement]=\"'top'\"\n [tooltipClass]=\"tooltipClass\"\n [autoClose]=\"true\"\n #closeTooltip=\"ngbTooltip\"\n [container]=\"'body'\"\n >\n <svg-icon\n name=\"cai-cancel\"\n class=\"multiple-remove-button multiple-remove-icon bg-icon\"\n ></svg-icon>\n </button>\n </div>\n }\n </div>\n}\n<!-- #endregion -->\n\n@let hasFloatingError =\n invalid &&\n (config().errorBehavior === \"floating\" ||\n (!!config().inTable && config().placeholderBehavior !== \"static\"));\n\n<div\n class=\"app-input-container\"\n [class]=\"\n {\n config: config(),\n hideValidation: hideValidation(),\n isPasswordVisible: visible(),\n isInvalid: !!invalid || forceInvalidStyling(),\n isValid: !!valid && !forceInvalidStyling(),\n isHovered: hovered(),\n hasText: hasText(),\n isAdding: isAdding(),\n selectedOption: selectedOption(),\n } | inputClass\n \"\n ngbDropdown\n [autoClose]=\"false\"\n #dropdown=\"ngbDropdown\"\n dropdownClass=\"cai-dropdown\"\n #containerRef\n [ngbTooltip]=\"errorTooltip\"\n [disableTooltip]=\"!hasFloatingError\"\n [container]=\"'body'\"\n [placement]=\"['bottom', 'top']\"\n tooltipClass=\"tooltip tooltip-bg-red-500 input-tooltip \"\n (pointerdown)=\"focus($event)\"\n (mouseenter)=\"dropdownType === 'multiple' && toggleHovered(true)\"\n (mouseleave)=\"dropdownType === 'multiple' && toggleHovered(false)\"\n>\n @if (config().icon && !password && !config().withButtons) {\n <div\n class=\"icon-container\"\n (pointerdown)=\"focus($event)\"\n [class]=\"{\n 'colored-icon': config().iconColor,\n }\"\n [style.--icon-color]=\"config().iconColor || ''\"\n >\n <svg-icon class=\"icon\" [name]=\"config().icon || ''\"></svg-icon>\n @if (!config().noSeparator) {\n <div class=\"separator\"></div>\n }\n </div>\n }\n @if (password) {\n <div class=\"icon-container\" (pointerdown)=\"toggleVisibility($event)\">\n <div\n class=\"password-icons\"\n [ngbTooltip]=\"passwordTooltip\"\n [container]=\"'body'\"\n [tooltipClass]=\"tooltipClass\"\n [autoClose]=\"true\"\n [placement]=\"'top'\"\n [openDelay]=\"600\"\n >\n <svg-icon\n class=\"icon password-key hover-icon\"\n name=\"cai-password-key\"\n ></svg-icon>\n <svg-icon\n class=\"icon password-shown hover-icon\"\n name=\"cai-password-shown\"\n ></svg-icon>\n <svg-icon\n class=\"icon password-hidden hover-icon\"\n name=\"cai-password-hidden\"\n ></svg-icon>\n </div>\n <div class=\"separator\"></div>\n </div>\n }\n\n <input\n class=\"app-input\"\n [tabindex]=\"isDisabled() ? '-1' : '0'\"\n [type]=\"\n password && !isPartiallyMasked()\n ? visible()\n ? 'text'\n : 'password'\n : 'text'\n \"\n [required]=\"config().required\"\n [disabled]=\"isDisabled()\"\n (input)=\"onInput($event)\"\n (blur)=\"dispatchOnBlur()\"\n [id]=\"id()\"\n [attr.aria-label]=\"config().label\"\n [attr.name]=\"\n config().autocomplete ? config().autocomplete : randomAutocomplete()\n \"\n [placeholder]=\"config()?.placeholder || ''\"\n [autocomplete]=\"\n config().autocomplete ? config().autocomplete : randomAutocomplete()\n \"\n #inputRef\n [appPassword]=\"password\"\n [appMask]=\"config().mask || ''\"\n [phone]=\"config().type === 'phone'\"\n [isInternational]=\"config().isInternational || false\"\n [phoneCountries]=\"config().phoneCountries\"\n [defaultDialCode]=\"config().defaultDialCode\"\n [attr.inputmode]=\"config().type === 'phone' ? 'tel' : null\"\n [appNumberRangeList]=\"config().numberRangeList || false\"\n [reveal]=\"config().reveal || 0\"\n [hide]=\"config().hide || 0\"\n [account]=\"config().type === 'account'\"\n [visible]=\"visible()\"\n [appNumberFormat]=\"config().type === 'number'\"\n [isNumberFormattingDisabled]=\"config().isNumberFormattingDisabled || false\"\n [numberFormat]=\"config().numberFormat\"\n [disableDecimals]=\"config().disableDecimals || false\"\n [prefix]=\"config().prefix || ''\"\n [max]=\"config().max\"\n [clampToMax]=\"config().clampToMax || false\"\n (keydown)=\"handleKeydown($event)\"\n (focus)=\"onFocus($event)\"\n />\n @if (\n !(dropdownType === \"multiple\" && !!multipleSelectedOptions().length) &&\n config().placeholderBehavior !== \"hidden\"\n ) {\n <label\n class=\"app-input-label\"\n [class.placeholder-color]=\"this.config().placeholderColor\"\n [style.--placeholder-color]=\"this.config().placeholderColor || ''\"\n (click)=\"focus($event)\"\n >\n <!-- Truck Trailer Driver Dropdown label -->\n @if (dropdownType === \"dispatch\" || dropdownType === \"ftl-dispatch\") {\n <p class=\"truck-item app-input-name\">Truck</p>\n <p class=\"trailer-item\">Trailer</p>\n <p>Driver</p>\n <p class=\"sub-label\">Rate</p>\n }\n <!-- Split Load -->\n @else if (dropdownType === \"split-driver\") {\n <p class=\"app-input-name\">{{ name }}</p>\n <p class=\"sub-label\">Rate</p>\n } @else if (\n dropdownType === \"split-truck\" || dropdownType === \"split-trailer\"\n ) {\n <p class=\"app-input-name\">{{ name }}</p>\n <p class=\"sub-label\">Location</p>\n }\n <!-- Dropdown variants -->\n @else if (dropdownType === \"broker\") {\n <p class=\"app-input-name\">{{ name }}</p>\n <p class=\"sub-label\">Credit</p>\n } @else if (dropdownType === \"contact\") {\n <p class=\"app-input-name\">{{ name }}</p>\n <p class=\"sub-label\">Phone</p>\n } @else if (dropdownType === \"shipper\") {\n <p class=\"app-input-name\">{{ name }}</p>\n <p class=\"sub-label\">Address</p>\n } @else if (dropdownType === \"owner\") {\n <p class=\"owner-ein app-input-name\">EIN</p>\n <p class=\"app-input-name\">Company Name</p>\n } @else if (dropdownType === \"fuelcard\") {\n <p class=\"fuelcard-number app-input-name\">Card No.</p>\n <p class=\"fuelcard-brand app-input-name\">Provider</p>\n <p class=\"app-input-name\">Nickname</p>\n }\n <!-- Accident -->\n @else if (dropdownType === \"accident-driver\") {\n <p class=\"accident-name app-input-name\">{{ name }}</p>\n <p class=\"accident-dob app-input-name\">DOB</p>\n <p class=\"accident-cdl-number app-input-name\">CDL No.</p>\n <p class=\"accident-state app-input-name\">CDL State</p>\n } @else if (\n dropdownType === \"accident-truck\" || dropdownType === \"accident-trailer\"\n ) {\n <p class=\"accident-unit app-input-name\">{{ name }}</p>\n <p class=\"accident-vin app-input-name\">VIN</p>\n <p class=\"accident-plate app-input-name\">Lic. Plate No.</p>\n <p class=\"accident-state app-input-name\">Lic. State</p>\n }\n <!-- Default Dropdown label -->\n @else {\n <span class=\"app-input-name\">{{ name }}</span>\n }\n </label>\n }\n @if (config().type === \"number\" && config().withButtons) {\n <div class=\"number-container\">\n <div class=\"number-buttons\">\n <div class=\"separator\"></div>\n <div\n class=\"plus-button-container\"\n ngbTooltip=\"Add\"\n [tooltipClass]=\"tooltipClass\"\n [container]=\"'body'\"\n [autoClose]=\"true\"\n [openDelay]=\"600\"\n [placement]=\"'top'\"\n (pointerdown)=\"increment($event)\"\n >\n <svg-icon name=\"cai-plus\" class=\"bg-icon plus-icon\"></svg-icon>\n </div>\n <div\n class=\"minus-button-container\"\n ngbTooltip=\"Remove\"\n [placement]=\"'top'\"\n [container]=\"'body'\"\n [tooltipClass]=\"tooltipClass\"\n [autoClose]=\"true\"\n [openDelay]=\"600\"\n (pointerdown)=\"decrement($event)\"\n >\n <svg-icon name=\"cai-minus\" class=\"bg-icon minus-icon\"></svg-icon>\n </div>\n </div>\n </div>\n }\n @if (!config().inTable) {\n @if (!dropdownType) {\n <svg-icon\n name=\"cai-checkmark\"\n class=\"app-input-icon positive-icon\"\n ></svg-icon>\n <svg-icon\n name=\"cai-status-warning\"\n class=\"app-input-icon warning-icon\"\n ></svg-icon>\n }\n }\n\n @if (\n invalid &&\n config().errorBehavior !== \"hidden\" &&\n (ngControl?.errors | errorMessage: config().customErrors : config().numberFormat)[0] &&\n !(config().inTable && config().placeholderBehavior !== \"static\")\n ) {\n <div class=\"app-input-error\">\n {{ (ngControl?.errors | errorMessage: config().customErrors : config().numberFormat)[0] }}\n </div>\n }\n\n <!-- Accept button -->\n @if ((config().add && isAdding()) || config().isEdit) {\n <button\n type=\"button\"\n class=\"app-input-icon button-icon accept-button\"\n (pointerdown)=\"addOption()\"\n [tabIndex]=\"-1\"\n ngbTooltip=\"Confirm\"\n [openDelay]=\"600\"\n [placement]=\"'top'\"\n [tooltipClass]=\"tooltipClass\"\n [container]=\"'body'\"\n [autoClose]=\"true\"\n >\n <svg-icon class=\"bg-icon\" name=\"cai-checkmark\"></svg-icon>\n </button>\n }\n\n <!-- Cancel button -->\n <button\n type=\"button\"\n class=\"app-input-icon button-icon cancel-button\"\n (pointerdown)=\"reset($event)\"\n (mouseenter)=\"onClearHover(true)\"\n (mouseleave)=\"onClearHover(false)\"\n [tabIndex]=\"-1\"\n ngbTooltip=\"{{\n hasText()\n | clearTooltip\n : isAdding()\n : config().isEdit || false\n : config().placeholderBehavior || 'dynamic'\n : dropdownType === 'multiple'\n : config().hasResetButton\n : canTooltipBeVisible()\n }}\"\n [openDelay]=\"600\"\n [tooltipClass]=\"tooltipClass\"\n [placement]=\"'top'\"\n [container]=\"'body'\"\n [autoClose]=\"true\"\n #closeTooltip=\"ngbTooltip\"\n >\n @let iconName =\n config().hasResetButton\n ? \"cai-reset\"\n : config().removable\n ? \"cai-delete\"\n : \"cai-cancel\";\n <svg-icon class=\"bg-icon\" [name]=\"iconName\"></svg-icon>\n </button>\n\n <div class=\"dropdown-anchor\" ngbDropdownAnchor></div>\n <!-- Dropdown menu -->\n\n @let hasLoader = isLoading() !== undefined;\n\n @if (hasLoader) {\n <div class=\"loader\" [class.loading]=\"isLoading()\">\n <svg-icon name=\"cai-loader\" class=\"loader-icon\"></svg-icon>\n </div>\n }\n\n @if (dropdownType) {\n @let maxHeight =\n ((dropdownOptions()?.length || (showNoResults() ? 1 : 0)) +\n (config().add ? 1 : 0)) *\n 30 +\n 4;\n\n @let animateDropdown =\n dropdownType !== \"toll\" &&\n dropdownType !== \"fuel-stop-transaction\" &&\n dropdownType !== \"dispatch\" &&\n dropdownType !== \"ftl-dispatch\" &&\n dropdownType !== \"split-driver\" &&\n dropdownType !== \"split-truck\" &&\n dropdownType !== \"split-trailer\";\n\n @let unfilteredHeight =\n dropdownType === \"contact\" || !animateDropdown\n ? 244\n : ((options()?.length || (showNoResults() ? 1 : 0)) +\n (config().add ? 1 : 0)) *\n 30 +\n 4;\n\n <div\n ngbDropdownMenu\n class=\"dropdown-menu input-dropdown-menu\"\n [class]=\"{\n 'hide-dropdown':\n config().dropdownAutocomplete &&\n !dropdownOptions()?.length &&\n !(showNoResults() && value()),\n 'animate-dropdown': animateDropdown,\n 'size-22': config().size === 22,\n 'has-stroke': config().hasStroke,\n }\"\n [class.closing]=\"closing()\"\n [style.--unfiltered-height]=\"\n unfilteredHeight > 244 ? '244px' : unfilteredHeight + 'px'\n \"\n [style.--max-height]=\"maxHeight > 244 ? '244px' : maxHeight + 'px'\"\n [style.width.px]=\"containerWidth()\"\n [tabindex]=\"-1\"\n (pointerdown)=\"onDropdownBackgroundClick($event)\"\n (mousedown)=\"$event.preventDefault()\"\n (pointerup)=\"stopEventPropagation($event)\"\n (mouseup)=\"stopEventPropagation($event)\"\n (click)=\"stopEventPropagation($event)\"\n >\n <div\n class=\"dropdown-menu-content\"\n [tabindex]=\"-1\"\n caiInfiniteScroll\n [scrollThreshold]=\"50\"\n (scrolledToBottom)=\"onDropdownScrolledToBottom()\"\n >\n @if (config().add) {\n <button\n class=\"dropdown-item add-new\"\n [class.focused]=\"\n focusedOptionIndex === -1 ||\n groupedNavigationState?.groupIndex === -1\n \"\n (click)=\"handleAddingOption($event)\"\n >\n <p>ADD NEW</p>\n <svg-icon name=\"cai-plus\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n <ng-container *ngTemplateOutlet=\"dropdownMenuRef\"></ng-container>\n </div>\n </div>\n\n @if (!config().dropdownAutocomplete) {\n <div\n class=\"dropdown-icon-container\"\n [class.open]=\"dropdown.isOpen() && !closing()\"\n (pointerdown)=\"onDropdownIconClick($event)\"\n >\n <svg-icon\n name=\"cai-arrow-secondary-down\"\n class=\"dropdown-icon icon\"\n ></svg-icon>\n </div>\n }\n @let specialDropdown =\n dropdownType === \"dispatch\" ||\n dropdownType === \"ftl-dispatch\" ||\n dropdownType === \"broker\" ||\n dropdownType === \"contact\" ||\n dropdownType === \"shipper\" ||\n dropdownType === \"bank\" ||\n dropdownType === \"dispatcher\" ||\n dropdownType === \"driver-owner\" ||\n dropdownType === \"truck-owner\" ||\n dropdownType === \"truck\" ||\n dropdownType === \"trailer\" ||\n dropdownType === \"hazardous\" ||\n dropdownType === \"state\" ||\n dropdownType === \"owner\" ||\n dropdownType === \"fuelcard\" ||\n dropdownType === \"pm\" ||\n dropdownType === \"color\" ||\n dropdownType === \"make\" ||\n dropdownType === \"toll\" ||\n dropdownType === \"provider\" ||\n dropdownType === \"split-driver\" ||\n dropdownType === \"split-truck\" ||\n dropdownType === \"split-trailer\" ||\n dropdownType === \"accident-driver\" ||\n dropdownType === \"accident-truck\" ||\n dropdownType === \"accident-trailer\";\n <!-- Placeholder -->\n @if (specialDropdown) {\n <ng-container *ngTemplateOutlet=\"selectedOptionRef\"></ng-container>\n } @else if (\n (config().add || config().search) &&\n !inputRef.value &&\n !this.isAdding() &&\n dropdownType !== \"subcontent\"\n ) {\n <div class=\"dropdown-selected\">\n @if (config().placeholderBehavior === \"static\") {\n <p class=\"selected-label-hidden\">\n {{ name + (config().required ? \" *\" : \"\") }}\n </p>\n <p class=\"selected-text\">\n {{\n selectedOption() &&\n cast(selectedOption(), \"dropdownOption\")![\n optionLabel || \"label\"\n ]\n }}\n </p>\n } @else {\n @if (\n selectedOption() &&\n cast(selectedOption(), \"dropdownOption\")![\n optionLabel || \"label\"\n ] === \"Hazardous\"\n ) {\n <svg-icon name=\"cai-violation-hazmat\" class=\"icon\"></svg-icon>\n <p class=\"dropdown-selected-content\">\n {{\n selectedOption() &&\n cast(selectedOption(), \"dropdownOption\")![\n optionLabel || \"label\"\n ]\n }}\n </p>\n } @else {\n <p class=\"dropdown-selected-content\">\n {{\n selectedOption() &&\n cast(selectedOption(), \"dropdownOption\")![\n optionLabel || \"label\"\n ]\n }}\n </p>\n }\n }\n </div>\n }\n } @else if (config().isEdit && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <p class=\"dropdown-selected-content\">{{ name }}</p>\n </div>\n }\n @if (config().passwordRequirements) {\n <div\n class=\"dropdown-menu password-requirement\"\n ngbDropdownMenu\n [style.width.px]=\"containerWidth()\"\n [class.closing]=\"closing()\"\n (pointerup)=\"stopEventPropagation($event)\"\n (mouseup)=\"stopEventPropagation($event)\"\n (click)=\"stopEventPropagation($event)\"\n >\n <ng-container *ngTemplateOutlet=\"passwordRequirementsRef\"></ng-container>\n </div>\n }\n @if (subcontent) {\n <p class=\"subcontent\">\n @if (!(config().alignment === \"right\")) {\n <span class=\"subcontent-hide\"\n >{{\n config().search\n ? selectedOption() &&\n cast(selectedOption(), \"dropdownOption\")![\n optionLabel || \"label\"\n ]\n : inputRef.value\n }}\n </span>\n }\n {{ subcontent }}\n </p>\n }\n</div>\n\n<!-- #region Templates -->\n\n<!-- #region Password requirements -->\n<ng-template #passwordRequirementsRef>\n @let isMinLengthValid =\n !this.ngControl?.errors?.[\"minlength\"] && this.value();\n @let isHasNumberValid =\n !this.ngControl?.errors?.[\"hasNumber\"] && this.value();\n @let isHasSymbolValid =\n !this.ngControl?.errors?.[\"hasSymbol\"] && this.value();\n @let isHasUppercaseValid =\n !this.ngControl?.errors?.[\"hasUppercase\"] && this.value();\n\n <p>Strong Password Requirement</p>\n <ul>\n <li [class.valid]=\"isMinLengthValid\">\n <svg-icon\n [name]=\"isMinLengthValid ? 'cai-checkmark' : 'cai-cancel'\"\n [class]=\"isMinLengthValid ? 'checkmark' : 'cancel'\"\n class=\"icon\"\n ></svg-icon\n ><span>Minimum 8 characters</span>\n </li>\n <li [class.valid]=\"isHasNumberValid\">\n <svg-icon\n class=\"icon\"\n [name]=\"isHasNumberValid ? 'cai-checkmark' : 'cai-cancel'\"\n [class]=\"isHasNumberValid ? 'checkmark' : 'cancel'\"\n ></svg-icon\n ><span>One number</span>\n </li>\n <li [class.valid]=\"isHasSymbolValid\">\n <svg-icon\n class=\"icon\"\n [name]=\"isHasSymbolValid ? 'cai-checkmark' : 'cai-cancel'\"\n [class]=\"isHasSymbolValid ? 'checkmark' : 'cancel'\"\n ></svg-icon\n ><span>One symbol</span>\n </li>\n <li [class.valid]=\"isHasUppercaseValid\">\n <svg-icon\n class=\"icon\"\n [name]=\"isHasUppercaseValid ? 'cai-checkmark' : 'cai-cancel'\"\n [class]=\"isHasUppercaseValid ? 'checkmark' : 'cancel'\"\n ></svg-icon\n ><span>One upper-case letter</span>\n </li>\n </ul>\n</ng-template>\n<!-- #endregion -->\n@let search = config().search;\n\n<ng-template #dropdownMenuRef>\n @switch (dropdownType) {\n @case (\"dispatch\") {\n <ng-container *ngTemplateOutlet=\"dispatchesRef\"></ng-container>\n }\n @case (\"ftl-dispatch\") {\n <ng-container *ngTemplateOutlet=\"ftlDispatchRef\"></ng-container>\n }\n @case (\"broker\") {\n <ng-container *ngTemplateOutlet=\"brokerRef\"></ng-container>\n }\n @case (\"contact\") {\n <ng-container *ngTemplateOutlet=\"contactRef\"></ng-container>\n }\n @case (\"shipper\") {\n <ng-container *ngTemplateOutlet=\"shipperRef\"></ng-container>\n }\n @case (\"bank\") {\n <ng-container *ngTemplateOutlet=\"bankRef\"></ng-container>\n }\n @case (\"dispatcher\") {\n <ng-container *ngTemplateOutlet=\"dispatcherRef\"></ng-container>\n }\n @case (\"driver-owner\") {\n <ng-container *ngTemplateOutlet=\"driverOwnerRef\"></ng-container>\n }\n @case (\"truck-owner\") {\n <ng-container *ngTemplateOutlet=\"truckOwnerRef\"></ng-container>\n }\n @case (\"trailer\") {\n <ng-container *ngTemplateOutlet=\"trailerRef\"></ng-container>\n }\n @case (\"truck\") {\n <ng-container *ngTemplateOutlet=\"truckRef\"></ng-container>\n }\n @case (\"hazardous\") {\n <ng-container *ngTemplateOutlet=\"hazardousRef\"></ng-container>\n }\n @case (\"state\") {\n <ng-container *ngTemplateOutlet=\"stateRef\"></ng-container>\n }\n @case (\"owner\") {\n <ng-container *ngTemplateOutlet=\"ownerRef\"></ng-container>\n }\n @case (\"fuelcard\") {\n <ng-container *ngTemplateOutlet=\"fuelcardRef\"></ng-container>\n }\n @case (\"pm\") {\n <ng-container *ngTemplateOutlet=\"pmRef\"></ng-container>\n }\n @case (\"multiple\") {\n <ng-container *ngTemplateOutlet=\"multipleRef\"></ng-container>\n }\n @case (\"make\") {\n <ng-container *ngTemplateOutlet=\"makeRef\"></ng-container>\n }\n @case (\"toll\") {\n <ng-container *ngTemplateOutlet=\"tollRef\"></ng-container>\n }\n @case (\"color\") {\n <ng-container *ngTemplateOutlet=\"colorRef\"></ng-container>\n }\n @case (\"fuel-stop-transaction\") {\n <ng-container *ngTemplateOutlet=\"fuelStopTransactionRef\"></ng-container>\n }\n @case (\"provider\") {\n <ng-container *ngTemplateOutlet=\"providerRef\"></ng-container>\n }\n @case (\"split-driver\") {\n <ng-container *ngTemplateOutlet=\"splitDriverRef\"></ng-container>\n }\n @case (\"split-truck\") {\n <ng-container *ngTemplateOutlet=\"splitTruckRef\"></ng-container>\n }\n @case (\"split-trailer\") {\n <ng-container *ngTemplateOutlet=\"splitTrailerRef\"></ng-container>\n }\n @case (\"accident-driver\") {\n <ng-container *ngTemplateOutlet=\"accidentDriverRef\"></ng-container>\n }\n @case (\"accident-truck\") {\n <ng-container *ngTemplateOutlet=\"accidentTruckRef\"></ng-container>\n }\n @case (\"accident-trailer\") {\n <ng-container *ngTemplateOutlet=\"accidentTrailerRef\"></ng-container>\n }\n @case (\"subcontent\") {\n <ng-container *ngTemplateOutlet=\"dropdownOptionsRef\"></ng-container>\n }\n @default {\n <ng-container *ngTemplateOutlet=\"dropdownOptionsRef\"></ng-container>\n }\n }\n</ng-template>\n\n<ng-template #selectedOptionRef>\n @switch (dropdownType) {\n @case (\"dispatch\") {\n <ng-container *ngTemplateOutlet=\"selectedDispatchRef\"></ng-container>\n }\n @case (\"ftl-dispatch\") {\n <ng-container *ngTemplateOutlet=\"selectedDispatchRef\"></ng-container>\n }\n @case (\"broker\") {\n <ng-container *ngTemplateOutlet=\"selectedBrokerRef\"></ng-container>\n }\n @case (\"contact\") {\n <ng-container *ngTemplateOutlet=\"selectedContactRef\"></ng-container>\n }\n @case (\"shipper\") {\n <ng-container *ngTemplateOutlet=\"selectedShipperRef\"></ng-container>\n }\n @case (\"bank\") {\n <ng-container *ngTemplateOutlet=\"selectedBankRef\"></ng-container>\n }\n @case (\"dispatcher\") {\n <ng-container *ngTemplateOutlet=\"selectedDispatcherRef\"></ng-container>\n }\n @case (\"driver-owner\") {\n <ng-container *ngTemplateOutlet=\"selectedDriverOwnerRef\"></ng-container>\n }\n @case (\"truck-owner\") {\n <ng-container *ngTemplateOutlet=\"selectedTruckOwnerRef\"></ng-container>\n }\n @case (\"trailer\") {\n <ng-container *ngTemplateOutlet=\"selectedTrailerRef\"></ng-container>\n }\n @case (\"truck\") {\n <ng-container *ngTemplateOutlet=\"selectedTruckRef\"></ng-container>\n }\n @case (\"hazardous\") {\n <ng-container *ngTemplateOutlet=\"selectedHazardousRef\"></ng-container>\n }\n @case (\"state\") {\n <ng-container *ngTemplateOutlet=\"selectedStateRef\"></ng-container>\n }\n @case (\"owner\") {\n <ng-container *ngTemplateOutlet=\"selectedOwnerRef\"></ng-container>\n }\n @case (\"fuelcard\") {\n <ng-container *ngTemplateOutlet=\"selectedFuelcardRef\"></ng-container>\n }\n @case (\"pm\") {\n <ng-container *ngTemplateOutlet=\"selectedPmRef\"></ng-container>\n }\n @case (\"make\") {\n <ng-container *ngTemplateOutlet=\"selectedMakeRef\"></ng-container>\n }\n @case (\"toll\") {\n <ng-container *ngTemplateOutlet=\"selectedTollRef\"></ng-container>\n }\n @case (\"color\") {\n <ng-container *ngTemplateOutlet=\"selectedColorRef\"></ng-container>\n }\n @case (\"provider\") {\n <ng-container *ngTemplateOutlet=\"selectedProviderRef\"></ng-container>\n }\n @case (\"split-driver\") {\n <ng-container *ngTemplateOutlet=\"selectedSplitDriverRef\"></ng-container>\n }\n @case (\"split-truck\") {\n <ng-container *ngTemplateOutlet=\"selectedSplitTruckRef\"></ng-container>\n }\n @case (\"split-trailer\") {\n <ng-container *ngTemplateOutlet=\"selectedSplitTrailerRef\"></ng-container>\n }\n @case (\"accident-driver\") {\n <ng-container\n *ngTemplateOutlet=\"selectedAccidentDriverRef\"\n ></ng-container>\n }\n @case (\"accident-truck\") {\n <ng-container *ngTemplateOutlet=\"selectedAccidentTruckRef\"></ng-container>\n }\n @case (\"accident-trailer\") {\n <ng-container\n *ngTemplateOutlet=\"selectedAccidentTrailerRef\"\n ></ng-container>\n }\n }\n</ng-template>\n\n<!-- Standard dropdown -->\n<ng-template #dropdownOptionsRef>\n @if (dropdownOptions().length) {\n @for (option of dropdownOptions(); track $index; let index = $index) {\n @let dropdownOption = cast(option, \"dropdownOption\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ dropdownOption.id }}\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'dropdownOption')?.id === dropdownOption.id,\n focused: focusedOptionIndex === index,\n }\"\n (click)=\"handleOption(dropdownOption, $event)\"\n >\n @if (dropdownOption[optionLabel] === \"Hazardous\") {\n <svg-icon name=\"cai-violation-hazmat\" class=\"icon\"></svg-icon>\n }\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (dropdownOption[optionLabel] | highlightSearch: value())\n : dropdownOption[optionLabel]\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #multipleRef>\n @if (dropdownOptions().length) {\n @for (option of dropdownOptions(); track $index; let index = $index) {\n @let dropdownOption = cast(option, \"dropdownOption\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ dropdownOption.id }}\"\n (click)=\"handleOption(dropdownOption, $event)\"\n [class]=\"{\n selected: isSelectedOption(dropdownOption),\n focused: focusedOptionIndex === index,\n }\"\n >\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (dropdownOption[optionLabel] | highlightSearch: value())\n : dropdownOption[optionLabel]\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #bankRef>\n @if (dropdownOptions().length) {\n @for (bank of dropdownOptions(); track $index; let index = $index) {\n @let bankOption = cast(bank, \"bank\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ bankOption.id }}\"\n (click)=\"handleOption(bankOption, $event)\"\n [class]=\"{\n selected: cast(selectedOption(), 'bank')?.id === bankOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n @if (bankOption.logoName) {\n <svg-icon\n class=\"full-icon\"\n [name]=\"bankOption.logoName.slice(0, -4)\"\n ></svg-icon>\n } @else {\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (bankOption.name || '' | highlightSearch: value())\n : bankOption.name\n \"\n ></p>\n }\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #makeRef>\n @if (dropdownOptions().length) {\n @for (make of dropdownOptions(); track $index; let index = $index) {\n @let makeOption = cast(make, \"make\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ makeOption.id }}\"\n (click)=\"handleOption(makeOption, $event)\"\n [class]=\"{\n selected: cast(selectedOption(), 'make')?.id === makeOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n @if (makeOption.logoName) {\n <svg-icon\n class=\"full-icon\"\n [name]=\"makeOption.logoName.slice(0, -4)\"\n ></svg-icon>\n } @else {\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (makeOption.name || '' | highlightSearch: value())\n : makeOption.name\n \"\n ></p>\n }\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Broker -->\n<ng-template #brokerRef>\n @if (dropdownOptions().length) {\n @for (broker of dropdownOptions(); track $index; let index = $index) {\n @let brokerOption = cast(broker, \"broker\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"broker-{{ brokerOption.id }}\"\n (click)=\"\n !(brokerOption.dnu || brokerOption.ban) &&\n handleOption(brokerOption, $event)\n \"\n [class]=\"{\n selected: cast(selectedOption(), 'broker')?.id === brokerOption.id,\n focused: focusedOptionIndex === index,\n banned: brokerOption.dnu || brokerOption.ban,\n dnu: brokerOption.dnu,\n }\"\n >\n @if (brokerOption?.dnu || brokerOption?.ban) {\n <svg-icon name=\"cai-minus\" class=\"round-icon\"></svg-icon>\n } @else if (brokerOption?.fraudCheck) {\n <svg-icon\n name=\"cai-status-warning-lite\"\n class=\"fraud-icon\"\n ></svg-icon>\n }\n <p\n class=\"dropdown-content\"\n [innerHTML]=\"\n search\n ? (brokerOption.businessName || '' | highlightSearch: value())\n : brokerOption.businessName\n \"\n ></p>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-base\">\n @if (!brokerOption.creditLimit) {\n <p>Unlimited</p>\n } @else {\n <p>{{ brokerOption.availableCredit || 0 | currency }}</p>\n <div\n class=\"progress-bar\"\n [style.--progress]=\"\n (\n brokerOption\n | brokerProgress: brokerOption.dnu || brokerOption.ban\n ).activePercentageOfPaid + '%'\n \"\n [class]=\"\n (\n brokerOption\n | brokerProgress: brokerOption.dnu || brokerOption.ban\n ).status\n \"\n ></div>\n }\n </div>\n <div class=\"end-item-hover\">\n <p>\n {{ brokerOption.loadsCount }} |\n {{ brokerOption.availableCredit || 0 | currency }}\n </p>\n <svg-icon name=\"cai-load\" class=\"icon\"></svg-icon>\n </div>\n </div>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Contact dropdown -->\n<ng-template #contactRef>\n @if (dropdownOptions().length) {\n @for (contact of dropdownOptions(); track $index; let index = $index) {\n @let contactOption = cast(contact, \"contact\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item split-option\"\n id=\"contact-{{ contact.id }}\"\n (click)=\"handleOption(contact, $event)\"\n [class]=\"{\n selected: cast(selectedOption(), 'contact')?.id === contact.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <p\n class=\"text-truncate\"\n [innerHTML]=\"\n search\n ? (contactOption.contactName || '' | highlightSearch: value())\n : contactOption.contactName\n \"\n ></p>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-base\">\n <p class=\"text-truncate\">{{ contactOption.department?.name }}</p>\n </div>\n <div class=\"end-item-hover\">\n <p class=\"text-truncate\">\n {{ contactOption.phone }}\n {{\n contactOption.extensionPhone\n ? \"x\" + contactOption.extensionPhone\n : \"\"\n }}\n </p>\n </div>\n </div>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Owner dropdown -->\n<ng-template #ownerRef>\n @if (dropdownOptions().length) {\n @for (owner of dropdownOptions(); track $index; let index = $index) {\n @let ownerOption = cast(owner, \"owner\");\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"owner-{{ ownerOption?.id }}\"\n (click)=\"handleOption(ownerOption!, $event)\"\n [class]=\"{\n selected: cast(selectedOption(), 'owner')?.id === ownerOption?.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <p\n class=\"owner-ein\"\n [innerHTML]=\"\n search\n ? (ownerOption?.ein || '' | highlightSearch: value())\n : ownerOption?.ein\n \"\n ></p>\n <p\n [innerHTML]=\"\n search\n ? (ownerOption?.name || '' | highlightSearch: value())\n : ownerOption?.name\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Fuelcard dropdown -->\n<ng-template #fuelcardRef>\n @if (dropdownOptions().length) {\n @for (fuelcard of dropdownOptions(); track $index; let index = $index) {\n @let fuelcardOption = cast(fuelcard, \"fuelCard\");\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"fuelcard-{{ fuelcardOption?.id }}\"\n (click)=\"handleOption(fuelcardOption!, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'fuelCard')?.id === fuelcardOption?.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <p\n class=\"fuelcard-number\"\n [innerHTML]=\"\n search\n ? (fuelcardOption?.number || '' | highlightSearch: value())\n : fuelcardOption?.number\n \"\n ></p>\n <p\n class=\"fuelcard-brand\"\n [innerHTML]=\"\n search\n ? (fuelcardOption?.brand || '' | highlightSearch: value())\n : fuelcardOption?.brand\n \"\n ></p>\n <p\n [innerHTML]=\"\n search\n ? (fuelcardOption?.account || '' | highlightSearch: value())\n : fuelcardOption?.account\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Accident driver dropdown -->\n<ng-template #accidentDriverRef>\n @if (dropdownOptions().length) {\n @for (driver of dropdownOptions(); track $index; let index = $index) {\n @let driverOption = cast(driver, \"accidentDriver\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"accident-driver-{{ driverOption.id }}\"\n (click)=\"handleOption(driverOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'accidentDriver')?.id === driverOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <div class=\"dropdown-subitem accident-name\">\n <cai-avatar\n [driver]=\"driverOption\"\n [size]=\"18\"\n [inverse]=\"true\"\n [hover]=\"false\"\n ></cai-avatar>\n <p\n [innerHTML]=\"\n driverOption.firstName + ' ' + driverOption.lastName\n | highlightSearch: value()\n \"\n ></p>\n </div>\n <p class=\"accident-dob\">\n {{ driverOption.dateOfBirth | date: \"MM/dd/yy\" }}\n </p>\n <p\n class=\"accident-cdl-number\"\n [innerHTML]=\"driverOption.cdlNumber || '' | highlightSearch: value()\"\n ></p>\n <div class=\"dropdown-subitem accident-state\">\n <p\n [innerHTML]=\"\n driverOption.cdlState?.stateShortName || ''\n | highlightSearch: value()\n \"\n ></p>\n @if (\n driverOption.cdlState?.countryType?.name &&\n driverOption.cdlState?.stateShortName\n ) {\n <svg-icon\n class=\"icon\"\n [name]=\"\n 'cai-' +\n driverOption.cdlState?.countryType?.name?.toLowerCase() +\n '-' +\n driverOption.cdlState?.stateShortName?.toLowerCase()\n \"\n ></svg-icon>\n }\n </div>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Accident truck dropdown -->\n<ng-template #accidentTruckRef>\n @if (dropdownOptions().length) {\n @for (truck of dropdownOptions(); track $index; let index = $index) {\n @let truckOption = cast(truck, \"accidentTruck\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"accident-truck-{{ truckOption.id }}\"\n (click)=\"handleOption(truckOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'accidentTruck')?.id === truckOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <div class=\"dropdown-subitem accident-unit\">\n @if (truckOption.truckType?.logoName) {\n <svg-icon\n class=\"truck-icon truck-trailer-icon-colors\"\n [class]=\"truckOption.truckType!.logoName.slice(0, -4)\"\n [name]=\"truckOption.truckType!.logoName.slice(0, -4)\"\n ></svg-icon>\n }\n <p\n [innerHTML]=\"truckOption.truckNumber | highlightSearch: value()\"\n ></p>\n </div>\n <p\n class=\"accident-vin\"\n [innerHTML]=\"truckOption.vin || '' | highlightSearch: value()\"\n ></p>\n <p\n class=\"accident-plate\"\n [innerHTML]=\"\n truckOption.licensePlateNumber || '' | highlightSearch: value()\n \"\n ></p>\n <div class=\"dropdown-subitem accident-state\">\n <p\n [innerHTML]=\"\n truckOption.licenseState?.stateShortName || ''\n | highlightSearch: value()\n \"\n ></p>\n @if (\n truckOption.licenseState?.countryType?.name &&\n truckOption.licenseState?.stateShortName\n ) {\n <svg-icon\n class=\"icon\"\n [name]=\"\n 'cai-' +\n truckOption.licenseState?.countryType?.name?.toLowerCase() +\n '-' +\n truckOption.licenseState?.stateShortName?.toLowerCase()\n \"\n ></svg-icon>\n }\n </div>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Accident trailer dropdown -->\n<ng-template #accidentTrailerRef>\n @if (dropdownOptions().length) {\n @for (trailer of dropdownOptions(); track $index; let index = $index) {\n @let trailerOption = cast(trailer, \"accidentTrailer\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"accident-trailer-{{ trailerOption.id }}\"\n (click)=\"handleOption(trailerOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'accidentTrailer')?.id === trailerOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <div class=\"dropdown-subitem accident-unit\">\n @if (trailerOption.trailerType?.logoName) {\n <svg-icon\n class=\"trailer-icon truck-trailer-icon-colors\"\n [class]=\"trailerOption.trailerType!.logoName.slice(0, -4)\"\n [name]=\"trailerOption.trailerType!.logoName.slice(0, -4)\"\n ></svg-icon>\n }\n <p\n [innerHTML]=\"trailerOption.trailerNumber | highlightSearch: value()\"\n ></p>\n </div>\n <p\n class=\"accident-vin\"\n [innerHTML]=\"trailerOption.vin || '' | highlightSearch: value()\"\n ></p>\n <p\n class=\"accident-plate\"\n [innerHTML]=\"\n trailerOption.licensePlateNumber || '' | highlightSearch: value()\n \"\n ></p>\n <div class=\"dropdown-subitem accident-state\">\n <p\n [innerHTML]=\"\n trailerOption.licenseState?.stateShortName || ''\n | highlightSearch: value()\n \"\n ></p>\n @if (\n trailerOption.licenseState?.countryType?.name &&\n trailerOption.licenseState?.stateShortName\n ) {\n <svg-icon\n class=\"icon\"\n [name]=\"\n 'cai-' +\n trailerOption.licenseState?.countryType?.name?.toLowerCase() +\n '-' +\n trailerOption.licenseState?.stateShortName?.toLowerCase()\n \"\n ></svg-icon>\n }\n </div>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Shipper dropdown -->\n<ng-template #shipperRef>\n @if (dropdownOptions().length) {\n @for (shipper of dropdownOptions(); track $index; let index = $index) {\n @let shipperOption = cast(shipper, \"shipper\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item split-option\"\n id=\"shipper-{{ shipperOption.id }}\"\n (click)=\"handleOption(shipperOption, $event)\"\n [class]=\"{\n selected: cast(selectedOption(), 'shipper')?.id === shipperOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <p\n class=\"text-truncate\"\n [innerHTML]=\"\n search\n ? (shipperOption.businessName || '' | highlightSearch: value())\n : shipperOption.businessName\n \"\n ></p>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-base\">\n <p\n class=\"text-truncate\"\n [innerHTML]=\"\n search\n ? (shipperOption.address?.address || ''\n | highlightSearch: value())\n : shipperOption.address?.address\n \"\n ></p>\n </div>\n <div class=\"end-item-hover\">\n <p>\n {{ shipperOption.pickupCount }} Pickup |\n {{ shipperOption.deliveryCount }} Delivery\n </p>\n <svg-icon name=\"cai-load\" class=\"icon\"></svg-icon>\n </div>\n </div>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Dispatch dropdown -->\n<ng-template #dispatchesRef>\n @if (dropdownOptions().length) {\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n (click)=\"resetSelection()\"\n [class]=\"{\n selected: !selectedOption(),\n }\"\n >\n <p>Unassigned</p>\n <div class=\"unassigned-ltl\">\n <p>{{ unassignedCount() }}</p>\n <svg-icon name=\"cai-ltl-single\" class=\"icon-sm\"></svg-icon>\n </div>\n </button>\n @for (\n dispatchBoard of dropdownOptions();\n track dispatchBoard.id;\n let groupIndex = $index\n ) {\n <!-- Temporary variant since BE doesn't support boards -->\n @let dispatchBoardOption = cast(dispatchBoard, \"dispatchBoard\")!;\n\n @let isNoBoardsVariant =\n dispatchBoardOption.dispatcher === \"NOBOARDSVARIANT\";\n @if (dispatchBoardOption.count > 0) {\n @if (!isNoBoardsVariant) {\n @let isGroupFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === 0;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item\"\n (click)=\"fold(dispatchBoardOption.id, $event)\"\n [class]=\"{\n unfolded: dispatchBoardOption.dispatches?.length || 0 > 0,\n focused: isGroupFocused,\n }\"\n >\n <p>\n {{\n dispatchBoardOption.teamBoard\n ? \"Team Board\"\n : dispatchBoardOption.dispatcher\n }}\n </p>\n <p class=\"counter\">{{ dispatchBoardOption.count }}</p>\n <svg-icon\n name=\"cai-arrow-primary-up\"\n class=\"group-icon icon\"\n ></svg-icon>\n </button>\n }\n @if (\n dispatchBoardOption.dispatches &&\n dispatchBoardOption.dispatches.length > 0\n ) {\n @for (\n dispatch of dispatchBoardOption.dispatches;\n track dispatch.id;\n let optionIndex = $index\n ) {\n @let isOptionFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === optionIndex + 1;\n <!-- +1 since optionIndex is 0 for the group item header -->\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n (click)=\"handleOption(dispatch, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'dispatch')?.id === dispatch.id,\n focused: isOptionFocused,\n }\"\n >\n <div class=\"dropdown-subitem truck-item\">\n <svg-icon\n class=\"truck-icon truck-trailer-icon-colors\"\n [class]=\"dispatch.truck.truckType.logoName.slice(0, -4)\"\n [name]=\"dispatch.truck.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p\n class=\"truck-number\"\n [innerHTML]=\"\n dispatch.truck.truckNumber | highlightSearch: value()\n \"\n ></p>\n </div>\n <div class=\"dropdown-subitem trailer-item\">\n @if (dispatch.trailer) {\n <svg-icon\n class=\"trailer-icon truck-trailer-icon-colors\"\n [class]=\"dispatch.trailer.trailerType.logoName.slice(0, -4)\"\n [name]=\"dispatch.trailer.trailerType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p\n class=\"trailer-number\"\n [innerHTML]=\"\n dispatch.trailer.trailerNumber | highlightSearch: value()\n \"\n ></p>\n }\n </div>\n <div class=\"dropdown-subitem\">\n @if (dispatch.coDriver) {\n <svg-icon class=\"dispatch-icon\" name=\"cai-people\"></svg-icon>\n <p\n class=\"driver-name\"\n [innerHTML]=\"\n dispatch.driver.firstName +\n ' & ' +\n dispatch.coDriver.firstName | highlightSearch: value()\n \"\n ></p>\n } @else {\n <cai-avatar\n [driver]=\"dispatch.driver\"\n [size]=\"18\"\n [inverse]=\"true\"\n [hover]=\"false\"\n ></cai-avatar>\n <p\n class=\"driver-name\"\n [innerHTML]=\"\n dispatch.driver.firstName + ' ' + dispatch.driver.lastName\n | highlightSearch: value()\n \"\n ></p>\n }\n </div>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-hover\">\n <p>{{ dispatch.payType }}</p>\n <svg-icon name=\"cai-driver\" class=\"icon-sm\"></svg-icon>\n </div>\n <div class=\"end-item-base dispatch-ltl\">\n <p>{{ dispatch.numberOfSingleLtlLoads }}</p>\n <svg-icon name=\"cai-ltl-single\" class=\"icon-sm\"></svg-icon>\n </div>\n </div>\n </button>\n }\n } @else if (isNoBoardsVariant) {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n }\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- ftl dispatch dropdown -->\n<ng-template #ftlDispatchRef>\n @if (dropdownOptions().length) {\n @for (\n dispatchBoard of dropdownOptions();\n track dispatchBoard.id;\n let groupIndex = $index\n ) {\n @let dispatchBoardOption = cast(dispatchBoard, \"dispatchBoard\")!;\n @let isGroupFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === 0;\n @let isNoBoardsVariant =\n dispatchBoardOption.dispatcher === \"NOBOARDSVARIANT\";\n @if (dispatchBoardOption.count > 0) {\n @if (!isNoBoardsVariant) {\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item\"\n (click)=\"fold(dispatchBoardOption.id, $event)\"\n [class]=\"{\n unfolded: dispatchBoardOption.dispatches?.length || 0 > 0,\n focused: isGroupFocused,\n }\"\n >\n <p>\n {{\n dispatchBoardOption.teamBoard\n ? \"Team Board\"\n : dispatchBoardOption.dispatcher\n }}\n </p>\n <p class=\"counter\">{{ dispatchBoardOption.count }}</p>\n <svg-icon\n name=\"cai-arrow-primary-up\"\n class=\"group-icon icon\"\n ></svg-icon>\n </button>\n }\n @if (\n dispatchBoardOption.dispatches &&\n dispatchBoardOption.dispatches.length > 0\n ) {\n @for (\n dispatch of dispatchBoardOption.dispatches;\n track dispatch.id;\n let optionIndex = $index\n ) {\n @let isOptionFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === optionIndex + 1;\n <!-- +1 since optionIndex is 0 for the group item header -->\n <button\n class=\"dropdown-item\"\n (click)=\"handleOption(dispatch, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'dispatch')?.id === dispatch.id,\n focused: isOptionFocused,\n }\"\n >\n <div class=\"dropdown-subitem truck-item\">\n <svg-icon\n class=\"truck-icon truck-trailer-icon-colors\"\n [class]=\"dispatch.truck.truckType.logoName.slice(0, -4)\"\n [name]=\"dispatch.truck.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p\n class=\"truck-number\"\n [innerHTML]=\"\n dispatch.truck.truckNumber | highlightSearch: value()\n \"\n ></p>\n </div>\n <div class=\"dropdown-subitem trailer-item\">\n @if (dispatch.trailer) {\n <svg-icon\n class=\"trailer-icon truck-trailer-icon-colors\"\n [class]=\"dispatch.trailer.trailerType.logoName.slice(0, -4)\"\n [name]=\"dispatch.trailer.trailerType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p\n class=\"trailer-number\"\n [innerHTML]=\"\n dispatch.trailer.trailerNumber | highlightSearch: value()\n \"\n ></p>\n }\n </div>\n <div class=\"dropdown-subitem\">\n @if (dispatch.coDriver) {\n <svg-icon class=\"dispatch-icon\" name=\"cai-people\"></svg-icon>\n <p\n class=\"driver-name\"\n [innerHTML]=\"\n dispatch.driver.firstName +\n ' & ' +\n dispatch.coDriver.firstName | highlightSearch: value()\n \"\n ></p>\n } @else {\n <cai-avatar\n [driver]=\"dispatch.driver\"\n [size]=\"18\"\n [inverse]=\"true\"\n [hover]=\"false\"\n ></cai-avatar>\n <p\n class=\"driver-name\"\n [innerHTML]=\"\n dispatch.driver.firstName + ' ' + dispatch.driver.lastName\n | highlightSearch: value()\n \"\n ></p>\n }\n </div>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-hover\">\n <!-- Load Status -->\n @let dispatchStatus = dispatch.status | dispatchStatus;\n @if (dispatchStatus) {\n <div\n class=\"dispatch-status\"\n [class]=\"dispatchStatus.statusClass\"\n >\n @if (dispatchStatus.badge) {\n <p\n class=\"status-block\"\n [class]=\"dispatchStatus.badge.color\"\n >\n {{ dispatchStatus.badge.text }}\n </p>\n }\n {{ dispatchStatus.label }}\n @if (dispatch.status?.statusCheckInNumber) {\n <p class=\"status-block\">\n {{ dispatch.status?.statusCheckInNumber }}\n </p>\n }\n </div>\n <p class=\"dispatch-separator\">|</p>\n }\n <p class=\"dispatch-load-count\">\n {{ dispatch?.pendingLoadCount }}\n </p>\n <svg-icon name=\"cai-load\" class=\"icon-sm\"></svg-icon>\n </div>\n <div class=\"end-item-base\">\n <p>{{ dispatch.payType }}</p>\n <svg-icon name=\"cai-driver\" class=\"icon-sm\"></svg-icon>\n </div>\n </div>\n </button>\n }\n } @else if (isNoBoardsVariant) {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n }\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #splitDriverRef>\n @if (dropdownOptions().length) {\n @for (splitDriverBoard of dropdownOptions(); track splitDriverBoard.id) {\n @let driverBoard = cast(splitDriverBoard, \"splitDriverBoard\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item\"\n (click)=\"fold(driverBoard.id, $event)\"\n [class]=\"{\n unfolded: (driverBoard.drivers?.length ?? 0) > 0,\n }\"\n >\n <p>\n {{\n driverBoard.isTeamBoard ? \"Team Board\" : driverBoard.dispatcherName\n }}\n </p>\n <!-- TODO: Change to count once BE is fixed -->\n <p class=\"counter\">{{ driverBoard.drivers?.length || 0 }}</p>\n <svg-icon\n name=\"cai-arrow-primary-up\"\n class=\"group-icon icon\"\n ></svg-icon>\n </button>\n @for (driver of driverBoard.drivers || []; track driver.id) {\n @let driverOption = cast(driver, \"splitDriver\")!;\n <button\n class=\"dropdown-item\"\n (click)=\"handleOption(driverOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'splitDriver')?.id === driverOption.id,\n }\"\n >\n <div class=\"dropdown-subitem\">\n <div class=\"dropdown-avatar\">\n <cai-avatar\n [driver]=\"driverOption\"\n [size]=\"18\"\n [inverse]=\"true\"\n [hover]=\"false\"\n ></cai-avatar>\n </div>\n <p\n class=\"driver-name\"\n [innerHTML]=\"\n driverOption.firstName + ' ' + driverOption.lastName\n | highlightSearch: value()\n \"\n ></p>\n </div>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-hover\">\n @let dispatchStatus =\n driverOption.dispatchStatus | dispatchStatus;\n @if (dispatchStatus) {\n <div\n class=\"dispatch-status\"\n [class]=\"dispatchStatus.statusClass\"\n >\n @if (dispatchStatus.badge) {\n <p\n class=\"status-block\"\n [class]=\"dispatchStatus.badge.color\"\n >\n {{ dispatchStatus.badge.text }}\n </p>\n }\n {{ dispatchStatus.label }}\n @if (driverOption.dispatchStatus?.statusCheckInNumber) {\n <p class=\"status-block\">\n {{ driverOption.dispatchStatus?.statusCheckInNumber }}\n </p>\n }\n </div>\n <p class=\"dispatch-separator\">|</p>\n }\n <p class=\"dispatch-load-count\">\n {{ driverOption.pendingLoadsCount }}\n </p>\n <svg-icon name=\"cai-load\" class=\"icon-sm\"></svg-icon>\n </div>\n <div class=\"end-item-base\">\n <p>{{ driverOption.payTypeValue }}</p>\n </div>\n </div>\n </button>\n }\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #splitTruckRef>\n @if (dropdownOptions().length) {\n @for (splitTruckBoard of dropdownOptions(); track splitTruckBoard.id) {\n @let truckBoard = cast(splitTruckBoard, \"splitTruckBoard\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item\"\n (click)=\"fold(truckBoard.id, $event)\"\n [class]=\"{\n unfolded: (truckBoard.trucks?.length ?? 0) > 0,\n }\"\n >\n <p>\n {{\n truckBoard.isTeamBoard ? \"Team Board\" : truckBoard.dispatcherName\n }}\n </p>\n <!-- TODO: Change to count once BE is fixed -->\n <p class=\"counter\">{{ truckBoard.trucks?.length || 0 }}</p>\n <svg-icon\n name=\"cai-arrow-primary-up\"\n class=\"group-icon icon\"\n ></svg-icon>\n </button>\n @for (truck of truckBoard.trucks || []; track truck.id) {\n @let truckOption = cast(truck, \"splitTruck\")!;\n <button\n class=\"dropdown-item\"\n (click)=\"handleOption(truckOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'splitTruck')?.id === truckOption.id,\n }\"\n >\n <div class=\"dropdown-subitem truck-item\">\n <svg-icon\n class=\"truck-icon\"\n [style.--truck-color]=\"truckOption.color?.code || ''\"\n [name]=\"truckOption.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p\n class=\"truck-number\"\n [innerHTML]=\"truckOption.truckNumber | highlightSearch: value()\"\n ></p>\n </div>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-hover\">\n @let dispatchStatus = truckOption.dispatchStatus | dispatchStatus;\n @if (dispatchStatus) {\n <div\n class=\"dispatch-status\"\n [class]=\"dispatchStatus.statusClass\"\n >\n @if (dispatchStatus.badge) {\n <p\n class=\"status-block\"\n [class]=\"dispatchStatus.badge.color\"\n >\n {{ dispatchStatus.badge.text }}\n </p>\n }\n {{ dispatchStatus.label }}\n @if (truckOption.dispatchStatus?.statusCheckInNumber) {\n <p class=\"status-block\">\n {{ truckOption.dispatchStatus?.statusCheckInNumber }}\n </p>\n }\n </div>\n <p class=\"dispatch-separator\">|</p>\n }\n <p class=\"dispatch-load-count\">\n {{ truckOption.pendingLoadsCount }}\n </p>\n <svg-icon name=\"cai-load\" class=\"icon-sm\"></svg-icon>\n </div>\n <div class=\"end-item-base\">\n @if (\n truckOption.location?.city &&\n truckOption.location?.stateShortName\n ) {\n <p>\n {{ truckOption.location?.city }},\n {{ truckOption.location?.stateShortName }}\n </p>\n }\n </div>\n </div>\n </button>\n }\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #splitTrailerRef>\n @if (dropdownOptions().length) {\n @for (splitTrailerBoard of dropdownOptions(); track splitTrailerBoard.id) {\n @let trailerBoard = cast(splitTrailerBoard, \"splitTrailerBoard\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item\"\n (click)=\"fold(trailerBoard.id, $event)\"\n [class]=\"{\n unfolded: (trailerBoard.trailers?.length ?? 0) > 0,\n }\"\n >\n <p>\n {{\n trailerBoard.isTeamBoard\n ? \"Team Board\"\n : trailerBoard.dispatcherName\n }}\n </p>\n <!-- TODO: Change to count once BE is fixed -->\n <p class=\"counter\">{{ trailerBoard.trailers?.length || 0 }}</p>\n <svg-icon\n name=\"cai-arrow-primary-up\"\n class=\"group-icon icon\"\n ></svg-icon>\n </button>\n @for (trailer of trailerBoard.trailers || []; track trailer.id) {\n @let trailerOption = cast(trailer, \"splitTrailer\")!;\n <button\n class=\"dropdown-item\"\n (click)=\"handleOption(trailerOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'splitTrailer')?.id === trailerOption.id,\n }\"\n >\n <div class=\"dropdown-subitem trailer-item\">\n <svg-icon\n class=\"trailer-icon\"\n [style.--trailer-color]=\"trailerOption.color?.code || ''\"\n [name]=\"trailerOption.trailerType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p\n class=\"trailer-number\"\n [innerHTML]=\"\n trailerOption.trailerNumber | highlightSearch: value()\n \"\n ></p>\n </div>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-hover\">\n @let dispatchStatus =\n trailerOption.dispatchStatus | dispatchStatus;\n @if (dispatchStatus) {\n <div\n class=\"dispatch-status\"\n [class]=\"dispatchStatus.statusClass\"\n >\n @if (dispatchStatus.badge) {\n <p\n class=\"status-block\"\n [class]=\"dispatchStatus.badge.color\"\n >\n {{ dispatchStatus.badge.text }}\n </p>\n }\n {{ dispatchStatus.label }}\n @if (trailerOption.dispatchStatus?.statusCheckInNumber) {\n <p class=\"status-block\">\n {{ trailerOption.dispatchStatus?.statusCheckInNumber }}\n </p>\n }\n </div>\n <p class=\"dispatch-separator\">|</p>\n }\n <p class=\"dispatch-load-count\">\n {{ trailerOption.pendingLoadsCount }}\n </p>\n <svg-icon name=\"cai-load\" class=\"icon-sm\"></svg-icon>\n </div>\n <div class=\"end-item-base\">\n @if (\n trailerOption.location?.city &&\n trailerOption.location?.stateShortName\n ) {\n <p>\n {{ trailerOption.location?.city }},\n {{ trailerOption.location?.stateShortName }}\n </p>\n }\n </div>\n </div>\n </button>\n }\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #tollRef>\n @if (dropdownOptions().length) {\n @for (toll of dropdownOptions(); track $index; let groupIndex = $index) {\n @let tollOption = cast(toll, \"tollOption\")!;\n @let isGroupFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === 0;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item pe-none\"\n [class]=\"{\n unfolded: tollOption.tollTransponders?.length || 0 > 0,\n focused: isGroupFocused,\n }\"\n >\n <p>\n {{ tollOption.groupName }}\n </p>\n </button>\n @let tollTransponders = tollOption.tollTransponders || [];\n @for (\n tollTransponder of tollTransponders;\n track tollTransponder.id;\n let optionIndex = $index\n ) {\n @let isOptionFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === optionIndex + 1;\n <!-- +1 since optionIndex is 0 for the group item header -->\n <button\n class=\"dropdown-item\"\n (click)=\"handleOption(tollTransponder, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'tollTransponderOption')?.id ===\n tollTransponder.id,\n focused: isOptionFocused,\n }\"\n >\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (tollTransponder.name || '' | highlightSearch: value())\n : tollTransponder.name\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Dispatcher dropdown -->\n\n<ng-template #dispatcherRef>\n @if (dropdownOptions().length) {\n @for (dispatcher of dropdownOptions(); track $index; let index = $index) {\n @let dispatcherOption = cast(dispatcher, \"dispatcher\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ dispatcherOption.id }}\"\n (click)=\"handleOption(dispatcherOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'dispatcher')?.id === dispatcherOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <cai-avatar\n [driver]=\"{\n id: dispatcherOption?.id || 0,\n firstName: (dispatcherOption?.fullName || ' ').split(' ')[0] || '',\n lastName: (dispatcherOption?.fullName || ' ').split(' ')[1] || '',\n avatarFile: dispatcherOption?.avatarFile,\n colorFlag: dispatcherOption?.colorFlag,\n }\"\n [rounded]=\"!config().squareAvatar\"\n [hover]=\"false\"\n ></cai-avatar>\n <p\n class=\"dropdown-content-hazardous\"\n [innerHTML]=\"\n search\n ? (dispatcherOption.fullName || '' | highlightSearch: value())\n : dispatcherOption.fullName\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Driver Owner dropdown -->\n\n<ng-template #driverOwnerRef>\n @if (dropdownOptions().length) {\n @for (driverOwner of dropdownOptions(); track $index; let index = $index) {\n @let driverOwnerOption = cast(driverOwner, \"driverOwner\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ driverOwnerOption.id }}\"\n (click)=\"handleOption(driverOwnerOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'driverOwner')?.id === driverOwnerOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <cai-avatar\n [driver]=\"{\n id: driverOwnerOption?.id || 0,\n firstName: (driverOwnerOption?.fullName || ' ').split(' ')[0] || '',\n lastName: (driverOwnerOption?.fullName || ' ').split(' ')[1] || '',\n avatarFile: driverOwnerOption?.avatarFile,\n colorFlag: driverOwnerOption?.colorFlag,\n owner: driverOwnerOption?.driverType === 'OwnerOperator',\n driverType: {\n id: 0,\n name: (driverOwnerOption?.driverType | driverTypeLabel),\n },\n }\"\n [rounded]=\"false\"\n [hover]=\"false\"\n ></cai-avatar>\n <p\n class=\"dropdown-content\"\n [innerHTML]=\"\n search\n ? (driverOwnerOption.fullName || '' | highlightSearch: value())\n : driverOwnerOption.fullName\n \"\n ></p>\n <div class=\"dropdown-subitem-end\">\n <p class=\"driver-type\">\n {{ driverOwnerOption.driverType | driverTypeLabel }}\n </p>\n </div>\n <svg-icon\n name=\"cai-checkmark\"\n class=\"dropdown-item-icon no-margin\"\n ></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Truck Owner dropdown -->\n\n<ng-template #truckOwnerRef>\n @if (dropdownOptions().length) {\n @for (truckOwner of dropdownOptions(); track $index; let index = $index) {\n @let truckOwnerOption = cast(truckOwner, \"truckOwner\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ truckOwnerOption.id }}\"\n (click)=\"handleOption(truckOwnerOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'truckOwner')?.id === truckOwnerOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <div class=\"dropdown-subitem truck-owner-unit\">\n @if (truckOwnerOption.truckType?.logoName) {\n <svg-icon\n class=\"truck-icon truck-trailer-icon-colors\"\n [class]=\"truckOwnerOption.truckType.logoName.slice(0, -4)\"\n [name]=\"truckOwnerOption.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n }\n <p\n class=\"dropdown-content\"\n [innerHTML]=\"\n search\n ? (truckOwnerOption.truckNumber || ''\n | highlightSearch: value())\n : truckOwnerOption.truckNumber\n \"\n ></p>\n @if (truckOwnerOption.model) {\n <p class=\"truck-owner-bullet\">\u2022</p>\n <p\n class=\"dropdown-content\"\n [innerHTML]=\"\n search\n ? (truckOwnerOption.model | highlightSearch: value())\n : truckOwnerOption.model\n \"\n ></p>\n }\n </div>\n <div class=\"dropdown-subitem-end\">\n <p class=\"driver-type\">\n {{ truckOwnerOption.driverType | truckOwnershipLabel }}\n </p>\n </div>\n <svg-icon\n name=\"cai-checkmark\"\n class=\"dropdown-item-icon no-margin\"\n ></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #truckRef>\n @if (dropdownOptions().length) {\n @for (truck of dropdownOptions(); track $index; let index = $index) {\n @let truckOption = cast(truck, \"truckOption\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ truckOption.id }}\"\n (click)=\"handleOption(truckOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'truckOption')?.id === truckOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (truckOption.name || '' | highlightSearch: value())\n : truckOption.name\n \"\n ></p>\n <svg-icon\n class=\"truck-trailer-option truck-trailer-icon-colors\"\n [class]=\"truckOption.logoName.slice(0, -4)\"\n [name]=\"truckOption.logoName.slice(0, -4)\"\n ></svg-icon>\n <svg-icon\n name=\"cai-checkmark\"\n class=\"dropdown-item-icon no-margin\"\n ></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #trailerRef>\n @if (dropdownOptions().length) {\n @for (truck of dropdownOptions(); track $index; let index = $index) {\n @let trailerOption = cast(truck, \"trailerOption\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ trailerOption.id }}\"\n (click)=\"handleOption(trailerOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'trailerOption')?.id === trailerOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (trailerOption.name || '' | highlightSearch: value())\n : trailerOption.name\n \"\n ></p>\n\n <svg-icon\n class=\"truck-trailer-option truck-trailer-icon-colors\"\n [class]=\"trailerOption.logoName.slice(0, -4)\"\n [name]=\"trailerOption.logoName.slice(0, -4)\"\n ></svg-icon>\n <svg-icon\n name=\"cai-checkmark\"\n class=\"dropdown-item-icon no-margin\"\n ></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #providerRef>\n @if (dropdownOptions().length) {\n @for (provider of dropdownOptions(); track $index; let index = $index) {\n @let providerOption = cast(provider, \"provider\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ providerOption?.id }}\"\n (click)=\"handleOption(providerOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'provider')?.id === providerOption?.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <svg-icon\n class=\"full-icon\"\n [name]=\"'cai-' + providerOption?.name?.toLowerCase()\"\n ></svg-icon>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Hazardous dropdown -->\n<ng-template #hazardousRef>\n @if (dropdownOptions().length) {\n @for (hazardous of dropdownOptions(); track $index; let index = $index) {\n @let hazardousOption = cast(hazardous, \"hazardous\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ hazardousOption.id }}\"\n (click)=\"handleOption(hazardousOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'hazardous')?.id === hazardousOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <svg-icon [name]=\"hazardousOption.logoName?.slice(0, -4)\"></svg-icon>\n <p\n class=\"dropdown-content-hazardous\"\n [innerHTML]=\"\n search\n ? (hazardousOption.description || '' | highlightSearch: value())\n : hazardousOption.description\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #pmRef>\n @if (dropdownOptions().length) {\n @for (pm of dropdownOptions(); track $index; let index = $index) {\n @let pmOption = cast(pm, \"pmOption\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ pmOption.id }}\"\n (click)=\"handleOption(pmOption, $event)\"\n [class]=\"{\n selected: cast(selectedOption(), 'pmOption')?.id === pmOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <svg-icon\n class=\"icon\"\n [name]=\"pmOption.title | remapPmIcons\"\n ></svg-icon>\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (pmOption.title || '' | highlightSearch: value())\n : pmOption.title\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #colorRef>\n @if (dropdownOptions().length) {\n @for (color of dropdownOptions(); track $index; let index = $index) {\n @let colorOption = cast(color, \"colorOption\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item color-item\"\n id=\"option-{{ colorOption.id }}\"\n (click)=\"handleOption(colorOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'colorOption')?.id === colorOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <svg-icon\n class=\"icon cai-color\"\n [name]=\"'cai-color'\"\n [style.--color]=\"colorOption?.code\"\n [style.--hover-color]=\"colorOption?.hoverCode\"\n ></svg-icon>\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (colorOption.name || '' | highlightSearch: value())\n : colorOption.name\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #stateRef>\n @if (dropdownOptions().length) {\n @for (state of dropdownOptions(); track $index; let index = $index) {\n @let stateOption = cast(state, \"state\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ stateOption.id }}\"\n (click)=\"handleOption(stateOption, $event)\"\n [class]=\"{\n selected: cast(selectedOption(), 'state')?.id === stateOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <svg-icon\n class=\"icon\"\n [name]=\"\n 'cai-' +\n stateOption?.countryType?.name?.toLowerCase() +\n '-' +\n stateOption?.stateShortName?.toLowerCase()\n \"\n ></svg-icon>\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (stateOption.stateShortName +\n ' ' +\n (config().fullState\n ? ' (' + stateOption?.stateName + ')'\n : '') || '' | highlightSearch: value())\n : stateOption.stateShortName +\n ' ' +\n (config().fullState ? ' (' + stateOption?.stateName + ')' : '')\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #fuelStopTransactionRef>\n @if (dropdownOptions().length) {\n @for (\n franchise of dropdownOptions();\n track franchise.id;\n let groupIndex = $index\n ) {\n @let isGroupFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === 0;\n @let franchiseOption = cast(franchise, \"franchise\")!;\n @if (franchiseOption?.count !== null) {\n <div\n class=\"dropdown-group\"\n [class.no-items]=\"!franchiseOption?.count\"\n [class]=\"{\n active: openGroup() === franchiseOption.id,\n }\"\n [style.--max-height]=\"\n openGroup() === franchiseOption.id\n ? 30 * ((franchiseOption.fuelStopStores?.length || 0) + 1) + 'px'\n : '26px'\n \"\n >\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item\"\n (click)=\"fold(franchiseOption.id, $event, franchiseOption)\"\n [class]=\"{\n unfolded: openGroup() === franchiseOption.id,\n focused: isGroupFocused,\n }\"\n >\n <p\n [innerHTML]=\"\n franchiseOption?.businessName || '' | highlightSearch: value()\n \"\n ></p>\n <p class=\"counter\">{{ franchiseOption.count }}</p>\n <svg-icon\n name=\"cai-arrow-primary-up\"\n class=\"group-icon icon\"\n ></svg-icon>\n </button>\n @if (openGroup() === franchiseOption.id) {\n @if (franchiseOption.fuelStopStores?.length || 0 > 0) {\n @for (\n fuelStopStore of franchiseOption.fuelStopStores;\n track fuelStopStore.id\n ) {\n @let isOptionFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === $index + 1;\n <!-- +1 since optionIndex is 0 for the group item header -->\n <button\n tabindex=\"-1\"\n class=\"dropdown-item fuel-stop-transaction-store\"\n [class]=\"{\n focused: isOptionFocused,\n }\"\n (click)=\"handleOption(fuelStopStore, $event)\"\n >\n <p\n [innerHTML]=\"\n fuelStopStore?.store ?? '' | highlightSearch: value()\n \"\n ></p>\n @let city = fuelStopStore?.address?.city ?? \"\";\n @let state = fuelStopStore?.address?.stateShortName ?? \"\";\n @let zip = fuelStopStore?.address?.zipCode ?? \"\";\n <p\n class=\"fuel-stop-transaction-store-address\"\n [innerHTML]=\"\n city + (state || zip ? ', ' : '') + state + ' ' + zip\n | highlightSearch: value()\n \"\n ></p>\n\n @if (fuelStopStore?.[\"favourite\"]) {\n <svg-icon\n name=\"cai-favorite\"\n class=\"favorite-icon\"\n ></svg-icon>\n }\n </button>\n }\n <!-- Infinite scroll trigger - emits event when item comes into view -->\n <div\n class=\"dropdown-infinite-scroll-item\"\n caiIntersectionObserver\n [threshold]=\"0.1\"\n (inView)=\"onDropdownScrolledToBottom(true)\"\n ></div>\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n }\n </div>\n } @else {\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n [class.focused]=\"\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === 0\n \"\n (click)=\"handleOption(franchiseOption, $event)\"\n >\n <p\n class=\"fuel-stop-transaction-nostore\"\n [innerHTML]=\"\n franchiseOption?.businessName || '' | highlightSearch: value()\n \"\n ></p>\n </button>\n }\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- #endregion -->\n\n<!-- #region Selected options -->\n\n<!-- selected dispatch -->\n<ng-template #selectedDispatchRef>\n @let dispatchOption = cast(selectedOption(), \"dispatch\");\n @if (dispatchOption && !inputRef.value && !isAdding()) {\n <div class=\"dropdown-selected\">\n <div class=\"dropdown-subitem truck-item\">\n <svg-icon\n class=\"truck-icon\"\n [name]=\"dispatchOption!.truck.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p class=\"truck-number\">\n {{ dispatchOption!.truck.truckNumber }}\n </p>\n </div>\n <div class=\"dropdown-subitem trailer-item\">\n @if (dispatchOption!.trailer) {\n <svg-icon\n class=\"trailer-icon\"\n [name]=\"\n cast(\n selectedOption(),\n 'dispatch'\n )!.trailer?.trailerType?.logoName?.slice(0, -4)\n \"\n ></svg-icon>\n <p class=\"trailer-number\">\n {{ dispatchOption!.trailer?.trailerNumber }}\n </p>\n }\n </div>\n <div class=\"dropdown-subitem\">\n @if (dispatchOption!.coDriver) {\n <svg-icon class=\"dispatch-icon\" name=\"cai-people\"></svg-icon>\n <p class=\"driver-name\">\n {{\n dispatchOption!.driver.firstName +\n \" & \" +\n dispatchOption!.coDriver?.firstName\n }}\n </p>\n } @else {\n <cai-avatar\n [driver]=\"dispatchOption!.driver\"\n [size]=\"18\"\n [hover]=\"false\"\n ></cai-avatar>\n <p class=\"driver-name\">\n {{\n dispatchOption!.driver.firstName +\n \" \" +\n dispatchOption!.driver.lastName\n }}\n </p>\n }\n </div>\n <p class=\"selected-end-item\">\n {{ dispatchOption!.payType }}\n </p>\n </div>\n } @else {\n @if (!inputRef.value && this.config().dropdown == \"dispatch\") {\n <p class=\"dropdown-selected\">Unassigned</p>\n }\n }\n</ng-template>\n\n<!-- selected broker -->\n<ng-template #selectedBrokerRef>\n @let brokerOption = cast(selectedOption(), \"broker\");\n @if (brokerOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n @if (brokerOption!.fraudCheck) {\n <svg-icon name=\"cai-status-warning-lite\" class=\"fraud-icon\"></svg-icon>\n }\n <p class=\"dropdown-selected-content\">{{ brokerOption!.businessName }}</p>\n <div class=\"selected-end-item\">\n @if (!brokerOption!.creditLimit) {\n <p>Unlimited</p>\n } @else {\n <p>\n {{ brokerOption!.availableCredit || 0 | currency }}\n </p>\n <div\n class=\"progress-bar\"\n [style.--progress]=\"\n (\n brokerOption!\n | brokerProgress: brokerOption!.dnu || brokerOption!.ban\n ).activePercentageOfPaid + '%'\n \"\n [class]=\"\n (\n brokerOption!\n | brokerProgress: brokerOption!.dnu || brokerOption!.ban\n ).status\n \"\n ></div>\n }\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedContactRef>\n @let contactOption = cast(selectedOption(), \"contact\");\n @if (contactOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <p class=\"dropdown-selected-content\">{{ contactOption?.contactName }}</p>\n <div class=\"selected-end-item\">\n <p>\n {{ contactOption?.phone }}\n {{\n contactOption?.extensionPhone\n ? \"x\" + contactOption?.extensionPhone\n : \"\"\n }}\n </p>\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedShipperRef>\n @let shipperOption = cast(selectedOption(), \"shipper\");\n @if (shipperOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <p class=\"dropdown-selected-content\">{{ shipperOption?.businessName }}</p>\n <div class=\"selected-end-item selected-end-item-truncate\">\n <p class=\"text-truncate\">{{ shipperOption?.address?.address }}</p>\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedOwnerRef>\n @let ownerOption = cast(selectedOption(), \"owner\");\n @if (ownerOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <p class=\"owner-ein\">{{ ownerOption?.ein }}</p>\n <p class=\"\">{{ ownerOption?.name }}</p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedFuelcardRef>\n @let fuelcardOption = cast(selectedOption(), \"fuelCard\");\n @if (fuelcardOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <p class=\"fuelcard-number\">\n {{ fuelcardOption?.number }}\n </p>\n <p class=\"fuelcard-brand\">\n {{ fuelcardOption?.brand }}\n </p>\n <p class=\"\">\n {{ fuelcardOption?.account }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedBankRef>\n @let bankOption = cast(selectedOption(), \"bank\");\n @if (bankOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n @if (bankOption?.logoName) {\n <svg-icon\n class=\"option-icon full-size\"\n [name]=\"bankOption?.logoName?.slice(0, -4) || ''\"\n ></svg-icon>\n } @else {\n <p class=\"dropdown-selected-content\">{{ bankOption?.name }}</p>\n }\n </div>\n }\n</ng-template>\n\n<ng-template #selectedProviderRef>\n @let providerOption = cast(selectedOption(), \"provider\");\n @if (providerOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon full-size\"\n [name]=\"'cai-' + providerOption?.name?.toLowerCase()\"\n ></svg-icon>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedMakeRef>\n @let makeOption = cast(selectedOption(), \"make\");\n @if (makeOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n @if (makeOption?.logoName) {\n <svg-icon\n class=\"option-icon full-size\"\n [name]=\"makeOption?.logoName?.slice(0, -4) || ''\"\n ></svg-icon>\n } @else {\n <p class=\"dropdown-selected-content\">{{ makeOption?.name }}</p>\n }\n </div>\n }\n</ng-template>\n\n<ng-template #selectedStateRef>\n @let stateOption = cast(selectedOption(), \"state\");\n @if (stateOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon\"\n [name]=\"\n 'cai-' +\n stateOption?.countryType?.name?.toLowerCase() +\n '-' +\n stateOption?.stateShortName?.toLowerCase()\n \"\n ></svg-icon>\n <p class=\"dropdown-selected-content\">\n {{ stateOption?.stateShortName }}\n {{ config().fullState ? \" (\" + stateOption?.stateName + \")\" : \"\" }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedDispatcherRef>\n @let dispatcherOption = cast(selectedOption(), \"dispatcher\");\n @if (dispatcherOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <cai-avatar\n [driver]=\"{\n id: dispatcherOption?.id || 0,\n firstName: (dispatcherOption?.fullName || ' ').split(' ')[0] || '',\n lastName: (dispatcherOption?.fullName || ' ').split(' ')[1] || '',\n avatarFile: dispatcherOption?.avatarFile,\n colorFlag: dispatcherOption?.colorFlag,\n }\"\n [rounded]=\"!config().squareAvatar\"\n ></cai-avatar>\n <p class=\"dropdown-selected-content\">{{ dispatcherOption?.fullName }}</p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedDriverOwnerRef>\n @let driverOwnerOption = cast(selectedOption(), \"driverOwner\");\n @if (driverOwnerOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <cai-avatar\n [driver]=\"{\n id: driverOwnerOption?.id || 0,\n firstName: (driverOwnerOption?.fullName || ' ').split(' ')[0] || '',\n lastName: (driverOwnerOption?.fullName || ' ').split(' ')[1] || '',\n avatarFile: driverOwnerOption?.avatarFile,\n colorFlag: driverOwnerOption?.colorFlag,\n owner: driverOwnerOption?.driverType === 'OwnerOperator',\n driverType: {\n id: 0,\n name: (driverOwnerOption?.driverType | driverTypeLabel),\n },\n }\"\n [rounded]=\"false\"\n ></cai-avatar>\n <p class=\"dropdown-selected-content\">{{ driverOwnerOption?.fullName }}</p>\n <p class=\"selected-end-item driver-type\">\n {{ driverOwnerOption?.driverType | driverTypeLabel }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedTruckOwnerRef>\n @let truckOwnerOption = cast(selectedOption(), \"truckOwner\");\n @if (truckOwnerOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n @if (truckOwnerOption.truckType?.logoName) {\n <svg-icon\n class=\"truck-icon option-icon\"\n [name]=\"truckOwnerOption.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n }\n <p class=\"dropdown-selected-content\">\n {{ truckOwnerOption.truckNumber }}\n @if (truckOwnerOption.model) {\n <span class=\"truck-owner-bullet\">\u2022</span>\n {{ truckOwnerOption.model }}\n }\n </p>\n <p class=\"selected-end-item driver-type\">\n {{ truckOwnerOption.driverType | truckOwnershipLabel }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedTruckRef>\n @let truckOption = cast(selectedOption(), \"truckOption\");\n @if (truckOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon\"\n [name]=\"truckOption?.logoName?.slice(0, -4)\"\n ></svg-icon>\n <p class=\"dropdown-selected-content\">{{ truckOption?.name }}</p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedTrailerRef>\n @let trailerOption = cast(selectedOption(), \"trailerOption\");\n @if (trailerOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon\"\n [name]=\"trailerOption?.logoName?.slice(0, -4)\"\n ></svg-icon>\n <p class=\"dropdown-selected-content\">{{ trailerOption?.name }}</p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedHazardousRef>\n @let hazardousOption = cast(selectedOption(), \"hazardous\");\n @if (hazardousOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"hazard-icon\"\n [name]=\"hazardousOption?.logoName?.slice(0, -4)\"\n ></svg-icon>\n <p class=\"dropdown-selected-content dropdown-selected-hazardous\">\n {{ hazardousOption?.description }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedPmRef>\n @let pmOption = cast(selectedOption(), \"pmOption\");\n @if (pmOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon\"\n [name]=\"pmOption?.title | remapPmIcons\"\n ></svg-icon>\n <p class=\"dropdown-selected-content\">\n {{ pmOption?.title }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedColorRef>\n @let colorOption = cast(selectedOption(), \"colorOption\");\n @if (colorOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon cai-color\"\n [name]=\"'cai-color'\"\n [style.--color]=\"colorOption?.code\"\n [style.--hover-color]=\"colorOption?.hoverCode\"\n ></svg-icon>\n <p class=\"dropdown-selected-content\">\n {{ colorOption?.name }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedTollRef>\n @let tollOption = cast(selectedOption(), \"tollTransponderOption\");\n @if (tollOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <p class=\"dropdown-selected-content\">\n {{ tollOption?.name }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedSplitDriverRef>\n @let splitDriverOption = cast(selectedOption(), \"splitDriver\");\n @if (splitDriverOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <div class=\"dropdown-selected-content\">\n <div class=\"dropdown-subitem\">\n <cai-avatar [driver]=\"splitDriverOption\" [size]=\"18\"></cai-avatar>\n <p class=\"driver-name\">\n {{ splitDriverOption.firstName + \" \" + splitDriverOption.lastName }}\n </p>\n </div>\n </div>\n\n <p class=\"selected-end-item\">\n {{ splitDriverOption.payTypeValue }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedSplitTruckRef>\n @let splitTruckOption = cast(selectedOption(), \"splitTruck\");\n @if (splitTruckOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <div class=\"dropdown-selected-content\">\n <div class=\"dropdown-subitem trailer-item\">\n <svg-icon\n class=\"trailer-icon\"\n [name]=\"splitTruckOption!.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p class=\"trailer-number\">\n {{ splitTruckOption!.truckNumber }}\n </p>\n </div>\n </div>\n <p class=\"selected-end-item\">\n @if (\n splitTruckOption!.location?.city &&\n splitTruckOption!.location?.stateShortName\n ) {\n {{ splitTruckOption!.location?.city }},\n {{ splitTruckOption!.location?.stateShortName }}\n }\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedSplitTrailerRef>\n @let splitTrailerOption = cast(selectedOption(), \"splitTrailer\");\n @if (splitTrailerOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <div class=\"dropdown-selected-content\">\n <div class=\"dropdown-subitem truck-item\">\n <svg-icon\n class=\"truck-icon\"\n [name]=\"splitTrailerOption!.trailerType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p class=\"truck-number\">\n {{ splitTrailerOption!.trailerNumber }}\n </p>\n </div>\n </div>\n <p class=\"selected-end-item\">\n @if (\n splitTrailerOption!.location?.city &&\n splitTrailerOption!.location?.stateShortName\n ) {\n {{ splitTrailerOption!.location?.city }},\n {{ splitTrailerOption!.location?.stateShortName }}\n }\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedAccidentDriverRef>\n @let accidentDriverOption = cast(selectedOption(), \"accidentDriver\");\n @if (accidentDriverOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <div class=\"dropdown-subitem accident-name\">\n <cai-avatar\n [driver]=\"accidentDriverOption!\"\n [size]=\"18\"\n [hover]=\"false\"\n ></cai-avatar>\n <p>\n {{\n accidentDriverOption!.firstName +\n \" \" +\n accidentDriverOption!.lastName\n }}\n </p>\n </div>\n <p class=\"accident-dob\">\n {{ accidentDriverOption!.dateOfBirth | date: \"MM/dd/yy\" }}\n </p>\n <p class=\"accident-cdl-number\">\n {{ accidentDriverOption!.cdlNumber }}\n </p>\n <div class=\"dropdown-subitem accident-state\">\n <p>{{ accidentDriverOption!.cdlState?.stateShortName }}</p>\n @if (\n accidentDriverOption!.cdlState?.countryType?.name &&\n accidentDriverOption!.cdlState?.stateShortName\n ) {\n <svg-icon\n class=\"icon option-icon\"\n [name]=\"\n 'cai-' +\n accidentDriverOption!.cdlState?.countryType?.name?.toLowerCase() +\n '-' +\n accidentDriverOption!.cdlState?.stateShortName?.toLowerCase()\n \"\n ></svg-icon>\n }\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedAccidentTruckRef>\n @let accidentTruckOption = cast(selectedOption(), \"accidentTruck\");\n @if (accidentTruckOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <div class=\"dropdown-subitem accident-unit\">\n @if (accidentTruckOption!.truckType?.logoName) {\n <svg-icon\n class=\"truck-icon option-icon\"\n [name]=\"accidentTruckOption!.truckType!.logoName.slice(0, -4)\"\n ></svg-icon>\n }\n <p>{{ accidentTruckOption!.truckNumber }}</p>\n </div>\n <p class=\"accident-vin\">{{ accidentTruckOption!.vin }}</p>\n <p class=\"accident-plate\">\n {{ accidentTruckOption!.licensePlateNumber }}\n </p>\n <div class=\"dropdown-subitem accident-state\">\n <p>{{ accidentTruckOption!.licenseState?.stateShortName }}</p>\n @if (\n accidentTruckOption!.licenseState?.countryType?.name &&\n accidentTruckOption!.licenseState?.stateShortName\n ) {\n <svg-icon\n class=\"icon option-icon\"\n [name]=\"\n 'cai-' +\n accidentTruckOption!.licenseState?.countryType?.name?.toLowerCase() +\n '-' +\n accidentTruckOption!.licenseState?.stateShortName?.toLowerCase()\n \"\n ></svg-icon>\n }\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedAccidentTrailerRef>\n @let accidentTrailerOption = cast(selectedOption(), \"accidentTrailer\");\n @if (accidentTrailerOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <div class=\"dropdown-subitem accident-unit\">\n @if (accidentTrailerOption!.trailerType?.logoName) {\n <svg-icon\n class=\"trailer-icon option-icon\"\n [name]=\"accidentTrailerOption!.trailerType!.logoName.slice(0, -4)\"\n ></svg-icon>\n }\n <p>{{ accidentTrailerOption!.trailerNumber }}</p>\n </div>\n <p class=\"accident-vin\">{{ accidentTrailerOption!.vin }}</p>\n <p class=\"accident-plate\">\n {{ accidentTrailerOption!.licensePlateNumber }}\n </p>\n <div class=\"dropdown-subitem accident-state\">\n <p>{{ accidentTrailerOption!.licenseState?.stateShortName }}</p>\n @if (\n accidentTrailerOption!.licenseState?.countryType?.name &&\n accidentTrailerOption!.licenseState?.stateShortName\n ) {\n <svg-icon\n class=\"icon option-icon\"\n [name]=\"\n 'cai-' +\n accidentTrailerOption!.licenseState?.countryType?.name?.toLowerCase() +\n '-' +\n accidentTrailerOption!.licenseState?.stateShortName?.toLowerCase()\n \"\n ></svg-icon>\n }\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #passwordTooltip>\n {{ visible() ? \"Hide\" : \"Show\" }}\n</ng-template>\n\n<ng-template #errorTooltip>\n @if (\n (config().errorBehavior === \"floating\" ||\n (config().errorBehavior === \"static\" && hasText()) ||\n config().inTable) &&\n invalid &&\n !dropdown.isOpen()\n ) {\n {{ (ngControl?.errors | errorMessage: config().customErrors : config().numberFormat)[0] }}\n }\n</ng-template>\n\n<!-- #endregion -->\n", styles: ["input:-webkit-autofill,input:-webkit-autofill:hover,input:-webkit-autofill:focus,input:-webkit-autofill:active{transition:background-color 5000s ease-in-out 0s!important}input:-webkit-autofill:focus{-webkit-text-fill-color:#ffffff!important}input:-moz-autofill,input:-moz-autofill-preview{filter:none}*,*:before,*:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}p,ul,ol,dl,blockquote,figure,pre{margin:0}button,input,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button{background:none;border:none;padding:0}img,svg,video,canvas,audio,iframe,embed,object{display:block;max-width:100%;height:auto}ul,ol{padding-left:1.5rem;list-style-position:outside}a{color:inherit;text-decoration:inherit}table{border-collapse:collapse;border-spacing:0}:focus:not(:focus-visible){outline:none}.app-input-container{--color-text: #2f2f2f;--color-text-negative: #df3c3c;--color-text-heading: #424242;--color-text-subtle: #919191;--color-text-inverse: #ffffff;--color-icon-neutral: #919191;--color-icon-negative: #e66767;--color-icon-positive: #6692f1;--color-icon-inverse: rgba(255, 255, 255, .6980392157);--color-icon-disable: #cccccc;--color-surface-neutral: #eeeeee;--color-surface-neutral-hover: #dadada;--color-surface-neutral-focus: #1d1d1d;--color-surface-positive: #e9effd;--color-surface-positive-hover: #bed0f9;--color-surface-positive-focus: #0b49d1;--color-surface-negative: #fbe9e9;--color-surface-negative-hover: #f4bebe;--color-surface-negative-focus: #c20c0c;--color-surface-disable: #f7f7f7;position:relative;border-radius:2px;background-color:var(--color-surface-neutral);color:var(--color-text);transition:background-color .1s cubic-bezier(.46,.03,.51,.95);display:flex}.app-input-container.inverse{--color-text: #ffffff;--color-text-negative: #ed9292;--color-text-heading: #ffffff;--color-text-inverse: #ffffff;--color-icon-neutral: #aaaaaa;--color-icon-negative: #ed9292;--color-icon-positive: #92b1f5;--color-icon-disable: #6c6c6c;--color-surface-neutral: #424242;--color-surface-neutral-hover: #6c6c6c;--color-surface-neutral-focus: #dadada;--color-surface-positive: rgba(59, 115, 237, .2);--color-surface-positive-hover: #2f519a;--color-surface-positive-focus: #0b49d1;--color-surface-negative: rgba(223, 60, 60, .2);--color-surface-negative-hover: #923030;--color-surface-negative-focus: #c20c0c;--color-surface-disable: rgba(66, 66, 66, .4)}.app-input-container.inverse:not(.has-error):not(.has-valid) .app-input:focus-visible{color:#2f2f2f}.app-input-container.inverse:not(.has-error):not(.has-valid):has(.app-input:focus-visible) .icon,.app-input-container.inverse:not(.has-error):not(.has-valid):has(.app-input:focus-visible) .icon-sm{color:#919191!important}.app-input-container.inverse:not(.has-error):not(.has-valid):has(.app-input:focus-visible) .separator{background-color:#919191!important}.app-input-container.inverse:not(.has-error):not(.has-valid):has(.app-input:focus-visible) .bg-icon{background-color:#919191!important;color:#dadada}.app-input-container.inverse.is-empty:has(.app-input:focus-visible) .icon,.app-input-container.inverse.is-empty:has(.app-input:focus-visible) .icon-sm{color:#919191!important}.app-input-container.inverse.is-empty:has(.app-input:focus-visible) .bg-icon{background-color:#919191!important;color:#dadada}.app-input-container.inverse.is-empty:has(.app-input:focus-visible) .separator{background-color:#919191!important}.app-input-container.inverse.has-text:has(.app-input:disabled) .app-input-label{color:#424242!important}.app-input-container.hovered{background-color:var(--color-surface-neutral-hover)}.app-input-container.hovered:not(:has(.app-input:disabled)) .sub-label,.app-input-container.hovered:not(:has(.app-input:disabled)) .app-input-label .accident-state{margin-right:44px}@media(hover:hover){.app-input-container:hover{background-color:var(--color-surface-neutral-hover)}.app-input-container:hover:not(:has(.app-input:disabled)) .sub-label,.app-input-container:hover:not(:has(.app-input:disabled)) .app-input-label .accident-state{margin-right:44px}}.app-input-container.has-text .app-input-label{transform:translateY(-20px);font-weight:600;font-size:11px;color:var(--color-text-heading)!important}.app-input-container.has-text.fade-placeholder .app-input-label{transform:translateY(0);opacity:0}.app-input-container.has-text .subcontent{opacity:1!important}.app-input-container.has-text.static-placeholder .app-input-label{transform:translateY(0);opacity:1;color:var(--color-text)}@media(hover:hover){.app-input-container.has-text.is-address:hover .button-icon{opacity:1;pointer-events:auto}.app-input-container.has-text.is-address:hover .bg-icon{background-color:var(--color-icon-neutral);color:var(--color-surface-neutral-hover)}}.app-input-container.has-text.is-address:has(.app-input:focus-visible) .button-icon{opacity:1;pointer-events:auto}.app-input-container.has-text.is-address:has(.app-input:focus-visible) .bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-neutral-focus)}.app-input-container:has(.app-input:focus-visible){background-color:var(--color-surface-neutral-focus)}.app-input-container:has(.app-input:focus-visible) .app-input-label{transform:translateY(-20px);font-weight:600;font-size:11px;color:var(--color-text-heading)!important}.app-input-container:has(.app-input:focus-visible) .subcontent{opacity:1!important;color:#ffffffb2;left:unset!important;right:4px!important}.app-input-container:has(.app-input:focus-visible).has-text .subcontent{right:26px!important}.app-input-container:has(.app-input:focus-visible) .sub-label,.app-input-container:has(.app-input:focus-visible) .app-input-label .accident-state{margin-right:44px}.app-input-container:has(.app-input:focus-visible).fade-placeholder .app-input-label{transform:translateY(0);opacity:0}.app-input-container:has(.app-input:focus-visible).static-placeholder .app-input-label{transform:translateY(0);opacity:1;color:var(--color-text-inverse)!important}.app-input-container:has(.app-input:focus-visible) .bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-neutral-focus)}.app-input-container:has(.app-input:focus-visible) .separator{background-color:var(--color-icon-inverse)!important}.app-input-container:has(.app-input:disabled){background-color:var(--color-surface-disable)}.app-input-container:has(.app-input:disabled).hovered{background-color:var(--color-surface-disable)}@media(hover:hover){.app-input-container:has(.app-input:disabled):hover{background-color:var(--color-surface-disable)}}.app-input-container:has(.app-input:disabled):focus{background-color:var(--color-surface-disable)}.app-input-container:has(.app-input:disabled) .app-input-label{color:var(--color-text-subtle)}.app-input-container:has(.app-input:disabled) .separator{background-color:var(--color-icon-disable)}.app-input-container:has(.app-input:disabled) .dropdown-icon-container{opacity:0;pointer-events:none!important}.app-input-container:has(.app-input:disabled) .dropdown-selected:has(.selected-end-item){width:100%}.app-input-container:has(.app-input:disabled) .driver-type{color:#919191}.app-input-container:has(.app-input:disabled) .icon-container{pointer-events:none!important}.app-input-container:has(.app-input:disabled):not(.disabled-removable) .cancel-button{display:none!important}.app-input-container:has(.app-input:required):not(:has(.app-input:disabled)) .app-input-name:after{content:\" *\";color:var(--color-text-negative)}@media(hover:hover){.app-input-container:not(.has-error).is-empty:not(:has(.app-input:focus-visible)) .dropdown-icon-container:hover .dropdown-icon{color:#424242!important}}@media(hover:hover){.app-input-container:not(.has-error).is-empty:not(:has(.app-input:focus-visible)) .hover-icon:hover{color:#424242!important}}@media(hover:hover){.app-input-container:not(.has-error).is-empty:has(.app-input:focus-visible) .dropdown-icon-container:hover .dropdown-icon{color:#fff!important}}@media(hover:hover){.app-input-container:not(.has-error).is-empty:has(.app-input:focus-visible) .hover-icon:hover{color:#fff!important}}@media(hover:hover){.app-input-container:not(.has-error):not(.has-valid):has(.app-input:focus-visible) .dropdown-icon-container:hover .dropdown-icon{color:#fff!important}}@media(hover:hover){.app-input-container:not(.has-error):not(.has-valid):has(.app-input:focus-visible) .hover-icon:hover{color:#fff!important}}.app-input-container.canceled .app-input-label,.app-input-container.canceled .app-input{color:var(--color-text-subtle)!important}.app-input-container.canceled .icon-container .icon,.app-input-container.canceled .icon-container .icon-sm{color:var(--color-icon-disable)!important}.subcontent{pointer-events:none;position:absolute;left:6px;color:#919191;-webkit-user-select:none;user-select:none;top:50%;transform:translateY(-50%);transition:right .1s ease-in-out,left .1s ease-in-out,transform .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95),color .1s cubic-bezier(.46,.03,.51,.95);opacity:0;font-family:Montserrat;font-weight:400;font-style:Regular;font-size:14px;line-height:18px;letter-spacing:0%;height:18px;overflow:hidden}.subcontent .subcontent-hide{opacity:0!important}.app-input-label{position:absolute;display:flex;gap:4px;left:0;font-size:14px;line-height:18px;font-weight:400;pointer-events:none;padding:.25rem 6px;color:var(--color-text);transition:transform .1s ease-in-out,font-weight .1s ease-in-out,color .1s ease-in-out,font-size .1s ease-in-out,opacity .1s ease-in-out;transform:translateY(0);-webkit-user-select:none;user-select:none}.app-input-label.placeholder-color{color:var(--placeholder-color)!important}.app-input{padding:.25rem 6px;width:100%;font-size:14px;line-height:18px;font-weight:400;border:0;outline:none;margin-top:auto;background-color:transparent;transition:color .1s cubic-bezier(.46,.03,.51,.95);color:var(--color-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;position:relative}.app-input:focus-visible{color:var(--color-text-inverse)}@media(pointer:coarse){.app-input{font-size:16px;transform:scale(.875);transform-origin:left center;height:26px}}.app-input-error{position:absolute;bottom:-16px;right:6px;font-size:11px;font-weight:600;opacity:0;pointer-events:none;-webkit-user-select:none;user-select:none;transition:opacity .1s cubic-bezier(.46,.03,.51,.95),transform .1s cubic-bezier(.46,.03,.51,.95);color:var(--color-text-negative);transform:translateY(-10px)}.app-input-container.has-error{background-color:var(--color-surface-negative)}.app-input-container.has-error:not(.has-icon):not(.has-password):not(.has-right) .app-input{padding-right:26px}.app-input-container.has-error:has(.app-input:focus-visible):not(.has-right) .app-input{padding-right:26px}@media(hover:hover){.app-input-container.has-error:hover:not(.has-right) .app-input{padding-right:26px}}.app-input-container.has-error.has-right .app-input{padding-right:6px;padding-left:26px}.app-input-container.has-error.hovered{background-color:var(--color-surface-negative-hover)}.app-input-container.has-error.hovered.has-text .button-icon{opacity:1;pointer-events:auto}.app-input-container.has-error.hovered.has-text .bg-icon{background-color:var(--color-icon-negative);color:var(--color-surface-negative-hover)}@media(hover:hover){.app-input-container.has-error:hover{background-color:var(--color-surface-negative-hover)}.app-input-container.has-error:hover.has-text .button-icon{opacity:1;pointer-events:auto}.app-input-container.has-error:hover.has-text .bg-icon{background-color:var(--color-icon-negative);color:var(--color-surface-negative-hover)}}.app-input-container.has-error:has(.app-input:focus-visible){background-color:var(--color-surface-negative-focus);color:var(--color-text-inverse)}.app-input-container.has-error:has(.app-input:focus-visible).has-text .button-icon{opacity:1}.app-input-container.has-error:has(.app-input:focus-visible).has-text .bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-negative-focus)}.app-input-container.has-error:has(.app-input:focus-visible).is-empty,.app-input-container.has-error:has(.app-input:focus-visible).has-dropdown:not(.has-selected){background-color:var(--color-surface-neutral-focus)!important}.app-input-container.has-error:has(.app-input:focus-visible).is-empty .app-input-error,.app-input-container.has-error:has(.app-input:focus-visible).has-dropdown:not(.has-selected) .app-input-error{opacity:0}.app-input-container.has-error:has(.app-input:focus-visible).is-empty .bg-icon,.app-input-container.has-error:has(.app-input:focus-visible).has-dropdown:not(.has-selected) .bg-icon{color:var(--color-surface-neutral-focus)!important}.app-input-container.has-error:has(.app-input:not(:focus-visible)).app-input-container:not(:hover) .warning-icon,.app-input-container.has-error.is-empty:has(.app-input:not(:focus-visible)) .warning-icon{opacity:1!important}.app-input-container.has-error .app-input-error{opacity:1;transform:translateY(0);pointer-events:auto}.app-input-container.has-error .app-input::selection{background-color:#ffffff4d}.app-input-container.has-error .icon-container .separator,.app-input-container.has-error .dropdown-icon-container .separator{background-color:var(--color-icon-negative)}.app-input-container.has-error .icon-container .icon,.app-input-container.has-error .icon-container .icon-sm,.app-input-container.has-error .dropdown-icon-container .icon,.app-input-container.has-error .dropdown-icon-container .icon-sm{color:var(--color-icon-negative)}@media(hover:hover){.app-input-container.has-error:not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .bg-icon:hover{background-color:#c20c0c!important}}@media(hover:hover){.app-input-container.has-error:not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .dropdown-icon-container:hover .dropdown-icon{color:#c20c0c!important}}@media(hover:hover){.app-input-container.has-error:not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .hover-icon:hover{color:#c20c0c!important}}@media(hover:hover){.app-input-container.has-error:not(.removable):has(.app-input:focus-visible) .bg-icon:hover{background-color:#fff!important}}@media(hover:hover){.app-input-container.has-error:not(.removable):has(.app-input:focus-visible) .dropdown-icon-container:hover .dropdown-icon{color:#fff!important}}@media(hover:hover){.app-input-container.has-error:not(.removable):has(.app-input:focus-visible) .hover-icon:hover{color:#fff!important}}.app-input-container.has-valid:not(.has-icon):not(.has-password):not(.has-right) .app-input{padding-right:26px}.app-input-container.has-valid:has(.app-input:focus-visible):not(.has-right) .app-input{padding-right:26px}@media(hover:hover){.app-input-container.has-valid:hover:not(.has-right) .app-input{padding-right:26px}}.app-input-container.has-valid.has-right .app-input{padding-right:6px;padding-left:26px}.app-input-container.has-valid.has-text:not(.has-dropdown):not(.in-table),.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):not(.in-table),.app-input-container.has-valid.has-multiple-dropdown.has-text:not(.in-table){background-color:var(--color-surface-positive)}.app-input-container.has-valid.has-text:not(.has-dropdown).hovered,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown).hovered,.app-input-container.has-valid.has-multiple-dropdown.has-text.hovered{background-color:var(--color-surface-positive-hover)}.app-input-container.has-valid.has-text:not(.has-dropdown).hovered .button-icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown).hovered .button-icon,.app-input-container.has-valid.has-multiple-dropdown.has-text.hovered .button-icon{opacity:1;pointer-events:auto}.app-input-container.has-valid.has-text:not(.has-dropdown).hovered .bg-icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown).hovered .bg-icon,.app-input-container.has-valid.has-multiple-dropdown.has-text.hovered .bg-icon{background-color:var(--color-icon-positive);color:var(--color-surface-positive-hover)}@media(hover:hover){.app-input-container.has-valid.has-text:not(.has-dropdown):hover,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):hover,.app-input-container.has-valid.has-multiple-dropdown.has-text:hover{background-color:var(--color-surface-positive-hover)}.app-input-container.has-valid.has-text:not(.has-dropdown):hover .button-icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):hover .button-icon,.app-input-container.has-valid.has-multiple-dropdown.has-text:hover .button-icon{opacity:1;pointer-events:auto}.app-input-container.has-valid.has-text:not(.has-dropdown):hover .bg-icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):hover .bg-icon,.app-input-container.has-valid.has-multiple-dropdown.has-text:hover .bg-icon{background-color:var(--color-icon-positive);color:var(--color-surface-positive-hover)}}.app-input-container.has-valid.has-text:not(.has-dropdown):has(.app-input:focus-visible),.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):has(.app-input:focus-visible),.app-input-container.has-valid.has-multiple-dropdown.has-text:has(.app-input:focus-visible){background-color:var(--color-surface-positive-focus);color:var(--color-text-inverse)}.app-input-container.has-valid.has-text:not(.has-dropdown):has(.app-input:focus-visible) .button-icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):has(.app-input:focus-visible) .button-icon,.app-input-container.has-valid.has-multiple-dropdown.has-text:has(.app-input:focus-visible) .button-icon{opacity:1;pointer-events:auto}.app-input-container.has-valid.has-text:not(.has-dropdown):has(.app-input:focus-visible) .bg-icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):has(.app-input:focus-visible) .bg-icon,.app-input-container.has-valid.has-multiple-dropdown.has-text:has(.app-input:focus-visible) .bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-positive-focus)}.app-input-container.has-valid.has-text:not(.has-dropdown):has(.app-input:not(:focus-visible)).app-input-container:not(:hover) .positive-icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):has(.app-input:not(:focus-visible)).app-input-container:not(:hover) .positive-icon,.app-input-container.has-valid.has-multiple-dropdown.has-text:has(.app-input:not(:focus-visible)).app-input-container:not(:hover) .positive-icon{opacity:1}.app-input-container.has-valid.has-text:not(.has-dropdown) .app-input::selection,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown) .app-input::selection,.app-input-container.has-valid.has-multiple-dropdown.has-text .app-input::selection{background-color:#ffffff4d}.app-input-container.has-valid.has-text:not(.has-dropdown) .icon-container .separator,.app-input-container.has-valid.has-text:not(.has-dropdown) .dropdown-icon-container .separator,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown) .icon-container .separator,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown) .dropdown-icon-container .separator,.app-input-container.has-valid.has-multiple-dropdown.has-text .icon-container .separator,.app-input-container.has-valid.has-multiple-dropdown.has-text .dropdown-icon-container .separator{background-color:var(--color-icon-positive)}.app-input-container.has-valid.has-text:not(.has-dropdown) .icon-container .icon,.app-input-container.has-valid.has-text:not(.has-dropdown) .icon-container .icon-sm,.app-input-container.has-valid.has-text:not(.has-dropdown) .dropdown-icon-container .icon,.app-input-container.has-valid.has-text:not(.has-dropdown) .dropdown-icon-container .icon-sm,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown) .icon-container .icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown) .icon-container .icon-sm,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown) .dropdown-icon-container .icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown) .dropdown-icon-container .icon-sm,.app-input-container.has-valid.has-multiple-dropdown.has-text .icon-container .icon,.app-input-container.has-valid.has-multiple-dropdown.has-text .icon-container .icon-sm,.app-input-container.has-valid.has-multiple-dropdown.has-text .dropdown-icon-container .icon,.app-input-container.has-valid.has-multiple-dropdown.has-text .dropdown-icon-container .icon-sm{color:var(--color-icon-positive)}.app-input-container.has-valid.has-text:not(.has-dropdown) .icon-container .password-key,.app-input-container.has-valid.has-text:not(.has-dropdown) .dropdown-icon-container .password-key,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown) .icon-container .password-key,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown) .dropdown-icon-container .password-key,.app-input-container.has-valid.has-multiple-dropdown.has-text .icon-container .password-key,.app-input-container.has-valid.has-multiple-dropdown.has-text .dropdown-icon-container .password-key{opacity:0;pointer-events:none}@media(hover:hover){.app-input-container.has-valid.has-text:not(.has-dropdown):not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .bg-icon:hover,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .bg-icon:hover,.app-input-container.has-valid.has-multiple-dropdown.has-text:not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .bg-icon:hover{background-color:#0b49d1!important}}@media(hover:hover){.app-input-container.has-valid.has-text:not(.has-dropdown):not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .dropdown-icon-container:hover .dropdown-icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .dropdown-icon-container:hover .dropdown-icon,.app-input-container.has-valid.has-multiple-dropdown.has-text:not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .dropdown-icon-container:hover .dropdown-icon{color:#0b49d1!important}}@media(hover:hover){.app-input-container.has-valid.has-text:not(.has-dropdown):not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .hover-icon:hover,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .hover-icon:hover,.app-input-container.has-valid.has-multiple-dropdown.has-text:not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .hover-icon:hover{color:#0b49d1!important}}@media(hover:hover){.app-input-container.has-valid.has-text:not(.has-dropdown):not(.removable):has(.app-input:focus-visible) .bg-icon:hover,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):not(.removable):has(.app-input:focus-visible) .bg-icon:hover,.app-input-container.has-valid.has-multiple-dropdown.has-text:not(.removable):has(.app-input:focus-visible) .bg-icon:hover{background-color:#fff!important}}@media(hover:hover){.app-input-container.has-valid.has-text:not(.has-dropdown):not(.removable):has(.app-input:focus-visible) .dropdown-icon-container:hover .dropdown-icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):not(.removable):has(.app-input:focus-visible) .dropdown-icon-container:hover .dropdown-icon,.app-input-container.has-valid.has-multiple-dropdown.has-text:not(.removable):has(.app-input:focus-visible) .dropdown-icon-container:hover .dropdown-icon{color:#fff!important}}@media(hover:hover){.app-input-container.has-valid.has-text:not(.has-dropdown):not(.removable):has(.app-input:focus-visible) .hover-icon:hover,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):not(.removable):has(.app-input:focus-visible) .hover-icon:hover,.app-input-container.has-valid.has-multiple-dropdown.has-text:not(.removable):has(.app-input:focus-visible) .hover-icon:hover{color:#fff!important}}.in-table,.in-table.has-error,.in-table.has-valid.has-text{background-color:transparent}.in-table.has-error:not(:hover).in-table:not(.app-input-container:has(.app-input:focus-visible)) .app-input{color:var(--color-text-negative)}.in-table.has-error:not(:hover).in-table:not(.app-input-container:has(.app-input:focus-visible)):not(.static-placeholder) .app-input-label{color:var(--color-text-negative)}.in-table .dropdown-icon-container{opacity:0}@media(hover:hover){.in-table:hover .dropdown-icon-container{opacity:1}}.in-table:has(.app-input:focus-visible) .dropdown-icon-container{opacity:1}.app-input-icon{position:absolute;right:4px;top:4px;pointer-events:none;transition:color .1s cubic-bezier(.46,.03,.51,.95),background-color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95)}.button-icon{opacity:0;pointer-events:none}@media(hover:hover){.button-icon:hover{cursor:pointer}}.bg-icon{background-color:var(--color-icon-neutral);color:var(--color-surface-neutral);border-radius:1px;height:18px;width:18px;padding:0;display:grid;place-items:center;transition:background-color .1s cubic-bezier(.46,.03,.51,.95),color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95),transform .1s cubic-bezier(.46,.03,.51,.95);transform-box:border-box;transform-origin:center;will-change:transform}.bg-icon svg{transition:transform .1s cubic-bezier(.46,.03,.51,.95)}@media(hover:hover){.bg-icon:hover{transform:scale(1.2222222222)}.bg-icon:hover svg{transform:scale(.8181818182)}}.bg-icon:active{transform:scale(1)}.round-icon{background-color:#919191;color:#2f2f2f;border-radius:50%;height:18px;width:18px;padding:0;display:grid;place-items:center;transition:background-color .1s cubic-bezier(.46,.03,.51,.95),color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95)}.positive-icon{color:var(--color-icon-positive);height:18px;width:18px;display:grid;place-items:center;opacity:0}.warning-icon{color:var(--color-icon-negative);height:18px;width:18px;display:grid;place-items:center;opacity:0}.text-color-positive:not(:hover):not(:has(.app-input:focus-visible)) .app-input{color:#3b73ed}.is-plan.has-selected .app-input,.is-plan.has-selected .dropdown-selected-content,.is-plan.has-selected .selected-text{font-weight:700}.is-plan.has-selected:not(:has(.app-input:focus-visible)) .app-input,.is-plan.has-selected:not(:has(.app-input:focus-visible)) .dropdown-selected-content,.is-plan.has-selected:not(:has(.app-input:focus-visible)) .selected-text{color:#3b73ed}@media(hover:hover){.is-plan.has-selected:not(:has(.app-input:focus-visible)):hover .app-input,.is-plan.has-selected:not(:has(.app-input:focus-visible)):hover .dropdown-selected-content,.is-plan.has-selected:not(:has(.app-input:focus-visible)):hover .selected-text{color:#0b49d1}}.floating-error .app-input-error{opacity:0!important}.static-error .app-input-error{pointer-events:none!important;transform:translateY(calc(-100% - 4px))!important;transition:margin .1s ease-in-out,opacity .1s ease-in-out}.static-error.has-icon .app-input-error{margin-right:26px!important}.static-error:has(.app-input:not(:focus-visible)) .app-input-error{opacity:1}.static-error.has-text .app-input-error{opacity:0!important}.static-placeholder .app-input-label{position:relative;white-space:nowrap;font-size:11px;font-weight:600}.static-placeholder .dropdown-selected{overflow:hidden;display:flex!important;justify-content:left!important}.static-placeholder .dropdown-selected .selected-label-hidden{width:max-content;font-size:11px;font-weight:600;opacity:0;-webkit-user-select:none;user-select:none;pointer-events:none}.static-placeholder .dropdown-selected .selected-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;display:inline-block}.static-placeholder .app-input{padding-left:0!important}.static-placeholder.has-dropdown .cancel-button{display:none}.static-placeholder.has-dropdown .dropdown-icon-container .dropdown-icon{opacity:0;pointer-events:none}.static-placeholder.has-dropdown:not(:has(.app-input:disabled)):has(.app-input:focus-visible) .icon-container .icon,.static-placeholder.has-dropdown:not(:has(.app-input:disabled)):has(.app-input:focus-visible) .icon-container .icon-sm{opacity:0}.static-placeholder.has-dropdown:not(:has(.app-input:disabled)):has(.app-input:focus-visible) .dropdown-icon-container{z-index:5;pointer-events:auto;cursor:pointer}.static-placeholder.has-dropdown:not(:has(.app-input:disabled)):has(.app-input:focus-visible) .dropdown-icon-container .dropdown-icon{opacity:1!important}@media(hover:hover){.static-placeholder.has-dropdown:not(:has(.app-input:disabled)):hover .icon-container .icon,.static-placeholder.has-dropdown:not(:has(.app-input:disabled)):hover .icon-container .icon-sm{opacity:0}.static-placeholder.has-dropdown:not(:has(.app-input:disabled)):hover .dropdown-icon-container{z-index:5;pointer-events:auto;cursor:pointer}.static-placeholder.has-dropdown:not(:has(.app-input:disabled)):hover .dropdown-icon-container .dropdown-icon{opacity:1!important}}.static-placeholder.has-dropdown .dropdown-icon-container{right:4px!important;left:auto!important}.app-input-container.has-icon:has(.app-input:focus-visible) .icon-container .icon,.app-input-container.has-icon:has(.app-input:focus-visible) .icon-container .icon-sm,.app-input-container.has-icon:has(.app-input:focus-visible) .dropdown-icon-container .icon,.app-input-container.has-icon:has(.app-input:focus-visible) .dropdown-icon-container .icon-sm,.app-input-container.has-password:has(.app-input:focus-visible) .icon-container .icon,.app-input-container.has-password:has(.app-input:focus-visible) .icon-container .icon-sm,.app-input-container.has-password:has(.app-input:focus-visible) .dropdown-icon-container .icon,.app-input-container.has-password:has(.app-input:focus-visible) .dropdown-icon-container .icon-sm,.app-input-container.has-dropdown:has(.app-input:focus-visible) .icon-container .icon,.app-input-container.has-dropdown:has(.app-input:focus-visible) .icon-container .icon-sm,.app-input-container.has-dropdown:has(.app-input:focus-visible) .dropdown-icon-container .icon,.app-input-container.has-dropdown:has(.app-input:focus-visible) .dropdown-icon-container .icon-sm{color:var(--color-icon-inverse)!important}.app-input-container.has-icon.colored-icon .icon-container .icon,.app-input-container.has-icon.colored-icon .icon-container .icon-sm,.app-input-container.has-password.colored-icon .icon-container .icon,.app-input-container.has-password.colored-icon .icon-container .icon-sm,.app-input-container.has-dropdown.colored-icon .icon-container .icon,.app-input-container.has-dropdown.colored-icon .icon-container .icon-sm{color:var(--icon-color)}.app-input-container.has-icon.is-empty:has(.app-input:disabled) .icon-container .icon,.app-input-container.has-icon.is-empty:has(.app-input:disabled) .icon-container .icon-sm,.app-input-container.has-icon.is-empty:has(.app-input:disabled) .dropdown-icon-container .icon,.app-input-container.has-icon.is-empty:has(.app-input:disabled) .dropdown-icon-container .icon-sm,.app-input-container.has-password.is-empty:has(.app-input:disabled) .icon-container .icon,.app-input-container.has-password.is-empty:has(.app-input:disabled) .icon-container .icon-sm,.app-input-container.has-password.is-empty:has(.app-input:disabled) .dropdown-icon-container .icon,.app-input-container.has-password.is-empty:has(.app-input:disabled) .dropdown-icon-container .icon-sm,.app-input-container.has-dropdown.is-empty:has(.app-input:disabled) .icon-container .icon,.app-input-container.has-dropdown.is-empty:has(.app-input:disabled) .icon-container .icon-sm,.app-input-container.has-dropdown.is-empty:has(.app-input:disabled) .dropdown-icon-container .icon,.app-input-container.has-dropdown.is-empty:has(.app-input:disabled) .dropdown-icon-container .icon-sm{color:var(--color-icon-disable)!important}.app-input-container.has-icon .positive-icon,.app-input-container.has-icon .warning-icon,.app-input-container.has-password .positive-icon,.app-input-container.has-password .warning-icon,.app-input-container.has-dropdown .positive-icon,.app-input-container.has-dropdown .warning-icon{display:none!important}.app-input-container.has-icon .icon,.app-input-container.has-icon .icon-sm,.app-input-container.has-password .icon,.app-input-container.has-password .icon-sm,.app-input-container.has-dropdown .icon,.app-input-container.has-dropdown .icon-sm{height:18px;width:18px;display:grid;place-items:center;color:var(--color-icon-neutral);transition:color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95);opacity:1}.app-input-container.has-icon:has(.app-input:focus-visible):not(.static-placeholder) .dropdown-selected,.app-input-container.has-password:has(.app-input:focus-visible):not(.static-placeholder) .dropdown-selected,.app-input-container.has-dropdown:has(.app-input:focus-visible):not(.static-placeholder) .dropdown-selected{width:calc(100% - 48px)!important}@media(hover:hover){.app-input-container.has-icon:hover:not(:has(.app-input:disabled)):not(.static-placeholder) .dropdown-selected,.app-input-container.has-password:hover:not(:has(.app-input:disabled)):not(.static-placeholder) .dropdown-selected,.app-input-container.has-dropdown:hover:not(:has(.app-input:disabled)):not(.static-placeholder) .dropdown-selected{width:calc(100% - 48px)!important}}.icon-sm{height:14px;width:14px}.app-input-container.has-icon .icon-container,.app-input-container.has-password .icon-container{height:26px;display:flex;justify-items:center;align-items:center;gap:4px;padding:.25rem 0 .25rem 6px}@media(hover:hover){.app-input-container.has-icon .icon-container:hover,.app-input-container.has-password .icon-container:hover{cursor:text}}.app-input-container.has-icon .subcontent,.app-input-container.has-password .subcontent{left:32px}.app-input-container.has-icon .app-input-label,.app-input-container.has-password .app-input-label{left:27px}.app-input-container.has-icon .app-input,.app-input-container.has-password .app-input{padding-left:4px}.separator{height:14px;width:1px;border-radius:2px;background-color:var(--color-icon-neutral);transition:background-color .1s cubic-bezier(.46,.03,.51,.95);opacity:40%}.has-password .password-icons{display:grid;place-items:center;position:relative;height:18px;width:18px}.has-password .password-icons .icon,.has-password .password-icons .icon-sm{position:absolute;opacity:0}.has-password.is-empty:has(.app-input:not(:focus-visible)) .password-key{opacity:1!important}.has-password.is-empty:has(.app-input:not(:focus-visible)) .password-icons{pointer-events:none}.has-password:has(.app-input:disabled) .password-icons{pointer-events:none}.has-password.has-text .password-hidden,.has-password:has(.app-input:focus-visible) .password-hidden{opacity:1!important}@media(hover:hover){.has-password.has-text .password-hidden:hover,.has-password:has(.app-input:focus-visible) .password-hidden:hover{cursor:pointer}}.has-visible.has-text .password-shown,.has-visible:has(.app-input:focus-visible) .password-shown{opacity:1!important}@media(hover:hover){.has-visible.has-text .password-shown:hover,.has-visible:has(.app-input:focus-visible) .password-shown:hover{cursor:pointer}}.has-visible.has-text .password-hidden,.has-visible:has(.app-input:focus-visible) .password-hidden{opacity:0!important;pointer-events:none}.has-number .number-container{position:relative;display:flex;justify-content:center;align-items:center;right:4px;pointer-events:none}.has-number .number-buttons{display:flex;gap:4px;position:absolute;right:0;justify-content:center;align-items:center;opacity:0;transition:opacity .1s cubic-bezier(.46,.03,.51,.95);pointer-events:none}.has-number .plus-icon,.has-number .minus-icon{cursor:pointer;pointer-events:none}.has-number:has(.app-input:focus-visible){cursor:text}.has-number:has(.app-input:focus-visible) .number-buttons{opacity:1}.has-number:has(.app-input:focus-visible) .plus-icon{pointer-events:auto}.has-number:has(.app-input:focus-visible) .minus-icon{pointer-events:auto}.has-number:has(.app-input:focus-visible) .button-icon{opacity:0!important;pointer-events:none!important}.has-number:has(.app-input:focus-visible) .number-container{width:60px}.has-number:has(.app-input:focus-visible) .subcontent{right:52px!important}.has-number:has(.app-input:focus-visible).has-text .subcontent{right:52px!important}.colored-icon .icon,.colored-icon .icon-sm{color:var(--icon-color)!important}.dropdown-anchor{position:absolute;width:100%;-webkit-user-select:none;user-select:none;pointer-events:none;opacity:0}.dropdown-infinite-scroll-item{width:100%;-webkit-user-select:none;user-select:none;pointer-events:none;opacity:0;height:0}.dropdown-menu{min-width:0px!important;width:100%;border:0;margin-top:4px;top:30px;height:var(--unfiltered-height);min-height:var(--unfiltered-height);padding:0!important;overflow:hidden;border-radius:0!important;background:transparent!important}.dropdown-menu.has-stroke .dropdown-menu-content{outline:1px solid #6c6c6c;outline-offset:-1px}.dropdown-menu .dropdown-menu-content{position:absolute;width:100%;background-color:#2f2f2f;border-radius:3px;padding:4px 0 4px 4px;max-height:244px;z-index:1100!important;overflow-y:scroll;margin-top:auto!important;scroll-padding:6px 0}.dropdown-menu .dropdown-menu-content::-webkit-scrollbar{background-color:#2f2f2f;border-radius:0 3px 3px 0;width:4px}.dropdown-menu .dropdown-menu-content::-webkit-scrollbar-thumb{width:4px;background:#2f2f2f;border-left:2px solid #919191;background-clip:padding-box;border-radius:1px 3px 3px 1px}@supports (-moz-appearance: none){.dropdown-menu .dropdown-menu-content{padding-right:4px;scrollbar-width:4px;scrollbar-color:#919191 transparent;scrollbar-gutter:stable!important}@media(hover:hover){.dropdown-menu .dropdown-menu-content:hover{scrollbar-color:#919191 transparent;scrollbar-width:4px!important;scrollbar-gutter:stable!important}}}@-moz-document url-prefix(){.dropdown-menu .dropdown-menu-content{overflow:-moz-scrollbars-vertical;scrollbar-width:4px;scrollbar-color:#919191 transparent}}.option-icon{color:#6c6c6c;transition:color .1s cubic-bezier(.46,.03,.51,.95)}.option-icon.full-size{width:max-content;min-width:100%;height:18px!important;min-height:18px;flex-shrink:0;overflow:hidden}.option-icon.full-size svg{height:18px;width:max-content}.cai-color{color:var(--color)!important;transition:color .1s cubic-bezier(.46,.03,.51,.95)}@media(hover:hover){.color-item:hover .cai-color{color:var(--hover-color)!important}}.dropdown-item{color:#fff;font-weight:400;font-size:14px;line-height:18px;height:26px;padding:4px;width:100%;scroll-margin:6px 0;outline:1px solid transparent;outline-offset:-1px;display:flex;align-items:center;justify-content:left;gap:4px;background-color:#2f2f2f;transition:background-color .1s cubic-bezier(.46,.03,.51,.95),color .1s cubic-bezier(.46,.03,.51,.95),outline .1s cubic-bezier(.46,.03,.51,.95);border-radius:2px;position:relative}.dropdown-item.focused{outline:1px solid #6c6c6c!important}.dropdown-item.focused .end-item-base{opacity:0}.dropdown-item.focused .end-item-hover{opacity:1}.dropdown-item.focused .full-icon{color:#ffffffb2}.dropdown-item.focused .truck-trailer-option{opacity:1}.dropdown-item .icon,.dropdown-item .icon-sm{color:#919191}.dropdown-item .dropdown-content-with-icon{max-width:calc(100% - 22px);overflow-x:hidden;word-break:break-all;text-overflow:ellipsis;white-space:nowrap}.dropdown-item .dropdown-content-hazardous{max-width:calc(100% - 40px);overflow-x:hidden;word-break:break-all;text-overflow:ellipsis;white-space:nowrap}.dropdown-item .dropdown-content{max-width:70%;overflow-x:hidden;word-break:break-all;text-overflow:ellipsis;white-space:nowrap}@media(hover:hover){.dropdown-item:hover:not(.no-hover){background-color:#424242}.dropdown-item:hover:not(.no-hover) .end-item-base{opacity:0}.dropdown-item:hover:not(.no-hover) .end-item-hover{opacity:1}.dropdown-item:hover:not(.no-hover) .full-icon{color:#ffffffb2}.dropdown-item:hover:not(.no-hover) .truck-trailer-option{opacity:1}}.dropdown-item.no-hover{cursor:default;pointer-events:none}.dropdown-item:focus-visible{background-color:#424242;border:0;outline:none}.dropdown-item:not(:first-child){margin-top:4px}.dropdown-item.banned{color:#919191;cursor:default}@media(hover:hover){.dropdown-item.banned:hover{color:#919191;background-color:#2f2f2f}.dropdown-item.banned:hover .end-item-base{opacity:0}.dropdown-item.banned:hover .end-item-hover{opacity:1}}.dropdown-item.dnu .round-icon{background-color:#e66767}.dropdown-item.selected .dispatch-load-count,.dropdown-item.selected .unassigned-ltl,.dropdown-item.selected .unassigned-ltl .icon,.dropdown-item.selected .unassigned-ltl .icon-sm{color:#92b1f5}.dropdown-item:not(:hover):not(.focused):not(.selected) .truck-icon{color:#919191}.dropdown-item:not(:hover):not(.focused):not(.selected) .trailer-icon{color:#919191}@media(hover:hover){.dropdown-avatar:hover{z-index:20}}.no-results{color:#919191;font-weight:700;cursor:default;pointer-events:none}.add-new{color:#92b1f5!important;font-weight:700;font-size:11px}.add-new .dropdown-item-icon{opacity:1}@media(hover:hover){.add-new:hover{background-color:#3b73ed66!important;color:#fff!important}}.selected{font-weight:700}.selected .dropdown-item-icon{opacity:1}.selected .dropdown-item-count{color:#fff;background-color:#3b73ed}.selected .full-icon{color:#fff}.selected .end-item-base,.selected .end-item-hover{font-weight:700;color:#92b1f5}.selected .end-item-base .icon,.selected .end-item-base .icon-sm,.selected .end-item-hover .icon,.selected .end-item-hover .icon-sm{color:#92b1f5}.dropdown-item-icon{opacity:0;color:#92b1f5;width:14px;height:14px;margin-left:auto}.dropdown-item-icon.no-margin{margin-left:0}.dropdown-item-count{position:absolute;right:6px;top:50%;transform:translateY(-50%);padding:2px 5px;border-radius:10px;background-color:#424242;color:#ffffffb2;min-width:18px;line-height:14px;font-weight:600;font-size:11px;text-align:center}.fraud-icon{color:#fab15c!important;height:18px;width:18px}.dropdown-icon-container{position:absolute;right:4px;top:50%;transform:translateY(-50%);width:18px;height:18px;display:grid;place-items:center;transition:opacity .1s cubic-bezier(.46,.03,.51,.95)}.dropdown-icon-container.open .dropdown-icon{transform:rotateX(180deg)}.dropdown-icon{transition:transform .1s cubic-bezier(.46,.03,.51,.95),color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95)!important;transform:rotateX(0);cursor:pointer}.has-dropdown .app-input-icon{right:26px}.has-dropdown:has(.app-input:focus-visible) .subcontent{right:26px!important}.has-dropdown:has(.app-input:focus-visible).has-text .subcontent,.has-dropdown:has(.app-input:focus-visible).has-selected .subcontent{right:48px!important}.has-dropdown:has(.app-input:focus-visible):not(.static-placeholder):not(.is-adding) .app-input{padding-right:48px!important}@media(hover:hover){.has-dropdown:hover:not(.static-placeholder):not(.is-adding) .app-input{padding-right:48px!important}}.has-right .app-input{text-align:right}@media(pointer:coarse){.has-right .app-input{transform-origin:right center}}.has-right .positive-icon,.has-right .app-input-icon{left:4px;right:auto}.has-right .cancel-button{z-index:1}.has-right.has-number .plus-button-container{order:2}.has-right.has-number .minus-button-container{order:1}.has-right.static-placeholder .app-input-icon{right:4px!important;left:auto!important;opacity:0!important}.has-right.static-placeholder:has(.app-input:focus-visible) .cancel-button{opacity:0!important;pointer-events:none!important}.has-right.static-placeholder.removable .cancel-button .bg-icon{background-color:transparent!important}@media(hover:hover){.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)).has-valid.has-text .cancel-button .bg-icon{color:var(--color-icon-positive)!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)).has-valid.has-text .cancel-button .bg-icon:hover{color:#c20c0c!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)).has-valid.has-text:has(.app-input:focus-visible) .cancel-button .bg-icon{color:var(--color-icon-inverse)!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)).has-valid.has-text:has(.app-input:focus-visible) .cancel-button .bg-icon:hover{color:#fff!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)):not(.has-text) .cancel-button .bg-icon{color:var(--color-icon-neutral)!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)):not(.has-text) .cancel-button .bg-icon:hover{color:#c20c0c!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)):not(.has-text):has(.app-input:focus-visible) .cancel-button .bg-icon{color:var(--color-icon-inverse)!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)):not(.has-text):has(.app-input:focus-visible) .cancel-button .bg-icon:hover{color:#fff!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)).has-error .cancel-button .bg-icon{color:var(--color-icon-negative)!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)).has-error .cancel-button .bg-icon:hover{color:#c20c0c!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)) .cancel-button{opacity:1!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)) .cancel-button .bg-icon{opacity:1!important;pointer-events:auto!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)) .icon-container .icon,.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)) .icon-container .icon-sm{opacity:0!important}}@media(hover:hover){.has-right.static-placeholder:hover:not(:has(.app-input:focus-visible)):not(:has(.app-input:disabled)).has-text .cancel-button{opacity:1!important}}.has-right .app-input{order:1}.has-right.has-subcontent .app-input{flex:1;min-width:0;word-break:none}.has-right .dropdown-selected{margin-left:0!important;text-align:right!important;right:0!important;left:0!important;justify-content:flex-end!important;width:100%!important}.has-right .subcontent{position:relative!important;order:1;display:grid;place-items:center;padding-right:4px;height:unset!important;transform:translateY(0)!important;left:0!important;right:unset!important}.has-right .subcontent .subcontent-hide{display:none!important}.has-right.has-text .subcontent{left:0!important;right:unset!important}.has-right:has(.app-input:focus-visible) .subcontent{left:0!important;right:unset!important}.has-right.has-icon .subcontent,.has-right.has-password .subcontent{padding-right:0!important;padding-left:4px}.has-right.has-icon .dropdown-selected,.has-right.has-password .dropdown-selected{width:calc(100% - 24px)!important}.has-right.has-icon .app-input,.has-right.has-password .app-input{padding-right:0!important}.has-right.has-icon .app-input-label,.has-right.has-password .app-input-label{left:0!important}.has-right.has-icon.fade-placeholder .app-input-label,.has-right.has-password.fade-placeholder .app-input-label{left:auto!important;right:24px!important}.has-right.has-icon .icon-container,.has-right.has-password .icon-container{width:30px;padding-left:4px}.has-right.has-icon .icon-container .icon,.has-right.has-icon .icon-container .icon-sm,.has-right.has-password .icon-container .icon,.has-right.has-password .icon-container .icon-sm{order:2}.has-right.has-dropdown .app-input-icon{left:26px}.has-right.has-dropdown .dropdown-icon-container{left:4px}.has-right .warning-icon{display:none!important}.has-right.has-number .separator{order:3}.has-right.has-number .number-buttons{left:0;right:unset}.has-right.has-number .number-container{left:4px;right:unset}.has-right.has-number.app-input-container:has(.app-input:focus-visible) .app-input{padding-left:4px}@media(hover:hover){.has-right.has-number.app-input-container:hover:not(:has(.app-input:disabled)) .number-container{width:60px}.has-right.has-number.app-input-container:hover:not(:has(.app-input:disabled)) .app-input{padding-left:4px}}.has-right .icon-container{order:2;margin-right:4px}.has-right .icon-container .password-icons{order:2}.has-right.fade-placeholder .app-input-label{right:0!important;left:auto!important}.has-right.fade-placeholder:has(.app-input:required) .app-input-name:after{content:none!important}.has-right.fade-placeholder:has(.app-input:required) .app-input-name:before{content:\"* \";color:var(--color-text-negative)}@media(hover:hover){.removable:has(.cancel-button:hover).in-table{background-color:transparent!important}.removable:has(.cancel-button:hover).in-table .separator{background-color:var(--color-icon-negative)!important}}@media(hover:hover){.removable:has(.cancel-button:hover):not(.in-table){background-color:var(--color-surface-negative-hover)!important}.removable:has(.cancel-button:hover):not(.in-table) .separator{background-color:var(--color-icon-negative)!important}}@media(hover:hover){.removable:has(.cancel-button:hover):has(.app-input:focus-visible){background-color:var(--color-surface-negative-focus)!important}.removable:has(.cancel-button:hover):has(.app-input:focus-visible) .separator{background-color:var(--color-icon-inverse)!important}}.no-clear .cancel-button{display:none!important}.is-adding{padding-right:20px}.is-adding .dropdown-icon{opacity:0!important}.is-adding .accept-button{pointer-events:none;opacity:0!important}@media(hover:hover){.is-adding:not(.removable):has(.app-input:focus-visible) .bg-icon:hover{background-color:#fff!important}}@media(hover:hover){.is-adding:not(.removable):has(.app-input:focus-visible) .dropdown-icon-container:hover .dropdown-icon{color:#fff!important}}@media(hover:hover){.is-adding:not(.removable):has(.app-input:focus-visible) .hover-icon:hover{color:#fff!important}}.is-adding:has(.app-input:focus-visible){padding-right:48px!important}@media(hover:hover){.is-adding:hover{padding-right:48px!important}}.is-adding.has-right{padding-left:26px}.is-adding.has-right.has-right:has(.app-input:focus-visible){padding-left:40px}@media(hover:hover){.is-adding.has-right.has-right:hover{padding-left:40px}}.is-adding .app-input-icon{right:4px}@media(hover:hover){.is-adding.has-text:hover .button-icon{opacity:1;pointer-events:auto!important}.is-adding.has-text:hover .accept-button{pointer-events:auto;opacity:1!important}}.is-adding.has-text:has(.app-input:focus-visible) .button-icon{opacity:1;pointer-events:auto!important}.is-adding.has-text:has(.app-input:focus-visible) .accept-button{pointer-events:auto;opacity:1!important}.is-adding .cancel-button{opacity:1!important;pointer-events:auto}.is-adding .dropdown-icon-container{pointer-events:none}.is-adding .accept-button{right:26px;pointer-events:auto}.dropdown-selected{-webkit-user-select:none;user-select:none;position:absolute;top:50%;transform:translateY(-50%);left:0;width:calc(100% - 22px);pointer-events:none;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;word-break:break-all;padding:.25rem 6px;font-size:14px;line-height:18px;font-weight:400;border:0;outline:none;margin-top:auto;background-color:transparent;transition:color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95),width .1s ease-in-out;color:var(--color-text);display:flex;gap:4px}.dropdown-selected .dropdown-selected-content{overflow:hidden;-webkit-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex:1}.dropdown-selected .dropdown-selected-hazardous{max-width:calc(100% - 22px)}p.dropdown-selected{-webkit-user-select:none;user-select:none;display:block}.app-input-container:has(.app-input:focus-visible) .dropdown-selected{color:#fff;opacity:.7}.app-input-container:has(.app-input:focus-visible) .dropdown-selected .option-icon{color:#fff!important}.has-icon .positive-icon,.has-icon .warning-icon{display:none}.has-icon .dropdown-selected{left:27px;width:calc(100% - 49px)}@media(hover:hover){.has-icon:hover .dropdown-selected{width:calc(100% - 71px)}}.has-icon.app-input-container:has(.app-input:focus-visible) .dropdown-selected{width:calc(100% - 71px)}.hazard-icon{height:18px;width:max-content}.has-dispatch .app-input-label{transform:translateY(-20px);font-weight:600;font-size:11px;color:var(--color-text-heading)!important}.dispatch-load-count{color:#dadada;font-weight:700}.dispatch-separator{color:#919191;font-weight:400}.dispatch-status{font-family:Montserrat;font-weight:700;font-style:Bold;font-size:11px;line-height:14px;letter-spacing:0%;text-transform:uppercase;color:#ffffffb2;border-radius:2px;padding:2px 4px;display:flex;justify-content:center;align-items:center;gap:4px}.dispatch-status.status-available{background-color:#50ac2533}.dispatch-status.status-dispatched{background-color:#3b73ed33}.dispatch-status.status-arrivedpickup,.dispatch-status.status-checkedinpickup,.dispatch-status.status-checkedin,.dispatch-status.status-loading,.dispatch-status.status-loaded{background-color:#259f9433}.dispatch-status.status-arriveddelivery,.dispatch-status.status-checkedindelivery,.dispatch-status.status-offloading,.dispatch-status.status-offloaded,.dispatch-status.status-empty{background-color:#ff704333}.dispatch-status.status-canceled{background-color:#df3c3c33}.dispatch-status.status-off,.dispatch-status.status-deadheading,.dispatch-status.status-break,.dispatch-status.status-split{background-color:#91919133}.dispatch-status.status-towing{background-color:#9e47ec33}.dispatch-status.status-repair,.dispatch-status.status-dispatchedrepair,.dispatch-status.status-loadedrepair{background-color:#865e3a33}.dispatch-status .status-block{border-radius:1px;background-color:#aaa;padding-left:2px;padding-right:2px;font-family:Montserrat;font-weight:700;font-style:Bold;font-size:11px;line-height:12px;text-align:center;color:#2f2f2f;min-width:12px;height:12px}.dispatch-status .status-block.blue{background-color:#6692f1}.dispatch-status .status-block.green{background-color:#56b4ac}.dispatch-status .status-block.orange{background-color:#ff906d}.has-ftl-dispatch,.has-dispatch{min-width:600px}.has-ftl-dispatch:has(.app-input:focus-visible) .dropdown-selected .dispatch-icon,.has-ftl-dispatch:has(.app-input:focus-visible) .dropdown-selected .trailer-icon,.has-ftl-dispatch:has(.app-input:focus-visible) .dropdown-selected .truck-icon,.has-dispatch:has(.app-input:focus-visible) .dropdown-selected .dispatch-icon,.has-dispatch:has(.app-input:focus-visible) .dropdown-selected .trailer-icon,.has-dispatch:has(.app-input:focus-visible) .dropdown-selected .truck-icon{color:#fff}.dropdown-subitem{display:flex;justify-content:left;align-items:center;gap:4px}.truck-item{width:128px}.trailer-item{width:138px}.truck-trailer-option{opacity:0;transition:opacity .1s cubic-bezier(.46,.03,.51,.95);margin-left:auto}.truck-trailer-icon-colors.ic_truck_semi-truck,.truck-trailer-icon-colors.ic_truck_semi-wSleeper{color:#92b1f5}.truck-trailer-icon-colors.ic_truck_box-truck,.truck-trailer-icon-colors.ic_truck_reefer,.truck-trailer-icon-colors.ic_truck_cargo-van{color:#fbc88b}.truck-trailer-icon-colors.ic_truck_cement,.truck-trailer-icon-colors.ic_truck_dump,.truck-trailer-icon-colors.ic_truck_garbage{color:#ed9292}.truck-trailer-icon-colors.ic_truck_tow-truck,.truck-trailer-icon-colors.ic_truck_car-hauler,.truck-trailer-icon-colors.ic_truck_spotter{color:#86c9c3}.truck-trailer-icon-colors.ic_trailer_flatbed,.truck-trailer-icon-colors.ic_trailer_low-boy,.truck-trailer-icon-colors.ic_trailer_step-deck{color:#92b1f5}.truck-trailer-icon-colors.ic_trailer_chassis,.truck-trailer-icon-colors.ic_trailer_container{color:#80d6f1}.truck-trailer-icon-colors.ic_trailer_conestoga,.truck-trailer-icon-colors.ic_trailer_side-kit{color:#8785e8}.truck-trailer-icon-colors.ic_trailer_dryvan,.truck-trailer-icon-colors.ic_trailer_reefer{color:#fbc88b}.truck-trailer-icon-colors.ic_trailer_end-dump,.truck-trailer-icon-colors.ic_trailer_bottom-dump,.truck-trailer-icon-colors.ic_trailer_hopper{color:#ed9292}.truck-trailer-icon-colors.ic_trailer_tanker,.truck-trailer-icon-colors.ic_trailer_tanker-pneumatic{color:#ed93bb}.truck-trailer-icon-colors.ic_trailer_carhauler,.truck-trailer-icon-colors.ic_trailer_carhauler-stinger{color:#86c9c3}.sub-label{margin-left:auto;margin-right:22px;opacity:0;transition:margin .1s ease-in-out,opacity .1s ease-in-out;color:#6c6c6c}.app-input-label:has(.sub-label),.app-input-label:has(.accident-state){width:100%}.has-selected .sub-label{opacity:1}.dispatch-icon,.trailer-icon,.truck-icon{color:#919191;transition:color .1s cubic-bezier(.46,.03,.51,.95)}.truck-icon,.trailer-icon{width:42px}.truck-number{width:80px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.trailer-number{width:90px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.driver-name{max-width:170px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.dropdown-subitem-end{margin-left:auto;position:relative;height:26px;width:auto;display:flex;justify-content:right;align-items:center;font-family:Montserrat;font-weight:400;font-size:11px;line-height:18px;letter-spacing:0%;text-align:right;vertical-align:bottom}.end-item-base{position:absolute;display:flex;justify-content:right;align-items:center;width:max-content;gap:4px;color:#919191;transition:color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95);text-align:right}.dispatch-ltl{font-family:Montserrat;font-weight:700;font-size:11px;line-height:18px;letter-spacing:0%;text-align:right}.unassigned-ltl{margin-left:auto;display:flex;justify-content:right;align-items:center;width:max-content;gap:4px;color:#919191;transition:color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95);font-family:Montserrat;font-weight:700;font-size:11px;line-height:18px;letter-spacing:0%;text-align:right}.end-item-hover{position:absolute;display:flex;justify-content:right;align-items:center;gap:4px;width:max-content;opacity:0;color:#919191;transition:color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95)}.selected-end-item{margin-left:auto;font-family:Montserrat;font-weight:400;font-size:11px;line-height:18px;letter-spacing:0%;text-align:right;display:flex;justify-content:right;align-items:center;gap:4px}.group-item{font-family:Montserrat;font-weight:700!important;font-size:11px!important;line-height:18px;letter-spacing:0%;vertical-align:middle;text-transform:uppercase;background-color:#2f2f2f;color:#aaa!important}.group-item:not(:first-child){border-top:1px solid #424242}.group-item .group-icon{margin-left:auto;transform:rotate(180deg);transition:transform .1s cubic-bezier(.46,.03,.51,.95)}.group-item.unfolded{color:#fff!important}.group-item.unfolded .group-icon{transform:rotate(0)}.counter{background-color:#424242;padding:1px 4px;border-radius:60px;font-family:Montserrat;font-weight:600;font-size:11px;min-width:18px;line-height:14px;letter-spacing:0%;text-align:center;vertical-align:middle;color:#ffffffb2;transition:color .1s cubic-bezier(.46,.03,.51,.95)}.password-requirement{padding:6px;background-color:#fffffff2!important;box-shadow:0 0 4px #0006;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);overflow-y:hidden}.password-requirement p{font-family:Montserrat;font-weight:600;font-size:11px;line-height:14px;letter-spacing:0%;vertical-align:middle;color:#6c6c6c;font-style:italic}.password-requirement .icon,.password-requirement .icon-sm{width:14px!important;height:14px!important}.password-requirement .icon.checkmark,.password-requirement .checkmark.icon-sm{color:#ccc}.password-requirement .icon.cancel,.password-requirement .cancel.icon-sm{color:#e66767}.password-requirement ul{list-style-type:none;margin:6px 0 0;padding:0}.password-requirement ul li{color:#424242;font-size:11px;font-style:italic;font-weight:500;line-height:14px;display:flex;gap:4px}.password-requirement ul li.valid{color:#919191!important}.password-requirement ul li:not(:first-child){margin-top:6px}@media(hover:hover){.has-end-item:not(:has(.app-input:disabled)):hover .dropdown-selected{width:calc(100% - 44px)}}.has-end-item:not(:has(.app-input:disabled)):has(.app-input:focus-visible) .dropdown-selected{width:calc(100% - 44px)}.progress-bar{width:24px;height:8px;border-radius:2px;position:relative;transition:background-color .1s cubic-bezier(.46,.03,.51,.95)}.progress-bar:after{content:\"\";position:absolute;top:0;width:var(--progress);height:100%;transition:background-color .1s cubic-bezier(.46,.03,.51,.95)}.progress-bar.low{background-color:#df3c3c33}.progress-bar.low:after{background-color:#e66767}.progress-bar.medium{background-color:#f89b2e33}.progress-bar.medium:after{background-color:#fab15c}.progress-bar.high{background-color:#56b4ac33}.progress-bar.high:after{background-color:#56b4ac}.progress-bar.disable{background-color:#91919133}.progress-bar.disable:after{display:none}.app-input-container:has(.app-input:focus-visible) .selected-end-item .progress-bar{background-color:#fff!important}.full-icon{color:#919191}.fuelcard-number{width:216px}.fuelcard-brand{width:132px}.owner-ein{width:118px}.accident-name,.accident-unit,.accident-dob,.accident-cdl-number,.accident-vin,.accident-plate{flex-shrink:0}.accident-name>p,.accident-unit>p{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.accident-name{width:218px}.accident-unit{width:170px}.accident-dob,.accident-cdl-number,.accident-vin,.accident-plate{text-align:right;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.accident-dob{width:134px}.accident-cdl-number{width:140px}.accident-vin{width:182px}.accident-plate{width:140px}.accident-state{margin-left:auto;justify-content:flex-end;text-align:right}.app-input-label .accident-state{margin-right:22px;white-space:nowrap;transition:margin .1s ease-in-out}.has-multiple-dropdown.has-text{border-top-left-radius:0!important;border-top-right-radius:0!important}.multiple-container{display:flex;flex-wrap:wrap;gap:4px;padding:4px;border-top-left-radius:2px;border-top-right-radius:2px;position:relative;transition:background-color .1s ease-in-out;background-color:#e9effd}.multiple-container.hovered{background-color:#bed0f9}.multiple-container.hovered .multiple-selected{background-color:#e9effd}.multiple-container.focused{background-color:#0b49d1}.multiple-container.focused .multiple-selected{background-color:#3b73ed;color:#fff}.multiple-selected{background-color:#bed0f9;color:#2f2f2f;transition:background-color .1s ease-in-out,color .1s ease-in-out;display:flex;align-items:center;justify-content:space-between;width:100%;cursor:pointer;padding:2px 4px;-webkit-user-select:none;user-select:none;font-family:Montserrat;font-size:14px;font-weight:400;line-height:18px;width:209px;height:22px;border-radius:1px}.multiple-selected p{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}@media(hover:hover){.multiple-selected:hover{color:#2f2f2f!important;background-color:#fff!important}.multiple-selected:hover .multiple-remove-button{opacity:1}}.multiple-selected .multiple-remove-button{opacity:0;background-color:#6692f1;color:#fff;width:14px;height:14px}.multiple-selected .multiple-remove-button .multiple-remove-icon{width:12px;height:12px}.multiple-label{color:#424242;-webkit-user-select:none;user-select:none;pointer-events:none;font-family:Montserrat;font-size:11px;font-style:normal;font-weight:600;position:absolute;top:0;left:6px;transform:translateY(-14px)}.dropdown-group{border-radius:2px;transition:background-color .1s cubic-bezier(.46,.03,.51,.95),max-height .1s cubic-bezier(.46,.03,.51,.95),height .1s ease-in-out;margin-top:4px;max-height:var(--max-height);height:var(--max-height);overflow:hidden}.dropdown-group.no-items{cursor:default;pointer-events:none}.dropdown-group .group-item{outline:none;color:#fff!important;font-weight:400!important;font-size:14px!important;display:flex;transition:font-weight .1s ease-in-out,background-color .1s cubic-bezier(.46,.03,.51,.95),color .1s cubic-bezier(.46,.03,.51,.95);padding-left:6px;padding-right:6px}.dropdown-group .group-item.unfolded .counter{color:#fff}@media(hover:hover){.dropdown-group .group-item:hover .counter{color:#fff}}.dropdown-group .group-item.unfolded{font-weight:700!important}.dropdown-group .group-item .counter{margin-left:auto}.dropdown-group .group-item .group-icon{margin-left:0}.dropdown-group.active{background-color:#424242}@media(hover:hover){.dropdown-group.active .group-item:hover{background-color:#424242}}.dropdown-group.active .dropdown-item{background-color:#424242}@media(hover:hover){.dropdown-group:hover:not(.no-items){background-color:#424242}.dropdown-group:hover:not(.no-items) .group-item:hover{background-color:#424242}.dropdown-group:hover:not(.no-items) .dropdown-item{background-color:#424242}}.dropdown-group.active{padding:4px;padding-top:0!important}.dropdown-group.active .group-item{position:relative!important;padding-left:2px!important;padding-right:2px!important}@media(hover:hover){.dropdown-group .dropdown-item:not(.group-item):hover{background-color:#6c6c6c!important}}.fuel-stop-transaction-store{display:flex;gap:4px}.fuel-stop-transaction-store .fuel-stop-transaction-store-address{font-size:11px;color:#ccc;margin-left:auto}.fuel-stop-transaction-store .favorite-icon{color:#92b1f5;width:14px;height:14px}.fuel-stop-transaction-nostore{padding-left:2px;padding-right:2px}.hide-dropdown{opacity:0;pointer-events:none;transition:opacity .1s cubic-bezier(.46,.03,.51,.95)}.dropdown-menu:not(.hide-dropdown) .dropdown-menu-content{transition:max-height .2s cubic-bezier(.46,.03,.51,.95),opacity .2s cubic-bezier(.46,.03,.51,.95),height .1s ease-in-out;animation:dropdown-menu-opening .2s cubic-bezier(.46,.03,.51,.95)}.dropdown-menu:not(.hide-dropdown).animate-dropdown .dropdown-menu-content{max-height:var(--max-height);height:var(--max-height)}.closing:not(.hide-dropdown) .dropdown-menu-content{animation:dropdown-menu-closing .2s cubic-bezier(.46,.03,.51,.95);opacity:0;max-height:0}@keyframes dropdown-menu-opening{0%{max-height:0;opacity:0}to{max-height:244px;opacity:1}}@keyframes dropdown-menu-closing{0%{max-height:244px;opacity:1}to{max-height:0;opacity:0}}.app-input-container:has(.app-input:focus-visible).has-dropdown .loader.loading,.app-input-container:has(.app-input:focus-visible).has-text .loader.loading{opacity:1!important}.app-input-container:has(.app-input:focus-visible).has-dropdown.has-text .loader{transform:translate(-48px)}.loader{position:absolute;top:4px;right:0;transform:translate(-26px);pointer-events:none;z-index:1000;width:18px;height:18px;display:flex;align-items:center;justify-content:center;transition:opacity .1s ease-in-out,transform .1s ease-in-out;opacity:0}.loader-icon{width:14px;height:14px;animation:spin .8s ease-in-out infinite;transform-origin:center;display:flex;align-items:center;justify-content:center}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.size-22{height:22px}.size-22 .icon,.size-22 .icon-sm{height:14px!important;width:14px!important}.size-22 .bg-icon{height:14px!important;width:14px!important;padding:2px!important}.size-22 .icon-container{height:22px!important;padding-top:2px;padding-bottom:2px;padding-left:4px!important}.size-22 .app-input{padding-top:2px;padding-bottom:2px;padding-left:4px}@media(pointer:coarse){.size-22 .app-input{height:22px}}.size-22 .app-input-label{padding-top:2px;padding-bottom:2px;padding-left:4px}.size-22.has-icon .app-input-label{padding-left:0!important}.size-22 .app-input-icon{height:14px!important;width:14px!important}.size-22.has-text .app-input-label,.size-22:has(.app-input:focus-visible) .app-input-label{transform:translateY(-18px)}.size-22 .loader{top:2px;transform:translate(-22px)!important}.strikethrough .app-input,.strikethrough .dropdown-selected-content{text-decoration:line-through}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.split-option>p{max-width:calc(50% - 2px)}.split-option .dropdown-subitem-end{width:calc(50% - 2px)}.split-option .end-item-base,.split-option .end-item-hover{max-width:100%}.selected-end-item-truncate{max-width:50%}.truck-owner-unit{min-width:0}.truck-owner-unit .dropdown-content{max-width:none;min-width:0}.truck-owner-bullet{flex-shrink:0;color:#919191}\n"], dependencies: [{ kind: "directive", type:
4547
4800
  // Directives
4548
- PasswordDirective, selector: "[appPassword]", inputs: ["appPassword", "visible", "account", "reveal", "hide", "appMask", "max"] }, { kind: "directive", type: NumberFormatDirective, selector: "[appNumberFormat]", inputs: ["appNumberFormat", "max", "isNumberFormattingDisabled", "disableDecimals", "prefix", "clampToMax"] }, { kind: "directive", type: MaskDirective, selector: "[appMask]", inputs: ["appMask", "reveal", "hide"] }, { kind: "directive", type: NumberRangeListDirective, selector: "[appNumberRangeList]", inputs: ["appNumberRangeList"] }, { kind: "directive", type: InfiniteScrollDirective, selector: "[caiInfiniteScroll]", inputs: ["scrollThreshold", "debounceTime"], outputs: ["scrolledToBottom"] }, { kind: "directive", type: IntersectionObserverDirective, selector: "[caiIntersectionObserver]", inputs: ["threshold", "rootMargin"], outputs: ["inView"] }, { kind: "ngmodule", type:
4801
+ PasswordDirective, selector: "[appPassword]", inputs: ["appPassword", "visible", "account", "reveal", "hide", "appMask", "max"] }, { kind: "directive", type: NumberFormatDirective, selector: "[appNumberFormat]", inputs: ["appNumberFormat", "max", "isNumberFormattingDisabled", "disableDecimals", "prefix", "clampToMax", "numberFormat"] }, { kind: "directive", type: MaskDirective, selector: "[appMask]", inputs: ["appMask", "reveal", "hide", "phone", "isInternational", "phoneCountries", "defaultDialCode"] }, { kind: "directive", type: NumberRangeListDirective, selector: "[appNumberRangeList]", inputs: ["appNumberRangeList"] }, { kind: "directive", type: InfiniteScrollDirective, selector: "[caiInfiniteScroll]", inputs: ["scrollThreshold", "debounceTime"], outputs: ["scrolledToBottom"] }, { kind: "directive", type: IntersectionObserverDirective, selector: "[caiIntersectionObserver]", inputs: ["threshold", "rootMargin"], outputs: ["inView"] }, { kind: "ngmodule", type:
4549
4802
  // Bootstrap
4550
4803
  NgbDropdownModule }, { kind: "directive", type: i2.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i2.NgbDropdownAnchor, selector: "[ngbDropdownAnchor]" }, { kind: "directive", type: i2.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type:
4551
4804
  // Components
@@ -4582,7 +4835,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImpo
4582
4835
  // Components
4583
4836
  SvgIconComponent,
4584
4837
  AvatarComponent,
4585
- ], template: "<!-- #region Variables -->\n@let valid =\n ngControl?.valid &&\n (ngControl?.touched || ngControl?.dirty) &&\n !isAdding() &&\n !isDisabled();\n@let invalid =\n ngControl?.invalid &&\n (ngControl?.touched || ngControl?.dirty) &&\n !isAdding() &&\n !isDisabled();\n@let subcontent =\n config().subcontent ||\n (config().dropdown === \"subcontent\" &&\n selectedOption() &&\n cast(selectedOption(), \"dropdownOption\")![config().optionLabel || \"label\"]);\n\n@let name = config().name;\n@let password = config().type === \"password\" || config().type === \"account\";\n\n@let optionLabel = this.config().optionLabel || \"label\";\n@let dropdownType = this.config().dropdown;\n\n@let focusedOptionIndex = keyboardNavigationState().singleIndex;\n@let groupedNavigationState = keyboardNavigationState().groupedNavigationState;\n\n@let tooltipClass =\n config().inverse\n ? \"tooltip input-tooltip tooltip-bg-white-700 tooltip-text-black-500\"\n : \"tooltip input-tooltip\";\n\n<!-- #region Multiple selection -->\n@if (config().dropdown === \"multiple\" && !!multipleSelectedOptions().length) {\n <div\n (pointerdown)=\"focus($event)\"\n (mouseenter)=\"toggleHovered(true)\"\n (mouseleave)=\"toggleHovered(false)\"\n class=\"multiple-container\"\n [class]=\"{\n focused: focused(),\n hovered: hovered(),\n }\"\n >\n <label class=\"multiple-label\">{{ name }}</label>\n\n @for (option of multipleSelectedOptions(); track $index) {\n <div class=\"multiple-selected\">\n <p>{{ cast(option, \"dropdownOption\")![optionLabel || \"label\"] }}</p>\n <button\n type=\"button\"\n class=\"\"\n (pointerdown)=\"handleOption(option, $event)\"\n [tabIndex]=\"-1\"\n ngbTooltip=\"Clear\"\n [placement]=\"'top'\"\n [tooltipClass]=\"tooltipClass\"\n [autoClose]=\"true\"\n #closeTooltip=\"ngbTooltip\"\n [container]=\"'body'\"\n >\n <svg-icon\n name=\"cai-cancel\"\n class=\"multiple-remove-button multiple-remove-icon bg-icon\"\n ></svg-icon>\n </button>\n </div>\n }\n </div>\n}\n<!-- #endregion -->\n\n@let hasFloatingError =\n invalid &&\n (config().errorBehavior === \"floating\" ||\n (!!config().inTable && config().placeholderBehavior !== \"static\"));\n\n<div\n class=\"app-input-container\"\n [class]=\"\n {\n config: config(),\n hideValidation: hideValidation(),\n isPasswordVisible: visible(),\n isInvalid: !!invalid || forceInvalidStyling(),\n isValid: !!valid && !forceInvalidStyling(),\n isHovered: hovered(),\n hasText: hasText(),\n isAdding: isAdding(),\n selectedOption: selectedOption(),\n } | inputClass\n \"\n ngbDropdown\n [autoClose]=\"false\"\n #dropdown=\"ngbDropdown\"\n dropdownClass=\"cai-dropdown\"\n #containerRef\n [ngbTooltip]=\"errorTooltip\"\n [disableTooltip]=\"!hasFloatingError\"\n [container]=\"'body'\"\n [placement]=\"['bottom', 'top']\"\n tooltipClass=\"tooltip tooltip-bg-red-500 input-tooltip \"\n (pointerdown)=\"focus($event)\"\n (mouseenter)=\"dropdownType === 'multiple' && toggleHovered(true)\"\n (mouseleave)=\"dropdownType === 'multiple' && toggleHovered(false)\"\n>\n @if (config().icon && !password && !config().withButtons) {\n <div\n class=\"icon-container\"\n (pointerdown)=\"focus($event)\"\n [class]=\"{\n 'colored-icon': config().iconColor,\n }\"\n [style.--icon-color]=\"config().iconColor || ''\"\n >\n <svg-icon class=\"icon\" [name]=\"config().icon || ''\"></svg-icon>\n @if (!config().noSeparator) {\n <div class=\"separator\"></div>\n }\n </div>\n }\n @if (password) {\n <div class=\"icon-container\" (pointerdown)=\"toggleVisibility($event)\">\n <div\n class=\"password-icons\"\n [ngbTooltip]=\"passwordTooltip\"\n [container]=\"'body'\"\n [tooltipClass]=\"tooltipClass\"\n [autoClose]=\"true\"\n [placement]=\"'top'\"\n [openDelay]=\"600\"\n >\n <svg-icon\n class=\"icon password-key hover-icon\"\n name=\"cai-password-key\"\n ></svg-icon>\n <svg-icon\n class=\"icon password-shown hover-icon\"\n name=\"cai-password-shown\"\n ></svg-icon>\n <svg-icon\n class=\"icon password-hidden hover-icon\"\n name=\"cai-password-hidden\"\n ></svg-icon>\n </div>\n <div class=\"separator\"></div>\n </div>\n }\n\n <input\n class=\"app-input\"\n [tabindex]=\"isDisabled() ? '-1' : '0'\"\n [type]=\"\n password && !isPartiallyMasked()\n ? visible()\n ? 'text'\n : 'password'\n : 'text'\n \"\n [required]=\"config().required\"\n [disabled]=\"isDisabled()\"\n (input)=\"onInput($event)\"\n (blur)=\"dispatchOnBlur()\"\n [id]=\"id()\"\n [attr.aria-label]=\"config().label\"\n [attr.name]=\"\n config().autocomplete ? config().autocomplete : randomAutocomplete()\n \"\n [placeholder]=\"config()?.placeholder || ''\"\n [autocomplete]=\"\n config().autocomplete ? config().autocomplete : randomAutocomplete()\n \"\n #inputRef\n [appPassword]=\"password\"\n [appMask]=\"config().mask || ''\"\n [appNumberRangeList]=\"config().numberRangeList || false\"\n [reveal]=\"config().reveal || 0\"\n [hide]=\"config().hide || 0\"\n [account]=\"config().type === 'account'\"\n [visible]=\"visible()\"\n [appNumberFormat]=\"config().type === 'number'\"\n [isNumberFormattingDisabled]=\"config().isNumberFormattingDisabled || false\"\n [disableDecimals]=\"config().disableDecimals || false\"\n [prefix]=\"config().prefix || ''\"\n [max]=\"config().max\"\n [clampToMax]=\"config().clampToMax || false\"\n (keydown)=\"handleKeydown($event)\"\n (focus)=\"onFocus($event)\"\n />\n @if (\n !(dropdownType === \"multiple\" && !!multipleSelectedOptions().length) &&\n config().placeholderBehavior !== \"hidden\"\n ) {\n <label\n class=\"app-input-label\"\n [class.placeholder-color]=\"this.config().placeholderColor\"\n [style.--placeholder-color]=\"this.config().placeholderColor || ''\"\n (click)=\"focus($event)\"\n >\n <!-- Truck Trailer Driver Dropdown label -->\n @if (dropdownType === \"dispatch\" || dropdownType === \"ftl-dispatch\") {\n <p class=\"truck-item app-input-name\">Truck</p>\n <p class=\"trailer-item\">Trailer</p>\n <p>Driver</p>\n <p class=\"sub-label\">Rate</p>\n }\n <!-- Split Load -->\n @else if (dropdownType === \"split-driver\") {\n <p class=\"app-input-name\">{{ name }}</p>\n <p class=\"sub-label\">Rate</p>\n } @else if (\n dropdownType === \"split-truck\" || dropdownType === \"split-trailer\"\n ) {\n <p class=\"app-input-name\">{{ name }}</p>\n <p class=\"sub-label\">Location</p>\n }\n <!-- Dropdown variants -->\n @else if (dropdownType === \"broker\") {\n <p class=\"app-input-name\">{{ name }}</p>\n <p class=\"sub-label\">Credit</p>\n } @else if (dropdownType === \"contact\") {\n <p class=\"app-input-name\">{{ name }}</p>\n <p class=\"sub-label\">Phone</p>\n } @else if (dropdownType === \"shipper\") {\n <p class=\"app-input-name\">{{ name }}</p>\n <p class=\"sub-label\">Address</p>\n } @else if (dropdownType === \"owner\") {\n <p class=\"owner-ein app-input-name\">EIN</p>\n <p class=\"app-input-name\">Company Name</p>\n } @else if (dropdownType === \"fuelcard\") {\n <p class=\"fuelcard-number app-input-name\">Card No.</p>\n <p class=\"fuelcard-brand app-input-name\">Provider</p>\n <p class=\"app-input-name\">Nickname</p>\n }\n <!-- Accident -->\n @else if (dropdownType === \"accident-driver\") {\n <p class=\"accident-name app-input-name\">{{ name }}</p>\n <p class=\"accident-dob app-input-name\">DOB</p>\n <p class=\"accident-cdl-number app-input-name\">CDL No.</p>\n <p class=\"accident-state app-input-name\">CDL State</p>\n } @else if (\n dropdownType === \"accident-truck\" || dropdownType === \"accident-trailer\"\n ) {\n <p class=\"accident-unit app-input-name\">{{ name }}</p>\n <p class=\"accident-vin app-input-name\">VIN</p>\n <p class=\"accident-plate app-input-name\">Lic. Plate No.</p>\n <p class=\"accident-state app-input-name\">Lic. State</p>\n }\n <!-- Default Dropdown label -->\n @else {\n <span class=\"app-input-name\">{{ name }}</span>\n }\n </label>\n }\n @if (config().type === \"number\" && config().withButtons) {\n <div class=\"number-container\">\n <div class=\"number-buttons\">\n <div class=\"separator\"></div>\n <div\n class=\"plus-button-container\"\n ngbTooltip=\"Add\"\n [tooltipClass]=\"tooltipClass\"\n [container]=\"'body'\"\n [autoClose]=\"true\"\n [openDelay]=\"600\"\n [placement]=\"'top'\"\n (pointerdown)=\"increment($event)\"\n >\n <svg-icon name=\"cai-plus\" class=\"bg-icon plus-icon\"></svg-icon>\n </div>\n <div\n class=\"minus-button-container\"\n ngbTooltip=\"Remove\"\n [placement]=\"'top'\"\n [container]=\"'body'\"\n [tooltipClass]=\"tooltipClass\"\n [autoClose]=\"true\"\n [openDelay]=\"600\"\n (pointerdown)=\"decrement($event)\"\n >\n <svg-icon name=\"cai-minus\" class=\"bg-icon minus-icon\"></svg-icon>\n </div>\n </div>\n </div>\n }\n @if (!config().inTable) {\n @if (!dropdownType) {\n <svg-icon\n name=\"cai-checkmark\"\n class=\"app-input-icon positive-icon\"\n ></svg-icon>\n <svg-icon\n name=\"cai-status-warning\"\n class=\"app-input-icon warning-icon\"\n ></svg-icon>\n }\n }\n\n @if (\n invalid &&\n config().errorBehavior !== \"hidden\" &&\n (ngControl?.errors | errorMessage: config().customErrors)[0] &&\n !(config().inTable && config().placeholderBehavior !== \"static\")\n ) {\n <div class=\"app-input-error\">\n {{ (ngControl?.errors | errorMessage: config().customErrors)[0] }}\n </div>\n }\n\n <!-- Accept button -->\n @if ((config().add && isAdding()) || config().isEdit) {\n <button\n type=\"button\"\n class=\"app-input-icon button-icon accept-button\"\n (pointerdown)=\"addOption()\"\n [tabIndex]=\"-1\"\n ngbTooltip=\"Confirm\"\n [openDelay]=\"600\"\n [placement]=\"'top'\"\n [tooltipClass]=\"tooltipClass\"\n [container]=\"'body'\"\n [autoClose]=\"true\"\n >\n <svg-icon class=\"bg-icon\" name=\"cai-checkmark\"></svg-icon>\n </button>\n }\n\n <!-- Cancel button -->\n <button\n type=\"button\"\n class=\"app-input-icon button-icon cancel-button\"\n (pointerdown)=\"reset($event)\"\n (mouseenter)=\"onClearHover(true)\"\n (mouseleave)=\"onClearHover(false)\"\n [tabIndex]=\"-1\"\n ngbTooltip=\"{{\n hasText()\n | clearTooltip\n : isAdding()\n : config().isEdit || false\n : config().placeholderBehavior || 'dynamic'\n : dropdownType === 'multiple'\n : config().hasResetButton\n : canTooltipBeVisible()\n }}\"\n [openDelay]=\"600\"\n [tooltipClass]=\"tooltipClass\"\n [placement]=\"'top'\"\n [container]=\"'body'\"\n [autoClose]=\"true\"\n #closeTooltip=\"ngbTooltip\"\n >\n @let iconName =\n config().hasResetButton\n ? \"cai-reset\"\n : config().removable\n ? \"cai-delete\"\n : \"cai-cancel\";\n <svg-icon class=\"bg-icon\" [name]=\"iconName\"></svg-icon>\n </button>\n\n <div class=\"dropdown-anchor\" ngbDropdownAnchor></div>\n <!-- Dropdown menu -->\n\n @let hasLoader = isLoading() !== undefined;\n\n @if (hasLoader) {\n <div class=\"loader\" [class.loading]=\"isLoading()\">\n <svg-icon name=\"cai-loader\" class=\"loader-icon\"></svg-icon>\n </div>\n }\n\n @if (dropdownType) {\n @let maxHeight =\n ((dropdownOptions()?.length || (showNoResults() ? 1 : 0)) +\n (config().add ? 1 : 0)) *\n 30 +\n 4;\n\n @let animateDropdown =\n dropdownType !== \"toll\" &&\n dropdownType !== \"fuel-stop-transaction\" &&\n dropdownType !== \"dispatch\" &&\n dropdownType !== \"ftl-dispatch\" &&\n dropdownType !== \"split-driver\" &&\n dropdownType !== \"split-truck\" &&\n dropdownType !== \"split-trailer\";\n\n @let unfilteredHeight =\n dropdownType === \"contact\" || !animateDropdown\n ? 244\n : ((options()?.length || (showNoResults() ? 1 : 0)) +\n (config().add ? 1 : 0)) *\n 30 +\n 4;\n\n <div\n ngbDropdownMenu\n class=\"dropdown-menu input-dropdown-menu\"\n [class]=\"{\n 'hide-dropdown':\n config().dropdownAutocomplete &&\n !dropdownOptions()?.length &&\n !(showNoResults() && value()),\n 'animate-dropdown': animateDropdown,\n 'size-22': config().size === 22,\n 'has-stroke': config().hasStroke,\n }\"\n [class.closing]=\"closing()\"\n [style.--unfiltered-height]=\"\n unfilteredHeight > 244 ? '244px' : unfilteredHeight + 'px'\n \"\n [style.--max-height]=\"maxHeight > 244 ? '244px' : maxHeight + 'px'\"\n [style.width.px]=\"containerWidth()\"\n [tabindex]=\"-1\"\n (pointerdown)=\"onDropdownBackgroundClick($event)\"\n (mousedown)=\"$event.preventDefault()\"\n (pointerup)=\"stopEventPropagation($event)\"\n (mouseup)=\"stopEventPropagation($event)\"\n (click)=\"stopEventPropagation($event)\"\n >\n <div\n class=\"dropdown-menu-content\"\n [tabindex]=\"-1\"\n caiInfiniteScroll\n [scrollThreshold]=\"50\"\n (scrolledToBottom)=\"onDropdownScrolledToBottom()\"\n >\n @if (config().add) {\n <button\n class=\"dropdown-item add-new\"\n [class.focused]=\"\n focusedOptionIndex === -1 ||\n groupedNavigationState?.groupIndex === -1\n \"\n (click)=\"handleAddingOption($event)\"\n >\n <p>ADD NEW</p>\n <svg-icon name=\"cai-plus\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n <ng-container *ngTemplateOutlet=\"dropdownMenuRef\"></ng-container>\n </div>\n </div>\n\n @if (!config().dropdownAutocomplete) {\n <div\n class=\"dropdown-icon-container\"\n [class.open]=\"dropdown.isOpen() && !closing()\"\n (pointerdown)=\"onDropdownIconClick($event)\"\n >\n <svg-icon\n name=\"cai-arrow-secondary-down\"\n class=\"dropdown-icon icon\"\n ></svg-icon>\n </div>\n }\n @let specialDropdown =\n dropdownType === \"dispatch\" ||\n dropdownType === \"ftl-dispatch\" ||\n dropdownType === \"broker\" ||\n dropdownType === \"contact\" ||\n dropdownType === \"shipper\" ||\n dropdownType === \"bank\" ||\n dropdownType === \"dispatcher\" ||\n dropdownType === \"driver-owner\" ||\n dropdownType === \"truck-owner\" ||\n dropdownType === \"truck\" ||\n dropdownType === \"trailer\" ||\n dropdownType === \"hazardous\" ||\n dropdownType === \"state\" ||\n dropdownType === \"owner\" ||\n dropdownType === \"fuelcard\" ||\n dropdownType === \"pm\" ||\n dropdownType === \"color\" ||\n dropdownType === \"make\" ||\n dropdownType === \"toll\" ||\n dropdownType === \"provider\" ||\n dropdownType === \"split-driver\" ||\n dropdownType === \"split-truck\" ||\n dropdownType === \"split-trailer\" ||\n dropdownType === \"accident-driver\" ||\n dropdownType === \"accident-truck\" ||\n dropdownType === \"accident-trailer\";\n <!-- Placeholder -->\n @if (specialDropdown) {\n <ng-container *ngTemplateOutlet=\"selectedOptionRef\"></ng-container>\n } @else if (\n (config().add || config().search) &&\n !inputRef.value &&\n !this.isAdding() &&\n dropdownType !== \"subcontent\"\n ) {\n <div class=\"dropdown-selected\">\n @if (config().placeholderBehavior === \"static\") {\n <p class=\"selected-label-hidden\">\n {{ name + (config().required ? \" *\" : \"\") }}\n </p>\n <p class=\"selected-text\">\n {{\n selectedOption() &&\n cast(selectedOption(), \"dropdownOption\")![\n optionLabel || \"label\"\n ]\n }}\n </p>\n } @else {\n @if (\n selectedOption() &&\n cast(selectedOption(), \"dropdownOption\")![\n optionLabel || \"label\"\n ] === \"Hazardous\"\n ) {\n <svg-icon name=\"cai-violation-hazmat\" class=\"icon\"></svg-icon>\n <p class=\"dropdown-selected-content\">\n {{\n selectedOption() &&\n cast(selectedOption(), \"dropdownOption\")![\n optionLabel || \"label\"\n ]\n }}\n </p>\n } @else {\n <p class=\"dropdown-selected-content\">\n {{\n selectedOption() &&\n cast(selectedOption(), \"dropdownOption\")![\n optionLabel || \"label\"\n ]\n }}\n </p>\n }\n }\n </div>\n }\n } @else if (config().isEdit && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <p class=\"dropdown-selected-content\">{{ name }}</p>\n </div>\n }\n @if (config().passwordRequirements) {\n <div\n class=\"dropdown-menu password-requirement\"\n ngbDropdownMenu\n [style.width.px]=\"containerWidth()\"\n [class.closing]=\"closing()\"\n (pointerup)=\"stopEventPropagation($event)\"\n (mouseup)=\"stopEventPropagation($event)\"\n (click)=\"stopEventPropagation($event)\"\n >\n <ng-container *ngTemplateOutlet=\"passwordRequirementsRef\"></ng-container>\n </div>\n }\n @if (subcontent) {\n <p class=\"subcontent\">\n @if (!(config().alignment === \"right\")) {\n <span class=\"subcontent-hide\"\n >{{\n config().search\n ? selectedOption() &&\n cast(selectedOption(), \"dropdownOption\")![\n optionLabel || \"label\"\n ]\n : inputRef.value\n }}\n </span>\n }\n {{ subcontent }}\n </p>\n }\n</div>\n\n<!-- #region Templates -->\n\n<!-- #region Password requirements -->\n<ng-template #passwordRequirementsRef>\n @let isMinLengthValid =\n !this.ngControl?.errors?.[\"minlength\"] && this.value();\n @let isHasNumberValid =\n !this.ngControl?.errors?.[\"hasNumber\"] && this.value();\n @let isHasSymbolValid =\n !this.ngControl?.errors?.[\"hasSymbol\"] && this.value();\n @let isHasUppercaseValid =\n !this.ngControl?.errors?.[\"hasUppercase\"] && this.value();\n\n <p>Strong Password Requirement</p>\n <ul>\n <li [class.valid]=\"isMinLengthValid\">\n <svg-icon\n [name]=\"isMinLengthValid ? 'cai-checkmark' : 'cai-cancel'\"\n [class]=\"isMinLengthValid ? 'checkmark' : 'cancel'\"\n class=\"icon\"\n ></svg-icon\n ><span>Minimum 8 characters</span>\n </li>\n <li [class.valid]=\"isHasNumberValid\">\n <svg-icon\n class=\"icon\"\n [name]=\"isHasNumberValid ? 'cai-checkmark' : 'cai-cancel'\"\n [class]=\"isHasNumberValid ? 'checkmark' : 'cancel'\"\n ></svg-icon\n ><span>One number</span>\n </li>\n <li [class.valid]=\"isHasSymbolValid\">\n <svg-icon\n class=\"icon\"\n [name]=\"isHasSymbolValid ? 'cai-checkmark' : 'cai-cancel'\"\n [class]=\"isHasSymbolValid ? 'checkmark' : 'cancel'\"\n ></svg-icon\n ><span>One symbol</span>\n </li>\n <li [class.valid]=\"isHasUppercaseValid\">\n <svg-icon\n class=\"icon\"\n [name]=\"isHasUppercaseValid ? 'cai-checkmark' : 'cai-cancel'\"\n [class]=\"isHasUppercaseValid ? 'checkmark' : 'cancel'\"\n ></svg-icon\n ><span>One upper-case letter</span>\n </li>\n </ul>\n</ng-template>\n<!-- #endregion -->\n@let search = config().search;\n\n<ng-template #dropdownMenuRef>\n @switch (dropdownType) {\n @case (\"dispatch\") {\n <ng-container *ngTemplateOutlet=\"dispatchesRef\"></ng-container>\n }\n @case (\"ftl-dispatch\") {\n <ng-container *ngTemplateOutlet=\"ftlDispatchRef\"></ng-container>\n }\n @case (\"broker\") {\n <ng-container *ngTemplateOutlet=\"brokerRef\"></ng-container>\n }\n @case (\"contact\") {\n <ng-container *ngTemplateOutlet=\"contactRef\"></ng-container>\n }\n @case (\"shipper\") {\n <ng-container *ngTemplateOutlet=\"shipperRef\"></ng-container>\n }\n @case (\"bank\") {\n <ng-container *ngTemplateOutlet=\"bankRef\"></ng-container>\n }\n @case (\"dispatcher\") {\n <ng-container *ngTemplateOutlet=\"dispatcherRef\"></ng-container>\n }\n @case (\"driver-owner\") {\n <ng-container *ngTemplateOutlet=\"driverOwnerRef\"></ng-container>\n }\n @case (\"truck-owner\") {\n <ng-container *ngTemplateOutlet=\"truckOwnerRef\"></ng-container>\n }\n @case (\"trailer\") {\n <ng-container *ngTemplateOutlet=\"trailerRef\"></ng-container>\n }\n @case (\"truck\") {\n <ng-container *ngTemplateOutlet=\"truckRef\"></ng-container>\n }\n @case (\"hazardous\") {\n <ng-container *ngTemplateOutlet=\"hazardousRef\"></ng-container>\n }\n @case (\"state\") {\n <ng-container *ngTemplateOutlet=\"stateRef\"></ng-container>\n }\n @case (\"owner\") {\n <ng-container *ngTemplateOutlet=\"ownerRef\"></ng-container>\n }\n @case (\"fuelcard\") {\n <ng-container *ngTemplateOutlet=\"fuelcardRef\"></ng-container>\n }\n @case (\"pm\") {\n <ng-container *ngTemplateOutlet=\"pmRef\"></ng-container>\n }\n @case (\"multiple\") {\n <ng-container *ngTemplateOutlet=\"multipleRef\"></ng-container>\n }\n @case (\"make\") {\n <ng-container *ngTemplateOutlet=\"makeRef\"></ng-container>\n }\n @case (\"toll\") {\n <ng-container *ngTemplateOutlet=\"tollRef\"></ng-container>\n }\n @case (\"color\") {\n <ng-container *ngTemplateOutlet=\"colorRef\"></ng-container>\n }\n @case (\"fuel-stop-transaction\") {\n <ng-container *ngTemplateOutlet=\"fuelStopTransactionRef\"></ng-container>\n }\n @case (\"provider\") {\n <ng-container *ngTemplateOutlet=\"providerRef\"></ng-container>\n }\n @case (\"split-driver\") {\n <ng-container *ngTemplateOutlet=\"splitDriverRef\"></ng-container>\n }\n @case (\"split-truck\") {\n <ng-container *ngTemplateOutlet=\"splitTruckRef\"></ng-container>\n }\n @case (\"split-trailer\") {\n <ng-container *ngTemplateOutlet=\"splitTrailerRef\"></ng-container>\n }\n @case (\"accident-driver\") {\n <ng-container *ngTemplateOutlet=\"accidentDriverRef\"></ng-container>\n }\n @case (\"accident-truck\") {\n <ng-container *ngTemplateOutlet=\"accidentTruckRef\"></ng-container>\n }\n @case (\"accident-trailer\") {\n <ng-container *ngTemplateOutlet=\"accidentTrailerRef\"></ng-container>\n }\n @case (\"subcontent\") {\n <ng-container *ngTemplateOutlet=\"dropdownOptionsRef\"></ng-container>\n }\n @default {\n <ng-container *ngTemplateOutlet=\"dropdownOptionsRef\"></ng-container>\n }\n }\n</ng-template>\n\n<ng-template #selectedOptionRef>\n @switch (dropdownType) {\n @case (\"dispatch\") {\n <ng-container *ngTemplateOutlet=\"selectedDispatchRef\"></ng-container>\n }\n @case (\"ftl-dispatch\") {\n <ng-container *ngTemplateOutlet=\"selectedDispatchRef\"></ng-container>\n }\n @case (\"broker\") {\n <ng-container *ngTemplateOutlet=\"selectedBrokerRef\"></ng-container>\n }\n @case (\"contact\") {\n <ng-container *ngTemplateOutlet=\"selectedContactRef\"></ng-container>\n }\n @case (\"shipper\") {\n <ng-container *ngTemplateOutlet=\"selectedShipperRef\"></ng-container>\n }\n @case (\"bank\") {\n <ng-container *ngTemplateOutlet=\"selectedBankRef\"></ng-container>\n }\n @case (\"dispatcher\") {\n <ng-container *ngTemplateOutlet=\"selectedDispatcherRef\"></ng-container>\n }\n @case (\"driver-owner\") {\n <ng-container *ngTemplateOutlet=\"selectedDriverOwnerRef\"></ng-container>\n }\n @case (\"truck-owner\") {\n <ng-container *ngTemplateOutlet=\"selectedTruckOwnerRef\"></ng-container>\n }\n @case (\"trailer\") {\n <ng-container *ngTemplateOutlet=\"selectedTrailerRef\"></ng-container>\n }\n @case (\"truck\") {\n <ng-container *ngTemplateOutlet=\"selectedTruckRef\"></ng-container>\n }\n @case (\"hazardous\") {\n <ng-container *ngTemplateOutlet=\"selectedHazardousRef\"></ng-container>\n }\n @case (\"state\") {\n <ng-container *ngTemplateOutlet=\"selectedStateRef\"></ng-container>\n }\n @case (\"owner\") {\n <ng-container *ngTemplateOutlet=\"selectedOwnerRef\"></ng-container>\n }\n @case (\"fuelcard\") {\n <ng-container *ngTemplateOutlet=\"selectedFuelcardRef\"></ng-container>\n }\n @case (\"pm\") {\n <ng-container *ngTemplateOutlet=\"selectedPmRef\"></ng-container>\n }\n @case (\"make\") {\n <ng-container *ngTemplateOutlet=\"selectedMakeRef\"></ng-container>\n }\n @case (\"toll\") {\n <ng-container *ngTemplateOutlet=\"selectedTollRef\"></ng-container>\n }\n @case (\"color\") {\n <ng-container *ngTemplateOutlet=\"selectedColorRef\"></ng-container>\n }\n @case (\"provider\") {\n <ng-container *ngTemplateOutlet=\"selectedProviderRef\"></ng-container>\n }\n @case (\"split-driver\") {\n <ng-container *ngTemplateOutlet=\"selectedSplitDriverRef\"></ng-container>\n }\n @case (\"split-truck\") {\n <ng-container *ngTemplateOutlet=\"selectedSplitTruckRef\"></ng-container>\n }\n @case (\"split-trailer\") {\n <ng-container *ngTemplateOutlet=\"selectedSplitTrailerRef\"></ng-container>\n }\n @case (\"accident-driver\") {\n <ng-container\n *ngTemplateOutlet=\"selectedAccidentDriverRef\"\n ></ng-container>\n }\n @case (\"accident-truck\") {\n <ng-container *ngTemplateOutlet=\"selectedAccidentTruckRef\"></ng-container>\n }\n @case (\"accident-trailer\") {\n <ng-container\n *ngTemplateOutlet=\"selectedAccidentTrailerRef\"\n ></ng-container>\n }\n }\n</ng-template>\n\n<!-- Standard dropdown -->\n<ng-template #dropdownOptionsRef>\n @if (dropdownOptions().length) {\n @for (option of dropdownOptions(); track $index; let index = $index) {\n @let dropdownOption = cast(option, \"dropdownOption\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ dropdownOption.id }}\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'dropdownOption')?.id === dropdownOption.id,\n focused: focusedOptionIndex === index,\n }\"\n (click)=\"handleOption(dropdownOption, $event)\"\n >\n @if (dropdownOption[optionLabel] === \"Hazardous\") {\n <svg-icon name=\"cai-violation-hazmat\" class=\"icon\"></svg-icon>\n }\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (dropdownOption[optionLabel] | highlightSearch: value())\n : dropdownOption[optionLabel]\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #multipleRef>\n @if (dropdownOptions().length) {\n @for (option of dropdownOptions(); track $index; let index = $index) {\n @let dropdownOption = cast(option, \"dropdownOption\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ dropdownOption.id }}\"\n (click)=\"handleOption(dropdownOption, $event)\"\n [class]=\"{\n selected: isSelectedOption(dropdownOption),\n focused: focusedOptionIndex === index,\n }\"\n >\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (dropdownOption[optionLabel] | highlightSearch: value())\n : dropdownOption[optionLabel]\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #bankRef>\n @if (dropdownOptions().length) {\n @for (bank of dropdownOptions(); track $index; let index = $index) {\n @let bankOption = cast(bank, \"bank\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ bankOption.id }}\"\n (click)=\"handleOption(bankOption, $event)\"\n [class]=\"{\n selected: cast(selectedOption(), 'bank')?.id === bankOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n @if (bankOption.logoName) {\n <svg-icon\n class=\"full-icon\"\n [name]=\"bankOption.logoName.slice(0, -4)\"\n ></svg-icon>\n } @else {\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (bankOption.name || '' | highlightSearch: value())\n : bankOption.name\n \"\n ></p>\n }\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #makeRef>\n @if (dropdownOptions().length) {\n @for (make of dropdownOptions(); track $index; let index = $index) {\n @let makeOption = cast(make, \"make\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ makeOption.id }}\"\n (click)=\"handleOption(makeOption, $event)\"\n [class]=\"{\n selected: cast(selectedOption(), 'make')?.id === makeOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n @if (makeOption.logoName) {\n <svg-icon\n class=\"full-icon\"\n [name]=\"makeOption.logoName.slice(0, -4)\"\n ></svg-icon>\n } @else {\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (makeOption.name || '' | highlightSearch: value())\n : makeOption.name\n \"\n ></p>\n }\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Broker -->\n<ng-template #brokerRef>\n @if (dropdownOptions().length) {\n @for (broker of dropdownOptions(); track $index; let index = $index) {\n @let brokerOption = cast(broker, \"broker\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"broker-{{ brokerOption.id }}\"\n (click)=\"\n !(brokerOption.dnu || brokerOption.ban) &&\n handleOption(brokerOption, $event)\n \"\n [class]=\"{\n selected: cast(selectedOption(), 'broker')?.id === brokerOption.id,\n focused: focusedOptionIndex === index,\n banned: brokerOption.dnu || brokerOption.ban,\n dnu: brokerOption.dnu,\n }\"\n >\n @if (brokerOption?.dnu || brokerOption?.ban) {\n <svg-icon name=\"cai-minus\" class=\"round-icon\"></svg-icon>\n } @else if (brokerOption?.fraudCheck) {\n <svg-icon\n name=\"cai-status-warning-lite\"\n class=\"fraud-icon\"\n ></svg-icon>\n }\n <p\n class=\"dropdown-content\"\n [innerHTML]=\"\n search\n ? (brokerOption.businessName || '' | highlightSearch: value())\n : brokerOption.businessName\n \"\n ></p>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-base\">\n @if (!brokerOption.creditLimit) {\n <p>Unlimited</p>\n } @else {\n <p>{{ brokerOption.availableCredit || 0 | currency }}</p>\n <div\n class=\"progress-bar\"\n [style.--progress]=\"\n (\n brokerOption\n | brokerProgress: brokerOption.dnu || brokerOption.ban\n ).activePercentageOfPaid + '%'\n \"\n [class]=\"\n (\n brokerOption\n | brokerProgress: brokerOption.dnu || brokerOption.ban\n ).status\n \"\n ></div>\n }\n </div>\n <div class=\"end-item-hover\">\n <p>\n {{ brokerOption.loadsCount }} |\n {{ brokerOption.availableCredit || 0 | currency }}\n </p>\n <svg-icon name=\"cai-load\" class=\"icon\"></svg-icon>\n </div>\n </div>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Contact dropdown -->\n<ng-template #contactRef>\n @if (dropdownOptions().length) {\n @for (contact of dropdownOptions(); track $index; let index = $index) {\n @let contactOption = cast(contact, \"contact\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item split-option\"\n id=\"contact-{{ contact.id }}\"\n (click)=\"handleOption(contact, $event)\"\n [class]=\"{\n selected: cast(selectedOption(), 'contact')?.id === contact.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <p\n class=\"text-truncate\"\n [innerHTML]=\"\n search\n ? (contactOption.contactName || '' | highlightSearch: value())\n : contactOption.contactName\n \"\n ></p>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-base\">\n <p class=\"text-truncate\">{{ contactOption.department?.name }}</p>\n </div>\n <div class=\"end-item-hover\">\n <p class=\"text-truncate\">\n {{ contactOption.phone }}\n {{\n contactOption.extensionPhone\n ? \"x\" + contactOption.extensionPhone\n : \"\"\n }}\n </p>\n </div>\n </div>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Owner dropdown -->\n<ng-template #ownerRef>\n @if (dropdownOptions().length) {\n @for (owner of dropdownOptions(); track $index; let index = $index) {\n @let ownerOption = cast(owner, \"owner\");\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"owner-{{ ownerOption?.id }}\"\n (click)=\"handleOption(ownerOption!, $event)\"\n [class]=\"{\n selected: cast(selectedOption(), 'owner')?.id === ownerOption?.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <p\n class=\"owner-ein\"\n [innerHTML]=\"\n search\n ? (ownerOption?.ein || '' | highlightSearch: value())\n : ownerOption?.ein\n \"\n ></p>\n <p\n [innerHTML]=\"\n search\n ? (ownerOption?.name || '' | highlightSearch: value())\n : ownerOption?.name\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Fuelcard dropdown -->\n<ng-template #fuelcardRef>\n @if (dropdownOptions().length) {\n @for (fuelcard of dropdownOptions(); track $index; let index = $index) {\n @let fuelcardOption = cast(fuelcard, \"fuelCard\");\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"fuelcard-{{ fuelcardOption?.id }}\"\n (click)=\"handleOption(fuelcardOption!, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'fuelCard')?.id === fuelcardOption?.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <p\n class=\"fuelcard-number\"\n [innerHTML]=\"\n search\n ? (fuelcardOption?.number || '' | highlightSearch: value())\n : fuelcardOption?.number\n \"\n ></p>\n <p\n class=\"fuelcard-brand\"\n [innerHTML]=\"\n search\n ? (fuelcardOption?.brand || '' | highlightSearch: value())\n : fuelcardOption?.brand\n \"\n ></p>\n <p\n [innerHTML]=\"\n search\n ? (fuelcardOption?.account || '' | highlightSearch: value())\n : fuelcardOption?.account\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Accident driver dropdown -->\n<ng-template #accidentDriverRef>\n @if (dropdownOptions().length) {\n @for (driver of dropdownOptions(); track $index; let index = $index) {\n @let driverOption = cast(driver, \"accidentDriver\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"accident-driver-{{ driverOption.id }}\"\n (click)=\"handleOption(driverOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'accidentDriver')?.id === driverOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <div class=\"dropdown-subitem accident-name\">\n <cai-avatar\n [driver]=\"driverOption\"\n [size]=\"18\"\n [inverse]=\"true\"\n [hover]=\"false\"\n ></cai-avatar>\n <p\n [innerHTML]=\"\n driverOption.firstName + ' ' + driverOption.lastName\n | highlightSearch: value()\n \"\n ></p>\n </div>\n <p class=\"accident-dob\">\n {{ driverOption.dateOfBirth | date: \"MM/dd/yy\" }}\n </p>\n <p\n class=\"accident-cdl-number\"\n [innerHTML]=\"driverOption.cdlNumber || '' | highlightSearch: value()\"\n ></p>\n <div class=\"dropdown-subitem accident-state\">\n <p\n [innerHTML]=\"\n driverOption.cdlState?.stateShortName || ''\n | highlightSearch: value()\n \"\n ></p>\n @if (\n driverOption.cdlState?.countryType?.name &&\n driverOption.cdlState?.stateShortName\n ) {\n <svg-icon\n class=\"icon\"\n [name]=\"\n 'cai-' +\n driverOption.cdlState?.countryType?.name?.toLowerCase() +\n '-' +\n driverOption.cdlState?.stateShortName?.toLowerCase()\n \"\n ></svg-icon>\n }\n </div>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Accident truck dropdown -->\n<ng-template #accidentTruckRef>\n @if (dropdownOptions().length) {\n @for (truck of dropdownOptions(); track $index; let index = $index) {\n @let truckOption = cast(truck, \"accidentTruck\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"accident-truck-{{ truckOption.id }}\"\n (click)=\"handleOption(truckOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'accidentTruck')?.id === truckOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <div class=\"dropdown-subitem accident-unit\">\n @if (truckOption.truckType?.logoName) {\n <svg-icon\n class=\"truck-icon truck-trailer-icon-colors\"\n [class]=\"truckOption.truckType!.logoName.slice(0, -4)\"\n [name]=\"truckOption.truckType!.logoName.slice(0, -4)\"\n ></svg-icon>\n }\n <p\n [innerHTML]=\"truckOption.truckNumber | highlightSearch: value()\"\n ></p>\n </div>\n <p\n class=\"accident-vin\"\n [innerHTML]=\"truckOption.vin || '' | highlightSearch: value()\"\n ></p>\n <p\n class=\"accident-plate\"\n [innerHTML]=\"\n truckOption.licensePlateNumber || '' | highlightSearch: value()\n \"\n ></p>\n <div class=\"dropdown-subitem accident-state\">\n <p\n [innerHTML]=\"\n truckOption.licenseState?.stateShortName || ''\n | highlightSearch: value()\n \"\n ></p>\n @if (\n truckOption.licenseState?.countryType?.name &&\n truckOption.licenseState?.stateShortName\n ) {\n <svg-icon\n class=\"icon\"\n [name]=\"\n 'cai-' +\n truckOption.licenseState?.countryType?.name?.toLowerCase() +\n '-' +\n truckOption.licenseState?.stateShortName?.toLowerCase()\n \"\n ></svg-icon>\n }\n </div>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Accident trailer dropdown -->\n<ng-template #accidentTrailerRef>\n @if (dropdownOptions().length) {\n @for (trailer of dropdownOptions(); track $index; let index = $index) {\n @let trailerOption = cast(trailer, \"accidentTrailer\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"accident-trailer-{{ trailerOption.id }}\"\n (click)=\"handleOption(trailerOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'accidentTrailer')?.id === trailerOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <div class=\"dropdown-subitem accident-unit\">\n @if (trailerOption.trailerType?.logoName) {\n <svg-icon\n class=\"trailer-icon truck-trailer-icon-colors\"\n [class]=\"trailerOption.trailerType!.logoName.slice(0, -4)\"\n [name]=\"trailerOption.trailerType!.logoName.slice(0, -4)\"\n ></svg-icon>\n }\n <p\n [innerHTML]=\"trailerOption.trailerNumber | highlightSearch: value()\"\n ></p>\n </div>\n <p\n class=\"accident-vin\"\n [innerHTML]=\"trailerOption.vin || '' | highlightSearch: value()\"\n ></p>\n <p\n class=\"accident-plate\"\n [innerHTML]=\"\n trailerOption.licensePlateNumber || '' | highlightSearch: value()\n \"\n ></p>\n <div class=\"dropdown-subitem accident-state\">\n <p\n [innerHTML]=\"\n trailerOption.licenseState?.stateShortName || ''\n | highlightSearch: value()\n \"\n ></p>\n @if (\n trailerOption.licenseState?.countryType?.name &&\n trailerOption.licenseState?.stateShortName\n ) {\n <svg-icon\n class=\"icon\"\n [name]=\"\n 'cai-' +\n trailerOption.licenseState?.countryType?.name?.toLowerCase() +\n '-' +\n trailerOption.licenseState?.stateShortName?.toLowerCase()\n \"\n ></svg-icon>\n }\n </div>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Shipper dropdown -->\n<ng-template #shipperRef>\n @if (dropdownOptions().length) {\n @for (shipper of dropdownOptions(); track $index; let index = $index) {\n @let shipperOption = cast(shipper, \"shipper\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item split-option\"\n id=\"shipper-{{ shipperOption.id }}\"\n (click)=\"handleOption(shipperOption, $event)\"\n [class]=\"{\n selected: cast(selectedOption(), 'shipper')?.id === shipperOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <p\n class=\"text-truncate\"\n [innerHTML]=\"\n search\n ? (shipperOption.businessName || '' | highlightSearch: value())\n : shipperOption.businessName\n \"\n ></p>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-base\">\n <p\n class=\"text-truncate\"\n [innerHTML]=\"\n search\n ? (shipperOption.address?.address || ''\n | highlightSearch: value())\n : shipperOption.address?.address\n \"\n ></p>\n </div>\n <div class=\"end-item-hover\">\n <p>\n {{ shipperOption.pickupCount }} Pickup |\n {{ shipperOption.deliveryCount }} Delivery\n </p>\n <svg-icon name=\"cai-load\" class=\"icon\"></svg-icon>\n </div>\n </div>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Dispatch dropdown -->\n<ng-template #dispatchesRef>\n @if (dropdownOptions().length) {\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n (click)=\"resetSelection()\"\n [class]=\"{\n selected: !selectedOption(),\n }\"\n >\n <p>Unassigned</p>\n <div class=\"unassigned-ltl\">\n <p>{{ unassignedCount() }}</p>\n <svg-icon name=\"cai-ltl-single\" class=\"icon-sm\"></svg-icon>\n </div>\n </button>\n @for (\n dispatchBoard of dropdownOptions();\n track dispatchBoard.id;\n let groupIndex = $index\n ) {\n <!-- Temporary variant since BE doesn't support boards -->\n @let dispatchBoardOption = cast(dispatchBoard, \"dispatchBoard\")!;\n\n @let isNoBoardsVariant =\n dispatchBoardOption.dispatcher === \"NOBOARDSVARIANT\";\n @if (dispatchBoardOption.count > 0) {\n @if (!isNoBoardsVariant) {\n @let isGroupFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === 0;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item\"\n (click)=\"fold(dispatchBoardOption.id, $event)\"\n [class]=\"{\n unfolded: dispatchBoardOption.dispatches?.length || 0 > 0,\n focused: isGroupFocused,\n }\"\n >\n <p>\n {{\n dispatchBoardOption.teamBoard\n ? \"Team Board\"\n : dispatchBoardOption.dispatcher\n }}\n </p>\n <p class=\"counter\">{{ dispatchBoardOption.count }}</p>\n <svg-icon\n name=\"cai-arrow-primary-up\"\n class=\"group-icon icon\"\n ></svg-icon>\n </button>\n }\n @if (\n dispatchBoardOption.dispatches &&\n dispatchBoardOption.dispatches.length > 0\n ) {\n @for (\n dispatch of dispatchBoardOption.dispatches;\n track dispatch.id;\n let optionIndex = $index\n ) {\n @let isOptionFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === optionIndex + 1;\n <!-- +1 since optionIndex is 0 for the group item header -->\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n (click)=\"handleOption(dispatch, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'dispatch')?.id === dispatch.id,\n focused: isOptionFocused,\n }\"\n >\n <div class=\"dropdown-subitem truck-item\">\n <svg-icon\n class=\"truck-icon truck-trailer-icon-colors\"\n [class]=\"dispatch.truck.truckType.logoName.slice(0, -4)\"\n [name]=\"dispatch.truck.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p\n class=\"truck-number\"\n [innerHTML]=\"\n dispatch.truck.truckNumber | highlightSearch: value()\n \"\n ></p>\n </div>\n <div class=\"dropdown-subitem trailer-item\">\n @if (dispatch.trailer) {\n <svg-icon\n class=\"trailer-icon truck-trailer-icon-colors\"\n [class]=\"dispatch.trailer.trailerType.logoName.slice(0, -4)\"\n [name]=\"dispatch.trailer.trailerType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p\n class=\"trailer-number\"\n [innerHTML]=\"\n dispatch.trailer.trailerNumber | highlightSearch: value()\n \"\n ></p>\n }\n </div>\n <div class=\"dropdown-subitem\">\n @if (dispatch.coDriver) {\n <svg-icon class=\"dispatch-icon\" name=\"cai-people\"></svg-icon>\n <p\n class=\"driver-name\"\n [innerHTML]=\"\n dispatch.driver.firstName +\n ' & ' +\n dispatch.coDriver.firstName | highlightSearch: value()\n \"\n ></p>\n } @else {\n <cai-avatar\n [driver]=\"dispatch.driver\"\n [size]=\"18\"\n [inverse]=\"true\"\n [hover]=\"false\"\n ></cai-avatar>\n <p\n class=\"driver-name\"\n [innerHTML]=\"\n dispatch.driver.firstName + ' ' + dispatch.driver.lastName\n | highlightSearch: value()\n \"\n ></p>\n }\n </div>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-hover\">\n <p>{{ dispatch.payType }}</p>\n <svg-icon name=\"cai-driver\" class=\"icon-sm\"></svg-icon>\n </div>\n <div class=\"end-item-base dispatch-ltl\">\n <p>{{ dispatch.numberOfSingleLtlLoads }}</p>\n <svg-icon name=\"cai-ltl-single\" class=\"icon-sm\"></svg-icon>\n </div>\n </div>\n </button>\n }\n } @else if (isNoBoardsVariant) {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n }\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- ftl dispatch dropdown -->\n<ng-template #ftlDispatchRef>\n @if (dropdownOptions().length) {\n @for (\n dispatchBoard of dropdownOptions();\n track dispatchBoard.id;\n let groupIndex = $index\n ) {\n @let dispatchBoardOption = cast(dispatchBoard, \"dispatchBoard\")!;\n @let isGroupFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === 0;\n @let isNoBoardsVariant =\n dispatchBoardOption.dispatcher === \"NOBOARDSVARIANT\";\n @if (dispatchBoardOption.count > 0) {\n @if (!isNoBoardsVariant) {\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item\"\n (click)=\"fold(dispatchBoardOption.id, $event)\"\n [class]=\"{\n unfolded: dispatchBoardOption.dispatches?.length || 0 > 0,\n focused: isGroupFocused,\n }\"\n >\n <p>\n {{\n dispatchBoardOption.teamBoard\n ? \"Team Board\"\n : dispatchBoardOption.dispatcher\n }}\n </p>\n <p class=\"counter\">{{ dispatchBoardOption.count }}</p>\n <svg-icon\n name=\"cai-arrow-primary-up\"\n class=\"group-icon icon\"\n ></svg-icon>\n </button>\n }\n @if (\n dispatchBoardOption.dispatches &&\n dispatchBoardOption.dispatches.length > 0\n ) {\n @for (\n dispatch of dispatchBoardOption.dispatches;\n track dispatch.id;\n let optionIndex = $index\n ) {\n @let isOptionFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === optionIndex + 1;\n <!-- +1 since optionIndex is 0 for the group item header -->\n <button\n class=\"dropdown-item\"\n (click)=\"handleOption(dispatch, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'dispatch')?.id === dispatch.id,\n focused: isOptionFocused,\n }\"\n >\n <div class=\"dropdown-subitem truck-item\">\n <svg-icon\n class=\"truck-icon truck-trailer-icon-colors\"\n [class]=\"dispatch.truck.truckType.logoName.slice(0, -4)\"\n [name]=\"dispatch.truck.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p\n class=\"truck-number\"\n [innerHTML]=\"\n dispatch.truck.truckNumber | highlightSearch: value()\n \"\n ></p>\n </div>\n <div class=\"dropdown-subitem trailer-item\">\n @if (dispatch.trailer) {\n <svg-icon\n class=\"trailer-icon truck-trailer-icon-colors\"\n [class]=\"dispatch.trailer.trailerType.logoName.slice(0, -4)\"\n [name]=\"dispatch.trailer.trailerType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p\n class=\"trailer-number\"\n [innerHTML]=\"\n dispatch.trailer.trailerNumber | highlightSearch: value()\n \"\n ></p>\n }\n </div>\n <div class=\"dropdown-subitem\">\n @if (dispatch.coDriver) {\n <svg-icon class=\"dispatch-icon\" name=\"cai-people\"></svg-icon>\n <p\n class=\"driver-name\"\n [innerHTML]=\"\n dispatch.driver.firstName +\n ' & ' +\n dispatch.coDriver.firstName | highlightSearch: value()\n \"\n ></p>\n } @else {\n <cai-avatar\n [driver]=\"dispatch.driver\"\n [size]=\"18\"\n [inverse]=\"true\"\n [hover]=\"false\"\n ></cai-avatar>\n <p\n class=\"driver-name\"\n [innerHTML]=\"\n dispatch.driver.firstName + ' ' + dispatch.driver.lastName\n | highlightSearch: value()\n \"\n ></p>\n }\n </div>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-hover\">\n <!-- Load Status -->\n @let dispatchStatus = dispatch.status | dispatchStatus;\n @if (dispatchStatus) {\n <div\n class=\"dispatch-status\"\n [class]=\"dispatchStatus.statusClass\"\n >\n @if (dispatchStatus.badge) {\n <p\n class=\"status-block\"\n [class]=\"dispatchStatus.badge.color\"\n >\n {{ dispatchStatus.badge.text }}\n </p>\n }\n {{ dispatchStatus.label }}\n @if (dispatch.status?.statusCheckInNumber) {\n <p class=\"status-block\">\n {{ dispatch.status?.statusCheckInNumber }}\n </p>\n }\n </div>\n <p class=\"dispatch-separator\">|</p>\n }\n <p class=\"dispatch-load-count\">\n {{ dispatch?.pendingLoadCount }}\n </p>\n <svg-icon name=\"cai-load\" class=\"icon-sm\"></svg-icon>\n </div>\n <div class=\"end-item-base\">\n <p>{{ dispatch.payType }}</p>\n <svg-icon name=\"cai-driver\" class=\"icon-sm\"></svg-icon>\n </div>\n </div>\n </button>\n }\n } @else if (isNoBoardsVariant) {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n }\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #splitDriverRef>\n @if (dropdownOptions().length) {\n @for (splitDriverBoard of dropdownOptions(); track splitDriverBoard.id) {\n @let driverBoard = cast(splitDriverBoard, \"splitDriverBoard\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item\"\n (click)=\"fold(driverBoard.id, $event)\"\n [class]=\"{\n unfolded: (driverBoard.drivers?.length ?? 0) > 0,\n }\"\n >\n <p>\n {{\n driverBoard.isTeamBoard ? \"Team Board\" : driverBoard.dispatcherName\n }}\n </p>\n <!-- TODO: Change to count once BE is fixed -->\n <p class=\"counter\">{{ driverBoard.drivers?.length || 0 }}</p>\n <svg-icon\n name=\"cai-arrow-primary-up\"\n class=\"group-icon icon\"\n ></svg-icon>\n </button>\n @for (driver of driverBoard.drivers || []; track driver.id) {\n @let driverOption = cast(driver, \"splitDriver\")!;\n <button\n class=\"dropdown-item\"\n (click)=\"handleOption(driverOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'splitDriver')?.id === driverOption.id,\n }\"\n >\n <div class=\"dropdown-subitem\">\n <div class=\"dropdown-avatar\">\n <cai-avatar\n [driver]=\"driverOption\"\n [size]=\"18\"\n [inverse]=\"true\"\n [hover]=\"false\"\n ></cai-avatar>\n </div>\n <p\n class=\"driver-name\"\n [innerHTML]=\"\n driverOption.firstName + ' ' + driverOption.lastName\n | highlightSearch: value()\n \"\n ></p>\n </div>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-hover\">\n @let dispatchStatus =\n driverOption.dispatchStatus | dispatchStatus;\n @if (dispatchStatus) {\n <div\n class=\"dispatch-status\"\n [class]=\"dispatchStatus.statusClass\"\n >\n @if (dispatchStatus.badge) {\n <p\n class=\"status-block\"\n [class]=\"dispatchStatus.badge.color\"\n >\n {{ dispatchStatus.badge.text }}\n </p>\n }\n {{ dispatchStatus.label }}\n @if (driverOption.dispatchStatus?.statusCheckInNumber) {\n <p class=\"status-block\">\n {{ driverOption.dispatchStatus?.statusCheckInNumber }}\n </p>\n }\n </div>\n <p class=\"dispatch-separator\">|</p>\n }\n <p class=\"dispatch-load-count\">\n {{ driverOption.pendingLoadsCount }}\n </p>\n <svg-icon name=\"cai-load\" class=\"icon-sm\"></svg-icon>\n </div>\n <div class=\"end-item-base\">\n <p>{{ driverOption.payTypeValue }}</p>\n </div>\n </div>\n </button>\n }\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #splitTruckRef>\n @if (dropdownOptions().length) {\n @for (splitTruckBoard of dropdownOptions(); track splitTruckBoard.id) {\n @let truckBoard = cast(splitTruckBoard, \"splitTruckBoard\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item\"\n (click)=\"fold(truckBoard.id, $event)\"\n [class]=\"{\n unfolded: (truckBoard.trucks?.length ?? 0) > 0,\n }\"\n >\n <p>\n {{\n truckBoard.isTeamBoard ? \"Team Board\" : truckBoard.dispatcherName\n }}\n </p>\n <!-- TODO: Change to count once BE is fixed -->\n <p class=\"counter\">{{ truckBoard.trucks?.length || 0 }}</p>\n <svg-icon\n name=\"cai-arrow-primary-up\"\n class=\"group-icon icon\"\n ></svg-icon>\n </button>\n @for (truck of truckBoard.trucks || []; track truck.id) {\n @let truckOption = cast(truck, \"splitTruck\")!;\n <button\n class=\"dropdown-item\"\n (click)=\"handleOption(truckOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'splitTruck')?.id === truckOption.id,\n }\"\n >\n <div class=\"dropdown-subitem truck-item\">\n <svg-icon\n class=\"truck-icon\"\n [style.--truck-color]=\"truckOption.color?.code || ''\"\n [name]=\"truckOption.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p\n class=\"truck-number\"\n [innerHTML]=\"truckOption.truckNumber | highlightSearch: value()\"\n ></p>\n </div>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-hover\">\n @let dispatchStatus = truckOption.dispatchStatus | dispatchStatus;\n @if (dispatchStatus) {\n <div\n class=\"dispatch-status\"\n [class]=\"dispatchStatus.statusClass\"\n >\n @if (dispatchStatus.badge) {\n <p\n class=\"status-block\"\n [class]=\"dispatchStatus.badge.color\"\n >\n {{ dispatchStatus.badge.text }}\n </p>\n }\n {{ dispatchStatus.label }}\n @if (truckOption.dispatchStatus?.statusCheckInNumber) {\n <p class=\"status-block\">\n {{ truckOption.dispatchStatus?.statusCheckInNumber }}\n </p>\n }\n </div>\n <p class=\"dispatch-separator\">|</p>\n }\n <p class=\"dispatch-load-count\">\n {{ truckOption.pendingLoadsCount }}\n </p>\n <svg-icon name=\"cai-load\" class=\"icon-sm\"></svg-icon>\n </div>\n <div class=\"end-item-base\">\n @if (\n truckOption.location?.city &&\n truckOption.location?.stateShortName\n ) {\n <p>\n {{ truckOption.location?.city }},\n {{ truckOption.location?.stateShortName }}\n </p>\n }\n </div>\n </div>\n </button>\n }\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #splitTrailerRef>\n @if (dropdownOptions().length) {\n @for (splitTrailerBoard of dropdownOptions(); track splitTrailerBoard.id) {\n @let trailerBoard = cast(splitTrailerBoard, \"splitTrailerBoard\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item\"\n (click)=\"fold(trailerBoard.id, $event)\"\n [class]=\"{\n unfolded: (trailerBoard.trailers?.length ?? 0) > 0,\n }\"\n >\n <p>\n {{\n trailerBoard.isTeamBoard\n ? \"Team Board\"\n : trailerBoard.dispatcherName\n }}\n </p>\n <!-- TODO: Change to count once BE is fixed -->\n <p class=\"counter\">{{ trailerBoard.trailers?.length || 0 }}</p>\n <svg-icon\n name=\"cai-arrow-primary-up\"\n class=\"group-icon icon\"\n ></svg-icon>\n </button>\n @for (trailer of trailerBoard.trailers || []; track trailer.id) {\n @let trailerOption = cast(trailer, \"splitTrailer\")!;\n <button\n class=\"dropdown-item\"\n (click)=\"handleOption(trailerOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'splitTrailer')?.id === trailerOption.id,\n }\"\n >\n <div class=\"dropdown-subitem trailer-item\">\n <svg-icon\n class=\"trailer-icon\"\n [style.--trailer-color]=\"trailerOption.color?.code || ''\"\n [name]=\"trailerOption.trailerType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p\n class=\"trailer-number\"\n [innerHTML]=\"\n trailerOption.trailerNumber | highlightSearch: value()\n \"\n ></p>\n </div>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-hover\">\n @let dispatchStatus =\n trailerOption.dispatchStatus | dispatchStatus;\n @if (dispatchStatus) {\n <div\n class=\"dispatch-status\"\n [class]=\"dispatchStatus.statusClass\"\n >\n @if (dispatchStatus.badge) {\n <p\n class=\"status-block\"\n [class]=\"dispatchStatus.badge.color\"\n >\n {{ dispatchStatus.badge.text }}\n </p>\n }\n {{ dispatchStatus.label }}\n @if (trailerOption.dispatchStatus?.statusCheckInNumber) {\n <p class=\"status-block\">\n {{ trailerOption.dispatchStatus?.statusCheckInNumber }}\n </p>\n }\n </div>\n <p class=\"dispatch-separator\">|</p>\n }\n <p class=\"dispatch-load-count\">\n {{ trailerOption.pendingLoadsCount }}\n </p>\n <svg-icon name=\"cai-load\" class=\"icon-sm\"></svg-icon>\n </div>\n <div class=\"end-item-base\">\n @if (\n trailerOption.location?.city &&\n trailerOption.location?.stateShortName\n ) {\n <p>\n {{ trailerOption.location?.city }},\n {{ trailerOption.location?.stateShortName }}\n </p>\n }\n </div>\n </div>\n </button>\n }\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #tollRef>\n @if (dropdownOptions().length) {\n @for (toll of dropdownOptions(); track $index; let groupIndex = $index) {\n @let tollOption = cast(toll, \"tollOption\")!;\n @let isGroupFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === 0;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item pe-none\"\n [class]=\"{\n unfolded: tollOption.tollTransponders?.length || 0 > 0,\n focused: isGroupFocused,\n }\"\n >\n <p>\n {{ tollOption.groupName }}\n </p>\n </button>\n @let tollTransponders = tollOption.tollTransponders || [];\n @for (\n tollTransponder of tollTransponders;\n track tollTransponder.id;\n let optionIndex = $index\n ) {\n @let isOptionFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === optionIndex + 1;\n <!-- +1 since optionIndex is 0 for the group item header -->\n <button\n class=\"dropdown-item\"\n (click)=\"handleOption(tollTransponder, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'tollTransponderOption')?.id ===\n tollTransponder.id,\n focused: isOptionFocused,\n }\"\n >\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (tollTransponder.name || '' | highlightSearch: value())\n : tollTransponder.name\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Dispatcher dropdown -->\n\n<ng-template #dispatcherRef>\n @if (dropdownOptions().length) {\n @for (dispatcher of dropdownOptions(); track $index; let index = $index) {\n @let dispatcherOption = cast(dispatcher, \"dispatcher\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ dispatcherOption.id }}\"\n (click)=\"handleOption(dispatcherOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'dispatcher')?.id === dispatcherOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <cai-avatar\n [driver]=\"{\n id: dispatcherOption?.id || 0,\n firstName: (dispatcherOption?.fullName || ' ').split(' ')[0] || '',\n lastName: (dispatcherOption?.fullName || ' ').split(' ')[1] || '',\n avatarFile: dispatcherOption?.avatarFile,\n colorFlag: dispatcherOption?.colorFlag,\n }\"\n [rounded]=\"!config().squareAvatar\"\n [hover]=\"false\"\n ></cai-avatar>\n <p\n class=\"dropdown-content-hazardous\"\n [innerHTML]=\"\n search\n ? (dispatcherOption.fullName || '' | highlightSearch: value())\n : dispatcherOption.fullName\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Driver Owner dropdown -->\n\n<ng-template #driverOwnerRef>\n @if (dropdownOptions().length) {\n @for (driverOwner of dropdownOptions(); track $index; let index = $index) {\n @let driverOwnerOption = cast(driverOwner, \"driverOwner\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ driverOwnerOption.id }}\"\n (click)=\"handleOption(driverOwnerOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'driverOwner')?.id === driverOwnerOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <cai-avatar\n [driver]=\"{\n id: driverOwnerOption?.id || 0,\n firstName: (driverOwnerOption?.fullName || ' ').split(' ')[0] || '',\n lastName: (driverOwnerOption?.fullName || ' ').split(' ')[1] || '',\n avatarFile: driverOwnerOption?.avatarFile,\n colorFlag: driverOwnerOption?.colorFlag,\n owner: driverOwnerOption?.driverType === 'OwnerOperator',\n driverType: {\n id: 0,\n name: (driverOwnerOption?.driverType | driverTypeLabel),\n },\n }\"\n [rounded]=\"false\"\n [hover]=\"false\"\n ></cai-avatar>\n <p\n class=\"dropdown-content\"\n [innerHTML]=\"\n search\n ? (driverOwnerOption.fullName || '' | highlightSearch: value())\n : driverOwnerOption.fullName\n \"\n ></p>\n <div class=\"dropdown-subitem-end\">\n <p class=\"driver-type\">\n {{ driverOwnerOption.driverType | driverTypeLabel }}\n </p>\n </div>\n <svg-icon\n name=\"cai-checkmark\"\n class=\"dropdown-item-icon no-margin\"\n ></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Truck Owner dropdown -->\n\n<ng-template #truckOwnerRef>\n @if (dropdownOptions().length) {\n @for (truckOwner of dropdownOptions(); track $index; let index = $index) {\n @let truckOwnerOption = cast(truckOwner, \"truckOwner\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ truckOwnerOption.id }}\"\n (click)=\"handleOption(truckOwnerOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'truckOwner')?.id === truckOwnerOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <div class=\"dropdown-subitem truck-owner-unit\">\n @if (truckOwnerOption.truckType?.logoName) {\n <svg-icon\n class=\"truck-icon truck-trailer-icon-colors\"\n [class]=\"truckOwnerOption.truckType.logoName.slice(0, -4)\"\n [name]=\"truckOwnerOption.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n }\n <p\n class=\"dropdown-content\"\n [innerHTML]=\"\n search\n ? (truckOwnerOption.truckNumber || ''\n | highlightSearch: value())\n : truckOwnerOption.truckNumber\n \"\n ></p>\n @if (truckOwnerOption.model) {\n <p class=\"truck-owner-bullet\">\u2022</p>\n <p\n class=\"dropdown-content\"\n [innerHTML]=\"\n search\n ? (truckOwnerOption.model | highlightSearch: value())\n : truckOwnerOption.model\n \"\n ></p>\n }\n </div>\n <div class=\"dropdown-subitem-end\">\n <p class=\"driver-type\">\n {{ truckOwnerOption.driverType | truckOwnershipLabel }}\n </p>\n </div>\n <svg-icon\n name=\"cai-checkmark\"\n class=\"dropdown-item-icon no-margin\"\n ></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #truckRef>\n @if (dropdownOptions().length) {\n @for (truck of dropdownOptions(); track $index; let index = $index) {\n @let truckOption = cast(truck, \"truckOption\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ truckOption.id }}\"\n (click)=\"handleOption(truckOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'truckOption')?.id === truckOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (truckOption.name || '' | highlightSearch: value())\n : truckOption.name\n \"\n ></p>\n <svg-icon\n class=\"truck-trailer-option truck-trailer-icon-colors\"\n [class]=\"truckOption.logoName.slice(0, -4)\"\n [name]=\"truckOption.logoName.slice(0, -4)\"\n ></svg-icon>\n <svg-icon\n name=\"cai-checkmark\"\n class=\"dropdown-item-icon no-margin\"\n ></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #trailerRef>\n @if (dropdownOptions().length) {\n @for (truck of dropdownOptions(); track $index; let index = $index) {\n @let trailerOption = cast(truck, \"trailerOption\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ trailerOption.id }}\"\n (click)=\"handleOption(trailerOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'trailerOption')?.id === trailerOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (trailerOption.name || '' | highlightSearch: value())\n : trailerOption.name\n \"\n ></p>\n\n <svg-icon\n class=\"truck-trailer-option truck-trailer-icon-colors\"\n [class]=\"trailerOption.logoName.slice(0, -4)\"\n [name]=\"trailerOption.logoName.slice(0, -4)\"\n ></svg-icon>\n <svg-icon\n name=\"cai-checkmark\"\n class=\"dropdown-item-icon no-margin\"\n ></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #providerRef>\n @if (dropdownOptions().length) {\n @for (provider of dropdownOptions(); track $index; let index = $index) {\n @let providerOption = cast(provider, \"provider\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ providerOption?.id }}\"\n (click)=\"handleOption(providerOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'provider')?.id === providerOption?.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <svg-icon\n class=\"full-icon\"\n [name]=\"'cai-' + providerOption?.name?.toLowerCase()\"\n ></svg-icon>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Hazardous dropdown -->\n<ng-template #hazardousRef>\n @if (dropdownOptions().length) {\n @for (hazardous of dropdownOptions(); track $index; let index = $index) {\n @let hazardousOption = cast(hazardous, \"hazardous\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ hazardousOption.id }}\"\n (click)=\"handleOption(hazardousOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'hazardous')?.id === hazardousOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <svg-icon [name]=\"hazardousOption.logoName?.slice(0, -4)\"></svg-icon>\n <p\n class=\"dropdown-content-hazardous\"\n [innerHTML]=\"\n search\n ? (hazardousOption.description || '' | highlightSearch: value())\n : hazardousOption.description\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #pmRef>\n @if (dropdownOptions().length) {\n @for (pm of dropdownOptions(); track $index; let index = $index) {\n @let pmOption = cast(pm, \"pmOption\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ pmOption.id }}\"\n (click)=\"handleOption(pmOption, $event)\"\n [class]=\"{\n selected: cast(selectedOption(), 'pmOption')?.id === pmOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <svg-icon\n class=\"icon\"\n [name]=\"pmOption.title | remapPmIcons\"\n ></svg-icon>\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (pmOption.title || '' | highlightSearch: value())\n : pmOption.title\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #colorRef>\n @if (dropdownOptions().length) {\n @for (color of dropdownOptions(); track $index; let index = $index) {\n @let colorOption = cast(color, \"colorOption\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item color-item\"\n id=\"option-{{ colorOption.id }}\"\n (click)=\"handleOption(colorOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'colorOption')?.id === colorOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <svg-icon\n class=\"icon cai-color\"\n [name]=\"'cai-color'\"\n [style.--color]=\"colorOption?.code\"\n [style.--hover-color]=\"colorOption?.hoverCode\"\n ></svg-icon>\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (colorOption.name || '' | highlightSearch: value())\n : colorOption.name\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #stateRef>\n @if (dropdownOptions().length) {\n @for (state of dropdownOptions(); track $index; let index = $index) {\n @let stateOption = cast(state, \"state\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ stateOption.id }}\"\n (click)=\"handleOption(stateOption, $event)\"\n [class]=\"{\n selected: cast(selectedOption(), 'state')?.id === stateOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <svg-icon\n class=\"icon\"\n [name]=\"\n 'cai-' +\n stateOption?.countryType?.name?.toLowerCase() +\n '-' +\n stateOption?.stateShortName?.toLowerCase()\n \"\n ></svg-icon>\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (stateOption.stateShortName +\n ' ' +\n (config().fullState\n ? ' (' + stateOption?.stateName + ')'\n : '') || '' | highlightSearch: value())\n : stateOption.stateShortName +\n ' ' +\n (config().fullState ? ' (' + stateOption?.stateName + ')' : '')\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #fuelStopTransactionRef>\n @if (dropdownOptions().length) {\n @for (\n franchise of dropdownOptions();\n track franchise.id;\n let groupIndex = $index\n ) {\n @let isGroupFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === 0;\n @let franchiseOption = cast(franchise, \"franchise\")!;\n @if (franchiseOption?.count !== null) {\n <div\n class=\"dropdown-group\"\n [class.no-items]=\"!franchiseOption?.count\"\n [class]=\"{\n active: openGroup() === franchiseOption.id,\n }\"\n [style.--max-height]=\"\n openGroup() === franchiseOption.id\n ? 30 * ((franchiseOption.fuelStopStores?.length || 0) + 1) + 'px'\n : '26px'\n \"\n >\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item\"\n (click)=\"fold(franchiseOption.id, $event, franchiseOption)\"\n [class]=\"{\n unfolded: openGroup() === franchiseOption.id,\n focused: isGroupFocused,\n }\"\n >\n <p\n [innerHTML]=\"\n franchiseOption?.businessName || '' | highlightSearch: value()\n \"\n ></p>\n <p class=\"counter\">{{ franchiseOption.count }}</p>\n <svg-icon\n name=\"cai-arrow-primary-up\"\n class=\"group-icon icon\"\n ></svg-icon>\n </button>\n @if (openGroup() === franchiseOption.id) {\n @if (franchiseOption.fuelStopStores?.length || 0 > 0) {\n @for (\n fuelStopStore of franchiseOption.fuelStopStores;\n track fuelStopStore.id\n ) {\n @let isOptionFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === $index + 1;\n <!-- +1 since optionIndex is 0 for the group item header -->\n <button\n tabindex=\"-1\"\n class=\"dropdown-item fuel-stop-transaction-store\"\n [class]=\"{\n focused: isOptionFocused,\n }\"\n (click)=\"handleOption(fuelStopStore, $event)\"\n >\n <p\n [innerHTML]=\"\n fuelStopStore?.store ?? '' | highlightSearch: value()\n \"\n ></p>\n @let city = fuelStopStore?.address?.city ?? \"\";\n @let state = fuelStopStore?.address?.stateShortName ?? \"\";\n @let zip = fuelStopStore?.address?.zipCode ?? \"\";\n <p\n class=\"fuel-stop-transaction-store-address\"\n [innerHTML]=\"\n city + (state || zip ? ', ' : '') + state + ' ' + zip\n | highlightSearch: value()\n \"\n ></p>\n\n @if (fuelStopStore?.[\"favourite\"]) {\n <svg-icon\n name=\"cai-favorite\"\n class=\"favorite-icon\"\n ></svg-icon>\n }\n </button>\n }\n <!-- Infinite scroll trigger - emits event when item comes into view -->\n <div\n class=\"dropdown-infinite-scroll-item\"\n caiIntersectionObserver\n [threshold]=\"0.1\"\n (inView)=\"onDropdownScrolledToBottom(true)\"\n ></div>\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n }\n </div>\n } @else {\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n [class.focused]=\"\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === 0\n \"\n (click)=\"handleOption(franchiseOption, $event)\"\n >\n <p\n class=\"fuel-stop-transaction-nostore\"\n [innerHTML]=\"\n franchiseOption?.businessName || '' | highlightSearch: value()\n \"\n ></p>\n </button>\n }\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- #endregion -->\n\n<!-- #region Selected options -->\n\n<!-- selected dispatch -->\n<ng-template #selectedDispatchRef>\n @let dispatchOption = cast(selectedOption(), \"dispatch\");\n @if (dispatchOption && !inputRef.value && !isAdding()) {\n <div class=\"dropdown-selected\">\n <div class=\"dropdown-subitem truck-item\">\n <svg-icon\n class=\"truck-icon\"\n [name]=\"dispatchOption!.truck.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p class=\"truck-number\">\n {{ dispatchOption!.truck.truckNumber }}\n </p>\n </div>\n <div class=\"dropdown-subitem trailer-item\">\n @if (dispatchOption!.trailer) {\n <svg-icon\n class=\"trailer-icon\"\n [name]=\"\n cast(\n selectedOption(),\n 'dispatch'\n )!.trailer?.trailerType?.logoName?.slice(0, -4)\n \"\n ></svg-icon>\n <p class=\"trailer-number\">\n {{ dispatchOption!.trailer?.trailerNumber }}\n </p>\n }\n </div>\n <div class=\"dropdown-subitem\">\n @if (dispatchOption!.coDriver) {\n <svg-icon class=\"dispatch-icon\" name=\"cai-people\"></svg-icon>\n <p class=\"driver-name\">\n {{\n dispatchOption!.driver.firstName +\n \" & \" +\n dispatchOption!.coDriver?.firstName\n }}\n </p>\n } @else {\n <cai-avatar\n [driver]=\"dispatchOption!.driver\"\n [size]=\"18\"\n [hover]=\"false\"\n ></cai-avatar>\n <p class=\"driver-name\">\n {{\n dispatchOption!.driver.firstName +\n \" \" +\n dispatchOption!.driver.lastName\n }}\n </p>\n }\n </div>\n <p class=\"selected-end-item\">\n {{ dispatchOption!.payType }}\n </p>\n </div>\n } @else {\n @if (!inputRef.value && this.config().dropdown == \"dispatch\") {\n <p class=\"dropdown-selected\">Unassigned</p>\n }\n }\n</ng-template>\n\n<!-- selected broker -->\n<ng-template #selectedBrokerRef>\n @let brokerOption = cast(selectedOption(), \"broker\");\n @if (brokerOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n @if (brokerOption!.fraudCheck) {\n <svg-icon name=\"cai-status-warning-lite\" class=\"fraud-icon\"></svg-icon>\n }\n <p class=\"dropdown-selected-content\">{{ brokerOption!.businessName }}</p>\n <div class=\"selected-end-item\">\n @if (!brokerOption!.creditLimit) {\n <p>Unlimited</p>\n } @else {\n <p>\n {{ brokerOption!.availableCredit || 0 | currency }}\n </p>\n <div\n class=\"progress-bar\"\n [style.--progress]=\"\n (\n brokerOption!\n | brokerProgress: brokerOption!.dnu || brokerOption!.ban\n ).activePercentageOfPaid + '%'\n \"\n [class]=\"\n (\n brokerOption!\n | brokerProgress: brokerOption!.dnu || brokerOption!.ban\n ).status\n \"\n ></div>\n }\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedContactRef>\n @let contactOption = cast(selectedOption(), \"contact\");\n @if (contactOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <p class=\"dropdown-selected-content\">{{ contactOption?.contactName }}</p>\n <div class=\"selected-end-item\">\n <p>\n {{ contactOption?.phone }}\n {{\n contactOption?.extensionPhone\n ? \"x\" + contactOption?.extensionPhone\n : \"\"\n }}\n </p>\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedShipperRef>\n @let shipperOption = cast(selectedOption(), \"shipper\");\n @if (shipperOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <p class=\"dropdown-selected-content\">{{ shipperOption?.businessName }}</p>\n <div class=\"selected-end-item selected-end-item-truncate\">\n <p class=\"text-truncate\">{{ shipperOption?.address?.address }}</p>\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedOwnerRef>\n @let ownerOption = cast(selectedOption(), \"owner\");\n @if (ownerOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <p class=\"owner-ein\">{{ ownerOption?.ein }}</p>\n <p class=\"\">{{ ownerOption?.name }}</p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedFuelcardRef>\n @let fuelcardOption = cast(selectedOption(), \"fuelCard\");\n @if (fuelcardOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <p class=\"fuelcard-number\">\n {{ fuelcardOption?.number }}\n </p>\n <p class=\"fuelcard-brand\">\n {{ fuelcardOption?.brand }}\n </p>\n <p class=\"\">\n {{ fuelcardOption?.account }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedBankRef>\n @let bankOption = cast(selectedOption(), \"bank\");\n @if (bankOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n @if (bankOption?.logoName) {\n <svg-icon\n class=\"option-icon full-size\"\n [name]=\"bankOption?.logoName?.slice(0, -4) || ''\"\n ></svg-icon>\n } @else {\n <p class=\"dropdown-selected-content\">{{ bankOption?.name }}</p>\n }\n </div>\n }\n</ng-template>\n\n<ng-template #selectedProviderRef>\n @let providerOption = cast(selectedOption(), \"provider\");\n @if (providerOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon full-size\"\n [name]=\"'cai-' + providerOption?.name?.toLowerCase()\"\n ></svg-icon>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedMakeRef>\n @let makeOption = cast(selectedOption(), \"make\");\n @if (makeOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n @if (makeOption?.logoName) {\n <svg-icon\n class=\"option-icon full-size\"\n [name]=\"makeOption?.logoName?.slice(0, -4) || ''\"\n ></svg-icon>\n } @else {\n <p class=\"dropdown-selected-content\">{{ makeOption?.name }}</p>\n }\n </div>\n }\n</ng-template>\n\n<ng-template #selectedStateRef>\n @let stateOption = cast(selectedOption(), \"state\");\n @if (stateOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon\"\n [name]=\"\n 'cai-' +\n stateOption?.countryType?.name?.toLowerCase() +\n '-' +\n stateOption?.stateShortName?.toLowerCase()\n \"\n ></svg-icon>\n <p class=\"dropdown-selected-content\">\n {{ stateOption?.stateShortName }}\n {{ config().fullState ? \" (\" + stateOption?.stateName + \")\" : \"\" }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedDispatcherRef>\n @let dispatcherOption = cast(selectedOption(), \"dispatcher\");\n @if (dispatcherOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <cai-avatar\n [driver]=\"{\n id: dispatcherOption?.id || 0,\n firstName: (dispatcherOption?.fullName || ' ').split(' ')[0] || '',\n lastName: (dispatcherOption?.fullName || ' ').split(' ')[1] || '',\n avatarFile: dispatcherOption?.avatarFile,\n colorFlag: dispatcherOption?.colorFlag,\n }\"\n [rounded]=\"!config().squareAvatar\"\n ></cai-avatar>\n <p class=\"dropdown-selected-content\">{{ dispatcherOption?.fullName }}</p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedDriverOwnerRef>\n @let driverOwnerOption = cast(selectedOption(), \"driverOwner\");\n @if (driverOwnerOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <cai-avatar\n [driver]=\"{\n id: driverOwnerOption?.id || 0,\n firstName: (driverOwnerOption?.fullName || ' ').split(' ')[0] || '',\n lastName: (driverOwnerOption?.fullName || ' ').split(' ')[1] || '',\n avatarFile: driverOwnerOption?.avatarFile,\n colorFlag: driverOwnerOption?.colorFlag,\n owner: driverOwnerOption?.driverType === 'OwnerOperator',\n driverType: {\n id: 0,\n name: (driverOwnerOption?.driverType | driverTypeLabel),\n },\n }\"\n [rounded]=\"false\"\n ></cai-avatar>\n <p class=\"dropdown-selected-content\">{{ driverOwnerOption?.fullName }}</p>\n <p class=\"selected-end-item driver-type\">\n {{ driverOwnerOption?.driverType | driverTypeLabel }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedTruckOwnerRef>\n @let truckOwnerOption = cast(selectedOption(), \"truckOwner\");\n @if (truckOwnerOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n @if (truckOwnerOption.truckType?.logoName) {\n <svg-icon\n class=\"truck-icon option-icon\"\n [name]=\"truckOwnerOption.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n }\n <p class=\"dropdown-selected-content\">\n {{ truckOwnerOption.truckNumber }}\n @if (truckOwnerOption.model) {\n <span class=\"truck-owner-bullet\">\u2022</span>\n {{ truckOwnerOption.model }}\n }\n </p>\n <p class=\"selected-end-item driver-type\">\n {{ truckOwnerOption.driverType | truckOwnershipLabel }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedTruckRef>\n @let truckOption = cast(selectedOption(), \"truckOption\");\n @if (truckOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon\"\n [name]=\"truckOption?.logoName?.slice(0, -4)\"\n ></svg-icon>\n <p class=\"dropdown-selected-content\">{{ truckOption?.name }}</p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedTrailerRef>\n @let trailerOption = cast(selectedOption(), \"trailerOption\");\n @if (trailerOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon\"\n [name]=\"trailerOption?.logoName?.slice(0, -4)\"\n ></svg-icon>\n <p class=\"dropdown-selected-content\">{{ trailerOption?.name }}</p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedHazardousRef>\n @let hazardousOption = cast(selectedOption(), \"hazardous\");\n @if (hazardousOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"hazard-icon\"\n [name]=\"hazardousOption?.logoName?.slice(0, -4)\"\n ></svg-icon>\n <p class=\"dropdown-selected-content dropdown-selected-hazardous\">\n {{ hazardousOption?.description }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedPmRef>\n @let pmOption = cast(selectedOption(), \"pmOption\");\n @if (pmOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon\"\n [name]=\"pmOption?.title | remapPmIcons\"\n ></svg-icon>\n <p class=\"dropdown-selected-content\">\n {{ pmOption?.title }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedColorRef>\n @let colorOption = cast(selectedOption(), \"colorOption\");\n @if (colorOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon cai-color\"\n [name]=\"'cai-color'\"\n [style.--color]=\"colorOption?.code\"\n [style.--hover-color]=\"colorOption?.hoverCode\"\n ></svg-icon>\n <p class=\"dropdown-selected-content\">\n {{ colorOption?.name }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedTollRef>\n @let tollOption = cast(selectedOption(), \"tollTransponderOption\");\n @if (tollOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <p class=\"dropdown-selected-content\">\n {{ tollOption?.name }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedSplitDriverRef>\n @let splitDriverOption = cast(selectedOption(), \"splitDriver\");\n @if (splitDriverOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <div class=\"dropdown-selected-content\">\n <div class=\"dropdown-subitem\">\n <cai-avatar [driver]=\"splitDriverOption\" [size]=\"18\"></cai-avatar>\n <p class=\"driver-name\">\n {{ splitDriverOption.firstName + \" \" + splitDriverOption.lastName }}\n </p>\n </div>\n </div>\n\n <p class=\"selected-end-item\">\n {{ splitDriverOption.payTypeValue }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedSplitTruckRef>\n @let splitTruckOption = cast(selectedOption(), \"splitTruck\");\n @if (splitTruckOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <div class=\"dropdown-selected-content\">\n <div class=\"dropdown-subitem trailer-item\">\n <svg-icon\n class=\"trailer-icon\"\n [name]=\"splitTruckOption!.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p class=\"trailer-number\">\n {{ splitTruckOption!.truckNumber }}\n </p>\n </div>\n </div>\n <p class=\"selected-end-item\">\n @if (\n splitTruckOption!.location?.city &&\n splitTruckOption!.location?.stateShortName\n ) {\n {{ splitTruckOption!.location?.city }},\n {{ splitTruckOption!.location?.stateShortName }}\n }\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedSplitTrailerRef>\n @let splitTrailerOption = cast(selectedOption(), \"splitTrailer\");\n @if (splitTrailerOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <div class=\"dropdown-selected-content\">\n <div class=\"dropdown-subitem truck-item\">\n <svg-icon\n class=\"truck-icon\"\n [name]=\"splitTrailerOption!.trailerType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p class=\"truck-number\">\n {{ splitTrailerOption!.trailerNumber }}\n </p>\n </div>\n </div>\n <p class=\"selected-end-item\">\n @if (\n splitTrailerOption!.location?.city &&\n splitTrailerOption!.location?.stateShortName\n ) {\n {{ splitTrailerOption!.location?.city }},\n {{ splitTrailerOption!.location?.stateShortName }}\n }\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedAccidentDriverRef>\n @let accidentDriverOption = cast(selectedOption(), \"accidentDriver\");\n @if (accidentDriverOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <div class=\"dropdown-subitem accident-name\">\n <cai-avatar\n [driver]=\"accidentDriverOption!\"\n [size]=\"18\"\n [hover]=\"false\"\n ></cai-avatar>\n <p>\n {{\n accidentDriverOption!.firstName +\n \" \" +\n accidentDriverOption!.lastName\n }}\n </p>\n </div>\n <p class=\"accident-dob\">\n {{ accidentDriverOption!.dateOfBirth | date: \"MM/dd/yy\" }}\n </p>\n <p class=\"accident-cdl-number\">\n {{ accidentDriverOption!.cdlNumber }}\n </p>\n <div class=\"dropdown-subitem accident-state\">\n <p>{{ accidentDriverOption!.cdlState?.stateShortName }}</p>\n @if (\n accidentDriverOption!.cdlState?.countryType?.name &&\n accidentDriverOption!.cdlState?.stateShortName\n ) {\n <svg-icon\n class=\"icon option-icon\"\n [name]=\"\n 'cai-' +\n accidentDriverOption!.cdlState?.countryType?.name?.toLowerCase() +\n '-' +\n accidentDriverOption!.cdlState?.stateShortName?.toLowerCase()\n \"\n ></svg-icon>\n }\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedAccidentTruckRef>\n @let accidentTruckOption = cast(selectedOption(), \"accidentTruck\");\n @if (accidentTruckOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <div class=\"dropdown-subitem accident-unit\">\n @if (accidentTruckOption!.truckType?.logoName) {\n <svg-icon\n class=\"truck-icon option-icon\"\n [name]=\"accidentTruckOption!.truckType!.logoName.slice(0, -4)\"\n ></svg-icon>\n }\n <p>{{ accidentTruckOption!.truckNumber }}</p>\n </div>\n <p class=\"accident-vin\">{{ accidentTruckOption!.vin }}</p>\n <p class=\"accident-plate\">\n {{ accidentTruckOption!.licensePlateNumber }}\n </p>\n <div class=\"dropdown-subitem accident-state\">\n <p>{{ accidentTruckOption!.licenseState?.stateShortName }}</p>\n @if (\n accidentTruckOption!.licenseState?.countryType?.name &&\n accidentTruckOption!.licenseState?.stateShortName\n ) {\n <svg-icon\n class=\"icon option-icon\"\n [name]=\"\n 'cai-' +\n accidentTruckOption!.licenseState?.countryType?.name?.toLowerCase() +\n '-' +\n accidentTruckOption!.licenseState?.stateShortName?.toLowerCase()\n \"\n ></svg-icon>\n }\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedAccidentTrailerRef>\n @let accidentTrailerOption = cast(selectedOption(), \"accidentTrailer\");\n @if (accidentTrailerOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <div class=\"dropdown-subitem accident-unit\">\n @if (accidentTrailerOption!.trailerType?.logoName) {\n <svg-icon\n class=\"trailer-icon option-icon\"\n [name]=\"accidentTrailerOption!.trailerType!.logoName.slice(0, -4)\"\n ></svg-icon>\n }\n <p>{{ accidentTrailerOption!.trailerNumber }}</p>\n </div>\n <p class=\"accident-vin\">{{ accidentTrailerOption!.vin }}</p>\n <p class=\"accident-plate\">\n {{ accidentTrailerOption!.licensePlateNumber }}\n </p>\n <div class=\"dropdown-subitem accident-state\">\n <p>{{ accidentTrailerOption!.licenseState?.stateShortName }}</p>\n @if (\n accidentTrailerOption!.licenseState?.countryType?.name &&\n accidentTrailerOption!.licenseState?.stateShortName\n ) {\n <svg-icon\n class=\"icon option-icon\"\n [name]=\"\n 'cai-' +\n accidentTrailerOption!.licenseState?.countryType?.name?.toLowerCase() +\n '-' +\n accidentTrailerOption!.licenseState?.stateShortName?.toLowerCase()\n \"\n ></svg-icon>\n }\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #passwordTooltip>\n {{ visible() ? \"Hide\" : \"Show\" }}\n</ng-template>\n\n<ng-template #errorTooltip>\n @if (\n (config().errorBehavior === \"floating\" ||\n (config().errorBehavior === \"static\" && hasText()) ||\n config().inTable) &&\n invalid &&\n !dropdown.isOpen()\n ) {\n {{ (ngControl?.errors | errorMessage: config().customErrors)[0] }}\n }\n</ng-template>\n\n<!-- #endregion -->\n", styles: ["input:-webkit-autofill,input:-webkit-autofill:hover,input:-webkit-autofill:focus,input:-webkit-autofill:active{transition:background-color 5000s ease-in-out 0s!important}input:-webkit-autofill:focus{-webkit-text-fill-color:#ffffff!important}input:-moz-autofill,input:-moz-autofill-preview{filter:none}*,*:before,*:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}p,ul,ol,dl,blockquote,figure,pre{margin:0}button,input,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button{background:none;border:none;padding:0}img,svg,video,canvas,audio,iframe,embed,object{display:block;max-width:100%;height:auto}ul,ol{padding-left:1.5rem;list-style-position:outside}a{color:inherit;text-decoration:inherit}table{border-collapse:collapse;border-spacing:0}:focus:not(:focus-visible){outline:none}.app-input-container{--color-text: #2f2f2f;--color-text-negative: #df3c3c;--color-text-heading: #424242;--color-text-subtle: #919191;--color-text-inverse: #ffffff;--color-icon-neutral: #919191;--color-icon-negative: #e66767;--color-icon-positive: #6692f1;--color-icon-inverse: rgba(255, 255, 255, .6980392157);--color-icon-disable: #cccccc;--color-surface-neutral: #eeeeee;--color-surface-neutral-hover: #dadada;--color-surface-neutral-focus: #1d1d1d;--color-surface-positive: #e9effd;--color-surface-positive-hover: #bed0f9;--color-surface-positive-focus: #0b49d1;--color-surface-negative: #fbe9e9;--color-surface-negative-hover: #f4bebe;--color-surface-negative-focus: #c20c0c;--color-surface-disable: #f7f7f7;position:relative;border-radius:2px;background-color:var(--color-surface-neutral);color:var(--color-text);transition:background-color .1s cubic-bezier(.46,.03,.51,.95);display:flex}.app-input-container.inverse{--color-text: #ffffff;--color-text-negative: #ed9292;--color-text-heading: #ffffff;--color-text-inverse: #ffffff;--color-icon-neutral: #aaaaaa;--color-icon-negative: #ed9292;--color-icon-positive: #92b1f5;--color-icon-disable: #6c6c6c;--color-surface-neutral: #424242;--color-surface-neutral-hover: #6c6c6c;--color-surface-neutral-focus: #dadada;--color-surface-positive: rgba(59, 115, 237, .2);--color-surface-positive-hover: #2f519a;--color-surface-positive-focus: #0b49d1;--color-surface-negative: rgba(223, 60, 60, .2);--color-surface-negative-hover: #923030;--color-surface-negative-focus: #c20c0c;--color-surface-disable: rgba(66, 66, 66, .4)}.app-input-container.inverse:not(.has-error):not(.has-valid) .app-input:focus-visible{color:#2f2f2f}.app-input-container.inverse:not(.has-error):not(.has-valid):has(.app-input:focus-visible) .icon,.app-input-container.inverse:not(.has-error):not(.has-valid):has(.app-input:focus-visible) .icon-sm{color:#919191!important}.app-input-container.inverse:not(.has-error):not(.has-valid):has(.app-input:focus-visible) .separator{background-color:#919191!important}.app-input-container.inverse:not(.has-error):not(.has-valid):has(.app-input:focus-visible) .bg-icon{background-color:#919191!important;color:#dadada}.app-input-container.inverse.is-empty:has(.app-input:focus-visible) .icon,.app-input-container.inverse.is-empty:has(.app-input:focus-visible) .icon-sm{color:#919191!important}.app-input-container.inverse.is-empty:has(.app-input:focus-visible) .bg-icon{background-color:#919191!important;color:#dadada}.app-input-container.inverse.is-empty:has(.app-input:focus-visible) .separator{background-color:#919191!important}.app-input-container.inverse.has-text:has(.app-input:disabled) .app-input-label{color:#424242!important}.app-input-container.hovered{background-color:var(--color-surface-neutral-hover)}.app-input-container.hovered:not(:has(.app-input:disabled)) .sub-label,.app-input-container.hovered:not(:has(.app-input:disabled)) .app-input-label .accident-state{margin-right:44px}@media(hover:hover){.app-input-container:hover{background-color:var(--color-surface-neutral-hover)}.app-input-container:hover:not(:has(.app-input:disabled)) .sub-label,.app-input-container:hover:not(:has(.app-input:disabled)) .app-input-label .accident-state{margin-right:44px}}.app-input-container.has-text .app-input-label{transform:translateY(-20px);font-weight:600;font-size:11px;color:var(--color-text-heading)!important}.app-input-container.has-text.fade-placeholder .app-input-label{transform:translateY(0);opacity:0}.app-input-container.has-text .subcontent{opacity:1!important}.app-input-container.has-text.static-placeholder .app-input-label{transform:translateY(0);opacity:1;color:var(--color-text)}@media(hover:hover){.app-input-container.has-text.is-address:hover .button-icon{opacity:1;pointer-events:auto}.app-input-container.has-text.is-address:hover .bg-icon{background-color:var(--color-icon-neutral);color:var(--color-surface-neutral-hover)}}.app-input-container.has-text.is-address:has(.app-input:focus-visible) .button-icon{opacity:1;pointer-events:auto}.app-input-container.has-text.is-address:has(.app-input:focus-visible) .bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-neutral-focus)}.app-input-container:has(.app-input:focus-visible){background-color:var(--color-surface-neutral-focus)}.app-input-container:has(.app-input:focus-visible) .app-input-label{transform:translateY(-20px);font-weight:600;font-size:11px;color:var(--color-text-heading)!important}.app-input-container:has(.app-input:focus-visible) .subcontent{opacity:1!important;color:#ffffffb2;left:unset!important;right:4px!important}.app-input-container:has(.app-input:focus-visible).has-text .subcontent{right:26px!important}.app-input-container:has(.app-input:focus-visible) .sub-label,.app-input-container:has(.app-input:focus-visible) .app-input-label .accident-state{margin-right:44px}.app-input-container:has(.app-input:focus-visible).fade-placeholder .app-input-label{transform:translateY(0);opacity:0}.app-input-container:has(.app-input:focus-visible).static-placeholder .app-input-label{transform:translateY(0);opacity:1;color:var(--color-text-inverse)!important}.app-input-container:has(.app-input:focus-visible) .bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-neutral-focus)}.app-input-container:has(.app-input:focus-visible) .separator{background-color:var(--color-icon-inverse)!important}.app-input-container:has(.app-input:disabled){background-color:var(--color-surface-disable)}.app-input-container:has(.app-input:disabled).hovered{background-color:var(--color-surface-disable)}@media(hover:hover){.app-input-container:has(.app-input:disabled):hover{background-color:var(--color-surface-disable)}}.app-input-container:has(.app-input:disabled):focus{background-color:var(--color-surface-disable)}.app-input-container:has(.app-input:disabled) .app-input-label{color:var(--color-text-subtle)}.app-input-container:has(.app-input:disabled) .separator{background-color:var(--color-icon-disable)}.app-input-container:has(.app-input:disabled) .dropdown-icon-container{opacity:0;pointer-events:none!important}.app-input-container:has(.app-input:disabled) .dropdown-selected:has(.selected-end-item){width:100%}.app-input-container:has(.app-input:disabled) .driver-type{color:#919191}.app-input-container:has(.app-input:disabled) .icon-container{pointer-events:none!important}.app-input-container:has(.app-input:disabled):not(.disabled-removable) .cancel-button{display:none!important}.app-input-container:has(.app-input:required):not(:has(.app-input:disabled)) .app-input-name:after{content:\" *\";color:var(--color-text-negative)}@media(hover:hover){.app-input-container:not(.has-error).is-empty:not(:has(.app-input:focus-visible)) .dropdown-icon-container:hover .dropdown-icon{color:#424242!important}}@media(hover:hover){.app-input-container:not(.has-error).is-empty:not(:has(.app-input:focus-visible)) .hover-icon:hover{color:#424242!important}}@media(hover:hover){.app-input-container:not(.has-error).is-empty:has(.app-input:focus-visible) .dropdown-icon-container:hover .dropdown-icon{color:#fff!important}}@media(hover:hover){.app-input-container:not(.has-error).is-empty:has(.app-input:focus-visible) .hover-icon:hover{color:#fff!important}}@media(hover:hover){.app-input-container:not(.has-error):not(.has-valid):has(.app-input:focus-visible) .dropdown-icon-container:hover .dropdown-icon{color:#fff!important}}@media(hover:hover){.app-input-container:not(.has-error):not(.has-valid):has(.app-input:focus-visible) .hover-icon:hover{color:#fff!important}}.app-input-container.canceled .app-input-label,.app-input-container.canceled .app-input{color:var(--color-text-subtle)!important}.app-input-container.canceled .icon-container .icon,.app-input-container.canceled .icon-container .icon-sm{color:var(--color-icon-disable)!important}.subcontent{pointer-events:none;position:absolute;left:6px;color:#919191;-webkit-user-select:none;user-select:none;top:50%;transform:translateY(-50%);transition:right .1s ease-in-out,left .1s ease-in-out,transform .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95),color .1s cubic-bezier(.46,.03,.51,.95);opacity:0;font-family:Montserrat;font-weight:400;font-style:Regular;font-size:14px;line-height:18px;letter-spacing:0%;height:18px;overflow:hidden}.subcontent .subcontent-hide{opacity:0!important}.app-input-label{position:absolute;display:flex;gap:4px;left:0;font-size:14px;line-height:18px;font-weight:400;pointer-events:none;padding:.25rem 6px;color:var(--color-text);transition:transform .1s ease-in-out,font-weight .1s ease-in-out,color .1s ease-in-out,font-size .1s ease-in-out,opacity .1s ease-in-out;transform:translateY(0);-webkit-user-select:none;user-select:none}.app-input-label.placeholder-color{color:var(--placeholder-color)!important}.app-input{padding:.25rem 6px;width:100%;font-size:14px;line-height:18px;font-weight:400;border:0;outline:none;margin-top:auto;background-color:transparent;transition:color .1s cubic-bezier(.46,.03,.51,.95);color:var(--color-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;position:relative}.app-input:focus-visible{color:var(--color-text-inverse)}@media(pointer:coarse){.app-input{font-size:16px;transform:scale(.875);transform-origin:left center;height:26px}}.app-input-error{position:absolute;bottom:-16px;right:6px;font-size:11px;font-weight:600;opacity:0;pointer-events:none;-webkit-user-select:none;user-select:none;transition:opacity .1s cubic-bezier(.46,.03,.51,.95),transform .1s cubic-bezier(.46,.03,.51,.95);color:var(--color-text-negative);transform:translateY(-10px)}.app-input-container.has-error{background-color:var(--color-surface-negative)}.app-input-container.has-error:not(.has-icon):not(.has-password):not(.has-right) .app-input{padding-right:26px}.app-input-container.has-error:has(.app-input:focus-visible):not(.has-right) .app-input{padding-right:26px}@media(hover:hover){.app-input-container.has-error:hover:not(.has-right) .app-input{padding-right:26px}}.app-input-container.has-error.has-right .app-input{padding-right:6px;padding-left:26px}.app-input-container.has-error.hovered{background-color:var(--color-surface-negative-hover)}.app-input-container.has-error.hovered.has-text .button-icon{opacity:1;pointer-events:auto}.app-input-container.has-error.hovered.has-text .bg-icon{background-color:var(--color-icon-negative);color:var(--color-surface-negative-hover)}@media(hover:hover){.app-input-container.has-error:hover{background-color:var(--color-surface-negative-hover)}.app-input-container.has-error:hover.has-text .button-icon{opacity:1;pointer-events:auto}.app-input-container.has-error:hover.has-text .bg-icon{background-color:var(--color-icon-negative);color:var(--color-surface-negative-hover)}}.app-input-container.has-error:has(.app-input:focus-visible){background-color:var(--color-surface-negative-focus);color:var(--color-text-inverse)}.app-input-container.has-error:has(.app-input:focus-visible).has-text .button-icon{opacity:1}.app-input-container.has-error:has(.app-input:focus-visible).has-text .bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-negative-focus)}.app-input-container.has-error:has(.app-input:focus-visible).is-empty,.app-input-container.has-error:has(.app-input:focus-visible).has-dropdown:not(.has-selected){background-color:var(--color-surface-neutral-focus)!important}.app-input-container.has-error:has(.app-input:focus-visible).is-empty .app-input-error,.app-input-container.has-error:has(.app-input:focus-visible).has-dropdown:not(.has-selected) .app-input-error{opacity:0}.app-input-container.has-error:has(.app-input:focus-visible).is-empty .bg-icon,.app-input-container.has-error:has(.app-input:focus-visible).has-dropdown:not(.has-selected) .bg-icon{color:var(--color-surface-neutral-focus)!important}.app-input-container.has-error:has(.app-input:not(:focus-visible)).app-input-container:not(:hover) .warning-icon,.app-input-container.has-error.is-empty:has(.app-input:not(:focus-visible)) .warning-icon{opacity:1!important}.app-input-container.has-error .app-input-error{opacity:1;transform:translateY(0);pointer-events:auto}.app-input-container.has-error .app-input::selection{background-color:#ffffff4d}.app-input-container.has-error .icon-container .separator,.app-input-container.has-error .dropdown-icon-container .separator{background-color:var(--color-icon-negative)}.app-input-container.has-error .icon-container .icon,.app-input-container.has-error .icon-container .icon-sm,.app-input-container.has-error .dropdown-icon-container .icon,.app-input-container.has-error .dropdown-icon-container .icon-sm{color:var(--color-icon-negative)}@media(hover:hover){.app-input-container.has-error:not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .bg-icon:hover{background-color:#c20c0c!important}}@media(hover:hover){.app-input-container.has-error:not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .dropdown-icon-container:hover .dropdown-icon{color:#c20c0c!important}}@media(hover:hover){.app-input-container.has-error:not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .hover-icon:hover{color:#c20c0c!important}}@media(hover:hover){.app-input-container.has-error:not(.removable):has(.app-input:focus-visible) .bg-icon:hover{background-color:#fff!important}}@media(hover:hover){.app-input-container.has-error:not(.removable):has(.app-input:focus-visible) .dropdown-icon-container:hover .dropdown-icon{color:#fff!important}}@media(hover:hover){.app-input-container.has-error:not(.removable):has(.app-input:focus-visible) .hover-icon:hover{color:#fff!important}}.app-input-container.has-valid:not(.has-icon):not(.has-password):not(.has-right) .app-input{padding-right:26px}.app-input-container.has-valid:has(.app-input:focus-visible):not(.has-right) .app-input{padding-right:26px}@media(hover:hover){.app-input-container.has-valid:hover:not(.has-right) .app-input{padding-right:26px}}.app-input-container.has-valid.has-right .app-input{padding-right:6px;padding-left:26px}.app-input-container.has-valid.has-text:not(.has-dropdown):not(.in-table),.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):not(.in-table),.app-input-container.has-valid.has-multiple-dropdown.has-text:not(.in-table){background-color:var(--color-surface-positive)}.app-input-container.has-valid.has-text:not(.has-dropdown).hovered,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown).hovered,.app-input-container.has-valid.has-multiple-dropdown.has-text.hovered{background-color:var(--color-surface-positive-hover)}.app-input-container.has-valid.has-text:not(.has-dropdown).hovered .button-icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown).hovered .button-icon,.app-input-container.has-valid.has-multiple-dropdown.has-text.hovered .button-icon{opacity:1;pointer-events:auto}.app-input-container.has-valid.has-text:not(.has-dropdown).hovered .bg-icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown).hovered .bg-icon,.app-input-container.has-valid.has-multiple-dropdown.has-text.hovered .bg-icon{background-color:var(--color-icon-positive);color:var(--color-surface-positive-hover)}@media(hover:hover){.app-input-container.has-valid.has-text:not(.has-dropdown):hover,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):hover,.app-input-container.has-valid.has-multiple-dropdown.has-text:hover{background-color:var(--color-surface-positive-hover)}.app-input-container.has-valid.has-text:not(.has-dropdown):hover .button-icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):hover .button-icon,.app-input-container.has-valid.has-multiple-dropdown.has-text:hover .button-icon{opacity:1;pointer-events:auto}.app-input-container.has-valid.has-text:not(.has-dropdown):hover .bg-icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):hover .bg-icon,.app-input-container.has-valid.has-multiple-dropdown.has-text:hover .bg-icon{background-color:var(--color-icon-positive);color:var(--color-surface-positive-hover)}}.app-input-container.has-valid.has-text:not(.has-dropdown):has(.app-input:focus-visible),.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):has(.app-input:focus-visible),.app-input-container.has-valid.has-multiple-dropdown.has-text:has(.app-input:focus-visible){background-color:var(--color-surface-positive-focus);color:var(--color-text-inverse)}.app-input-container.has-valid.has-text:not(.has-dropdown):has(.app-input:focus-visible) .button-icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):has(.app-input:focus-visible) .button-icon,.app-input-container.has-valid.has-multiple-dropdown.has-text:has(.app-input:focus-visible) .button-icon{opacity:1;pointer-events:auto}.app-input-container.has-valid.has-text:not(.has-dropdown):has(.app-input:focus-visible) .bg-icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):has(.app-input:focus-visible) .bg-icon,.app-input-container.has-valid.has-multiple-dropdown.has-text:has(.app-input:focus-visible) .bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-positive-focus)}.app-input-container.has-valid.has-text:not(.has-dropdown):has(.app-input:not(:focus-visible)).app-input-container:not(:hover) .positive-icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):has(.app-input:not(:focus-visible)).app-input-container:not(:hover) .positive-icon,.app-input-container.has-valid.has-multiple-dropdown.has-text:has(.app-input:not(:focus-visible)).app-input-container:not(:hover) .positive-icon{opacity:1}.app-input-container.has-valid.has-text:not(.has-dropdown) .app-input::selection,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown) .app-input::selection,.app-input-container.has-valid.has-multiple-dropdown.has-text .app-input::selection{background-color:#ffffff4d}.app-input-container.has-valid.has-text:not(.has-dropdown) .icon-container .separator,.app-input-container.has-valid.has-text:not(.has-dropdown) .dropdown-icon-container .separator,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown) .icon-container .separator,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown) .dropdown-icon-container .separator,.app-input-container.has-valid.has-multiple-dropdown.has-text .icon-container .separator,.app-input-container.has-valid.has-multiple-dropdown.has-text .dropdown-icon-container .separator{background-color:var(--color-icon-positive)}.app-input-container.has-valid.has-text:not(.has-dropdown) .icon-container .icon,.app-input-container.has-valid.has-text:not(.has-dropdown) .icon-container .icon-sm,.app-input-container.has-valid.has-text:not(.has-dropdown) .dropdown-icon-container .icon,.app-input-container.has-valid.has-text:not(.has-dropdown) .dropdown-icon-container .icon-sm,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown) .icon-container .icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown) .icon-container .icon-sm,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown) .dropdown-icon-container .icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown) .dropdown-icon-container .icon-sm,.app-input-container.has-valid.has-multiple-dropdown.has-text .icon-container .icon,.app-input-container.has-valid.has-multiple-dropdown.has-text .icon-container .icon-sm,.app-input-container.has-valid.has-multiple-dropdown.has-text .dropdown-icon-container .icon,.app-input-container.has-valid.has-multiple-dropdown.has-text .dropdown-icon-container .icon-sm{color:var(--color-icon-positive)}.app-input-container.has-valid.has-text:not(.has-dropdown) .icon-container .password-key,.app-input-container.has-valid.has-text:not(.has-dropdown) .dropdown-icon-container .password-key,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown) .icon-container .password-key,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown) .dropdown-icon-container .password-key,.app-input-container.has-valid.has-multiple-dropdown.has-text .icon-container .password-key,.app-input-container.has-valid.has-multiple-dropdown.has-text .dropdown-icon-container .password-key{opacity:0;pointer-events:none}@media(hover:hover){.app-input-container.has-valid.has-text:not(.has-dropdown):not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .bg-icon:hover,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .bg-icon:hover,.app-input-container.has-valid.has-multiple-dropdown.has-text:not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .bg-icon:hover{background-color:#0b49d1!important}}@media(hover:hover){.app-input-container.has-valid.has-text:not(.has-dropdown):not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .dropdown-icon-container:hover .dropdown-icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .dropdown-icon-container:hover .dropdown-icon,.app-input-container.has-valid.has-multiple-dropdown.has-text:not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .dropdown-icon-container:hover .dropdown-icon{color:#0b49d1!important}}@media(hover:hover){.app-input-container.has-valid.has-text:not(.has-dropdown):not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .hover-icon:hover,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .hover-icon:hover,.app-input-container.has-valid.has-multiple-dropdown.has-text:not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .hover-icon:hover{color:#0b49d1!important}}@media(hover:hover){.app-input-container.has-valid.has-text:not(.has-dropdown):not(.removable):has(.app-input:focus-visible) .bg-icon:hover,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):not(.removable):has(.app-input:focus-visible) .bg-icon:hover,.app-input-container.has-valid.has-multiple-dropdown.has-text:not(.removable):has(.app-input:focus-visible) .bg-icon:hover{background-color:#fff!important}}@media(hover:hover){.app-input-container.has-valid.has-text:not(.has-dropdown):not(.removable):has(.app-input:focus-visible) .dropdown-icon-container:hover .dropdown-icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):not(.removable):has(.app-input:focus-visible) .dropdown-icon-container:hover .dropdown-icon,.app-input-container.has-valid.has-multiple-dropdown.has-text:not(.removable):has(.app-input:focus-visible) .dropdown-icon-container:hover .dropdown-icon{color:#fff!important}}@media(hover:hover){.app-input-container.has-valid.has-text:not(.has-dropdown):not(.removable):has(.app-input:focus-visible) .hover-icon:hover,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):not(.removable):has(.app-input:focus-visible) .hover-icon:hover,.app-input-container.has-valid.has-multiple-dropdown.has-text:not(.removable):has(.app-input:focus-visible) .hover-icon:hover{color:#fff!important}}.in-table,.in-table.has-error,.in-table.has-valid.has-text{background-color:transparent}.in-table.has-error:not(:hover).in-table:not(.app-input-container:has(.app-input:focus-visible)) .app-input{color:var(--color-text-negative)}.in-table.has-error:not(:hover).in-table:not(.app-input-container:has(.app-input:focus-visible)):not(.static-placeholder) .app-input-label{color:var(--color-text-negative)}.in-table .dropdown-icon-container{opacity:0}@media(hover:hover){.in-table:hover .dropdown-icon-container{opacity:1}}.in-table:has(.app-input:focus-visible) .dropdown-icon-container{opacity:1}.app-input-icon{position:absolute;right:4px;top:4px;pointer-events:none;transition:color .1s cubic-bezier(.46,.03,.51,.95),background-color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95)}.button-icon{opacity:0;pointer-events:none}@media(hover:hover){.button-icon:hover{cursor:pointer}}.bg-icon{background-color:var(--color-icon-neutral);color:var(--color-surface-neutral);border-radius:1px;height:18px;width:18px;padding:0;display:grid;place-items:center;transition:background-color .1s cubic-bezier(.46,.03,.51,.95),color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95),transform .1s cubic-bezier(.46,.03,.51,.95);transform-box:border-box;transform-origin:center;will-change:transform}.bg-icon svg{transition:transform .1s cubic-bezier(.46,.03,.51,.95)}@media(hover:hover){.bg-icon:hover{transform:scale(1.2222222222)}.bg-icon:hover svg{transform:scale(.8181818182)}}.bg-icon:active{transform:scale(1)}.round-icon{background-color:#919191;color:#2f2f2f;border-radius:50%;height:18px;width:18px;padding:0;display:grid;place-items:center;transition:background-color .1s cubic-bezier(.46,.03,.51,.95),color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95)}.positive-icon{color:var(--color-icon-positive);height:18px;width:18px;display:grid;place-items:center;opacity:0}.warning-icon{color:var(--color-icon-negative);height:18px;width:18px;display:grid;place-items:center;opacity:0}.text-color-positive:not(:hover):not(:has(.app-input:focus-visible)) .app-input{color:#3b73ed}.is-plan.has-selected .app-input,.is-plan.has-selected .dropdown-selected-content,.is-plan.has-selected .selected-text{font-weight:700}.is-plan.has-selected:not(:has(.app-input:focus-visible)) .app-input,.is-plan.has-selected:not(:has(.app-input:focus-visible)) .dropdown-selected-content,.is-plan.has-selected:not(:has(.app-input:focus-visible)) .selected-text{color:#3b73ed}@media(hover:hover){.is-plan.has-selected:not(:has(.app-input:focus-visible)):hover .app-input,.is-plan.has-selected:not(:has(.app-input:focus-visible)):hover .dropdown-selected-content,.is-plan.has-selected:not(:has(.app-input:focus-visible)):hover .selected-text{color:#0b49d1}}.floating-error .app-input-error{opacity:0!important}.static-error .app-input-error{pointer-events:none!important;transform:translateY(calc(-100% - 4px))!important;transition:margin .1s ease-in-out,opacity .1s ease-in-out}.static-error.has-icon .app-input-error{margin-right:26px!important}.static-error:has(.app-input:not(:focus-visible)) .app-input-error{opacity:1}.static-error.has-text .app-input-error{opacity:0!important}.static-placeholder .app-input-label{position:relative;white-space:nowrap;font-size:11px;font-weight:600}.static-placeholder .dropdown-selected{overflow:hidden;display:flex!important;justify-content:left!important}.static-placeholder .dropdown-selected .selected-label-hidden{width:max-content;font-size:11px;font-weight:600;opacity:0;-webkit-user-select:none;user-select:none;pointer-events:none}.static-placeholder .dropdown-selected .selected-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;display:inline-block}.static-placeholder .app-input{padding-left:0!important}.static-placeholder.has-dropdown .cancel-button{display:none}.static-placeholder.has-dropdown .dropdown-icon-container .dropdown-icon{opacity:0;pointer-events:none}.static-placeholder.has-dropdown:not(:has(.app-input:disabled)):has(.app-input:focus-visible) .icon-container .icon,.static-placeholder.has-dropdown:not(:has(.app-input:disabled)):has(.app-input:focus-visible) .icon-container .icon-sm{opacity:0}.static-placeholder.has-dropdown:not(:has(.app-input:disabled)):has(.app-input:focus-visible) .dropdown-icon-container{z-index:5;pointer-events:auto;cursor:pointer}.static-placeholder.has-dropdown:not(:has(.app-input:disabled)):has(.app-input:focus-visible) .dropdown-icon-container .dropdown-icon{opacity:1!important}@media(hover:hover){.static-placeholder.has-dropdown:not(:has(.app-input:disabled)):hover .icon-container .icon,.static-placeholder.has-dropdown:not(:has(.app-input:disabled)):hover .icon-container .icon-sm{opacity:0}.static-placeholder.has-dropdown:not(:has(.app-input:disabled)):hover .dropdown-icon-container{z-index:5;pointer-events:auto;cursor:pointer}.static-placeholder.has-dropdown:not(:has(.app-input:disabled)):hover .dropdown-icon-container .dropdown-icon{opacity:1!important}}.static-placeholder.has-dropdown .dropdown-icon-container{right:4px!important;left:auto!important}.app-input-container.has-icon:has(.app-input:focus-visible) .icon-container .icon,.app-input-container.has-icon:has(.app-input:focus-visible) .icon-container .icon-sm,.app-input-container.has-icon:has(.app-input:focus-visible) .dropdown-icon-container .icon,.app-input-container.has-icon:has(.app-input:focus-visible) .dropdown-icon-container .icon-sm,.app-input-container.has-password:has(.app-input:focus-visible) .icon-container .icon,.app-input-container.has-password:has(.app-input:focus-visible) .icon-container .icon-sm,.app-input-container.has-password:has(.app-input:focus-visible) .dropdown-icon-container .icon,.app-input-container.has-password:has(.app-input:focus-visible) .dropdown-icon-container .icon-sm,.app-input-container.has-dropdown:has(.app-input:focus-visible) .icon-container .icon,.app-input-container.has-dropdown:has(.app-input:focus-visible) .icon-container .icon-sm,.app-input-container.has-dropdown:has(.app-input:focus-visible) .dropdown-icon-container .icon,.app-input-container.has-dropdown:has(.app-input:focus-visible) .dropdown-icon-container .icon-sm{color:var(--color-icon-inverse)!important}.app-input-container.has-icon.colored-icon .icon-container .icon,.app-input-container.has-icon.colored-icon .icon-container .icon-sm,.app-input-container.has-password.colored-icon .icon-container .icon,.app-input-container.has-password.colored-icon .icon-container .icon-sm,.app-input-container.has-dropdown.colored-icon .icon-container .icon,.app-input-container.has-dropdown.colored-icon .icon-container .icon-sm{color:var(--icon-color)}.app-input-container.has-icon.is-empty:has(.app-input:disabled) .icon-container .icon,.app-input-container.has-icon.is-empty:has(.app-input:disabled) .icon-container .icon-sm,.app-input-container.has-icon.is-empty:has(.app-input:disabled) .dropdown-icon-container .icon,.app-input-container.has-icon.is-empty:has(.app-input:disabled) .dropdown-icon-container .icon-sm,.app-input-container.has-password.is-empty:has(.app-input:disabled) .icon-container .icon,.app-input-container.has-password.is-empty:has(.app-input:disabled) .icon-container .icon-sm,.app-input-container.has-password.is-empty:has(.app-input:disabled) .dropdown-icon-container .icon,.app-input-container.has-password.is-empty:has(.app-input:disabled) .dropdown-icon-container .icon-sm,.app-input-container.has-dropdown.is-empty:has(.app-input:disabled) .icon-container .icon,.app-input-container.has-dropdown.is-empty:has(.app-input:disabled) .icon-container .icon-sm,.app-input-container.has-dropdown.is-empty:has(.app-input:disabled) .dropdown-icon-container .icon,.app-input-container.has-dropdown.is-empty:has(.app-input:disabled) .dropdown-icon-container .icon-sm{color:var(--color-icon-disable)!important}.app-input-container.has-icon .positive-icon,.app-input-container.has-icon .warning-icon,.app-input-container.has-password .positive-icon,.app-input-container.has-password .warning-icon,.app-input-container.has-dropdown .positive-icon,.app-input-container.has-dropdown .warning-icon{display:none!important}.app-input-container.has-icon .icon,.app-input-container.has-icon .icon-sm,.app-input-container.has-password .icon,.app-input-container.has-password .icon-sm,.app-input-container.has-dropdown .icon,.app-input-container.has-dropdown .icon-sm{height:18px;width:18px;display:grid;place-items:center;color:var(--color-icon-neutral);transition:color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95);opacity:1}.app-input-container.has-icon:has(.app-input:focus-visible):not(.static-placeholder) .dropdown-selected,.app-input-container.has-password:has(.app-input:focus-visible):not(.static-placeholder) .dropdown-selected,.app-input-container.has-dropdown:has(.app-input:focus-visible):not(.static-placeholder) .dropdown-selected{width:calc(100% - 48px)!important}@media(hover:hover){.app-input-container.has-icon:hover:not(:has(.app-input:disabled)):not(.static-placeholder) .dropdown-selected,.app-input-container.has-password:hover:not(:has(.app-input:disabled)):not(.static-placeholder) .dropdown-selected,.app-input-container.has-dropdown:hover:not(:has(.app-input:disabled)):not(.static-placeholder) .dropdown-selected{width:calc(100% - 48px)!important}}.icon-sm{height:14px;width:14px}.app-input-container.has-icon .icon-container,.app-input-container.has-password .icon-container{height:26px;display:flex;justify-items:center;align-items:center;gap:4px;padding:.25rem 0 .25rem 6px}@media(hover:hover){.app-input-container.has-icon .icon-container:hover,.app-input-container.has-password .icon-container:hover{cursor:text}}.app-input-container.has-icon .subcontent,.app-input-container.has-password .subcontent{left:32px}.app-input-container.has-icon .app-input-label,.app-input-container.has-password .app-input-label{left:27px}.app-input-container.has-icon .app-input,.app-input-container.has-password .app-input{padding-left:4px}.separator{height:14px;width:1px;border-radius:2px;background-color:var(--color-icon-neutral);transition:background-color .1s cubic-bezier(.46,.03,.51,.95);opacity:40%}.has-password .password-icons{display:grid;place-items:center;position:relative;height:18px;width:18px}.has-password .password-icons .icon,.has-password .password-icons .icon-sm{position:absolute;opacity:0}.has-password.is-empty:has(.app-input:not(:focus-visible)) .password-key{opacity:1!important}.has-password.is-empty:has(.app-input:not(:focus-visible)) .password-icons{pointer-events:none}.has-password:has(.app-input:disabled) .password-icons{pointer-events:none}.has-password.has-text .password-hidden,.has-password:has(.app-input:focus-visible) .password-hidden{opacity:1!important}@media(hover:hover){.has-password.has-text .password-hidden:hover,.has-password:has(.app-input:focus-visible) .password-hidden:hover{cursor:pointer}}.has-visible.has-text .password-shown,.has-visible:has(.app-input:focus-visible) .password-shown{opacity:1!important}@media(hover:hover){.has-visible.has-text .password-shown:hover,.has-visible:has(.app-input:focus-visible) .password-shown:hover{cursor:pointer}}.has-visible.has-text .password-hidden,.has-visible:has(.app-input:focus-visible) .password-hidden{opacity:0!important;pointer-events:none}.has-number .number-container{position:relative;display:flex;justify-content:center;align-items:center;right:4px;pointer-events:none}.has-number .number-buttons{display:flex;gap:4px;position:absolute;right:0;justify-content:center;align-items:center;opacity:0;transition:opacity .1s cubic-bezier(.46,.03,.51,.95);pointer-events:none}.has-number .plus-icon,.has-number .minus-icon{cursor:pointer;pointer-events:none}.has-number:has(.app-input:focus-visible){cursor:text}.has-number:has(.app-input:focus-visible) .number-buttons{opacity:1}.has-number:has(.app-input:focus-visible) .plus-icon{pointer-events:auto}.has-number:has(.app-input:focus-visible) .minus-icon{pointer-events:auto}.has-number:has(.app-input:focus-visible) .button-icon{opacity:0!important;pointer-events:none!important}.has-number:has(.app-input:focus-visible) .number-container{width:60px}.has-number:has(.app-input:focus-visible) .subcontent{right:52px!important}.has-number:has(.app-input:focus-visible).has-text .subcontent{right:52px!important}.colored-icon .icon,.colored-icon .icon-sm{color:var(--icon-color)!important}.dropdown-anchor{position:absolute;width:100%;-webkit-user-select:none;user-select:none;pointer-events:none;opacity:0}.dropdown-infinite-scroll-item{width:100%;-webkit-user-select:none;user-select:none;pointer-events:none;opacity:0;height:0}.dropdown-menu{min-width:0px!important;width:100%;border:0;margin-top:4px;top:30px;height:var(--unfiltered-height);min-height:var(--unfiltered-height);padding:0!important;overflow:hidden;border-radius:0!important;background:transparent!important}.dropdown-menu.has-stroke .dropdown-menu-content{outline:1px solid #6c6c6c;outline-offset:-1px}.dropdown-menu .dropdown-menu-content{position:absolute;width:100%;background-color:#2f2f2f;border-radius:3px;padding:4px 0 4px 4px;max-height:244px;z-index:1100!important;overflow-y:scroll;margin-top:auto!important;scroll-padding:6px 0}.dropdown-menu .dropdown-menu-content::-webkit-scrollbar{background-color:#2f2f2f;border-radius:0 3px 3px 0;width:4px}.dropdown-menu .dropdown-menu-content::-webkit-scrollbar-thumb{width:4px;background:#2f2f2f;border-left:2px solid #919191;background-clip:padding-box;border-radius:1px 3px 3px 1px}@supports (-moz-appearance: none){.dropdown-menu .dropdown-menu-content{padding-right:4px;scrollbar-width:4px;scrollbar-color:#919191 transparent;scrollbar-gutter:stable!important}@media(hover:hover){.dropdown-menu .dropdown-menu-content:hover{scrollbar-color:#919191 transparent;scrollbar-width:4px!important;scrollbar-gutter:stable!important}}}@-moz-document url-prefix(){.dropdown-menu .dropdown-menu-content{overflow:-moz-scrollbars-vertical;scrollbar-width:4px;scrollbar-color:#919191 transparent}}.option-icon{color:#6c6c6c;transition:color .1s cubic-bezier(.46,.03,.51,.95)}.option-icon.full-size{width:max-content;min-width:100%;height:18px!important;min-height:18px;flex-shrink:0;overflow:hidden}.option-icon.full-size svg{height:18px;width:max-content}.cai-color{color:var(--color)!important;transition:color .1s cubic-bezier(.46,.03,.51,.95)}@media(hover:hover){.color-item:hover .cai-color{color:var(--hover-color)!important}}.dropdown-item{color:#fff;font-weight:400;font-size:14px;line-height:18px;height:26px;padding:4px;width:100%;scroll-margin:6px 0;outline:1px solid transparent;outline-offset:-1px;display:flex;align-items:center;justify-content:left;gap:4px;background-color:#2f2f2f;transition:background-color .1s cubic-bezier(.46,.03,.51,.95),color .1s cubic-bezier(.46,.03,.51,.95),outline .1s cubic-bezier(.46,.03,.51,.95);border-radius:2px;position:relative}.dropdown-item.focused{outline:1px solid #6c6c6c!important}.dropdown-item.focused .end-item-base{opacity:0}.dropdown-item.focused .end-item-hover{opacity:1}.dropdown-item.focused .full-icon{color:#ffffffb2}.dropdown-item.focused .truck-trailer-option{opacity:1}.dropdown-item .icon,.dropdown-item .icon-sm{color:#919191}.dropdown-item .dropdown-content-with-icon{max-width:calc(100% - 22px);overflow-x:hidden;word-break:break-all;text-overflow:ellipsis;white-space:nowrap}.dropdown-item .dropdown-content-hazardous{max-width:calc(100% - 40px);overflow-x:hidden;word-break:break-all;text-overflow:ellipsis;white-space:nowrap}.dropdown-item .dropdown-content{max-width:70%;overflow-x:hidden;word-break:break-all;text-overflow:ellipsis;white-space:nowrap}@media(hover:hover){.dropdown-item:hover:not(.no-hover){background-color:#424242}.dropdown-item:hover:not(.no-hover) .end-item-base{opacity:0}.dropdown-item:hover:not(.no-hover) .end-item-hover{opacity:1}.dropdown-item:hover:not(.no-hover) .full-icon{color:#ffffffb2}.dropdown-item:hover:not(.no-hover) .truck-trailer-option{opacity:1}}.dropdown-item.no-hover{cursor:default;pointer-events:none}.dropdown-item:focus-visible{background-color:#424242;border:0;outline:none}.dropdown-item:not(:first-child){margin-top:4px}.dropdown-item.banned{color:#919191;cursor:default}@media(hover:hover){.dropdown-item.banned:hover{color:#919191;background-color:#2f2f2f}.dropdown-item.banned:hover .end-item-base{opacity:0}.dropdown-item.banned:hover .end-item-hover{opacity:1}}.dropdown-item.dnu .round-icon{background-color:#e66767}.dropdown-item.selected .dispatch-load-count,.dropdown-item.selected .unassigned-ltl,.dropdown-item.selected .unassigned-ltl .icon,.dropdown-item.selected .unassigned-ltl .icon-sm{color:#92b1f5}.dropdown-item:not(:hover):not(.focused):not(.selected) .truck-icon{color:#919191}.dropdown-item:not(:hover):not(.focused):not(.selected) .trailer-icon{color:#919191}@media(hover:hover){.dropdown-avatar:hover{z-index:20}}.no-results{color:#919191;font-weight:700;cursor:default;pointer-events:none}.add-new{color:#92b1f5!important;font-weight:700;font-size:11px}.add-new .dropdown-item-icon{opacity:1}@media(hover:hover){.add-new:hover{background-color:#3b73ed66!important;color:#fff!important}}.selected{font-weight:700}.selected .dropdown-item-icon{opacity:1}.selected .dropdown-item-count{color:#fff;background-color:#3b73ed}.selected .full-icon{color:#fff}.selected .end-item-base,.selected .end-item-hover{font-weight:700;color:#92b1f5}.selected .end-item-base .icon,.selected .end-item-base .icon-sm,.selected .end-item-hover .icon,.selected .end-item-hover .icon-sm{color:#92b1f5}.dropdown-item-icon{opacity:0;color:#92b1f5;width:14px;height:14px;margin-left:auto}.dropdown-item-icon.no-margin{margin-left:0}.dropdown-item-count{position:absolute;right:6px;top:50%;transform:translateY(-50%);padding:2px 5px;border-radius:10px;background-color:#424242;color:#ffffffb2;min-width:18px;line-height:14px;font-weight:600;font-size:11px;text-align:center}.fraud-icon{color:#fab15c!important;height:18px;width:18px}.dropdown-icon-container{position:absolute;right:4px;top:50%;transform:translateY(-50%);width:18px;height:18px;display:grid;place-items:center;transition:opacity .1s cubic-bezier(.46,.03,.51,.95)}.dropdown-icon-container.open .dropdown-icon{transform:rotateX(180deg)}.dropdown-icon{transition:transform .1s cubic-bezier(.46,.03,.51,.95),color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95)!important;transform:rotateX(0);cursor:pointer}.has-dropdown .app-input-icon{right:26px}.has-dropdown:has(.app-input:focus-visible) .subcontent{right:26px!important}.has-dropdown:has(.app-input:focus-visible).has-text .subcontent,.has-dropdown:has(.app-input:focus-visible).has-selected .subcontent{right:48px!important}.has-dropdown:has(.app-input:focus-visible):not(.static-placeholder):not(.is-adding) .app-input{padding-right:48px!important}@media(hover:hover){.has-dropdown:hover:not(.static-placeholder):not(.is-adding) .app-input{padding-right:48px!important}}.has-right .app-input{text-align:right}@media(pointer:coarse){.has-right .app-input{transform-origin:right center}}.has-right .positive-icon,.has-right .app-input-icon{left:4px;right:auto}.has-right .cancel-button{z-index:1}.has-right.has-number .plus-button-container{order:2}.has-right.has-number .minus-button-container{order:1}.has-right.static-placeholder .app-input-icon{right:4px!important;left:auto!important;opacity:0!important}.has-right.static-placeholder:has(.app-input:focus-visible) .cancel-button{opacity:0!important;pointer-events:none!important}.has-right.static-placeholder.removable .cancel-button .bg-icon{background-color:transparent!important}@media(hover:hover){.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)).has-valid.has-text .cancel-button .bg-icon{color:var(--color-icon-positive)!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)).has-valid.has-text .cancel-button .bg-icon:hover{color:#c20c0c!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)).has-valid.has-text:has(.app-input:focus-visible) .cancel-button .bg-icon{color:var(--color-icon-inverse)!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)).has-valid.has-text:has(.app-input:focus-visible) .cancel-button .bg-icon:hover{color:#fff!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)):not(.has-text) .cancel-button .bg-icon{color:var(--color-icon-neutral)!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)):not(.has-text) .cancel-button .bg-icon:hover{color:#c20c0c!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)):not(.has-text):has(.app-input:focus-visible) .cancel-button .bg-icon{color:var(--color-icon-inverse)!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)):not(.has-text):has(.app-input:focus-visible) .cancel-button .bg-icon:hover{color:#fff!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)).has-error .cancel-button .bg-icon{color:var(--color-icon-negative)!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)).has-error .cancel-button .bg-icon:hover{color:#c20c0c!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)) .cancel-button{opacity:1!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)) .cancel-button .bg-icon{opacity:1!important;pointer-events:auto!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)) .icon-container .icon,.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)) .icon-container .icon-sm{opacity:0!important}}@media(hover:hover){.has-right.static-placeholder:hover:not(:has(.app-input:focus-visible)):not(:has(.app-input:disabled)).has-text .cancel-button{opacity:1!important}}.has-right .app-input{order:1}.has-right.has-subcontent .app-input{flex:1;min-width:0;word-break:none}.has-right .dropdown-selected{margin-left:0!important;text-align:right!important;right:0!important;left:0!important;justify-content:flex-end!important;width:100%!important}.has-right .subcontent{position:relative!important;order:1;display:grid;place-items:center;padding-right:4px;height:unset!important;transform:translateY(0)!important;left:0!important;right:unset!important}.has-right .subcontent .subcontent-hide{display:none!important}.has-right.has-text .subcontent{left:0!important;right:unset!important}.has-right:has(.app-input:focus-visible) .subcontent{left:0!important;right:unset!important}.has-right.has-icon .subcontent,.has-right.has-password .subcontent{padding-right:0!important;padding-left:4px}.has-right.has-icon .dropdown-selected,.has-right.has-password .dropdown-selected{width:calc(100% - 24px)!important}.has-right.has-icon .app-input,.has-right.has-password .app-input{padding-right:0!important}.has-right.has-icon .app-input-label,.has-right.has-password .app-input-label{left:0!important}.has-right.has-icon.fade-placeholder .app-input-label,.has-right.has-password.fade-placeholder .app-input-label{left:auto!important;right:24px!important}.has-right.has-icon .icon-container,.has-right.has-password .icon-container{width:30px;padding-left:4px}.has-right.has-icon .icon-container .icon,.has-right.has-icon .icon-container .icon-sm,.has-right.has-password .icon-container .icon,.has-right.has-password .icon-container .icon-sm{order:2}.has-right.has-dropdown .app-input-icon{left:26px}.has-right.has-dropdown .dropdown-icon-container{left:4px}.has-right .warning-icon{display:none!important}.has-right.has-number .separator{order:3}.has-right.has-number .number-buttons{left:0;right:unset}.has-right.has-number .number-container{left:4px;right:unset}.has-right.has-number.app-input-container:has(.app-input:focus-visible) .app-input{padding-left:4px}@media(hover:hover){.has-right.has-number.app-input-container:hover:not(:has(.app-input:disabled)) .number-container{width:60px}.has-right.has-number.app-input-container:hover:not(:has(.app-input:disabled)) .app-input{padding-left:4px}}.has-right .icon-container{order:2;margin-right:4px}.has-right .icon-container .password-icons{order:2}.has-right.fade-placeholder .app-input-label{right:0!important;left:auto!important}.has-right.fade-placeholder:has(.app-input:required) .app-input-name:after{content:none!important}.has-right.fade-placeholder:has(.app-input:required) .app-input-name:before{content:\"* \";color:var(--color-text-negative)}@media(hover:hover){.removable:has(.cancel-button:hover).in-table{background-color:transparent!important}.removable:has(.cancel-button:hover).in-table .separator{background-color:var(--color-icon-negative)!important}}@media(hover:hover){.removable:has(.cancel-button:hover):not(.in-table){background-color:var(--color-surface-negative-hover)!important}.removable:has(.cancel-button:hover):not(.in-table) .separator{background-color:var(--color-icon-negative)!important}}@media(hover:hover){.removable:has(.cancel-button:hover):has(.app-input:focus-visible){background-color:var(--color-surface-negative-focus)!important}.removable:has(.cancel-button:hover):has(.app-input:focus-visible) .separator{background-color:var(--color-icon-inverse)!important}}.no-clear .cancel-button{display:none!important}.is-adding{padding-right:20px}.is-adding .dropdown-icon{opacity:0!important}.is-adding .accept-button{pointer-events:none;opacity:0!important}@media(hover:hover){.is-adding:not(.removable):has(.app-input:focus-visible) .bg-icon:hover{background-color:#fff!important}}@media(hover:hover){.is-adding:not(.removable):has(.app-input:focus-visible) .dropdown-icon-container:hover .dropdown-icon{color:#fff!important}}@media(hover:hover){.is-adding:not(.removable):has(.app-input:focus-visible) .hover-icon:hover{color:#fff!important}}.is-adding:has(.app-input:focus-visible){padding-right:48px!important}@media(hover:hover){.is-adding:hover{padding-right:48px!important}}.is-adding.has-right{padding-left:26px}.is-adding.has-right.has-right:has(.app-input:focus-visible){padding-left:40px}@media(hover:hover){.is-adding.has-right.has-right:hover{padding-left:40px}}.is-adding .app-input-icon{right:4px}@media(hover:hover){.is-adding.has-text:hover .button-icon{opacity:1;pointer-events:auto!important}.is-adding.has-text:hover .accept-button{pointer-events:auto;opacity:1!important}}.is-adding.has-text:has(.app-input:focus-visible) .button-icon{opacity:1;pointer-events:auto!important}.is-adding.has-text:has(.app-input:focus-visible) .accept-button{pointer-events:auto;opacity:1!important}.is-adding .cancel-button{opacity:1!important;pointer-events:auto}.is-adding .dropdown-icon-container{pointer-events:none}.is-adding .accept-button{right:26px;pointer-events:auto}.dropdown-selected{-webkit-user-select:none;user-select:none;position:absolute;top:50%;transform:translateY(-50%);left:0;width:calc(100% - 22px);pointer-events:none;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;word-break:break-all;padding:.25rem 6px;font-size:14px;line-height:18px;font-weight:400;border:0;outline:none;margin-top:auto;background-color:transparent;transition:color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95),width .1s ease-in-out;color:var(--color-text);display:flex;gap:4px}.dropdown-selected .dropdown-selected-content{overflow:hidden;-webkit-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex:1}.dropdown-selected .dropdown-selected-hazardous{max-width:calc(100% - 22px)}p.dropdown-selected{-webkit-user-select:none;user-select:none;display:block}.app-input-container:has(.app-input:focus-visible) .dropdown-selected{color:#fff;opacity:.7}.app-input-container:has(.app-input:focus-visible) .dropdown-selected .option-icon{color:#fff!important}.has-icon .positive-icon,.has-icon .warning-icon{display:none}.has-icon .dropdown-selected{left:27px;width:calc(100% - 49px)}@media(hover:hover){.has-icon:hover .dropdown-selected{width:calc(100% - 71px)}}.has-icon.app-input-container:has(.app-input:focus-visible) .dropdown-selected{width:calc(100% - 71px)}.hazard-icon{height:18px;width:max-content}.has-dispatch .app-input-label{transform:translateY(-20px);font-weight:600;font-size:11px;color:var(--color-text-heading)!important}.dispatch-load-count{color:#dadada;font-weight:700}.dispatch-separator{color:#919191;font-weight:400}.dispatch-status{font-family:Montserrat;font-weight:700;font-style:Bold;font-size:11px;line-height:14px;letter-spacing:0%;text-transform:uppercase;color:#ffffffb2;border-radius:2px;padding:2px 4px;display:flex;justify-content:center;align-items:center;gap:4px}.dispatch-status.status-available{background-color:#50ac2533}.dispatch-status.status-dispatched{background-color:#3b73ed33}.dispatch-status.status-arrivedpickup,.dispatch-status.status-checkedinpickup,.dispatch-status.status-checkedin,.dispatch-status.status-loading,.dispatch-status.status-loaded{background-color:#259f9433}.dispatch-status.status-arriveddelivery,.dispatch-status.status-checkedindelivery,.dispatch-status.status-offloading,.dispatch-status.status-offloaded,.dispatch-status.status-empty{background-color:#ff704333}.dispatch-status.status-canceled{background-color:#df3c3c33}.dispatch-status.status-off,.dispatch-status.status-deadheading,.dispatch-status.status-break,.dispatch-status.status-split{background-color:#91919133}.dispatch-status.status-towing{background-color:#9e47ec33}.dispatch-status.status-repair,.dispatch-status.status-dispatchedrepair,.dispatch-status.status-loadedrepair{background-color:#865e3a33}.dispatch-status .status-block{border-radius:1px;background-color:#aaa;padding-left:2px;padding-right:2px;font-family:Montserrat;font-weight:700;font-style:Bold;font-size:11px;line-height:12px;text-align:center;color:#2f2f2f;min-width:12px;height:12px}.dispatch-status .status-block.blue{background-color:#6692f1}.dispatch-status .status-block.green{background-color:#56b4ac}.dispatch-status .status-block.orange{background-color:#ff906d}.has-ftl-dispatch,.has-dispatch{min-width:600px}.has-ftl-dispatch:has(.app-input:focus-visible) .dropdown-selected .dispatch-icon,.has-ftl-dispatch:has(.app-input:focus-visible) .dropdown-selected .trailer-icon,.has-ftl-dispatch:has(.app-input:focus-visible) .dropdown-selected .truck-icon,.has-dispatch:has(.app-input:focus-visible) .dropdown-selected .dispatch-icon,.has-dispatch:has(.app-input:focus-visible) .dropdown-selected .trailer-icon,.has-dispatch:has(.app-input:focus-visible) .dropdown-selected .truck-icon{color:#fff}.dropdown-subitem{display:flex;justify-content:left;align-items:center;gap:4px}.truck-item{width:128px}.trailer-item{width:138px}.truck-trailer-option{opacity:0;transition:opacity .1s cubic-bezier(.46,.03,.51,.95);margin-left:auto}.truck-trailer-icon-colors.ic_truck_semi-truck,.truck-trailer-icon-colors.ic_truck_semi-wSleeper{color:#92b1f5}.truck-trailer-icon-colors.ic_truck_box-truck,.truck-trailer-icon-colors.ic_truck_reefer,.truck-trailer-icon-colors.ic_truck_cargo-van{color:#fbc88b}.truck-trailer-icon-colors.ic_truck_cement,.truck-trailer-icon-colors.ic_truck_dump,.truck-trailer-icon-colors.ic_truck_garbage{color:#ed9292}.truck-trailer-icon-colors.ic_truck_tow-truck,.truck-trailer-icon-colors.ic_truck_car-hauler,.truck-trailer-icon-colors.ic_truck_spotter{color:#86c9c3}.truck-trailer-icon-colors.ic_trailer_flatbed,.truck-trailer-icon-colors.ic_trailer_low-boy,.truck-trailer-icon-colors.ic_trailer_step-deck{color:#92b1f5}.truck-trailer-icon-colors.ic_trailer_chassis,.truck-trailer-icon-colors.ic_trailer_container{color:#80d6f1}.truck-trailer-icon-colors.ic_trailer_conestoga,.truck-trailer-icon-colors.ic_trailer_side-kit{color:#8785e8}.truck-trailer-icon-colors.ic_trailer_dryvan,.truck-trailer-icon-colors.ic_trailer_reefer{color:#fbc88b}.truck-trailer-icon-colors.ic_trailer_end-dump,.truck-trailer-icon-colors.ic_trailer_bottom-dump,.truck-trailer-icon-colors.ic_trailer_hopper{color:#ed9292}.truck-trailer-icon-colors.ic_trailer_tanker,.truck-trailer-icon-colors.ic_trailer_tanker-pneumatic{color:#ed93bb}.truck-trailer-icon-colors.ic_trailer_carhauler,.truck-trailer-icon-colors.ic_trailer_carhauler-stinger{color:#86c9c3}.sub-label{margin-left:auto;margin-right:22px;opacity:0;transition:margin .1s ease-in-out,opacity .1s ease-in-out;color:#6c6c6c}.app-input-label:has(.sub-label),.app-input-label:has(.accident-state){width:100%}.has-selected .sub-label{opacity:1}.dispatch-icon,.trailer-icon,.truck-icon{color:#919191;transition:color .1s cubic-bezier(.46,.03,.51,.95)}.truck-icon,.trailer-icon{width:42px}.truck-number{width:80px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.trailer-number{width:90px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.driver-name{max-width:170px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.dropdown-subitem-end{margin-left:auto;position:relative;height:26px;width:auto;display:flex;justify-content:right;align-items:center;font-family:Montserrat;font-weight:400;font-size:11px;line-height:18px;letter-spacing:0%;text-align:right;vertical-align:bottom}.end-item-base{position:absolute;display:flex;justify-content:right;align-items:center;width:max-content;gap:4px;color:#919191;transition:color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95);text-align:right}.dispatch-ltl{font-family:Montserrat;font-weight:700;font-size:11px;line-height:18px;letter-spacing:0%;text-align:right}.unassigned-ltl{margin-left:auto;display:flex;justify-content:right;align-items:center;width:max-content;gap:4px;color:#919191;transition:color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95);font-family:Montserrat;font-weight:700;font-size:11px;line-height:18px;letter-spacing:0%;text-align:right}.end-item-hover{position:absolute;display:flex;justify-content:right;align-items:center;gap:4px;width:max-content;opacity:0;color:#919191;transition:color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95)}.selected-end-item{margin-left:auto;font-family:Montserrat;font-weight:400;font-size:11px;line-height:18px;letter-spacing:0%;text-align:right;display:flex;justify-content:right;align-items:center;gap:4px}.group-item{font-family:Montserrat;font-weight:700!important;font-size:11px!important;line-height:18px;letter-spacing:0%;vertical-align:middle;text-transform:uppercase;background-color:#2f2f2f;color:#aaa!important}.group-item:not(:first-child){border-top:1px solid #424242}.group-item .group-icon{margin-left:auto;transform:rotate(180deg);transition:transform .1s cubic-bezier(.46,.03,.51,.95)}.group-item.unfolded{color:#fff!important}.group-item.unfolded .group-icon{transform:rotate(0)}.counter{background-color:#424242;padding:1px 4px;border-radius:60px;font-family:Montserrat;font-weight:600;font-size:11px;min-width:18px;line-height:14px;letter-spacing:0%;text-align:center;vertical-align:middle;color:#ffffffb2;transition:color .1s cubic-bezier(.46,.03,.51,.95)}.password-requirement{padding:6px;background-color:#fffffff2!important;box-shadow:0 0 4px #0006;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);overflow-y:hidden}.password-requirement p{font-family:Montserrat;font-weight:600;font-size:11px;line-height:14px;letter-spacing:0%;vertical-align:middle;color:#6c6c6c;font-style:italic}.password-requirement .icon,.password-requirement .icon-sm{width:14px!important;height:14px!important}.password-requirement .icon.checkmark,.password-requirement .checkmark.icon-sm{color:#ccc}.password-requirement .icon.cancel,.password-requirement .cancel.icon-sm{color:#e66767}.password-requirement ul{list-style-type:none;margin:6px 0 0;padding:0}.password-requirement ul li{color:#424242;font-size:11px;font-style:italic;font-weight:500;line-height:14px;display:flex;gap:4px}.password-requirement ul li.valid{color:#919191!important}.password-requirement ul li:not(:first-child){margin-top:6px}@media(hover:hover){.has-end-item:not(:has(.app-input:disabled)):hover .dropdown-selected{width:calc(100% - 44px)}}.has-end-item:not(:has(.app-input:disabled)):has(.app-input:focus-visible) .dropdown-selected{width:calc(100% - 44px)}.progress-bar{width:24px;height:8px;border-radius:2px;position:relative;transition:background-color .1s cubic-bezier(.46,.03,.51,.95)}.progress-bar:after{content:\"\";position:absolute;top:0;width:var(--progress);height:100%;transition:background-color .1s cubic-bezier(.46,.03,.51,.95)}.progress-bar.low{background-color:#df3c3c33}.progress-bar.low:after{background-color:#e66767}.progress-bar.medium{background-color:#f89b2e33}.progress-bar.medium:after{background-color:#fab15c}.progress-bar.high{background-color:#56b4ac33}.progress-bar.high:after{background-color:#56b4ac}.progress-bar.disable{background-color:#91919133}.progress-bar.disable:after{display:none}.app-input-container:has(.app-input:focus-visible) .selected-end-item .progress-bar{background-color:#fff!important}.full-icon{color:#919191}.fuelcard-number{width:216px}.fuelcard-brand{width:132px}.owner-ein{width:118px}.accident-name,.accident-unit,.accident-dob,.accident-cdl-number,.accident-vin,.accident-plate{flex-shrink:0}.accident-name>p,.accident-unit>p{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.accident-name{width:218px}.accident-unit{width:170px}.accident-dob,.accident-cdl-number,.accident-vin,.accident-plate{text-align:right;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.accident-dob{width:134px}.accident-cdl-number{width:140px}.accident-vin{width:182px}.accident-plate{width:140px}.accident-state{margin-left:auto;justify-content:flex-end;text-align:right}.app-input-label .accident-state{margin-right:22px;white-space:nowrap;transition:margin .1s ease-in-out}.has-multiple-dropdown.has-text{border-top-left-radius:0!important;border-top-right-radius:0!important}.multiple-container{display:flex;flex-wrap:wrap;gap:4px;padding:4px;border-top-left-radius:2px;border-top-right-radius:2px;position:relative;transition:background-color .1s ease-in-out;background-color:#e9effd}.multiple-container.hovered{background-color:#bed0f9}.multiple-container.hovered .multiple-selected{background-color:#e9effd}.multiple-container.focused{background-color:#0b49d1}.multiple-container.focused .multiple-selected{background-color:#3b73ed;color:#fff}.multiple-selected{background-color:#bed0f9;color:#2f2f2f;transition:background-color .1s ease-in-out,color .1s ease-in-out;display:flex;align-items:center;justify-content:space-between;width:100%;cursor:pointer;padding:2px 4px;-webkit-user-select:none;user-select:none;font-family:Montserrat;font-size:14px;font-weight:400;line-height:18px;width:209px;height:22px;border-radius:1px}.multiple-selected p{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}@media(hover:hover){.multiple-selected:hover{color:#2f2f2f!important;background-color:#fff!important}.multiple-selected:hover .multiple-remove-button{opacity:1}}.multiple-selected .multiple-remove-button{opacity:0;background-color:#6692f1;color:#fff;width:14px;height:14px}.multiple-selected .multiple-remove-button .multiple-remove-icon{width:12px;height:12px}.multiple-label{color:#424242;-webkit-user-select:none;user-select:none;pointer-events:none;font-family:Montserrat;font-size:11px;font-style:normal;font-weight:600;position:absolute;top:0;left:6px;transform:translateY(-14px)}.dropdown-group{border-radius:2px;transition:background-color .1s cubic-bezier(.46,.03,.51,.95),max-height .1s cubic-bezier(.46,.03,.51,.95),height .1s ease-in-out;margin-top:4px;max-height:var(--max-height);height:var(--max-height);overflow:hidden}.dropdown-group.no-items{cursor:default;pointer-events:none}.dropdown-group .group-item{outline:none;color:#fff!important;font-weight:400!important;font-size:14px!important;display:flex;transition:font-weight .1s ease-in-out,background-color .1s cubic-bezier(.46,.03,.51,.95),color .1s cubic-bezier(.46,.03,.51,.95);padding-left:6px;padding-right:6px}.dropdown-group .group-item.unfolded .counter{color:#fff}@media(hover:hover){.dropdown-group .group-item:hover .counter{color:#fff}}.dropdown-group .group-item.unfolded{font-weight:700!important}.dropdown-group .group-item .counter{margin-left:auto}.dropdown-group .group-item .group-icon{margin-left:0}.dropdown-group.active{background-color:#424242}@media(hover:hover){.dropdown-group.active .group-item:hover{background-color:#424242}}.dropdown-group.active .dropdown-item{background-color:#424242}@media(hover:hover){.dropdown-group:hover:not(.no-items){background-color:#424242}.dropdown-group:hover:not(.no-items) .group-item:hover{background-color:#424242}.dropdown-group:hover:not(.no-items) .dropdown-item{background-color:#424242}}.dropdown-group.active{padding:4px;padding-top:0!important}.dropdown-group.active .group-item{position:relative!important;padding-left:2px!important;padding-right:2px!important}@media(hover:hover){.dropdown-group .dropdown-item:not(.group-item):hover{background-color:#6c6c6c!important}}.fuel-stop-transaction-store{display:flex;gap:4px}.fuel-stop-transaction-store .fuel-stop-transaction-store-address{font-size:11px;color:#ccc;margin-left:auto}.fuel-stop-transaction-store .favorite-icon{color:#92b1f5;width:14px;height:14px}.fuel-stop-transaction-nostore{padding-left:2px;padding-right:2px}.hide-dropdown{opacity:0;pointer-events:none;transition:opacity .1s cubic-bezier(.46,.03,.51,.95)}.dropdown-menu:not(.hide-dropdown) .dropdown-menu-content{transition:max-height .2s cubic-bezier(.46,.03,.51,.95),opacity .2s cubic-bezier(.46,.03,.51,.95),height .1s ease-in-out;animation:dropdown-menu-opening .2s cubic-bezier(.46,.03,.51,.95)}.dropdown-menu:not(.hide-dropdown).animate-dropdown .dropdown-menu-content{max-height:var(--max-height);height:var(--max-height)}.closing:not(.hide-dropdown) .dropdown-menu-content{animation:dropdown-menu-closing .2s cubic-bezier(.46,.03,.51,.95);opacity:0;max-height:0}@keyframes dropdown-menu-opening{0%{max-height:0;opacity:0}to{max-height:244px;opacity:1}}@keyframes dropdown-menu-closing{0%{max-height:244px;opacity:1}to{max-height:0;opacity:0}}.app-input-container:has(.app-input:focus-visible).has-dropdown .loader.loading,.app-input-container:has(.app-input:focus-visible).has-text .loader.loading{opacity:1!important}.app-input-container:has(.app-input:focus-visible).has-dropdown.has-text .loader{transform:translate(-48px)}.loader{position:absolute;top:4px;right:0;transform:translate(-26px);pointer-events:none;z-index:1000;width:18px;height:18px;display:flex;align-items:center;justify-content:center;transition:opacity .1s ease-in-out,transform .1s ease-in-out;opacity:0}.loader-icon{width:14px;height:14px;animation:spin .8s ease-in-out infinite;transform-origin:center;display:flex;align-items:center;justify-content:center}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.size-22{height:22px}.size-22 .icon,.size-22 .icon-sm{height:14px!important;width:14px!important}.size-22 .bg-icon{height:14px!important;width:14px!important;padding:2px!important}.size-22 .icon-container{height:22px!important;padding-top:2px;padding-bottom:2px;padding-left:4px!important}.size-22 .app-input{padding-top:2px;padding-bottom:2px;padding-left:4px}@media(pointer:coarse){.size-22 .app-input{height:22px}}.size-22 .app-input-label{padding-top:2px;padding-bottom:2px;padding-left:4px}.size-22.has-icon .app-input-label{padding-left:0!important}.size-22 .app-input-icon{height:14px!important;width:14px!important}.size-22.has-text .app-input-label,.size-22:has(.app-input:focus-visible) .app-input-label{transform:translateY(-18px)}.size-22 .loader{top:2px;transform:translate(-22px)!important}.strikethrough .app-input,.strikethrough .dropdown-selected-content{text-decoration:line-through}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.split-option>p{max-width:calc(50% - 2px)}.split-option .dropdown-subitem-end{width:calc(50% - 2px)}.split-option .end-item-base,.split-option .end-item-hover{max-width:100%}.selected-end-item-truncate{max-width:50%}.truck-owner-unit{min-width:0}.truck-owner-unit .dropdown-content{max-width:none;min-width:0}.truck-owner-bullet{flex-shrink:0;color:#919191}\n"] }]
4838
+ ], template: "<!-- #region Variables -->\n@let valid =\n ngControl?.valid &&\n (ngControl?.touched || ngControl?.dirty) &&\n !isAdding() &&\n !isDisabled();\n@let invalid =\n ngControl?.invalid &&\n (ngControl?.touched || ngControl?.dirty) &&\n !isAdding() &&\n !isDisabled();\n@let subcontent =\n config().subcontent ||\n (config().dropdown === \"subcontent\" &&\n selectedOption() &&\n cast(selectedOption(), \"dropdownOption\")![config().optionLabel || \"label\"]);\n\n@let name = config().name;\n@let password = config().type === \"password\" || config().type === \"account\";\n\n@let optionLabel = this.config().optionLabel || \"label\";\n@let dropdownType = this.config().dropdown;\n\n@let focusedOptionIndex = keyboardNavigationState().singleIndex;\n@let groupedNavigationState = keyboardNavigationState().groupedNavigationState;\n\n@let tooltipClass =\n config().inverse\n ? \"tooltip input-tooltip tooltip-bg-white-700 tooltip-text-black-500\"\n : \"tooltip input-tooltip\";\n\n<!-- #region Multiple selection -->\n@if (config().dropdown === \"multiple\" && !!multipleSelectedOptions().length) {\n <div\n (pointerdown)=\"focus($event)\"\n (mouseenter)=\"toggleHovered(true)\"\n (mouseleave)=\"toggleHovered(false)\"\n class=\"multiple-container\"\n [class]=\"{\n focused: focused(),\n hovered: hovered(),\n }\"\n >\n <label class=\"multiple-label\">{{ name }}</label>\n\n @for (option of multipleSelectedOptions(); track $index) {\n <div class=\"multiple-selected\">\n <p>{{ cast(option, \"dropdownOption\")![optionLabel || \"label\"] }}</p>\n <button\n type=\"button\"\n class=\"\"\n (pointerdown)=\"handleOption(option, $event)\"\n [tabIndex]=\"-1\"\n ngbTooltip=\"Clear\"\n [placement]=\"'top'\"\n [tooltipClass]=\"tooltipClass\"\n [autoClose]=\"true\"\n #closeTooltip=\"ngbTooltip\"\n [container]=\"'body'\"\n >\n <svg-icon\n name=\"cai-cancel\"\n class=\"multiple-remove-button multiple-remove-icon bg-icon\"\n ></svg-icon>\n </button>\n </div>\n }\n </div>\n}\n<!-- #endregion -->\n\n@let hasFloatingError =\n invalid &&\n (config().errorBehavior === \"floating\" ||\n (!!config().inTable && config().placeholderBehavior !== \"static\"));\n\n<div\n class=\"app-input-container\"\n [class]=\"\n {\n config: config(),\n hideValidation: hideValidation(),\n isPasswordVisible: visible(),\n isInvalid: !!invalid || forceInvalidStyling(),\n isValid: !!valid && !forceInvalidStyling(),\n isHovered: hovered(),\n hasText: hasText(),\n isAdding: isAdding(),\n selectedOption: selectedOption(),\n } | inputClass\n \"\n ngbDropdown\n [autoClose]=\"false\"\n #dropdown=\"ngbDropdown\"\n dropdownClass=\"cai-dropdown\"\n #containerRef\n [ngbTooltip]=\"errorTooltip\"\n [disableTooltip]=\"!hasFloatingError\"\n [container]=\"'body'\"\n [placement]=\"['bottom', 'top']\"\n tooltipClass=\"tooltip tooltip-bg-red-500 input-tooltip \"\n (pointerdown)=\"focus($event)\"\n (mouseenter)=\"dropdownType === 'multiple' && toggleHovered(true)\"\n (mouseleave)=\"dropdownType === 'multiple' && toggleHovered(false)\"\n>\n @if (config().icon && !password && !config().withButtons) {\n <div\n class=\"icon-container\"\n (pointerdown)=\"focus($event)\"\n [class]=\"{\n 'colored-icon': config().iconColor,\n }\"\n [style.--icon-color]=\"config().iconColor || ''\"\n >\n <svg-icon class=\"icon\" [name]=\"config().icon || ''\"></svg-icon>\n @if (!config().noSeparator) {\n <div class=\"separator\"></div>\n }\n </div>\n }\n @if (password) {\n <div class=\"icon-container\" (pointerdown)=\"toggleVisibility($event)\">\n <div\n class=\"password-icons\"\n [ngbTooltip]=\"passwordTooltip\"\n [container]=\"'body'\"\n [tooltipClass]=\"tooltipClass\"\n [autoClose]=\"true\"\n [placement]=\"'top'\"\n [openDelay]=\"600\"\n >\n <svg-icon\n class=\"icon password-key hover-icon\"\n name=\"cai-password-key\"\n ></svg-icon>\n <svg-icon\n class=\"icon password-shown hover-icon\"\n name=\"cai-password-shown\"\n ></svg-icon>\n <svg-icon\n class=\"icon password-hidden hover-icon\"\n name=\"cai-password-hidden\"\n ></svg-icon>\n </div>\n <div class=\"separator\"></div>\n </div>\n }\n\n <input\n class=\"app-input\"\n [tabindex]=\"isDisabled() ? '-1' : '0'\"\n [type]=\"\n password && !isPartiallyMasked()\n ? visible()\n ? 'text'\n : 'password'\n : 'text'\n \"\n [required]=\"config().required\"\n [disabled]=\"isDisabled()\"\n (input)=\"onInput($event)\"\n (blur)=\"dispatchOnBlur()\"\n [id]=\"id()\"\n [attr.aria-label]=\"config().label\"\n [attr.name]=\"\n config().autocomplete ? config().autocomplete : randomAutocomplete()\n \"\n [placeholder]=\"config()?.placeholder || ''\"\n [autocomplete]=\"\n config().autocomplete ? config().autocomplete : randomAutocomplete()\n \"\n #inputRef\n [appPassword]=\"password\"\n [appMask]=\"config().mask || ''\"\n [phone]=\"config().type === 'phone'\"\n [isInternational]=\"config().isInternational || false\"\n [phoneCountries]=\"config().phoneCountries\"\n [defaultDialCode]=\"config().defaultDialCode\"\n [attr.inputmode]=\"config().type === 'phone' ? 'tel' : null\"\n [appNumberRangeList]=\"config().numberRangeList || false\"\n [reveal]=\"config().reveal || 0\"\n [hide]=\"config().hide || 0\"\n [account]=\"config().type === 'account'\"\n [visible]=\"visible()\"\n [appNumberFormat]=\"config().type === 'number'\"\n [isNumberFormattingDisabled]=\"config().isNumberFormattingDisabled || false\"\n [numberFormat]=\"config().numberFormat\"\n [disableDecimals]=\"config().disableDecimals || false\"\n [prefix]=\"config().prefix || ''\"\n [max]=\"config().max\"\n [clampToMax]=\"config().clampToMax || false\"\n (keydown)=\"handleKeydown($event)\"\n (focus)=\"onFocus($event)\"\n />\n @if (\n !(dropdownType === \"multiple\" && !!multipleSelectedOptions().length) &&\n config().placeholderBehavior !== \"hidden\"\n ) {\n <label\n class=\"app-input-label\"\n [class.placeholder-color]=\"this.config().placeholderColor\"\n [style.--placeholder-color]=\"this.config().placeholderColor || ''\"\n (click)=\"focus($event)\"\n >\n <!-- Truck Trailer Driver Dropdown label -->\n @if (dropdownType === \"dispatch\" || dropdownType === \"ftl-dispatch\") {\n <p class=\"truck-item app-input-name\">Truck</p>\n <p class=\"trailer-item\">Trailer</p>\n <p>Driver</p>\n <p class=\"sub-label\">Rate</p>\n }\n <!-- Split Load -->\n @else if (dropdownType === \"split-driver\") {\n <p class=\"app-input-name\">{{ name }}</p>\n <p class=\"sub-label\">Rate</p>\n } @else if (\n dropdownType === \"split-truck\" || dropdownType === \"split-trailer\"\n ) {\n <p class=\"app-input-name\">{{ name }}</p>\n <p class=\"sub-label\">Location</p>\n }\n <!-- Dropdown variants -->\n @else if (dropdownType === \"broker\") {\n <p class=\"app-input-name\">{{ name }}</p>\n <p class=\"sub-label\">Credit</p>\n } @else if (dropdownType === \"contact\") {\n <p class=\"app-input-name\">{{ name }}</p>\n <p class=\"sub-label\">Phone</p>\n } @else if (dropdownType === \"shipper\") {\n <p class=\"app-input-name\">{{ name }}</p>\n <p class=\"sub-label\">Address</p>\n } @else if (dropdownType === \"owner\") {\n <p class=\"owner-ein app-input-name\">EIN</p>\n <p class=\"app-input-name\">Company Name</p>\n } @else if (dropdownType === \"fuelcard\") {\n <p class=\"fuelcard-number app-input-name\">Card No.</p>\n <p class=\"fuelcard-brand app-input-name\">Provider</p>\n <p class=\"app-input-name\">Nickname</p>\n }\n <!-- Accident -->\n @else if (dropdownType === \"accident-driver\") {\n <p class=\"accident-name app-input-name\">{{ name }}</p>\n <p class=\"accident-dob app-input-name\">DOB</p>\n <p class=\"accident-cdl-number app-input-name\">CDL No.</p>\n <p class=\"accident-state app-input-name\">CDL State</p>\n } @else if (\n dropdownType === \"accident-truck\" || dropdownType === \"accident-trailer\"\n ) {\n <p class=\"accident-unit app-input-name\">{{ name }}</p>\n <p class=\"accident-vin app-input-name\">VIN</p>\n <p class=\"accident-plate app-input-name\">Lic. Plate No.</p>\n <p class=\"accident-state app-input-name\">Lic. State</p>\n }\n <!-- Default Dropdown label -->\n @else {\n <span class=\"app-input-name\">{{ name }}</span>\n }\n </label>\n }\n @if (config().type === \"number\" && config().withButtons) {\n <div class=\"number-container\">\n <div class=\"number-buttons\">\n <div class=\"separator\"></div>\n <div\n class=\"plus-button-container\"\n ngbTooltip=\"Add\"\n [tooltipClass]=\"tooltipClass\"\n [container]=\"'body'\"\n [autoClose]=\"true\"\n [openDelay]=\"600\"\n [placement]=\"'top'\"\n (pointerdown)=\"increment($event)\"\n >\n <svg-icon name=\"cai-plus\" class=\"bg-icon plus-icon\"></svg-icon>\n </div>\n <div\n class=\"minus-button-container\"\n ngbTooltip=\"Remove\"\n [placement]=\"'top'\"\n [container]=\"'body'\"\n [tooltipClass]=\"tooltipClass\"\n [autoClose]=\"true\"\n [openDelay]=\"600\"\n (pointerdown)=\"decrement($event)\"\n >\n <svg-icon name=\"cai-minus\" class=\"bg-icon minus-icon\"></svg-icon>\n </div>\n </div>\n </div>\n }\n @if (!config().inTable) {\n @if (!dropdownType) {\n <svg-icon\n name=\"cai-checkmark\"\n class=\"app-input-icon positive-icon\"\n ></svg-icon>\n <svg-icon\n name=\"cai-status-warning\"\n class=\"app-input-icon warning-icon\"\n ></svg-icon>\n }\n }\n\n @if (\n invalid &&\n config().errorBehavior !== \"hidden\" &&\n (ngControl?.errors | errorMessage: config().customErrors : config().numberFormat)[0] &&\n !(config().inTable && config().placeholderBehavior !== \"static\")\n ) {\n <div class=\"app-input-error\">\n {{ (ngControl?.errors | errorMessage: config().customErrors : config().numberFormat)[0] }}\n </div>\n }\n\n <!-- Accept button -->\n @if ((config().add && isAdding()) || config().isEdit) {\n <button\n type=\"button\"\n class=\"app-input-icon button-icon accept-button\"\n (pointerdown)=\"addOption()\"\n [tabIndex]=\"-1\"\n ngbTooltip=\"Confirm\"\n [openDelay]=\"600\"\n [placement]=\"'top'\"\n [tooltipClass]=\"tooltipClass\"\n [container]=\"'body'\"\n [autoClose]=\"true\"\n >\n <svg-icon class=\"bg-icon\" name=\"cai-checkmark\"></svg-icon>\n </button>\n }\n\n <!-- Cancel button -->\n <button\n type=\"button\"\n class=\"app-input-icon button-icon cancel-button\"\n (pointerdown)=\"reset($event)\"\n (mouseenter)=\"onClearHover(true)\"\n (mouseleave)=\"onClearHover(false)\"\n [tabIndex]=\"-1\"\n ngbTooltip=\"{{\n hasText()\n | clearTooltip\n : isAdding()\n : config().isEdit || false\n : config().placeholderBehavior || 'dynamic'\n : dropdownType === 'multiple'\n : config().hasResetButton\n : canTooltipBeVisible()\n }}\"\n [openDelay]=\"600\"\n [tooltipClass]=\"tooltipClass\"\n [placement]=\"'top'\"\n [container]=\"'body'\"\n [autoClose]=\"true\"\n #closeTooltip=\"ngbTooltip\"\n >\n @let iconName =\n config().hasResetButton\n ? \"cai-reset\"\n : config().removable\n ? \"cai-delete\"\n : \"cai-cancel\";\n <svg-icon class=\"bg-icon\" [name]=\"iconName\"></svg-icon>\n </button>\n\n <div class=\"dropdown-anchor\" ngbDropdownAnchor></div>\n <!-- Dropdown menu -->\n\n @let hasLoader = isLoading() !== undefined;\n\n @if (hasLoader) {\n <div class=\"loader\" [class.loading]=\"isLoading()\">\n <svg-icon name=\"cai-loader\" class=\"loader-icon\"></svg-icon>\n </div>\n }\n\n @if (dropdownType) {\n @let maxHeight =\n ((dropdownOptions()?.length || (showNoResults() ? 1 : 0)) +\n (config().add ? 1 : 0)) *\n 30 +\n 4;\n\n @let animateDropdown =\n dropdownType !== \"toll\" &&\n dropdownType !== \"fuel-stop-transaction\" &&\n dropdownType !== \"dispatch\" &&\n dropdownType !== \"ftl-dispatch\" &&\n dropdownType !== \"split-driver\" &&\n dropdownType !== \"split-truck\" &&\n dropdownType !== \"split-trailer\";\n\n @let unfilteredHeight =\n dropdownType === \"contact\" || !animateDropdown\n ? 244\n : ((options()?.length || (showNoResults() ? 1 : 0)) +\n (config().add ? 1 : 0)) *\n 30 +\n 4;\n\n <div\n ngbDropdownMenu\n class=\"dropdown-menu input-dropdown-menu\"\n [class]=\"{\n 'hide-dropdown':\n config().dropdownAutocomplete &&\n !dropdownOptions()?.length &&\n !(showNoResults() && value()),\n 'animate-dropdown': animateDropdown,\n 'size-22': config().size === 22,\n 'has-stroke': config().hasStroke,\n }\"\n [class.closing]=\"closing()\"\n [style.--unfiltered-height]=\"\n unfilteredHeight > 244 ? '244px' : unfilteredHeight + 'px'\n \"\n [style.--max-height]=\"maxHeight > 244 ? '244px' : maxHeight + 'px'\"\n [style.width.px]=\"containerWidth()\"\n [tabindex]=\"-1\"\n (pointerdown)=\"onDropdownBackgroundClick($event)\"\n (mousedown)=\"$event.preventDefault()\"\n (pointerup)=\"stopEventPropagation($event)\"\n (mouseup)=\"stopEventPropagation($event)\"\n (click)=\"stopEventPropagation($event)\"\n >\n <div\n class=\"dropdown-menu-content\"\n [tabindex]=\"-1\"\n caiInfiniteScroll\n [scrollThreshold]=\"50\"\n (scrolledToBottom)=\"onDropdownScrolledToBottom()\"\n >\n @if (config().add) {\n <button\n class=\"dropdown-item add-new\"\n [class.focused]=\"\n focusedOptionIndex === -1 ||\n groupedNavigationState?.groupIndex === -1\n \"\n (click)=\"handleAddingOption($event)\"\n >\n <p>ADD NEW</p>\n <svg-icon name=\"cai-plus\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n <ng-container *ngTemplateOutlet=\"dropdownMenuRef\"></ng-container>\n </div>\n </div>\n\n @if (!config().dropdownAutocomplete) {\n <div\n class=\"dropdown-icon-container\"\n [class.open]=\"dropdown.isOpen() && !closing()\"\n (pointerdown)=\"onDropdownIconClick($event)\"\n >\n <svg-icon\n name=\"cai-arrow-secondary-down\"\n class=\"dropdown-icon icon\"\n ></svg-icon>\n </div>\n }\n @let specialDropdown =\n dropdownType === \"dispatch\" ||\n dropdownType === \"ftl-dispatch\" ||\n dropdownType === \"broker\" ||\n dropdownType === \"contact\" ||\n dropdownType === \"shipper\" ||\n dropdownType === \"bank\" ||\n dropdownType === \"dispatcher\" ||\n dropdownType === \"driver-owner\" ||\n dropdownType === \"truck-owner\" ||\n dropdownType === \"truck\" ||\n dropdownType === \"trailer\" ||\n dropdownType === \"hazardous\" ||\n dropdownType === \"state\" ||\n dropdownType === \"owner\" ||\n dropdownType === \"fuelcard\" ||\n dropdownType === \"pm\" ||\n dropdownType === \"color\" ||\n dropdownType === \"make\" ||\n dropdownType === \"toll\" ||\n dropdownType === \"provider\" ||\n dropdownType === \"split-driver\" ||\n dropdownType === \"split-truck\" ||\n dropdownType === \"split-trailer\" ||\n dropdownType === \"accident-driver\" ||\n dropdownType === \"accident-truck\" ||\n dropdownType === \"accident-trailer\";\n <!-- Placeholder -->\n @if (specialDropdown) {\n <ng-container *ngTemplateOutlet=\"selectedOptionRef\"></ng-container>\n } @else if (\n (config().add || config().search) &&\n !inputRef.value &&\n !this.isAdding() &&\n dropdownType !== \"subcontent\"\n ) {\n <div class=\"dropdown-selected\">\n @if (config().placeholderBehavior === \"static\") {\n <p class=\"selected-label-hidden\">\n {{ name + (config().required ? \" *\" : \"\") }}\n </p>\n <p class=\"selected-text\">\n {{\n selectedOption() &&\n cast(selectedOption(), \"dropdownOption\")![\n optionLabel || \"label\"\n ]\n }}\n </p>\n } @else {\n @if (\n selectedOption() &&\n cast(selectedOption(), \"dropdownOption\")![\n optionLabel || \"label\"\n ] === \"Hazardous\"\n ) {\n <svg-icon name=\"cai-violation-hazmat\" class=\"icon\"></svg-icon>\n <p class=\"dropdown-selected-content\">\n {{\n selectedOption() &&\n cast(selectedOption(), \"dropdownOption\")![\n optionLabel || \"label\"\n ]\n }}\n </p>\n } @else {\n <p class=\"dropdown-selected-content\">\n {{\n selectedOption() &&\n cast(selectedOption(), \"dropdownOption\")![\n optionLabel || \"label\"\n ]\n }}\n </p>\n }\n }\n </div>\n }\n } @else if (config().isEdit && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <p class=\"dropdown-selected-content\">{{ name }}</p>\n </div>\n }\n @if (config().passwordRequirements) {\n <div\n class=\"dropdown-menu password-requirement\"\n ngbDropdownMenu\n [style.width.px]=\"containerWidth()\"\n [class.closing]=\"closing()\"\n (pointerup)=\"stopEventPropagation($event)\"\n (mouseup)=\"stopEventPropagation($event)\"\n (click)=\"stopEventPropagation($event)\"\n >\n <ng-container *ngTemplateOutlet=\"passwordRequirementsRef\"></ng-container>\n </div>\n }\n @if (subcontent) {\n <p class=\"subcontent\">\n @if (!(config().alignment === \"right\")) {\n <span class=\"subcontent-hide\"\n >{{\n config().search\n ? selectedOption() &&\n cast(selectedOption(), \"dropdownOption\")![\n optionLabel || \"label\"\n ]\n : inputRef.value\n }}\n </span>\n }\n {{ subcontent }}\n </p>\n }\n</div>\n\n<!-- #region Templates -->\n\n<!-- #region Password requirements -->\n<ng-template #passwordRequirementsRef>\n @let isMinLengthValid =\n !this.ngControl?.errors?.[\"minlength\"] && this.value();\n @let isHasNumberValid =\n !this.ngControl?.errors?.[\"hasNumber\"] && this.value();\n @let isHasSymbolValid =\n !this.ngControl?.errors?.[\"hasSymbol\"] && this.value();\n @let isHasUppercaseValid =\n !this.ngControl?.errors?.[\"hasUppercase\"] && this.value();\n\n <p>Strong Password Requirement</p>\n <ul>\n <li [class.valid]=\"isMinLengthValid\">\n <svg-icon\n [name]=\"isMinLengthValid ? 'cai-checkmark' : 'cai-cancel'\"\n [class]=\"isMinLengthValid ? 'checkmark' : 'cancel'\"\n class=\"icon\"\n ></svg-icon\n ><span>Minimum 8 characters</span>\n </li>\n <li [class.valid]=\"isHasNumberValid\">\n <svg-icon\n class=\"icon\"\n [name]=\"isHasNumberValid ? 'cai-checkmark' : 'cai-cancel'\"\n [class]=\"isHasNumberValid ? 'checkmark' : 'cancel'\"\n ></svg-icon\n ><span>One number</span>\n </li>\n <li [class.valid]=\"isHasSymbolValid\">\n <svg-icon\n class=\"icon\"\n [name]=\"isHasSymbolValid ? 'cai-checkmark' : 'cai-cancel'\"\n [class]=\"isHasSymbolValid ? 'checkmark' : 'cancel'\"\n ></svg-icon\n ><span>One symbol</span>\n </li>\n <li [class.valid]=\"isHasUppercaseValid\">\n <svg-icon\n class=\"icon\"\n [name]=\"isHasUppercaseValid ? 'cai-checkmark' : 'cai-cancel'\"\n [class]=\"isHasUppercaseValid ? 'checkmark' : 'cancel'\"\n ></svg-icon\n ><span>One upper-case letter</span>\n </li>\n </ul>\n</ng-template>\n<!-- #endregion -->\n@let search = config().search;\n\n<ng-template #dropdownMenuRef>\n @switch (dropdownType) {\n @case (\"dispatch\") {\n <ng-container *ngTemplateOutlet=\"dispatchesRef\"></ng-container>\n }\n @case (\"ftl-dispatch\") {\n <ng-container *ngTemplateOutlet=\"ftlDispatchRef\"></ng-container>\n }\n @case (\"broker\") {\n <ng-container *ngTemplateOutlet=\"brokerRef\"></ng-container>\n }\n @case (\"contact\") {\n <ng-container *ngTemplateOutlet=\"contactRef\"></ng-container>\n }\n @case (\"shipper\") {\n <ng-container *ngTemplateOutlet=\"shipperRef\"></ng-container>\n }\n @case (\"bank\") {\n <ng-container *ngTemplateOutlet=\"bankRef\"></ng-container>\n }\n @case (\"dispatcher\") {\n <ng-container *ngTemplateOutlet=\"dispatcherRef\"></ng-container>\n }\n @case (\"driver-owner\") {\n <ng-container *ngTemplateOutlet=\"driverOwnerRef\"></ng-container>\n }\n @case (\"truck-owner\") {\n <ng-container *ngTemplateOutlet=\"truckOwnerRef\"></ng-container>\n }\n @case (\"trailer\") {\n <ng-container *ngTemplateOutlet=\"trailerRef\"></ng-container>\n }\n @case (\"truck\") {\n <ng-container *ngTemplateOutlet=\"truckRef\"></ng-container>\n }\n @case (\"hazardous\") {\n <ng-container *ngTemplateOutlet=\"hazardousRef\"></ng-container>\n }\n @case (\"state\") {\n <ng-container *ngTemplateOutlet=\"stateRef\"></ng-container>\n }\n @case (\"owner\") {\n <ng-container *ngTemplateOutlet=\"ownerRef\"></ng-container>\n }\n @case (\"fuelcard\") {\n <ng-container *ngTemplateOutlet=\"fuelcardRef\"></ng-container>\n }\n @case (\"pm\") {\n <ng-container *ngTemplateOutlet=\"pmRef\"></ng-container>\n }\n @case (\"multiple\") {\n <ng-container *ngTemplateOutlet=\"multipleRef\"></ng-container>\n }\n @case (\"make\") {\n <ng-container *ngTemplateOutlet=\"makeRef\"></ng-container>\n }\n @case (\"toll\") {\n <ng-container *ngTemplateOutlet=\"tollRef\"></ng-container>\n }\n @case (\"color\") {\n <ng-container *ngTemplateOutlet=\"colorRef\"></ng-container>\n }\n @case (\"fuel-stop-transaction\") {\n <ng-container *ngTemplateOutlet=\"fuelStopTransactionRef\"></ng-container>\n }\n @case (\"provider\") {\n <ng-container *ngTemplateOutlet=\"providerRef\"></ng-container>\n }\n @case (\"split-driver\") {\n <ng-container *ngTemplateOutlet=\"splitDriverRef\"></ng-container>\n }\n @case (\"split-truck\") {\n <ng-container *ngTemplateOutlet=\"splitTruckRef\"></ng-container>\n }\n @case (\"split-trailer\") {\n <ng-container *ngTemplateOutlet=\"splitTrailerRef\"></ng-container>\n }\n @case (\"accident-driver\") {\n <ng-container *ngTemplateOutlet=\"accidentDriverRef\"></ng-container>\n }\n @case (\"accident-truck\") {\n <ng-container *ngTemplateOutlet=\"accidentTruckRef\"></ng-container>\n }\n @case (\"accident-trailer\") {\n <ng-container *ngTemplateOutlet=\"accidentTrailerRef\"></ng-container>\n }\n @case (\"subcontent\") {\n <ng-container *ngTemplateOutlet=\"dropdownOptionsRef\"></ng-container>\n }\n @default {\n <ng-container *ngTemplateOutlet=\"dropdownOptionsRef\"></ng-container>\n }\n }\n</ng-template>\n\n<ng-template #selectedOptionRef>\n @switch (dropdownType) {\n @case (\"dispatch\") {\n <ng-container *ngTemplateOutlet=\"selectedDispatchRef\"></ng-container>\n }\n @case (\"ftl-dispatch\") {\n <ng-container *ngTemplateOutlet=\"selectedDispatchRef\"></ng-container>\n }\n @case (\"broker\") {\n <ng-container *ngTemplateOutlet=\"selectedBrokerRef\"></ng-container>\n }\n @case (\"contact\") {\n <ng-container *ngTemplateOutlet=\"selectedContactRef\"></ng-container>\n }\n @case (\"shipper\") {\n <ng-container *ngTemplateOutlet=\"selectedShipperRef\"></ng-container>\n }\n @case (\"bank\") {\n <ng-container *ngTemplateOutlet=\"selectedBankRef\"></ng-container>\n }\n @case (\"dispatcher\") {\n <ng-container *ngTemplateOutlet=\"selectedDispatcherRef\"></ng-container>\n }\n @case (\"driver-owner\") {\n <ng-container *ngTemplateOutlet=\"selectedDriverOwnerRef\"></ng-container>\n }\n @case (\"truck-owner\") {\n <ng-container *ngTemplateOutlet=\"selectedTruckOwnerRef\"></ng-container>\n }\n @case (\"trailer\") {\n <ng-container *ngTemplateOutlet=\"selectedTrailerRef\"></ng-container>\n }\n @case (\"truck\") {\n <ng-container *ngTemplateOutlet=\"selectedTruckRef\"></ng-container>\n }\n @case (\"hazardous\") {\n <ng-container *ngTemplateOutlet=\"selectedHazardousRef\"></ng-container>\n }\n @case (\"state\") {\n <ng-container *ngTemplateOutlet=\"selectedStateRef\"></ng-container>\n }\n @case (\"owner\") {\n <ng-container *ngTemplateOutlet=\"selectedOwnerRef\"></ng-container>\n }\n @case (\"fuelcard\") {\n <ng-container *ngTemplateOutlet=\"selectedFuelcardRef\"></ng-container>\n }\n @case (\"pm\") {\n <ng-container *ngTemplateOutlet=\"selectedPmRef\"></ng-container>\n }\n @case (\"make\") {\n <ng-container *ngTemplateOutlet=\"selectedMakeRef\"></ng-container>\n }\n @case (\"toll\") {\n <ng-container *ngTemplateOutlet=\"selectedTollRef\"></ng-container>\n }\n @case (\"color\") {\n <ng-container *ngTemplateOutlet=\"selectedColorRef\"></ng-container>\n }\n @case (\"provider\") {\n <ng-container *ngTemplateOutlet=\"selectedProviderRef\"></ng-container>\n }\n @case (\"split-driver\") {\n <ng-container *ngTemplateOutlet=\"selectedSplitDriverRef\"></ng-container>\n }\n @case (\"split-truck\") {\n <ng-container *ngTemplateOutlet=\"selectedSplitTruckRef\"></ng-container>\n }\n @case (\"split-trailer\") {\n <ng-container *ngTemplateOutlet=\"selectedSplitTrailerRef\"></ng-container>\n }\n @case (\"accident-driver\") {\n <ng-container\n *ngTemplateOutlet=\"selectedAccidentDriverRef\"\n ></ng-container>\n }\n @case (\"accident-truck\") {\n <ng-container *ngTemplateOutlet=\"selectedAccidentTruckRef\"></ng-container>\n }\n @case (\"accident-trailer\") {\n <ng-container\n *ngTemplateOutlet=\"selectedAccidentTrailerRef\"\n ></ng-container>\n }\n }\n</ng-template>\n\n<!-- Standard dropdown -->\n<ng-template #dropdownOptionsRef>\n @if (dropdownOptions().length) {\n @for (option of dropdownOptions(); track $index; let index = $index) {\n @let dropdownOption = cast(option, \"dropdownOption\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ dropdownOption.id }}\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'dropdownOption')?.id === dropdownOption.id,\n focused: focusedOptionIndex === index,\n }\"\n (click)=\"handleOption(dropdownOption, $event)\"\n >\n @if (dropdownOption[optionLabel] === \"Hazardous\") {\n <svg-icon name=\"cai-violation-hazmat\" class=\"icon\"></svg-icon>\n }\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (dropdownOption[optionLabel] | highlightSearch: value())\n : dropdownOption[optionLabel]\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #multipleRef>\n @if (dropdownOptions().length) {\n @for (option of dropdownOptions(); track $index; let index = $index) {\n @let dropdownOption = cast(option, \"dropdownOption\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ dropdownOption.id }}\"\n (click)=\"handleOption(dropdownOption, $event)\"\n [class]=\"{\n selected: isSelectedOption(dropdownOption),\n focused: focusedOptionIndex === index,\n }\"\n >\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (dropdownOption[optionLabel] | highlightSearch: value())\n : dropdownOption[optionLabel]\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #bankRef>\n @if (dropdownOptions().length) {\n @for (bank of dropdownOptions(); track $index; let index = $index) {\n @let bankOption = cast(bank, \"bank\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ bankOption.id }}\"\n (click)=\"handleOption(bankOption, $event)\"\n [class]=\"{\n selected: cast(selectedOption(), 'bank')?.id === bankOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n @if (bankOption.logoName) {\n <svg-icon\n class=\"full-icon\"\n [name]=\"bankOption.logoName.slice(0, -4)\"\n ></svg-icon>\n } @else {\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (bankOption.name || '' | highlightSearch: value())\n : bankOption.name\n \"\n ></p>\n }\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #makeRef>\n @if (dropdownOptions().length) {\n @for (make of dropdownOptions(); track $index; let index = $index) {\n @let makeOption = cast(make, \"make\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ makeOption.id }}\"\n (click)=\"handleOption(makeOption, $event)\"\n [class]=\"{\n selected: cast(selectedOption(), 'make')?.id === makeOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n @if (makeOption.logoName) {\n <svg-icon\n class=\"full-icon\"\n [name]=\"makeOption.logoName.slice(0, -4)\"\n ></svg-icon>\n } @else {\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (makeOption.name || '' | highlightSearch: value())\n : makeOption.name\n \"\n ></p>\n }\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Broker -->\n<ng-template #brokerRef>\n @if (dropdownOptions().length) {\n @for (broker of dropdownOptions(); track $index; let index = $index) {\n @let brokerOption = cast(broker, \"broker\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"broker-{{ brokerOption.id }}\"\n (click)=\"\n !(brokerOption.dnu || brokerOption.ban) &&\n handleOption(brokerOption, $event)\n \"\n [class]=\"{\n selected: cast(selectedOption(), 'broker')?.id === brokerOption.id,\n focused: focusedOptionIndex === index,\n banned: brokerOption.dnu || brokerOption.ban,\n dnu: brokerOption.dnu,\n }\"\n >\n @if (brokerOption?.dnu || brokerOption?.ban) {\n <svg-icon name=\"cai-minus\" class=\"round-icon\"></svg-icon>\n } @else if (brokerOption?.fraudCheck) {\n <svg-icon\n name=\"cai-status-warning-lite\"\n class=\"fraud-icon\"\n ></svg-icon>\n }\n <p\n class=\"dropdown-content\"\n [innerHTML]=\"\n search\n ? (brokerOption.businessName || '' | highlightSearch: value())\n : brokerOption.businessName\n \"\n ></p>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-base\">\n @if (!brokerOption.creditLimit) {\n <p>Unlimited</p>\n } @else {\n <p>{{ brokerOption.availableCredit || 0 | currency }}</p>\n <div\n class=\"progress-bar\"\n [style.--progress]=\"\n (\n brokerOption\n | brokerProgress: brokerOption.dnu || brokerOption.ban\n ).activePercentageOfPaid + '%'\n \"\n [class]=\"\n (\n brokerOption\n | brokerProgress: brokerOption.dnu || brokerOption.ban\n ).status\n \"\n ></div>\n }\n </div>\n <div class=\"end-item-hover\">\n <p>\n {{ brokerOption.loadsCount }} |\n {{ brokerOption.availableCredit || 0 | currency }}\n </p>\n <svg-icon name=\"cai-load\" class=\"icon\"></svg-icon>\n </div>\n </div>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Contact dropdown -->\n<ng-template #contactRef>\n @if (dropdownOptions().length) {\n @for (contact of dropdownOptions(); track $index; let index = $index) {\n @let contactOption = cast(contact, \"contact\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item split-option\"\n id=\"contact-{{ contact.id }}\"\n (click)=\"handleOption(contact, $event)\"\n [class]=\"{\n selected: cast(selectedOption(), 'contact')?.id === contact.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <p\n class=\"text-truncate\"\n [innerHTML]=\"\n search\n ? (contactOption.contactName || '' | highlightSearch: value())\n : contactOption.contactName\n \"\n ></p>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-base\">\n <p class=\"text-truncate\">{{ contactOption.department?.name }}</p>\n </div>\n <div class=\"end-item-hover\">\n <p class=\"text-truncate\">\n {{ contactOption.phone }}\n {{\n contactOption.extensionPhone\n ? \"x\" + contactOption.extensionPhone\n : \"\"\n }}\n </p>\n </div>\n </div>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Owner dropdown -->\n<ng-template #ownerRef>\n @if (dropdownOptions().length) {\n @for (owner of dropdownOptions(); track $index; let index = $index) {\n @let ownerOption = cast(owner, \"owner\");\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"owner-{{ ownerOption?.id }}\"\n (click)=\"handleOption(ownerOption!, $event)\"\n [class]=\"{\n selected: cast(selectedOption(), 'owner')?.id === ownerOption?.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <p\n class=\"owner-ein\"\n [innerHTML]=\"\n search\n ? (ownerOption?.ein || '' | highlightSearch: value())\n : ownerOption?.ein\n \"\n ></p>\n <p\n [innerHTML]=\"\n search\n ? (ownerOption?.name || '' | highlightSearch: value())\n : ownerOption?.name\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Fuelcard dropdown -->\n<ng-template #fuelcardRef>\n @if (dropdownOptions().length) {\n @for (fuelcard of dropdownOptions(); track $index; let index = $index) {\n @let fuelcardOption = cast(fuelcard, \"fuelCard\");\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"fuelcard-{{ fuelcardOption?.id }}\"\n (click)=\"handleOption(fuelcardOption!, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'fuelCard')?.id === fuelcardOption?.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <p\n class=\"fuelcard-number\"\n [innerHTML]=\"\n search\n ? (fuelcardOption?.number || '' | highlightSearch: value())\n : fuelcardOption?.number\n \"\n ></p>\n <p\n class=\"fuelcard-brand\"\n [innerHTML]=\"\n search\n ? (fuelcardOption?.brand || '' | highlightSearch: value())\n : fuelcardOption?.brand\n \"\n ></p>\n <p\n [innerHTML]=\"\n search\n ? (fuelcardOption?.account || '' | highlightSearch: value())\n : fuelcardOption?.account\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Accident driver dropdown -->\n<ng-template #accidentDriverRef>\n @if (dropdownOptions().length) {\n @for (driver of dropdownOptions(); track $index; let index = $index) {\n @let driverOption = cast(driver, \"accidentDriver\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"accident-driver-{{ driverOption.id }}\"\n (click)=\"handleOption(driverOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'accidentDriver')?.id === driverOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <div class=\"dropdown-subitem accident-name\">\n <cai-avatar\n [driver]=\"driverOption\"\n [size]=\"18\"\n [inverse]=\"true\"\n [hover]=\"false\"\n ></cai-avatar>\n <p\n [innerHTML]=\"\n driverOption.firstName + ' ' + driverOption.lastName\n | highlightSearch: value()\n \"\n ></p>\n </div>\n <p class=\"accident-dob\">\n {{ driverOption.dateOfBirth | date: \"MM/dd/yy\" }}\n </p>\n <p\n class=\"accident-cdl-number\"\n [innerHTML]=\"driverOption.cdlNumber || '' | highlightSearch: value()\"\n ></p>\n <div class=\"dropdown-subitem accident-state\">\n <p\n [innerHTML]=\"\n driverOption.cdlState?.stateShortName || ''\n | highlightSearch: value()\n \"\n ></p>\n @if (\n driverOption.cdlState?.countryType?.name &&\n driverOption.cdlState?.stateShortName\n ) {\n <svg-icon\n class=\"icon\"\n [name]=\"\n 'cai-' +\n driverOption.cdlState?.countryType?.name?.toLowerCase() +\n '-' +\n driverOption.cdlState?.stateShortName?.toLowerCase()\n \"\n ></svg-icon>\n }\n </div>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Accident truck dropdown -->\n<ng-template #accidentTruckRef>\n @if (dropdownOptions().length) {\n @for (truck of dropdownOptions(); track $index; let index = $index) {\n @let truckOption = cast(truck, \"accidentTruck\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"accident-truck-{{ truckOption.id }}\"\n (click)=\"handleOption(truckOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'accidentTruck')?.id === truckOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <div class=\"dropdown-subitem accident-unit\">\n @if (truckOption.truckType?.logoName) {\n <svg-icon\n class=\"truck-icon truck-trailer-icon-colors\"\n [class]=\"truckOption.truckType!.logoName.slice(0, -4)\"\n [name]=\"truckOption.truckType!.logoName.slice(0, -4)\"\n ></svg-icon>\n }\n <p\n [innerHTML]=\"truckOption.truckNumber | highlightSearch: value()\"\n ></p>\n </div>\n <p\n class=\"accident-vin\"\n [innerHTML]=\"truckOption.vin || '' | highlightSearch: value()\"\n ></p>\n <p\n class=\"accident-plate\"\n [innerHTML]=\"\n truckOption.licensePlateNumber || '' | highlightSearch: value()\n \"\n ></p>\n <div class=\"dropdown-subitem accident-state\">\n <p\n [innerHTML]=\"\n truckOption.licenseState?.stateShortName || ''\n | highlightSearch: value()\n \"\n ></p>\n @if (\n truckOption.licenseState?.countryType?.name &&\n truckOption.licenseState?.stateShortName\n ) {\n <svg-icon\n class=\"icon\"\n [name]=\"\n 'cai-' +\n truckOption.licenseState?.countryType?.name?.toLowerCase() +\n '-' +\n truckOption.licenseState?.stateShortName?.toLowerCase()\n \"\n ></svg-icon>\n }\n </div>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Accident trailer dropdown -->\n<ng-template #accidentTrailerRef>\n @if (dropdownOptions().length) {\n @for (trailer of dropdownOptions(); track $index; let index = $index) {\n @let trailerOption = cast(trailer, \"accidentTrailer\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"accident-trailer-{{ trailerOption.id }}\"\n (click)=\"handleOption(trailerOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'accidentTrailer')?.id === trailerOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <div class=\"dropdown-subitem accident-unit\">\n @if (trailerOption.trailerType?.logoName) {\n <svg-icon\n class=\"trailer-icon truck-trailer-icon-colors\"\n [class]=\"trailerOption.trailerType!.logoName.slice(0, -4)\"\n [name]=\"trailerOption.trailerType!.logoName.slice(0, -4)\"\n ></svg-icon>\n }\n <p\n [innerHTML]=\"trailerOption.trailerNumber | highlightSearch: value()\"\n ></p>\n </div>\n <p\n class=\"accident-vin\"\n [innerHTML]=\"trailerOption.vin || '' | highlightSearch: value()\"\n ></p>\n <p\n class=\"accident-plate\"\n [innerHTML]=\"\n trailerOption.licensePlateNumber || '' | highlightSearch: value()\n \"\n ></p>\n <div class=\"dropdown-subitem accident-state\">\n <p\n [innerHTML]=\"\n trailerOption.licenseState?.stateShortName || ''\n | highlightSearch: value()\n \"\n ></p>\n @if (\n trailerOption.licenseState?.countryType?.name &&\n trailerOption.licenseState?.stateShortName\n ) {\n <svg-icon\n class=\"icon\"\n [name]=\"\n 'cai-' +\n trailerOption.licenseState?.countryType?.name?.toLowerCase() +\n '-' +\n trailerOption.licenseState?.stateShortName?.toLowerCase()\n \"\n ></svg-icon>\n }\n </div>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Shipper dropdown -->\n<ng-template #shipperRef>\n @if (dropdownOptions().length) {\n @for (shipper of dropdownOptions(); track $index; let index = $index) {\n @let shipperOption = cast(shipper, \"shipper\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item split-option\"\n id=\"shipper-{{ shipperOption.id }}\"\n (click)=\"handleOption(shipperOption, $event)\"\n [class]=\"{\n selected: cast(selectedOption(), 'shipper')?.id === shipperOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <p\n class=\"text-truncate\"\n [innerHTML]=\"\n search\n ? (shipperOption.businessName || '' | highlightSearch: value())\n : shipperOption.businessName\n \"\n ></p>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-base\">\n <p\n class=\"text-truncate\"\n [innerHTML]=\"\n search\n ? (shipperOption.address?.address || ''\n | highlightSearch: value())\n : shipperOption.address?.address\n \"\n ></p>\n </div>\n <div class=\"end-item-hover\">\n <p>\n {{ shipperOption.pickupCount }} Pickup |\n {{ shipperOption.deliveryCount }} Delivery\n </p>\n <svg-icon name=\"cai-load\" class=\"icon\"></svg-icon>\n </div>\n </div>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Dispatch dropdown -->\n<ng-template #dispatchesRef>\n @if (dropdownOptions().length) {\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n (click)=\"resetSelection()\"\n [class]=\"{\n selected: !selectedOption(),\n }\"\n >\n <p>Unassigned</p>\n <div class=\"unassigned-ltl\">\n <p>{{ unassignedCount() }}</p>\n <svg-icon name=\"cai-ltl-single\" class=\"icon-sm\"></svg-icon>\n </div>\n </button>\n @for (\n dispatchBoard of dropdownOptions();\n track dispatchBoard.id;\n let groupIndex = $index\n ) {\n <!-- Temporary variant since BE doesn't support boards -->\n @let dispatchBoardOption = cast(dispatchBoard, \"dispatchBoard\")!;\n\n @let isNoBoardsVariant =\n dispatchBoardOption.dispatcher === \"NOBOARDSVARIANT\";\n @if (dispatchBoardOption.count > 0) {\n @if (!isNoBoardsVariant) {\n @let isGroupFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === 0;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item\"\n (click)=\"fold(dispatchBoardOption.id, $event)\"\n [class]=\"{\n unfolded: dispatchBoardOption.dispatches?.length || 0 > 0,\n focused: isGroupFocused,\n }\"\n >\n <p>\n {{\n dispatchBoardOption.teamBoard\n ? \"Team Board\"\n : dispatchBoardOption.dispatcher\n }}\n </p>\n <p class=\"counter\">{{ dispatchBoardOption.count }}</p>\n <svg-icon\n name=\"cai-arrow-primary-up\"\n class=\"group-icon icon\"\n ></svg-icon>\n </button>\n }\n @if (\n dispatchBoardOption.dispatches &&\n dispatchBoardOption.dispatches.length > 0\n ) {\n @for (\n dispatch of dispatchBoardOption.dispatches;\n track dispatch.id;\n let optionIndex = $index\n ) {\n @let isOptionFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === optionIndex + 1;\n <!-- +1 since optionIndex is 0 for the group item header -->\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n (click)=\"handleOption(dispatch, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'dispatch')?.id === dispatch.id,\n focused: isOptionFocused,\n }\"\n >\n <div class=\"dropdown-subitem truck-item\">\n <svg-icon\n class=\"truck-icon truck-trailer-icon-colors\"\n [class]=\"dispatch.truck.truckType.logoName.slice(0, -4)\"\n [name]=\"dispatch.truck.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p\n class=\"truck-number\"\n [innerHTML]=\"\n dispatch.truck.truckNumber | highlightSearch: value()\n \"\n ></p>\n </div>\n <div class=\"dropdown-subitem trailer-item\">\n @if (dispatch.trailer) {\n <svg-icon\n class=\"trailer-icon truck-trailer-icon-colors\"\n [class]=\"dispatch.trailer.trailerType.logoName.slice(0, -4)\"\n [name]=\"dispatch.trailer.trailerType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p\n class=\"trailer-number\"\n [innerHTML]=\"\n dispatch.trailer.trailerNumber | highlightSearch: value()\n \"\n ></p>\n }\n </div>\n <div class=\"dropdown-subitem\">\n @if (dispatch.coDriver) {\n <svg-icon class=\"dispatch-icon\" name=\"cai-people\"></svg-icon>\n <p\n class=\"driver-name\"\n [innerHTML]=\"\n dispatch.driver.firstName +\n ' & ' +\n dispatch.coDriver.firstName | highlightSearch: value()\n \"\n ></p>\n } @else {\n <cai-avatar\n [driver]=\"dispatch.driver\"\n [size]=\"18\"\n [inverse]=\"true\"\n [hover]=\"false\"\n ></cai-avatar>\n <p\n class=\"driver-name\"\n [innerHTML]=\"\n dispatch.driver.firstName + ' ' + dispatch.driver.lastName\n | highlightSearch: value()\n \"\n ></p>\n }\n </div>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-hover\">\n <p>{{ dispatch.payType }}</p>\n <svg-icon name=\"cai-driver\" class=\"icon-sm\"></svg-icon>\n </div>\n <div class=\"end-item-base dispatch-ltl\">\n <p>{{ dispatch.numberOfSingleLtlLoads }}</p>\n <svg-icon name=\"cai-ltl-single\" class=\"icon-sm\"></svg-icon>\n </div>\n </div>\n </button>\n }\n } @else if (isNoBoardsVariant) {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n }\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- ftl dispatch dropdown -->\n<ng-template #ftlDispatchRef>\n @if (dropdownOptions().length) {\n @for (\n dispatchBoard of dropdownOptions();\n track dispatchBoard.id;\n let groupIndex = $index\n ) {\n @let dispatchBoardOption = cast(dispatchBoard, \"dispatchBoard\")!;\n @let isGroupFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === 0;\n @let isNoBoardsVariant =\n dispatchBoardOption.dispatcher === \"NOBOARDSVARIANT\";\n @if (dispatchBoardOption.count > 0) {\n @if (!isNoBoardsVariant) {\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item\"\n (click)=\"fold(dispatchBoardOption.id, $event)\"\n [class]=\"{\n unfolded: dispatchBoardOption.dispatches?.length || 0 > 0,\n focused: isGroupFocused,\n }\"\n >\n <p>\n {{\n dispatchBoardOption.teamBoard\n ? \"Team Board\"\n : dispatchBoardOption.dispatcher\n }}\n </p>\n <p class=\"counter\">{{ dispatchBoardOption.count }}</p>\n <svg-icon\n name=\"cai-arrow-primary-up\"\n class=\"group-icon icon\"\n ></svg-icon>\n </button>\n }\n @if (\n dispatchBoardOption.dispatches &&\n dispatchBoardOption.dispatches.length > 0\n ) {\n @for (\n dispatch of dispatchBoardOption.dispatches;\n track dispatch.id;\n let optionIndex = $index\n ) {\n @let isOptionFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === optionIndex + 1;\n <!-- +1 since optionIndex is 0 for the group item header -->\n <button\n class=\"dropdown-item\"\n (click)=\"handleOption(dispatch, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'dispatch')?.id === dispatch.id,\n focused: isOptionFocused,\n }\"\n >\n <div class=\"dropdown-subitem truck-item\">\n <svg-icon\n class=\"truck-icon truck-trailer-icon-colors\"\n [class]=\"dispatch.truck.truckType.logoName.slice(0, -4)\"\n [name]=\"dispatch.truck.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p\n class=\"truck-number\"\n [innerHTML]=\"\n dispatch.truck.truckNumber | highlightSearch: value()\n \"\n ></p>\n </div>\n <div class=\"dropdown-subitem trailer-item\">\n @if (dispatch.trailer) {\n <svg-icon\n class=\"trailer-icon truck-trailer-icon-colors\"\n [class]=\"dispatch.trailer.trailerType.logoName.slice(0, -4)\"\n [name]=\"dispatch.trailer.trailerType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p\n class=\"trailer-number\"\n [innerHTML]=\"\n dispatch.trailer.trailerNumber | highlightSearch: value()\n \"\n ></p>\n }\n </div>\n <div class=\"dropdown-subitem\">\n @if (dispatch.coDriver) {\n <svg-icon class=\"dispatch-icon\" name=\"cai-people\"></svg-icon>\n <p\n class=\"driver-name\"\n [innerHTML]=\"\n dispatch.driver.firstName +\n ' & ' +\n dispatch.coDriver.firstName | highlightSearch: value()\n \"\n ></p>\n } @else {\n <cai-avatar\n [driver]=\"dispatch.driver\"\n [size]=\"18\"\n [inverse]=\"true\"\n [hover]=\"false\"\n ></cai-avatar>\n <p\n class=\"driver-name\"\n [innerHTML]=\"\n dispatch.driver.firstName + ' ' + dispatch.driver.lastName\n | highlightSearch: value()\n \"\n ></p>\n }\n </div>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-hover\">\n <!-- Load Status -->\n @let dispatchStatus = dispatch.status | dispatchStatus;\n @if (dispatchStatus) {\n <div\n class=\"dispatch-status\"\n [class]=\"dispatchStatus.statusClass\"\n >\n @if (dispatchStatus.badge) {\n <p\n class=\"status-block\"\n [class]=\"dispatchStatus.badge.color\"\n >\n {{ dispatchStatus.badge.text }}\n </p>\n }\n {{ dispatchStatus.label }}\n @if (dispatch.status?.statusCheckInNumber) {\n <p class=\"status-block\">\n {{ dispatch.status?.statusCheckInNumber }}\n </p>\n }\n </div>\n <p class=\"dispatch-separator\">|</p>\n }\n <p class=\"dispatch-load-count\">\n {{ dispatch?.pendingLoadCount }}\n </p>\n <svg-icon name=\"cai-load\" class=\"icon-sm\"></svg-icon>\n </div>\n <div class=\"end-item-base\">\n <p>{{ dispatch.payType }}</p>\n <svg-icon name=\"cai-driver\" class=\"icon-sm\"></svg-icon>\n </div>\n </div>\n </button>\n }\n } @else if (isNoBoardsVariant) {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n }\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #splitDriverRef>\n @if (dropdownOptions().length) {\n @for (splitDriverBoard of dropdownOptions(); track splitDriverBoard.id) {\n @let driverBoard = cast(splitDriverBoard, \"splitDriverBoard\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item\"\n (click)=\"fold(driverBoard.id, $event)\"\n [class]=\"{\n unfolded: (driverBoard.drivers?.length ?? 0) > 0,\n }\"\n >\n <p>\n {{\n driverBoard.isTeamBoard ? \"Team Board\" : driverBoard.dispatcherName\n }}\n </p>\n <!-- TODO: Change to count once BE is fixed -->\n <p class=\"counter\">{{ driverBoard.drivers?.length || 0 }}</p>\n <svg-icon\n name=\"cai-arrow-primary-up\"\n class=\"group-icon icon\"\n ></svg-icon>\n </button>\n @for (driver of driverBoard.drivers || []; track driver.id) {\n @let driverOption = cast(driver, \"splitDriver\")!;\n <button\n class=\"dropdown-item\"\n (click)=\"handleOption(driverOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'splitDriver')?.id === driverOption.id,\n }\"\n >\n <div class=\"dropdown-subitem\">\n <div class=\"dropdown-avatar\">\n <cai-avatar\n [driver]=\"driverOption\"\n [size]=\"18\"\n [inverse]=\"true\"\n [hover]=\"false\"\n ></cai-avatar>\n </div>\n <p\n class=\"driver-name\"\n [innerHTML]=\"\n driverOption.firstName + ' ' + driverOption.lastName\n | highlightSearch: value()\n \"\n ></p>\n </div>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-hover\">\n @let dispatchStatus =\n driverOption.dispatchStatus | dispatchStatus;\n @if (dispatchStatus) {\n <div\n class=\"dispatch-status\"\n [class]=\"dispatchStatus.statusClass\"\n >\n @if (dispatchStatus.badge) {\n <p\n class=\"status-block\"\n [class]=\"dispatchStatus.badge.color\"\n >\n {{ dispatchStatus.badge.text }}\n </p>\n }\n {{ dispatchStatus.label }}\n @if (driverOption.dispatchStatus?.statusCheckInNumber) {\n <p class=\"status-block\">\n {{ driverOption.dispatchStatus?.statusCheckInNumber }}\n </p>\n }\n </div>\n <p class=\"dispatch-separator\">|</p>\n }\n <p class=\"dispatch-load-count\">\n {{ driverOption.pendingLoadsCount }}\n </p>\n <svg-icon name=\"cai-load\" class=\"icon-sm\"></svg-icon>\n </div>\n <div class=\"end-item-base\">\n <p>{{ driverOption.payTypeValue }}</p>\n </div>\n </div>\n </button>\n }\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #splitTruckRef>\n @if (dropdownOptions().length) {\n @for (splitTruckBoard of dropdownOptions(); track splitTruckBoard.id) {\n @let truckBoard = cast(splitTruckBoard, \"splitTruckBoard\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item\"\n (click)=\"fold(truckBoard.id, $event)\"\n [class]=\"{\n unfolded: (truckBoard.trucks?.length ?? 0) > 0,\n }\"\n >\n <p>\n {{\n truckBoard.isTeamBoard ? \"Team Board\" : truckBoard.dispatcherName\n }}\n </p>\n <!-- TODO: Change to count once BE is fixed -->\n <p class=\"counter\">{{ truckBoard.trucks?.length || 0 }}</p>\n <svg-icon\n name=\"cai-arrow-primary-up\"\n class=\"group-icon icon\"\n ></svg-icon>\n </button>\n @for (truck of truckBoard.trucks || []; track truck.id) {\n @let truckOption = cast(truck, \"splitTruck\")!;\n <button\n class=\"dropdown-item\"\n (click)=\"handleOption(truckOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'splitTruck')?.id === truckOption.id,\n }\"\n >\n <div class=\"dropdown-subitem truck-item\">\n <svg-icon\n class=\"truck-icon\"\n [style.--truck-color]=\"truckOption.color?.code || ''\"\n [name]=\"truckOption.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p\n class=\"truck-number\"\n [innerHTML]=\"truckOption.truckNumber | highlightSearch: value()\"\n ></p>\n </div>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-hover\">\n @let dispatchStatus = truckOption.dispatchStatus | dispatchStatus;\n @if (dispatchStatus) {\n <div\n class=\"dispatch-status\"\n [class]=\"dispatchStatus.statusClass\"\n >\n @if (dispatchStatus.badge) {\n <p\n class=\"status-block\"\n [class]=\"dispatchStatus.badge.color\"\n >\n {{ dispatchStatus.badge.text }}\n </p>\n }\n {{ dispatchStatus.label }}\n @if (truckOption.dispatchStatus?.statusCheckInNumber) {\n <p class=\"status-block\">\n {{ truckOption.dispatchStatus?.statusCheckInNumber }}\n </p>\n }\n </div>\n <p class=\"dispatch-separator\">|</p>\n }\n <p class=\"dispatch-load-count\">\n {{ truckOption.pendingLoadsCount }}\n </p>\n <svg-icon name=\"cai-load\" class=\"icon-sm\"></svg-icon>\n </div>\n <div class=\"end-item-base\">\n @if (\n truckOption.location?.city &&\n truckOption.location?.stateShortName\n ) {\n <p>\n {{ truckOption.location?.city }},\n {{ truckOption.location?.stateShortName }}\n </p>\n }\n </div>\n </div>\n </button>\n }\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #splitTrailerRef>\n @if (dropdownOptions().length) {\n @for (splitTrailerBoard of dropdownOptions(); track splitTrailerBoard.id) {\n @let trailerBoard = cast(splitTrailerBoard, \"splitTrailerBoard\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item\"\n (click)=\"fold(trailerBoard.id, $event)\"\n [class]=\"{\n unfolded: (trailerBoard.trailers?.length ?? 0) > 0,\n }\"\n >\n <p>\n {{\n trailerBoard.isTeamBoard\n ? \"Team Board\"\n : trailerBoard.dispatcherName\n }}\n </p>\n <!-- TODO: Change to count once BE is fixed -->\n <p class=\"counter\">{{ trailerBoard.trailers?.length || 0 }}</p>\n <svg-icon\n name=\"cai-arrow-primary-up\"\n class=\"group-icon icon\"\n ></svg-icon>\n </button>\n @for (trailer of trailerBoard.trailers || []; track trailer.id) {\n @let trailerOption = cast(trailer, \"splitTrailer\")!;\n <button\n class=\"dropdown-item\"\n (click)=\"handleOption(trailerOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'splitTrailer')?.id === trailerOption.id,\n }\"\n >\n <div class=\"dropdown-subitem trailer-item\">\n <svg-icon\n class=\"trailer-icon\"\n [style.--trailer-color]=\"trailerOption.color?.code || ''\"\n [name]=\"trailerOption.trailerType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p\n class=\"trailer-number\"\n [innerHTML]=\"\n trailerOption.trailerNumber | highlightSearch: value()\n \"\n ></p>\n </div>\n <div class=\"dropdown-subitem-end\">\n <div class=\"end-item-hover\">\n @let dispatchStatus =\n trailerOption.dispatchStatus | dispatchStatus;\n @if (dispatchStatus) {\n <div\n class=\"dispatch-status\"\n [class]=\"dispatchStatus.statusClass\"\n >\n @if (dispatchStatus.badge) {\n <p\n class=\"status-block\"\n [class]=\"dispatchStatus.badge.color\"\n >\n {{ dispatchStatus.badge.text }}\n </p>\n }\n {{ dispatchStatus.label }}\n @if (trailerOption.dispatchStatus?.statusCheckInNumber) {\n <p class=\"status-block\">\n {{ trailerOption.dispatchStatus?.statusCheckInNumber }}\n </p>\n }\n </div>\n <p class=\"dispatch-separator\">|</p>\n }\n <p class=\"dispatch-load-count\">\n {{ trailerOption.pendingLoadsCount }}\n </p>\n <svg-icon name=\"cai-load\" class=\"icon-sm\"></svg-icon>\n </div>\n <div class=\"end-item-base\">\n @if (\n trailerOption.location?.city &&\n trailerOption.location?.stateShortName\n ) {\n <p>\n {{ trailerOption.location?.city }},\n {{ trailerOption.location?.stateShortName }}\n </p>\n }\n </div>\n </div>\n </button>\n }\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #tollRef>\n @if (dropdownOptions().length) {\n @for (toll of dropdownOptions(); track $index; let groupIndex = $index) {\n @let tollOption = cast(toll, \"tollOption\")!;\n @let isGroupFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === 0;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item pe-none\"\n [class]=\"{\n unfolded: tollOption.tollTransponders?.length || 0 > 0,\n focused: isGroupFocused,\n }\"\n >\n <p>\n {{ tollOption.groupName }}\n </p>\n </button>\n @let tollTransponders = tollOption.tollTransponders || [];\n @for (\n tollTransponder of tollTransponders;\n track tollTransponder.id;\n let optionIndex = $index\n ) {\n @let isOptionFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === optionIndex + 1;\n <!-- +1 since optionIndex is 0 for the group item header -->\n <button\n class=\"dropdown-item\"\n (click)=\"handleOption(tollTransponder, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'tollTransponderOption')?.id ===\n tollTransponder.id,\n focused: isOptionFocused,\n }\"\n >\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (tollTransponder.name || '' | highlightSearch: value())\n : tollTransponder.name\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Dispatcher dropdown -->\n\n<ng-template #dispatcherRef>\n @if (dropdownOptions().length) {\n @for (dispatcher of dropdownOptions(); track $index; let index = $index) {\n @let dispatcherOption = cast(dispatcher, \"dispatcher\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ dispatcherOption.id }}\"\n (click)=\"handleOption(dispatcherOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'dispatcher')?.id === dispatcherOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <cai-avatar\n [driver]=\"{\n id: dispatcherOption?.id || 0,\n firstName: (dispatcherOption?.fullName || ' ').split(' ')[0] || '',\n lastName: (dispatcherOption?.fullName || ' ').split(' ')[1] || '',\n avatarFile: dispatcherOption?.avatarFile,\n colorFlag: dispatcherOption?.colorFlag,\n }\"\n [rounded]=\"!config().squareAvatar\"\n [hover]=\"false\"\n ></cai-avatar>\n <p\n class=\"dropdown-content-hazardous\"\n [innerHTML]=\"\n search\n ? (dispatcherOption.fullName || '' | highlightSearch: value())\n : dispatcherOption.fullName\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Driver Owner dropdown -->\n\n<ng-template #driverOwnerRef>\n @if (dropdownOptions().length) {\n @for (driverOwner of dropdownOptions(); track $index; let index = $index) {\n @let driverOwnerOption = cast(driverOwner, \"driverOwner\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ driverOwnerOption.id }}\"\n (click)=\"handleOption(driverOwnerOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'driverOwner')?.id === driverOwnerOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <cai-avatar\n [driver]=\"{\n id: driverOwnerOption?.id || 0,\n firstName: (driverOwnerOption?.fullName || ' ').split(' ')[0] || '',\n lastName: (driverOwnerOption?.fullName || ' ').split(' ')[1] || '',\n avatarFile: driverOwnerOption?.avatarFile,\n colorFlag: driverOwnerOption?.colorFlag,\n owner: driverOwnerOption?.driverType === 'OwnerOperator',\n driverType: {\n id: 0,\n name: (driverOwnerOption?.driverType | driverTypeLabel),\n },\n }\"\n [rounded]=\"false\"\n [hover]=\"false\"\n ></cai-avatar>\n <p\n class=\"dropdown-content\"\n [innerHTML]=\"\n search\n ? (driverOwnerOption.fullName || '' | highlightSearch: value())\n : driverOwnerOption.fullName\n \"\n ></p>\n <div class=\"dropdown-subitem-end\">\n <p class=\"driver-type\">\n {{ driverOwnerOption.driverType | driverTypeLabel }}\n </p>\n </div>\n <svg-icon\n name=\"cai-checkmark\"\n class=\"dropdown-item-icon no-margin\"\n ></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Truck Owner dropdown -->\n\n<ng-template #truckOwnerRef>\n @if (dropdownOptions().length) {\n @for (truckOwner of dropdownOptions(); track $index; let index = $index) {\n @let truckOwnerOption = cast(truckOwner, \"truckOwner\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ truckOwnerOption.id }}\"\n (click)=\"handleOption(truckOwnerOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'truckOwner')?.id === truckOwnerOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <div class=\"dropdown-subitem truck-owner-unit\">\n @if (truckOwnerOption.truckType?.logoName) {\n <svg-icon\n class=\"truck-icon truck-trailer-icon-colors\"\n [class]=\"truckOwnerOption.truckType.logoName.slice(0, -4)\"\n [name]=\"truckOwnerOption.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n }\n <p\n class=\"dropdown-content\"\n [innerHTML]=\"\n search\n ? (truckOwnerOption.truckNumber || ''\n | highlightSearch: value())\n : truckOwnerOption.truckNumber\n \"\n ></p>\n @if (truckOwnerOption.model) {\n <p class=\"truck-owner-bullet\">\u2022</p>\n <p\n class=\"dropdown-content\"\n [innerHTML]=\"\n search\n ? (truckOwnerOption.model | highlightSearch: value())\n : truckOwnerOption.model\n \"\n ></p>\n }\n </div>\n <div class=\"dropdown-subitem-end\">\n <p class=\"driver-type\">\n {{ truckOwnerOption.driverType | truckOwnershipLabel }}\n </p>\n </div>\n <svg-icon\n name=\"cai-checkmark\"\n class=\"dropdown-item-icon no-margin\"\n ></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #truckRef>\n @if (dropdownOptions().length) {\n @for (truck of dropdownOptions(); track $index; let index = $index) {\n @let truckOption = cast(truck, \"truckOption\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ truckOption.id }}\"\n (click)=\"handleOption(truckOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'truckOption')?.id === truckOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (truckOption.name || '' | highlightSearch: value())\n : truckOption.name\n \"\n ></p>\n <svg-icon\n class=\"truck-trailer-option truck-trailer-icon-colors\"\n [class]=\"truckOption.logoName.slice(0, -4)\"\n [name]=\"truckOption.logoName.slice(0, -4)\"\n ></svg-icon>\n <svg-icon\n name=\"cai-checkmark\"\n class=\"dropdown-item-icon no-margin\"\n ></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #trailerRef>\n @if (dropdownOptions().length) {\n @for (truck of dropdownOptions(); track $index; let index = $index) {\n @let trailerOption = cast(truck, \"trailerOption\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ trailerOption.id }}\"\n (click)=\"handleOption(trailerOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'trailerOption')?.id === trailerOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (trailerOption.name || '' | highlightSearch: value())\n : trailerOption.name\n \"\n ></p>\n\n <svg-icon\n class=\"truck-trailer-option truck-trailer-icon-colors\"\n [class]=\"trailerOption.logoName.slice(0, -4)\"\n [name]=\"trailerOption.logoName.slice(0, -4)\"\n ></svg-icon>\n <svg-icon\n name=\"cai-checkmark\"\n class=\"dropdown-item-icon no-margin\"\n ></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #providerRef>\n @if (dropdownOptions().length) {\n @for (provider of dropdownOptions(); track $index; let index = $index) {\n @let providerOption = cast(provider, \"provider\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ providerOption?.id }}\"\n (click)=\"handleOption(providerOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'provider')?.id === providerOption?.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <svg-icon\n class=\"full-icon\"\n [name]=\"'cai-' + providerOption?.name?.toLowerCase()\"\n ></svg-icon>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- Hazardous dropdown -->\n<ng-template #hazardousRef>\n @if (dropdownOptions().length) {\n @for (hazardous of dropdownOptions(); track $index; let index = $index) {\n @let hazardousOption = cast(hazardous, \"hazardous\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ hazardousOption.id }}\"\n (click)=\"handleOption(hazardousOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'hazardous')?.id === hazardousOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <svg-icon [name]=\"hazardousOption.logoName?.slice(0, -4)\"></svg-icon>\n <p\n class=\"dropdown-content-hazardous\"\n [innerHTML]=\"\n search\n ? (hazardousOption.description || '' | highlightSearch: value())\n : hazardousOption.description\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #pmRef>\n @if (dropdownOptions().length) {\n @for (pm of dropdownOptions(); track $index; let index = $index) {\n @let pmOption = cast(pm, \"pmOption\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ pmOption.id }}\"\n (click)=\"handleOption(pmOption, $event)\"\n [class]=\"{\n selected: cast(selectedOption(), 'pmOption')?.id === pmOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <svg-icon\n class=\"icon\"\n [name]=\"pmOption.title | remapPmIcons\"\n ></svg-icon>\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (pmOption.title || '' | highlightSearch: value())\n : pmOption.title\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #colorRef>\n @if (dropdownOptions().length) {\n @for (color of dropdownOptions(); track $index; let index = $index) {\n @let colorOption = cast(color, \"colorOption\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item color-item\"\n id=\"option-{{ colorOption.id }}\"\n (click)=\"handleOption(colorOption, $event)\"\n [class]=\"{\n selected:\n cast(selectedOption(), 'colorOption')?.id === colorOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <svg-icon\n class=\"icon cai-color\"\n [name]=\"'cai-color'\"\n [style.--color]=\"colorOption?.code\"\n [style.--hover-color]=\"colorOption?.hoverCode\"\n ></svg-icon>\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (colorOption.name || '' | highlightSearch: value())\n : colorOption.name\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #stateRef>\n @if (dropdownOptions().length) {\n @for (state of dropdownOptions(); track $index; let index = $index) {\n @let stateOption = cast(state, \"state\")!;\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n id=\"option-{{ stateOption.id }}\"\n (click)=\"handleOption(stateOption, $event)\"\n [class]=\"{\n selected: cast(selectedOption(), 'state')?.id === stateOption.id,\n focused: focusedOptionIndex === index,\n }\"\n >\n <svg-icon\n class=\"icon\"\n [name]=\"\n 'cai-' +\n stateOption?.countryType?.name?.toLowerCase() +\n '-' +\n stateOption?.stateShortName?.toLowerCase()\n \"\n ></svg-icon>\n <p\n class=\"dropdown-content-with-icon\"\n [innerHTML]=\"\n search\n ? (stateOption.stateShortName +\n ' ' +\n (config().fullState\n ? ' (' + stateOption?.stateName + ')'\n : '') || '' | highlightSearch: value())\n : stateOption.stateShortName +\n ' ' +\n (config().fullState ? ' (' + stateOption?.stateName + ')' : '')\n \"\n ></p>\n <svg-icon name=\"cai-checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<ng-template #fuelStopTransactionRef>\n @if (dropdownOptions().length) {\n @for (\n franchise of dropdownOptions();\n track franchise.id;\n let groupIndex = $index\n ) {\n @let isGroupFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === 0;\n @let franchiseOption = cast(franchise, \"franchise\")!;\n @if (franchiseOption?.count !== null) {\n <div\n class=\"dropdown-group\"\n [class.no-items]=\"!franchiseOption?.count\"\n [class]=\"{\n active: openGroup() === franchiseOption.id,\n }\"\n [style.--max-height]=\"\n openGroup() === franchiseOption.id\n ? 30 * ((franchiseOption.fuelStopStores?.length || 0) + 1) + 'px'\n : '26px'\n \"\n >\n <button\n tabindex=\"-1\"\n class=\"dropdown-item group-item\"\n (click)=\"fold(franchiseOption.id, $event, franchiseOption)\"\n [class]=\"{\n unfolded: openGroup() === franchiseOption.id,\n focused: isGroupFocused,\n }\"\n >\n <p\n [innerHTML]=\"\n franchiseOption?.businessName || '' | highlightSearch: value()\n \"\n ></p>\n <p class=\"counter\">{{ franchiseOption.count }}</p>\n <svg-icon\n name=\"cai-arrow-primary-up\"\n class=\"group-icon icon\"\n ></svg-icon>\n </button>\n @if (openGroup() === franchiseOption.id) {\n @if (franchiseOption.fuelStopStores?.length || 0 > 0) {\n @for (\n fuelStopStore of franchiseOption.fuelStopStores;\n track fuelStopStore.id\n ) {\n @let isOptionFocused =\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === $index + 1;\n <!-- +1 since optionIndex is 0 for the group item header -->\n <button\n tabindex=\"-1\"\n class=\"dropdown-item fuel-stop-transaction-store\"\n [class]=\"{\n focused: isOptionFocused,\n }\"\n (click)=\"handleOption(fuelStopStore, $event)\"\n >\n <p\n [innerHTML]=\"\n fuelStopStore?.store ?? '' | highlightSearch: value()\n \"\n ></p>\n @let city = fuelStopStore?.address?.city ?? \"\";\n @let state = fuelStopStore?.address?.stateShortName ?? \"\";\n @let zip = fuelStopStore?.address?.zipCode ?? \"\";\n <p\n class=\"fuel-stop-transaction-store-address\"\n [innerHTML]=\"\n city + (state || zip ? ', ' : '') + state + ' ' + zip\n | highlightSearch: value()\n \"\n ></p>\n\n @if (fuelStopStore?.[\"favourite\"]) {\n <svg-icon\n name=\"cai-favorite\"\n class=\"favorite-icon\"\n ></svg-icon>\n }\n </button>\n }\n <!-- Infinite scroll trigger - emits event when item comes into view -->\n <div\n class=\"dropdown-infinite-scroll-item\"\n caiIntersectionObserver\n [threshold]=\"0.1\"\n (inView)=\"onDropdownScrolledToBottom(true)\"\n ></div>\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n }\n </div>\n } @else {\n <button\n tabindex=\"-1\"\n class=\"dropdown-item\"\n [class.focused]=\"\n groupedNavigationState?.groupIndex === groupIndex &&\n groupedNavigationState?.optionIndex === 0\n \"\n (click)=\"handleOption(franchiseOption, $event)\"\n >\n <p\n class=\"fuel-stop-transaction-nostore\"\n [innerHTML]=\"\n franchiseOption?.businessName || '' | highlightSearch: value()\n \"\n ></p>\n </button>\n }\n }\n } @else {\n <p class=\"dropdown-item no-results\">No results</p>\n }\n</ng-template>\n\n<!-- #endregion -->\n\n<!-- #region Selected options -->\n\n<!-- selected dispatch -->\n<ng-template #selectedDispatchRef>\n @let dispatchOption = cast(selectedOption(), \"dispatch\");\n @if (dispatchOption && !inputRef.value && !isAdding()) {\n <div class=\"dropdown-selected\">\n <div class=\"dropdown-subitem truck-item\">\n <svg-icon\n class=\"truck-icon\"\n [name]=\"dispatchOption!.truck.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p class=\"truck-number\">\n {{ dispatchOption!.truck.truckNumber }}\n </p>\n </div>\n <div class=\"dropdown-subitem trailer-item\">\n @if (dispatchOption!.trailer) {\n <svg-icon\n class=\"trailer-icon\"\n [name]=\"\n cast(\n selectedOption(),\n 'dispatch'\n )!.trailer?.trailerType?.logoName?.slice(0, -4)\n \"\n ></svg-icon>\n <p class=\"trailer-number\">\n {{ dispatchOption!.trailer?.trailerNumber }}\n </p>\n }\n </div>\n <div class=\"dropdown-subitem\">\n @if (dispatchOption!.coDriver) {\n <svg-icon class=\"dispatch-icon\" name=\"cai-people\"></svg-icon>\n <p class=\"driver-name\">\n {{\n dispatchOption!.driver.firstName +\n \" & \" +\n dispatchOption!.coDriver?.firstName\n }}\n </p>\n } @else {\n <cai-avatar\n [driver]=\"dispatchOption!.driver\"\n [size]=\"18\"\n [hover]=\"false\"\n ></cai-avatar>\n <p class=\"driver-name\">\n {{\n dispatchOption!.driver.firstName +\n \" \" +\n dispatchOption!.driver.lastName\n }}\n </p>\n }\n </div>\n <p class=\"selected-end-item\">\n {{ dispatchOption!.payType }}\n </p>\n </div>\n } @else {\n @if (!inputRef.value && this.config().dropdown == \"dispatch\") {\n <p class=\"dropdown-selected\">Unassigned</p>\n }\n }\n</ng-template>\n\n<!-- selected broker -->\n<ng-template #selectedBrokerRef>\n @let brokerOption = cast(selectedOption(), \"broker\");\n @if (brokerOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n @if (brokerOption!.fraudCheck) {\n <svg-icon name=\"cai-status-warning-lite\" class=\"fraud-icon\"></svg-icon>\n }\n <p class=\"dropdown-selected-content\">{{ brokerOption!.businessName }}</p>\n <div class=\"selected-end-item\">\n @if (!brokerOption!.creditLimit) {\n <p>Unlimited</p>\n } @else {\n <p>\n {{ brokerOption!.availableCredit || 0 | currency }}\n </p>\n <div\n class=\"progress-bar\"\n [style.--progress]=\"\n (\n brokerOption!\n | brokerProgress: brokerOption!.dnu || brokerOption!.ban\n ).activePercentageOfPaid + '%'\n \"\n [class]=\"\n (\n brokerOption!\n | brokerProgress: brokerOption!.dnu || brokerOption!.ban\n ).status\n \"\n ></div>\n }\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedContactRef>\n @let contactOption = cast(selectedOption(), \"contact\");\n @if (contactOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <p class=\"dropdown-selected-content\">{{ contactOption?.contactName }}</p>\n <div class=\"selected-end-item\">\n <p>\n {{ contactOption?.phone }}\n {{\n contactOption?.extensionPhone\n ? \"x\" + contactOption?.extensionPhone\n : \"\"\n }}\n </p>\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedShipperRef>\n @let shipperOption = cast(selectedOption(), \"shipper\");\n @if (shipperOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <p class=\"dropdown-selected-content\">{{ shipperOption?.businessName }}</p>\n <div class=\"selected-end-item selected-end-item-truncate\">\n <p class=\"text-truncate\">{{ shipperOption?.address?.address }}</p>\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedOwnerRef>\n @let ownerOption = cast(selectedOption(), \"owner\");\n @if (ownerOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <p class=\"owner-ein\">{{ ownerOption?.ein }}</p>\n <p class=\"\">{{ ownerOption?.name }}</p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedFuelcardRef>\n @let fuelcardOption = cast(selectedOption(), \"fuelCard\");\n @if (fuelcardOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <p class=\"fuelcard-number\">\n {{ fuelcardOption?.number }}\n </p>\n <p class=\"fuelcard-brand\">\n {{ fuelcardOption?.brand }}\n </p>\n <p class=\"\">\n {{ fuelcardOption?.account }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedBankRef>\n @let bankOption = cast(selectedOption(), \"bank\");\n @if (bankOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n @if (bankOption?.logoName) {\n <svg-icon\n class=\"option-icon full-size\"\n [name]=\"bankOption?.logoName?.slice(0, -4) || ''\"\n ></svg-icon>\n } @else {\n <p class=\"dropdown-selected-content\">{{ bankOption?.name }}</p>\n }\n </div>\n }\n</ng-template>\n\n<ng-template #selectedProviderRef>\n @let providerOption = cast(selectedOption(), \"provider\");\n @if (providerOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon full-size\"\n [name]=\"'cai-' + providerOption?.name?.toLowerCase()\"\n ></svg-icon>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedMakeRef>\n @let makeOption = cast(selectedOption(), \"make\");\n @if (makeOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n @if (makeOption?.logoName) {\n <svg-icon\n class=\"option-icon full-size\"\n [name]=\"makeOption?.logoName?.slice(0, -4) || ''\"\n ></svg-icon>\n } @else {\n <p class=\"dropdown-selected-content\">{{ makeOption?.name }}</p>\n }\n </div>\n }\n</ng-template>\n\n<ng-template #selectedStateRef>\n @let stateOption = cast(selectedOption(), \"state\");\n @if (stateOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon\"\n [name]=\"\n 'cai-' +\n stateOption?.countryType?.name?.toLowerCase() +\n '-' +\n stateOption?.stateShortName?.toLowerCase()\n \"\n ></svg-icon>\n <p class=\"dropdown-selected-content\">\n {{ stateOption?.stateShortName }}\n {{ config().fullState ? \" (\" + stateOption?.stateName + \")\" : \"\" }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedDispatcherRef>\n @let dispatcherOption = cast(selectedOption(), \"dispatcher\");\n @if (dispatcherOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <cai-avatar\n [driver]=\"{\n id: dispatcherOption?.id || 0,\n firstName: (dispatcherOption?.fullName || ' ').split(' ')[0] || '',\n lastName: (dispatcherOption?.fullName || ' ').split(' ')[1] || '',\n avatarFile: dispatcherOption?.avatarFile,\n colorFlag: dispatcherOption?.colorFlag,\n }\"\n [rounded]=\"!config().squareAvatar\"\n ></cai-avatar>\n <p class=\"dropdown-selected-content\">{{ dispatcherOption?.fullName }}</p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedDriverOwnerRef>\n @let driverOwnerOption = cast(selectedOption(), \"driverOwner\");\n @if (driverOwnerOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <cai-avatar\n [driver]=\"{\n id: driverOwnerOption?.id || 0,\n firstName: (driverOwnerOption?.fullName || ' ').split(' ')[0] || '',\n lastName: (driverOwnerOption?.fullName || ' ').split(' ')[1] || '',\n avatarFile: driverOwnerOption?.avatarFile,\n colorFlag: driverOwnerOption?.colorFlag,\n owner: driverOwnerOption?.driverType === 'OwnerOperator',\n driverType: {\n id: 0,\n name: (driverOwnerOption?.driverType | driverTypeLabel),\n },\n }\"\n [rounded]=\"false\"\n ></cai-avatar>\n <p class=\"dropdown-selected-content\">{{ driverOwnerOption?.fullName }}</p>\n <p class=\"selected-end-item driver-type\">\n {{ driverOwnerOption?.driverType | driverTypeLabel }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedTruckOwnerRef>\n @let truckOwnerOption = cast(selectedOption(), \"truckOwner\");\n @if (truckOwnerOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n @if (truckOwnerOption.truckType?.logoName) {\n <svg-icon\n class=\"truck-icon option-icon\"\n [name]=\"truckOwnerOption.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n }\n <p class=\"dropdown-selected-content\">\n {{ truckOwnerOption.truckNumber }}\n @if (truckOwnerOption.model) {\n <span class=\"truck-owner-bullet\">\u2022</span>\n {{ truckOwnerOption.model }}\n }\n </p>\n <p class=\"selected-end-item driver-type\">\n {{ truckOwnerOption.driverType | truckOwnershipLabel }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedTruckRef>\n @let truckOption = cast(selectedOption(), \"truckOption\");\n @if (truckOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon\"\n [name]=\"truckOption?.logoName?.slice(0, -4)\"\n ></svg-icon>\n <p class=\"dropdown-selected-content\">{{ truckOption?.name }}</p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedTrailerRef>\n @let trailerOption = cast(selectedOption(), \"trailerOption\");\n @if (trailerOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon\"\n [name]=\"trailerOption?.logoName?.slice(0, -4)\"\n ></svg-icon>\n <p class=\"dropdown-selected-content\">{{ trailerOption?.name }}</p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedHazardousRef>\n @let hazardousOption = cast(selectedOption(), \"hazardous\");\n @if (hazardousOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"hazard-icon\"\n [name]=\"hazardousOption?.logoName?.slice(0, -4)\"\n ></svg-icon>\n <p class=\"dropdown-selected-content dropdown-selected-hazardous\">\n {{ hazardousOption?.description }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedPmRef>\n @let pmOption = cast(selectedOption(), \"pmOption\");\n @if (pmOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon\"\n [name]=\"pmOption?.title | remapPmIcons\"\n ></svg-icon>\n <p class=\"dropdown-selected-content\">\n {{ pmOption?.title }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedColorRef>\n @let colorOption = cast(selectedOption(), \"colorOption\");\n @if (colorOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <svg-icon\n class=\"option-icon cai-color\"\n [name]=\"'cai-color'\"\n [style.--color]=\"colorOption?.code\"\n [style.--hover-color]=\"colorOption?.hoverCode\"\n ></svg-icon>\n <p class=\"dropdown-selected-content\">\n {{ colorOption?.name }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedTollRef>\n @let tollOption = cast(selectedOption(), \"tollTransponderOption\");\n @if (tollOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <p class=\"dropdown-selected-content\">\n {{ tollOption?.name }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedSplitDriverRef>\n @let splitDriverOption = cast(selectedOption(), \"splitDriver\");\n @if (splitDriverOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <div class=\"dropdown-selected-content\">\n <div class=\"dropdown-subitem\">\n <cai-avatar [driver]=\"splitDriverOption\" [size]=\"18\"></cai-avatar>\n <p class=\"driver-name\">\n {{ splitDriverOption.firstName + \" \" + splitDriverOption.lastName }}\n </p>\n </div>\n </div>\n\n <p class=\"selected-end-item\">\n {{ splitDriverOption.payTypeValue }}\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedSplitTruckRef>\n @let splitTruckOption = cast(selectedOption(), \"splitTruck\");\n @if (splitTruckOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <div class=\"dropdown-selected-content\">\n <div class=\"dropdown-subitem trailer-item\">\n <svg-icon\n class=\"trailer-icon\"\n [name]=\"splitTruckOption!.truckType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p class=\"trailer-number\">\n {{ splitTruckOption!.truckNumber }}\n </p>\n </div>\n </div>\n <p class=\"selected-end-item\">\n @if (\n splitTruckOption!.location?.city &&\n splitTruckOption!.location?.stateShortName\n ) {\n {{ splitTruckOption!.location?.city }},\n {{ splitTruckOption!.location?.stateShortName }}\n }\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedSplitTrailerRef>\n @let splitTrailerOption = cast(selectedOption(), \"splitTrailer\");\n @if (splitTrailerOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <div class=\"dropdown-selected-content\">\n <div class=\"dropdown-subitem truck-item\">\n <svg-icon\n class=\"truck-icon\"\n [name]=\"splitTrailerOption!.trailerType.logoName.slice(0, -4)\"\n ></svg-icon>\n <p class=\"truck-number\">\n {{ splitTrailerOption!.trailerNumber }}\n </p>\n </div>\n </div>\n <p class=\"selected-end-item\">\n @if (\n splitTrailerOption!.location?.city &&\n splitTrailerOption!.location?.stateShortName\n ) {\n {{ splitTrailerOption!.location?.city }},\n {{ splitTrailerOption!.location?.stateShortName }}\n }\n </p>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedAccidentDriverRef>\n @let accidentDriverOption = cast(selectedOption(), \"accidentDriver\");\n @if (accidentDriverOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <div class=\"dropdown-subitem accident-name\">\n <cai-avatar\n [driver]=\"accidentDriverOption!\"\n [size]=\"18\"\n [hover]=\"false\"\n ></cai-avatar>\n <p>\n {{\n accidentDriverOption!.firstName +\n \" \" +\n accidentDriverOption!.lastName\n }}\n </p>\n </div>\n <p class=\"accident-dob\">\n {{ accidentDriverOption!.dateOfBirth | date: \"MM/dd/yy\" }}\n </p>\n <p class=\"accident-cdl-number\">\n {{ accidentDriverOption!.cdlNumber }}\n </p>\n <div class=\"dropdown-subitem accident-state\">\n <p>{{ accidentDriverOption!.cdlState?.stateShortName }}</p>\n @if (\n accidentDriverOption!.cdlState?.countryType?.name &&\n accidentDriverOption!.cdlState?.stateShortName\n ) {\n <svg-icon\n class=\"icon option-icon\"\n [name]=\"\n 'cai-' +\n accidentDriverOption!.cdlState?.countryType?.name?.toLowerCase() +\n '-' +\n accidentDriverOption!.cdlState?.stateShortName?.toLowerCase()\n \"\n ></svg-icon>\n }\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedAccidentTruckRef>\n @let accidentTruckOption = cast(selectedOption(), \"accidentTruck\");\n @if (accidentTruckOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <div class=\"dropdown-subitem accident-unit\">\n @if (accidentTruckOption!.truckType?.logoName) {\n <svg-icon\n class=\"truck-icon option-icon\"\n [name]=\"accidentTruckOption!.truckType!.logoName.slice(0, -4)\"\n ></svg-icon>\n }\n <p>{{ accidentTruckOption!.truckNumber }}</p>\n </div>\n <p class=\"accident-vin\">{{ accidentTruckOption!.vin }}</p>\n <p class=\"accident-plate\">\n {{ accidentTruckOption!.licensePlateNumber }}\n </p>\n <div class=\"dropdown-subitem accident-state\">\n <p>{{ accidentTruckOption!.licenseState?.stateShortName }}</p>\n @if (\n accidentTruckOption!.licenseState?.countryType?.name &&\n accidentTruckOption!.licenseState?.stateShortName\n ) {\n <svg-icon\n class=\"icon option-icon\"\n [name]=\"\n 'cai-' +\n accidentTruckOption!.licenseState?.countryType?.name?.toLowerCase() +\n '-' +\n accidentTruckOption!.licenseState?.stateShortName?.toLowerCase()\n \"\n ></svg-icon>\n }\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #selectedAccidentTrailerRef>\n @let accidentTrailerOption = cast(selectedOption(), \"accidentTrailer\");\n @if (accidentTrailerOption && !inputRef.value) {\n <div class=\"dropdown-selected\">\n <div class=\"dropdown-subitem accident-unit\">\n @if (accidentTrailerOption!.trailerType?.logoName) {\n <svg-icon\n class=\"trailer-icon option-icon\"\n [name]=\"accidentTrailerOption!.trailerType!.logoName.slice(0, -4)\"\n ></svg-icon>\n }\n <p>{{ accidentTrailerOption!.trailerNumber }}</p>\n </div>\n <p class=\"accident-vin\">{{ accidentTrailerOption!.vin }}</p>\n <p class=\"accident-plate\">\n {{ accidentTrailerOption!.licensePlateNumber }}\n </p>\n <div class=\"dropdown-subitem accident-state\">\n <p>{{ accidentTrailerOption!.licenseState?.stateShortName }}</p>\n @if (\n accidentTrailerOption!.licenseState?.countryType?.name &&\n accidentTrailerOption!.licenseState?.stateShortName\n ) {\n <svg-icon\n class=\"icon option-icon\"\n [name]=\"\n 'cai-' +\n accidentTrailerOption!.licenseState?.countryType?.name?.toLowerCase() +\n '-' +\n accidentTrailerOption!.licenseState?.stateShortName?.toLowerCase()\n \"\n ></svg-icon>\n }\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template #passwordTooltip>\n {{ visible() ? \"Hide\" : \"Show\" }}\n</ng-template>\n\n<ng-template #errorTooltip>\n @if (\n (config().errorBehavior === \"floating\" ||\n (config().errorBehavior === \"static\" && hasText()) ||\n config().inTable) &&\n invalid &&\n !dropdown.isOpen()\n ) {\n {{ (ngControl?.errors | errorMessage: config().customErrors : config().numberFormat)[0] }}\n }\n</ng-template>\n\n<!-- #endregion -->\n", styles: ["input:-webkit-autofill,input:-webkit-autofill:hover,input:-webkit-autofill:focus,input:-webkit-autofill:active{transition:background-color 5000s ease-in-out 0s!important}input:-webkit-autofill:focus{-webkit-text-fill-color:#ffffff!important}input:-moz-autofill,input:-moz-autofill-preview{filter:none}*,*:before,*:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}p,ul,ol,dl,blockquote,figure,pre{margin:0}button,input,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button{background:none;border:none;padding:0}img,svg,video,canvas,audio,iframe,embed,object{display:block;max-width:100%;height:auto}ul,ol{padding-left:1.5rem;list-style-position:outside}a{color:inherit;text-decoration:inherit}table{border-collapse:collapse;border-spacing:0}:focus:not(:focus-visible){outline:none}.app-input-container{--color-text: #2f2f2f;--color-text-negative: #df3c3c;--color-text-heading: #424242;--color-text-subtle: #919191;--color-text-inverse: #ffffff;--color-icon-neutral: #919191;--color-icon-negative: #e66767;--color-icon-positive: #6692f1;--color-icon-inverse: rgba(255, 255, 255, .6980392157);--color-icon-disable: #cccccc;--color-surface-neutral: #eeeeee;--color-surface-neutral-hover: #dadada;--color-surface-neutral-focus: #1d1d1d;--color-surface-positive: #e9effd;--color-surface-positive-hover: #bed0f9;--color-surface-positive-focus: #0b49d1;--color-surface-negative: #fbe9e9;--color-surface-negative-hover: #f4bebe;--color-surface-negative-focus: #c20c0c;--color-surface-disable: #f7f7f7;position:relative;border-radius:2px;background-color:var(--color-surface-neutral);color:var(--color-text);transition:background-color .1s cubic-bezier(.46,.03,.51,.95);display:flex}.app-input-container.inverse{--color-text: #ffffff;--color-text-negative: #ed9292;--color-text-heading: #ffffff;--color-text-inverse: #ffffff;--color-icon-neutral: #aaaaaa;--color-icon-negative: #ed9292;--color-icon-positive: #92b1f5;--color-icon-disable: #6c6c6c;--color-surface-neutral: #424242;--color-surface-neutral-hover: #6c6c6c;--color-surface-neutral-focus: #dadada;--color-surface-positive: rgba(59, 115, 237, .2);--color-surface-positive-hover: #2f519a;--color-surface-positive-focus: #0b49d1;--color-surface-negative: rgba(223, 60, 60, .2);--color-surface-negative-hover: #923030;--color-surface-negative-focus: #c20c0c;--color-surface-disable: rgba(66, 66, 66, .4)}.app-input-container.inverse:not(.has-error):not(.has-valid) .app-input:focus-visible{color:#2f2f2f}.app-input-container.inverse:not(.has-error):not(.has-valid):has(.app-input:focus-visible) .icon,.app-input-container.inverse:not(.has-error):not(.has-valid):has(.app-input:focus-visible) .icon-sm{color:#919191!important}.app-input-container.inverse:not(.has-error):not(.has-valid):has(.app-input:focus-visible) .separator{background-color:#919191!important}.app-input-container.inverse:not(.has-error):not(.has-valid):has(.app-input:focus-visible) .bg-icon{background-color:#919191!important;color:#dadada}.app-input-container.inverse.is-empty:has(.app-input:focus-visible) .icon,.app-input-container.inverse.is-empty:has(.app-input:focus-visible) .icon-sm{color:#919191!important}.app-input-container.inverse.is-empty:has(.app-input:focus-visible) .bg-icon{background-color:#919191!important;color:#dadada}.app-input-container.inverse.is-empty:has(.app-input:focus-visible) .separator{background-color:#919191!important}.app-input-container.inverse.has-text:has(.app-input:disabled) .app-input-label{color:#424242!important}.app-input-container.hovered{background-color:var(--color-surface-neutral-hover)}.app-input-container.hovered:not(:has(.app-input:disabled)) .sub-label,.app-input-container.hovered:not(:has(.app-input:disabled)) .app-input-label .accident-state{margin-right:44px}@media(hover:hover){.app-input-container:hover{background-color:var(--color-surface-neutral-hover)}.app-input-container:hover:not(:has(.app-input:disabled)) .sub-label,.app-input-container:hover:not(:has(.app-input:disabled)) .app-input-label .accident-state{margin-right:44px}}.app-input-container.has-text .app-input-label{transform:translateY(-20px);font-weight:600;font-size:11px;color:var(--color-text-heading)!important}.app-input-container.has-text.fade-placeholder .app-input-label{transform:translateY(0);opacity:0}.app-input-container.has-text .subcontent{opacity:1!important}.app-input-container.has-text.static-placeholder .app-input-label{transform:translateY(0);opacity:1;color:var(--color-text)}@media(hover:hover){.app-input-container.has-text.is-address:hover .button-icon{opacity:1;pointer-events:auto}.app-input-container.has-text.is-address:hover .bg-icon{background-color:var(--color-icon-neutral);color:var(--color-surface-neutral-hover)}}.app-input-container.has-text.is-address:has(.app-input:focus-visible) .button-icon{opacity:1;pointer-events:auto}.app-input-container.has-text.is-address:has(.app-input:focus-visible) .bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-neutral-focus)}.app-input-container:has(.app-input:focus-visible){background-color:var(--color-surface-neutral-focus)}.app-input-container:has(.app-input:focus-visible) .app-input-label{transform:translateY(-20px);font-weight:600;font-size:11px;color:var(--color-text-heading)!important}.app-input-container:has(.app-input:focus-visible) .subcontent{opacity:1!important;color:#ffffffb2;left:unset!important;right:4px!important}.app-input-container:has(.app-input:focus-visible).has-text .subcontent{right:26px!important}.app-input-container:has(.app-input:focus-visible) .sub-label,.app-input-container:has(.app-input:focus-visible) .app-input-label .accident-state{margin-right:44px}.app-input-container:has(.app-input:focus-visible).fade-placeholder .app-input-label{transform:translateY(0);opacity:0}.app-input-container:has(.app-input:focus-visible).static-placeholder .app-input-label{transform:translateY(0);opacity:1;color:var(--color-text-inverse)!important}.app-input-container:has(.app-input:focus-visible) .bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-neutral-focus)}.app-input-container:has(.app-input:focus-visible) .separator{background-color:var(--color-icon-inverse)!important}.app-input-container:has(.app-input:disabled){background-color:var(--color-surface-disable)}.app-input-container:has(.app-input:disabled).hovered{background-color:var(--color-surface-disable)}@media(hover:hover){.app-input-container:has(.app-input:disabled):hover{background-color:var(--color-surface-disable)}}.app-input-container:has(.app-input:disabled):focus{background-color:var(--color-surface-disable)}.app-input-container:has(.app-input:disabled) .app-input-label{color:var(--color-text-subtle)}.app-input-container:has(.app-input:disabled) .separator{background-color:var(--color-icon-disable)}.app-input-container:has(.app-input:disabled) .dropdown-icon-container{opacity:0;pointer-events:none!important}.app-input-container:has(.app-input:disabled) .dropdown-selected:has(.selected-end-item){width:100%}.app-input-container:has(.app-input:disabled) .driver-type{color:#919191}.app-input-container:has(.app-input:disabled) .icon-container{pointer-events:none!important}.app-input-container:has(.app-input:disabled):not(.disabled-removable) .cancel-button{display:none!important}.app-input-container:has(.app-input:required):not(:has(.app-input:disabled)) .app-input-name:after{content:\" *\";color:var(--color-text-negative)}@media(hover:hover){.app-input-container:not(.has-error).is-empty:not(:has(.app-input:focus-visible)) .dropdown-icon-container:hover .dropdown-icon{color:#424242!important}}@media(hover:hover){.app-input-container:not(.has-error).is-empty:not(:has(.app-input:focus-visible)) .hover-icon:hover{color:#424242!important}}@media(hover:hover){.app-input-container:not(.has-error).is-empty:has(.app-input:focus-visible) .dropdown-icon-container:hover .dropdown-icon{color:#fff!important}}@media(hover:hover){.app-input-container:not(.has-error).is-empty:has(.app-input:focus-visible) .hover-icon:hover{color:#fff!important}}@media(hover:hover){.app-input-container:not(.has-error):not(.has-valid):has(.app-input:focus-visible) .dropdown-icon-container:hover .dropdown-icon{color:#fff!important}}@media(hover:hover){.app-input-container:not(.has-error):not(.has-valid):has(.app-input:focus-visible) .hover-icon:hover{color:#fff!important}}.app-input-container.canceled .app-input-label,.app-input-container.canceled .app-input{color:var(--color-text-subtle)!important}.app-input-container.canceled .icon-container .icon,.app-input-container.canceled .icon-container .icon-sm{color:var(--color-icon-disable)!important}.subcontent{pointer-events:none;position:absolute;left:6px;color:#919191;-webkit-user-select:none;user-select:none;top:50%;transform:translateY(-50%);transition:right .1s ease-in-out,left .1s ease-in-out,transform .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95),color .1s cubic-bezier(.46,.03,.51,.95);opacity:0;font-family:Montserrat;font-weight:400;font-style:Regular;font-size:14px;line-height:18px;letter-spacing:0%;height:18px;overflow:hidden}.subcontent .subcontent-hide{opacity:0!important}.app-input-label{position:absolute;display:flex;gap:4px;left:0;font-size:14px;line-height:18px;font-weight:400;pointer-events:none;padding:.25rem 6px;color:var(--color-text);transition:transform .1s ease-in-out,font-weight .1s ease-in-out,color .1s ease-in-out,font-size .1s ease-in-out,opacity .1s ease-in-out;transform:translateY(0);-webkit-user-select:none;user-select:none}.app-input-label.placeholder-color{color:var(--placeholder-color)!important}.app-input{padding:.25rem 6px;width:100%;font-size:14px;line-height:18px;font-weight:400;border:0;outline:none;margin-top:auto;background-color:transparent;transition:color .1s cubic-bezier(.46,.03,.51,.95);color:var(--color-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;position:relative}.app-input:focus-visible{color:var(--color-text-inverse)}@media(pointer:coarse){.app-input{font-size:16px;transform:scale(.875);transform-origin:left center;height:26px}}.app-input-error{position:absolute;bottom:-16px;right:6px;font-size:11px;font-weight:600;opacity:0;pointer-events:none;-webkit-user-select:none;user-select:none;transition:opacity .1s cubic-bezier(.46,.03,.51,.95),transform .1s cubic-bezier(.46,.03,.51,.95);color:var(--color-text-negative);transform:translateY(-10px)}.app-input-container.has-error{background-color:var(--color-surface-negative)}.app-input-container.has-error:not(.has-icon):not(.has-password):not(.has-right) .app-input{padding-right:26px}.app-input-container.has-error:has(.app-input:focus-visible):not(.has-right) .app-input{padding-right:26px}@media(hover:hover){.app-input-container.has-error:hover:not(.has-right) .app-input{padding-right:26px}}.app-input-container.has-error.has-right .app-input{padding-right:6px;padding-left:26px}.app-input-container.has-error.hovered{background-color:var(--color-surface-negative-hover)}.app-input-container.has-error.hovered.has-text .button-icon{opacity:1;pointer-events:auto}.app-input-container.has-error.hovered.has-text .bg-icon{background-color:var(--color-icon-negative);color:var(--color-surface-negative-hover)}@media(hover:hover){.app-input-container.has-error:hover{background-color:var(--color-surface-negative-hover)}.app-input-container.has-error:hover.has-text .button-icon{opacity:1;pointer-events:auto}.app-input-container.has-error:hover.has-text .bg-icon{background-color:var(--color-icon-negative);color:var(--color-surface-negative-hover)}}.app-input-container.has-error:has(.app-input:focus-visible){background-color:var(--color-surface-negative-focus);color:var(--color-text-inverse)}.app-input-container.has-error:has(.app-input:focus-visible).has-text .button-icon{opacity:1}.app-input-container.has-error:has(.app-input:focus-visible).has-text .bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-negative-focus)}.app-input-container.has-error:has(.app-input:focus-visible).is-empty,.app-input-container.has-error:has(.app-input:focus-visible).has-dropdown:not(.has-selected){background-color:var(--color-surface-neutral-focus)!important}.app-input-container.has-error:has(.app-input:focus-visible).is-empty .app-input-error,.app-input-container.has-error:has(.app-input:focus-visible).has-dropdown:not(.has-selected) .app-input-error{opacity:0}.app-input-container.has-error:has(.app-input:focus-visible).is-empty .bg-icon,.app-input-container.has-error:has(.app-input:focus-visible).has-dropdown:not(.has-selected) .bg-icon{color:var(--color-surface-neutral-focus)!important}.app-input-container.has-error:has(.app-input:not(:focus-visible)).app-input-container:not(:hover) .warning-icon,.app-input-container.has-error.is-empty:has(.app-input:not(:focus-visible)) .warning-icon{opacity:1!important}.app-input-container.has-error .app-input-error{opacity:1;transform:translateY(0);pointer-events:auto}.app-input-container.has-error .app-input::selection{background-color:#ffffff4d}.app-input-container.has-error .icon-container .separator,.app-input-container.has-error .dropdown-icon-container .separator{background-color:var(--color-icon-negative)}.app-input-container.has-error .icon-container .icon,.app-input-container.has-error .icon-container .icon-sm,.app-input-container.has-error .dropdown-icon-container .icon,.app-input-container.has-error .dropdown-icon-container .icon-sm{color:var(--color-icon-negative)}@media(hover:hover){.app-input-container.has-error:not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .bg-icon:hover{background-color:#c20c0c!important}}@media(hover:hover){.app-input-container.has-error:not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .dropdown-icon-container:hover .dropdown-icon{color:#c20c0c!important}}@media(hover:hover){.app-input-container.has-error:not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .hover-icon:hover{color:#c20c0c!important}}@media(hover:hover){.app-input-container.has-error:not(.removable):has(.app-input:focus-visible) .bg-icon:hover{background-color:#fff!important}}@media(hover:hover){.app-input-container.has-error:not(.removable):has(.app-input:focus-visible) .dropdown-icon-container:hover .dropdown-icon{color:#fff!important}}@media(hover:hover){.app-input-container.has-error:not(.removable):has(.app-input:focus-visible) .hover-icon:hover{color:#fff!important}}.app-input-container.has-valid:not(.has-icon):not(.has-password):not(.has-right) .app-input{padding-right:26px}.app-input-container.has-valid:has(.app-input:focus-visible):not(.has-right) .app-input{padding-right:26px}@media(hover:hover){.app-input-container.has-valid:hover:not(.has-right) .app-input{padding-right:26px}}.app-input-container.has-valid.has-right .app-input{padding-right:6px;padding-left:26px}.app-input-container.has-valid.has-text:not(.has-dropdown):not(.in-table),.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):not(.in-table),.app-input-container.has-valid.has-multiple-dropdown.has-text:not(.in-table){background-color:var(--color-surface-positive)}.app-input-container.has-valid.has-text:not(.has-dropdown).hovered,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown).hovered,.app-input-container.has-valid.has-multiple-dropdown.has-text.hovered{background-color:var(--color-surface-positive-hover)}.app-input-container.has-valid.has-text:not(.has-dropdown).hovered .button-icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown).hovered .button-icon,.app-input-container.has-valid.has-multiple-dropdown.has-text.hovered .button-icon{opacity:1;pointer-events:auto}.app-input-container.has-valid.has-text:not(.has-dropdown).hovered .bg-icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown).hovered .bg-icon,.app-input-container.has-valid.has-multiple-dropdown.has-text.hovered .bg-icon{background-color:var(--color-icon-positive);color:var(--color-surface-positive-hover)}@media(hover:hover){.app-input-container.has-valid.has-text:not(.has-dropdown):hover,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):hover,.app-input-container.has-valid.has-multiple-dropdown.has-text:hover{background-color:var(--color-surface-positive-hover)}.app-input-container.has-valid.has-text:not(.has-dropdown):hover .button-icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):hover .button-icon,.app-input-container.has-valid.has-multiple-dropdown.has-text:hover .button-icon{opacity:1;pointer-events:auto}.app-input-container.has-valid.has-text:not(.has-dropdown):hover .bg-icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):hover .bg-icon,.app-input-container.has-valid.has-multiple-dropdown.has-text:hover .bg-icon{background-color:var(--color-icon-positive);color:var(--color-surface-positive-hover)}}.app-input-container.has-valid.has-text:not(.has-dropdown):has(.app-input:focus-visible),.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):has(.app-input:focus-visible),.app-input-container.has-valid.has-multiple-dropdown.has-text:has(.app-input:focus-visible){background-color:var(--color-surface-positive-focus);color:var(--color-text-inverse)}.app-input-container.has-valid.has-text:not(.has-dropdown):has(.app-input:focus-visible) .button-icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):has(.app-input:focus-visible) .button-icon,.app-input-container.has-valid.has-multiple-dropdown.has-text:has(.app-input:focus-visible) .button-icon{opacity:1;pointer-events:auto}.app-input-container.has-valid.has-text:not(.has-dropdown):has(.app-input:focus-visible) .bg-icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):has(.app-input:focus-visible) .bg-icon,.app-input-container.has-valid.has-multiple-dropdown.has-text:has(.app-input:focus-visible) .bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-positive-focus)}.app-input-container.has-valid.has-text:not(.has-dropdown):has(.app-input:not(:focus-visible)).app-input-container:not(:hover) .positive-icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):has(.app-input:not(:focus-visible)).app-input-container:not(:hover) .positive-icon,.app-input-container.has-valid.has-multiple-dropdown.has-text:has(.app-input:not(:focus-visible)).app-input-container:not(:hover) .positive-icon{opacity:1}.app-input-container.has-valid.has-text:not(.has-dropdown) .app-input::selection,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown) .app-input::selection,.app-input-container.has-valid.has-multiple-dropdown.has-text .app-input::selection{background-color:#ffffff4d}.app-input-container.has-valid.has-text:not(.has-dropdown) .icon-container .separator,.app-input-container.has-valid.has-text:not(.has-dropdown) .dropdown-icon-container .separator,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown) .icon-container .separator,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown) .dropdown-icon-container .separator,.app-input-container.has-valid.has-multiple-dropdown.has-text .icon-container .separator,.app-input-container.has-valid.has-multiple-dropdown.has-text .dropdown-icon-container .separator{background-color:var(--color-icon-positive)}.app-input-container.has-valid.has-text:not(.has-dropdown) .icon-container .icon,.app-input-container.has-valid.has-text:not(.has-dropdown) .icon-container .icon-sm,.app-input-container.has-valid.has-text:not(.has-dropdown) .dropdown-icon-container .icon,.app-input-container.has-valid.has-text:not(.has-dropdown) .dropdown-icon-container .icon-sm,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown) .icon-container .icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown) .icon-container .icon-sm,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown) .dropdown-icon-container .icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown) .dropdown-icon-container .icon-sm,.app-input-container.has-valid.has-multiple-dropdown.has-text .icon-container .icon,.app-input-container.has-valid.has-multiple-dropdown.has-text .icon-container .icon-sm,.app-input-container.has-valid.has-multiple-dropdown.has-text .dropdown-icon-container .icon,.app-input-container.has-valid.has-multiple-dropdown.has-text .dropdown-icon-container .icon-sm{color:var(--color-icon-positive)}.app-input-container.has-valid.has-text:not(.has-dropdown) .icon-container .password-key,.app-input-container.has-valid.has-text:not(.has-dropdown) .dropdown-icon-container .password-key,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown) .icon-container .password-key,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown) .dropdown-icon-container .password-key,.app-input-container.has-valid.has-multiple-dropdown.has-text .icon-container .password-key,.app-input-container.has-valid.has-multiple-dropdown.has-text .dropdown-icon-container .password-key{opacity:0;pointer-events:none}@media(hover:hover){.app-input-container.has-valid.has-text:not(.has-dropdown):not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .bg-icon:hover,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .bg-icon:hover,.app-input-container.has-valid.has-multiple-dropdown.has-text:not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .bg-icon:hover{background-color:#0b49d1!important}}@media(hover:hover){.app-input-container.has-valid.has-text:not(.has-dropdown):not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .dropdown-icon-container:hover .dropdown-icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .dropdown-icon-container:hover .dropdown-icon,.app-input-container.has-valid.has-multiple-dropdown.has-text:not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .dropdown-icon-container:hover .dropdown-icon{color:#0b49d1!important}}@media(hover:hover){.app-input-container.has-valid.has-text:not(.has-dropdown):not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .hover-icon:hover,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .hover-icon:hover,.app-input-container.has-valid.has-multiple-dropdown.has-text:not(.removable):not(:has(.app-input:focus-visible)):not(.inverse) .hover-icon:hover{color:#0b49d1!important}}@media(hover:hover){.app-input-container.has-valid.has-text:not(.has-dropdown):not(.removable):has(.app-input:focus-visible) .bg-icon:hover,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):not(.removable):has(.app-input:focus-visible) .bg-icon:hover,.app-input-container.has-valid.has-multiple-dropdown.has-text:not(.removable):has(.app-input:focus-visible) .bg-icon:hover{background-color:#fff!important}}@media(hover:hover){.app-input-container.has-valid.has-text:not(.has-dropdown):not(.removable):has(.app-input:focus-visible) .dropdown-icon-container:hover .dropdown-icon,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):not(.removable):has(.app-input:focus-visible) .dropdown-icon-container:hover .dropdown-icon,.app-input-container.has-valid.has-multiple-dropdown.has-text:not(.removable):has(.app-input:focus-visible) .dropdown-icon-container:hover .dropdown-icon{color:#fff!important}}@media(hover:hover){.app-input-container.has-valid.has-text:not(.has-dropdown):not(.removable):has(.app-input:focus-visible) .hover-icon:hover,.app-input-container.has-valid.has-dropdown.has-selected:not(.has-multiple-dropdown):not(.removable):has(.app-input:focus-visible) .hover-icon:hover,.app-input-container.has-valid.has-multiple-dropdown.has-text:not(.removable):has(.app-input:focus-visible) .hover-icon:hover{color:#fff!important}}.in-table,.in-table.has-error,.in-table.has-valid.has-text{background-color:transparent}.in-table.has-error:not(:hover).in-table:not(.app-input-container:has(.app-input:focus-visible)) .app-input{color:var(--color-text-negative)}.in-table.has-error:not(:hover).in-table:not(.app-input-container:has(.app-input:focus-visible)):not(.static-placeholder) .app-input-label{color:var(--color-text-negative)}.in-table .dropdown-icon-container{opacity:0}@media(hover:hover){.in-table:hover .dropdown-icon-container{opacity:1}}.in-table:has(.app-input:focus-visible) .dropdown-icon-container{opacity:1}.app-input-icon{position:absolute;right:4px;top:4px;pointer-events:none;transition:color .1s cubic-bezier(.46,.03,.51,.95),background-color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95)}.button-icon{opacity:0;pointer-events:none}@media(hover:hover){.button-icon:hover{cursor:pointer}}.bg-icon{background-color:var(--color-icon-neutral);color:var(--color-surface-neutral);border-radius:1px;height:18px;width:18px;padding:0;display:grid;place-items:center;transition:background-color .1s cubic-bezier(.46,.03,.51,.95),color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95),transform .1s cubic-bezier(.46,.03,.51,.95);transform-box:border-box;transform-origin:center;will-change:transform}.bg-icon svg{transition:transform .1s cubic-bezier(.46,.03,.51,.95)}@media(hover:hover){.bg-icon:hover{transform:scale(1.2222222222)}.bg-icon:hover svg{transform:scale(.8181818182)}}.bg-icon:active{transform:scale(1)}.round-icon{background-color:#919191;color:#2f2f2f;border-radius:50%;height:18px;width:18px;padding:0;display:grid;place-items:center;transition:background-color .1s cubic-bezier(.46,.03,.51,.95),color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95)}.positive-icon{color:var(--color-icon-positive);height:18px;width:18px;display:grid;place-items:center;opacity:0}.warning-icon{color:var(--color-icon-negative);height:18px;width:18px;display:grid;place-items:center;opacity:0}.text-color-positive:not(:hover):not(:has(.app-input:focus-visible)) .app-input{color:#3b73ed}.is-plan.has-selected .app-input,.is-plan.has-selected .dropdown-selected-content,.is-plan.has-selected .selected-text{font-weight:700}.is-plan.has-selected:not(:has(.app-input:focus-visible)) .app-input,.is-plan.has-selected:not(:has(.app-input:focus-visible)) .dropdown-selected-content,.is-plan.has-selected:not(:has(.app-input:focus-visible)) .selected-text{color:#3b73ed}@media(hover:hover){.is-plan.has-selected:not(:has(.app-input:focus-visible)):hover .app-input,.is-plan.has-selected:not(:has(.app-input:focus-visible)):hover .dropdown-selected-content,.is-plan.has-selected:not(:has(.app-input:focus-visible)):hover .selected-text{color:#0b49d1}}.floating-error .app-input-error{opacity:0!important}.static-error .app-input-error{pointer-events:none!important;transform:translateY(calc(-100% - 4px))!important;transition:margin .1s ease-in-out,opacity .1s ease-in-out}.static-error.has-icon .app-input-error{margin-right:26px!important}.static-error:has(.app-input:not(:focus-visible)) .app-input-error{opacity:1}.static-error.has-text .app-input-error{opacity:0!important}.static-placeholder .app-input-label{position:relative;white-space:nowrap;font-size:11px;font-weight:600}.static-placeholder .dropdown-selected{overflow:hidden;display:flex!important;justify-content:left!important}.static-placeholder .dropdown-selected .selected-label-hidden{width:max-content;font-size:11px;font-weight:600;opacity:0;-webkit-user-select:none;user-select:none;pointer-events:none}.static-placeholder .dropdown-selected .selected-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;display:inline-block}.static-placeholder .app-input{padding-left:0!important}.static-placeholder.has-dropdown .cancel-button{display:none}.static-placeholder.has-dropdown .dropdown-icon-container .dropdown-icon{opacity:0;pointer-events:none}.static-placeholder.has-dropdown:not(:has(.app-input:disabled)):has(.app-input:focus-visible) .icon-container .icon,.static-placeholder.has-dropdown:not(:has(.app-input:disabled)):has(.app-input:focus-visible) .icon-container .icon-sm{opacity:0}.static-placeholder.has-dropdown:not(:has(.app-input:disabled)):has(.app-input:focus-visible) .dropdown-icon-container{z-index:5;pointer-events:auto;cursor:pointer}.static-placeholder.has-dropdown:not(:has(.app-input:disabled)):has(.app-input:focus-visible) .dropdown-icon-container .dropdown-icon{opacity:1!important}@media(hover:hover){.static-placeholder.has-dropdown:not(:has(.app-input:disabled)):hover .icon-container .icon,.static-placeholder.has-dropdown:not(:has(.app-input:disabled)):hover .icon-container .icon-sm{opacity:0}.static-placeholder.has-dropdown:not(:has(.app-input:disabled)):hover .dropdown-icon-container{z-index:5;pointer-events:auto;cursor:pointer}.static-placeholder.has-dropdown:not(:has(.app-input:disabled)):hover .dropdown-icon-container .dropdown-icon{opacity:1!important}}.static-placeholder.has-dropdown .dropdown-icon-container{right:4px!important;left:auto!important}.app-input-container.has-icon:has(.app-input:focus-visible) .icon-container .icon,.app-input-container.has-icon:has(.app-input:focus-visible) .icon-container .icon-sm,.app-input-container.has-icon:has(.app-input:focus-visible) .dropdown-icon-container .icon,.app-input-container.has-icon:has(.app-input:focus-visible) .dropdown-icon-container .icon-sm,.app-input-container.has-password:has(.app-input:focus-visible) .icon-container .icon,.app-input-container.has-password:has(.app-input:focus-visible) .icon-container .icon-sm,.app-input-container.has-password:has(.app-input:focus-visible) .dropdown-icon-container .icon,.app-input-container.has-password:has(.app-input:focus-visible) .dropdown-icon-container .icon-sm,.app-input-container.has-dropdown:has(.app-input:focus-visible) .icon-container .icon,.app-input-container.has-dropdown:has(.app-input:focus-visible) .icon-container .icon-sm,.app-input-container.has-dropdown:has(.app-input:focus-visible) .dropdown-icon-container .icon,.app-input-container.has-dropdown:has(.app-input:focus-visible) .dropdown-icon-container .icon-sm{color:var(--color-icon-inverse)!important}.app-input-container.has-icon.colored-icon .icon-container .icon,.app-input-container.has-icon.colored-icon .icon-container .icon-sm,.app-input-container.has-password.colored-icon .icon-container .icon,.app-input-container.has-password.colored-icon .icon-container .icon-sm,.app-input-container.has-dropdown.colored-icon .icon-container .icon,.app-input-container.has-dropdown.colored-icon .icon-container .icon-sm{color:var(--icon-color)}.app-input-container.has-icon.is-empty:has(.app-input:disabled) .icon-container .icon,.app-input-container.has-icon.is-empty:has(.app-input:disabled) .icon-container .icon-sm,.app-input-container.has-icon.is-empty:has(.app-input:disabled) .dropdown-icon-container .icon,.app-input-container.has-icon.is-empty:has(.app-input:disabled) .dropdown-icon-container .icon-sm,.app-input-container.has-password.is-empty:has(.app-input:disabled) .icon-container .icon,.app-input-container.has-password.is-empty:has(.app-input:disabled) .icon-container .icon-sm,.app-input-container.has-password.is-empty:has(.app-input:disabled) .dropdown-icon-container .icon,.app-input-container.has-password.is-empty:has(.app-input:disabled) .dropdown-icon-container .icon-sm,.app-input-container.has-dropdown.is-empty:has(.app-input:disabled) .icon-container .icon,.app-input-container.has-dropdown.is-empty:has(.app-input:disabled) .icon-container .icon-sm,.app-input-container.has-dropdown.is-empty:has(.app-input:disabled) .dropdown-icon-container .icon,.app-input-container.has-dropdown.is-empty:has(.app-input:disabled) .dropdown-icon-container .icon-sm{color:var(--color-icon-disable)!important}.app-input-container.has-icon .positive-icon,.app-input-container.has-icon .warning-icon,.app-input-container.has-password .positive-icon,.app-input-container.has-password .warning-icon,.app-input-container.has-dropdown .positive-icon,.app-input-container.has-dropdown .warning-icon{display:none!important}.app-input-container.has-icon .icon,.app-input-container.has-icon .icon-sm,.app-input-container.has-password .icon,.app-input-container.has-password .icon-sm,.app-input-container.has-dropdown .icon,.app-input-container.has-dropdown .icon-sm{height:18px;width:18px;display:grid;place-items:center;color:var(--color-icon-neutral);transition:color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95);opacity:1}.app-input-container.has-icon:has(.app-input:focus-visible):not(.static-placeholder) .dropdown-selected,.app-input-container.has-password:has(.app-input:focus-visible):not(.static-placeholder) .dropdown-selected,.app-input-container.has-dropdown:has(.app-input:focus-visible):not(.static-placeholder) .dropdown-selected{width:calc(100% - 48px)!important}@media(hover:hover){.app-input-container.has-icon:hover:not(:has(.app-input:disabled)):not(.static-placeholder) .dropdown-selected,.app-input-container.has-password:hover:not(:has(.app-input:disabled)):not(.static-placeholder) .dropdown-selected,.app-input-container.has-dropdown:hover:not(:has(.app-input:disabled)):not(.static-placeholder) .dropdown-selected{width:calc(100% - 48px)!important}}.icon-sm{height:14px;width:14px}.app-input-container.has-icon .icon-container,.app-input-container.has-password .icon-container{height:26px;display:flex;justify-items:center;align-items:center;gap:4px;padding:.25rem 0 .25rem 6px}@media(hover:hover){.app-input-container.has-icon .icon-container:hover,.app-input-container.has-password .icon-container:hover{cursor:text}}.app-input-container.has-icon .subcontent,.app-input-container.has-password .subcontent{left:32px}.app-input-container.has-icon .app-input-label,.app-input-container.has-password .app-input-label{left:27px}.app-input-container.has-icon .app-input,.app-input-container.has-password .app-input{padding-left:4px}.separator{height:14px;width:1px;border-radius:2px;background-color:var(--color-icon-neutral);transition:background-color .1s cubic-bezier(.46,.03,.51,.95);opacity:40%}.has-password .password-icons{display:grid;place-items:center;position:relative;height:18px;width:18px}.has-password .password-icons .icon,.has-password .password-icons .icon-sm{position:absolute;opacity:0}.has-password.is-empty:has(.app-input:not(:focus-visible)) .password-key{opacity:1!important}.has-password.is-empty:has(.app-input:not(:focus-visible)) .password-icons{pointer-events:none}.has-password:has(.app-input:disabled) .password-icons{pointer-events:none}.has-password.has-text .password-hidden,.has-password:has(.app-input:focus-visible) .password-hidden{opacity:1!important}@media(hover:hover){.has-password.has-text .password-hidden:hover,.has-password:has(.app-input:focus-visible) .password-hidden:hover{cursor:pointer}}.has-visible.has-text .password-shown,.has-visible:has(.app-input:focus-visible) .password-shown{opacity:1!important}@media(hover:hover){.has-visible.has-text .password-shown:hover,.has-visible:has(.app-input:focus-visible) .password-shown:hover{cursor:pointer}}.has-visible.has-text .password-hidden,.has-visible:has(.app-input:focus-visible) .password-hidden{opacity:0!important;pointer-events:none}.has-number .number-container{position:relative;display:flex;justify-content:center;align-items:center;right:4px;pointer-events:none}.has-number .number-buttons{display:flex;gap:4px;position:absolute;right:0;justify-content:center;align-items:center;opacity:0;transition:opacity .1s cubic-bezier(.46,.03,.51,.95);pointer-events:none}.has-number .plus-icon,.has-number .minus-icon{cursor:pointer;pointer-events:none}.has-number:has(.app-input:focus-visible){cursor:text}.has-number:has(.app-input:focus-visible) .number-buttons{opacity:1}.has-number:has(.app-input:focus-visible) .plus-icon{pointer-events:auto}.has-number:has(.app-input:focus-visible) .minus-icon{pointer-events:auto}.has-number:has(.app-input:focus-visible) .button-icon{opacity:0!important;pointer-events:none!important}.has-number:has(.app-input:focus-visible) .number-container{width:60px}.has-number:has(.app-input:focus-visible) .subcontent{right:52px!important}.has-number:has(.app-input:focus-visible).has-text .subcontent{right:52px!important}.colored-icon .icon,.colored-icon .icon-sm{color:var(--icon-color)!important}.dropdown-anchor{position:absolute;width:100%;-webkit-user-select:none;user-select:none;pointer-events:none;opacity:0}.dropdown-infinite-scroll-item{width:100%;-webkit-user-select:none;user-select:none;pointer-events:none;opacity:0;height:0}.dropdown-menu{min-width:0px!important;width:100%;border:0;margin-top:4px;top:30px;height:var(--unfiltered-height);min-height:var(--unfiltered-height);padding:0!important;overflow:hidden;border-radius:0!important;background:transparent!important}.dropdown-menu.has-stroke .dropdown-menu-content{outline:1px solid #6c6c6c;outline-offset:-1px}.dropdown-menu .dropdown-menu-content{position:absolute;width:100%;background-color:#2f2f2f;border-radius:3px;padding:4px 0 4px 4px;max-height:244px;z-index:1100!important;overflow-y:scroll;margin-top:auto!important;scroll-padding:6px 0}.dropdown-menu .dropdown-menu-content::-webkit-scrollbar{background-color:#2f2f2f;border-radius:0 3px 3px 0;width:4px}.dropdown-menu .dropdown-menu-content::-webkit-scrollbar-thumb{width:4px;background:#2f2f2f;border-left:2px solid #919191;background-clip:padding-box;border-radius:1px 3px 3px 1px}@supports (-moz-appearance: none){.dropdown-menu .dropdown-menu-content{padding-right:4px;scrollbar-width:4px;scrollbar-color:#919191 transparent;scrollbar-gutter:stable!important}@media(hover:hover){.dropdown-menu .dropdown-menu-content:hover{scrollbar-color:#919191 transparent;scrollbar-width:4px!important;scrollbar-gutter:stable!important}}}@-moz-document url-prefix(){.dropdown-menu .dropdown-menu-content{overflow:-moz-scrollbars-vertical;scrollbar-width:4px;scrollbar-color:#919191 transparent}}.option-icon{color:#6c6c6c;transition:color .1s cubic-bezier(.46,.03,.51,.95)}.option-icon.full-size{width:max-content;min-width:100%;height:18px!important;min-height:18px;flex-shrink:0;overflow:hidden}.option-icon.full-size svg{height:18px;width:max-content}.cai-color{color:var(--color)!important;transition:color .1s cubic-bezier(.46,.03,.51,.95)}@media(hover:hover){.color-item:hover .cai-color{color:var(--hover-color)!important}}.dropdown-item{color:#fff;font-weight:400;font-size:14px;line-height:18px;height:26px;padding:4px;width:100%;scroll-margin:6px 0;outline:1px solid transparent;outline-offset:-1px;display:flex;align-items:center;justify-content:left;gap:4px;background-color:#2f2f2f;transition:background-color .1s cubic-bezier(.46,.03,.51,.95),color .1s cubic-bezier(.46,.03,.51,.95),outline .1s cubic-bezier(.46,.03,.51,.95);border-radius:2px;position:relative}.dropdown-item.focused{outline:1px solid #6c6c6c!important}.dropdown-item.focused .end-item-base{opacity:0}.dropdown-item.focused .end-item-hover{opacity:1}.dropdown-item.focused .full-icon{color:#ffffffb2}.dropdown-item.focused .truck-trailer-option{opacity:1}.dropdown-item .icon,.dropdown-item .icon-sm{color:#919191}.dropdown-item .dropdown-content-with-icon{max-width:calc(100% - 22px);overflow-x:hidden;word-break:break-all;text-overflow:ellipsis;white-space:nowrap}.dropdown-item .dropdown-content-hazardous{max-width:calc(100% - 40px);overflow-x:hidden;word-break:break-all;text-overflow:ellipsis;white-space:nowrap}.dropdown-item .dropdown-content{max-width:70%;overflow-x:hidden;word-break:break-all;text-overflow:ellipsis;white-space:nowrap}@media(hover:hover){.dropdown-item:hover:not(.no-hover){background-color:#424242}.dropdown-item:hover:not(.no-hover) .end-item-base{opacity:0}.dropdown-item:hover:not(.no-hover) .end-item-hover{opacity:1}.dropdown-item:hover:not(.no-hover) .full-icon{color:#ffffffb2}.dropdown-item:hover:not(.no-hover) .truck-trailer-option{opacity:1}}.dropdown-item.no-hover{cursor:default;pointer-events:none}.dropdown-item:focus-visible{background-color:#424242;border:0;outline:none}.dropdown-item:not(:first-child){margin-top:4px}.dropdown-item.banned{color:#919191;cursor:default}@media(hover:hover){.dropdown-item.banned:hover{color:#919191;background-color:#2f2f2f}.dropdown-item.banned:hover .end-item-base{opacity:0}.dropdown-item.banned:hover .end-item-hover{opacity:1}}.dropdown-item.dnu .round-icon{background-color:#e66767}.dropdown-item.selected .dispatch-load-count,.dropdown-item.selected .unassigned-ltl,.dropdown-item.selected .unassigned-ltl .icon,.dropdown-item.selected .unassigned-ltl .icon-sm{color:#92b1f5}.dropdown-item:not(:hover):not(.focused):not(.selected) .truck-icon{color:#919191}.dropdown-item:not(:hover):not(.focused):not(.selected) .trailer-icon{color:#919191}@media(hover:hover){.dropdown-avatar:hover{z-index:20}}.no-results{color:#919191;font-weight:700;cursor:default;pointer-events:none}.add-new{color:#92b1f5!important;font-weight:700;font-size:11px}.add-new .dropdown-item-icon{opacity:1}@media(hover:hover){.add-new:hover{background-color:#3b73ed66!important;color:#fff!important}}.selected{font-weight:700}.selected .dropdown-item-icon{opacity:1}.selected .dropdown-item-count{color:#fff;background-color:#3b73ed}.selected .full-icon{color:#fff}.selected .end-item-base,.selected .end-item-hover{font-weight:700;color:#92b1f5}.selected .end-item-base .icon,.selected .end-item-base .icon-sm,.selected .end-item-hover .icon,.selected .end-item-hover .icon-sm{color:#92b1f5}.dropdown-item-icon{opacity:0;color:#92b1f5;width:14px;height:14px;margin-left:auto}.dropdown-item-icon.no-margin{margin-left:0}.dropdown-item-count{position:absolute;right:6px;top:50%;transform:translateY(-50%);padding:2px 5px;border-radius:10px;background-color:#424242;color:#ffffffb2;min-width:18px;line-height:14px;font-weight:600;font-size:11px;text-align:center}.fraud-icon{color:#fab15c!important;height:18px;width:18px}.dropdown-icon-container{position:absolute;right:4px;top:50%;transform:translateY(-50%);width:18px;height:18px;display:grid;place-items:center;transition:opacity .1s cubic-bezier(.46,.03,.51,.95)}.dropdown-icon-container.open .dropdown-icon{transform:rotateX(180deg)}.dropdown-icon{transition:transform .1s cubic-bezier(.46,.03,.51,.95),color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95)!important;transform:rotateX(0);cursor:pointer}.has-dropdown .app-input-icon{right:26px}.has-dropdown:has(.app-input:focus-visible) .subcontent{right:26px!important}.has-dropdown:has(.app-input:focus-visible).has-text .subcontent,.has-dropdown:has(.app-input:focus-visible).has-selected .subcontent{right:48px!important}.has-dropdown:has(.app-input:focus-visible):not(.static-placeholder):not(.is-adding) .app-input{padding-right:48px!important}@media(hover:hover){.has-dropdown:hover:not(.static-placeholder):not(.is-adding) .app-input{padding-right:48px!important}}.has-right .app-input{text-align:right}@media(pointer:coarse){.has-right .app-input{transform-origin:right center}}.has-right .positive-icon,.has-right .app-input-icon{left:4px;right:auto}.has-right .cancel-button{z-index:1}.has-right.has-number .plus-button-container{order:2}.has-right.has-number .minus-button-container{order:1}.has-right.static-placeholder .app-input-icon{right:4px!important;left:auto!important;opacity:0!important}.has-right.static-placeholder:has(.app-input:focus-visible) .cancel-button{opacity:0!important;pointer-events:none!important}.has-right.static-placeholder.removable .cancel-button .bg-icon{background-color:transparent!important}@media(hover:hover){.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)).has-valid.has-text .cancel-button .bg-icon{color:var(--color-icon-positive)!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)).has-valid.has-text .cancel-button .bg-icon:hover{color:#c20c0c!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)).has-valid.has-text:has(.app-input:focus-visible) .cancel-button .bg-icon{color:var(--color-icon-inverse)!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)).has-valid.has-text:has(.app-input:focus-visible) .cancel-button .bg-icon:hover{color:#fff!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)):not(.has-text) .cancel-button .bg-icon{color:var(--color-icon-neutral)!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)):not(.has-text) .cancel-button .bg-icon:hover{color:#c20c0c!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)):not(.has-text):has(.app-input:focus-visible) .cancel-button .bg-icon{color:var(--color-icon-inverse)!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)):not(.has-text):has(.app-input:focus-visible) .cancel-button .bg-icon:hover{color:#fff!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)).has-error .cancel-button .bg-icon{color:var(--color-icon-negative)!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)).has-error .cancel-button .bg-icon:hover{color:#c20c0c!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)) .cancel-button{opacity:1!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)) .cancel-button .bg-icon{opacity:1!important;pointer-events:auto!important}.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)) .icon-container .icon,.has-right.static-placeholder.removable:hover:not(:has(.app-input:disabled)) .icon-container .icon-sm{opacity:0!important}}@media(hover:hover){.has-right.static-placeholder:hover:not(:has(.app-input:focus-visible)):not(:has(.app-input:disabled)).has-text .cancel-button{opacity:1!important}}.has-right .app-input{order:1}.has-right.has-subcontent .app-input{flex:1;min-width:0;word-break:none}.has-right .dropdown-selected{margin-left:0!important;text-align:right!important;right:0!important;left:0!important;justify-content:flex-end!important;width:100%!important}.has-right .subcontent{position:relative!important;order:1;display:grid;place-items:center;padding-right:4px;height:unset!important;transform:translateY(0)!important;left:0!important;right:unset!important}.has-right .subcontent .subcontent-hide{display:none!important}.has-right.has-text .subcontent{left:0!important;right:unset!important}.has-right:has(.app-input:focus-visible) .subcontent{left:0!important;right:unset!important}.has-right.has-icon .subcontent,.has-right.has-password .subcontent{padding-right:0!important;padding-left:4px}.has-right.has-icon .dropdown-selected,.has-right.has-password .dropdown-selected{width:calc(100% - 24px)!important}.has-right.has-icon .app-input,.has-right.has-password .app-input{padding-right:0!important}.has-right.has-icon .app-input-label,.has-right.has-password .app-input-label{left:0!important}.has-right.has-icon.fade-placeholder .app-input-label,.has-right.has-password.fade-placeholder .app-input-label{left:auto!important;right:24px!important}.has-right.has-icon .icon-container,.has-right.has-password .icon-container{width:30px;padding-left:4px}.has-right.has-icon .icon-container .icon,.has-right.has-icon .icon-container .icon-sm,.has-right.has-password .icon-container .icon,.has-right.has-password .icon-container .icon-sm{order:2}.has-right.has-dropdown .app-input-icon{left:26px}.has-right.has-dropdown .dropdown-icon-container{left:4px}.has-right .warning-icon{display:none!important}.has-right.has-number .separator{order:3}.has-right.has-number .number-buttons{left:0;right:unset}.has-right.has-number .number-container{left:4px;right:unset}.has-right.has-number.app-input-container:has(.app-input:focus-visible) .app-input{padding-left:4px}@media(hover:hover){.has-right.has-number.app-input-container:hover:not(:has(.app-input:disabled)) .number-container{width:60px}.has-right.has-number.app-input-container:hover:not(:has(.app-input:disabled)) .app-input{padding-left:4px}}.has-right .icon-container{order:2;margin-right:4px}.has-right .icon-container .password-icons{order:2}.has-right.fade-placeholder .app-input-label{right:0!important;left:auto!important}.has-right.fade-placeholder:has(.app-input:required) .app-input-name:after{content:none!important}.has-right.fade-placeholder:has(.app-input:required) .app-input-name:before{content:\"* \";color:var(--color-text-negative)}@media(hover:hover){.removable:has(.cancel-button:hover).in-table{background-color:transparent!important}.removable:has(.cancel-button:hover).in-table .separator{background-color:var(--color-icon-negative)!important}}@media(hover:hover){.removable:has(.cancel-button:hover):not(.in-table){background-color:var(--color-surface-negative-hover)!important}.removable:has(.cancel-button:hover):not(.in-table) .separator{background-color:var(--color-icon-negative)!important}}@media(hover:hover){.removable:has(.cancel-button:hover):has(.app-input:focus-visible){background-color:var(--color-surface-negative-focus)!important}.removable:has(.cancel-button:hover):has(.app-input:focus-visible) .separator{background-color:var(--color-icon-inverse)!important}}.no-clear .cancel-button{display:none!important}.is-adding{padding-right:20px}.is-adding .dropdown-icon{opacity:0!important}.is-adding .accept-button{pointer-events:none;opacity:0!important}@media(hover:hover){.is-adding:not(.removable):has(.app-input:focus-visible) .bg-icon:hover{background-color:#fff!important}}@media(hover:hover){.is-adding:not(.removable):has(.app-input:focus-visible) .dropdown-icon-container:hover .dropdown-icon{color:#fff!important}}@media(hover:hover){.is-adding:not(.removable):has(.app-input:focus-visible) .hover-icon:hover{color:#fff!important}}.is-adding:has(.app-input:focus-visible){padding-right:48px!important}@media(hover:hover){.is-adding:hover{padding-right:48px!important}}.is-adding.has-right{padding-left:26px}.is-adding.has-right.has-right:has(.app-input:focus-visible){padding-left:40px}@media(hover:hover){.is-adding.has-right.has-right:hover{padding-left:40px}}.is-adding .app-input-icon{right:4px}@media(hover:hover){.is-adding.has-text:hover .button-icon{opacity:1;pointer-events:auto!important}.is-adding.has-text:hover .accept-button{pointer-events:auto;opacity:1!important}}.is-adding.has-text:has(.app-input:focus-visible) .button-icon{opacity:1;pointer-events:auto!important}.is-adding.has-text:has(.app-input:focus-visible) .accept-button{pointer-events:auto;opacity:1!important}.is-adding .cancel-button{opacity:1!important;pointer-events:auto}.is-adding .dropdown-icon-container{pointer-events:none}.is-adding .accept-button{right:26px;pointer-events:auto}.dropdown-selected{-webkit-user-select:none;user-select:none;position:absolute;top:50%;transform:translateY(-50%);left:0;width:calc(100% - 22px);pointer-events:none;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;word-break:break-all;padding:.25rem 6px;font-size:14px;line-height:18px;font-weight:400;border:0;outline:none;margin-top:auto;background-color:transparent;transition:color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95),width .1s ease-in-out;color:var(--color-text);display:flex;gap:4px}.dropdown-selected .dropdown-selected-content{overflow:hidden;-webkit-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex:1}.dropdown-selected .dropdown-selected-hazardous{max-width:calc(100% - 22px)}p.dropdown-selected{-webkit-user-select:none;user-select:none;display:block}.app-input-container:has(.app-input:focus-visible) .dropdown-selected{color:#fff;opacity:.7}.app-input-container:has(.app-input:focus-visible) .dropdown-selected .option-icon{color:#fff!important}.has-icon .positive-icon,.has-icon .warning-icon{display:none}.has-icon .dropdown-selected{left:27px;width:calc(100% - 49px)}@media(hover:hover){.has-icon:hover .dropdown-selected{width:calc(100% - 71px)}}.has-icon.app-input-container:has(.app-input:focus-visible) .dropdown-selected{width:calc(100% - 71px)}.hazard-icon{height:18px;width:max-content}.has-dispatch .app-input-label{transform:translateY(-20px);font-weight:600;font-size:11px;color:var(--color-text-heading)!important}.dispatch-load-count{color:#dadada;font-weight:700}.dispatch-separator{color:#919191;font-weight:400}.dispatch-status{font-family:Montserrat;font-weight:700;font-style:Bold;font-size:11px;line-height:14px;letter-spacing:0%;text-transform:uppercase;color:#ffffffb2;border-radius:2px;padding:2px 4px;display:flex;justify-content:center;align-items:center;gap:4px}.dispatch-status.status-available{background-color:#50ac2533}.dispatch-status.status-dispatched{background-color:#3b73ed33}.dispatch-status.status-arrivedpickup,.dispatch-status.status-checkedinpickup,.dispatch-status.status-checkedin,.dispatch-status.status-loading,.dispatch-status.status-loaded{background-color:#259f9433}.dispatch-status.status-arriveddelivery,.dispatch-status.status-checkedindelivery,.dispatch-status.status-offloading,.dispatch-status.status-offloaded,.dispatch-status.status-empty{background-color:#ff704333}.dispatch-status.status-canceled{background-color:#df3c3c33}.dispatch-status.status-off,.dispatch-status.status-deadheading,.dispatch-status.status-break,.dispatch-status.status-split{background-color:#91919133}.dispatch-status.status-towing{background-color:#9e47ec33}.dispatch-status.status-repair,.dispatch-status.status-dispatchedrepair,.dispatch-status.status-loadedrepair{background-color:#865e3a33}.dispatch-status .status-block{border-radius:1px;background-color:#aaa;padding-left:2px;padding-right:2px;font-family:Montserrat;font-weight:700;font-style:Bold;font-size:11px;line-height:12px;text-align:center;color:#2f2f2f;min-width:12px;height:12px}.dispatch-status .status-block.blue{background-color:#6692f1}.dispatch-status .status-block.green{background-color:#56b4ac}.dispatch-status .status-block.orange{background-color:#ff906d}.has-ftl-dispatch,.has-dispatch{min-width:600px}.has-ftl-dispatch:has(.app-input:focus-visible) .dropdown-selected .dispatch-icon,.has-ftl-dispatch:has(.app-input:focus-visible) .dropdown-selected .trailer-icon,.has-ftl-dispatch:has(.app-input:focus-visible) .dropdown-selected .truck-icon,.has-dispatch:has(.app-input:focus-visible) .dropdown-selected .dispatch-icon,.has-dispatch:has(.app-input:focus-visible) .dropdown-selected .trailer-icon,.has-dispatch:has(.app-input:focus-visible) .dropdown-selected .truck-icon{color:#fff}.dropdown-subitem{display:flex;justify-content:left;align-items:center;gap:4px}.truck-item{width:128px}.trailer-item{width:138px}.truck-trailer-option{opacity:0;transition:opacity .1s cubic-bezier(.46,.03,.51,.95);margin-left:auto}.truck-trailer-icon-colors.ic_truck_semi-truck,.truck-trailer-icon-colors.ic_truck_semi-wSleeper{color:#92b1f5}.truck-trailer-icon-colors.ic_truck_box-truck,.truck-trailer-icon-colors.ic_truck_reefer,.truck-trailer-icon-colors.ic_truck_cargo-van{color:#fbc88b}.truck-trailer-icon-colors.ic_truck_cement,.truck-trailer-icon-colors.ic_truck_dump,.truck-trailer-icon-colors.ic_truck_garbage{color:#ed9292}.truck-trailer-icon-colors.ic_truck_tow-truck,.truck-trailer-icon-colors.ic_truck_car-hauler,.truck-trailer-icon-colors.ic_truck_spotter{color:#86c9c3}.truck-trailer-icon-colors.ic_trailer_flatbed,.truck-trailer-icon-colors.ic_trailer_low-boy,.truck-trailer-icon-colors.ic_trailer_step-deck{color:#92b1f5}.truck-trailer-icon-colors.ic_trailer_chassis,.truck-trailer-icon-colors.ic_trailer_container{color:#80d6f1}.truck-trailer-icon-colors.ic_trailer_conestoga,.truck-trailer-icon-colors.ic_trailer_side-kit{color:#8785e8}.truck-trailer-icon-colors.ic_trailer_dryvan,.truck-trailer-icon-colors.ic_trailer_reefer{color:#fbc88b}.truck-trailer-icon-colors.ic_trailer_end-dump,.truck-trailer-icon-colors.ic_trailer_bottom-dump,.truck-trailer-icon-colors.ic_trailer_hopper{color:#ed9292}.truck-trailer-icon-colors.ic_trailer_tanker,.truck-trailer-icon-colors.ic_trailer_tanker-pneumatic{color:#ed93bb}.truck-trailer-icon-colors.ic_trailer_carhauler,.truck-trailer-icon-colors.ic_trailer_carhauler-stinger{color:#86c9c3}.sub-label{margin-left:auto;margin-right:22px;opacity:0;transition:margin .1s ease-in-out,opacity .1s ease-in-out;color:#6c6c6c}.app-input-label:has(.sub-label),.app-input-label:has(.accident-state){width:100%}.has-selected .sub-label{opacity:1}.dispatch-icon,.trailer-icon,.truck-icon{color:#919191;transition:color .1s cubic-bezier(.46,.03,.51,.95)}.truck-icon,.trailer-icon{width:42px}.truck-number{width:80px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.trailer-number{width:90px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.driver-name{max-width:170px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.dropdown-subitem-end{margin-left:auto;position:relative;height:26px;width:auto;display:flex;justify-content:right;align-items:center;font-family:Montserrat;font-weight:400;font-size:11px;line-height:18px;letter-spacing:0%;text-align:right;vertical-align:bottom}.end-item-base{position:absolute;display:flex;justify-content:right;align-items:center;width:max-content;gap:4px;color:#919191;transition:color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95);text-align:right}.dispatch-ltl{font-family:Montserrat;font-weight:700;font-size:11px;line-height:18px;letter-spacing:0%;text-align:right}.unassigned-ltl{margin-left:auto;display:flex;justify-content:right;align-items:center;width:max-content;gap:4px;color:#919191;transition:color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95);font-family:Montserrat;font-weight:700;font-size:11px;line-height:18px;letter-spacing:0%;text-align:right}.end-item-hover{position:absolute;display:flex;justify-content:right;align-items:center;gap:4px;width:max-content;opacity:0;color:#919191;transition:color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95)}.selected-end-item{margin-left:auto;font-family:Montserrat;font-weight:400;font-size:11px;line-height:18px;letter-spacing:0%;text-align:right;display:flex;justify-content:right;align-items:center;gap:4px}.group-item{font-family:Montserrat;font-weight:700!important;font-size:11px!important;line-height:18px;letter-spacing:0%;vertical-align:middle;text-transform:uppercase;background-color:#2f2f2f;color:#aaa!important}.group-item:not(:first-child){border-top:1px solid #424242}.group-item .group-icon{margin-left:auto;transform:rotate(180deg);transition:transform .1s cubic-bezier(.46,.03,.51,.95)}.group-item.unfolded{color:#fff!important}.group-item.unfolded .group-icon{transform:rotate(0)}.counter{background-color:#424242;padding:1px 4px;border-radius:60px;font-family:Montserrat;font-weight:600;font-size:11px;min-width:18px;line-height:14px;letter-spacing:0%;text-align:center;vertical-align:middle;color:#ffffffb2;transition:color .1s cubic-bezier(.46,.03,.51,.95)}.password-requirement{padding:6px;background-color:#fffffff2!important;box-shadow:0 0 4px #0006;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);overflow-y:hidden}.password-requirement p{font-family:Montserrat;font-weight:600;font-size:11px;line-height:14px;letter-spacing:0%;vertical-align:middle;color:#6c6c6c;font-style:italic}.password-requirement .icon,.password-requirement .icon-sm{width:14px!important;height:14px!important}.password-requirement .icon.checkmark,.password-requirement .checkmark.icon-sm{color:#ccc}.password-requirement .icon.cancel,.password-requirement .cancel.icon-sm{color:#e66767}.password-requirement ul{list-style-type:none;margin:6px 0 0;padding:0}.password-requirement ul li{color:#424242;font-size:11px;font-style:italic;font-weight:500;line-height:14px;display:flex;gap:4px}.password-requirement ul li.valid{color:#919191!important}.password-requirement ul li:not(:first-child){margin-top:6px}@media(hover:hover){.has-end-item:not(:has(.app-input:disabled)):hover .dropdown-selected{width:calc(100% - 44px)}}.has-end-item:not(:has(.app-input:disabled)):has(.app-input:focus-visible) .dropdown-selected{width:calc(100% - 44px)}.progress-bar{width:24px;height:8px;border-radius:2px;position:relative;transition:background-color .1s cubic-bezier(.46,.03,.51,.95)}.progress-bar:after{content:\"\";position:absolute;top:0;width:var(--progress);height:100%;transition:background-color .1s cubic-bezier(.46,.03,.51,.95)}.progress-bar.low{background-color:#df3c3c33}.progress-bar.low:after{background-color:#e66767}.progress-bar.medium{background-color:#f89b2e33}.progress-bar.medium:after{background-color:#fab15c}.progress-bar.high{background-color:#56b4ac33}.progress-bar.high:after{background-color:#56b4ac}.progress-bar.disable{background-color:#91919133}.progress-bar.disable:after{display:none}.app-input-container:has(.app-input:focus-visible) .selected-end-item .progress-bar{background-color:#fff!important}.full-icon{color:#919191}.fuelcard-number{width:216px}.fuelcard-brand{width:132px}.owner-ein{width:118px}.accident-name,.accident-unit,.accident-dob,.accident-cdl-number,.accident-vin,.accident-plate{flex-shrink:0}.accident-name>p,.accident-unit>p{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.accident-name{width:218px}.accident-unit{width:170px}.accident-dob,.accident-cdl-number,.accident-vin,.accident-plate{text-align:right;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.accident-dob{width:134px}.accident-cdl-number{width:140px}.accident-vin{width:182px}.accident-plate{width:140px}.accident-state{margin-left:auto;justify-content:flex-end;text-align:right}.app-input-label .accident-state{margin-right:22px;white-space:nowrap;transition:margin .1s ease-in-out}.has-multiple-dropdown.has-text{border-top-left-radius:0!important;border-top-right-radius:0!important}.multiple-container{display:flex;flex-wrap:wrap;gap:4px;padding:4px;border-top-left-radius:2px;border-top-right-radius:2px;position:relative;transition:background-color .1s ease-in-out;background-color:#e9effd}.multiple-container.hovered{background-color:#bed0f9}.multiple-container.hovered .multiple-selected{background-color:#e9effd}.multiple-container.focused{background-color:#0b49d1}.multiple-container.focused .multiple-selected{background-color:#3b73ed;color:#fff}.multiple-selected{background-color:#bed0f9;color:#2f2f2f;transition:background-color .1s ease-in-out,color .1s ease-in-out;display:flex;align-items:center;justify-content:space-between;width:100%;cursor:pointer;padding:2px 4px;-webkit-user-select:none;user-select:none;font-family:Montserrat;font-size:14px;font-weight:400;line-height:18px;width:209px;height:22px;border-radius:1px}.multiple-selected p{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}@media(hover:hover){.multiple-selected:hover{color:#2f2f2f!important;background-color:#fff!important}.multiple-selected:hover .multiple-remove-button{opacity:1}}.multiple-selected .multiple-remove-button{opacity:0;background-color:#6692f1;color:#fff;width:14px;height:14px}.multiple-selected .multiple-remove-button .multiple-remove-icon{width:12px;height:12px}.multiple-label{color:#424242;-webkit-user-select:none;user-select:none;pointer-events:none;font-family:Montserrat;font-size:11px;font-style:normal;font-weight:600;position:absolute;top:0;left:6px;transform:translateY(-14px)}.dropdown-group{border-radius:2px;transition:background-color .1s cubic-bezier(.46,.03,.51,.95),max-height .1s cubic-bezier(.46,.03,.51,.95),height .1s ease-in-out;margin-top:4px;max-height:var(--max-height);height:var(--max-height);overflow:hidden}.dropdown-group.no-items{cursor:default;pointer-events:none}.dropdown-group .group-item{outline:none;color:#fff!important;font-weight:400!important;font-size:14px!important;display:flex;transition:font-weight .1s ease-in-out,background-color .1s cubic-bezier(.46,.03,.51,.95),color .1s cubic-bezier(.46,.03,.51,.95);padding-left:6px;padding-right:6px}.dropdown-group .group-item.unfolded .counter{color:#fff}@media(hover:hover){.dropdown-group .group-item:hover .counter{color:#fff}}.dropdown-group .group-item.unfolded{font-weight:700!important}.dropdown-group .group-item .counter{margin-left:auto}.dropdown-group .group-item .group-icon{margin-left:0}.dropdown-group.active{background-color:#424242}@media(hover:hover){.dropdown-group.active .group-item:hover{background-color:#424242}}.dropdown-group.active .dropdown-item{background-color:#424242}@media(hover:hover){.dropdown-group:hover:not(.no-items){background-color:#424242}.dropdown-group:hover:not(.no-items) .group-item:hover{background-color:#424242}.dropdown-group:hover:not(.no-items) .dropdown-item{background-color:#424242}}.dropdown-group.active{padding:4px;padding-top:0!important}.dropdown-group.active .group-item{position:relative!important;padding-left:2px!important;padding-right:2px!important}@media(hover:hover){.dropdown-group .dropdown-item:not(.group-item):hover{background-color:#6c6c6c!important}}.fuel-stop-transaction-store{display:flex;gap:4px}.fuel-stop-transaction-store .fuel-stop-transaction-store-address{font-size:11px;color:#ccc;margin-left:auto}.fuel-stop-transaction-store .favorite-icon{color:#92b1f5;width:14px;height:14px}.fuel-stop-transaction-nostore{padding-left:2px;padding-right:2px}.hide-dropdown{opacity:0;pointer-events:none;transition:opacity .1s cubic-bezier(.46,.03,.51,.95)}.dropdown-menu:not(.hide-dropdown) .dropdown-menu-content{transition:max-height .2s cubic-bezier(.46,.03,.51,.95),opacity .2s cubic-bezier(.46,.03,.51,.95),height .1s ease-in-out;animation:dropdown-menu-opening .2s cubic-bezier(.46,.03,.51,.95)}.dropdown-menu:not(.hide-dropdown).animate-dropdown .dropdown-menu-content{max-height:var(--max-height);height:var(--max-height)}.closing:not(.hide-dropdown) .dropdown-menu-content{animation:dropdown-menu-closing .2s cubic-bezier(.46,.03,.51,.95);opacity:0;max-height:0}@keyframes dropdown-menu-opening{0%{max-height:0;opacity:0}to{max-height:244px;opacity:1}}@keyframes dropdown-menu-closing{0%{max-height:244px;opacity:1}to{max-height:0;opacity:0}}.app-input-container:has(.app-input:focus-visible).has-dropdown .loader.loading,.app-input-container:has(.app-input:focus-visible).has-text .loader.loading{opacity:1!important}.app-input-container:has(.app-input:focus-visible).has-dropdown.has-text .loader{transform:translate(-48px)}.loader{position:absolute;top:4px;right:0;transform:translate(-26px);pointer-events:none;z-index:1000;width:18px;height:18px;display:flex;align-items:center;justify-content:center;transition:opacity .1s ease-in-out,transform .1s ease-in-out;opacity:0}.loader-icon{width:14px;height:14px;animation:spin .8s ease-in-out infinite;transform-origin:center;display:flex;align-items:center;justify-content:center}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.size-22{height:22px}.size-22 .icon,.size-22 .icon-sm{height:14px!important;width:14px!important}.size-22 .bg-icon{height:14px!important;width:14px!important;padding:2px!important}.size-22 .icon-container{height:22px!important;padding-top:2px;padding-bottom:2px;padding-left:4px!important}.size-22 .app-input{padding-top:2px;padding-bottom:2px;padding-left:4px}@media(pointer:coarse){.size-22 .app-input{height:22px}}.size-22 .app-input-label{padding-top:2px;padding-bottom:2px;padding-left:4px}.size-22.has-icon .app-input-label{padding-left:0!important}.size-22 .app-input-icon{height:14px!important;width:14px!important}.size-22.has-text .app-input-label,.size-22:has(.app-input:focus-visible) .app-input-label{transform:translateY(-18px)}.size-22 .loader{top:2px;transform:translate(-22px)!important}.strikethrough .app-input,.strikethrough .dropdown-selected-content{text-decoration:line-through}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.split-option>p{max-width:calc(50% - 2px)}.split-option .dropdown-subitem-end{width:calc(50% - 2px)}.split-option .end-item-base,.split-option .end-item-hover{max-width:100%}.selected-end-item-truncate{max-width:50%}.truck-owner-unit{min-width:0}.truck-owner-unit .dropdown-content{max-width:none;min-width:0}.truck-owner-bullet{flex-shrink:0;color:#919191}\n"] }]
4586
4839
  }], ctorParameters: () => [{ type: i1.NgControl, decorators: [{
4587
4840
  type: Optional
4588
4841
  }, {
@@ -6901,6 +7154,7 @@ class CustomDatetimePickersConstants {
6901
7154
  12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
6902
7155
  11,
6903
7156
  ];
7157
+ static hourTimesTwentyFour = Array.from({ length: 24 }, (_, hour) => String(hour).padStart(2, '0'));
6904
7158
  static defaultScrollTypes = {
6905
7159
  pmAmScroll: 0,
6906
7160
  minutesScroll: 0,
@@ -7477,7 +7731,9 @@ class CaCustomDatetimePickersComponent {
7477
7731
  set dateTime(value) {
7478
7732
  this._dateTime = value;
7479
7733
  // Update time value when dateTime changes
7480
- if (this.hourScroll && this.minutesScroll && this.pmAmScroll) {
7734
+ if (this.hourScroll &&
7735
+ this.minutesScroll &&
7736
+ (this.pmAmScroll || this.isTwentyFourHour)) {
7481
7737
  this.setTimeValue();
7482
7738
  }
7483
7739
  }
@@ -7494,6 +7750,10 @@ class CaCustomDatetimePickersComponent {
7494
7750
  this.timeMinutes = CustomDatetimePickersConstants.timeMinutesGapFive;
7495
7751
  else
7496
7752
  this.timeMinutes = CustomDatetimePickersConstants.timeMinutes;
7753
+ this.isTwentyFourHour = this._inputConfig.timeFormat === 'TwentyFourHour';
7754
+ this.hourTimes = this.isTwentyFourHour
7755
+ ? CustomDatetimePickersConstants.hourTimesTwentyFour
7756
+ : CustomDatetimePickersConstants.hourTimes;
7497
7757
  }
7498
7758
  closePopover = new EventEmitter();
7499
7759
  dateCalendar;
@@ -7522,6 +7782,7 @@ class CaCustomDatetimePickersComponent {
7522
7782
  isInputFocus;
7523
7783
  monthNames = CustomDatetimePickersConstants.monthNames;
7524
7784
  hourTimes = CustomDatetimePickersConstants.hourTimes;
7785
+ isTwentyFourHour = false;
7525
7786
  scrollTypes = CustomDatetimePickersConstants.defaultScrollTypes;
7526
7787
  selectedTime = CustomDatetimePickersConstants.defaultSelectedTime;
7527
7788
  timeOfDay = CustomDatetimePickersConstants.timeOfDay;
@@ -7561,7 +7822,8 @@ class CaCustomDatetimePickersComponent {
7561
7822
  const dateInputArray = moment(this.dateTime).format('h/mm/A').split('/');
7562
7823
  // console.log(dateInputArray, 'this.inputConfig');
7563
7824
  setTimeout(() => {
7564
- this.scrollTypes.hourScroll = this.hourTimes.indexOf(parseInt(dateInputArray[0]));
7825
+ // The hour list holds one entry per hour of the day, AM then PM.
7826
+ this.scrollTypes.hourScroll = this.dateTime.getHours();
7565
7827
  this.scrollTypes.minutesScroll = this.timeMinutes.indexOf(dateInputArray[1]);
7566
7828
  this.scrollTypes.pmAmScroll = dateInputArray[2] === 'AM' ? 0 : 1;
7567
7829
  // Update scroll positions if elements exist
@@ -7604,8 +7866,10 @@ class CaCustomDatetimePickersComponent {
7604
7866
  this.scrollTypes.hourScroll * 22;
7605
7867
  this.minutesScroll.nativeElement.scrollTop =
7606
7868
  this.scrollTypes.minutesScroll * 22;
7607
- this.pmAmScroll.nativeElement.scrollTop =
7608
- this.scrollTypes.pmAmScroll * 22;
7869
+ if (this.pmAmScroll) {
7870
+ this.pmAmScroll.nativeElement.scrollTop =
7871
+ this.scrollTypes.pmAmScroll * 22;
7872
+ }
7609
7873
  });
7610
7874
  }
7611
7875
  else {
@@ -7615,6 +7879,12 @@ class CaCustomDatetimePickersComponent {
7615
7879
  }
7616
7880
  setTime(event) {
7617
7881
  event?.stopPropagation();
7882
+ if (this.isTwentyFourHour) {
7883
+ const selectedTime = new Date();
7884
+ selectedTime.setHours(this.scrollTypes.hourScroll, Number(this.timeMinutes[this.scrollTypes.minutesScroll]), 0, 0);
7885
+ this.closePopover.emit(selectedTime);
7886
+ return;
7887
+ }
7618
7888
  this.outputType[0] = this.hourTimes[this.scrollTypes.hourScroll];
7619
7889
  this.outputType[2] = this.timeMinutes[this.scrollTypes.minutesScroll];
7620
7890
  this.outputType[4] = this.timeOfDay[this.scrollTypes.pmAmScroll];
@@ -7687,15 +7957,18 @@ class CaCustomDatetimePickersComponent {
7687
7957
  }
7688
7958
  }
7689
7959
  }
7690
- this.selectedTime = this.timeMinutes[this.scrollTypes.minutesScroll]
7691
- ? `${this.hourTimes[this.scrollTypes.hourScroll]}:${this.timeMinutes[this.scrollTypes.minutesScroll]} ${this.timeOfDay[this.scrollTypes.pmAmScroll]}`
7692
- : '';
7960
+ const selectedTime = `${this.hourTimes[this.scrollTypes.hourScroll]}:${this.timeMinutes[this.scrollTypes.minutesScroll]}`;
7961
+ this.selectedTime = !this.timeMinutes[this.scrollTypes.minutesScroll]
7962
+ ? ''
7963
+ : this.isTwentyFourHour
7964
+ ? selectedTime
7965
+ : `${selectedTime} ${this.timeOfDay[this.scrollTypes.pmAmScroll]}`;
7693
7966
  }
7694
7967
  ngOnDestroy() {
7695
7968
  this.listPreview = CalendarListPreviewStringEnum.FULL_LIST;
7696
7969
  }
7697
7970
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: CaCustomDatetimePickersComponent, deps: [{ token: CalendarDateTimePickerService }], target: i0.ɵɵFactoryTarget.Component });
7698
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: CaCustomDatetimePickersComponent, isStandalone: true, selector: "cai-custom-datetime-pickers", inputs: { dateTime: "dateTime", inputConfig: "inputConfig", calendarType: "calendarType", placeholder: "placeholder" }, outputs: { closePopover: "closePopover", onRefocusInput: "onRefocusInput" }, viewQueries: [{ propertyName: "ref", first: true, predicate: ["ref"], descendants: true, read: ViewContainerRef }, { propertyName: "dateCalendar", first: true, predicate: CaCustomDateTimePickersDateCalendarsComponent, descendants: true }, { propertyName: "pmAmScroll", first: true, predicate: ["pmAmScroll"], descendants: true }, { propertyName: "minutesScroll", first: true, predicate: ["minutesScroll"], descendants: true }, { propertyName: "hourScroll", first: true, predicate: ["hourScroll"], descendants: true }], ngImport: i0, template: "<div\n class=\"temp_inp_holder\"\n (pointerdown)=\"refocusInput($event)\"\n (mousedown)=\"$event.preventDefault()\"\n>\n <div>\n <div class=\"pickers_holder dark_picker\">\n @if (calendarMainType === \"date\") {\n <div class=\"date_picker\">\n <cai-custom-datetime-pickers-date-calendars\n [listPreview]=\"listPreview\"\n [dateTime]=\"dateTime\"\n [isMonthAndYearOnly]=\"_inputConfig.name === 'datepickerBankCard'\"\n (setListPreviewValue)=\"setListPreview($event)\"\n (onRefocusInput)=\"refocusInput($event)\"\n ></cai-custom-datetime-pickers-date-calendars>\n </div>\n }\n @if (calendarMainType === \"time\") {\n <div class=\"time_picker\">\n <div class=\"time_picker_head d-flex\">\n <div class=\"selected_time ta-font-bold\">\n {{ selectedTime || (dateTime | date: \"hh:mm aa\") }}\n </div>\n <div class=\"sel_now ta-font-bold\" (click)=\"setDefaultTime($event)\">\n Default\n </div>\n </div>\n <div class=\"time_picker_body\">\n <div class=\"picker_body_head\">\n <div\n class=\"ta-font-bold\"\n [class.active]=\"hoveredItem === 'hours'\"\n >\n Hour\n </div>\n <div\n class=\"ta-font-bold\"\n [class.active]=\"hoveredItem === 'minutes'\"\n >\n Minute\n </div>\n <div\n class=\"ta-font-bold\"\n [class.active]=\"hoveredItem === 'times'\"\n >\n AM/PM\n </div>\n </div>\n <div class=\"picker_body\">\n <div\n #hourScroll\n (mouseout)=\"hoveredItem = null\"\n (mouseover)=\"hoveredItem = 'hours'\"\n (scroll)=\"onScroll($event, 'hourScroll')\"\n class=\"scroll_pickers\"\n [tabindex]=\"-1\"\n >\n @for (hour of hourTimes; let indx = $index; track indx) {\n <div\n class=\"scroll_item ta-font-medium\"\n [ngClass]=\"{\n 'active_item ta-font-bold':\n scrollTypes.hourScroll === indx,\n }\"\n (click)=\"onScroll($event, 'hourScroll', indx)\"\n >\n {{ hour }}\n </div>\n }\n </div>\n <div\n #minutesScroll\n (mouseout)=\"hoveredItem = null\"\n (mouseover)=\"hoveredItem = 'minutes'\"\n (scroll)=\"onScroll($event, 'minutesScroll')\"\n class=\"scroll_pickers\"\n [tabindex]=\"-1\"\n >\n @for (minutes of timeMinutes; let indx = $index; track indx) {\n <div\n class=\"scroll_item ta-font-medium\"\n [ngClass]=\"{\n 'active_item ta-font-bold':\n scrollTypes.minutesScroll === indx,\n }\"\n (click)=\"onScroll($event, 'minutesScroll', indx)\"\n >\n {{ minutes }}\n </div>\n }\n </div>\n <div\n #pmAmScroll\n (mouseout)=\"hoveredItem = null\"\n (mouseover)=\"hoveredItem = 'times'\"\n (scroll)=\"onScroll($event, 'pmAmScroll')\"\n class=\"scroll_pickers\"\n [tabindex]=\"-1\"\n >\n @for (when of timeOfDay; let indx = $index; track indx) {\n <div\n class=\"scroll_item ta-font-medium\"\n [ngClass]=\"{\n 'active_item ta-font-bold':\n scrollTypes.pmAmScroll === indx,\n }\"\n (click)=\"onScroll($event, 'pmAmScroll', indx)\"\n >\n {{ when }}\n </div>\n }\n </div>\n <div class=\"picker_line\">\n <span class=\"border_line\"></span>\n <span class=\"border_line line_2\"></span>\n </div>\n </div>\n <div class=\"picker_buttons\">\n <div\n (click)=\"closePopup($event)\"\n class=\"pick_button ta-font-bold\"\n >\n Cancel\n </div>\n <div\n (click)=\"setTime($event)\"\n class=\"pick_button set_button ta-font-bold\"\n >\n Set\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: CaCustomDateTimePickersDateCalendarsComponent, selector: "cai-custom-datetime-pickers-date-calendars", inputs: ["listPreview", "dateTime", "isMonthAndYearOnly"], outputs: ["setListPreviewValue", "onRefocusInput"] }, { kind: "pipe", type: i1$1.DatePipe, name: "date" }] });
7971
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: CaCustomDatetimePickersComponent, isStandalone: true, selector: "cai-custom-datetime-pickers", inputs: { dateTime: "dateTime", inputConfig: "inputConfig", calendarType: "calendarType", placeholder: "placeholder" }, outputs: { closePopover: "closePopover", onRefocusInput: "onRefocusInput" }, viewQueries: [{ propertyName: "ref", first: true, predicate: ["ref"], descendants: true, read: ViewContainerRef }, { propertyName: "dateCalendar", first: true, predicate: CaCustomDateTimePickersDateCalendarsComponent, descendants: true }, { propertyName: "pmAmScroll", first: true, predicate: ["pmAmScroll"], descendants: true }, { propertyName: "minutesScroll", first: true, predicate: ["minutesScroll"], descendants: true }, { propertyName: "hourScroll", first: true, predicate: ["hourScroll"], descendants: true }], ngImport: i0, template: "<div\n class=\"temp_inp_holder\"\n (pointerdown)=\"refocusInput($event)\"\n (mousedown)=\"$event.preventDefault()\"\n>\n <div>\n <div class=\"pickers_holder dark_picker\">\n @if (calendarMainType === \"date\") {\n <div class=\"date_picker\">\n <cai-custom-datetime-pickers-date-calendars\n [listPreview]=\"listPreview\"\n [dateTime]=\"dateTime\"\n [isMonthAndYearOnly]=\"_inputConfig.name === 'datepickerBankCard'\"\n (setListPreviewValue)=\"setListPreview($event)\"\n (onRefocusInput)=\"refocusInput($event)\"\n ></cai-custom-datetime-pickers-date-calendars>\n </div>\n }\n @if (calendarMainType === \"time\") {\n <div class=\"time_picker\" [class.time_picker_24h]=\"isTwentyFourHour\">\n <div class=\"time_picker_head d-flex\">\n <div class=\"selected_time ta-font-bold\">\n {{\n selectedTime ||\n (dateTime | date: (isTwentyFourHour ? \"HH:mm\" : \"hh:mm aa\"))\n }}\n </div>\n <div class=\"sel_now ta-font-bold\" (click)=\"setDefaultTime($event)\">\n Default\n </div>\n </div>\n <div class=\"time_picker_body\">\n <div class=\"picker_body_head\">\n <div\n class=\"ta-font-bold\"\n [class.active]=\"hoveredItem === 'hours'\"\n >\n Hour\n </div>\n <div\n class=\"ta-font-bold\"\n [class.active]=\"hoveredItem === 'minutes'\"\n >\n Minute\n </div>\n @if (!isTwentyFourHour) {\n <div\n class=\"ta-font-bold\"\n [class.active]=\"hoveredItem === 'times'\"\n >\n AM/PM\n </div>\n }\n </div>\n <div class=\"picker_body\">\n <div\n #hourScroll\n (mouseout)=\"hoveredItem = null\"\n (mouseover)=\"hoveredItem = 'hours'\"\n (scroll)=\"onScroll($event, 'hourScroll')\"\n class=\"scroll_pickers\"\n [tabindex]=\"-1\"\n >\n @for (hour of hourTimes; let indx = $index; track indx) {\n <div\n class=\"scroll_item ta-font-medium\"\n [ngClass]=\"{\n 'active_item ta-font-bold':\n scrollTypes.hourScroll === indx,\n }\"\n (click)=\"onScroll($event, 'hourScroll', indx)\"\n >\n {{ hour }}\n </div>\n }\n </div>\n <div\n #minutesScroll\n (mouseout)=\"hoveredItem = null\"\n (mouseover)=\"hoveredItem = 'minutes'\"\n (scroll)=\"onScroll($event, 'minutesScroll')\"\n class=\"scroll_pickers\"\n [tabindex]=\"-1\"\n >\n @for (minutes of timeMinutes; let indx = $index; track indx) {\n <div\n class=\"scroll_item ta-font-medium\"\n [ngClass]=\"{\n 'active_item ta-font-bold':\n scrollTypes.minutesScroll === indx,\n }\"\n (click)=\"onScroll($event, 'minutesScroll', indx)\"\n >\n {{ minutes }}\n </div>\n }\n </div>\n @if (!isTwentyFourHour) {\n <div\n #pmAmScroll\n (mouseout)=\"hoveredItem = null\"\n (mouseover)=\"hoveredItem = 'times'\"\n (scroll)=\"onScroll($event, 'pmAmScroll')\"\n class=\"scroll_pickers\"\n [tabindex]=\"-1\"\n >\n @for (when of timeOfDay; let indx = $index; track indx) {\n <div\n class=\"scroll_item ta-font-medium\"\n [ngClass]=\"{\n 'active_item ta-font-bold':\n scrollTypes.pmAmScroll === indx,\n }\"\n (click)=\"onScroll($event, 'pmAmScroll', indx)\"\n >\n {{ when }}\n </div>\n }\n </div>\n }\n <div class=\"picker_line\">\n <span class=\"border_line\"></span>\n @if (!isTwentyFourHour) {\n <span class=\"border_line line_2\"></span>\n }\n </div>\n </div>\n <div class=\"picker_buttons\">\n <div\n (click)=\"closePopup($event)\"\n class=\"pick_button ta-font-bold\"\n >\n Cancel\n </div>\n <div\n (click)=\"setTime($event)\"\n class=\"pick_button set_button ta-font-bold\"\n >\n Set\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: CaCustomDateTimePickersDateCalendarsComponent, selector: "cai-custom-datetime-pickers-date-calendars", inputs: ["listPreview", "dateTime", "isMonthAndYearOnly"], outputs: ["setListPreviewValue", "onRefocusInput"] }, { kind: "pipe", type: i1$1.DatePipe, name: "date" }] });
7699
7972
  }
7700
7973
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: CaCustomDatetimePickersComponent, decorators: [{
7701
7974
  type: Component,
@@ -7703,7 +7976,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImpo
7703
7976
  CommonModule,
7704
7977
  FormsModule,
7705
7978
  CaCustomDateTimePickersDateCalendarsComponent,
7706
- ], template: "<div\n class=\"temp_inp_holder\"\n (pointerdown)=\"refocusInput($event)\"\n (mousedown)=\"$event.preventDefault()\"\n>\n <div>\n <div class=\"pickers_holder dark_picker\">\n @if (calendarMainType === \"date\") {\n <div class=\"date_picker\">\n <cai-custom-datetime-pickers-date-calendars\n [listPreview]=\"listPreview\"\n [dateTime]=\"dateTime\"\n [isMonthAndYearOnly]=\"_inputConfig.name === 'datepickerBankCard'\"\n (setListPreviewValue)=\"setListPreview($event)\"\n (onRefocusInput)=\"refocusInput($event)\"\n ></cai-custom-datetime-pickers-date-calendars>\n </div>\n }\n @if (calendarMainType === \"time\") {\n <div class=\"time_picker\">\n <div class=\"time_picker_head d-flex\">\n <div class=\"selected_time ta-font-bold\">\n {{ selectedTime || (dateTime | date: \"hh:mm aa\") }}\n </div>\n <div class=\"sel_now ta-font-bold\" (click)=\"setDefaultTime($event)\">\n Default\n </div>\n </div>\n <div class=\"time_picker_body\">\n <div class=\"picker_body_head\">\n <div\n class=\"ta-font-bold\"\n [class.active]=\"hoveredItem === 'hours'\"\n >\n Hour\n </div>\n <div\n class=\"ta-font-bold\"\n [class.active]=\"hoveredItem === 'minutes'\"\n >\n Minute\n </div>\n <div\n class=\"ta-font-bold\"\n [class.active]=\"hoveredItem === 'times'\"\n >\n AM/PM\n </div>\n </div>\n <div class=\"picker_body\">\n <div\n #hourScroll\n (mouseout)=\"hoveredItem = null\"\n (mouseover)=\"hoveredItem = 'hours'\"\n (scroll)=\"onScroll($event, 'hourScroll')\"\n class=\"scroll_pickers\"\n [tabindex]=\"-1\"\n >\n @for (hour of hourTimes; let indx = $index; track indx) {\n <div\n class=\"scroll_item ta-font-medium\"\n [ngClass]=\"{\n 'active_item ta-font-bold':\n scrollTypes.hourScroll === indx,\n }\"\n (click)=\"onScroll($event, 'hourScroll', indx)\"\n >\n {{ hour }}\n </div>\n }\n </div>\n <div\n #minutesScroll\n (mouseout)=\"hoveredItem = null\"\n (mouseover)=\"hoveredItem = 'minutes'\"\n (scroll)=\"onScroll($event, 'minutesScroll')\"\n class=\"scroll_pickers\"\n [tabindex]=\"-1\"\n >\n @for (minutes of timeMinutes; let indx = $index; track indx) {\n <div\n class=\"scroll_item ta-font-medium\"\n [ngClass]=\"{\n 'active_item ta-font-bold':\n scrollTypes.minutesScroll === indx,\n }\"\n (click)=\"onScroll($event, 'minutesScroll', indx)\"\n >\n {{ minutes }}\n </div>\n }\n </div>\n <div\n #pmAmScroll\n (mouseout)=\"hoveredItem = null\"\n (mouseover)=\"hoveredItem = 'times'\"\n (scroll)=\"onScroll($event, 'pmAmScroll')\"\n class=\"scroll_pickers\"\n [tabindex]=\"-1\"\n >\n @for (when of timeOfDay; let indx = $index; track indx) {\n <div\n class=\"scroll_item ta-font-medium\"\n [ngClass]=\"{\n 'active_item ta-font-bold':\n scrollTypes.pmAmScroll === indx,\n }\"\n (click)=\"onScroll($event, 'pmAmScroll', indx)\"\n >\n {{ when }}\n </div>\n }\n </div>\n <div class=\"picker_line\">\n <span class=\"border_line\"></span>\n <span class=\"border_line line_2\"></span>\n </div>\n </div>\n <div class=\"picker_buttons\">\n <div\n (click)=\"closePopup($event)\"\n class=\"pick_button ta-font-bold\"\n >\n Cancel\n </div>\n <div\n (click)=\"setTime($event)\"\n class=\"pick_button set_button ta-font-bold\"\n >\n Set\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n</div>\n" }]
7979
+ ], template: "<div\n class=\"temp_inp_holder\"\n (pointerdown)=\"refocusInput($event)\"\n (mousedown)=\"$event.preventDefault()\"\n>\n <div>\n <div class=\"pickers_holder dark_picker\">\n @if (calendarMainType === \"date\") {\n <div class=\"date_picker\">\n <cai-custom-datetime-pickers-date-calendars\n [listPreview]=\"listPreview\"\n [dateTime]=\"dateTime\"\n [isMonthAndYearOnly]=\"_inputConfig.name === 'datepickerBankCard'\"\n (setListPreviewValue)=\"setListPreview($event)\"\n (onRefocusInput)=\"refocusInput($event)\"\n ></cai-custom-datetime-pickers-date-calendars>\n </div>\n }\n @if (calendarMainType === \"time\") {\n <div class=\"time_picker\" [class.time_picker_24h]=\"isTwentyFourHour\">\n <div class=\"time_picker_head d-flex\">\n <div class=\"selected_time ta-font-bold\">\n {{\n selectedTime ||\n (dateTime | date: (isTwentyFourHour ? \"HH:mm\" : \"hh:mm aa\"))\n }}\n </div>\n <div class=\"sel_now ta-font-bold\" (click)=\"setDefaultTime($event)\">\n Default\n </div>\n </div>\n <div class=\"time_picker_body\">\n <div class=\"picker_body_head\">\n <div\n class=\"ta-font-bold\"\n [class.active]=\"hoveredItem === 'hours'\"\n >\n Hour\n </div>\n <div\n class=\"ta-font-bold\"\n [class.active]=\"hoveredItem === 'minutes'\"\n >\n Minute\n </div>\n @if (!isTwentyFourHour) {\n <div\n class=\"ta-font-bold\"\n [class.active]=\"hoveredItem === 'times'\"\n >\n AM/PM\n </div>\n }\n </div>\n <div class=\"picker_body\">\n <div\n #hourScroll\n (mouseout)=\"hoveredItem = null\"\n (mouseover)=\"hoveredItem = 'hours'\"\n (scroll)=\"onScroll($event, 'hourScroll')\"\n class=\"scroll_pickers\"\n [tabindex]=\"-1\"\n >\n @for (hour of hourTimes; let indx = $index; track indx) {\n <div\n class=\"scroll_item ta-font-medium\"\n [ngClass]=\"{\n 'active_item ta-font-bold':\n scrollTypes.hourScroll === indx,\n }\"\n (click)=\"onScroll($event, 'hourScroll', indx)\"\n >\n {{ hour }}\n </div>\n }\n </div>\n <div\n #minutesScroll\n (mouseout)=\"hoveredItem = null\"\n (mouseover)=\"hoveredItem = 'minutes'\"\n (scroll)=\"onScroll($event, 'minutesScroll')\"\n class=\"scroll_pickers\"\n [tabindex]=\"-1\"\n >\n @for (minutes of timeMinutes; let indx = $index; track indx) {\n <div\n class=\"scroll_item ta-font-medium\"\n [ngClass]=\"{\n 'active_item ta-font-bold':\n scrollTypes.minutesScroll === indx,\n }\"\n (click)=\"onScroll($event, 'minutesScroll', indx)\"\n >\n {{ minutes }}\n </div>\n }\n </div>\n @if (!isTwentyFourHour) {\n <div\n #pmAmScroll\n (mouseout)=\"hoveredItem = null\"\n (mouseover)=\"hoveredItem = 'times'\"\n (scroll)=\"onScroll($event, 'pmAmScroll')\"\n class=\"scroll_pickers\"\n [tabindex]=\"-1\"\n >\n @for (when of timeOfDay; let indx = $index; track indx) {\n <div\n class=\"scroll_item ta-font-medium\"\n [ngClass]=\"{\n 'active_item ta-font-bold':\n scrollTypes.pmAmScroll === indx,\n }\"\n (click)=\"onScroll($event, 'pmAmScroll', indx)\"\n >\n {{ when }}\n </div>\n }\n </div>\n }\n <div class=\"picker_line\">\n <span class=\"border_line\"></span>\n @if (!isTwentyFourHour) {\n <span class=\"border_line line_2\"></span>\n }\n </div>\n </div>\n <div class=\"picker_buttons\">\n <div\n (click)=\"closePopup($event)\"\n class=\"pick_button ta-font-bold\"\n >\n Cancel\n </div>\n <div\n (click)=\"setTime($event)\"\n class=\"pick_button set_button ta-font-bold\"\n >\n Set\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n</div>\n" }]
7707
7980
  }], ctorParameters: () => [{ type: CalendarDateTimePickerService }], propDecorators: { dateTime: [{
7708
7981
  type: Input
7709
7982
  }], ref: [{
@@ -7743,94 +8016,101 @@ var InputConfigNameStringEnum;
7743
8016
  })(InputConfigNameStringEnum || (InputConfigNameStringEnum = {}));
7744
8017
 
7745
8018
  class InputDatetimeDateInputHelper {
7746
- static DATE_PLACEHOLDERS = ['MM', 'DD', 'YY'];
7747
- static DATE_PART_LENGTHS = [2, 2, 2];
8019
+ static getPlaceholders(format) {
8020
+ return [
8021
+ DATE_PART_PLACEHOLDERS[format.parts[0]],
8022
+ DATE_PART_PLACEHOLDERS[format.parts[1]],
8023
+ DATE_PART_PLACEHOLDERS[format.parts[2]],
8024
+ ];
8025
+ }
7748
8026
  static isValidDatePartIndex(highlightedPart) {
7749
8027
  return (highlightedPart === 0 || highlightedPart === 1 || highlightedPart === 2);
7750
8028
  }
7751
- static getNormalizedDatePart(part, index) {
7752
- const placeholder = this.DATE_PLACEHOLDERS[index];
7753
- const maxLength = this.DATE_PART_LENGTHS[index];
8029
+ static getNormalizedDatePart(part, placeholder) {
7754
8030
  if (!part)
7755
8031
  return placeholder;
7756
- const trimmed = part.slice(0, maxLength);
8032
+ const trimmed = part.slice(0, placeholder.length);
7757
8033
  return trimmed + placeholder.slice(trimmed.length);
7758
8034
  }
7759
- static parseDateParts(currentValue) {
8035
+ static parseDateParts(currentValue, format) {
8036
+ const placeholders = this.getPlaceholders(format);
7760
8037
  if (!currentValue) {
7761
- return [...this.DATE_PLACEHOLDERS];
8038
+ return placeholders;
7762
8039
  }
7763
- const [month, day, year] = currentValue.split('/');
8040
+ const parts = currentValue.split(format.separator);
7764
8041
  return [
7765
- this.getNormalizedDatePart(month, 0),
7766
- this.getNormalizedDatePart(day, 1),
7767
- this.getNormalizedDatePart(year, 2),
8042
+ this.getNormalizedDatePart(parts[0], placeholders[0]),
8043
+ this.getNormalizedDatePart(parts[1], placeholders[1]),
8044
+ this.getNormalizedDatePart(parts[2], placeholders[2]),
7768
8045
  ];
7769
8046
  }
7770
- static composeDateValue(parts) {
7771
- return `${parts[0]}/${parts[1]}/${parts[2]}`;
7772
- }
7773
- static finalizeDatePart(part, partIndex) {
8047
+ static finalizeDatePart(part, partIndex, format) {
8048
+ const partType = format.parts[partIndex];
8049
+ const placeholder = DATE_PART_PLACEHOLDERS[partType];
7774
8050
  const digits = part.replace(/\D/g, '');
7775
8051
  if (!digits) {
7776
- return this.DATE_PLACEHOLDERS[partIndex];
8052
+ return placeholder;
7777
8053
  }
7778
- if (partIndex === 0) {
8054
+ if (partType === 'month') {
7779
8055
  if (digits === '0') {
7780
- return this.getNormalizedDatePart(part, partIndex);
8056
+ return this.getNormalizedDatePart(part, placeholder);
7781
8057
  }
7782
8058
  const clampedMonth = Math.min(Math.max(Number(digits), 1), 12);
7783
8059
  return String(clampedMonth).padStart(2, '0');
7784
8060
  }
7785
- if (partIndex === 1) {
8061
+ if (partType === 'day') {
7786
8062
  if (digits === '0') {
7787
- return this.getNormalizedDatePart(part, partIndex);
8063
+ return this.getNormalizedDatePart(part, placeholder);
7788
8064
  }
7789
8065
  const clampedDay = Math.min(Math.max(Number(digits), 1), 31);
7790
8066
  return String(clampedDay).padStart(2, '0');
7791
8067
  }
7792
- return digits.slice(-2).padStart(2, '0');
8068
+ if (partType === 'shortYear') {
8069
+ return digits.slice(-2).padStart(2, '0');
8070
+ }
8071
+ // A one or two digit year is taken as a year of the current century.
8072
+ return digits.length <= 2
8073
+ ? String(2000 + Number(digits))
8074
+ : this.getNormalizedDatePart(part, placeholder);
7793
8075
  }
7794
- static normalizeEmptyDateValue(parts) {
7795
- const isCompletelyEmpty = parts[0] === this.DATE_PLACEHOLDERS[0] &&
7796
- parts[1] === this.DATE_PLACEHOLDERS[1] &&
7797
- parts[2] === this.DATE_PLACEHOLDERS[2];
7798
- return isCompletelyEmpty ? null : this.composeDateValue(parts);
8076
+ static normalizeEmptyDateValue(parts, format) {
8077
+ const placeholders = this.getPlaceholders(format);
8078
+ const isCompletelyEmpty = parts.every((part, index) => part === placeholders[index]);
8079
+ return isCompletelyEmpty ? null : parts.join(format.separator);
7799
8080
  }
7800
- static formatDatePartOnNavigation(currentValue, highlightedPart) {
8081
+ static formatDatePartOnNavigation(currentValue, highlightedPart, dateFormat) {
7801
8082
  if (!this.isValidDatePartIndex(highlightedPart)) {
7802
8083
  return currentValue;
7803
8084
  }
7804
- const nextValueParts = this.parseDateParts(currentValue);
7805
- nextValueParts[highlightedPart] = this.finalizeDatePart(nextValueParts[highlightedPart], highlightedPart);
7806
- this.enforceDayLimitByMonth(nextValueParts);
7807
- return this.normalizeEmptyDateValue(nextValueParts);
7808
- }
7809
- static buildDatePartFromDigits(digits, partIndex) {
7810
- const maxLength = this.DATE_PART_LENGTHS[partIndex];
7811
- const placeholder = this.DATE_PLACEHOLDERS[partIndex];
7812
- const slicedDigits = digits.slice(0, maxLength);
7813
- if (slicedDigits.length === maxLength) {
7814
- if (partIndex === 0) {
8085
+ const format = getDateFormatPattern(dateFormat);
8086
+ const nextValueParts = this.parseDateParts(currentValue, format);
8087
+ nextValueParts[highlightedPart] = this.finalizeDatePart(nextValueParts[highlightedPart], highlightedPart, format);
8088
+ this.enforceDayLimitByMonth(nextValueParts, format);
8089
+ return this.normalizeEmptyDateValue(nextValueParts, format);
8090
+ }
8091
+ static buildDatePartFromDigits(digits, partIndex, format) {
8092
+ const partType = format.parts[partIndex];
8093
+ const placeholder = DATE_PART_PLACEHOLDERS[partType];
8094
+ const slicedDigits = digits.slice(0, placeholder.length);
8095
+ if (slicedDigits.length === placeholder.length) {
8096
+ if (partType === 'month') {
7815
8097
  const clampedMonth = Math.min(Number(slicedDigits), 12);
7816
8098
  return String(clampedMonth).padStart(2, '0');
7817
8099
  }
7818
- if (partIndex === 1) {
8100
+ if (partType === 'day') {
7819
8101
  const clampedDay = Math.min(Number(slicedDigits), 31);
7820
8102
  return String(clampedDay).padStart(2, '0');
7821
8103
  }
7822
8104
  }
7823
8105
  return slicedDigits + placeholder.slice(slicedDigits.length);
7824
8106
  }
7825
- static isDatePartFull(part, partIndex) {
7826
- return (part.length === this.DATE_PART_LENGTHS[partIndex] && /^\d+$/.test(part));
8107
+ static isDatePartFull(part) {
8108
+ return /^\d+$/.test(part);
7827
8109
  }
7828
- static getDatePartEnteredLength(part, partIndex) {
7829
- const placeholder = this.DATE_PLACEHOLDERS[partIndex];
7830
- const maxLength = this.DATE_PART_LENGTHS[partIndex];
7831
- const normalizedPart = this.getNormalizedDatePart(part, partIndex);
8110
+ static getDatePartEnteredLength(part, placeholder) {
8111
+ const normalizedPart = this.getNormalizedDatePart(part, placeholder);
7832
8112
  let enteredLength = 0;
7833
- for (let i = 0; i < maxLength; i += 1) {
8113
+ for (let i = 0; i < placeholder.length; i += 1) {
7834
8114
  if (normalizedPart[i] === placeholder[i])
7835
8115
  break;
7836
8116
  enteredLength += 1;
@@ -7859,25 +8139,26 @@ class InputDatetimeDateInputHelper {
7859
8139
  return 31;
7860
8140
  }
7861
8141
  }
7862
- static enforceDayLimitByMonth(parts) {
7863
- const monthPart = parts[0];
7864
- const dayPart = parts[1];
7865
- const yearPart = parts[2];
7866
- if (!this.isDatePartFull(monthPart, 0) ||
7867
- !this.isDatePartFull(dayPart, 1)) {
8142
+ static enforceDayLimitByMonth(parts, format) {
8143
+ const dayIndex = format.parts.indexOf('day');
8144
+ const monthPart = parts[format.parts.indexOf('month')];
8145
+ const dayPart = parts[dayIndex];
8146
+ const isShortYear = format.parts.includes('shortYear');
8147
+ const yearPart = parts[format.parts.indexOf(isShortYear ? 'shortYear' : 'year')];
8148
+ if (!this.isDatePartFull(monthPart) || !this.isDatePartFull(dayPart)) {
7868
8149
  return;
7869
8150
  }
7870
8151
  const month = Number(monthPart);
7871
8152
  const day = Number(dayPart);
7872
- const resolvedYear = this.isDatePartFull(yearPart, 2)
7873
- ? 2000 + Number(yearPart)
8153
+ const resolvedYear = this.isDatePartFull(yearPart)
8154
+ ? Number(yearPart) + (isShortYear ? 2000 : 0)
7874
8155
  : undefined;
7875
8156
  const monthMaxDay = this.getMonthMaxDay(month, resolvedYear);
7876
8157
  if (day > monthMaxDay) {
7877
- parts[1] = String(monthMaxDay).padStart(2, '0');
8158
+ parts[dayIndex] = String(monthMaxDay).padStart(2, '0');
7878
8159
  }
7879
8160
  }
7880
- static handleDateDigitInput(currentValue, nextValueParts, highlightedPart, insertedCharacter) {
8161
+ static handleDateDigitInput(currentValue, nextValueParts, highlightedPart, insertedCharacter, format) {
7881
8162
  const isSingleDigit = /^\d$/.test(insertedCharacter);
7882
8163
  if (!isSingleDigit) {
7883
8164
  return {
@@ -7885,31 +8166,32 @@ class InputDatetimeDateInputHelper {
7885
8166
  nextHighlightedPart: highlightedPart,
7886
8167
  };
7887
8168
  }
7888
- const isPartAlreadyFull = this.isDatePartFull(nextValueParts[highlightedPart], highlightedPart);
8169
+ const isPartAlreadyFull = this.isDatePartFull(nextValueParts[highlightedPart]);
7889
8170
  if (isPartAlreadyFull) {
7890
- nextValueParts[highlightedPart] = this.buildDatePartFromDigits(insertedCharacter, highlightedPart);
7891
- this.enforceDayLimitByMonth(nextValueParts);
8171
+ nextValueParts[highlightedPart] = this.buildDatePartFromDigits(insertedCharacter, highlightedPart, format);
8172
+ this.enforceDayLimitByMonth(nextValueParts, format);
7892
8173
  return {
7893
- nextValue: this.normalizeEmptyDateValue(nextValueParts),
8174
+ nextValue: this.normalizeEmptyDateValue(nextValueParts, format),
7894
8175
  nextHighlightedPart: highlightedPart,
7895
8176
  };
7896
8177
  }
7897
8178
  const existingDigits = nextValueParts[highlightedPart].replace(/\D/g, '');
7898
8179
  const nextDigits = `${existingDigits}${insertedCharacter}`;
7899
- nextValueParts[highlightedPart] = this.buildDatePartFromDigits(nextDigits, highlightedPart);
7900
- this.enforceDayLimitByMonth(nextValueParts);
7901
- const didFillCurrentPart = nextDigits.length >= this.DATE_PART_LENGTHS[highlightedPart];
8180
+ nextValueParts[highlightedPart] = this.buildDatePartFromDigits(nextDigits, highlightedPart, format);
8181
+ this.enforceDayLimitByMonth(nextValueParts, format);
8182
+ const didFillCurrentPart = nextDigits.length >=
8183
+ DATE_PART_PLACEHOLDERS[format.parts[highlightedPart]].length;
7902
8184
  const nextHighlightedPart = didFillCurrentPart
7903
8185
  ? highlightedPart === 2
7904
8186
  ? null
7905
8187
  : highlightedPart + 1
7906
8188
  : highlightedPart;
7907
8189
  return {
7908
- nextValue: this.normalizeEmptyDateValue(nextValueParts),
8190
+ nextValue: this.normalizeEmptyDateValue(nextValueParts, format),
7909
8191
  nextHighlightedPart,
7910
8192
  };
7911
8193
  }
7912
- static handleDateInput(currentValue, event, highlightedPart) {
8194
+ static handleDateInput(currentValue, event, highlightedPart, dateFormat) {
7913
8195
  const inputEvent = event;
7914
8196
  const inputType = inputEvent.inputType ?? '';
7915
8197
  const insertedCharacter = inputEvent.data ?? '';
@@ -7948,39 +8230,41 @@ class InputDatetimeDateInputHelper {
7948
8230
  nextHighlightedPart: effectiveHighlightedPart,
7949
8231
  };
7950
8232
  }
7951
- const nextValueParts = this.parseDateParts(currentValue);
8233
+ const format = getDateFormatPattern(dateFormat);
8234
+ const placeholders = this.getPlaceholders(format);
8235
+ const nextValueParts = this.parseDateParts(currentValue, format);
7952
8236
  if (isWordBackwardDelete) {
7953
- const currentEnteredLength = this.getDatePartEnteredLength(nextValueParts[effectiveHighlightedPart], effectiveHighlightedPart);
8237
+ const currentEnteredLength = this.getDatePartEnteredLength(nextValueParts[effectiveHighlightedPart], placeholders[effectiveHighlightedPart]);
7954
8238
  const targetPart = currentEnteredLength === 0 && effectiveHighlightedPart > 0
7955
8239
  ? (effectiveHighlightedPart - 1)
7956
8240
  : effectiveHighlightedPart;
7957
- nextValueParts[targetPart] = this.DATE_PLACEHOLDERS[targetPart];
8241
+ nextValueParts[targetPart] = placeholders[targetPart];
7958
8242
  return {
7959
- nextValue: this.normalizeEmptyDateValue(nextValueParts),
8243
+ nextValue: this.normalizeEmptyDateValue(nextValueParts, format),
7960
8244
  nextHighlightedPart: targetPart,
7961
8245
  };
7962
8246
  }
7963
8247
  if (isBackwardContentDelete) {
7964
8248
  const currentPart = nextValueParts[effectiveHighlightedPart];
7965
- const enteredLength = this.getDatePartEnteredLength(currentPart, effectiveHighlightedPart);
8249
+ const enteredLength = this.getDatePartEnteredLength(currentPart, placeholders[effectiveHighlightedPart]);
7966
8250
  if (enteredLength > 0) {
7967
8251
  const nextDigits = currentPart.slice(0, enteredLength - 1);
7968
- nextValueParts[effectiveHighlightedPart] = this.buildDatePartFromDigits(nextDigits, effectiveHighlightedPart);
8252
+ nextValueParts[effectiveHighlightedPart] = this.buildDatePartFromDigits(nextDigits, effectiveHighlightedPart, format);
7969
8253
  return {
7970
- nextValue: this.normalizeEmptyDateValue(nextValueParts),
8254
+ nextValue: this.normalizeEmptyDateValue(nextValueParts, format),
7971
8255
  // Keep focus on current part even when deleting its final digit.
7972
8256
  // A second backspace (when empty) will move focus backward.
7973
8257
  nextHighlightedPart: effectiveHighlightedPart,
7974
8258
  };
7975
8259
  }
7976
8260
  return {
7977
- nextValue: this.normalizeEmptyDateValue(nextValueParts),
8261
+ nextValue: this.normalizeEmptyDateValue(nextValueParts, format),
7978
8262
  nextHighlightedPart: effectiveHighlightedPart > 0
7979
8263
  ? (effectiveHighlightedPart - 1)
7980
8264
  : 0,
7981
8265
  };
7982
8266
  }
7983
- return this.handleDateDigitInput(currentValue, nextValueParts, effectiveHighlightedPart, insertedCharacter);
8267
+ return this.handleDateDigitInput(currentValue, nextValueParts, effectiveHighlightedPart, insertedCharacter, format);
7984
8268
  }
7985
8269
  }
7986
8270
 
@@ -8010,14 +8294,23 @@ class InputDatetimeTimeInputHelper {
8010
8294
  this.getNormalizedTimePart(ampmPart, 2),
8011
8295
  ];
8012
8296
  }
8013
- static composeTimeValue(parts) {
8014
- return `${parts[0]}:${parts[1]} ${parts[2]}`;
8297
+ // The 24-hour clock has no AM/PM part, so its last part is the minutes.
8298
+ static getLastTimePartIndex(timeFormat) {
8299
+ return timeFormat === 'TwentyFourHour' ? 1 : 2;
8300
+ }
8301
+ static composeTimeValue(parts, timeFormat) {
8302
+ return timeFormat === 'TwentyFourHour'
8303
+ ? `${parts[0]}:${parts[1]}`
8304
+ : `${parts[0]}:${parts[1]} ${parts[2]}`;
8015
8305
  }
8016
- static normalizeEmptyTimeValue(parts) {
8306
+ static normalizeEmptyTimeValue(parts, timeFormat) {
8017
8307
  const isCompletelyEmpty = parts[0] === this.TIME_PLACEHOLDERS[0] &&
8018
8308
  parts[1] === this.TIME_PLACEHOLDERS[1] &&
8019
- parts[2] === this.TIME_PLACEHOLDERS[2];
8020
- return isCompletelyEmpty ? null : this.composeTimeValue(parts);
8309
+ (timeFormat === 'TwentyFourHour' ||
8310
+ parts[2] === this.TIME_PLACEHOLDERS[2]);
8311
+ return isCompletelyEmpty
8312
+ ? null
8313
+ : this.composeTimeValue(parts, timeFormat);
8021
8314
  }
8022
8315
  static buildTimePartFromInput(input, partIndex) {
8023
8316
  const maxLength = this.TIME_PART_LENGTHS[partIndex];
@@ -8057,7 +8350,7 @@ class InputDatetimeTimeInputHelper {
8057
8350
  }
8058
8351
  return { hour12: String(normalizedHour).padStart(2, '0'), meridiem: 'AM' };
8059
8352
  }
8060
- static handleTimeDigitInput(currentValue, nextValueParts, highlightedPart, insertedCharacter) {
8353
+ static handleTimeDigitInput(currentValue, nextValueParts, highlightedPart, insertedCharacter, timeFormat) {
8061
8354
  const isSingleDigit = /^\d$/.test(insertedCharacter);
8062
8355
  if (!isSingleDigit) {
8063
8356
  return {
@@ -8082,34 +8375,39 @@ class InputDatetimeTimeInputHelper {
8082
8375
  if (nextDigits.length < this.TIME_PART_LENGTHS[0]) {
8083
8376
  nextValueParts[0] = this.buildTimePartFromInput(nextDigits, 0);
8084
8377
  return {
8085
- nextValue: this.normalizeEmptyTimeValue(nextValueParts),
8378
+ nextValue: this.normalizeEmptyTimeValue(nextValueParts, timeFormat),
8086
8379
  nextHighlightedPart: 0,
8087
8380
  };
8088
8381
  }
8089
8382
  const clampedHour = this.clamp(Number(nextDigits), 0, 23);
8090
- const { hour12, meridiem } = this.to12HourAndMeridiem(clampedHour, nextValueParts[2]);
8091
- nextValueParts[0] = hour12;
8092
- nextValueParts[2] = meridiem;
8383
+ if (timeFormat === 'TwentyFourHour') {
8384
+ nextValueParts[0] = String(clampedHour).padStart(2, '0');
8385
+ }
8386
+ else {
8387
+ const { hour12, meridiem } = this.to12HourAndMeridiem(clampedHour, nextValueParts[2]);
8388
+ nextValueParts[0] = hour12;
8389
+ nextValueParts[2] = meridiem;
8390
+ }
8093
8391
  return {
8094
- nextValue: this.normalizeEmptyTimeValue(nextValueParts),
8392
+ nextValue: this.normalizeEmptyTimeValue(nextValueParts, timeFormat),
8095
8393
  nextHighlightedPart: 1,
8096
8394
  };
8097
8395
  }
8098
8396
  if (nextDigits.length < this.TIME_PART_LENGTHS[1]) {
8099
8397
  nextValueParts[1] = this.buildTimePartFromInput(nextDigits, 1);
8100
8398
  return {
8101
- nextValue: this.normalizeEmptyTimeValue(nextValueParts),
8399
+ nextValue: this.normalizeEmptyTimeValue(nextValueParts, timeFormat),
8102
8400
  nextHighlightedPart: 1,
8103
8401
  };
8104
8402
  }
8105
8403
  const clampedMinute = this.clamp(Number(nextDigits), 0, 59);
8106
8404
  nextValueParts[1] = String(clampedMinute).padStart(2, '0');
8107
8405
  return {
8108
- nextValue: this.normalizeEmptyTimeValue(nextValueParts),
8109
- nextHighlightedPart: 2,
8406
+ nextValue: this.normalizeEmptyTimeValue(nextValueParts, timeFormat),
8407
+ nextHighlightedPart: timeFormat === 'TwentyFourHour' ? null : 2,
8110
8408
  };
8111
8409
  }
8112
- static handleTimeInput(currentValue, event, highlightedPart) {
8410
+ static handleTimeInput(currentValue, event, highlightedPart, timeFormat = DEFAULT_TIME_FORMAT) {
8113
8411
  const inputEvent = event;
8114
8412
  const inputType = inputEvent.inputType ?? '';
8115
8413
  const insertedCharacter = inputEvent.data ?? '';
@@ -8134,7 +8432,7 @@ class InputDatetimeTimeInputHelper {
8134
8432
  effectiveHighlightedPart === null) {
8135
8433
  return {
8136
8434
  nextValue: currentValue,
8137
- nextHighlightedPart: 2,
8435
+ nextHighlightedPart: this.getLastTimePartIndex(timeFormat),
8138
8436
  };
8139
8437
  }
8140
8438
  if (!this.isValidTimePartIndex(effectiveHighlightedPart)) {
@@ -8151,7 +8449,7 @@ class InputDatetimeTimeInputHelper {
8151
8449
  : effectiveHighlightedPart;
8152
8450
  nextValueParts[targetPart] = this.TIME_PLACEHOLDERS[targetPart];
8153
8451
  return {
8154
- nextValue: this.normalizeEmptyTimeValue(nextValueParts),
8452
+ nextValue: this.normalizeEmptyTimeValue(nextValueParts, timeFormat),
8155
8453
  nextHighlightedPart: targetPart,
8156
8454
  };
8157
8455
  }
@@ -8162,14 +8460,14 @@ class InputDatetimeTimeInputHelper {
8162
8460
  const nextInput = currentPart.slice(0, enteredLength - 1);
8163
8461
  nextValueParts[effectiveHighlightedPart] = this.buildTimePartFromInput(nextInput, effectiveHighlightedPart);
8164
8462
  return {
8165
- nextValue: this.normalizeEmptyTimeValue(nextValueParts),
8463
+ nextValue: this.normalizeEmptyTimeValue(nextValueParts, timeFormat),
8166
8464
  // Keep focus on current part when deleting its final character.
8167
8465
  // A second backspace (while empty) then moves focus backward.
8168
8466
  nextHighlightedPart: effectiveHighlightedPart,
8169
8467
  };
8170
8468
  }
8171
8469
  return {
8172
- nextValue: this.normalizeEmptyTimeValue(nextValueParts),
8470
+ nextValue: this.normalizeEmptyTimeValue(nextValueParts, timeFormat),
8173
8471
  nextHighlightedPart: effectiveHighlightedPart > 0
8174
8472
  ? (effectiveHighlightedPart - 1)
8175
8473
  : 0,
@@ -8180,7 +8478,7 @@ class InputDatetimeTimeInputHelper {
8180
8478
  if (uppercaseCharacter === 'A' || uppercaseCharacter === 'P') {
8181
8479
  nextValueParts[2] = uppercaseCharacter === 'A' ? 'AM' : 'PM';
8182
8480
  return {
8183
- nextValue: this.normalizeEmptyTimeValue(nextValueParts),
8481
+ nextValue: this.normalizeEmptyTimeValue(nextValueParts, timeFormat),
8184
8482
  nextHighlightedPart: null,
8185
8483
  };
8186
8484
  }
@@ -8189,15 +8487,19 @@ class InputDatetimeTimeInputHelper {
8189
8487
  nextHighlightedPart: effectiveHighlightedPart,
8190
8488
  };
8191
8489
  }
8192
- return this.handleTimeDigitInput(currentValue, nextValueParts, effectiveHighlightedPart, insertedCharacter);
8490
+ return this.handleTimeDigitInput(currentValue, nextValueParts, effectiveHighlightedPart, insertedCharacter, timeFormat);
8193
8491
  }
8194
8492
  }
8195
8493
 
8196
8494
  class InputDatetimeFormatHelper {
8197
8495
  static MIN_VALID_YEAR = 1900;
8198
- static isDateControlValueValid(value) {
8199
- const parsedDate = this.toDate(value, true);
8200
- return !!parsedDate && parsedDate.getFullYear() >= this.MIN_VALID_YEAR;
8496
+ static getDateMomentFormat(dateFormat) {
8497
+ const { parts, separator } = getDateFormatPattern(dateFormat);
8498
+ return parts.map((part) => DATE_PART_PLACEHOLDERS[part]).join(separator);
8499
+ }
8500
+ static isDateControlValueValid(value, dateFormat) {
8501
+ return (typeof value === 'string' &&
8502
+ this.parseDateControlValue(value, dateFormat) !== null);
8201
8503
  }
8202
8504
  static isTimeControlValueValid(value) {
8203
8505
  if (typeof value !== 'string') {
@@ -8205,7 +8507,13 @@ class InputDatetimeFormatHelper {
8205
8507
  }
8206
8508
  return this.parseTimeControlValue(value) !== null;
8207
8509
  }
8208
- static parseDateControlValue(value) {
8510
+ static parseDateControlValue(value, dateFormat) {
8511
+ const parsedDate = moment(value.trim(), this.getDateMomentFormat(dateFormat), true);
8512
+ return parsedDate.isValid() && parsedDate.year() >= this.MIN_VALID_YEAR
8513
+ ? this.buildLocalDate(parsedDate)
8514
+ : null;
8515
+ }
8516
+ static parseDateFormValue(value) {
8209
8517
  const dateFormats = [
8210
8518
  'MM/DD/YY',
8211
8519
  'M/D/YY',
@@ -8237,14 +8545,15 @@ class InputDatetimeFormatHelper {
8237
8545
  normalizedDate.setHours(12, 0, 0, 0);
8238
8546
  return normalizedDate;
8239
8547
  }
8240
- static handleInput(currentValue, event, highlightedPart, isDatePicker) {
8548
+ static handleInput(currentValue, event, highlightedPart, isDatePicker, dateFormat, timeFormat = DEFAULT_TIME_FORMAT) {
8241
8549
  if (isDatePicker) {
8242
- return InputDatetimeDateInputHelper.handleDateInput(currentValue, event, highlightedPart);
8550
+ return InputDatetimeDateInputHelper.handleDateInput(currentValue, event, highlightedPart, dateFormat);
8243
8551
  }
8244
8552
  else {
8245
- return InputDatetimeTimeInputHelper.handleTimeInput(currentValue, event, highlightedPart);
8553
+ return InputDatetimeTimeInputHelper.handleTimeInput(currentValue, event, highlightedPart, timeFormat);
8246
8554
  }
8247
8555
  }
8556
+ // Parses a form value (canonical formats), not the text shown in the input.
8248
8557
  static toDate(value, isDatePicker) {
8249
8558
  if (value instanceof Date && !Number.isNaN(value.getTime())) {
8250
8559
  return value;
@@ -8256,58 +8565,65 @@ class InputDatetimeFormatHelper {
8256
8565
  }
8257
8566
  if (typeof value === 'string') {
8258
8567
  const parsedDate = isDatePicker
8259
- ? this.parseDateControlValue(value)
8568
+ ? this.parseDateFormValue(value)
8260
8569
  : this.parseTimeControlValue(value);
8261
8570
  if (parsedDate)
8262
8571
  return parsedDate;
8263
8572
  }
8264
8573
  return null;
8265
8574
  }
8266
- static isControlValueValid(value, isDatePicker) {
8575
+ // Parses the text shown in the input, which follows the date format.
8576
+ static parseControlValue(value, isDatePicker, dateFormat) {
8577
+ if (!value)
8578
+ return null;
8579
+ return isDatePicker
8580
+ ? this.parseDateControlValue(value, dateFormat)
8581
+ : this.parseTimeControlValue(value);
8582
+ }
8583
+ static isControlValueValid(value, isDatePicker, dateFormat) {
8267
8584
  if (value === null || value === undefined || value === '') {
8268
8585
  return true;
8269
8586
  }
8270
8587
  return isDatePicker
8271
- ? this.isDateControlValueValid(value)
8588
+ ? this.isDateControlValueValid(value, dateFormat)
8272
8589
  : this.isTimeControlValueValid(value);
8273
8590
  }
8274
- static toControlValue(date, isDatePicker) {
8591
+ static toControlValue(date, isDatePicker, dateFormat, timeFormat = DEFAULT_TIME_FORMAT) {
8275
8592
  return isDatePicker
8276
- ? moment(date).format('MM/DD/YY')
8277
- : moment(date).format('hh:mm A');
8593
+ ? moment(date).format(this.getDateMomentFormat(dateFormat))
8594
+ : moment(date).format(TIME_FORMAT_PATTERNS[timeFormat]);
8278
8595
  }
8279
8596
  static toFormValue(date, isDatePicker) {
8280
8597
  return isDatePicker
8281
8598
  ? moment(date).format('MM/DD/YY')
8282
8599
  : moment(date).format('HH:mm');
8283
8600
  }
8284
- static toCurrentValue(value, isDatePicker) {
8601
+ static toCurrentValue(value, isDatePicker, dateFormat, timeFormat = DEFAULT_TIME_FORMAT) {
8285
8602
  const dateValue = this.toDate(value, isDatePicker);
8286
8603
  if (!dateValue)
8287
8604
  return null;
8288
- return this.toControlValue(dateValue, isDatePicker);
8605
+ return this.toControlValue(dateValue, isDatePicker, dateFormat, timeFormat);
8606
+ }
8607
+ // Date parts in the order of the date format, each padded with its placeholder.
8608
+ static getDisplayedDateParts(value, dateFormat) {
8609
+ const format = getDateFormatPattern(dateFormat);
8610
+ return InputDatetimeDateInputHelper.parseDateParts(value, format).map((part, index) => ({
8611
+ type: format.parts[index],
8612
+ value: part,
8613
+ placeholder: DATE_PART_PLACEHOLDERS[format.parts[index]],
8614
+ }));
8289
8615
  }
8290
- static getDisplayedValues(value, isDatePicker) {
8616
+ static getDisplayedValues(value) {
8291
8617
  let displayedValues = {
8292
- month: 'MM',
8293
- day: 'DD',
8294
- year: 'YY',
8295
8618
  minute: 'MM',
8296
8619
  hour: 'HH',
8297
8620
  ampm: 'AM',
8298
8621
  };
8299
8622
  if (!value)
8300
8623
  return displayedValues;
8301
- if (isDatePicker) {
8302
- displayedValues.month = value?.slice(0, 2) ?? 'MM';
8303
- displayedValues.day = value?.slice(3, 5) ?? 'DD';
8304
- displayedValues.year = value?.slice(6, 8) ?? 'YY';
8305
- }
8306
- else {
8307
- displayedValues.hour = value?.slice(0, 2) ?? 'HH';
8308
- displayedValues.minute = value?.slice(3, 5) ?? 'MM';
8309
- displayedValues.ampm = value?.slice(6, 8) ?? 'AM';
8310
- }
8624
+ displayedValues.hour = value?.slice(0, 2) ?? 'HH';
8625
+ displayedValues.minute = value?.slice(3, 5) ?? 'MM';
8626
+ displayedValues.ampm = value?.slice(6, 8) ?? 'AM';
8311
8627
  return displayedValues;
8312
8628
  }
8313
8629
  }
@@ -8320,31 +8636,42 @@ class InputDatetimePasteHelper {
8320
8636
  normalizedDate.setHours(12, 0, 0, 0);
8321
8637
  return normalizedDate;
8322
8638
  }
8323
- static parseDateInput(rawValue) {
8639
+ static parseDateInput(rawValue, dateFormat) {
8324
8640
  const normalizedValue = rawValue.trim();
8325
8641
  if (!normalizedValue)
8326
8642
  return null;
8643
+ // Ambiguous dates (02/10/2026) are read in the order of the date format.
8644
+ const { parts } = getDateFormatPattern(dateFormat);
8645
+ const isDayFirst = parts.indexOf('day') < parts.indexOf('month');
8646
+ const [padded, unpadded] = isDayFirst
8647
+ ? [
8648
+ ['DD', 'MM'],
8649
+ ['D', 'M'],
8650
+ ]
8651
+ : [
8652
+ ['MM', 'DD'],
8653
+ ['M', 'D'],
8654
+ ];
8655
+ const compactFormat = `${padded.join('')}YYYY`;
8327
8656
  const compactDigits = normalizedValue.replace(/\D/g, '');
8328
8657
  const dateFormats = [
8329
- 'MM/DD/YYYY',
8330
- 'M/D/YYYY',
8331
- 'MM-DD-YYYY',
8332
- 'M-D-YYYY',
8333
- 'MM.DD.YYYY',
8334
- 'M.D.YYYY',
8658
+ ...['/', '-', '.'].flatMap((separator) => [
8659
+ `${padded.join(separator)}${separator}YYYY`,
8660
+ `${unpadded.join(separator)}${separator}YYYY`,
8661
+ ]),
8335
8662
  'YYYY-MM-DD',
8336
8663
  'YYYY/M/D',
8337
8664
  'YYYY.MM.DD',
8338
- 'MM/DD/YY',
8339
- 'M/D/YY',
8665
+ `${padded.join('/')}/YY`,
8666
+ `${unpadded.join('/')}/YY`,
8340
8667
  'YYYYMMDD',
8341
- 'MMDDYYYY',
8668
+ compactFormat,
8342
8669
  ];
8343
8670
  const candidates = [];
8344
8671
  candidates.push(moment(normalizedValue, dateFormats, true));
8345
8672
  if (/^\d{8}$/.test(compactDigits)) {
8346
8673
  candidates.push(moment(compactDigits, 'YYYYMMDD', true));
8347
- candidates.push(moment(compactDigits, 'MMDDYYYY', true));
8674
+ candidates.push(moment(compactDigits, compactFormat, true));
8348
8675
  }
8349
8676
  candidates.push(moment(normalizedValue, moment.ISO_8601, true));
8350
8677
  const validCandidate = candidates.find((candidate) => candidate.isValid() && candidate.year() >= this.MIN_VALID_YEAR);
@@ -8380,9 +8707,9 @@ class InputDatetimePasteHelper {
8380
8707
  const now = new Date();
8381
8708
  return new Date(now.getFullYear(), now.getMonth(), now.getDate(), validCandidate.hour(), validCandidate.minute(), 0, 0);
8382
8709
  }
8383
- static parsePastedValue(rawValue, isDatePicker) {
8710
+ static parsePastedValue(rawValue, isDatePicker, dateFormat) {
8384
8711
  return isDatePicker
8385
- ? this.parseDateInput(rawValue)
8712
+ ? this.parseDateInput(rawValue, dateFormat)
8386
8713
  : this.parseTimeInput(rawValue);
8387
8714
  }
8388
8715
  }
@@ -8413,21 +8740,30 @@ class CaiInputDatetimePickerComponent {
8413
8740
  currentValue = signal(null, ...(ngDevMode ? [{ debugName: "currentValue" }] : []));
8414
8741
  isFocusedThroughPopoverToggle = signal(false, ...(ngDevMode ? [{ debugName: "isFocusedThroughPopoverToggle" }] : []));
8415
8742
  isInputSelected = signal(false, ...(ngDevMode ? [{ debugName: "isInputSelected" }] : []));
8743
+ dateFormat = signal(undefined, ...(ngDevMode ? [{ debugName: "dateFormat" }] : []));
8744
+ timeFormat = signal(DEFAULT_TIME_FORMAT, ...(ngDevMode ? [{ debugName: "timeFormat" }] : []));
8745
+ isTwentyFourHour = computed(() => this.timeFormat() === 'TwentyFourHour', ...(ngDevMode ? [{ debugName: "isTwentyFourHour" }] : []));
8746
+ // The 24-hour clock has no AM/PM part.
8747
+ lastPartIndex = computed(() => !this.isDatePicker() && this.isTwentyFourHour() ? 1 : 2, ...(ngDevMode ? [{ debugName: "lastPartIndex" }] : []));
8416
8748
  displayedValues = computed(() => {
8417
- return (InputDatetimeFormatHelper.getDisplayedValues(this.currentValue(), this.isDatePicker()) ?? []);
8749
+ return (InputDatetimeFormatHelper.getDisplayedValues(this.currentValue()) ?? []);
8418
8750
  }, ...(ngDevMode ? [{ debugName: "displayedValues" }] : []));
8751
+ displayedDateParts = computed(() => InputDatetimeFormatHelper.getDisplayedDateParts(this.currentValue(), this.dateFormat()), ...(ngDevMode ? [{ debugName: "displayedDateParts" }] : []));
8752
+ dateSeparator = computed(() => getDateFormatPattern(this.dateFormat()).separator, ...(ngDevMode ? [{ debugName: "dateSeparator" }] : []));
8419
8753
  hasDate = computed(() => {
8420
8754
  const currentValue = this.currentValue();
8421
8755
  if (!currentValue)
8422
8756
  return false;
8423
8757
  return this.isDatePicker()
8424
- ? /^\d{2}\/\d{2}\/\d{2}$/.test(currentValue)
8425
- : /^\d{2}:\d{2}\s(?:AM|PM)$/.test(currentValue);
8758
+ ? this.displayedDateParts().every((part) => /^\d+$/.test(part.value))
8759
+ : (this.isTwentyFourHour()
8760
+ ? /^\d{2}:\d{2}$/
8761
+ : /^\d{2}:\d{2}\s(?:AM|PM)$/).test(currentValue);
8426
8762
  }, ...(ngDevMode ? [{ debugName: "hasDate" }] : []));
8427
8763
  hasInternalValidationError = computed(() => {
8428
8764
  const currentValue = this.currentValue();
8429
8765
  return Boolean(currentValue &&
8430
- !InputDatetimeFormatHelper.isControlValueValid(currentValue, this.isDatePicker()));
8766
+ !InputDatetimeFormatHelper.isControlValueValid(currentValue, this.isDatePicker(), this.dateFormat()));
8431
8767
  }, ...(ngDevMode ? [{ debugName: "hasInternalValidationError" }] : []));
8432
8768
  shouldShowInternalValidationError = computed(() => {
8433
8769
  const control = this.getSuperControl;
@@ -8448,6 +8784,20 @@ class CaiInputDatetimePickerComponent {
8448
8784
  constructor() {
8449
8785
  this.initializeDateChangedListener();
8450
8786
  }
8787
+ ngOnChanges(changes) {
8788
+ if (!changes['inputConfig'])
8789
+ return;
8790
+ const dateFormat = this.inputConfig?.dateFormat;
8791
+ const timeFormat = this.inputConfig?.timeFormat ?? DEFAULT_TIME_FORMAT;
8792
+ if (dateFormat === this.dateFormat() && timeFormat === this.timeFormat()) {
8793
+ return;
8794
+ }
8795
+ // The displayed text follows the format, so it is rebuilt from the date.
8796
+ const parsedDate = this.parseControlValue(this.currentValue());
8797
+ this.dateFormat.set(dateFormat);
8798
+ this.timeFormat.set(timeFormat);
8799
+ this.currentValue.set(parsedDate ? this.toControlValue(parsedDate) : null);
8800
+ }
8451
8801
  ngOnInit() {
8452
8802
  this.superControl = this.injector.get(NgControl, null);
8453
8803
  if (this.superControl) {
@@ -8456,10 +8806,8 @@ class CaiInputDatetimePickerComponent {
8456
8806
  }
8457
8807
  registerDateChange(date) {
8458
8808
  this.dateTime.set(date);
8459
- const isDatePicker = this.isDatePicker();
8460
- const nextCurrentValue = InputDatetimeFormatHelper.toControlValue(date, isDatePicker);
8461
- this.currentValue.set(nextCurrentValue);
8462
- this.onChange(InputDatetimeFormatHelper.toFormValue(date, isDatePicker));
8809
+ this.currentValue.set(this.toControlValue(date));
8810
+ this.onChange(InputDatetimeFormatHelper.toFormValue(date, this.isDatePicker()));
8463
8811
  }
8464
8812
  initializeDateChangedListener() {
8465
8813
  // Date-picker changes (day/month/year selection) come from calendarService.dateChanged.
@@ -8478,13 +8826,17 @@ class CaiInputDatetimePickerComponent {
8478
8826
  toDate(value) {
8479
8827
  return InputDatetimeFormatHelper.toDate(value, this.isDatePicker());
8480
8828
  }
8829
+ parseControlValue(value) {
8830
+ return InputDatetimeFormatHelper.parseControlValue(value, this.isDatePicker(), this.dateFormat());
8831
+ }
8832
+ toControlValue(date) {
8833
+ return InputDatetimeFormatHelper.toControlValue(date, this.isDatePicker(), this.dateFormat(), this.timeFormat());
8834
+ }
8481
8835
  moveHighlightedPartRight() {
8482
8836
  if (this.isDatePicker()) {
8483
- const nextCurrentValue = InputDatetimeDateInputHelper.formatDatePartOnNavigation(this.currentValue(), this.highlightedPart());
8837
+ const nextCurrentValue = InputDatetimeDateInputHelper.formatDatePartOnNavigation(this.currentValue(), this.highlightedPart(), this.dateFormat());
8484
8838
  this.currentValue.set(nextCurrentValue);
8485
- const parsedDate = nextCurrentValue
8486
- ? this.toDate(nextCurrentValue)
8487
- : null;
8839
+ const parsedDate = this.parseControlValue(nextCurrentValue);
8488
8840
  if (parsedDate) {
8489
8841
  this.dateTime.set(parsedDate);
8490
8842
  this.onChange(InputDatetimeFormatHelper.toFormValue(parsedDate, true));
@@ -8497,7 +8849,7 @@ class CaiInputDatetimePickerComponent {
8497
8849
  this.highlightedPart.set(0);
8498
8850
  return;
8499
8851
  }
8500
- if (this.highlightedPart() === 2) {
8852
+ if (this.highlightedPart() === this.lastPartIndex()) {
8501
8853
  this.highlightedPart.set(0);
8502
8854
  return;
8503
8855
  }
@@ -8509,7 +8861,7 @@ class CaiInputDatetimePickerComponent {
8509
8861
  return;
8510
8862
  }
8511
8863
  if (this.highlightedPart() === 0) {
8512
- this.highlightedPart.set(2);
8864
+ this.highlightedPart.set(this.lastPartIndex());
8513
8865
  return;
8514
8866
  }
8515
8867
  this.highlightedPart.set((this.highlightedPart() ?? 2) - 1);
@@ -8553,9 +8905,7 @@ class CaiInputDatetimePickerComponent {
8553
8905
  }
8554
8906
  writeValue(value) {
8555
8907
  const parsedDate = this.toDate(value);
8556
- this.currentValue.set(parsedDate
8557
- ? InputDatetimeFormatHelper.toControlValue(parsedDate, this.isDatePicker())
8558
- : null);
8908
+ this.currentValue.set(parsedDate ? this.toControlValue(parsedDate) : null);
8559
8909
  this.dateTime.set(parsedDate ?? new Date());
8560
8910
  }
8561
8911
  clearInput(event) {
@@ -8632,9 +8982,9 @@ class CaiInputDatetimePickerComponent {
8632
8982
  this.isInputSelected.set(false);
8633
8983
  this.highlightedPart.set(0);
8634
8984
  }
8635
- const { nextValue, nextHighlightedPart } = InputDatetimeFormatHelper.handleInput(this.currentValue(), event, this.highlightedPart() ?? null, this.isDatePicker());
8985
+ const { nextValue, nextHighlightedPart } = InputDatetimeFormatHelper.handleInput(this.currentValue(), event, this.highlightedPart() ?? null, this.isDatePicker(), this.dateFormat(), this.timeFormat());
8636
8986
  this.currentValue.set(nextValue);
8637
- const parsedDate = nextValue ? this.toDate(nextValue) : null;
8987
+ const parsedDate = this.parseControlValue(nextValue);
8638
8988
  if (parsedDate) {
8639
8989
  this.dateTime.set(parsedDate);
8640
8990
  }
@@ -8663,12 +9013,12 @@ class CaiInputDatetimePickerComponent {
8663
9013
  event.stopPropagation();
8664
9014
  const pastedText = event.clipboardData?.getData('text') ?? '';
8665
9015
  const isDatePicker = this.isDatePicker();
8666
- const parsedDate = InputDatetimePasteHelper.parsePastedValue(pastedText, isDatePicker);
9016
+ const parsedDate = InputDatetimePasteHelper.parsePastedValue(pastedText, isDatePicker, this.dateFormat());
8667
9017
  if (!parsedDate) {
8668
9018
  return;
8669
9019
  }
8670
9020
  this.dateTime.set(parsedDate);
8671
- this.currentValue.set(InputDatetimeFormatHelper.toControlValue(parsedDate, isDatePicker));
9021
+ this.currentValue.set(this.toControlValue(parsedDate));
8672
9022
  this.highlightedPart.set(null);
8673
9023
  this.mainPopover.close();
8674
9024
  requestAnimationFrame(() => {
@@ -8758,7 +9108,7 @@ class CaiInputDatetimePickerComponent {
8758
9108
  this.clearButtonTooltip.close();
8759
9109
  }
8760
9110
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: CaiInputDatetimePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8761
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: CaiInputDatetimePickerComponent, isStandalone: true, selector: "cai-input-datetime-picker, ca-date-time", inputs: { id: "id", inputConfig: "inputConfig", forceInvalidStyling: "forceInvalidStyling" }, outputs: { clearInputEvent: "clear", blurInputEvent: "blurInput", onFocusEmitter: "onFocusEmitter" }, providers: [CalendarDateTimePickerService], viewQueries: [{ propertyName: "inputListener", first: true, predicate: ["inputListener"], descendants: true }, { propertyName: "mainPopover", first: true, predicate: ["mainPopover"], descendants: true }, { propertyName: "clearButtonTooltip", first: true, predicate: ["clearButtonTooltip"], descendants: true }, { propertyName: "iconContainer", first: true, predicate: ["iconContainer"], descendants: true, read: ElementRef }, { propertyName: "dropdownIcon", first: true, predicate: ["dropdownIcon"], descendants: true, read: ElementRef }], ngImport: i0, template: "@let inTable = inputConfig?.inTable; @let inverse = inputConfig?.inverse;\n@let size = inputConfig?.size;\n@let invalid =\n (getSuperControl?.invalid &&\n (getSuperControl?.touched || getSuperControl?.dirty)) ||\n shouldShowInternalValidationError();\n@let valid = getSuperControl?.valid && getSuperControl?.value;\n@let disabled = getSuperControl?.disabled || inputConfig?.isDisabled;\n@let isBilling = inputConfig?.isBilling;\n@let showClear = !disabled && !inputConfig.hideClear;\n@let hasFloatingError = inTable && invalid;\n\n<div\n [id]=\"id\"\n class=\"datetime-input-container\"\n [class]=\"{\n 'datetime-valid': valid && !forceInvalidStyling,\n 'datetime-invalid': invalid || forceInvalidStyling,\n 'datetime-disabled': disabled,\n 'datetime-focus': isInputFocused(),\n 'datetime-has-text': !!currentValue(),\n 'datetime-has-date': hasDate(),\n 'datetime-required': isRequired && !disabled,\n 'datetime-in-table': inTable,\n 'datetime-inverse': inverse,\n 'datetime-billing': isBilling,\n 'datetime-popover-open': mainPopover.isOpen(),\n 'datetime-size-22': size === 22,\n 'datetime-icon-hidden': inputConfig.isIconHidden,\n 'force-invalid': forceInvalidStyling,\n }\"\n #mainPopover=\"ngbPopover\"\n [ngbPopover]=\"!disabled ? dateTimePopover : null\"\n [placement]=\"['bottom-start', 'top-start']\"\n [triggers]=\"'manual'\"\n [popoverClass]=\"'datetimepopovermain'\"\n [autoClose]=\"'outside'\"\n [container]=\"'body'\"\n (mouseenter)=\"hasFloatingError && errorTooltipContainer.open()\"\n (mouseleave)=\"hasFloatingError && errorTooltipContainer.close()\"\n (pointerdown)=\"focusInput($event)\"\n (mousedown)=\"$event.preventDefault()\"\n (dblclick)=\"onInputSelect($event)\"\n>\n <div class=\"datetime-label\">\n {{ inputConfig.label }}\n </div>\n\n <input\n #inputListener\n [id]=\"id\"\n [value]=\"currentValue() ?? ''\"\n [tabindex]=\"disabled ? '-1' : '0'\"\n (focus)=\"onInputFocus()\"\n (blur)=\"onInputBlur()\"\n (keydown)=\"onKeyDown($event)\"\n (input)=\"onInputChange($event)\"\n (paste)=\"onInputPaste($event)\"\n class=\"datetime-input-listener\"\n #errorTooltipContainer=\"ngbTooltip\"\n [disabled]=\"disabled\"\n [ngbTooltip]=\"hasFloatingError ? errorTooltip : null\"\n [container]=\"'body'\"\n [placement]=\"'bottom'\"\n [triggers]=\"'manual'\"\n [disableTooltip]=\"isInputFocused()\"\n tooltipClass=\"tooltip tooltip-bg-red-500 input-tooltip\"\n />\n\n @if (!inputConfig.isIconHidden) {\n <div\n #iconContainer\n class=\"datetime-icon-container\"\n (click)=\"togglePopover()\"\n >\n <svg-icon\n class=\"datetime-icon\"\n [name]=\"\n inputConfig.placeholderIcon === 'date' ? 'cai-date' : 'cai-time'\n \"\n ></svg-icon>\n <div class=\"datetime-separator\"></div>\n </div>\n }\n\n <div class=\"datetime-input\" [class.selected]=\"isInputSelected()\">\n @if (isDatePicker()) {\n <span\n class=\"datetime-input-part\"\n [class.highlighted]=\"highlightedPart() === 0\"\n [class.filled]=\"displayedValues().month !== 'MM'\"\n (pointerdown)=\"highlightPart($event, 0)\"\n >{{ displayedValues().month }}</span\n >\n <span class=\"datetime-input-separator\">/</span>\n <span\n class=\"datetime-input-part\"\n [class.highlighted]=\"highlightedPart() === 1\"\n [class.filled]=\"displayedValues().day !== 'DD'\"\n (pointerdown)=\"highlightPart($event, 1)\"\n >{{ displayedValues().day }}</span\n >\n <span class=\"datetime-input-separator\">/</span>\n <span\n class=\"datetime-input-part\"\n [class.highlighted]=\"highlightedPart() === 2\"\n [class.filled]=\"displayedValues().year !== 'YY'\"\n (pointerdown)=\"highlightPart($event, 2)\"\n >{{ displayedValues().year }}</span\n >\n } @else {\n <span\n class=\"datetime-input-part\"\n [class.highlighted]=\"highlightedPart() === 0\"\n [class.filled]=\"displayedValues().hour !== 'HH'\"\n (pointerdown)=\"highlightPart($event, 0)\"\n >{{ displayedValues().hour }}</span\n >\n <span class=\"datetime-input-separator\">:</span>\n <span\n class=\"datetime-input-part\"\n [class.highlighted]=\"highlightedPart() === 1\"\n [class.filled]=\"displayedValues().minute !== 'MM'\"\n (pointerdown)=\"highlightPart($event, 1)\"\n >{{ displayedValues().minute }}</span\n >\n <span\n class=\"datetime-input-part time-am-pm\"\n [class.highlighted]=\"highlightedPart() === 2\"\n (pointerdown)=\"highlightPart($event, 2)\"\n >{{ displayedValues().ampm }}</span\n >\n }\n </div>\n\n @if (!disabled) {\n @let tooltipClass =\n inverse\n ? \"tooltip input-tooltip tooltip-bg-white-700 tooltip-text-black-500\"\n : \"tooltip input-tooltip\";\n\n @if (showClear) {\n <button\n class=\"datetime-cancel-button\"\n type=\"button\"\n tabindex=\"-1\"\n ngbTooltip=\"Clear\"\n [openDelay]=\"600\"\n [tooltipClass]=\"tooltipClass\"\n [placement]=\"'top'\"\n [container]=\"'body'\"\n [autoClose]=\"true\"\n #clearButtonTooltip=\"ngbTooltip\"\n (click)=\"clearInput($event)\"\n (pointerdown)=\"closeClearButtonTooltip()\"\n (mouseleave)=\"closeClearButtonTooltip()\"\n >\n <svg-icon class=\"datetime-bg-icon\" name=\"cai-cancel\"></svg-icon>\n </button>\n }\n <svg-icon\n #dropdownIcon\n class=\"datetime-icon datetime-dropdown-icon\"\n (click)=\"togglePopover()\"\n name=\"cai-arrow-secondary-down\"\n ></svg-icon>\n }\n <!-- Error Message -->\n @if (!inTable || isBilling) {\n <div class=\"datetime-error-message\">\n {{\n shouldShowInternalValidationError()\n ? internalValidationErrorMessage()\n : invalid\n ? (getSuperControl?.errors\n | errorMessage: inputConfig.customErrors)[0]\n : \"\"\n }}\n </div>\n }\n</div>\n\n<!-- Popover for DateTime Pickers -->\n<ng-template #dateTimePopover let-data=\"data\">\n <div\n class=\"datetime-dropdown-holder\"\n [class.datetime-has-stroke]=\"inputConfig.hasStroke\"\n >\n <cai-custom-datetime-pickers\n [calendarType]=\"isDatePicker() ? 'date' : 'time'\"\n [inputConfig]=\"inputConfig\"\n [placeholder]=\"'MM/DD/YY'\"\n [dateTime]=\"dateTime()\"\n (closePopover)=\"onPopoverDateChanged($event)\"\n ></cai-custom-datetime-pickers>\n </div>\n</ng-template>\n\n<ng-template #errorTooltip>\n @if (inTable && invalid && !isInputFocused()) {\n {{\n shouldShowInternalValidationError()\n ? internalValidationErrorMessage()\n : (getSuperControl?.errors | errorMessage: inputConfig.customErrors)[0]\n }}\n }\n</ng-template>\n", styles: ["input:-webkit-autofill,input:-webkit-autofill:hover,input:-webkit-autofill:focus,input:-webkit-autofill:active{transition:background-color 5000s ease-in-out 0s!important}input:-webkit-autofill:focus{-webkit-text-fill-color:#ffffff!important}input:-moz-autofill,input:-moz-autofill-preview{filter:none}*,*:before,*:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}p,ul,ol,dl,blockquote,figure,pre{margin:0}button,input,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button{background:none;border:none;padding:0}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle;max-width:100%;height:auto}ul,ol{padding-left:1.5rem;list-style-position:outside}a{color:inherit;text-decoration:inherit}table{border-collapse:collapse;border-spacing:0}:focus:not(:focus-visible){outline:none}.datetime-input-container{--color-text: #2f2f2f;--color-text-negative: #df3c3c;--color-text-heading: #424242;--color-text-subtle: #919191;--color-text-inverse: #ffffff;--color-icon-neutral: #919191;--color-icon-negative: #e66767;--color-icon-positive: #6692f1;--color-icon-inverse: rgba(255, 255, 255, .6980392157);--color-icon-disable: #cccccc;--color-surface-neutral: #eeeeee;--color-surface-neutral-hover: #dadada;--color-surface-neutral-focus: #1d1d1d;--color-surface-positive: #e9effd;--color-surface-positive-hover: #bed0f9;--color-surface-positive-focus: #0b49d1;--color-surface-negative: #fbe9e9;--color-surface-negative-hover: #f4bebe;--color-surface-negative-focus: #c20c0c;--color-surface-disable: #f7f7f7;padding:4px 4px 4px 6px;border-radius:2px;position:relative;display:flex;align-items:center;touch-action:manipulation;background-color:var(--color-surface-neutral);transition:background-color .1s cubic-bezier(.46,.03,.51,.95);cursor:text;width:100%;height:26px}.datetime-input-container.datetime-inverse{--color-text: #ffffff;--color-text-negative: #ed9292;--color-text-heading: #ffffff;--color-text-inverse: #2f2f2f;--color-icon-neutral: #aaaaaa;--color-icon-negative: #ed9292;--color-icon-positive: #92b1f5;--color-icon-disable: #6c6c6c;--color-surface-neutral: #424242;--color-surface-neutral-hover: #6c6c6c;--color-surface-neutral-focus: #dadada;--color-surface-positive: rgba(59, 115, 237, .2);--color-surface-positive-hover: #2f519a;--color-surface-positive-focus: #0b49d1;--color-surface-negative: rgba(223, 60, 60, .2);--color-surface-negative-hover: #923030;--color-surface-negative-focus: #c20c0c;--color-surface-disable: rgba(66, 66, 66, .4)}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-icon{color:var(--color-icon-neutral)!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-separator{background-color:var(--color-icon-neutral)!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-bg-icon{background-color:var(--color-icon-neutral)!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus:hover .datetime-bg-icon:hover{background-color:#424242!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus:hover .datetime-dropdown-icon:hover,.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus:hover .datetime-icon:hover{color:#424242!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-input{color:var(--color-text-inverse)!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-input.selected .datetime-input-part{background-color:#91919133}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-input.selected .datetime-input-separator{background-color:#91919133}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-input .datetime-input-part{color:#0000004d!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-input .datetime-input-part.filled{color:#000!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-input .datetime-input-part.highlighted{background-color:#91919133;color:#000!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-input .datetime-input-separator{color:#0000004d!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date):hover .datetime-bg-icon:hover{background-color:#fff}.datetime-input-container.datetime-inverse:not(.datetime-has-date):hover .datetime-dropdown-icon:hover,.datetime-input-container.datetime-inverse:not(.datetime-has-date):hover .datetime-icon:hover{color:#fff}.datetime-input-container.datetime-inverse.datetime-valid .datetime-input,.datetime-input-container.datetime-inverse.datetime-invalid .datetime-input{color:var(--color-text)!important}.datetime-input-container.datetime-inverse.datetime-valid.datetime-focus .datetime-input,.datetime-input-container.datetime-inverse.datetime-invalid.datetime-focus .datetime-input{color:var(--color-text)}.datetime-input-container.datetime-inverse.datetime-valid:hover .datetime-bg-icon:hover,.datetime-input-container.datetime-inverse.datetime-invalid:hover .datetime-bg-icon:hover{background-color:#fff!important}.datetime-input-container.datetime-inverse.datetime-valid:hover .datetime-dropdown-icon:hover,.datetime-input-container.datetime-inverse.datetime-valid:hover .datetime-icon:hover,.datetime-input-container.datetime-inverse.datetime-invalid:hover .datetime-dropdown-icon:hover,.datetime-input-container.datetime-inverse.datetime-invalid:hover .datetime-icon:hover{color:#fff!important}.datetime-input-container.datetime-in-table{--color-surface-neutral: transparent;--color-surface-negative: transparent;--color-surface-positive: transparent}.datetime-input-container.datetime-in-table .datetime-dropdown-icon{opacity:0}.datetime-input-container.datetime-in-table.datetime-invalid:not(.datetime-focus):not(:hover):not(.force-invalid) .datetime-input,.datetime-input-container.datetime-in-table.datetime-invalid:not(.datetime-focus):not(:hover):not(.force-invalid) .datetime-label{color:var(--color-text-negative)}.datetime-input-container.datetime-in-table:hover .datetime-dropdown-icon,.datetime-input-container.datetime-in-table.datetime-focus .datetime-dropdown-icon{opacity:1}.datetime-input-container:hover{background-color:var(--color-surface-neutral-hover)}.datetime-input-container:hover .datetime-bg-icon{color:var(--color-surface-neutral-hover)}.datetime-input-container.datetime-focus{background-color:var(--color-surface-neutral-focus)}.datetime-input-container.datetime-focus.datetime-in-table:not(.datetime-billing) .datetime-label{opacity:0}.datetime-input-container.datetime-focus:not(.datetime-in-table):not(.datetime-billing) .datetime-label{transform:translateY(-20px);font-weight:600;font-size:11px;color:var(--color-text-heading)!important}.datetime-input-container.datetime-focus.datetime-billing .datetime-label{color:#fff!important}.datetime-input-container.datetime-focus .datetime-bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-neutral-focus)}.datetime-input-container.datetime-focus .datetime-bg-icon:hover{background-color:#fff}.datetime-input-container.datetime-focus .datetime-icon{color:var(--color-icon-inverse)}.datetime-input-container.datetime-focus .datetime-icon:hover{color:#fff}.datetime-input-container.datetime-focus .datetime-separator{background-color:var(--color-icon-inverse)}.datetime-input-container.datetime-focus .datetime-input{color:var(--color-text-inverse);opacity:1;pointer-events:auto}.datetime-input-container.datetime-focus .datetime-input .datetime-input-part{height:18px;color:#ffffffb3}.datetime-input-container.datetime-focus .datetime-input .datetime-input-part.filled{color:#fff}.datetime-input-container.datetime-focus .datetime-input .datetime-input-part.highlighted{background-color:#ffffff4d;color:#fff}.datetime-input-container.datetime-focus .datetime-input .datetime-input-separator{color:#ffffffb3}.datetime-input-container.datetime-popover-open .datetime-dropdown-icon{transform:rotateX(180deg)}.datetime-input-container.datetime-has-text .datetime-input{opacity:1;pointer-events:auto!important}.datetime-input-container.datetime-has-text.datetime-disabled .datetime-input{pointer-events:none!important}.datetime-input-container.datetime-has-text:not(.datetime-in-table):not(.datetime-billing) .datetime-label{transform:translateY(-20px);font-weight:600;font-size:11px;color:var(--color-text-heading)!important}.datetime-input-container.datetime-has-text.datetime-in-table:not(.datetime-billing) .datetime-label{opacity:0}.datetime-input-container.datetime-valid:not(.datetime-disabled){background-color:var(--color-surface-positive)}.datetime-input-container.datetime-valid:not(.datetime-disabled):hover{background-color:var(--color-surface-positive-hover)}.datetime-input-container.datetime-valid:not(.datetime-disabled):hover .datetime-bg-icon{background-color:var(--color-icon-positive);color:var(--color-surface-positive-hover)}.datetime-input-container.datetime-valid:not(.datetime-disabled):hover .datetime-bg-icon:hover{background-color:#0b49d1}.datetime-input-container.datetime-valid:not(.datetime-disabled):hover .datetime-cancel-button{opacity:1;pointer-events:auto}.datetime-input-container.datetime-valid:not(.datetime-disabled).datetime-focus{background-color:var(--color-surface-positive-focus)}.datetime-input-container.datetime-valid:not(.datetime-disabled).datetime-focus .datetime-bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-positive-focus)}.datetime-input-container.datetime-valid:not(.datetime-disabled).datetime-focus .datetime-bg-icon:hover{background-color:#fff}.datetime-input-container.datetime-valid:not(.datetime-disabled).datetime-focus .datetime-icon{color:var(--color-icon-inverse)}.datetime-input-container.datetime-valid:not(.datetime-disabled).datetime-focus .datetime-icon:hover{color:#fff}.datetime-input-container.datetime-valid:not(.datetime-disabled).datetime-focus .datetime-separator{background-color:var(--color-icon-inverse)}.datetime-input-container.datetime-valid:not(.datetime-disabled).datetime-focus .datetime-cancel-button{opacity:1;pointer-events:auto}.datetime-input-container.datetime-valid:not(.datetime-disabled) .datetime-separator{background-color:var(--color-icon-positive)}.datetime-input-container.datetime-valid:not(.datetime-disabled) .datetime-dropdown-icon,.datetime-input-container.datetime-valid:not(.datetime-disabled) .datetime-icon{color:var(--color-icon-positive)}.datetime-input-container.datetime-valid:not(.datetime-disabled) .datetime-dropdown-icon:hover,.datetime-input-container.datetime-valid:not(.datetime-disabled) .datetime-icon:hover{color:#0b49d1}.datetime-input-container.datetime-invalid:not(.datetime-disabled){background-color:var(--color-surface-negative)}.datetime-input-container.datetime-invalid:not(.datetime-disabled) .datetime-error-message{opacity:1;transform:translateY(0)}.datetime-input-container.datetime-invalid:not(.datetime-disabled):hover{background-color:var(--color-surface-negative-hover)}.datetime-input-container.datetime-invalid:not(.datetime-disabled):hover .datetime-bg-icon{background-color:var(--color-icon-negative);color:var(--color-surface-negative-hover)}.datetime-input-container.datetime-invalid:not(.datetime-disabled):hover .datetime-bg-icon:hover{background-color:#c20c0c}.datetime-input-container.datetime-invalid:not(.datetime-disabled):hover.datetime-has-text .datetime-cancel-button{opacity:1;pointer-events:auto}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-text,.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-date{background-color:var(--color-surface-negative-focus)}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-text .datetime-bg-icon,.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-date .datetime-bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-negative-focus)}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-text .datetime-bg-icon:hover,.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-date .datetime-bg-icon:hover{background-color:#fff}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-text .datetime-icon,.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-date .datetime-icon{color:var(--color-icon-inverse)}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-text .datetime-icon:hover,.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-date .datetime-icon:hover{color:#fff}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-text .datetime-separator,.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-date .datetime-separator{background-color:var(--color-icon-inverse)}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-text .datetime-cancel-button,.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-date .datetime-cancel-button{opacity:1;pointer-events:auto}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus:not(.datetime-has-date){background-color:var(--color-surface-neutral-focus)}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus:not(.datetime-has-date) .datetime-error-message{opacity:0}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus:not(.datetime-has-date) .datetime-bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-neutral-focus)}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus:not(.datetime-has-date) .datetime-bg-icon:hover{background-color:#fff}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus:not(.datetime-has-date) .datetime-separator{background-color:var(--color-icon-inverse)}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus:not(.datetime-has-date) .datetime-icon{color:var(--color-icon-inverse)}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus:not(.datetime-has-date) .datetime-icon:hover{color:#fff}.datetime-input-container.datetime-invalid:not(.datetime-disabled) .datetime-separator{background-color:var(--color-icon-negative)}.datetime-input-container.datetime-invalid:not(.datetime-disabled) .datetime-dropdown-icon,.datetime-input-container.datetime-invalid:not(.datetime-disabled) .datetime-icon{color:var(--color-icon-negative)}.datetime-input-container.datetime-invalid:not(.datetime-disabled) .datetime-dropdown-icon:hover,.datetime-input-container.datetime-invalid:not(.datetime-disabled) .datetime-icon:hover{color:#c20c0c}.datetime-input-container.datetime-disabled{cursor:default;pointer-events:none}.datetime-input-container.datetime-disabled .datetime-icon,.datetime-input-container.datetime-disabled .datetime-dropdown-icon{cursor:default}.datetime-input-container.datetime-disabled:not(.datetime-in-table){background-color:var(--color-surface-disable)}.datetime-input-container.datetime-disabled.datetime-in-table{background-color:transparent}.datetime-input-container.datetime-disabled .datetime-label{color:var(--color-text-subtle)!important}.datetime-input-container.datetime-disabled .datetime-icon{color:var(--color-icon-disable)}.datetime-input-container.datetime-disabled.datetime-has-text .datetime-label{color:var(--color-text-neutral)!important}.datetime-input-container.datetime-disabled.datetime-has-text .datetime-icon{color:var(--color-icon-neutral)}.datetime-input-container.datetime-disabled .datetime-separator{background-color:var(--color-icon-neutral)}.datetime-input-container.datetime-disabled .datetime-input{color:var(--color-text)!important}.datetime-input-container.datetime-required .datetime-label:after{content:\" *\";color:var(--color-text-negative)}.datetime-icon-container{display:flex;align-items:center;justify-content:center;gap:4px;width:max-content}.datetime-icon-container.hidden{display:none}.datetime-icon-container .datetime-icon{order:1;cursor:pointer}.datetime-icon-container .datetime-separator{height:14px;width:1px;border-radius:2px;background-color:var(--color-icon-neutral);transition:background-color .1s ease-in-out;opacity:40%;order:2;margin-right:4px}.datetime-icon{width:18px;height:18px;display:flex;align-items:center;justify-content:center;color:var(--color-icon-neutral);transition:color .1s ease-in-out,opacity .1s ease-in-out,transform .15s ease-in-out}.datetime-label{position:absolute;display:flex;gap:4px;left:27px;font-size:14px;line-height:18px;font-weight:400;pointer-events:none;padding:.25rem 6px;color:var(--color-text);transition:transform .1s ease-in-out,font-weight .1s ease-in-out,color .1s ease-in-out,font-size .1s ease-in-out,opacity .1s ease-in-out;transform:translateY(0);-webkit-user-select:none;user-select:none}.datetime-icon-hidden .datetime-label{left:0}.datetime-bg-icon{background-color:var(--color-icon-neutral);color:var(--color-surface-neutral);border-radius:1px;height:18px;width:18px;padding:0;display:grid;place-items:center;transition:background-color .1s ease-in-out,color .1s ease-in-out,opacity .1s ease-in-out,transform .1s ease-in-out;transform-box:border-box;transform-origin:center;will-change:transform}.datetime-bg-icon:focus-visible{outline:none}.datetime-bg-icon svg{transition:transform .1s ease-in-out}.datetime-bg-icon:hover{transform:scale(1.2222222222)}.datetime-bg-icon:hover svg{transform:scale(.8181818182)}.datetime-bg-icon:active{transform:scale(1)}.datetime-cancel-button{position:absolute;right:26px;top:4px;opacity:0;transition:opacity .1s ease-in-out;pointer-events:none}.datetime-dropdown-icon{position:absolute;right:4px;top:4px;transform:rotateX(0);cursor:pointer}.datetime-size-22{height:22px!important;padding-left:0}.datetime-size-22 .datetime-bg-icon{height:14px!important;width:14px!important;padding:2px!important;right:22px!important}.datetime-size-22 .datetime-icon-container{height:22px!important;padding-top:2px;padding-bottom:2px;padding-left:4px!important}.datetime-size-22 .datetime-input{padding-top:2px;padding-bottom:2px}.datetime-size-22 .datetime-label{padding-top:2px;padding-bottom:2px;padding-left:0!important}.datetime-size-22 .datetime-icon{height:14px!important;width:14px!important}.datetime-size-22.datetime-has-text .datetime-label,.datetime-size-22.datetime-focus .datetime-label{transform:translateY(-18px)!important}.datetime-error-message{position:absolute;bottom:-16px;right:6px;font-size:11px;font-weight:600;opacity:0;-webkit-user-select:none;user-select:none;transition:opacity .1s ease-in-out,transform .1s ease-in-out;color:var(--color-text-negative);transform:translateY(-10px);pointer-events:none}.datetime-input-listener{opacity:0;pointer-events:none;position:absolute;inset:0;font-size:16px}.datetime-billing .datetime-separator{order:0;margin-right:0;margin-left:4px}.datetime-billing .datetime-cancel-button{right:4px}.datetime-billing .datetime-label{left:0;font-weight:600;font-size:11px;color:var(--color-text-heading)!important}.datetime-billing .datetime-icon-container{order:2}.datetime-billing .datetime-input{margin-left:auto;width:max-content}.datetime-billing .datetime-error-message{bottom:4px!important;right:32px!important;transform:translateY(0)!important}.datetime-billing.datetime-focus .datetime-error-message,.datetime-billing.datetime-has-text .datetime-error-message{opacity:0!important}.datetime-billing .datetime-dropdown-icon,.datetime-billing:hover .datetime-icon,.datetime-billing.datetime-focus .datetime-icon{opacity:0}.datetime-billing:hover .datetime-dropdown-icon,.datetime-billing.datetime-focus .datetime-dropdown-icon{opacity:1}.datetime-billing.datetime-has-text .datetime-dropdown-icon{opacity:0!important;pointer-events:none!important}.datetime-billing.datetime-has-text:hover .datetime-icon-container,.datetime-billing.datetime-has-text.datetime-focus .datetime-icon-container{pointer-events:none!important}.datetime-billing.datetime-has-text:hover .datetime-icon-container .datetime-icon,.datetime-billing.datetime-has-text.datetime-focus .datetime-icon-container .datetime-icon{opacity:0!important}.datetime-input{font-size:14px;line-height:18px;font-weight:400;width:100%;opacity:0;pointer-events:none;transition:color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95);-webkit-user-select:none;user-select:none}.datetime-input .datetime-input-separator{background-color:transparent;transition:color .1s cubic-bezier(.46,.03,.51,.95),background-color .1s cubic-bezier(.46,.03,.51,.95)}.datetime-input .datetime-input-part{position:relative;background-color:transparent;transition:color .1s cubic-bezier(.46,.03,.51,.95),background-color .1s cubic-bezier(.46,.03,.51,.95)}.datetime-input .datetime-input-part.time-am-pm{margin-left:4px}.datetime-input .datetime-input-part:after{content:\"\";inset:0 -3px;position:absolute}.datetime-input.selected .datetime-input-part,.datetime-input.selected .datetime-input-separator{background-color:#ffffff4d}.datetime-input.selected .time-am-pm{margin-left:0!important;padding-left:4px!important}\n"], dependencies: [{ kind: "ngmodule", type:
9111
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: CaiInputDatetimePickerComponent, isStandalone: true, selector: "cai-input-datetime-picker, ca-date-time", inputs: { id: "id", inputConfig: "inputConfig", forceInvalidStyling: "forceInvalidStyling" }, outputs: { clearInputEvent: "clear", blurInputEvent: "blurInput", onFocusEmitter: "onFocusEmitter" }, providers: [CalendarDateTimePickerService], viewQueries: [{ propertyName: "inputListener", first: true, predicate: ["inputListener"], descendants: true }, { propertyName: "mainPopover", first: true, predicate: ["mainPopover"], descendants: true }, { propertyName: "clearButtonTooltip", first: true, predicate: ["clearButtonTooltip"], descendants: true }, { propertyName: "iconContainer", first: true, predicate: ["iconContainer"], descendants: true, read: ElementRef }, { propertyName: "dropdownIcon", first: true, predicate: ["dropdownIcon"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "@let inTable = inputConfig?.inTable; @let inverse = inputConfig?.inverse;\n@let size = inputConfig?.size;\n@let invalid =\n (getSuperControl?.invalid &&\n (getSuperControl?.touched || getSuperControl?.dirty)) ||\n shouldShowInternalValidationError();\n@let valid = getSuperControl?.valid && getSuperControl?.value;\n@let disabled = getSuperControl?.disabled || inputConfig?.isDisabled;\n@let isBilling = inputConfig?.isBilling;\n@let showClear = !disabled && !inputConfig.hideClear;\n@let hasFloatingError = inTable && invalid;\n\n<div\n [id]=\"id\"\n class=\"datetime-input-container\"\n [class]=\"{\n 'datetime-valid': valid && !forceInvalidStyling,\n 'datetime-invalid': invalid || forceInvalidStyling,\n 'datetime-disabled': disabled,\n 'datetime-focus': isInputFocused(),\n 'datetime-has-text': !!currentValue(),\n 'datetime-has-date': hasDate(),\n 'datetime-required': isRequired && !disabled,\n 'datetime-in-table': inTable,\n 'datetime-inverse': inverse,\n 'datetime-billing': isBilling,\n 'datetime-popover-open': mainPopover.isOpen(),\n 'datetime-size-22': size === 22,\n 'datetime-icon-hidden': inputConfig.isIconHidden,\n 'force-invalid': forceInvalidStyling,\n }\"\n #mainPopover=\"ngbPopover\"\n [ngbPopover]=\"!disabled ? dateTimePopover : null\"\n [placement]=\"['bottom-start', 'top-start']\"\n [triggers]=\"'manual'\"\n [popoverClass]=\"'datetimepopovermain'\"\n [autoClose]=\"'outside'\"\n [container]=\"'body'\"\n (mouseenter)=\"hasFloatingError && errorTooltipContainer.open()\"\n (mouseleave)=\"hasFloatingError && errorTooltipContainer.close()\"\n (pointerdown)=\"focusInput($event)\"\n (mousedown)=\"$event.preventDefault()\"\n (dblclick)=\"onInputSelect($event)\"\n>\n <div class=\"datetime-label\">\n {{ inputConfig.label }}\n </div>\n\n <input\n #inputListener\n [id]=\"id\"\n [value]=\"currentValue() ?? ''\"\n [tabindex]=\"disabled ? '-1' : '0'\"\n (focus)=\"onInputFocus()\"\n (blur)=\"onInputBlur()\"\n (keydown)=\"onKeyDown($event)\"\n (input)=\"onInputChange($event)\"\n (paste)=\"onInputPaste($event)\"\n class=\"datetime-input-listener\"\n #errorTooltipContainer=\"ngbTooltip\"\n [disabled]=\"disabled\"\n [ngbTooltip]=\"hasFloatingError ? errorTooltip : null\"\n [container]=\"'body'\"\n [placement]=\"'bottom'\"\n [triggers]=\"'manual'\"\n [disableTooltip]=\"isInputFocused()\"\n tooltipClass=\"tooltip tooltip-bg-red-500 input-tooltip\"\n />\n\n @if (!inputConfig.isIconHidden) {\n <div\n #iconContainer\n class=\"datetime-icon-container\"\n (click)=\"togglePopover()\"\n >\n <svg-icon\n class=\"datetime-icon\"\n [name]=\"\n inputConfig.placeholderIcon === 'date' ? 'cai-date' : 'cai-time'\n \"\n ></svg-icon>\n <div class=\"datetime-separator\"></div>\n </div>\n }\n\n <div class=\"datetime-input\" [class.selected]=\"isInputSelected()\">\n @if (isDatePicker()) {\n @for (part of displayedDateParts(); track part.type; let index = $index) {\n @if (index > 0) {\n <span class=\"datetime-input-separator\">{{ dateSeparator() }}</span>\n }\n <span\n class=\"datetime-input-part\"\n [class.highlighted]=\"highlightedPart() === index\"\n [class.filled]=\"part.value !== part.placeholder\"\n (pointerdown)=\"highlightPart($event, index)\"\n >{{ part.value }}</span\n >\n }\n } @else {\n <span\n class=\"datetime-input-part\"\n [class.highlighted]=\"highlightedPart() === 0\"\n [class.filled]=\"displayedValues().hour !== 'HH'\"\n (pointerdown)=\"highlightPart($event, 0)\"\n >{{ displayedValues().hour }}</span\n >\n <span class=\"datetime-input-separator\">:</span>\n <span\n class=\"datetime-input-part\"\n [class.highlighted]=\"highlightedPart() === 1\"\n [class.filled]=\"displayedValues().minute !== 'MM'\"\n (pointerdown)=\"highlightPart($event, 1)\"\n >{{ displayedValues().minute }}</span\n >\n @if (!isTwentyFourHour()) {\n <span\n class=\"datetime-input-part time-am-pm\"\n [class.highlighted]=\"highlightedPart() === 2\"\n (pointerdown)=\"highlightPart($event, 2)\"\n >{{ displayedValues().ampm }}</span\n >\n }\n }\n </div>\n\n @if (!disabled) {\n @let tooltipClass =\n inverse\n ? \"tooltip input-tooltip tooltip-bg-white-700 tooltip-text-black-500\"\n : \"tooltip input-tooltip\";\n\n @if (showClear) {\n <button\n class=\"datetime-cancel-button\"\n type=\"button\"\n tabindex=\"-1\"\n ngbTooltip=\"Clear\"\n [openDelay]=\"600\"\n [tooltipClass]=\"tooltipClass\"\n [placement]=\"'top'\"\n [container]=\"'body'\"\n [autoClose]=\"true\"\n #clearButtonTooltip=\"ngbTooltip\"\n (click)=\"clearInput($event)\"\n (pointerdown)=\"closeClearButtonTooltip()\"\n (mouseleave)=\"closeClearButtonTooltip()\"\n >\n <svg-icon class=\"datetime-bg-icon\" name=\"cai-cancel\"></svg-icon>\n </button>\n }\n <svg-icon\n #dropdownIcon\n class=\"datetime-icon datetime-dropdown-icon\"\n (click)=\"togglePopover()\"\n name=\"cai-arrow-secondary-down\"\n ></svg-icon>\n }\n <!-- Error Message -->\n @if (!inTable || isBilling) {\n <div class=\"datetime-error-message\">\n {{\n shouldShowInternalValidationError()\n ? internalValidationErrorMessage()\n : invalid\n ? (getSuperControl?.errors\n | errorMessage: inputConfig.customErrors)[0]\n : \"\"\n }}\n </div>\n }\n</div>\n\n<!-- Popover for DateTime Pickers -->\n<ng-template #dateTimePopover let-data=\"data\">\n <div\n class=\"datetime-dropdown-holder\"\n [class.datetime-has-stroke]=\"inputConfig.hasStroke\"\n >\n <cai-custom-datetime-pickers\n [calendarType]=\"isDatePicker() ? 'date' : 'time'\"\n [inputConfig]=\"inputConfig\"\n [placeholder]=\"'MM/DD/YY'\"\n [dateTime]=\"dateTime()\"\n (closePopover)=\"onPopoverDateChanged($event)\"\n ></cai-custom-datetime-pickers>\n </div>\n</ng-template>\n\n<ng-template #errorTooltip>\n @if (inTable && invalid && !isInputFocused()) {\n {{\n shouldShowInternalValidationError()\n ? internalValidationErrorMessage()\n : (getSuperControl?.errors | errorMessage: inputConfig.customErrors)[0]\n }}\n }\n</ng-template>\n", styles: ["input:-webkit-autofill,input:-webkit-autofill:hover,input:-webkit-autofill:focus,input:-webkit-autofill:active{transition:background-color 5000s ease-in-out 0s!important}input:-webkit-autofill:focus{-webkit-text-fill-color:#ffffff!important}input:-moz-autofill,input:-moz-autofill-preview{filter:none}*,*:before,*:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}p,ul,ol,dl,blockquote,figure,pre{margin:0}button,input,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button{background:none;border:none;padding:0}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle;max-width:100%;height:auto}ul,ol{padding-left:1.5rem;list-style-position:outside}a{color:inherit;text-decoration:inherit}table{border-collapse:collapse;border-spacing:0}:focus:not(:focus-visible){outline:none}.datetime-input-container{--color-text: #2f2f2f;--color-text-negative: #df3c3c;--color-text-heading: #424242;--color-text-subtle: #919191;--color-text-inverse: #ffffff;--color-icon-neutral: #919191;--color-icon-negative: #e66767;--color-icon-positive: #6692f1;--color-icon-inverse: rgba(255, 255, 255, .6980392157);--color-icon-disable: #cccccc;--color-surface-neutral: #eeeeee;--color-surface-neutral-hover: #dadada;--color-surface-neutral-focus: #1d1d1d;--color-surface-positive: #e9effd;--color-surface-positive-hover: #bed0f9;--color-surface-positive-focus: #0b49d1;--color-surface-negative: #fbe9e9;--color-surface-negative-hover: #f4bebe;--color-surface-negative-focus: #c20c0c;--color-surface-disable: #f7f7f7;padding:4px 4px 4px 6px;border-radius:2px;position:relative;display:flex;align-items:center;touch-action:manipulation;background-color:var(--color-surface-neutral);transition:background-color .1s cubic-bezier(.46,.03,.51,.95);cursor:text;width:100%;height:26px}.datetime-input-container.datetime-inverse{--color-text: #ffffff;--color-text-negative: #ed9292;--color-text-heading: #ffffff;--color-text-inverse: #2f2f2f;--color-icon-neutral: #aaaaaa;--color-icon-negative: #ed9292;--color-icon-positive: #92b1f5;--color-icon-disable: #6c6c6c;--color-surface-neutral: #424242;--color-surface-neutral-hover: #6c6c6c;--color-surface-neutral-focus: #dadada;--color-surface-positive: rgba(59, 115, 237, .2);--color-surface-positive-hover: #2f519a;--color-surface-positive-focus: #0b49d1;--color-surface-negative: rgba(223, 60, 60, .2);--color-surface-negative-hover: #923030;--color-surface-negative-focus: #c20c0c;--color-surface-disable: rgba(66, 66, 66, .4)}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-icon{color:var(--color-icon-neutral)!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-separator{background-color:var(--color-icon-neutral)!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-bg-icon{background-color:var(--color-icon-neutral)!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus:hover .datetime-bg-icon:hover{background-color:#424242!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus:hover .datetime-dropdown-icon:hover,.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus:hover .datetime-icon:hover{color:#424242!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-input{color:var(--color-text-inverse)!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-input.selected .datetime-input-part{background-color:#91919133}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-input.selected .datetime-input-separator{background-color:#91919133}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-input .datetime-input-part{color:#0000004d!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-input .datetime-input-part.filled{color:#000!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-input .datetime-input-part.highlighted{background-color:#91919133;color:#000!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-input .datetime-input-separator{color:#0000004d!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date):hover .datetime-bg-icon:hover{background-color:#fff}.datetime-input-container.datetime-inverse:not(.datetime-has-date):hover .datetime-dropdown-icon:hover,.datetime-input-container.datetime-inverse:not(.datetime-has-date):hover .datetime-icon:hover{color:#fff}.datetime-input-container.datetime-inverse.datetime-valid .datetime-input,.datetime-input-container.datetime-inverse.datetime-invalid .datetime-input{color:var(--color-text)!important}.datetime-input-container.datetime-inverse.datetime-valid.datetime-focus .datetime-input,.datetime-input-container.datetime-inverse.datetime-invalid.datetime-focus .datetime-input{color:var(--color-text)}.datetime-input-container.datetime-inverse.datetime-valid:hover .datetime-bg-icon:hover,.datetime-input-container.datetime-inverse.datetime-invalid:hover .datetime-bg-icon:hover{background-color:#fff!important}.datetime-input-container.datetime-inverse.datetime-valid:hover .datetime-dropdown-icon:hover,.datetime-input-container.datetime-inverse.datetime-valid:hover .datetime-icon:hover,.datetime-input-container.datetime-inverse.datetime-invalid:hover .datetime-dropdown-icon:hover,.datetime-input-container.datetime-inverse.datetime-invalid:hover .datetime-icon:hover{color:#fff!important}.datetime-input-container.datetime-in-table{--color-surface-neutral: transparent;--color-surface-negative: transparent;--color-surface-positive: transparent}.datetime-input-container.datetime-in-table .datetime-dropdown-icon{opacity:0}.datetime-input-container.datetime-in-table.datetime-invalid:not(.datetime-focus):not(:hover):not(.force-invalid) .datetime-input,.datetime-input-container.datetime-in-table.datetime-invalid:not(.datetime-focus):not(:hover):not(.force-invalid) .datetime-label{color:var(--color-text-negative)}.datetime-input-container.datetime-in-table:hover .datetime-dropdown-icon,.datetime-input-container.datetime-in-table.datetime-focus .datetime-dropdown-icon{opacity:1}.datetime-input-container:hover{background-color:var(--color-surface-neutral-hover)}.datetime-input-container:hover .datetime-bg-icon{color:var(--color-surface-neutral-hover)}.datetime-input-container.datetime-focus{background-color:var(--color-surface-neutral-focus)}.datetime-input-container.datetime-focus.datetime-in-table:not(.datetime-billing) .datetime-label{opacity:0}.datetime-input-container.datetime-focus:not(.datetime-in-table):not(.datetime-billing) .datetime-label{transform:translateY(-20px);font-weight:600;font-size:11px;color:var(--color-text-heading)!important}.datetime-input-container.datetime-focus.datetime-billing .datetime-label{color:#fff!important}.datetime-input-container.datetime-focus .datetime-bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-neutral-focus)}.datetime-input-container.datetime-focus .datetime-bg-icon:hover{background-color:#fff}.datetime-input-container.datetime-focus .datetime-icon{color:var(--color-icon-inverse)}.datetime-input-container.datetime-focus .datetime-icon:hover{color:#fff}.datetime-input-container.datetime-focus .datetime-separator{background-color:var(--color-icon-inverse)}.datetime-input-container.datetime-focus .datetime-input{color:var(--color-text-inverse);opacity:1;pointer-events:auto}.datetime-input-container.datetime-focus .datetime-input .datetime-input-part{height:18px;color:#ffffffb3}.datetime-input-container.datetime-focus .datetime-input .datetime-input-part.filled{color:#fff}.datetime-input-container.datetime-focus .datetime-input .datetime-input-part.highlighted{background-color:#ffffff4d;color:#fff}.datetime-input-container.datetime-focus .datetime-input .datetime-input-separator{color:#ffffffb3}.datetime-input-container.datetime-popover-open .datetime-dropdown-icon{transform:rotateX(180deg)}.datetime-input-container.datetime-has-text .datetime-input{opacity:1;pointer-events:auto!important}.datetime-input-container.datetime-has-text.datetime-disabled .datetime-input{pointer-events:none!important}.datetime-input-container.datetime-has-text:not(.datetime-in-table):not(.datetime-billing) .datetime-label{transform:translateY(-20px);font-weight:600;font-size:11px;color:var(--color-text-heading)!important}.datetime-input-container.datetime-has-text.datetime-in-table:not(.datetime-billing) .datetime-label{opacity:0}.datetime-input-container.datetime-valid:not(.datetime-disabled){background-color:var(--color-surface-positive)}.datetime-input-container.datetime-valid:not(.datetime-disabled):hover{background-color:var(--color-surface-positive-hover)}.datetime-input-container.datetime-valid:not(.datetime-disabled):hover .datetime-bg-icon{background-color:var(--color-icon-positive);color:var(--color-surface-positive-hover)}.datetime-input-container.datetime-valid:not(.datetime-disabled):hover .datetime-bg-icon:hover{background-color:#0b49d1}.datetime-input-container.datetime-valid:not(.datetime-disabled):hover .datetime-cancel-button{opacity:1;pointer-events:auto}.datetime-input-container.datetime-valid:not(.datetime-disabled).datetime-focus{background-color:var(--color-surface-positive-focus)}.datetime-input-container.datetime-valid:not(.datetime-disabled).datetime-focus .datetime-bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-positive-focus)}.datetime-input-container.datetime-valid:not(.datetime-disabled).datetime-focus .datetime-bg-icon:hover{background-color:#fff}.datetime-input-container.datetime-valid:not(.datetime-disabled).datetime-focus .datetime-icon{color:var(--color-icon-inverse)}.datetime-input-container.datetime-valid:not(.datetime-disabled).datetime-focus .datetime-icon:hover{color:#fff}.datetime-input-container.datetime-valid:not(.datetime-disabled).datetime-focus .datetime-separator{background-color:var(--color-icon-inverse)}.datetime-input-container.datetime-valid:not(.datetime-disabled).datetime-focus .datetime-cancel-button{opacity:1;pointer-events:auto}.datetime-input-container.datetime-valid:not(.datetime-disabled) .datetime-separator{background-color:var(--color-icon-positive)}.datetime-input-container.datetime-valid:not(.datetime-disabled) .datetime-dropdown-icon,.datetime-input-container.datetime-valid:not(.datetime-disabled) .datetime-icon{color:var(--color-icon-positive)}.datetime-input-container.datetime-valid:not(.datetime-disabled) .datetime-dropdown-icon:hover,.datetime-input-container.datetime-valid:not(.datetime-disabled) .datetime-icon:hover{color:#0b49d1}.datetime-input-container.datetime-invalid:not(.datetime-disabled){background-color:var(--color-surface-negative)}.datetime-input-container.datetime-invalid:not(.datetime-disabled) .datetime-error-message{opacity:1;transform:translateY(0)}.datetime-input-container.datetime-invalid:not(.datetime-disabled):hover{background-color:var(--color-surface-negative-hover)}.datetime-input-container.datetime-invalid:not(.datetime-disabled):hover .datetime-bg-icon{background-color:var(--color-icon-negative);color:var(--color-surface-negative-hover)}.datetime-input-container.datetime-invalid:not(.datetime-disabled):hover .datetime-bg-icon:hover{background-color:#c20c0c}.datetime-input-container.datetime-invalid:not(.datetime-disabled):hover.datetime-has-text .datetime-cancel-button{opacity:1;pointer-events:auto}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-text,.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-date{background-color:var(--color-surface-negative-focus)}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-text .datetime-bg-icon,.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-date .datetime-bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-negative-focus)}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-text .datetime-bg-icon:hover,.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-date .datetime-bg-icon:hover{background-color:#fff}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-text .datetime-icon,.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-date .datetime-icon{color:var(--color-icon-inverse)}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-text .datetime-icon:hover,.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-date .datetime-icon:hover{color:#fff}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-text .datetime-separator,.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-date .datetime-separator{background-color:var(--color-icon-inverse)}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-text .datetime-cancel-button,.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-date .datetime-cancel-button{opacity:1;pointer-events:auto}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus:not(.datetime-has-date){background-color:var(--color-surface-neutral-focus)}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus:not(.datetime-has-date) .datetime-error-message{opacity:0}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus:not(.datetime-has-date) .datetime-bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-neutral-focus)}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus:not(.datetime-has-date) .datetime-bg-icon:hover{background-color:#fff}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus:not(.datetime-has-date) .datetime-separator{background-color:var(--color-icon-inverse)}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus:not(.datetime-has-date) .datetime-icon{color:var(--color-icon-inverse)}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus:not(.datetime-has-date) .datetime-icon:hover{color:#fff}.datetime-input-container.datetime-invalid:not(.datetime-disabled) .datetime-separator{background-color:var(--color-icon-negative)}.datetime-input-container.datetime-invalid:not(.datetime-disabled) .datetime-dropdown-icon,.datetime-input-container.datetime-invalid:not(.datetime-disabled) .datetime-icon{color:var(--color-icon-negative)}.datetime-input-container.datetime-invalid:not(.datetime-disabled) .datetime-dropdown-icon:hover,.datetime-input-container.datetime-invalid:not(.datetime-disabled) .datetime-icon:hover{color:#c20c0c}.datetime-input-container.datetime-disabled{cursor:default;pointer-events:none}.datetime-input-container.datetime-disabled .datetime-icon,.datetime-input-container.datetime-disabled .datetime-dropdown-icon{cursor:default}.datetime-input-container.datetime-disabled:not(.datetime-in-table){background-color:var(--color-surface-disable)}.datetime-input-container.datetime-disabled.datetime-in-table{background-color:transparent}.datetime-input-container.datetime-disabled .datetime-label{color:var(--color-text-subtle)!important}.datetime-input-container.datetime-disabled .datetime-icon{color:var(--color-icon-disable)}.datetime-input-container.datetime-disabled.datetime-has-text .datetime-label{color:var(--color-text-neutral)!important}.datetime-input-container.datetime-disabled.datetime-has-text .datetime-icon{color:var(--color-icon-neutral)}.datetime-input-container.datetime-disabled .datetime-separator{background-color:var(--color-icon-neutral)}.datetime-input-container.datetime-disabled .datetime-input{color:var(--color-text)!important}.datetime-input-container.datetime-required .datetime-label:after{content:\" *\";color:var(--color-text-negative)}.datetime-icon-container{display:flex;align-items:center;justify-content:center;gap:4px;width:max-content}.datetime-icon-container.hidden{display:none}.datetime-icon-container .datetime-icon{order:1;cursor:pointer}.datetime-icon-container .datetime-separator{height:14px;width:1px;border-radius:2px;background-color:var(--color-icon-neutral);transition:background-color .1s ease-in-out;opacity:40%;order:2;margin-right:4px}.datetime-icon{width:18px;height:18px;display:flex;align-items:center;justify-content:center;color:var(--color-icon-neutral);transition:color .1s ease-in-out,opacity .1s ease-in-out,transform .15s ease-in-out}.datetime-label{position:absolute;display:flex;gap:4px;left:27px;font-size:14px;line-height:18px;font-weight:400;pointer-events:none;padding:.25rem 6px;color:var(--color-text);transition:transform .1s ease-in-out,font-weight .1s ease-in-out,color .1s ease-in-out,font-size .1s ease-in-out,opacity .1s ease-in-out;transform:translateY(0);-webkit-user-select:none;user-select:none}.datetime-icon-hidden .datetime-label{left:0}.datetime-bg-icon{background-color:var(--color-icon-neutral);color:var(--color-surface-neutral);border-radius:1px;height:18px;width:18px;padding:0;display:grid;place-items:center;transition:background-color .1s ease-in-out,color .1s ease-in-out,opacity .1s ease-in-out,transform .1s ease-in-out;transform-box:border-box;transform-origin:center;will-change:transform}.datetime-bg-icon:focus-visible{outline:none}.datetime-bg-icon svg{transition:transform .1s ease-in-out}.datetime-bg-icon:hover{transform:scale(1.2222222222)}.datetime-bg-icon:hover svg{transform:scale(.8181818182)}.datetime-bg-icon:active{transform:scale(1)}.datetime-cancel-button{position:absolute;right:26px;top:4px;opacity:0;transition:opacity .1s ease-in-out;pointer-events:none}.datetime-dropdown-icon{position:absolute;right:4px;top:4px;transform:rotateX(0);cursor:pointer}.datetime-size-22{height:22px!important;padding-left:0}.datetime-size-22 .datetime-bg-icon{height:14px!important;width:14px!important;padding:2px!important;right:22px!important}.datetime-size-22 .datetime-icon-container{height:22px!important;padding-top:2px;padding-bottom:2px;padding-left:4px!important}.datetime-size-22 .datetime-input{padding-top:2px;padding-bottom:2px}.datetime-size-22 .datetime-label{padding-top:2px;padding-bottom:2px;padding-left:0!important}.datetime-size-22 .datetime-icon{height:14px!important;width:14px!important}.datetime-size-22.datetime-has-text .datetime-label,.datetime-size-22.datetime-focus .datetime-label{transform:translateY(-18px)!important}.datetime-error-message{position:absolute;bottom:-16px;right:6px;font-size:11px;font-weight:600;opacity:0;-webkit-user-select:none;user-select:none;transition:opacity .1s ease-in-out,transform .1s ease-in-out;color:var(--color-text-negative);transform:translateY(-10px);pointer-events:none}.datetime-input-listener{opacity:0;pointer-events:none;position:absolute;inset:0;font-size:16px}.datetime-billing .datetime-separator{order:0;margin-right:0;margin-left:4px}.datetime-billing .datetime-cancel-button{right:4px}.datetime-billing .datetime-label{left:0;font-weight:600;font-size:11px;color:var(--color-text-heading)!important}.datetime-billing .datetime-icon-container{order:2}.datetime-billing .datetime-input{margin-left:auto;width:max-content}.datetime-billing .datetime-error-message{bottom:4px!important;right:32px!important;transform:translateY(0)!important}.datetime-billing.datetime-focus .datetime-error-message,.datetime-billing.datetime-has-text .datetime-error-message{opacity:0!important}.datetime-billing .datetime-dropdown-icon,.datetime-billing:hover .datetime-icon,.datetime-billing.datetime-focus .datetime-icon{opacity:0}.datetime-billing:hover .datetime-dropdown-icon,.datetime-billing.datetime-focus .datetime-dropdown-icon{opacity:1}.datetime-billing.datetime-has-text .datetime-dropdown-icon{opacity:0!important;pointer-events:none!important}.datetime-billing.datetime-has-text:hover .datetime-icon-container,.datetime-billing.datetime-has-text.datetime-focus .datetime-icon-container{pointer-events:none!important}.datetime-billing.datetime-has-text:hover .datetime-icon-container .datetime-icon,.datetime-billing.datetime-has-text.datetime-focus .datetime-icon-container .datetime-icon{opacity:0!important}.datetime-input{font-size:14px;line-height:18px;font-weight:400;width:100%;opacity:0;pointer-events:none;transition:color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95);-webkit-user-select:none;user-select:none}.datetime-input .datetime-input-separator{background-color:transparent;transition:color .1s cubic-bezier(.46,.03,.51,.95),background-color .1s cubic-bezier(.46,.03,.51,.95)}.datetime-input .datetime-input-part{position:relative;background-color:transparent;transition:color .1s cubic-bezier(.46,.03,.51,.95),background-color .1s cubic-bezier(.46,.03,.51,.95)}.datetime-input .datetime-input-part.time-am-pm{margin-left:4px}.datetime-input .datetime-input-part:after{content:\"\";inset:0 -3px;position:absolute}.datetime-input.selected .datetime-input-part,.datetime-input.selected .datetime-input-separator{background-color:#ffffff4d}.datetime-input.selected .time-am-pm{margin-left:0!important;padding-left:4px!important}\n"], dependencies: [{ kind: "ngmodule", type:
8762
9112
  // Modules
8763
9113
  CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: AngularSvgIconModule }, { kind: "component", type: i1$2.SvgIconComponent, selector: "svg-icon", inputs: ["src", "name", "stretch", "applyClass", "svgClass", "class", "viewBox", "svgAriaLabel", "onSVGLoaded", "svgStyle"] }, { kind: "ngmodule", type: NgbModule }, { kind: "directive", type: i2.NgbPopover, selector: "[ngbPopover]", inputs: ["animation", "autoClose", "ngbPopover", "popoverTitle", "placement", "popperOptions", "triggers", "positionTarget", "container", "disablePopover", "popoverClass", "popoverContext", "openDelay", "closeDelay"], outputs: ["shown", "hidden"], exportAs: ["ngbPopover"] }, { kind: "directive", type: i2.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type:
8764
9114
  // Components
@@ -8779,7 +9129,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImpo
8779
9129
  CaCustomDatetimePickersComponent,
8780
9130
  // Pipes
8781
9131
  ErrorMessagePipe,
8782
- ], template: "@let inTable = inputConfig?.inTable; @let inverse = inputConfig?.inverse;\n@let size = inputConfig?.size;\n@let invalid =\n (getSuperControl?.invalid &&\n (getSuperControl?.touched || getSuperControl?.dirty)) ||\n shouldShowInternalValidationError();\n@let valid = getSuperControl?.valid && getSuperControl?.value;\n@let disabled = getSuperControl?.disabled || inputConfig?.isDisabled;\n@let isBilling = inputConfig?.isBilling;\n@let showClear = !disabled && !inputConfig.hideClear;\n@let hasFloatingError = inTable && invalid;\n\n<div\n [id]=\"id\"\n class=\"datetime-input-container\"\n [class]=\"{\n 'datetime-valid': valid && !forceInvalidStyling,\n 'datetime-invalid': invalid || forceInvalidStyling,\n 'datetime-disabled': disabled,\n 'datetime-focus': isInputFocused(),\n 'datetime-has-text': !!currentValue(),\n 'datetime-has-date': hasDate(),\n 'datetime-required': isRequired && !disabled,\n 'datetime-in-table': inTable,\n 'datetime-inverse': inverse,\n 'datetime-billing': isBilling,\n 'datetime-popover-open': mainPopover.isOpen(),\n 'datetime-size-22': size === 22,\n 'datetime-icon-hidden': inputConfig.isIconHidden,\n 'force-invalid': forceInvalidStyling,\n }\"\n #mainPopover=\"ngbPopover\"\n [ngbPopover]=\"!disabled ? dateTimePopover : null\"\n [placement]=\"['bottom-start', 'top-start']\"\n [triggers]=\"'manual'\"\n [popoverClass]=\"'datetimepopovermain'\"\n [autoClose]=\"'outside'\"\n [container]=\"'body'\"\n (mouseenter)=\"hasFloatingError && errorTooltipContainer.open()\"\n (mouseleave)=\"hasFloatingError && errorTooltipContainer.close()\"\n (pointerdown)=\"focusInput($event)\"\n (mousedown)=\"$event.preventDefault()\"\n (dblclick)=\"onInputSelect($event)\"\n>\n <div class=\"datetime-label\">\n {{ inputConfig.label }}\n </div>\n\n <input\n #inputListener\n [id]=\"id\"\n [value]=\"currentValue() ?? ''\"\n [tabindex]=\"disabled ? '-1' : '0'\"\n (focus)=\"onInputFocus()\"\n (blur)=\"onInputBlur()\"\n (keydown)=\"onKeyDown($event)\"\n (input)=\"onInputChange($event)\"\n (paste)=\"onInputPaste($event)\"\n class=\"datetime-input-listener\"\n #errorTooltipContainer=\"ngbTooltip\"\n [disabled]=\"disabled\"\n [ngbTooltip]=\"hasFloatingError ? errorTooltip : null\"\n [container]=\"'body'\"\n [placement]=\"'bottom'\"\n [triggers]=\"'manual'\"\n [disableTooltip]=\"isInputFocused()\"\n tooltipClass=\"tooltip tooltip-bg-red-500 input-tooltip\"\n />\n\n @if (!inputConfig.isIconHidden) {\n <div\n #iconContainer\n class=\"datetime-icon-container\"\n (click)=\"togglePopover()\"\n >\n <svg-icon\n class=\"datetime-icon\"\n [name]=\"\n inputConfig.placeholderIcon === 'date' ? 'cai-date' : 'cai-time'\n \"\n ></svg-icon>\n <div class=\"datetime-separator\"></div>\n </div>\n }\n\n <div class=\"datetime-input\" [class.selected]=\"isInputSelected()\">\n @if (isDatePicker()) {\n <span\n class=\"datetime-input-part\"\n [class.highlighted]=\"highlightedPart() === 0\"\n [class.filled]=\"displayedValues().month !== 'MM'\"\n (pointerdown)=\"highlightPart($event, 0)\"\n >{{ displayedValues().month }}</span\n >\n <span class=\"datetime-input-separator\">/</span>\n <span\n class=\"datetime-input-part\"\n [class.highlighted]=\"highlightedPart() === 1\"\n [class.filled]=\"displayedValues().day !== 'DD'\"\n (pointerdown)=\"highlightPart($event, 1)\"\n >{{ displayedValues().day }}</span\n >\n <span class=\"datetime-input-separator\">/</span>\n <span\n class=\"datetime-input-part\"\n [class.highlighted]=\"highlightedPart() === 2\"\n [class.filled]=\"displayedValues().year !== 'YY'\"\n (pointerdown)=\"highlightPart($event, 2)\"\n >{{ displayedValues().year }}</span\n >\n } @else {\n <span\n class=\"datetime-input-part\"\n [class.highlighted]=\"highlightedPart() === 0\"\n [class.filled]=\"displayedValues().hour !== 'HH'\"\n (pointerdown)=\"highlightPart($event, 0)\"\n >{{ displayedValues().hour }}</span\n >\n <span class=\"datetime-input-separator\">:</span>\n <span\n class=\"datetime-input-part\"\n [class.highlighted]=\"highlightedPart() === 1\"\n [class.filled]=\"displayedValues().minute !== 'MM'\"\n (pointerdown)=\"highlightPart($event, 1)\"\n >{{ displayedValues().minute }}</span\n >\n <span\n class=\"datetime-input-part time-am-pm\"\n [class.highlighted]=\"highlightedPart() === 2\"\n (pointerdown)=\"highlightPart($event, 2)\"\n >{{ displayedValues().ampm }}</span\n >\n }\n </div>\n\n @if (!disabled) {\n @let tooltipClass =\n inverse\n ? \"tooltip input-tooltip tooltip-bg-white-700 tooltip-text-black-500\"\n : \"tooltip input-tooltip\";\n\n @if (showClear) {\n <button\n class=\"datetime-cancel-button\"\n type=\"button\"\n tabindex=\"-1\"\n ngbTooltip=\"Clear\"\n [openDelay]=\"600\"\n [tooltipClass]=\"tooltipClass\"\n [placement]=\"'top'\"\n [container]=\"'body'\"\n [autoClose]=\"true\"\n #clearButtonTooltip=\"ngbTooltip\"\n (click)=\"clearInput($event)\"\n (pointerdown)=\"closeClearButtonTooltip()\"\n (mouseleave)=\"closeClearButtonTooltip()\"\n >\n <svg-icon class=\"datetime-bg-icon\" name=\"cai-cancel\"></svg-icon>\n </button>\n }\n <svg-icon\n #dropdownIcon\n class=\"datetime-icon datetime-dropdown-icon\"\n (click)=\"togglePopover()\"\n name=\"cai-arrow-secondary-down\"\n ></svg-icon>\n }\n <!-- Error Message -->\n @if (!inTable || isBilling) {\n <div class=\"datetime-error-message\">\n {{\n shouldShowInternalValidationError()\n ? internalValidationErrorMessage()\n : invalid\n ? (getSuperControl?.errors\n | errorMessage: inputConfig.customErrors)[0]\n : \"\"\n }}\n </div>\n }\n</div>\n\n<!-- Popover for DateTime Pickers -->\n<ng-template #dateTimePopover let-data=\"data\">\n <div\n class=\"datetime-dropdown-holder\"\n [class.datetime-has-stroke]=\"inputConfig.hasStroke\"\n >\n <cai-custom-datetime-pickers\n [calendarType]=\"isDatePicker() ? 'date' : 'time'\"\n [inputConfig]=\"inputConfig\"\n [placeholder]=\"'MM/DD/YY'\"\n [dateTime]=\"dateTime()\"\n (closePopover)=\"onPopoverDateChanged($event)\"\n ></cai-custom-datetime-pickers>\n </div>\n</ng-template>\n\n<ng-template #errorTooltip>\n @if (inTable && invalid && !isInputFocused()) {\n {{\n shouldShowInternalValidationError()\n ? internalValidationErrorMessage()\n : (getSuperControl?.errors | errorMessage: inputConfig.customErrors)[0]\n }}\n }\n</ng-template>\n", styles: ["input:-webkit-autofill,input:-webkit-autofill:hover,input:-webkit-autofill:focus,input:-webkit-autofill:active{transition:background-color 5000s ease-in-out 0s!important}input:-webkit-autofill:focus{-webkit-text-fill-color:#ffffff!important}input:-moz-autofill,input:-moz-autofill-preview{filter:none}*,*:before,*:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}p,ul,ol,dl,blockquote,figure,pre{margin:0}button,input,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button{background:none;border:none;padding:0}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle;max-width:100%;height:auto}ul,ol{padding-left:1.5rem;list-style-position:outside}a{color:inherit;text-decoration:inherit}table{border-collapse:collapse;border-spacing:0}:focus:not(:focus-visible){outline:none}.datetime-input-container{--color-text: #2f2f2f;--color-text-negative: #df3c3c;--color-text-heading: #424242;--color-text-subtle: #919191;--color-text-inverse: #ffffff;--color-icon-neutral: #919191;--color-icon-negative: #e66767;--color-icon-positive: #6692f1;--color-icon-inverse: rgba(255, 255, 255, .6980392157);--color-icon-disable: #cccccc;--color-surface-neutral: #eeeeee;--color-surface-neutral-hover: #dadada;--color-surface-neutral-focus: #1d1d1d;--color-surface-positive: #e9effd;--color-surface-positive-hover: #bed0f9;--color-surface-positive-focus: #0b49d1;--color-surface-negative: #fbe9e9;--color-surface-negative-hover: #f4bebe;--color-surface-negative-focus: #c20c0c;--color-surface-disable: #f7f7f7;padding:4px 4px 4px 6px;border-radius:2px;position:relative;display:flex;align-items:center;touch-action:manipulation;background-color:var(--color-surface-neutral);transition:background-color .1s cubic-bezier(.46,.03,.51,.95);cursor:text;width:100%;height:26px}.datetime-input-container.datetime-inverse{--color-text: #ffffff;--color-text-negative: #ed9292;--color-text-heading: #ffffff;--color-text-inverse: #2f2f2f;--color-icon-neutral: #aaaaaa;--color-icon-negative: #ed9292;--color-icon-positive: #92b1f5;--color-icon-disable: #6c6c6c;--color-surface-neutral: #424242;--color-surface-neutral-hover: #6c6c6c;--color-surface-neutral-focus: #dadada;--color-surface-positive: rgba(59, 115, 237, .2);--color-surface-positive-hover: #2f519a;--color-surface-positive-focus: #0b49d1;--color-surface-negative: rgba(223, 60, 60, .2);--color-surface-negative-hover: #923030;--color-surface-negative-focus: #c20c0c;--color-surface-disable: rgba(66, 66, 66, .4)}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-icon{color:var(--color-icon-neutral)!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-separator{background-color:var(--color-icon-neutral)!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-bg-icon{background-color:var(--color-icon-neutral)!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus:hover .datetime-bg-icon:hover{background-color:#424242!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus:hover .datetime-dropdown-icon:hover,.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus:hover .datetime-icon:hover{color:#424242!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-input{color:var(--color-text-inverse)!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-input.selected .datetime-input-part{background-color:#91919133}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-input.selected .datetime-input-separator{background-color:#91919133}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-input .datetime-input-part{color:#0000004d!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-input .datetime-input-part.filled{color:#000!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-input .datetime-input-part.highlighted{background-color:#91919133;color:#000!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-input .datetime-input-separator{color:#0000004d!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date):hover .datetime-bg-icon:hover{background-color:#fff}.datetime-input-container.datetime-inverse:not(.datetime-has-date):hover .datetime-dropdown-icon:hover,.datetime-input-container.datetime-inverse:not(.datetime-has-date):hover .datetime-icon:hover{color:#fff}.datetime-input-container.datetime-inverse.datetime-valid .datetime-input,.datetime-input-container.datetime-inverse.datetime-invalid .datetime-input{color:var(--color-text)!important}.datetime-input-container.datetime-inverse.datetime-valid.datetime-focus .datetime-input,.datetime-input-container.datetime-inverse.datetime-invalid.datetime-focus .datetime-input{color:var(--color-text)}.datetime-input-container.datetime-inverse.datetime-valid:hover .datetime-bg-icon:hover,.datetime-input-container.datetime-inverse.datetime-invalid:hover .datetime-bg-icon:hover{background-color:#fff!important}.datetime-input-container.datetime-inverse.datetime-valid:hover .datetime-dropdown-icon:hover,.datetime-input-container.datetime-inverse.datetime-valid:hover .datetime-icon:hover,.datetime-input-container.datetime-inverse.datetime-invalid:hover .datetime-dropdown-icon:hover,.datetime-input-container.datetime-inverse.datetime-invalid:hover .datetime-icon:hover{color:#fff!important}.datetime-input-container.datetime-in-table{--color-surface-neutral: transparent;--color-surface-negative: transparent;--color-surface-positive: transparent}.datetime-input-container.datetime-in-table .datetime-dropdown-icon{opacity:0}.datetime-input-container.datetime-in-table.datetime-invalid:not(.datetime-focus):not(:hover):not(.force-invalid) .datetime-input,.datetime-input-container.datetime-in-table.datetime-invalid:not(.datetime-focus):not(:hover):not(.force-invalid) .datetime-label{color:var(--color-text-negative)}.datetime-input-container.datetime-in-table:hover .datetime-dropdown-icon,.datetime-input-container.datetime-in-table.datetime-focus .datetime-dropdown-icon{opacity:1}.datetime-input-container:hover{background-color:var(--color-surface-neutral-hover)}.datetime-input-container:hover .datetime-bg-icon{color:var(--color-surface-neutral-hover)}.datetime-input-container.datetime-focus{background-color:var(--color-surface-neutral-focus)}.datetime-input-container.datetime-focus.datetime-in-table:not(.datetime-billing) .datetime-label{opacity:0}.datetime-input-container.datetime-focus:not(.datetime-in-table):not(.datetime-billing) .datetime-label{transform:translateY(-20px);font-weight:600;font-size:11px;color:var(--color-text-heading)!important}.datetime-input-container.datetime-focus.datetime-billing .datetime-label{color:#fff!important}.datetime-input-container.datetime-focus .datetime-bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-neutral-focus)}.datetime-input-container.datetime-focus .datetime-bg-icon:hover{background-color:#fff}.datetime-input-container.datetime-focus .datetime-icon{color:var(--color-icon-inverse)}.datetime-input-container.datetime-focus .datetime-icon:hover{color:#fff}.datetime-input-container.datetime-focus .datetime-separator{background-color:var(--color-icon-inverse)}.datetime-input-container.datetime-focus .datetime-input{color:var(--color-text-inverse);opacity:1;pointer-events:auto}.datetime-input-container.datetime-focus .datetime-input .datetime-input-part{height:18px;color:#ffffffb3}.datetime-input-container.datetime-focus .datetime-input .datetime-input-part.filled{color:#fff}.datetime-input-container.datetime-focus .datetime-input .datetime-input-part.highlighted{background-color:#ffffff4d;color:#fff}.datetime-input-container.datetime-focus .datetime-input .datetime-input-separator{color:#ffffffb3}.datetime-input-container.datetime-popover-open .datetime-dropdown-icon{transform:rotateX(180deg)}.datetime-input-container.datetime-has-text .datetime-input{opacity:1;pointer-events:auto!important}.datetime-input-container.datetime-has-text.datetime-disabled .datetime-input{pointer-events:none!important}.datetime-input-container.datetime-has-text:not(.datetime-in-table):not(.datetime-billing) .datetime-label{transform:translateY(-20px);font-weight:600;font-size:11px;color:var(--color-text-heading)!important}.datetime-input-container.datetime-has-text.datetime-in-table:not(.datetime-billing) .datetime-label{opacity:0}.datetime-input-container.datetime-valid:not(.datetime-disabled){background-color:var(--color-surface-positive)}.datetime-input-container.datetime-valid:not(.datetime-disabled):hover{background-color:var(--color-surface-positive-hover)}.datetime-input-container.datetime-valid:not(.datetime-disabled):hover .datetime-bg-icon{background-color:var(--color-icon-positive);color:var(--color-surface-positive-hover)}.datetime-input-container.datetime-valid:not(.datetime-disabled):hover .datetime-bg-icon:hover{background-color:#0b49d1}.datetime-input-container.datetime-valid:not(.datetime-disabled):hover .datetime-cancel-button{opacity:1;pointer-events:auto}.datetime-input-container.datetime-valid:not(.datetime-disabled).datetime-focus{background-color:var(--color-surface-positive-focus)}.datetime-input-container.datetime-valid:not(.datetime-disabled).datetime-focus .datetime-bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-positive-focus)}.datetime-input-container.datetime-valid:not(.datetime-disabled).datetime-focus .datetime-bg-icon:hover{background-color:#fff}.datetime-input-container.datetime-valid:not(.datetime-disabled).datetime-focus .datetime-icon{color:var(--color-icon-inverse)}.datetime-input-container.datetime-valid:not(.datetime-disabled).datetime-focus .datetime-icon:hover{color:#fff}.datetime-input-container.datetime-valid:not(.datetime-disabled).datetime-focus .datetime-separator{background-color:var(--color-icon-inverse)}.datetime-input-container.datetime-valid:not(.datetime-disabled).datetime-focus .datetime-cancel-button{opacity:1;pointer-events:auto}.datetime-input-container.datetime-valid:not(.datetime-disabled) .datetime-separator{background-color:var(--color-icon-positive)}.datetime-input-container.datetime-valid:not(.datetime-disabled) .datetime-dropdown-icon,.datetime-input-container.datetime-valid:not(.datetime-disabled) .datetime-icon{color:var(--color-icon-positive)}.datetime-input-container.datetime-valid:not(.datetime-disabled) .datetime-dropdown-icon:hover,.datetime-input-container.datetime-valid:not(.datetime-disabled) .datetime-icon:hover{color:#0b49d1}.datetime-input-container.datetime-invalid:not(.datetime-disabled){background-color:var(--color-surface-negative)}.datetime-input-container.datetime-invalid:not(.datetime-disabled) .datetime-error-message{opacity:1;transform:translateY(0)}.datetime-input-container.datetime-invalid:not(.datetime-disabled):hover{background-color:var(--color-surface-negative-hover)}.datetime-input-container.datetime-invalid:not(.datetime-disabled):hover .datetime-bg-icon{background-color:var(--color-icon-negative);color:var(--color-surface-negative-hover)}.datetime-input-container.datetime-invalid:not(.datetime-disabled):hover .datetime-bg-icon:hover{background-color:#c20c0c}.datetime-input-container.datetime-invalid:not(.datetime-disabled):hover.datetime-has-text .datetime-cancel-button{opacity:1;pointer-events:auto}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-text,.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-date{background-color:var(--color-surface-negative-focus)}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-text .datetime-bg-icon,.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-date .datetime-bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-negative-focus)}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-text .datetime-bg-icon:hover,.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-date .datetime-bg-icon:hover{background-color:#fff}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-text .datetime-icon,.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-date .datetime-icon{color:var(--color-icon-inverse)}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-text .datetime-icon:hover,.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-date .datetime-icon:hover{color:#fff}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-text .datetime-separator,.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-date .datetime-separator{background-color:var(--color-icon-inverse)}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-text .datetime-cancel-button,.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-date .datetime-cancel-button{opacity:1;pointer-events:auto}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus:not(.datetime-has-date){background-color:var(--color-surface-neutral-focus)}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus:not(.datetime-has-date) .datetime-error-message{opacity:0}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus:not(.datetime-has-date) .datetime-bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-neutral-focus)}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus:not(.datetime-has-date) .datetime-bg-icon:hover{background-color:#fff}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus:not(.datetime-has-date) .datetime-separator{background-color:var(--color-icon-inverse)}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus:not(.datetime-has-date) .datetime-icon{color:var(--color-icon-inverse)}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus:not(.datetime-has-date) .datetime-icon:hover{color:#fff}.datetime-input-container.datetime-invalid:not(.datetime-disabled) .datetime-separator{background-color:var(--color-icon-negative)}.datetime-input-container.datetime-invalid:not(.datetime-disabled) .datetime-dropdown-icon,.datetime-input-container.datetime-invalid:not(.datetime-disabled) .datetime-icon{color:var(--color-icon-negative)}.datetime-input-container.datetime-invalid:not(.datetime-disabled) .datetime-dropdown-icon:hover,.datetime-input-container.datetime-invalid:not(.datetime-disabled) .datetime-icon:hover{color:#c20c0c}.datetime-input-container.datetime-disabled{cursor:default;pointer-events:none}.datetime-input-container.datetime-disabled .datetime-icon,.datetime-input-container.datetime-disabled .datetime-dropdown-icon{cursor:default}.datetime-input-container.datetime-disabled:not(.datetime-in-table){background-color:var(--color-surface-disable)}.datetime-input-container.datetime-disabled.datetime-in-table{background-color:transparent}.datetime-input-container.datetime-disabled .datetime-label{color:var(--color-text-subtle)!important}.datetime-input-container.datetime-disabled .datetime-icon{color:var(--color-icon-disable)}.datetime-input-container.datetime-disabled.datetime-has-text .datetime-label{color:var(--color-text-neutral)!important}.datetime-input-container.datetime-disabled.datetime-has-text .datetime-icon{color:var(--color-icon-neutral)}.datetime-input-container.datetime-disabled .datetime-separator{background-color:var(--color-icon-neutral)}.datetime-input-container.datetime-disabled .datetime-input{color:var(--color-text)!important}.datetime-input-container.datetime-required .datetime-label:after{content:\" *\";color:var(--color-text-negative)}.datetime-icon-container{display:flex;align-items:center;justify-content:center;gap:4px;width:max-content}.datetime-icon-container.hidden{display:none}.datetime-icon-container .datetime-icon{order:1;cursor:pointer}.datetime-icon-container .datetime-separator{height:14px;width:1px;border-radius:2px;background-color:var(--color-icon-neutral);transition:background-color .1s ease-in-out;opacity:40%;order:2;margin-right:4px}.datetime-icon{width:18px;height:18px;display:flex;align-items:center;justify-content:center;color:var(--color-icon-neutral);transition:color .1s ease-in-out,opacity .1s ease-in-out,transform .15s ease-in-out}.datetime-label{position:absolute;display:flex;gap:4px;left:27px;font-size:14px;line-height:18px;font-weight:400;pointer-events:none;padding:.25rem 6px;color:var(--color-text);transition:transform .1s ease-in-out,font-weight .1s ease-in-out,color .1s ease-in-out,font-size .1s ease-in-out,opacity .1s ease-in-out;transform:translateY(0);-webkit-user-select:none;user-select:none}.datetime-icon-hidden .datetime-label{left:0}.datetime-bg-icon{background-color:var(--color-icon-neutral);color:var(--color-surface-neutral);border-radius:1px;height:18px;width:18px;padding:0;display:grid;place-items:center;transition:background-color .1s ease-in-out,color .1s ease-in-out,opacity .1s ease-in-out,transform .1s ease-in-out;transform-box:border-box;transform-origin:center;will-change:transform}.datetime-bg-icon:focus-visible{outline:none}.datetime-bg-icon svg{transition:transform .1s ease-in-out}.datetime-bg-icon:hover{transform:scale(1.2222222222)}.datetime-bg-icon:hover svg{transform:scale(.8181818182)}.datetime-bg-icon:active{transform:scale(1)}.datetime-cancel-button{position:absolute;right:26px;top:4px;opacity:0;transition:opacity .1s ease-in-out;pointer-events:none}.datetime-dropdown-icon{position:absolute;right:4px;top:4px;transform:rotateX(0);cursor:pointer}.datetime-size-22{height:22px!important;padding-left:0}.datetime-size-22 .datetime-bg-icon{height:14px!important;width:14px!important;padding:2px!important;right:22px!important}.datetime-size-22 .datetime-icon-container{height:22px!important;padding-top:2px;padding-bottom:2px;padding-left:4px!important}.datetime-size-22 .datetime-input{padding-top:2px;padding-bottom:2px}.datetime-size-22 .datetime-label{padding-top:2px;padding-bottom:2px;padding-left:0!important}.datetime-size-22 .datetime-icon{height:14px!important;width:14px!important}.datetime-size-22.datetime-has-text .datetime-label,.datetime-size-22.datetime-focus .datetime-label{transform:translateY(-18px)!important}.datetime-error-message{position:absolute;bottom:-16px;right:6px;font-size:11px;font-weight:600;opacity:0;-webkit-user-select:none;user-select:none;transition:opacity .1s ease-in-out,transform .1s ease-in-out;color:var(--color-text-negative);transform:translateY(-10px);pointer-events:none}.datetime-input-listener{opacity:0;pointer-events:none;position:absolute;inset:0;font-size:16px}.datetime-billing .datetime-separator{order:0;margin-right:0;margin-left:4px}.datetime-billing .datetime-cancel-button{right:4px}.datetime-billing .datetime-label{left:0;font-weight:600;font-size:11px;color:var(--color-text-heading)!important}.datetime-billing .datetime-icon-container{order:2}.datetime-billing .datetime-input{margin-left:auto;width:max-content}.datetime-billing .datetime-error-message{bottom:4px!important;right:32px!important;transform:translateY(0)!important}.datetime-billing.datetime-focus .datetime-error-message,.datetime-billing.datetime-has-text .datetime-error-message{opacity:0!important}.datetime-billing .datetime-dropdown-icon,.datetime-billing:hover .datetime-icon,.datetime-billing.datetime-focus .datetime-icon{opacity:0}.datetime-billing:hover .datetime-dropdown-icon,.datetime-billing.datetime-focus .datetime-dropdown-icon{opacity:1}.datetime-billing.datetime-has-text .datetime-dropdown-icon{opacity:0!important;pointer-events:none!important}.datetime-billing.datetime-has-text:hover .datetime-icon-container,.datetime-billing.datetime-has-text.datetime-focus .datetime-icon-container{pointer-events:none!important}.datetime-billing.datetime-has-text:hover .datetime-icon-container .datetime-icon,.datetime-billing.datetime-has-text.datetime-focus .datetime-icon-container .datetime-icon{opacity:0!important}.datetime-input{font-size:14px;line-height:18px;font-weight:400;width:100%;opacity:0;pointer-events:none;transition:color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95);-webkit-user-select:none;user-select:none}.datetime-input .datetime-input-separator{background-color:transparent;transition:color .1s cubic-bezier(.46,.03,.51,.95),background-color .1s cubic-bezier(.46,.03,.51,.95)}.datetime-input .datetime-input-part{position:relative;background-color:transparent;transition:color .1s cubic-bezier(.46,.03,.51,.95),background-color .1s cubic-bezier(.46,.03,.51,.95)}.datetime-input .datetime-input-part.time-am-pm{margin-left:4px}.datetime-input .datetime-input-part:after{content:\"\";inset:0 -3px;position:absolute}.datetime-input.selected .datetime-input-part,.datetime-input.selected .datetime-input-separator{background-color:#ffffff4d}.datetime-input.selected .time-am-pm{margin-left:0!important;padding-left:4px!important}\n"] }]
9132
+ ], template: "@let inTable = inputConfig?.inTable; @let inverse = inputConfig?.inverse;\n@let size = inputConfig?.size;\n@let invalid =\n (getSuperControl?.invalid &&\n (getSuperControl?.touched || getSuperControl?.dirty)) ||\n shouldShowInternalValidationError();\n@let valid = getSuperControl?.valid && getSuperControl?.value;\n@let disabled = getSuperControl?.disabled || inputConfig?.isDisabled;\n@let isBilling = inputConfig?.isBilling;\n@let showClear = !disabled && !inputConfig.hideClear;\n@let hasFloatingError = inTable && invalid;\n\n<div\n [id]=\"id\"\n class=\"datetime-input-container\"\n [class]=\"{\n 'datetime-valid': valid && !forceInvalidStyling,\n 'datetime-invalid': invalid || forceInvalidStyling,\n 'datetime-disabled': disabled,\n 'datetime-focus': isInputFocused(),\n 'datetime-has-text': !!currentValue(),\n 'datetime-has-date': hasDate(),\n 'datetime-required': isRequired && !disabled,\n 'datetime-in-table': inTable,\n 'datetime-inverse': inverse,\n 'datetime-billing': isBilling,\n 'datetime-popover-open': mainPopover.isOpen(),\n 'datetime-size-22': size === 22,\n 'datetime-icon-hidden': inputConfig.isIconHidden,\n 'force-invalid': forceInvalidStyling,\n }\"\n #mainPopover=\"ngbPopover\"\n [ngbPopover]=\"!disabled ? dateTimePopover : null\"\n [placement]=\"['bottom-start', 'top-start']\"\n [triggers]=\"'manual'\"\n [popoverClass]=\"'datetimepopovermain'\"\n [autoClose]=\"'outside'\"\n [container]=\"'body'\"\n (mouseenter)=\"hasFloatingError && errorTooltipContainer.open()\"\n (mouseleave)=\"hasFloatingError && errorTooltipContainer.close()\"\n (pointerdown)=\"focusInput($event)\"\n (mousedown)=\"$event.preventDefault()\"\n (dblclick)=\"onInputSelect($event)\"\n>\n <div class=\"datetime-label\">\n {{ inputConfig.label }}\n </div>\n\n <input\n #inputListener\n [id]=\"id\"\n [value]=\"currentValue() ?? ''\"\n [tabindex]=\"disabled ? '-1' : '0'\"\n (focus)=\"onInputFocus()\"\n (blur)=\"onInputBlur()\"\n (keydown)=\"onKeyDown($event)\"\n (input)=\"onInputChange($event)\"\n (paste)=\"onInputPaste($event)\"\n class=\"datetime-input-listener\"\n #errorTooltipContainer=\"ngbTooltip\"\n [disabled]=\"disabled\"\n [ngbTooltip]=\"hasFloatingError ? errorTooltip : null\"\n [container]=\"'body'\"\n [placement]=\"'bottom'\"\n [triggers]=\"'manual'\"\n [disableTooltip]=\"isInputFocused()\"\n tooltipClass=\"tooltip tooltip-bg-red-500 input-tooltip\"\n />\n\n @if (!inputConfig.isIconHidden) {\n <div\n #iconContainer\n class=\"datetime-icon-container\"\n (click)=\"togglePopover()\"\n >\n <svg-icon\n class=\"datetime-icon\"\n [name]=\"\n inputConfig.placeholderIcon === 'date' ? 'cai-date' : 'cai-time'\n \"\n ></svg-icon>\n <div class=\"datetime-separator\"></div>\n </div>\n }\n\n <div class=\"datetime-input\" [class.selected]=\"isInputSelected()\">\n @if (isDatePicker()) {\n @for (part of displayedDateParts(); track part.type; let index = $index) {\n @if (index > 0) {\n <span class=\"datetime-input-separator\">{{ dateSeparator() }}</span>\n }\n <span\n class=\"datetime-input-part\"\n [class.highlighted]=\"highlightedPart() === index\"\n [class.filled]=\"part.value !== part.placeholder\"\n (pointerdown)=\"highlightPart($event, index)\"\n >{{ part.value }}</span\n >\n }\n } @else {\n <span\n class=\"datetime-input-part\"\n [class.highlighted]=\"highlightedPart() === 0\"\n [class.filled]=\"displayedValues().hour !== 'HH'\"\n (pointerdown)=\"highlightPart($event, 0)\"\n >{{ displayedValues().hour }}</span\n >\n <span class=\"datetime-input-separator\">:</span>\n <span\n class=\"datetime-input-part\"\n [class.highlighted]=\"highlightedPart() === 1\"\n [class.filled]=\"displayedValues().minute !== 'MM'\"\n (pointerdown)=\"highlightPart($event, 1)\"\n >{{ displayedValues().minute }}</span\n >\n @if (!isTwentyFourHour()) {\n <span\n class=\"datetime-input-part time-am-pm\"\n [class.highlighted]=\"highlightedPart() === 2\"\n (pointerdown)=\"highlightPart($event, 2)\"\n >{{ displayedValues().ampm }}</span\n >\n }\n }\n </div>\n\n @if (!disabled) {\n @let tooltipClass =\n inverse\n ? \"tooltip input-tooltip tooltip-bg-white-700 tooltip-text-black-500\"\n : \"tooltip input-tooltip\";\n\n @if (showClear) {\n <button\n class=\"datetime-cancel-button\"\n type=\"button\"\n tabindex=\"-1\"\n ngbTooltip=\"Clear\"\n [openDelay]=\"600\"\n [tooltipClass]=\"tooltipClass\"\n [placement]=\"'top'\"\n [container]=\"'body'\"\n [autoClose]=\"true\"\n #clearButtonTooltip=\"ngbTooltip\"\n (click)=\"clearInput($event)\"\n (pointerdown)=\"closeClearButtonTooltip()\"\n (mouseleave)=\"closeClearButtonTooltip()\"\n >\n <svg-icon class=\"datetime-bg-icon\" name=\"cai-cancel\"></svg-icon>\n </button>\n }\n <svg-icon\n #dropdownIcon\n class=\"datetime-icon datetime-dropdown-icon\"\n (click)=\"togglePopover()\"\n name=\"cai-arrow-secondary-down\"\n ></svg-icon>\n }\n <!-- Error Message -->\n @if (!inTable || isBilling) {\n <div class=\"datetime-error-message\">\n {{\n shouldShowInternalValidationError()\n ? internalValidationErrorMessage()\n : invalid\n ? (getSuperControl?.errors\n | errorMessage: inputConfig.customErrors)[0]\n : \"\"\n }}\n </div>\n }\n</div>\n\n<!-- Popover for DateTime Pickers -->\n<ng-template #dateTimePopover let-data=\"data\">\n <div\n class=\"datetime-dropdown-holder\"\n [class.datetime-has-stroke]=\"inputConfig.hasStroke\"\n >\n <cai-custom-datetime-pickers\n [calendarType]=\"isDatePicker() ? 'date' : 'time'\"\n [inputConfig]=\"inputConfig\"\n [placeholder]=\"'MM/DD/YY'\"\n [dateTime]=\"dateTime()\"\n (closePopover)=\"onPopoverDateChanged($event)\"\n ></cai-custom-datetime-pickers>\n </div>\n</ng-template>\n\n<ng-template #errorTooltip>\n @if (inTable && invalid && !isInputFocused()) {\n {{\n shouldShowInternalValidationError()\n ? internalValidationErrorMessage()\n : (getSuperControl?.errors | errorMessage: inputConfig.customErrors)[0]\n }}\n }\n</ng-template>\n", styles: ["input:-webkit-autofill,input:-webkit-autofill:hover,input:-webkit-autofill:focus,input:-webkit-autofill:active{transition:background-color 5000s ease-in-out 0s!important}input:-webkit-autofill:focus{-webkit-text-fill-color:#ffffff!important}input:-moz-autofill,input:-moz-autofill-preview{filter:none}*,*:before,*:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}p,ul,ol,dl,blockquote,figure,pre{margin:0}button,input,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button{background:none;border:none;padding:0}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle;max-width:100%;height:auto}ul,ol{padding-left:1.5rem;list-style-position:outside}a{color:inherit;text-decoration:inherit}table{border-collapse:collapse;border-spacing:0}:focus:not(:focus-visible){outline:none}.datetime-input-container{--color-text: #2f2f2f;--color-text-negative: #df3c3c;--color-text-heading: #424242;--color-text-subtle: #919191;--color-text-inverse: #ffffff;--color-icon-neutral: #919191;--color-icon-negative: #e66767;--color-icon-positive: #6692f1;--color-icon-inverse: rgba(255, 255, 255, .6980392157);--color-icon-disable: #cccccc;--color-surface-neutral: #eeeeee;--color-surface-neutral-hover: #dadada;--color-surface-neutral-focus: #1d1d1d;--color-surface-positive: #e9effd;--color-surface-positive-hover: #bed0f9;--color-surface-positive-focus: #0b49d1;--color-surface-negative: #fbe9e9;--color-surface-negative-hover: #f4bebe;--color-surface-negative-focus: #c20c0c;--color-surface-disable: #f7f7f7;padding:4px 4px 4px 6px;border-radius:2px;position:relative;display:flex;align-items:center;touch-action:manipulation;background-color:var(--color-surface-neutral);transition:background-color .1s cubic-bezier(.46,.03,.51,.95);cursor:text;width:100%;height:26px}.datetime-input-container.datetime-inverse{--color-text: #ffffff;--color-text-negative: #ed9292;--color-text-heading: #ffffff;--color-text-inverse: #2f2f2f;--color-icon-neutral: #aaaaaa;--color-icon-negative: #ed9292;--color-icon-positive: #92b1f5;--color-icon-disable: #6c6c6c;--color-surface-neutral: #424242;--color-surface-neutral-hover: #6c6c6c;--color-surface-neutral-focus: #dadada;--color-surface-positive: rgba(59, 115, 237, .2);--color-surface-positive-hover: #2f519a;--color-surface-positive-focus: #0b49d1;--color-surface-negative: rgba(223, 60, 60, .2);--color-surface-negative-hover: #923030;--color-surface-negative-focus: #c20c0c;--color-surface-disable: rgba(66, 66, 66, .4)}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-icon{color:var(--color-icon-neutral)!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-separator{background-color:var(--color-icon-neutral)!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-bg-icon{background-color:var(--color-icon-neutral)!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus:hover .datetime-bg-icon:hover{background-color:#424242!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus:hover .datetime-dropdown-icon:hover,.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus:hover .datetime-icon:hover{color:#424242!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-input{color:var(--color-text-inverse)!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-input.selected .datetime-input-part{background-color:#91919133}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-input.selected .datetime-input-separator{background-color:#91919133}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-input .datetime-input-part{color:#0000004d!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-input .datetime-input-part.filled{color:#000!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-input .datetime-input-part.highlighted{background-color:#91919133;color:#000!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date).datetime-focus .datetime-input .datetime-input-separator{color:#0000004d!important}.datetime-input-container.datetime-inverse:not(.datetime-has-date):hover .datetime-bg-icon:hover{background-color:#fff}.datetime-input-container.datetime-inverse:not(.datetime-has-date):hover .datetime-dropdown-icon:hover,.datetime-input-container.datetime-inverse:not(.datetime-has-date):hover .datetime-icon:hover{color:#fff}.datetime-input-container.datetime-inverse.datetime-valid .datetime-input,.datetime-input-container.datetime-inverse.datetime-invalid .datetime-input{color:var(--color-text)!important}.datetime-input-container.datetime-inverse.datetime-valid.datetime-focus .datetime-input,.datetime-input-container.datetime-inverse.datetime-invalid.datetime-focus .datetime-input{color:var(--color-text)}.datetime-input-container.datetime-inverse.datetime-valid:hover .datetime-bg-icon:hover,.datetime-input-container.datetime-inverse.datetime-invalid:hover .datetime-bg-icon:hover{background-color:#fff!important}.datetime-input-container.datetime-inverse.datetime-valid:hover .datetime-dropdown-icon:hover,.datetime-input-container.datetime-inverse.datetime-valid:hover .datetime-icon:hover,.datetime-input-container.datetime-inverse.datetime-invalid:hover .datetime-dropdown-icon:hover,.datetime-input-container.datetime-inverse.datetime-invalid:hover .datetime-icon:hover{color:#fff!important}.datetime-input-container.datetime-in-table{--color-surface-neutral: transparent;--color-surface-negative: transparent;--color-surface-positive: transparent}.datetime-input-container.datetime-in-table .datetime-dropdown-icon{opacity:0}.datetime-input-container.datetime-in-table.datetime-invalid:not(.datetime-focus):not(:hover):not(.force-invalid) .datetime-input,.datetime-input-container.datetime-in-table.datetime-invalid:not(.datetime-focus):not(:hover):not(.force-invalid) .datetime-label{color:var(--color-text-negative)}.datetime-input-container.datetime-in-table:hover .datetime-dropdown-icon,.datetime-input-container.datetime-in-table.datetime-focus .datetime-dropdown-icon{opacity:1}.datetime-input-container:hover{background-color:var(--color-surface-neutral-hover)}.datetime-input-container:hover .datetime-bg-icon{color:var(--color-surface-neutral-hover)}.datetime-input-container.datetime-focus{background-color:var(--color-surface-neutral-focus)}.datetime-input-container.datetime-focus.datetime-in-table:not(.datetime-billing) .datetime-label{opacity:0}.datetime-input-container.datetime-focus:not(.datetime-in-table):not(.datetime-billing) .datetime-label{transform:translateY(-20px);font-weight:600;font-size:11px;color:var(--color-text-heading)!important}.datetime-input-container.datetime-focus.datetime-billing .datetime-label{color:#fff!important}.datetime-input-container.datetime-focus .datetime-bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-neutral-focus)}.datetime-input-container.datetime-focus .datetime-bg-icon:hover{background-color:#fff}.datetime-input-container.datetime-focus .datetime-icon{color:var(--color-icon-inverse)}.datetime-input-container.datetime-focus .datetime-icon:hover{color:#fff}.datetime-input-container.datetime-focus .datetime-separator{background-color:var(--color-icon-inverse)}.datetime-input-container.datetime-focus .datetime-input{color:var(--color-text-inverse);opacity:1;pointer-events:auto}.datetime-input-container.datetime-focus .datetime-input .datetime-input-part{height:18px;color:#ffffffb3}.datetime-input-container.datetime-focus .datetime-input .datetime-input-part.filled{color:#fff}.datetime-input-container.datetime-focus .datetime-input .datetime-input-part.highlighted{background-color:#ffffff4d;color:#fff}.datetime-input-container.datetime-focus .datetime-input .datetime-input-separator{color:#ffffffb3}.datetime-input-container.datetime-popover-open .datetime-dropdown-icon{transform:rotateX(180deg)}.datetime-input-container.datetime-has-text .datetime-input{opacity:1;pointer-events:auto!important}.datetime-input-container.datetime-has-text.datetime-disabled .datetime-input{pointer-events:none!important}.datetime-input-container.datetime-has-text:not(.datetime-in-table):not(.datetime-billing) .datetime-label{transform:translateY(-20px);font-weight:600;font-size:11px;color:var(--color-text-heading)!important}.datetime-input-container.datetime-has-text.datetime-in-table:not(.datetime-billing) .datetime-label{opacity:0}.datetime-input-container.datetime-valid:not(.datetime-disabled){background-color:var(--color-surface-positive)}.datetime-input-container.datetime-valid:not(.datetime-disabled):hover{background-color:var(--color-surface-positive-hover)}.datetime-input-container.datetime-valid:not(.datetime-disabled):hover .datetime-bg-icon{background-color:var(--color-icon-positive);color:var(--color-surface-positive-hover)}.datetime-input-container.datetime-valid:not(.datetime-disabled):hover .datetime-bg-icon:hover{background-color:#0b49d1}.datetime-input-container.datetime-valid:not(.datetime-disabled):hover .datetime-cancel-button{opacity:1;pointer-events:auto}.datetime-input-container.datetime-valid:not(.datetime-disabled).datetime-focus{background-color:var(--color-surface-positive-focus)}.datetime-input-container.datetime-valid:not(.datetime-disabled).datetime-focus .datetime-bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-positive-focus)}.datetime-input-container.datetime-valid:not(.datetime-disabled).datetime-focus .datetime-bg-icon:hover{background-color:#fff}.datetime-input-container.datetime-valid:not(.datetime-disabled).datetime-focus .datetime-icon{color:var(--color-icon-inverse)}.datetime-input-container.datetime-valid:not(.datetime-disabled).datetime-focus .datetime-icon:hover{color:#fff}.datetime-input-container.datetime-valid:not(.datetime-disabled).datetime-focus .datetime-separator{background-color:var(--color-icon-inverse)}.datetime-input-container.datetime-valid:not(.datetime-disabled).datetime-focus .datetime-cancel-button{opacity:1;pointer-events:auto}.datetime-input-container.datetime-valid:not(.datetime-disabled) .datetime-separator{background-color:var(--color-icon-positive)}.datetime-input-container.datetime-valid:not(.datetime-disabled) .datetime-dropdown-icon,.datetime-input-container.datetime-valid:not(.datetime-disabled) .datetime-icon{color:var(--color-icon-positive)}.datetime-input-container.datetime-valid:not(.datetime-disabled) .datetime-dropdown-icon:hover,.datetime-input-container.datetime-valid:not(.datetime-disabled) .datetime-icon:hover{color:#0b49d1}.datetime-input-container.datetime-invalid:not(.datetime-disabled){background-color:var(--color-surface-negative)}.datetime-input-container.datetime-invalid:not(.datetime-disabled) .datetime-error-message{opacity:1;transform:translateY(0)}.datetime-input-container.datetime-invalid:not(.datetime-disabled):hover{background-color:var(--color-surface-negative-hover)}.datetime-input-container.datetime-invalid:not(.datetime-disabled):hover .datetime-bg-icon{background-color:var(--color-icon-negative);color:var(--color-surface-negative-hover)}.datetime-input-container.datetime-invalid:not(.datetime-disabled):hover .datetime-bg-icon:hover{background-color:#c20c0c}.datetime-input-container.datetime-invalid:not(.datetime-disabled):hover.datetime-has-text .datetime-cancel-button{opacity:1;pointer-events:auto}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-text,.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-date{background-color:var(--color-surface-negative-focus)}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-text .datetime-bg-icon,.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-date .datetime-bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-negative-focus)}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-text .datetime-bg-icon:hover,.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-date .datetime-bg-icon:hover{background-color:#fff}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-text .datetime-icon,.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-date .datetime-icon{color:var(--color-icon-inverse)}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-text .datetime-icon:hover,.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-date .datetime-icon:hover{color:#fff}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-text .datetime-separator,.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-date .datetime-separator{background-color:var(--color-icon-inverse)}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-text .datetime-cancel-button,.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus.datetime-has-date .datetime-cancel-button{opacity:1;pointer-events:auto}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus:not(.datetime-has-date){background-color:var(--color-surface-neutral-focus)}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus:not(.datetime-has-date) .datetime-error-message{opacity:0}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus:not(.datetime-has-date) .datetime-bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-neutral-focus)}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus:not(.datetime-has-date) .datetime-bg-icon:hover{background-color:#fff}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus:not(.datetime-has-date) .datetime-separator{background-color:var(--color-icon-inverse)}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus:not(.datetime-has-date) .datetime-icon{color:var(--color-icon-inverse)}.datetime-input-container.datetime-invalid:not(.datetime-disabled).datetime-focus:not(.datetime-has-date) .datetime-icon:hover{color:#fff}.datetime-input-container.datetime-invalid:not(.datetime-disabled) .datetime-separator{background-color:var(--color-icon-negative)}.datetime-input-container.datetime-invalid:not(.datetime-disabled) .datetime-dropdown-icon,.datetime-input-container.datetime-invalid:not(.datetime-disabled) .datetime-icon{color:var(--color-icon-negative)}.datetime-input-container.datetime-invalid:not(.datetime-disabled) .datetime-dropdown-icon:hover,.datetime-input-container.datetime-invalid:not(.datetime-disabled) .datetime-icon:hover{color:#c20c0c}.datetime-input-container.datetime-disabled{cursor:default;pointer-events:none}.datetime-input-container.datetime-disabled .datetime-icon,.datetime-input-container.datetime-disabled .datetime-dropdown-icon{cursor:default}.datetime-input-container.datetime-disabled:not(.datetime-in-table){background-color:var(--color-surface-disable)}.datetime-input-container.datetime-disabled.datetime-in-table{background-color:transparent}.datetime-input-container.datetime-disabled .datetime-label{color:var(--color-text-subtle)!important}.datetime-input-container.datetime-disabled .datetime-icon{color:var(--color-icon-disable)}.datetime-input-container.datetime-disabled.datetime-has-text .datetime-label{color:var(--color-text-neutral)!important}.datetime-input-container.datetime-disabled.datetime-has-text .datetime-icon{color:var(--color-icon-neutral)}.datetime-input-container.datetime-disabled .datetime-separator{background-color:var(--color-icon-neutral)}.datetime-input-container.datetime-disabled .datetime-input{color:var(--color-text)!important}.datetime-input-container.datetime-required .datetime-label:after{content:\" *\";color:var(--color-text-negative)}.datetime-icon-container{display:flex;align-items:center;justify-content:center;gap:4px;width:max-content}.datetime-icon-container.hidden{display:none}.datetime-icon-container .datetime-icon{order:1;cursor:pointer}.datetime-icon-container .datetime-separator{height:14px;width:1px;border-radius:2px;background-color:var(--color-icon-neutral);transition:background-color .1s ease-in-out;opacity:40%;order:2;margin-right:4px}.datetime-icon{width:18px;height:18px;display:flex;align-items:center;justify-content:center;color:var(--color-icon-neutral);transition:color .1s ease-in-out,opacity .1s ease-in-out,transform .15s ease-in-out}.datetime-label{position:absolute;display:flex;gap:4px;left:27px;font-size:14px;line-height:18px;font-weight:400;pointer-events:none;padding:.25rem 6px;color:var(--color-text);transition:transform .1s ease-in-out,font-weight .1s ease-in-out,color .1s ease-in-out,font-size .1s ease-in-out,opacity .1s ease-in-out;transform:translateY(0);-webkit-user-select:none;user-select:none}.datetime-icon-hidden .datetime-label{left:0}.datetime-bg-icon{background-color:var(--color-icon-neutral);color:var(--color-surface-neutral);border-radius:1px;height:18px;width:18px;padding:0;display:grid;place-items:center;transition:background-color .1s ease-in-out,color .1s ease-in-out,opacity .1s ease-in-out,transform .1s ease-in-out;transform-box:border-box;transform-origin:center;will-change:transform}.datetime-bg-icon:focus-visible{outline:none}.datetime-bg-icon svg{transition:transform .1s ease-in-out}.datetime-bg-icon:hover{transform:scale(1.2222222222)}.datetime-bg-icon:hover svg{transform:scale(.8181818182)}.datetime-bg-icon:active{transform:scale(1)}.datetime-cancel-button{position:absolute;right:26px;top:4px;opacity:0;transition:opacity .1s ease-in-out;pointer-events:none}.datetime-dropdown-icon{position:absolute;right:4px;top:4px;transform:rotateX(0);cursor:pointer}.datetime-size-22{height:22px!important;padding-left:0}.datetime-size-22 .datetime-bg-icon{height:14px!important;width:14px!important;padding:2px!important;right:22px!important}.datetime-size-22 .datetime-icon-container{height:22px!important;padding-top:2px;padding-bottom:2px;padding-left:4px!important}.datetime-size-22 .datetime-input{padding-top:2px;padding-bottom:2px}.datetime-size-22 .datetime-label{padding-top:2px;padding-bottom:2px;padding-left:0!important}.datetime-size-22 .datetime-icon{height:14px!important;width:14px!important}.datetime-size-22.datetime-has-text .datetime-label,.datetime-size-22.datetime-focus .datetime-label{transform:translateY(-18px)!important}.datetime-error-message{position:absolute;bottom:-16px;right:6px;font-size:11px;font-weight:600;opacity:0;-webkit-user-select:none;user-select:none;transition:opacity .1s ease-in-out,transform .1s ease-in-out;color:var(--color-text-negative);transform:translateY(-10px);pointer-events:none}.datetime-input-listener{opacity:0;pointer-events:none;position:absolute;inset:0;font-size:16px}.datetime-billing .datetime-separator{order:0;margin-right:0;margin-left:4px}.datetime-billing .datetime-cancel-button{right:4px}.datetime-billing .datetime-label{left:0;font-weight:600;font-size:11px;color:var(--color-text-heading)!important}.datetime-billing .datetime-icon-container{order:2}.datetime-billing .datetime-input{margin-left:auto;width:max-content}.datetime-billing .datetime-error-message{bottom:4px!important;right:32px!important;transform:translateY(0)!important}.datetime-billing.datetime-focus .datetime-error-message,.datetime-billing.datetime-has-text .datetime-error-message{opacity:0!important}.datetime-billing .datetime-dropdown-icon,.datetime-billing:hover .datetime-icon,.datetime-billing.datetime-focus .datetime-icon{opacity:0}.datetime-billing:hover .datetime-dropdown-icon,.datetime-billing.datetime-focus .datetime-dropdown-icon{opacity:1}.datetime-billing.datetime-has-text .datetime-dropdown-icon{opacity:0!important;pointer-events:none!important}.datetime-billing.datetime-has-text:hover .datetime-icon-container,.datetime-billing.datetime-has-text.datetime-focus .datetime-icon-container{pointer-events:none!important}.datetime-billing.datetime-has-text:hover .datetime-icon-container .datetime-icon,.datetime-billing.datetime-has-text.datetime-focus .datetime-icon-container .datetime-icon{opacity:0!important}.datetime-input{font-size:14px;line-height:18px;font-weight:400;width:100%;opacity:0;pointer-events:none;transition:color .1s cubic-bezier(.46,.03,.51,.95),opacity .1s cubic-bezier(.46,.03,.51,.95);-webkit-user-select:none;user-select:none}.datetime-input .datetime-input-separator{background-color:transparent;transition:color .1s cubic-bezier(.46,.03,.51,.95),background-color .1s cubic-bezier(.46,.03,.51,.95)}.datetime-input .datetime-input-part{position:relative;background-color:transparent;transition:color .1s cubic-bezier(.46,.03,.51,.95),background-color .1s cubic-bezier(.46,.03,.51,.95)}.datetime-input .datetime-input-part.time-am-pm{margin-left:4px}.datetime-input .datetime-input-part:after{content:\"\";inset:0 -3px;position:absolute}.datetime-input.selected .datetime-input-part,.datetime-input.selected .datetime-input-separator{background-color:#ffffff4d}.datetime-input.selected .time-am-pm{margin-left:0!important;padding-left:4px!important}\n"] }]
8783
9133
  }], ctorParameters: () => [], propDecorators: { inputListener: [{
8784
9134
  type: ViewChild,
8785
9135
  args: ['inputListener']
@@ -12865,5 +13215,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImpo
12865
13215
  * Generated bundle index. Do not edit.
12866
13216
  */
12867
13217
 
12868
- export { AvatarComponent, CaScrollableComponent, CaiInputDatetimePickerComponent, CopyComponent, CounterComponent, DEFAULT_CROP_ZOOM, DEFAULT_DUAL_DROP_ZONES, DOCS_OR_MEDIA_VARIANTS, DROP_ZONE_CARD_SLIDER, DROP_ZONE_CARD_SLIDER_ITEM_WITH_GAP_PX, DROP_ZONE_NARROW_BREAKPOINT_PX, DUAL_DROP_TARGETS, DispatchDropdownComponent, DispatchLocationComponent, DispatchStatus, DocumentThumbnailHelper, DropZoneComponent, DropdownTypes, FILE_PROCESSING_CONCURRENCY, IMAGE_PREVIEW_CSS_WIDTH, IMAGE_PREVIEW_VARIANTS, IMAGE_RESIZE_THRESHOLD_BYTES, INPUT_CHARACTER_SETS, InputAddressComponent, InputComponent, IntervalDropdownComponent, ListContactDropdownComponent, PDFJS_ASSET_BASE, PmComponent, RatingReviewComponent, ReviewModalComponent, SelectedBusinessFieldComponent, SignatureComponent, StickyScrollbarComponent, THUMBNAIL_MIME, THUMBNAIL_QUALITY, THUMBNAIL_WIDTH, TabOptionDropdownComponent, TextAreaComponent, VIDEO_THUMBNAIL_TIMEOUT_MS, eScrollState, ignoreWhenAutofilled, sizes };
13218
+ export { AvatarComponent, CaScrollableComponent, CaiInputDatetimePickerComponent, CopyComponent, CounterComponent, DATE_FORMAT_PATTERNS, DATE_PART_PLACEHOLDERS, DEFAULT_CROP_ZOOM, DEFAULT_DATE_FORMAT_PATTERN, DEFAULT_DUAL_DROP_ZONES, DEFAULT_NUMBER_FORMAT, DEFAULT_PHONE_DIAL_CODE, DEFAULT_TIME_FORMAT, DOCS_OR_MEDIA_VARIANTS, DROP_ZONE_CARD_SLIDER, DROP_ZONE_CARD_SLIDER_ITEM_WITH_GAP_PX, DROP_ZONE_NARROW_BREAKPOINT_PX, DUAL_DROP_TARGETS, DateFormats, DispatchDropdownComponent, DispatchLocationComponent, DispatchStatus, DocumentThumbnailHelper, DropZoneComponent, DropdownTypes, FILE_PROCESSING_CONCURRENCY, IMAGE_PREVIEW_CSS_WIDTH, IMAGE_PREVIEW_VARIANTS, IMAGE_RESIZE_THRESHOLD_BYTES, INPUT_CHARACTER_SETS, InputAddressComponent, InputComponent, IntervalDropdownComponent, ListContactDropdownComponent, NUMBER_FORMAT_SEPARATORS, NumberFormats, PDFJS_ASSET_BASE, PHONE_COUNTRIES, PHONE_MASK, PHONE_MAX_DIGITS, PHONE_TWO_DIGIT_DIAL_CODES, PmComponent, RatingReviewComponent, ReviewModalComponent, SelectedBusinessFieldComponent, SignatureComponent, StickyScrollbarComponent, THUMBNAIL_MIME, THUMBNAIL_QUALITY, THUMBNAIL_WIDTH, TIME_FORMAT_PATTERNS, TabOptionDropdownComponent, TextAreaComponent, TimeFormats, VIDEO_THUMBNAIL_TIMEOUT_MS, eScrollState, getDateFormatPattern, ignoreWhenAutofilled, sizes };
12869
13219
  //# sourceMappingURL=carriera-intern.mjs.map