@flusys/ng-ui 6.3.0 → 6.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -1
- package/fesm2022/flusys-ng-ui.mjs +290 -192
- package/fesm2022/flusys-ng-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/themes/tailwind.scss +124 -1
- package/types/flusys-ng-ui.d.ts +18 -8
|
@@ -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
|
-
|
|
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
|
-
? '
|
|
522
|
-
: '
|
|
522
|
+
? 'f-btn-icon-sm text-xs'
|
|
523
|
+
: 'f-btn-sm text-xs'
|
|
523
524
|
: sz === 'large'
|
|
524
525
|
? iconOnly
|
|
525
|
-
? '
|
|
526
|
-
: '
|
|
526
|
+
? 'f-btn-icon-lg text-base'
|
|
527
|
+
: 'f-btn-lg text-base'
|
|
527
528
|
: iconOnly
|
|
528
|
-
? '
|
|
529
|
-
: '
|
|
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
|
|
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
|
|
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()", "
|
|
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)
|
|
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
|
|
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
|
|
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)
|
|
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
|
|
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
|
|
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
|
|
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)
|
|
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
|
|
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
|
|
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)
|
|
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
|
|
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
|
|
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'
|
|
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-
|
|
4768
|
-
: '[&_input]:pl-
|
|
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
|
-
|
|
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
|
|
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-
|
|
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
|
-
|
|
5187
|
-
|
|
5188
|
-
|
|
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
|
|
5197
|
+
'block border',
|
|
5191
5198
|
this.fluid() ? 'w-full' : 'w-auto',
|
|
5192
|
-
|
|
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)
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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)
|
|
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
|
|
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
|
|
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' ? '
|
|
8371
|
-
const base = `inline-flex items-center gap-2 ${sizing}
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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)
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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)
|
|
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
|
|
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
|
|
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)
|
|
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
|
|
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)
|
|
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)
|
|
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
|
|
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
|
|
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
|
|
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)
|
|
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)
|
|
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)
|
|
18370
|
-
: 'py-1 min-w-[12rem] bg-(--f-overlay-popover-background) border border-(--f-content-border-color)
|
|
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)
|
|
18497
|
-
: 'py-1 min-w-[12rem] bg-(--f-overlay-popover-background) border border-(--f-content-border-color)
|
|
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)
|
|
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)
|
|
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)
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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)
|
|
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
|
|
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)
|
|
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)
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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: '
|
|
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: '
|
|
26901
|
+
topbarBorderWidth: '0px',
|
|
26879
26902
|
topbarShadow: '0 1px 2px 0 rgb(0 0 0 / 0.05)',
|
|
26880
26903
|
menuItemActiveRadius: '9999px',
|
|
26881
|
-
menuItemActiveBorderWidth: '
|
|
26904
|
+
menuItemActiveBorderWidth: '0px',
|
|
26882
26905
|
signaturePrimary: 'violet',
|
|
26883
26906
|
};
|
|
26884
|
-
|
|
26885
|
-
|
|
26886
|
-
|
|
26887
|
-
|
|
26888
|
-
|
|
26889
|
-
|
|
26890
|
-
|
|
26891
|
-
|
|
26892
|
-
|
|
26893
|
-
|
|
26894
|
-
|
|
26895
|
-
|
|
26896
|
-
|
|
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: '
|
|
26900
|
-
|
|
26901
|
-
|
|
26902
|
-
|
|
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-
|
|
26911
|
-
checkedColor: 'var(--f-
|
|
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: '
|
|
26917
|
-
cardPadding: '1.
|
|
26918
|
-
cardGap: '0.
|
|
26919
|
-
cardShadow: '0
|
|
26920
|
-
sidebarBorderWidth: '
|
|
26921
|
-
sidebarRadius: '
|
|
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: '
|
|
26963
|
+
topbarBorderWidth: '1px',
|
|
26924
26964
|
topbarShadow: 'none',
|
|
26925
|
-
menuItemActiveRadius: '
|
|
26926
|
-
menuItemActiveBorderWidth: '
|
|
26927
|
-
signaturePrimary: '
|
|
26965
|
+
menuItemActiveRadius: 'var(--f-border-radius-sm)',
|
|
26966
|
+
menuItemActiveBorderWidth: '3px',
|
|
26967
|
+
signaturePrimary: 'blue',
|
|
26928
26968
|
};
|
|
26929
|
-
|
|
26930
|
-
|
|
26931
|
-
|
|
26932
|
-
|
|
26933
|
-
|
|
26934
|
-
|
|
26935
|
-
|
|
26936
|
-
|
|
26937
|
-
|
|
26938
|
-
|
|
26939
|
-
|
|
26940
|
-
|
|
26941
|
-
|
|
26942
|
-
|
|
26943
|
-
|
|
26944
|
-
|
|
26945
|
-
|
|
26946
|
-
|
|
26947
|
-
|
|
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-
|
|
26956
|
-
checkedColor: 'var(--f-
|
|
27011
|
+
checkedBackground: 'var(--f-primary-color)',
|
|
27012
|
+
checkedColor: 'var(--f-primary-contrast-color)',
|
|
26957
27013
|
checkedShadow: 'none',
|
|
26958
|
-
fontWeight: '
|
|
27014
|
+
fontWeight: '700',
|
|
26959
27015
|
itemBorderRadius: '0px',
|
|
26960
27016
|
},
|
|
26961
|
-
cardBorderRadius: '
|
|
26962
|
-
cardPadding: '1.
|
|
26963
|
-
cardGap: '0.
|
|
26964
|
-
cardShadow: '0 0
|
|
26965
|
-
sidebarBorderWidth: '
|
|
26966
|
-
sidebarRadius: '
|
|
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: '
|
|
27024
|
+
topbarBorderWidth: '2px',
|
|
26969
27025
|
topbarShadow: 'none',
|
|
26970
|
-
menuItemActiveRadius: '
|
|
26971
|
-
menuItemActiveBorderWidth: '
|
|
26972
|
-
signaturePrimary: '
|
|
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
|
-
//
|
|
27204
|
-
|
|
27205
|
-
|
|
27206
|
-
|
|
27207
|
-
|
|
27208
|
-
|
|
27209
|
-
|
|
27210
|
-
|
|
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
|
};
|