@flusys/ng-ui 6.2.2 → 6.4.0

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.
@@ -357,7 +357,6 @@ class ButtonComponent {
357
357
  [attr.tabindex]="tabindex()"
358
358
  [class]="hostClass()"
359
359
  [style]="style()"
360
- style="font-weight: var(--f-button-font-weight, 500)"
361
360
  (click)="onClick.emit($event)"
362
361
  (focus)="onFocus.emit($event)"
363
362
  (blur)="onBlur.emit($event)"
@@ -436,7 +435,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
436
435
  [attr.tabindex]="tabindex()"
437
436
  [class]="hostClass()"
438
437
  [style]="style()"
439
- style="font-weight: var(--f-button-font-weight, 500)"
440
438
  (click)="onClick.emit($event)"
441
439
  (focus)="onFocus.emit($event)"
442
440
  (blur)="onBlur.emit($event)"
@@ -513,23 +511,26 @@ function computeButtonClasses(opts) {
513
511
  'disabled:opacity-60 disabled:pointer-events-none',
514
512
  'active:scale-[0.97]',
515
513
  isFluid ? 'w-full' : '',
516
- isRounded ? 'rounded-full' : 'rounded-lg',
514
+ // Padding, radius, weight and tracking all come from the active preset via the
515
+ // f-btn utilities, so a preset can make buttons denser, squarer or bolder
516
+ // rather than only recolouring them.
517
+ isRounded ? 'f-btn-round' : '',
517
518
  raised ? 'shadow-md hover:shadow-lg active:shadow-sm' : '',
518
519
  ];
519
520
  const sizing = sz === 'small'
520
521
  ? iconOnly
521
- ? 'p-1.5 text-xs'
522
- : 'px-3 py-1.5 text-xs'
522
+ ? 'f-btn-icon-sm text-xs'
523
+ : 'f-btn-sm text-xs'
523
524
  : sz === 'large'
524
525
  ? iconOnly
525
- ? 'p-3 text-base'
526
- : 'px-5 py-3 text-base'
526
+ ? 'f-btn-icon-lg text-base'
527
+ : 'f-btn-lg text-base'
527
528
  : iconOnly
528
- ? 'p-2 text-sm'
529
- : 'px-4 py-2 text-sm';
529
+ ? 'f-btn-icon text-sm'
530
+ : 'f-btn text-sm';
530
531
  let variant = '';
531
532
  if (isLink) {
532
- variant = 'text-primary hover:underline bg-transparent border-none p-0';
533
+ variant = 'text-primary hover:underline bg-transparent border-none p-0 rounded-none';
533
534
  }
534
535
  else if (isText) {
535
536
  variant = isPlain ? plainVariant('text') : textVariant(sev);
@@ -1070,7 +1071,7 @@ class ToastComponent {
1070
1071
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: ToastComponent, isStandalone: true, selector: "f-toast", inputs: { key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onClose: "onClose" }, host: { properties: { "class": "hostClass()" } }, queries: [{ propertyName: "messageTemplate", first: true, predicate: ["message"], descendants: true, isSignal: true }], ngImport: i0, template: `
1071
1072
  @for (msg of visibleMessages(); track msg.id) {
1072
1073
  <div
1073
- class="toast-item w-full flex items-start gap-3 px-3.5 py-3 rounded-lg shadow-lg border pointer-events-auto"
1074
+ class="toast-item w-full flex items-start gap-3 px-3.5 py-3 f-overlay border pointer-events-auto"
1074
1075
  [class.leaving]="msg.closing"
1075
1076
  [style.background]="severityBg(msg.severity)"
1076
1077
  [style.color]="severityColor(msg.severity)"
@@ -1113,7 +1114,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
1113
1114
  }, template: `
1114
1115
  @for (msg of visibleMessages(); track msg.id) {
1115
1116
  <div
1116
- class="toast-item w-full flex items-start gap-3 px-3.5 py-3 rounded-lg shadow-lg border pointer-events-auto"
1117
+ class="toast-item w-full flex items-start gap-3 px-3.5 py-3 f-overlay border pointer-events-auto"
1117
1118
  [class.leaving]="msg.closing"
1118
1119
  [style.background]="severityBg(msg.severity)"
1119
1120
  [style.color]="severityColor(msg.severity)"
@@ -1364,7 +1365,7 @@ class FButtonDirective {
1364
1365
  });
1365
1366
  }
1366
1367
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: FButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1367
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.6", type: FButtonDirective, isStandalone: true, selector: "[fButton]", inputs: { severity: { classPropertyName: "severity", publicName: "severity", isSignal: true, isRequired: false, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, outlined: { classPropertyName: "outlined", publicName: "outlined", isSignal: true, isRequired: false, transformFunction: null }, link: { classPropertyName: "link", publicName: "link", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, rounded: { classPropertyName: "rounded", publicName: "rounded", isSignal: true, isRequired: false, transformFunction: null }, raised: { classPropertyName: "raised", publicName: "raised", isSignal: true, isRequired: false, transformFunction: null }, fluid: { classPropertyName: "fluid", publicName: "fluid", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, loadingIcon: { classPropertyName: "loadingIcon", publicName: "loadingIcon", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, iconPos: { classPropertyName: "iconPos", publicName: "iconPos", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, plain: { classPropertyName: "plain", publicName: "plain", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "hostClass()", "style.font-weight": "'var(--f-button-font-weight, 500)'", "attr.disabled": "disabled() || loading() ? '' : null", "attr.aria-disabled": "disabled() ? 'true' : null", "attr.aria-busy": "loading() ? 'true' : null" } }, ngImport: i0 });
1368
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.6", type: FButtonDirective, isStandalone: true, selector: "[fButton]", inputs: { severity: { classPropertyName: "severity", publicName: "severity", isSignal: true, isRequired: false, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, outlined: { classPropertyName: "outlined", publicName: "outlined", isSignal: true, isRequired: false, transformFunction: null }, link: { classPropertyName: "link", publicName: "link", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, rounded: { classPropertyName: "rounded", publicName: "rounded", isSignal: true, isRequired: false, transformFunction: null }, raised: { classPropertyName: "raised", publicName: "raised", isSignal: true, isRequired: false, transformFunction: null }, fluid: { classPropertyName: "fluid", publicName: "fluid", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, loadingIcon: { classPropertyName: "loadingIcon", publicName: "loadingIcon", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, iconPos: { classPropertyName: "iconPos", publicName: "iconPos", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, plain: { classPropertyName: "plain", publicName: "plain", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "hostClass()", "attr.disabled": "disabled() || loading() ? '' : null", "attr.aria-disabled": "disabled() ? 'true' : null", "attr.aria-busy": "loading() ? 'true' : null" } }, ngImport: i0 });
1368
1369
  }
1369
1370
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: FButtonDirective, decorators: [{
1370
1371
  type: Directive,
@@ -1372,7 +1373,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
1372
1373
  selector: '[fButton]',
1373
1374
  host: {
1374
1375
  '[class]': 'hostClass()',
1375
- '[style.font-weight]': "'var(--f-button-font-weight, 500)'",
1376
1376
  '[attr.disabled]': "disabled() || loading() ? '' : null",
1377
1377
  '[attr.aria-disabled]': "disabled() ? 'true' : null",
1378
1378
  '[attr.aria-busy]': 'loading() ? \'true\' : null',
@@ -1700,13 +1700,13 @@ class ImageComponent {
1700
1700
  </button>
1701
1701
  }
1702
1702
  @if (!loaded()) {
1703
- <div class="absolute inset-0 flex items-center justify-center bg-(--f-content-hover-background) rounded" [style.width]="width()" [style.height]="height()">
1703
+ <div class="absolute inset-0 flex items-center justify-center bg-(--f-content-hover-background) rounded-md" [style.width]="width()" [style.height]="height()">
1704
1704
  <ui-icon name="loader-circle" [spin]="true" class="text-lg text-(--f-text-muted-color)"></ui-icon>
1705
1705
  </div>
1706
1706
  }
1707
1707
  } @else {
1708
1708
  <div
1709
- class="flex flex-col items-center justify-center gap-1 bg-(--f-content-hover-background) text-(--f-text-muted-color) rounded"
1709
+ class="flex flex-col items-center justify-center gap-1 bg-(--f-content-hover-background) text-(--f-text-muted-color) rounded-md"
1710
1710
  [style.width]="width() || '8rem'"
1711
1711
  [style.height]="height() || '8rem'"
1712
1712
  >
@@ -1786,13 +1786,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
1786
1786
  </button>
1787
1787
  }
1788
1788
  @if (!loaded()) {
1789
- <div class="absolute inset-0 flex items-center justify-center bg-(--f-content-hover-background) rounded" [style.width]="width()" [style.height]="height()">
1789
+ <div class="absolute inset-0 flex items-center justify-center bg-(--f-content-hover-background) rounded-md" [style.width]="width()" [style.height]="height()">
1790
1790
  <ui-icon name="loader-circle" [spin]="true" class="text-lg text-(--f-text-muted-color)"></ui-icon>
1791
1791
  </div>
1792
1792
  }
1793
1793
  } @else {
1794
1794
  <div
1795
- class="flex flex-col items-center justify-center gap-1 bg-(--f-content-hover-background) text-(--f-text-muted-color) rounded"
1795
+ class="flex flex-col items-center justify-center gap-1 bg-(--f-content-hover-background) text-(--f-text-muted-color) rounded-md"
1796
1796
  [style.width]="width() || '8rem'"
1797
1797
  [style.height]="height() || '8rem'"
1798
1798
  >
@@ -2428,7 +2428,7 @@ class PopoverComponent {
2428
2428
  // DOM reparent.
2429
2429
  panelClass = computed(() => {
2430
2430
  const position = this.appendTo() === 'self' ? 'absolute top-full left-0 mt-1.5' : 'fixed';
2431
- return `popover-panel ${position} z-50 bg-(--f-overlay-popover-background) border border-(--f-content-border-color) rounded-lg shadow-lg min-w-48 max-w-sm ${this.styleClass()}`;
2431
+ return `popover-panel ${position} z-50 bg-(--f-overlay-popover-background) border border-(--f-content-border-color) f-overlay min-w-48 max-w-sm ${this.styleClass()}`;
2432
2432
  }, /* @ts-ignore */
2433
2433
  ...(ngDevMode ? [{ debugName: "panelClass" }] : /* istanbul ignore next */ []));
2434
2434
  constructor() {
@@ -2535,7 +2535,7 @@ class PopoverComponent {
2535
2535
  @if (showCloseIcon()) {
2536
2536
  <button
2537
2537
  type="button"
2538
- class="absolute top-2 right-2 inline-flex items-center justify-center w-6 h-6 rounded-md text-(--f-text-muted-color) hover:text-(--f-text-hover-color) hover:bg-(--f-content-hover-background) transition-colors cursor-pointer focus-visible:outline-none focus-visible:ring-focus"
2538
+ class="absolute top-2 right-2 inline-flex items-center justify-center w-6 h-6 rounded-md text-(--f-text-muted-color) hover:text-(--f-text-hover-color) hover:bg-(--f-content-hover-background) transition-colors cursor-pointer focus:outline-none focus-visible:ring-focus"
2539
2539
  [attr.aria-label]="closeAriaLabel()"
2540
2540
  (click)="onCloseIconClick($event)"
2541
2541
  >
@@ -2570,7 +2570,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
2570
2570
  @if (showCloseIcon()) {
2571
2571
  <button
2572
2572
  type="button"
2573
- class="absolute top-2 right-2 inline-flex items-center justify-center w-6 h-6 rounded-md text-(--f-text-muted-color) hover:text-(--f-text-hover-color) hover:bg-(--f-content-hover-background) transition-colors cursor-pointer focus-visible:outline-none focus-visible:ring-focus"
2573
+ class="absolute top-2 right-2 inline-flex items-center justify-center w-6 h-6 rounded-md text-(--f-text-muted-color) hover:text-(--f-text-hover-color) hover:bg-(--f-content-hover-background) transition-colors cursor-pointer focus:outline-none focus-visible:ring-focus"
2574
2574
  [attr.aria-label]="closeAriaLabel()"
2575
2575
  (click)="onCloseIconClick($event)"
2576
2576
  >
@@ -2866,7 +2866,7 @@ class DatePickerComponent {
2866
2866
  return Array.from({ length: 12 }, (_, i) => start + i);
2867
2867
  }, /* @ts-ignore */
2868
2868
  ...(ngDevMode ? [{ debugName: "yearGridYears" }] : /* istanbul ignore next */ []));
2869
- inlinePanelClass = computed(() => `inline-block bg-(--f-overlay-popover-background) border border-(--f-content-border-color) rounded-lg p-3 min-w-64 ${this.styleClass()}`, /* @ts-ignore */
2869
+ inlinePanelClass = computed(() => `inline-block bg-(--f-overlay-popover-background) border border-(--f-content-border-color) f-overlay-shape p-3 min-w-64 ${this.styleClass()}`, /* @ts-ignore */
2870
2870
  ...(ngDevMode ? [{ debugName: "inlinePanelClass" }] : /* istanbul ignore next */ []));
2871
2871
  hasValue = computed(() => {
2872
2872
  const v = this.value();
@@ -2919,12 +2919,12 @@ class DatePickerComponent {
2919
2919
  const disabledClass = this.disabled()
2920
2920
  ? 'opacity-60 cursor-not-allowed'
2921
2921
  : '';
2922
- return `flex items-center border rounded-lg overflow-hidden bg-(--f-form-field-background) focus-within:ring-focus transition-all duration-[var(--f-transition-duration)] ${stateClass} ${disabledClass}`;
2922
+ return `flex items-center border f-field-shape overflow-hidden bg-(--f-form-field-background) focus-within:ring-focus transition-all duration-[var(--f-transition-duration)] ${stateClass} ${disabledClass}`;
2923
2923
  }, /* @ts-ignore */
2924
2924
  ...(ngDevMode ? [{ debugName: "wrapperClass" }] : /* istanbul ignore next */ []));
2925
2925
  inputClass = computed(() => {
2926
2926
  const cursor = this.readonlyInput() ? 'cursor-pointer ' : '';
2927
- return `block w-full px-3 py-2 text-sm bg-(--f-form-field-background) text-(--f-form-field-color) placeholder:text-(--f-form-field-placeholder-color) focus:outline-none ${cursor}${this.inputStyleClass()}`;
2927
+ return `block w-full f-field text-sm bg-(--f-form-field-background) text-(--f-form-field-color) placeholder:text-(--f-form-field-placeholder-color) focus:outline-none ${cursor}${this.inputStyleClass()}`;
2928
2928
  }, /* @ts-ignore */
2929
2929
  ...(ngDevMode ? [{ debugName: "inputClass" }] : /* istanbul ignore next */ []));
2930
2930
  prevAriaLabel = computed(() => {
@@ -3084,7 +3084,7 @@ class DatePickerComponent {
3084
3084
  };
3085
3085
  }
3086
3086
  dayClass(day) {
3087
- const base = 'relative text-center text-sm py-1.5 transition-colors focus-visible:outline-none focus-visible:ring-focus disabled:opacity-40 disabled:cursor-not-allowed disabled:pointer-events-none cursor-pointer';
3087
+ const base = 'relative text-center text-sm py-1.5 transition-colors focus:outline-none focus-visible:ring-focus disabled:opacity-40 disabled:cursor-not-allowed disabled:pointer-events-none cursor-pointer';
3088
3088
  if (day.otherMonth && !this.selectOtherMonths()) {
3089
3089
  return `${base} text-(--f-text-muted-color) opacity-60 rounded-md`;
3090
3090
  }
@@ -3503,7 +3503,7 @@ class DatePickerComponent {
3503
3503
  </f-popover>
3504
3504
  } @else if (open()) {
3505
3505
  <div
3506
- class="absolute z-50 mt-1 bg-(--f-overlay-popover-background) border border-(--f-content-border-color) rounded-lg shadow-[0_8px_30px_rgb(0,0,0,0.1)] p-3 min-w-64"
3506
+ class="absolute z-50 mt-1 bg-(--f-overlay-popover-background) border border-(--f-content-border-color) f-overlay p-3 min-w-64"
3507
3507
  (keydown.escape)="closeAndFocusInput()"
3508
3508
  >
3509
3509
  <ng-container [ngTemplateOutlet]="panelContent" />
@@ -3658,7 +3658,7 @@ class DatePickerComponent {
3658
3658
  type="button"
3659
3659
  role="gridcell"
3660
3660
  [attr.aria-selected]="i === viewMonth()"
3661
- class="text-sm py-2.5 rounded-md transition-colors cursor-pointer focus-visible:outline-none focus-visible:ring-focus hover:bg-(--f-content-hover-background)"
3661
+ class="text-sm py-2.5 rounded-md transition-colors cursor-pointer focus:outline-none focus-visible:ring-focus hover:bg-(--f-content-hover-background)"
3662
3662
  [class.bg-primary]="i === viewMonth()"
3663
3663
  [class.text-primary-contrast]="i === viewMonth()"
3664
3664
  (click)="selectMonth(i)"
@@ -3700,7 +3700,7 @@ class DatePickerComponent {
3700
3700
  type="button"
3701
3701
  role="gridcell"
3702
3702
  [attr.aria-selected]="y === viewYear()"
3703
- class="text-sm py-2.5 rounded-md transition-colors cursor-pointer focus-visible:outline-none focus-visible:ring-focus hover:bg-(--f-content-hover-background)"
3703
+ class="text-sm py-2.5 rounded-md transition-colors cursor-pointer focus:outline-none focus-visible:ring-focus hover:bg-(--f-content-hover-background)"
3704
3704
  [class.bg-primary]="y === viewYear()"
3705
3705
  [class.text-primary-contrast]="y === viewYear()"
3706
3706
  (click)="selectYear(y)"
@@ -3898,7 +3898,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
3898
3898
  </f-popover>
3899
3899
  } @else if (open()) {
3900
3900
  <div
3901
- class="absolute z-50 mt-1 bg-(--f-overlay-popover-background) border border-(--f-content-border-color) rounded-lg shadow-[0_8px_30px_rgb(0,0,0,0.1)] p-3 min-w-64"
3901
+ class="absolute z-50 mt-1 bg-(--f-overlay-popover-background) border border-(--f-content-border-color) f-overlay p-3 min-w-64"
3902
3902
  (keydown.escape)="closeAndFocusInput()"
3903
3903
  >
3904
3904
  <ng-container [ngTemplateOutlet]="panelContent" />
@@ -4053,7 +4053,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
4053
4053
  type="button"
4054
4054
  role="gridcell"
4055
4055
  [attr.aria-selected]="i === viewMonth()"
4056
- class="text-sm py-2.5 rounded-md transition-colors cursor-pointer focus-visible:outline-none focus-visible:ring-focus hover:bg-(--f-content-hover-background)"
4056
+ class="text-sm py-2.5 rounded-md transition-colors cursor-pointer focus:outline-none focus-visible:ring-focus hover:bg-(--f-content-hover-background)"
4057
4057
  [class.bg-primary]="i === viewMonth()"
4058
4058
  [class.text-primary-contrast]="i === viewMonth()"
4059
4059
  (click)="selectMonth(i)"
@@ -4095,7 +4095,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
4095
4095
  type="button"
4096
4096
  role="gridcell"
4097
4097
  [attr.aria-selected]="y === viewYear()"
4098
- class="text-sm py-2.5 rounded-md transition-colors cursor-pointer focus-visible:outline-none focus-visible:ring-focus hover:bg-(--f-content-hover-background)"
4098
+ class="text-sm py-2.5 rounded-md transition-colors cursor-pointer focus:outline-none focus-visible:ring-focus hover:bg-(--f-content-hover-background)"
4099
4099
  [class.bg-primary]="y === viewYear()"
4100
4100
  [class.text-primary-contrast]="y === viewYear()"
4101
4101
  (click)="selectYear(y)"
@@ -4726,7 +4726,9 @@ class InputIconComponent {
4726
4726
  style = input(null, /* @ts-ignore */
4727
4727
  ...(ngDevMode ? [{ debugName: "style" }] : /* istanbul ignore next */ []));
4728
4728
  hostClass = computed(() => {
4729
- const sideClass = this.position() === 'right' ? 'right-3' : 'left-3';
4729
+ const sideClass = this.position() === 'right'
4730
+ ? 'right-(--f-field-padding-x)'
4731
+ : 'left-(--f-field-padding-x)';
4730
4732
  return `absolute ${sideClass} top-1/2 -translate-y-1/2 text-(--f-form-field-placeholder-color) ${this.styleClass()}`;
4731
4733
  }, /* @ts-ignore */
4732
4734
  ...(ngDevMode ? [{ debugName: "hostClass" }] : /* istanbul ignore next */ []));
@@ -4763,9 +4765,13 @@ class IconFieldComponent {
4763
4765
  _resolvedPosition = computed(() => this.iconPosition() || this._icon()?.position() || 'left', /* @ts-ignore */
4764
4766
  ...(ngDevMode ? [{ debugName: "_resolvedPosition" }] : /* istanbul ignore next */ []));
4765
4767
  hostClass = computed(() => {
4768
+ // One icon slot wide, measured from the field's own inline padding so the gap
4769
+ // between icon and text stays constant in every preset. Spelled out in full:
4770
+ // Tailwind generates a utility only for class names it can find verbatim in the
4771
+ // source, so an interpolated one silently produces no CSS at all.
4766
4772
  const paddingClass = this._resolvedPosition() === 'right'
4767
- ? '[&_input]:pr-9 [&_textarea]:pr-9'
4768
- : '[&_input]:pl-9 [&_textarea]:pl-9';
4773
+ ? '[&_input]:pr-[calc(var(--f-field-padding-x)+1.5rem)] [&_textarea]:pr-[calc(var(--f-field-padding-x)+1.5rem)]'
4774
+ : '[&_input]:pl-[calc(var(--f-field-padding-x)+1.5rem)] [&_textarea]:pl-[calc(var(--f-field-padding-x)+1.5rem)]';
4769
4775
  return `relative flex items-center ${paddingClass} ${this.styleClass()}`;
4770
4776
  }, /* @ts-ignore */
4771
4777
  ...(ngDevMode ? [{ debugName: "hostClass" }] : /* istanbul ignore next */ []));
@@ -4862,17 +4868,25 @@ class InputNumberComponent {
4862
4868
  ...(ngDevMode ? [{ debugName: "numberFormat" }] : /* istanbul ignore next */ []));
4863
4869
  textSizeClass = computed(() => (this.size() === 'small' ? 'text-xs' : this.size() === 'large' ? 'text-base' : 'text-sm'), /* @ts-ignore */
4864
4870
  ...(ngDevMode ? [{ debugName: "textSizeClass" }] : /* istanbul ignore next */ []));
4865
- paddingYClass = computed(() => (this.size() === 'small' ? 'py-1.5' : this.size() === 'large' ? 'py-2.5' : 'py-2'), /* @ts-ignore */
4871
+ // Shared by the input and its prefix/suffix addons so the three stay the same
4872
+ // height. Derived from the preset's field padding on the same small/large steps
4873
+ // the f-field utilities use — the addons rule out f-field itself, which would
4874
+ // also set the inline padding they need to keep at px-2.
4875
+ paddingYClass = computed(() => this.size() === 'small'
4876
+ ? 'py-[calc(var(--f-field-padding-y)-0.125rem)]'
4877
+ : this.size() === 'large'
4878
+ ? 'py-[calc(var(--f-field-padding-y)+0.25rem)]'
4879
+ : 'py-(--f-field-padding-y)', /* @ts-ignore */
4866
4880
  ...(ngDevMode ? [{ debugName: "paddingYClass" }] : /* istanbul ignore next */ []));
4867
4881
  wrapperClass = computed(() => {
4868
4882
  const stateClass = this.invalid() && this.touched()
4869
4883
  ? 'border-red-400 focus-within:border-red-400'
4870
4884
  : 'border-(--f-form-field-border-color) focus-within:border-primary';
4871
4885
  const directionClass = this.showButtons() && this.buttonLayout() === 'vertical' ? 'flex-col' : 'flex-row';
4872
- return `flex w-full items-stretch ${directionClass} border rounded-lg overflow-hidden focus-within:ring-focus transition-colors duration-[var(--f-transition-duration)] ${stateClass} ${this.styleClass()}`;
4886
+ return `flex w-full items-stretch ${directionClass} border f-field-shape overflow-hidden focus-within:ring-focus transition-colors duration-[var(--f-transition-duration)] ${stateClass} ${this.styleClass()}`;
4873
4887
  }, /* @ts-ignore */
4874
4888
  ...(ngDevMode ? [{ debugName: "wrapperClass" }] : /* istanbul ignore next */ []));
4875
- inputClass = computed(() => `block px-3 ${this.paddingYClass()} ${this.textSizeClass()} bg-(--f-form-field-background) text-(--f-form-field-color) focus:outline-none w-full min-w-0 disabled:opacity-60 disabled:cursor-not-allowed ${this.inputStyleClass()}`, /* @ts-ignore */
4889
+ inputClass = computed(() => `block px-(--f-field-padding-x) ${this.paddingYClass()} ${this.textSizeClass()} bg-(--f-form-field-background) text-(--f-form-field-color) focus:outline-none w-full min-w-0 disabled:opacity-60 disabled:cursor-not-allowed ${this.inputStyleClass()}`, /* @ts-ignore */
4876
4890
  ...(ngDevMode ? [{ debugName: "inputClass" }] : /* istanbul ignore next */ []));
4877
4891
  addonClass(border) {
4878
4892
  const borderClass = border === 'l' ? 'border-l' : 'border-r';
@@ -5162,17 +5176,10 @@ class InputTextDirective {
5162
5176
  ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
5163
5177
  // Inputs already span full width by default; set false to shrink to content width.
5164
5178
  fluid = input(true, { ...(ngDevMode ? { debugName: "fluid" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
5165
- _el = inject((ElementRef));
5166
- _iconLeft = signal(false, /* @ts-ignore */
5167
- ...(ngDevMode ? [{ debugName: "_iconLeft" }] : /* istanbul ignore next */ []));
5168
- ngOnInit() {
5169
- this._iconLeft.set(!!this._el.nativeElement.closest('f-iconfield'));
5170
- }
5171
5179
  classes = computed(() => {
5172
5180
  const invalidState = this.invalid() && this.touched();
5173
5181
  const variant = this.variant();
5174
5182
  const size = this.size();
5175
- const iconLeft = this._iconLeft();
5176
5183
  const stateClass = invalidState
5177
5184
  ? 'border-red-400 focus:border-red-400'
5178
5185
  : variant === 'filled'
@@ -5181,18 +5188,18 @@ class InputTextDirective {
5181
5188
  const variantClass = variant === 'filled'
5182
5189
  ? 'bg-(--f-form-field-filled-background)'
5183
5190
  : 'bg-(--f-form-field-background)';
5184
- const paddingY = size === 'small' ? 'py-1.5' : size === 'large' ? 'py-3' : 'py-2';
5185
5191
  const textSize = size === 'small' ? 'text-xs' : size === 'large' ? 'text-base' : 'text-sm';
5186
- const paddingX = iconLeft
5187
- ? size === 'small' ? 'pl-8 pr-2.5' : size === 'large' ? 'pl-11 pr-4' : 'pl-9 pr-3'
5188
- : size === 'small' ? 'px-2.5' : size === 'large' ? 'px-4' : 'px-3';
5192
+ // Padding, radius and weight come from the active preset — a dense, square
5193
+ // preset makes the field dense and square without a class change here. An
5194
+ // enclosing f-iconfield overrides the icon side on top of this.
5195
+ const shape = size === 'small' ? 'f-field-sm' : size === 'large' ? 'f-field-lg' : 'f-field';
5189
5196
  return [
5190
- 'block rounded-lg border',
5197
+ 'block border',
5191
5198
  this.fluid() ? 'w-full' : 'w-auto',
5192
- paddingX, paddingY, textSize,
5199
+ shape, textSize,
5193
5200
  variantClass,
5194
5201
  'text-(--f-form-field-color) placeholder:text-(--f-form-field-placeholder-color)',
5195
- 'focus:outline-none focus:ring-focus',
5202
+ 'focus:outline-none focus-visible:ring-focus',
5196
5203
  'disabled:opacity-60 disabled:cursor-not-allowed',
5197
5204
  'transition-colors duration-[var(--f-transition-duration)]',
5198
5205
  stateClass,
@@ -5463,7 +5470,7 @@ class MultiSelectComponent {
5463
5470
  ...(ngDevMode ? [{ debugName: "_panelWidth" }] : /* istanbul ignore next */ []));
5464
5471
  panelClass = computed(() => {
5465
5472
  const position = this.appendTo() === 'body' ? 'fixed' : 'absolute w-full mt-1';
5466
- return `${position} z-50 bg-(--f-overlay-popover-background) border border-(--f-content-border-color) rounded-lg shadow-lg overflow-hidden`;
5473
+ return `${position} z-50 bg-(--f-overlay-popover-background) border border-(--f-content-border-color) f-overlay overflow-hidden`;
5467
5474
  }, /* @ts-ignore */
5468
5475
  ...(ngDevMode ? [{ debugName: "panelClass" }] : /* istanbul ignore next */ []));
5469
5476
  panelStyle = computed(() => {
@@ -5499,7 +5506,7 @@ class MultiSelectComponent {
5499
5506
  }
5500
5507
  }
5501
5508
  triggerClass = computed(() => {
5502
- const base = 'w-full min-h-[34px] flex items-center gap-2 px-3 py-1.5 text-sm rounded-lg border bg-(--f-form-field-background) focus:outline-none focus-visible:ring-focus transition-all duration-[var(--f-transition-duration)]';
5509
+ const base = 'w-full min-h-[34px] flex items-center gap-2 f-field-compact text-sm border bg-(--f-form-field-background) focus:outline-none focus-visible:ring-focus transition-all duration-[var(--f-transition-duration)]';
5503
5510
  const showInvalid = this.invalid() && this.touched();
5504
5511
  const stateClass = this.open()
5505
5512
  ? showInvalid
@@ -6669,12 +6676,12 @@ class PasswordComponent {
6669
6676
  ? (size === 'small' ? 'pr-8' : size === 'large' ? 'pr-11' : 'pr-10')
6670
6677
  : (size === 'small' ? 'pr-2.5' : size === 'large' ? 'pr-4' : 'pr-3');
6671
6678
  return [
6672
- 'block rounded-lg border',
6679
+ 'block f-field-shape border',
6673
6680
  this.fluid() ? 'w-full' : 'w-auto',
6674
6681
  paddingLeft, paddingRight, paddingY, textSize,
6675
6682
  variantClass,
6676
6683
  'text-(--f-form-field-color) placeholder:text-(--f-form-field-placeholder-color)',
6677
- 'focus:outline-none focus:ring-focus',
6684
+ 'focus:outline-none focus-visible:ring-focus',
6678
6685
  'disabled:opacity-60 disabled:cursor-not-allowed',
6679
6686
  'transition-colors duration-[var(--f-transition-duration)]',
6680
6687
  stateClass,
@@ -6723,7 +6730,7 @@ class PasswordComponent {
6723
6730
  @if (toggleMask()) {
6724
6731
  <button
6725
6732
  type="button"
6726
- class="inline-flex items-center absolute right-3 top-1/2 -translate-y-1/2 text-(--f-form-field-placeholder-color) hover:text-(--f-text-hover-color) cursor-pointer focus-visible:outline-none focus-visible:ring-focus rounded-sm"
6733
+ class="inline-flex items-center absolute right-3 top-1/2 -translate-y-1/2 text-(--f-form-field-placeholder-color) hover:text-(--f-text-hover-color) cursor-pointer focus:outline-none focus-visible:ring-focus rounded-sm"
6727
6734
  [attr.aria-label]="show() ? 'Hide password' : 'Show password'"
6728
6735
  [attr.aria-pressed]="show()"
6729
6736
  (click)="toggleShow()"
@@ -6770,7 +6777,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
6770
6777
  @if (toggleMask()) {
6771
6778
  <button
6772
6779
  type="button"
6773
- class="inline-flex items-center absolute right-3 top-1/2 -translate-y-1/2 text-(--f-form-field-placeholder-color) hover:text-(--f-text-hover-color) cursor-pointer focus-visible:outline-none focus-visible:ring-focus rounded-sm"
6780
+ class="inline-flex items-center absolute right-3 top-1/2 -translate-y-1/2 text-(--f-form-field-placeholder-color) hover:text-(--f-text-hover-color) cursor-pointer focus:outline-none focus-visible:ring-focus rounded-sm"
6774
6781
  [attr.aria-label]="show() ? 'Hide password' : 'Show password'"
6775
6782
  [attr.aria-pressed]="show()"
6776
6783
  (click)="toggleShow()"
@@ -7200,7 +7207,7 @@ class SelectComponent {
7200
7207
  ...(ngDevMode ? [{ debugName: "_panelWidth" }] : /* istanbul ignore next */ []));
7201
7208
  panelClass = computed(() => {
7202
7209
  const position = this.appendTo() === 'body' ? 'fixed' : 'absolute w-full mt-1';
7203
- return `${position} z-50 bg-(--f-overlay-popover-background) border border-(--f-content-border-color) rounded-lg shadow-lg overflow-hidden`;
7210
+ return `${position} z-50 bg-(--f-overlay-popover-background) border border-(--f-content-border-color) f-overlay overflow-hidden`;
7204
7211
  }, /* @ts-ignore */
7205
7212
  ...(ngDevMode ? [{ debugName: "panelClass" }] : /* istanbul ignore next */ []));
7206
7213
  panelStyle = computed(() => {
@@ -7401,7 +7408,7 @@ class SelectComponent {
7401
7408
  }, /* @ts-ignore */
7402
7409
  ...(ngDevMode ? [{ debugName: "selectedLabel" }] : /* istanbul ignore next */ []));
7403
7410
  triggerClass = computed(() => {
7404
- const base = 'w-full flex items-center justify-between px-3 py-2 text-sm rounded-lg border bg-(--f-form-field-background) text-(--f-form-field-color) focus:outline-none focus-visible:ring-focus transition-all duration-[var(--f-transition-duration)]';
7411
+ const base = 'w-full flex items-center justify-between f-field text-sm border bg-(--f-form-field-background) text-(--f-form-field-color) focus:outline-none focus-visible:ring-focus transition-all duration-[var(--f-transition-duration)]';
7405
7412
  const showInvalid = this.invalid() && this.touched();
7406
7413
  const stateClass = this.open()
7407
7414
  ? showInvalid
@@ -8307,11 +8314,11 @@ class TextareaDirective {
8307
8314
  ? 'bg-(--f-form-field-filled-background)'
8308
8315
  : 'bg-(--f-form-field-background)';
8309
8316
  return [
8310
- 'block px-3 py-2 text-sm rounded-lg border',
8317
+ 'block f-field text-sm border',
8311
8318
  this.fluid() ? 'w-full' : 'w-auto',
8312
8319
  variantClass,
8313
8320
  'text-(--f-form-field-color) placeholder:text-(--f-form-field-placeholder-color)',
8314
- 'focus:outline-none focus:ring-focus',
8321
+ 'focus:outline-none focus-visible:ring-focus',
8315
8322
  'disabled:opacity-60 disabled:cursor-not-allowed',
8316
8323
  this.autoResize() ? 'resize-none overflow-hidden' : 'resize-y min-h-20',
8317
8324
  'transition-colors duration-[var(--f-transition-duration)]',
@@ -8367,8 +8374,8 @@ class ToggleButtonComponent {
8367
8374
  hostClass = computed(() => `inline-block ${this.styleClass()}`, /* @ts-ignore */
8368
8375
  ...(ngDevMode ? [{ debugName: "hostClass" }] : /* istanbul ignore next */ []));
8369
8376
  buttonClass = computed(() => {
8370
- const sizing = this.size() === 'small' ? 'px-2.5 py-1.5 text-xs' : this.size() === 'large' ? 'px-4 py-2.5 text-base' : 'px-3 py-2 text-sm';
8371
- const base = `inline-flex items-center gap-2 ${sizing} rounded-lg border transition-colors duration-[var(--f-transition-duration)] focus:outline-none focus-visible:ring-focus cursor-pointer disabled:opacity-60 disabled:cursor-not-allowed`;
8377
+ const sizing = this.size() === 'small' ? 'f-field-sm text-xs' : this.size() === 'large' ? 'f-field-lg text-base' : 'f-field text-sm';
8378
+ const base = `inline-flex items-center gap-2 ${sizing} border transition-colors duration-[var(--f-transition-duration)] focus:outline-none focus-visible:ring-focus cursor-pointer disabled:opacity-60 disabled:cursor-not-allowed`;
8372
8379
  if (this.checked())
8373
8380
  return `${base} ${severitySolidBackground(this.severity())}`;
8374
8381
  const borderClass = this.invalid() ? 'border-red-400' : 'border-(--f-form-field-border-color)';
@@ -8873,7 +8880,7 @@ class DialogComponent {
8873
8880
  <button
8874
8881
  type="button"
8875
8882
  [attr.aria-label]="maximized() ? 'Restore' : 'Maximize'"
8876
- class="w-7 h-7 flex items-center justify-center rounded-lg cursor-pointer text-(--f-text-muted-color) hover:text-(--f-text-hover-color) hover:bg-(--f-content-hover-background) transition-all duration-[var(--f-transition-duration)] focus-visible:outline-none focus-visible:ring-focus"
8883
+ class="w-7 h-7 flex items-center justify-center rounded-lg cursor-pointer text-(--f-text-muted-color) hover:text-(--f-text-hover-color) hover:bg-(--f-content-hover-background) transition-all duration-[var(--f-transition-duration)] focus:outline-none focus-visible:ring-focus"
8877
8884
  (click)="toggleMaximize()"
8878
8885
  >
8879
8886
  <ui-icon
@@ -8886,7 +8893,7 @@ class DialogComponent {
8886
8893
  <button
8887
8894
  type="button"
8888
8895
  aria-label="Close"
8889
- class="w-7 h-7 flex items-center justify-center rounded-lg cursor-pointer text-(--f-text-muted-color) hover:text-(--f-text-hover-color) hover:bg-(--f-content-hover-background) transition-all duration-[var(--f-transition-duration)] focus-visible:outline-none focus-visible:ring-focus"
8896
+ class="w-7 h-7 flex items-center justify-center rounded-lg cursor-pointer text-(--f-text-muted-color) hover:text-(--f-text-hover-color) hover:bg-(--f-content-hover-background) transition-all duration-[var(--f-transition-duration)] focus:outline-none focus-visible:ring-focus"
8890
8897
  (click)="close()"
8891
8898
  >
8892
8899
  <ui-icon name="times" class="text-xs"></ui-icon>
@@ -8964,7 +8971,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
8964
8971
  <button
8965
8972
  type="button"
8966
8973
  [attr.aria-label]="maximized() ? 'Restore' : 'Maximize'"
8967
- class="w-7 h-7 flex items-center justify-center rounded-lg cursor-pointer text-(--f-text-muted-color) hover:text-(--f-text-hover-color) hover:bg-(--f-content-hover-background) transition-all duration-[var(--f-transition-duration)] focus-visible:outline-none focus-visible:ring-focus"
8974
+ class="w-7 h-7 flex items-center justify-center rounded-lg cursor-pointer text-(--f-text-muted-color) hover:text-(--f-text-hover-color) hover:bg-(--f-content-hover-background) transition-all duration-[var(--f-transition-duration)] focus:outline-none focus-visible:ring-focus"
8968
8975
  (click)="toggleMaximize()"
8969
8976
  >
8970
8977
  <ui-icon
@@ -8977,7 +8984,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
8977
8984
  <button
8978
8985
  type="button"
8979
8986
  aria-label="Close"
8980
- class="w-7 h-7 flex items-center justify-center rounded-lg cursor-pointer text-(--f-text-muted-color) hover:text-(--f-text-hover-color) hover:bg-(--f-content-hover-background) transition-all duration-[var(--f-transition-duration)] focus-visible:outline-none focus-visible:ring-focus"
8987
+ class="w-7 h-7 flex items-center justify-center rounded-lg cursor-pointer text-(--f-text-muted-color) hover:text-(--f-text-hover-color) hover:bg-(--f-content-hover-background) transition-all duration-[var(--f-transition-duration)] focus:outline-none focus-visible:ring-focus"
8981
8988
  (click)="close()"
8982
8989
  >
8983
8990
  <ui-icon name="times" class="text-xs"></ui-icon>
@@ -9195,7 +9202,7 @@ class DrawerComponent {
9195
9202
  <button
9196
9203
  type="button"
9197
9204
  aria-label="Close"
9198
- class="w-7 h-7 flex items-center justify-center rounded-lg text-(--f-text-muted-color) hover:text-(--f-text-hover-color) hover:bg-(--f-content-hover-background) transition-all duration-[var(--f-transition-duration)] cursor-pointer focus-visible:outline-none focus-visible:ring-focus"
9205
+ class="w-7 h-7 flex items-center justify-center rounded-lg text-(--f-text-muted-color) hover:text-(--f-text-hover-color) hover:bg-(--f-content-hover-background) transition-all duration-[var(--f-transition-duration)] cursor-pointer focus:outline-none focus-visible:ring-focus"
9199
9206
  (click)="close()"
9200
9207
  >
9201
9208
  <ui-icon name="times" class="text-xs"></ui-icon>
@@ -9263,7 +9270,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
9263
9270
  <button
9264
9271
  type="button"
9265
9272
  aria-label="Close"
9266
- class="w-7 h-7 flex items-center justify-center rounded-lg text-(--f-text-muted-color) hover:text-(--f-text-hover-color) hover:bg-(--f-content-hover-background) transition-all duration-[var(--f-transition-duration)] cursor-pointer focus-visible:outline-none focus-visible:ring-focus"
9273
+ class="w-7 h-7 flex items-center justify-center rounded-lg text-(--f-text-muted-color) hover:text-(--f-text-hover-color) hover:bg-(--f-content-hover-background) transition-all duration-[var(--f-transition-duration)] cursor-pointer focus:outline-none focus-visible:ring-focus"
9267
9274
  (click)="close()"
9268
9275
  >
9269
9276
  <ui-icon name="times" class="text-xs"></ui-icon>
@@ -11014,7 +11021,7 @@ class PaginatorComponent {
11014
11021
  <span class="text-xs text-(--f-text-muted-color)">Rows:</span>
11015
11022
  <div class="relative">
11016
11023
  <select
11017
- class="h-7 pl-2 pr-6 text-xs font-medium rounded-lg border border-(--f-content-border-color) bg-(--f-content-background) text-(--f-text-color) cursor-pointer hover:border-(--f-content-border-color) focus:outline-none focus:border-primary focus:ring-focus transition-colors duration-[var(--f-transition-duration)] appearance-none"
11024
+ class="h-7 pl-2 pr-6 text-xs font-medium rounded-lg border border-(--f-content-border-color) bg-(--f-content-background) text-(--f-text-color) cursor-pointer hover:border-(--f-content-border-color) focus:outline-none focus:border-primary focus-visible:ring-focus transition-colors duration-[var(--f-transition-duration)] appearance-none"
11018
11025
  [attr.aria-label]="rowsPerPageAriaLabel()"
11019
11026
  (change)="onRowsChange($any($event.target).value)"
11020
11027
  >
@@ -11048,7 +11055,7 @@ class PaginatorComponent {
11048
11055
  @if (showJumpToPageInput()) {
11049
11056
  <input
11050
11057
  type="number"
11051
- class="w-14 h-8 text-xs text-center rounded-lg border border-(--f-content-border-color) bg-(--f-content-background) text-(--f-text-color) focus:outline-none focus:border-primary focus:ring-focus"
11058
+ class="w-14 h-8 text-xs text-center rounded-lg border border-(--f-content-border-color) bg-(--f-content-background) text-(--f-text-color) focus:outline-none focus:border-primary focus-visible:ring-focus"
11052
11059
  [min]="1" [max]="pageCount()"
11053
11060
  [value]="currentPage() + 1"
11054
11061
  [attr.aria-label]="jumpToPageAriaLabel()"
@@ -11058,7 +11065,7 @@ class PaginatorComponent {
11058
11065
  @if (showJumpToPageDropdown()) {
11059
11066
  <div class="relative">
11060
11067
  <select
11061
- class="h-8 pl-2 pr-6 text-xs font-medium rounded-lg border border-(--f-content-border-color) bg-(--f-content-background) text-(--f-text-color) cursor-pointer focus:outline-none focus:border-primary focus:ring-focus appearance-none"
11068
+ class="h-8 pl-2 pr-6 text-xs font-medium rounded-lg border border-(--f-content-border-color) bg-(--f-content-background) text-(--f-text-color) cursor-pointer focus:outline-none focus:border-primary focus-visible:ring-focus appearance-none"
11062
11069
  [attr.aria-label]="jumpToPageAriaLabel()"
11063
11070
  (change)="onJumpDropdown($any($event.target).value)"
11064
11071
  >
@@ -11104,7 +11111,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
11104
11111
  <span class="text-xs text-(--f-text-muted-color)">Rows:</span>
11105
11112
  <div class="relative">
11106
11113
  <select
11107
- class="h-7 pl-2 pr-6 text-xs font-medium rounded-lg border border-(--f-content-border-color) bg-(--f-content-background) text-(--f-text-color) cursor-pointer hover:border-(--f-content-border-color) focus:outline-none focus:border-primary focus:ring-focus transition-colors duration-[var(--f-transition-duration)] appearance-none"
11114
+ class="h-7 pl-2 pr-6 text-xs font-medium rounded-lg border border-(--f-content-border-color) bg-(--f-content-background) text-(--f-text-color) cursor-pointer hover:border-(--f-content-border-color) focus:outline-none focus:border-primary focus-visible:ring-focus transition-colors duration-[var(--f-transition-duration)] appearance-none"
11108
11115
  [attr.aria-label]="rowsPerPageAriaLabel()"
11109
11116
  (change)="onRowsChange($any($event.target).value)"
11110
11117
  >
@@ -11138,7 +11145,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
11138
11145
  @if (showJumpToPageInput()) {
11139
11146
  <input
11140
11147
  type="number"
11141
- class="w-14 h-8 text-xs text-center rounded-lg border border-(--f-content-border-color) bg-(--f-content-background) text-(--f-text-color) focus:outline-none focus:border-primary focus:ring-focus"
11148
+ class="w-14 h-8 text-xs text-center rounded-lg border border-(--f-content-border-color) bg-(--f-content-background) text-(--f-text-color) focus:outline-none focus:border-primary focus-visible:ring-focus"
11142
11149
  [min]="1" [max]="pageCount()"
11143
11150
  [value]="currentPage() + 1"
11144
11151
  [attr.aria-label]="jumpToPageAriaLabel()"
@@ -11148,7 +11155,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
11148
11155
  @if (showJumpToPageDropdown()) {
11149
11156
  <div class="relative">
11150
11157
  <select
11151
- class="h-8 pl-2 pr-6 text-xs font-medium rounded-lg border border-(--f-content-border-color) bg-(--f-content-background) text-(--f-text-color) cursor-pointer focus:outline-none focus:border-primary focus:ring-focus appearance-none"
11158
+ class="h-8 pl-2 pr-6 text-xs font-medium rounded-lg border border-(--f-content-border-color) bg-(--f-content-background) text-(--f-text-color) cursor-pointer focus:outline-none focus:border-primary focus-visible:ring-focus appearance-none"
11152
11159
  [attr.aria-label]="jumpToPageAriaLabel()"
11153
11160
  (change)="onJumpDropdown($any($event.target).value)"
11154
11161
  >
@@ -13553,7 +13560,7 @@ class AutoCompleteComponent {
13553
13560
  ...(ngDevMode ? [{ debugName: "_panelWidth" }] : /* istanbul ignore next */ []));
13554
13561
  panelClass = computed(() => {
13555
13562
  const position = this.appendTo() === 'body' ? 'fixed' : 'absolute w-full mt-1';
13556
- return `${position} z-50 bg-(--f-overlay-popover-background) border border-(--f-content-border-color) rounded-lg shadow-lg overflow-hidden`;
13563
+ return `${position} z-50 bg-(--f-overlay-popover-background) border border-(--f-content-border-color) f-overlay overflow-hidden`;
13557
13564
  }, /* @ts-ignore */
13558
13565
  ...(ngDevMode ? [{ debugName: "panelClass" }] : /* istanbul ignore next */ []));
13559
13566
  panelStyle = computed(() => {
@@ -13922,7 +13929,7 @@ class AutoCompleteComponent {
13922
13929
  @if (multiple()) {
13923
13930
  <div class="relative">
13924
13931
  <div
13925
- class="min-h-[2.375rem] flex flex-wrap items-center gap-1.5 px-2 py-1.5 border rounded-lg bg-(--f-form-field-background) focus-within:ring-focus transition-all duration-[var(--f-transition-duration)] cursor-text"
13932
+ class="min-h-[2.375rem] flex flex-wrap items-center gap-1.5 f-field-compact border bg-(--f-form-field-background) focus-within:ring-focus transition-all duration-[var(--f-transition-duration)] cursor-text"
13926
13933
  [class]="wrapperClass()"
13927
13934
  [class.pr-7]="showClear() || loading()"
13928
13935
  (click)="inputEl.focus()"
@@ -13989,7 +13996,7 @@ class AutoCompleteComponent {
13989
13996
  <div class="relative">
13990
13997
  <input
13991
13998
  type="text"
13992
- class="w-full px-3 py-2 text-sm border rounded-lg bg-(--f-form-field-background) focus:outline-none focus:ring-focus transition-all duration-[var(--f-transition-duration)]"
13999
+ class="w-full f-field text-sm border bg-(--f-form-field-background) focus:outline-none focus-visible:ring-focus transition-all duration-[var(--f-transition-duration)]"
13993
14000
  [class]="inputClass()"
13994
14001
  [placeholder]="placeholder()"
13995
14002
  [(ngModel)]="query"
@@ -14190,7 +14197,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
14190
14197
  @if (multiple()) {
14191
14198
  <div class="relative">
14192
14199
  <div
14193
- class="min-h-[2.375rem] flex flex-wrap items-center gap-1.5 px-2 py-1.5 border rounded-lg bg-(--f-form-field-background) focus-within:ring-focus transition-all duration-[var(--f-transition-duration)] cursor-text"
14200
+ class="min-h-[2.375rem] flex flex-wrap items-center gap-1.5 f-field-compact border bg-(--f-form-field-background) focus-within:ring-focus transition-all duration-[var(--f-transition-duration)] cursor-text"
14194
14201
  [class]="wrapperClass()"
14195
14202
  [class.pr-7]="showClear() || loading()"
14196
14203
  (click)="inputEl.focus()"
@@ -14257,7 +14264,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
14257
14264
  <div class="relative">
14258
14265
  <input
14259
14266
  type="text"
14260
- class="w-full px-3 py-2 text-sm border rounded-lg bg-(--f-form-field-background) focus:outline-none focus:ring-focus transition-all duration-[var(--f-transition-duration)]"
14267
+ class="w-full f-field text-sm border bg-(--f-form-field-background) focus:outline-none focus-visible:ring-focus transition-all duration-[var(--f-transition-duration)]"
14261
14268
  [class]="inputClass()"
14262
14269
  [placeholder]="placeholder()"
14263
14270
  [(ngModel)]="query"
@@ -14603,7 +14610,7 @@ class ColorPickerComponent {
14603
14610
  } @else {
14604
14611
  <button
14605
14612
  type="button"
14606
- class="w-8 h-8 rounded-lg border-2 border-(--f-content-border-color) shadow-sm hover:border-(--f-form-field-hover-border-color) transition-all cursor-pointer overflow-hidden focus-visible:outline-none focus-visible:ring-focus disabled:opacity-60 disabled:cursor-not-allowed"
14613
+ class="w-8 h-8 rounded-lg border-2 border-(--f-content-border-color) shadow-sm hover:border-(--f-form-field-hover-border-color) transition-all cursor-pointer overflow-hidden focus:outline-none focus-visible:ring-focus disabled:opacity-60 disabled:cursor-not-allowed"
14607
14614
  [style.background-color]="value()"
14608
14615
  [disabled]="disabled()"
14609
14616
  (click)="togglePanel($event)"
@@ -14621,7 +14628,7 @@ class ColorPickerComponent {
14621
14628
  </f-popover>
14622
14629
  } @else if (open()) {
14623
14630
  <div
14624
- class="absolute z-50 top-10 left-0 bg-(--f-overlay-popover-background) border border-(--f-content-border-color) rounded-lg shadow-lg p-3 w-56 space-y-3"
14631
+ class="absolute z-50 top-10 left-0 bg-(--f-overlay-popover-background) border border-(--f-content-border-color) f-overlay p-3 w-56 space-y-3"
14625
14632
  (keydown.escape)="closePanel()"
14626
14633
  >
14627
14634
  <ng-container [ngTemplateOutlet]="pickerPanel" />
@@ -14635,7 +14642,7 @@ class ColorPickerComponent {
14635
14642
  @for (color of presetColors; track color) {
14636
14643
  <button
14637
14644
  type="button"
14638
- class="w-6 h-6 rounded-md border border-(--f-content-border-color) hover:scale-110 transition-transform cursor-pointer focus-visible:outline-none focus-visible:ring-focus"
14645
+ class="w-6 h-6 rounded-md border border-(--f-content-border-color) hover:scale-110 transition-transform cursor-pointer focus:outline-none focus-visible:ring-focus"
14639
14646
  [style.background-color]="color"
14640
14647
  [class.ring-2]="value() === color"
14641
14648
  [class.ring-primary]="value() === color"
@@ -14653,7 +14660,7 @@ class ColorPickerComponent {
14653
14660
  ></div>
14654
14661
  <input
14655
14662
  type="text"
14656
- class="flex-1 px-2 py-1 text-xs border border-(--f-form-field-border-color) rounded-lg focus:outline-none focus:border-primary focus:ring-focus font-mono uppercase"
14663
+ class="flex-1 px-2 py-1 text-xs border border-(--f-form-field-border-color) rounded-lg focus:outline-none focus:border-primary focus-visible:ring-focus font-mono uppercase"
14657
14664
  [ngModel]="hexInput()"
14658
14665
  (ngModelChange)="onHexInput($event)"
14659
14666
  maxlength="7"
@@ -14689,7 +14696,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
14689
14696
  } @else {
14690
14697
  <button
14691
14698
  type="button"
14692
- class="w-8 h-8 rounded-lg border-2 border-(--f-content-border-color) shadow-sm hover:border-(--f-form-field-hover-border-color) transition-all cursor-pointer overflow-hidden focus-visible:outline-none focus-visible:ring-focus disabled:opacity-60 disabled:cursor-not-allowed"
14699
+ class="w-8 h-8 rounded-lg border-2 border-(--f-content-border-color) shadow-sm hover:border-(--f-form-field-hover-border-color) transition-all cursor-pointer overflow-hidden focus:outline-none focus-visible:ring-focus disabled:opacity-60 disabled:cursor-not-allowed"
14693
14700
  [style.background-color]="value()"
14694
14701
  [disabled]="disabled()"
14695
14702
  (click)="togglePanel($event)"
@@ -14707,7 +14714,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
14707
14714
  </f-popover>
14708
14715
  } @else if (open()) {
14709
14716
  <div
14710
- class="absolute z-50 top-10 left-0 bg-(--f-overlay-popover-background) border border-(--f-content-border-color) rounded-lg shadow-lg p-3 w-56 space-y-3"
14717
+ class="absolute z-50 top-10 left-0 bg-(--f-overlay-popover-background) border border-(--f-content-border-color) f-overlay p-3 w-56 space-y-3"
14711
14718
  (keydown.escape)="closePanel()"
14712
14719
  >
14713
14720
  <ng-container [ngTemplateOutlet]="pickerPanel" />
@@ -14721,7 +14728,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
14721
14728
  @for (color of presetColors; track color) {
14722
14729
  <button
14723
14730
  type="button"
14724
- class="w-6 h-6 rounded-md border border-(--f-content-border-color) hover:scale-110 transition-transform cursor-pointer focus-visible:outline-none focus-visible:ring-focus"
14731
+ class="w-6 h-6 rounded-md border border-(--f-content-border-color) hover:scale-110 transition-transform cursor-pointer focus:outline-none focus-visible:ring-focus"
14725
14732
  [style.background-color]="color"
14726
14733
  [class.ring-2]="value() === color"
14727
14734
  [class.ring-primary]="value() === color"
@@ -14739,7 +14746,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
14739
14746
  ></div>
14740
14747
  <input
14741
14748
  type="text"
14742
- class="flex-1 px-2 py-1 text-xs border border-(--f-form-field-border-color) rounded-lg focus:outline-none focus:border-primary focus:ring-focus font-mono uppercase"
14749
+ class="flex-1 px-2 py-1 text-xs border border-(--f-form-field-border-color) rounded-lg focus:outline-none focus:border-primary focus-visible:ring-focus font-mono uppercase"
14743
14750
  [ngModel]="hexInput()"
14744
14751
  (ngModelChange)="onHexInput($event)"
14745
14752
  maxlength="7"
@@ -15407,7 +15414,7 @@ class SplitButtonComponent {
15407
15414
  }, /* @ts-ignore */
15408
15415
  ...(ngDevMode ? [{ debugName: "dropdownClass" }] : /* istanbul ignore next */ []));
15409
15416
  menuPanelClass = computed(() => {
15410
- const base = 'z-50 min-w-[10rem] bg-(--f-overlay-popover-background) border border-(--f-content-border-color) rounded-lg shadow-lg overflow-hidden';
15417
+ const base = 'z-50 min-w-[10rem] bg-(--f-overlay-popover-background) border border-(--f-content-border-color) f-overlay overflow-hidden';
15411
15418
  const position = this.appendTo() === 'body' ? 'fixed' : 'absolute right-0 top-full mt-1';
15412
15419
  return `${position} ${base} ${this.menuStyleClass()}`;
15413
15420
  }, /* @ts-ignore */
@@ -15750,7 +15757,7 @@ class TreeSelectComponent {
15750
15757
  ...(ngDevMode ? [{ debugName: "_panelWidth" }] : /* istanbul ignore next */ []));
15751
15758
  panelClass = computed(() => {
15752
15759
  const position = this.appendTo() === 'body' ? 'fixed' : 'absolute w-full mt-1';
15753
- return `${position} z-50 bg-(--f-overlay-popover-background) border border-(--f-content-border-color) rounded-lg shadow-lg overflow-hidden`;
15760
+ return `${position} z-50 bg-(--f-overlay-popover-background) border border-(--f-content-border-color) f-overlay overflow-hidden`;
15754
15761
  }, /* @ts-ignore */
15755
15762
  ...(ngDevMode ? [{ debugName: "panelClass" }] : /* istanbul ignore next */ []));
15756
15763
  panelStyle = computed(() => {
@@ -15827,7 +15834,7 @@ class TreeSelectComponent {
15827
15834
  null, /* @ts-ignore */
15828
15835
  ...(ngDevMode ? [{ debugName: "emptyTpl" }] : /* istanbul ignore next */ []));
15829
15836
  triggerClass = computed(() => {
15830
- const base = 'w-full min-h-[34px] flex items-center gap-2 px-3 py-1.5 text-sm rounded-lg border bg-(--f-form-field-background) focus:outline-none focus-visible:ring-focus transition-all duration-[var(--f-transition-duration)]';
15837
+ const base = 'w-full min-h-[34px] flex items-center gap-2 f-field-compact text-sm border bg-(--f-form-field-background) focus:outline-none focus-visible:ring-focus transition-all duration-[var(--f-transition-duration)]';
15831
15838
  const showInvalid = this.invalid() && this.touched();
15832
15839
  const stateClass = this.open()
15833
15840
  ? showInvalid
@@ -16629,7 +16636,7 @@ class FieldsetComponent {
16629
16636
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: FieldsetComponent, isStandalone: true, selector: "f-fieldset", inputs: { legend: { classPropertyName: "legend", publicName: "legend", isSignal: true, isRequired: false, transformFunction: null }, toggleable: { classPropertyName: "toggleable", publicName: "toggleable", isSignal: true, isRequired: false, transformFunction: null }, collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null }, styleClass: { classPropertyName: "styleClass", publicName: "styleClass", isSignal: true, isRequired: false, transformFunction: null }, style: { classPropertyName: "style", publicName: "style", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { collapsed: "collapsedChange", onBeforeToggle: "onBeforeToggle", onAfterToggle: "onAfterToggle" }, host: { classAttribute: "block" }, queries: [{ propertyName: "legendTemplateRef", first: true, predicate: ["legend"], descendants: true, isSignal: true }, { propertyName: "fTemplates", predicate: FTemplateDirective, isSignal: true }], ngImport: i0, template: `
16630
16637
  <fieldset [class]="rootClass()" [style]="style()">
16631
16638
  <legend
16632
- class="px-2 text-sm font-semibold text-(--f-text-color) flex items-center gap-2 rounded focus-visible:outline-none focus-visible:ring-focus"
16639
+ class="px-2 text-sm font-semibold text-(--f-text-color) flex items-center gap-2 rounded-md focus:outline-none focus-visible:ring-focus"
16633
16640
  [class.cursor-pointer]="toggleable()"
16634
16641
  [attr.tabindex]="toggleable() ? 0 : null"
16635
16642
  [attr.role]="toggleable() ? 'button' : null"
@@ -16676,7 +16683,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
16676
16683
  template: `
16677
16684
  <fieldset [class]="rootClass()" [style]="style()">
16678
16685
  <legend
16679
- class="px-2 text-sm font-semibold text-(--f-text-color) flex items-center gap-2 rounded focus-visible:outline-none focus-visible:ring-focus"
16686
+ class="px-2 text-sm font-semibold text-(--f-text-color) flex items-center gap-2 rounded-md focus:outline-none focus-visible:ring-focus"
16680
16687
  [class.cursor-pointer]="toggleable()"
16681
16688
  [attr.tabindex]="toggleable() ? 0 : null"
16682
16689
  [attr.role]="toggleable() ? 'button' : null"
@@ -17789,7 +17796,7 @@ class MenubarComponent {
17789
17796
 
17790
17797
  <ng-template #submenuTpl let-list let-level="level">
17791
17798
  <ul
17792
- class="py-1 min-w-[12rem] bg-(--f-overlay-popover-background) border border-(--f-content-border-color) rounded-lg shadow-lg overflow-visible"
17799
+ class="py-1 min-w-[12rem] bg-(--f-overlay-popover-background) border border-(--f-content-border-color) f-overlay overflow-visible"
17793
17800
  role="menu"
17794
17801
  (keydown)="onSubmenuKeydown($event)"
17795
17802
  >
@@ -17981,7 +17988,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
17981
17988
 
17982
17989
  <ng-template #submenuTpl let-list let-level="level">
17983
17990
  <ul
17984
- class="py-1 min-w-[12rem] bg-(--f-overlay-popover-background) border border-(--f-content-border-color) rounded-lg shadow-lg overflow-visible"
17991
+ class="py-1 min-w-[12rem] bg-(--f-overlay-popover-background) border border-(--f-content-border-color) f-overlay overflow-visible"
17985
17992
  role="menu"
17986
17993
  (keydown)="onSubmenuKeydown($event)"
17987
17994
  >
@@ -18366,8 +18373,8 @@ class TieredMenuComponent {
18366
18373
  <ng-template #itemsTpl let-list let-root="root" let-level="level">
18367
18374
  <ul
18368
18375
  [class]="root
18369
- ? 'py-1 min-w-[12rem] bg-(--f-overlay-popover-background) border border-(--f-content-border-color) rounded-lg shadow-lg overflow-visible'
18370
- : 'py-1 min-w-[12rem] bg-(--f-overlay-popover-background) border border-(--f-content-border-color) rounded-lg shadow-lg overflow-visible absolute top-0 z-[70]'"
18376
+ ? 'py-1 min-w-[12rem] bg-(--f-overlay-popover-background) border border-(--f-content-border-color) f-overlay overflow-visible'
18377
+ : 'py-1 min-w-[12rem] bg-(--f-overlay-popover-background) border border-(--f-content-border-color) f-overlay overflow-visible absolute top-0 z-[70]'"
18371
18378
  [class.left-full]="!root && !flipByLevel()[level]"
18372
18379
  [class.ml-0.5]="!root && !flipByLevel()[level]"
18373
18380
  [class.right-full]="!root && flipByLevel()[level]"
@@ -18493,8 +18500,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
18493
18500
  <ng-template #itemsTpl let-list let-root="root" let-level="level">
18494
18501
  <ul
18495
18502
  [class]="root
18496
- ? 'py-1 min-w-[12rem] bg-(--f-overlay-popover-background) border border-(--f-content-border-color) rounded-lg shadow-lg overflow-visible'
18497
- : 'py-1 min-w-[12rem] bg-(--f-overlay-popover-background) border border-(--f-content-border-color) rounded-lg shadow-lg overflow-visible absolute top-0 z-[70]'"
18503
+ ? 'py-1 min-w-[12rem] bg-(--f-overlay-popover-background) border border-(--f-content-border-color) f-overlay overflow-visible'
18504
+ : 'py-1 min-w-[12rem] bg-(--f-overlay-popover-background) border border-(--f-content-border-color) f-overlay overflow-visible absolute top-0 z-[70]'"
18498
18505
  [class.left-full]="!root && !flipByLevel()[level]"
18499
18506
  [class.ml-0.5]="!root && !flipByLevel()[level]"
18500
18507
  [class.right-full]="!root && flipByLevel()[level]"
@@ -18786,7 +18793,7 @@ class ContextMenuComponent {
18786
18793
 
18787
18794
  <ng-template #listTpl let-items let-level="level">
18788
18795
  <ul
18789
- class="py-1 min-w-[12rem] bg-(--f-overlay-popover-background) border border-(--f-content-border-color) rounded-lg shadow-lg overflow-hidden"
18796
+ class="py-1 min-w-[12rem] bg-(--f-overlay-popover-background) border border-(--f-content-border-color) f-overlay overflow-hidden"
18790
18797
  role="menu"
18791
18798
  >
18792
18799
  @for (item of items; track $index) {
@@ -18886,7 +18893,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
18886
18893
 
18887
18894
  <ng-template #listTpl let-items let-level="level">
18888
18895
  <ul
18889
- class="py-1 min-w-[12rem] bg-(--f-overlay-popover-background) border border-(--f-content-border-color) rounded-lg shadow-lg overflow-hidden"
18896
+ class="py-1 min-w-[12rem] bg-(--f-overlay-popover-background) border border-(--f-content-border-color) f-overlay overflow-hidden"
18890
18897
  role="menu"
18891
18898
  >
18892
18899
  @for (item of items; track $index) {
@@ -19016,7 +19023,7 @@ class MegaMenuComponent {
19016
19023
  panelClass = computed(() => {
19017
19024
  const alignClass = this.panelAlign() === 'end' ? 'right-0' : 'left-0';
19018
19025
  const posClass = this.orientation() === 'vertical' ? 'left-full top-0 ml-1' : `${alignClass} top-full mt-1`;
19019
- return `absolute ${posClass} z-50 grid gap-8 p-5 bg-(--f-overlay-popover-background) border border-(--f-content-border-color) rounded-lg shadow-lg min-w-max max-h-[80vh] overflow-auto`;
19026
+ return `absolute ${posClass} z-50 grid gap-8 p-5 bg-(--f-overlay-popover-background) border border-(--f-content-border-color) f-overlay min-w-max max-h-[80vh] overflow-auto`;
19020
19027
  }, /* @ts-ignore */
19021
19028
  ...(ngDevMode ? [{ debugName: "panelClass" }] : /* istanbul ignore next */ []));
19022
19029
  rootItemClass(item) {
@@ -20555,7 +20562,7 @@ class InputOtpComponent {
20555
20562
  groupClass = computed(() => `flex items-center gap-2 ${this.styleClass()}`, /* @ts-ignore */
20556
20563
  ...(ngDevMode ? [{ debugName: "groupClass" }] : /* istanbul ignore next */ []));
20557
20564
  cellClass = computed(() => {
20558
- const base = `${this.sizeClass()} text-center font-semibold rounded-lg border bg-(--f-form-field-background) text-(--f-form-field-color) focus:outline-none focus:ring-focus transition-colors duration-[var(--f-transition-duration)] disabled:opacity-60 disabled:cursor-not-allowed`;
20565
+ const base = `${this.sizeClass()} text-center font-semibold f-field-shape border bg-(--f-form-field-background) text-(--f-form-field-color) focus:outline-none focus-visible:ring-focus transition-colors duration-[var(--f-transition-duration)] disabled:opacity-60 disabled:cursor-not-allowed`;
20559
20566
  const borderClass = this.invalid() ? 'border-red-400 focus:border-red-400' : 'border-(--f-form-field-border-color) focus:border-primary';
20560
20567
  return `${base} ${borderClass}`;
20561
20568
  }, /* @ts-ignore */
@@ -20773,7 +20780,7 @@ class SliderComponent {
20773
20780
  ...(ngDevMode ? [{ debugName: "rangeClass" }] : /* istanbul ignore next */ []));
20774
20781
  handleClass = computed(() => {
20775
20782
  const center = this.orientation() === 'vertical' ? 'left-1/2 -translate-x-1/2' : 'top-1/2 -translate-y-1/2';
20776
- return `absolute ${center} w-4 h-4 rounded-full bg-primary border-2 border-(--f-content-background) shadow cursor-grab active:cursor-grabbing focus-visible:outline-none focus-visible:ring-focus`;
20783
+ return `absolute ${center} w-4 h-4 rounded-full bg-primary border-2 border-(--f-content-background) shadow cursor-grab active:cursor-grabbing focus:outline-none focus-visible:ring-focus`;
20777
20784
  }, /* @ts-ignore */
20778
20785
  ...(ngDevMode ? [{ debugName: "handleClass" }] : /* istanbul ignore next */ []));
20779
20786
  toPercent(v) {
@@ -21106,7 +21113,7 @@ class KnobComponent {
21106
21113
  [attr.width]="size()"
21107
21114
  [attr.height]="size()"
21108
21115
  [attr.viewBox]="'0 0 ' + size() + ' ' + size()"
21109
- class="select-none focus-visible:outline-none focus-visible:ring-focus rounded-full"
21116
+ class="select-none focus:outline-none focus-visible:ring-focus rounded-full"
21110
21117
  [class.cursor-pointer]="!disabled() && !readonly()"
21111
21118
  [class.opacity-60]="disabled()"
21112
21119
  [attr.tabindex]="disabled() ? null : 0"
@@ -21154,7 +21161,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
21154
21161
  [attr.width]="size()"
21155
21162
  [attr.height]="size()"
21156
21163
  [attr.viewBox]="'0 0 ' + size() + ' ' + size()"
21157
- class="select-none focus-visible:outline-none focus-visible:ring-focus rounded-full"
21164
+ class="select-none focus:outline-none focus-visible:ring-focus rounded-full"
21158
21165
  [class.cursor-pointer]="!disabled() && !readonly()"
21159
21166
  [class.opacity-60]="disabled()"
21160
21167
  [attr.tabindex]="disabled() ? null : 0"
@@ -21241,7 +21248,7 @@ class CascadeSelectComponent {
21241
21248
  ...(ngDevMode ? [{ debugName: "_panelLeft" }] : /* istanbul ignore next */ []));
21242
21249
  panelClass = computed(() => {
21243
21250
  const position = this.appendTo() === 'body' ? 'fixed' : 'absolute mt-1';
21244
- return `${position} z-50 flex bg-(--f-overlay-popover-background) border border-(--f-content-border-color) rounded-lg shadow-lg overflow-hidden`;
21251
+ return `${position} z-50 flex bg-(--f-overlay-popover-background) border border-(--f-content-border-color) f-overlay overflow-hidden`;
21245
21252
  }, /* @ts-ignore */
21246
21253
  ...(ngDevMode ? [{ debugName: "panelClass" }] : /* istanbul ignore next */ []));
21247
21254
  panelStyle = computed(() => {
@@ -21318,7 +21325,7 @@ class CascadeSelectComponent {
21318
21325
  null, /* @ts-ignore */
21319
21326
  ...(ngDevMode ? [{ debugName: "emptyTpl" }] : /* istanbul ignore next */ []));
21320
21327
  triggerClass = computed(() => {
21321
- const base = 'w-full min-h-[34px] flex items-center gap-2 px-3 py-1.5 text-sm rounded-lg border bg-(--f-form-field-background) focus:outline-none focus-visible:ring-focus transition-all duration-[var(--f-transition-duration)]';
21328
+ const base = 'w-full min-h-[34px] flex items-center gap-2 f-field-compact text-sm border bg-(--f-form-field-background) focus:outline-none focus-visible:ring-focus transition-all duration-[var(--f-transition-duration)]';
21322
21329
  const showInvalid = this.invalid() && this.touched();
21323
21330
  const stateClass = this.open()
21324
21331
  ? showInvalid
@@ -22055,7 +22062,7 @@ class ConfirmPopupComponent {
22055
22062
  @if (c.target) {
22056
22063
  <div
22057
22064
  #panel
22058
- class="confirmpopup-panel fixed z-50 w-72 bg-(--f-overlay-popover-background) border border-(--f-content-border-color) rounded-lg shadow-lg p-4"
22065
+ class="confirmpopup-panel fixed z-50 w-72 bg-(--f-overlay-popover-background) border border-(--f-content-border-color) f-overlay p-4"
22059
22066
  [class]="styleClass()"
22060
22067
  [style]="style()"
22061
22068
  [style.top.px]="top()"
@@ -22116,7 +22123,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
22116
22123
  @if (c.target) {
22117
22124
  <div
22118
22125
  #panel
22119
- class="confirmpopup-panel fixed z-50 w-72 bg-(--f-overlay-popover-background) border border-(--f-content-border-color) rounded-lg shadow-lg p-4"
22126
+ class="confirmpopup-panel fixed z-50 w-72 bg-(--f-overlay-popover-background) border border-(--f-content-border-color) f-overlay p-4"
22120
22127
  [class]="styleClass()"
22121
22128
  [style]="style()"
22122
22129
  [style.top.px]="top()"
@@ -22385,7 +22392,7 @@ class InplaceComponent {
22385
22392
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: InplaceComponent, isStandalone: true, selector: "f-inplace", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, closable: { classPropertyName: "closable", publicName: "closable", isSignal: true, isRequired: false, transformFunction: null }, active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { active: "activeChange", onActivate: "onActivate", onDeactivate: "onDeactivate" }, host: { properties: { "attr.aria-live": "'polite'" }, classAttribute: "block" }, ngImport: i0, template: `
22386
22393
  @if (!active()) {
22387
22394
  <div
22388
- class="inline-flex items-center gap-2 px-2 py-1 rounded-md cursor-pointer hover:bg-(--f-content-hover-background) transition-colors focus-visible:outline-none focus-visible:ring-focus"
22395
+ class="inline-flex items-center gap-2 px-2 py-1 rounded-md cursor-pointer hover:bg-(--f-content-hover-background) transition-colors focus:outline-none focus-visible:ring-focus"
22389
22396
  [class.pointer-events-none]="disabled()"
22390
22397
  [class.opacity-60]="disabled()"
22391
22398
  [attr.tabindex]="disabled() ? null : 0"
@@ -22404,7 +22411,7 @@ class InplaceComponent {
22404
22411
  @if (closable()) {
22405
22412
  <button
22406
22413
  type="button"
22407
- class="w-6 h-6 flex items-center justify-center rounded-md text-(--f-text-muted-color) hover:bg-(--f-content-hover-background) focus-visible:outline-none focus-visible:ring-focus"
22414
+ class="w-6 h-6 flex items-center justify-center rounded-md text-(--f-text-muted-color) hover:bg-(--f-content-hover-background) focus:outline-none focus-visible:ring-focus"
22408
22415
  aria-label="Close"
22409
22416
  (click)="close()"
22410
22417
  >
@@ -22424,7 +22431,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
22424
22431
  template: `
22425
22432
  @if (!active()) {
22426
22433
  <div
22427
- class="inline-flex items-center gap-2 px-2 py-1 rounded-md cursor-pointer hover:bg-(--f-content-hover-background) transition-colors focus-visible:outline-none focus-visible:ring-focus"
22434
+ class="inline-flex items-center gap-2 px-2 py-1 rounded-md cursor-pointer hover:bg-(--f-content-hover-background) transition-colors focus:outline-none focus-visible:ring-focus"
22428
22435
  [class.pointer-events-none]="disabled()"
22429
22436
  [class.opacity-60]="disabled()"
22430
22437
  [attr.tabindex]="disabled() ? null : 0"
@@ -22443,7 +22450,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
22443
22450
  @if (closable()) {
22444
22451
  <button
22445
22452
  type="button"
22446
- class="w-6 h-6 flex items-center justify-center rounded-md text-(--f-text-muted-color) hover:bg-(--f-content-hover-background) focus-visible:outline-none focus-visible:ring-focus"
22453
+ class="w-6 h-6 flex items-center justify-center rounded-md text-(--f-text-muted-color) hover:bg-(--f-content-hover-background) focus:outline-none focus-visible:ring-focus"
22447
22454
  aria-label="Close"
22448
22455
  (click)="close()"
22449
22456
  >
@@ -26286,7 +26293,7 @@ class ImageCompareComponent {
26286
26293
  aria-valuemin="0"
26287
26294
  aria-valuemax="100"
26288
26295
  [attr.aria-valuenow]="Math.round(position())"
26289
- class="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-8 h-8 rounded-full bg-white shadow-lg flex items-center justify-center cursor-ew-resize focus-visible:outline-none focus-visible:ring-focus"
26296
+ class="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-8 h-8 rounded-full bg-white shadow-lg flex items-center justify-center cursor-ew-resize focus:outline-none focus-visible:ring-focus"
26290
26297
  (keydown)="onKeydown($event)"
26291
26298
  (mousedown)="$event.stopPropagation(); onDown($event)"
26292
26299
  (touchstart)="$event.stopPropagation(); onTouchDown($event)"
@@ -26328,7 +26335,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImpor
26328
26335
  aria-valuemin="0"
26329
26336
  aria-valuemax="100"
26330
26337
  [attr.aria-valuenow]="Math.round(position())"
26331
- class="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-8 h-8 rounded-full bg-white shadow-lg flex items-center justify-center cursor-ew-resize focus-visible:outline-none focus-visible:ring-focus"
26338
+ class="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-8 h-8 rounded-full bg-white shadow-lg flex items-center justify-center cursor-ew-resize focus:outline-none focus-visible:ring-focus"
26332
26339
  (keydown)="onKeydown($event)"
26333
26340
  (mousedown)="$event.stopPropagation(); onDown($event)"
26334
26341
  (touchstart)="$event.stopPropagation(); onTouchDown($event)"
@@ -26836,12 +26843,18 @@ const NOIR_PRIMARY = {
26836
26843
  '900': 'var(--f-surface-900)', '950': 'var(--f-surface-950)',
26837
26844
  };
26838
26845
 
26846
+ /* Aura — soft and elevated. Rounded controls, compact rows, diffuse shadows
26847
+ carrying the elevation, hairline borders. This is the app's default look, so
26848
+ its values are the ones every other preset is a departure from. */
26839
26849
  const AURA_PRESET = {
26840
26850
  name: 'Aura',
26841
- borderRadius: '6px',
26851
+ radiusXs: '2px',
26842
26852
  borderRadiusSm: '4px',
26853
+ borderRadius: '6px',
26843
26854
  borderRadiusLg: '8px',
26844
26855
  borderRadiusXl: '12px',
26856
+ radius3xl: '16px',
26857
+ radius4xl: '20px',
26845
26858
  borderWidth: '1px',
26846
26859
  shadowSm: '0 1px 2px 0 rgb(0 0 0 / 0.05)',
26847
26860
  shadow: '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)',
@@ -26852,9 +26865,19 @@ const AURA_PRESET = {
26852
26865
  focusRingWidth: '1px',
26853
26866
  focusRingStyle: 'solid',
26854
26867
  focusRingOffset: '2px',
26855
- buttonFontWeight: '500',
26856
26868
  highlightVariant: 'tint',
26857
26869
  strongBorders: false,
26870
+ fieldPaddingX: '0.75rem',
26871
+ fieldPaddingY: '0.5rem',
26872
+ fieldBorderRadius: '6px',
26873
+ fieldFontWeight: '400',
26874
+ buttonPaddingX: '1rem',
26875
+ buttonPaddingY: '0.5rem',
26876
+ buttonBorderRadius: '6px',
26877
+ buttonFontWeight: '500',
26878
+ buttonLetterSpacing: '0em',
26879
+ overlayBorderRadius: '6px',
26880
+ overlayShadow: '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)',
26858
26881
  selectButton: {
26859
26882
  background: 'var(--f-track-background)',
26860
26883
  borderColor: 'transparent',
@@ -26872,34 +26895,51 @@ const AURA_PRESET = {
26872
26895
  cardPadding: '1.25rem',
26873
26896
  cardGap: '0.5rem',
26874
26897
  cardShadow: '0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1)',
26875
- sidebarBorderWidth: '0',
26898
+ sidebarBorderWidth: '0px',
26876
26899
  sidebarRadius: 'var(--f-border-radius-xl)',
26877
26900
  sidebarShadow: '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)',
26878
- topbarBorderWidth: '0',
26901
+ topbarBorderWidth: '0px',
26879
26902
  topbarShadow: '0 1px 2px 0 rgb(0 0 0 / 0.05)',
26880
26903
  menuItemActiveRadius: '9999px',
26881
- menuItemActiveBorderWidth: '0',
26904
+ menuItemActiveBorderWidth: '0px',
26882
26905
  signaturePrimary: 'violet',
26883
26906
  };
26884
- const NORA_PRESET = {
26885
- name: 'Nora',
26886
- borderRadius: '2px',
26887
- borderRadiusSm: '2px',
26888
- borderRadiusLg: '2px',
26889
- borderRadiusXl: '2px',
26890
- borderWidth: '2px',
26891
- shadowSm: '0 1px 2px 0 rgb(0 0 0 / 0.05)',
26892
- shadow: '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)',
26893
- shadowLg: '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)',
26894
- shadowXl: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',
26895
- shadow2xl: '0 25px 50px -12px rgb(0 0 0 / 0.25)',
26896
- transitionDuration: '0s',
26907
+ /* Lara — structural and flat. Corners tighten, rows grow noticeably taller,
26908
+ shadows all but disappear and separation comes from linework instead, and type
26909
+ thickens. Switching from Aura should read as a different product, not a
26910
+ different accent colour. */
26911
+ const LARA_PRESET = {
26912
+ name: 'Lara',
26913
+ radiusXs: '2px',
26914
+ borderRadiusSm: '3px',
26915
+ borderRadius: '4px',
26916
+ borderRadiusLg: '6px',
26917
+ borderRadiusXl: '8px',
26918
+ radius3xl: '10px',
26919
+ radius4xl: '12px',
26920
+ borderWidth: '1px',
26921
+ shadowSm: '0 1px 1px 0 rgba(0, 0, 0, 0.04)',
26922
+ shadow: '0 1px 2px 0 rgba(0, 0, 0, 0.06)',
26923
+ shadowLg: '0 2px 6px -1px rgba(0, 0, 0, 0.08)',
26924
+ shadowXl: '0 6px 14px -6px rgba(0, 0, 0, 0.12)',
26925
+ shadow2xl: '0 10px 24px -10px rgba(0, 0, 0, 0.18)',
26926
+ transitionDuration: '0.15s',
26897
26927
  focusRingWidth: '2px',
26898
26928
  focusRingStyle: 'solid',
26899
- focusRingOffset: '-1px',
26900
- buttonFontWeight: '700',
26901
- highlightVariant: 'solid',
26902
- strongBorders: true,
26929
+ focusRingOffset: '0px',
26930
+ highlightVariant: 'tint',
26931
+ strongBorders: false,
26932
+ fieldPaddingX: '0.875rem',
26933
+ fieldPaddingY: '0.75rem',
26934
+ fieldBorderRadius: '4px',
26935
+ fieldFontWeight: '500',
26936
+ buttonPaddingX: '1.125rem',
26937
+ buttonPaddingY: '0.75rem',
26938
+ buttonBorderRadius: '4px',
26939
+ buttonFontWeight: '600',
26940
+ buttonLetterSpacing: '0em',
26941
+ overlayBorderRadius: '4px',
26942
+ overlayShadow: '0 6px 14px -6px rgba(0, 0, 0, 0.12)',
26903
26943
  selectButton: {
26904
26944
  background: 'var(--f-form-field-background)',
26905
26945
  borderColor: 'var(--f-form-field-border-color)',
@@ -26907,44 +26947,60 @@ const NORA_PRESET = {
26907
26947
  padding: '0px',
26908
26948
  itemColor: 'var(--f-text-muted-color)',
26909
26949
  itemHoverBackground: 'var(--f-content-hover-background)',
26910
- checkedBackground: 'var(--f-primary-color)',
26911
- checkedColor: 'var(--f-primary-contrast-color)',
26950
+ checkedBackground: 'var(--f-highlight-background)',
26951
+ checkedColor: 'var(--f-highlight-color)',
26912
26952
  checkedShadow: 'none',
26913
26953
  fontWeight: '600',
26914
26954
  itemBorderRadius: '0px',
26915
26955
  },
26916
- cardBorderRadius: '4px',
26917
- cardPadding: '1.25rem',
26918
- cardGap: '0.5rem',
26919
- cardShadow: '0 1px 4px 0 rgba(0, 0, 0, 0.1)',
26920
- sidebarBorderWidth: '2px',
26921
- sidebarRadius: '0',
26956
+ cardBorderRadius: '6px',
26957
+ cardPadding: '1.5rem',
26958
+ cardGap: '0.75rem',
26959
+ cardShadow: '0 0 #0000',
26960
+ sidebarBorderWidth: '1px',
26961
+ sidebarRadius: '0px',
26922
26962
  sidebarShadow: 'none',
26923
- topbarBorderWidth: '2px',
26963
+ topbarBorderWidth: '1px',
26924
26964
  topbarShadow: 'none',
26925
- menuItemActiveRadius: '0',
26926
- menuItemActiveBorderWidth: '0',
26927
- signaturePrimary: 'noir',
26965
+ menuItemActiveRadius: 'var(--f-border-radius-sm)',
26966
+ menuItemActiveBorderWidth: '3px',
26967
+ signaturePrimary: 'blue',
26928
26968
  };
26929
- const LARA_PRESET = {
26930
- name: 'Lara',
26931
- borderRadius: '6px',
26932
- borderRadiusSm: '4px',
26933
- borderRadiusLg: '8px',
26934
- borderRadiusXl: '12px',
26935
- borderWidth: '1px',
26936
- shadowSm: '0 1px 2px 0 rgba(0, 0, 0, 0.08)',
26937
- shadow: '0 1px 3px rgba(0, 0, 0, 0.1)',
26938
- shadowLg: '0 2px 12px 0 rgba(0, 0, 0, 0.1)',
26939
- shadowXl: '0 1px 3px rgba(0, 0, 0, 0.3)',
26940
- shadow2xl: '0 4px 12px 0 rgba(0, 0, 0, 0.35)',
26941
- transitionDuration: '0.2s',
26942
- focusRingWidth: '0',
26943
- focusRingStyle: 'none',
26944
- focusRingOffset: '0',
26945
- buttonFontWeight: '600',
26946
- highlightVariant: 'tint',
26947
- strongBorders: false,
26969
+ /* Nora — sharp and brutalist. Every corner squared, every line doubled, motion
26970
+ removed, selection painted solid rather than tinted, and type at its heaviest.
26971
+ Only overlays keep a shadow, so a dropdown still separates from the page. */
26972
+ const NORA_PRESET = {
26973
+ name: 'Nora',
26974
+ radiusXs: '0px',
26975
+ borderRadiusSm: '0px',
26976
+ borderRadius: '0px',
26977
+ borderRadiusLg: '0px',
26978
+ borderRadiusXl: '0px',
26979
+ radius3xl: '0px',
26980
+ radius4xl: '0px',
26981
+ borderWidth: '2px',
26982
+ shadowSm: '0 0 #0000',
26983
+ shadow: '0 0 #0000',
26984
+ shadowLg: '0 8px 16px -8px rgb(0 0 0 / 0.25)',
26985
+ shadowXl: '0 12px 24px -12px rgb(0 0 0 / 0.3)',
26986
+ shadow2xl: '0 16px 32px -16px rgb(0 0 0 / 0.35)',
26987
+ transitionDuration: '0s',
26988
+ focusRingWidth: '2px',
26989
+ focusRingStyle: 'solid',
26990
+ focusRingOffset: '-1px',
26991
+ highlightVariant: 'solid',
26992
+ strongBorders: true,
26993
+ fieldPaddingX: '0.75rem',
26994
+ fieldPaddingY: '0.5rem',
26995
+ fieldBorderRadius: '0px',
26996
+ fieldFontWeight: '500',
26997
+ buttonPaddingX: '1rem',
26998
+ buttonPaddingY: '0.5rem',
26999
+ buttonBorderRadius: '0px',
27000
+ buttonFontWeight: '700',
27001
+ buttonLetterSpacing: '0.025em',
27002
+ overlayBorderRadius: '0px',
27003
+ overlayShadow: '0 8px 16px -8px rgb(0 0 0 / 0.25)',
26948
27004
  selectButton: {
26949
27005
  background: 'var(--f-form-field-background)',
26950
27006
  borderColor: 'var(--f-form-field-border-color)',
@@ -26952,24 +27008,24 @@ const LARA_PRESET = {
26952
27008
  padding: '0px',
26953
27009
  itemColor: 'var(--f-text-muted-color)',
26954
27010
  itemHoverBackground: 'var(--f-content-hover-background)',
26955
- checkedBackground: 'var(--f-highlight-background)',
26956
- checkedColor: 'var(--f-highlight-color)',
27011
+ checkedBackground: 'var(--f-primary-color)',
27012
+ checkedColor: 'var(--f-primary-contrast-color)',
26957
27013
  checkedShadow: 'none',
26958
- fontWeight: '500',
27014
+ fontWeight: '700',
26959
27015
  itemBorderRadius: '0px',
26960
27016
  },
26961
- cardBorderRadius: '8px',
26962
- cardPadding: '1.5rem',
26963
- cardGap: '0.75rem',
26964
- cardShadow: '0 0.125rem 0.25rem rgba(0, 0, 0, 0.075)',
26965
- sidebarBorderWidth: '1px',
26966
- sidebarRadius: '0',
27017
+ cardBorderRadius: '0px',
27018
+ cardPadding: '1.25rem',
27019
+ cardGap: '0.5rem',
27020
+ cardShadow: '0 0 #0000',
27021
+ sidebarBorderWidth: '2px',
27022
+ sidebarRadius: '0px',
26967
27023
  sidebarShadow: 'none',
26968
- topbarBorderWidth: '1px',
27024
+ topbarBorderWidth: '2px',
26969
27025
  topbarShadow: 'none',
26970
- menuItemActiveRadius: 'var(--f-border-radius-sm)',
26971
- menuItemActiveBorderWidth: '3px',
26972
- signaturePrimary: 'blue',
27026
+ menuItemActiveRadius: '0px',
27027
+ menuItemActiveBorderWidth: '0px',
27028
+ signaturePrimary: 'noir',
26973
27029
  };
26974
27030
  const PRESETS = {
26975
27031
  Aura: AURA_PRESET,
@@ -26988,6 +27044,11 @@ function applyPrimaryPalette(palette, isDark = false, root = document.documentEl
26988
27044
  setVar(`--f-primary-${shade}`, palette[shade], root);
26989
27045
  }
26990
27046
  const isNoir = palette['50'].startsWith('var(');
27047
+ // Skins that paint their own chrome from the primary ramp — the modern shell's
27048
+ // gradient canvas — need to know the ramp is a neutral: ink that reads over a
27049
+ // saturated colour is unreadable over pale grey. Published as a class because CSS
27050
+ // cannot branch on a custom property's value.
27051
+ root.classList.toggle('f-primary-noir', isNoir);
26991
27052
  if (isNoir) {
26992
27053
  if (isDark) {
26993
27054
  setVar('--f-primary-color', 'var(--f-surface-50)', root);
@@ -27082,11 +27143,18 @@ function applyDarkSemantics(root = document.documentElement) {
27082
27143
  }
27083
27144
  // ─── Preset tokens ─────────────────────────────────────────────────────────────
27084
27145
  function applyPreset(preset, root = document.documentElement) {
27146
+ // Semantic radius steps — what the layout SCSS and the component templates name.
27085
27147
  setVar('--f-content-border-radius', preset.borderRadius, root);
27086
27148
  setVar('--f-border-radius-sm', preset.borderRadiusSm, root);
27087
27149
  setVar('--f-border-radius-md', preset.borderRadius, root);
27088
27150
  setVar('--f-border-radius-lg', preset.borderRadiusLg, root);
27089
27151
  setVar('--f-border-radius-xl', preset.borderRadiusXl, root);
27152
+ // The two ends of Tailwind's rounded-* scale that the semantic steps don't cover.
27153
+ // Without them `rounded-xs` / `rounded-3xl` / `rounded-4xl` keep Tailwind's fixed
27154
+ // defaults and stay the same shape no matter which preset is active.
27155
+ setVar('--f-radius-xs', preset.radiusXs, root);
27156
+ setVar('--f-radius-3xl', preset.radius3xl, root);
27157
+ setVar('--f-radius-4xl', preset.radius4xl, root);
27090
27158
  setVar('--f-border-width', preset.borderWidth, root);
27091
27159
  setVar('--f-transition-duration', preset.transitionDuration, root);
27092
27160
  setVar('--f-focus-ring-width', preset.focusRingWidth, root);
@@ -27099,7 +27167,19 @@ function applyPreset(preset, root = document.documentElement) {
27099
27167
  setVar('--f-shadow-lg', preset.shadowLg, root);
27100
27168
  setVar('--f-shadow-xl', preset.shadowXl, root);
27101
27169
  setVar('--f-shadow-2xl', preset.shadow2xl, root);
27170
+ // Control density and shape. Fields and buttons read these instead of fixed
27171
+ // padding classes, so a preset controls how airy or dense the whole UI reads.
27172
+ setVar('--f-field-padding-x', preset.fieldPaddingX, root);
27173
+ setVar('--f-field-padding-y', preset.fieldPaddingY, root);
27174
+ setVar('--f-field-border-radius', preset.fieldBorderRadius, root);
27175
+ setVar('--f-field-font-weight', preset.fieldFontWeight, root);
27176
+ setVar('--f-button-padding-x', preset.buttonPaddingX, root);
27177
+ setVar('--f-button-padding-y', preset.buttonPaddingY, root);
27178
+ setVar('--f-button-border-radius', preset.buttonBorderRadius, root);
27102
27179
  setVar('--f-button-font-weight', preset.buttonFontWeight, root);
27180
+ setVar('--f-button-letter-spacing', preset.buttonLetterSpacing, root);
27181
+ setVar('--f-overlay-border-radius', preset.overlayBorderRadius, root);
27182
+ setVar('--f-overlay-shadow', preset.overlayShadow, root);
27103
27183
  setVar('--f-card-border-radius', preset.cardBorderRadius, root);
27104
27184
  setVar('--f-card-padding', preset.cardPadding, root);
27105
27185
  setVar('--f-card-gap', preset.cardGap, root);
@@ -27123,8 +27203,20 @@ function applyPreset(preset, root = document.documentElement) {
27123
27203
  setVar('--f-selectbutton-checked-shadow', sb.checkedShadow, root);
27124
27204
  setVar('--f-selectbutton-font-weight', sb.fontWeight, root);
27125
27205
  setVar('--f-selectbutton-item-border-radius', sb.itemBorderRadius, root);
27206
+ // The active preset, published for the rare rule that cannot be expressed as a
27207
+ // token — a skin that needs to know it is being asked for a square, borderless
27208
+ // or motionless design language rather than reading each token back out.
27209
+ root.dataset['fPreset'] = preset.name;
27210
+ }
27211
+ /** The options the last `applyTheme` ran with, so a later re-apply — the dark-mode
27212
+ flip, above all — rebuilds the theme the user is actually looking at instead of
27213
+ the one the app booted with. */
27214
+ let appliedTheme = {};
27215
+ function getAppliedTheme() {
27216
+ return { ...appliedTheme };
27126
27217
  }
27127
27218
  function applyTheme(options, root = document.documentElement) {
27219
+ appliedTheme = { ...options };
27128
27220
  const presetName = (options.preset ?? 'Aura');
27129
27221
  const preset = PRESETS[presetName] ?? PRESETS['Aura'];
27130
27222
  const primaryName = options.primary ?? 'violet';
@@ -27200,16 +27292,22 @@ function initializeNgUITheme(options, platformId) {
27200
27292
  const isDark = document.documentElement.classList.contains(darkModeSelector.replace('.', '')) ||
27201
27293
  document.documentElement.getAttribute('class')?.includes('app-dark') === true;
27202
27294
  applyTheme({ ...themeOptions, darkTheme: isDark });
27203
- // Apply dark mode semantics on toggle
27204
- const observer = new MutationObserver((mutations) => {
27205
- for (const mutation of mutations) {
27206
- if (mutation.type === 'attributes' && mutation.attributeName === 'class') {
27207
- const el = mutation.target;
27208
- const nowDark = el.classList.contains('app-dark');
27209
- const presetKeys = themeOptions;
27210
- applyTheme({ ...presetKeys, darkTheme: nowDark });
27211
- }
27212
- }
27295
+ // Re-apply the semantics when dark mode flips. Two things matter here:
27296
+ //
27297
+ // * Only a real light/dark flip may trigger a re-apply. The root element carries
27298
+ // other theme classes too — `f-primary-noir`, published whenever the primary
27299
+ // ramp is a neutral — and reacting to those turned picking the Nora preset
27300
+ // (whose signature primary is noir) into a self-inflicted theme reset.
27301
+ // * The re-apply rebuilds the theme the user is currently on, not the one the app
27302
+ // booted with. `themeOptions` is the bootstrap snapshot and goes stale the
27303
+ // moment anyone touches the configurator.
27304
+ let wasDark = isDark;
27305
+ const observer = new MutationObserver(() => {
27306
+ const nowDark = document.documentElement.classList.contains('app-dark');
27307
+ if (nowDark === wasDark)
27308
+ return;
27309
+ wasDark = nowDark;
27310
+ applyTheme({ ...getAppliedTheme(), darkTheme: nowDark });
27213
27311
  });
27214
27312
  observer.observe(document.documentElement, { attributes: true, attributeFilter: ['class'] });
27215
27313
  };