@praxisui/dynamic-fields 3.0.0-beta.1 → 3.0.0-beta.3
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/fesm2022/praxisui-dynamic-fields-index-CY-plw8X.mjs +2 -0
- package/fesm2022/praxisui-dynamic-fields-index-CY-plw8X.mjs.map +1 -0
- package/fesm2022/praxisui-dynamic-fields-index-CsBUpYPm.mjs +2 -0
- package/fesm2022/praxisui-dynamic-fields-index-CsBUpYPm.mjs.map +1 -0
- package/fesm2022/praxisui-dynamic-fields-index-DlL36zZl.mjs +2 -0
- package/fesm2022/praxisui-dynamic-fields-index-DlL36zZl.mjs.map +1 -0
- package/fesm2022/praxisui-dynamic-fields.mjs +2252 -172
- package/fesm2022/praxisui-dynamic-fields.mjs.map +1 -1
- package/index.d.ts +201 -3
- package/package.json +5 -5
|
@@ -3,7 +3,7 @@ import { NgControl, FormControl, Validators, ReactiveFormsModule, NG_VALUE_ACCES
|
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
4
|
import { InjectionToken, inject, DestroyRef, ElementRef, ChangeDetectorRef, Injector, signal, output, computed, Input, Directive, viewChild, effect, Injectable, EventEmitter, ViewContainerRef, ViewChild, HostListener, HostBinding, Output, ViewEncapsulation, ChangeDetectionStrategy, Component, Inject, forwardRef, LOCALE_ID, ViewChildren, TemplateRef, ContentChild, ENVIRONMENT_INITIALIZER, APP_INITIALIZER, Optional } from '@angular/core';
|
|
5
5
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
6
|
-
import { providePraxisI18n, PraxisI18nService, isCssTextTransform, getTextTransformer, GenericCrudService, GlobalConfigService, INLINE_FILTER_CONTROL_TYPES, FieldSelectorRegistry, FIELD_SELECTOR_REGISTRY_BASE, FIELD_SELECTOR_REGISTRY_DISABLE_DEFAULTS, LoggerService,
|
|
6
|
+
import { providePraxisI18n, PraxisI18nService, isCssTextTransform, getTextTransformer, GenericCrudService, GlobalConfigService, INLINE_FILTER_CONTROL_TYPES, FieldControlType, FieldSelectorRegistry, FIELD_SELECTOR_REGISTRY_BASE, FIELD_SELECTOR_REGISTRY_DISABLE_DEFAULTS, LoggerService, resolveInlineFilterControlType, DEFAULT_FIELD_SELECTOR_CONTROL_TYPE_MAP, PraxisIconDirective, resolveBuiltinPresets, createCpfCnpjValidator, NumericFormat, interpolatePraxisTranslation, ComponentMetadataRegistry, FIELD_METADATA_CAPABILITIES } from '@praxisui/core';
|
|
7
7
|
import { BehaviorSubject, combineLatest, Subscription, firstValueFrom, fromEvent, take as take$1, of, EMPTY } from 'rxjs';
|
|
8
8
|
import { Router } from '@angular/router';
|
|
9
9
|
import * as i1$2 from '@angular/material/dialog';
|
|
@@ -869,6 +869,11 @@ class SimpleBaseInputComponent {
|
|
|
869
869
|
const componentState = this.componentState();
|
|
870
870
|
const ngControl = this.getNgControl();
|
|
871
871
|
const parentInvalid = !!ngControl?.invalid;
|
|
872
|
+
const parentTouched = !!ngControl?.touched;
|
|
873
|
+
const parentDirty = !!ngControl?.dirty;
|
|
874
|
+
const controlState = this.control();
|
|
875
|
+
const controlTouched = !!controlState.touched;
|
|
876
|
+
const controlDirty = !!controlState.dirty;
|
|
872
877
|
const errors = ngControl?.errors ?? this.control().errors;
|
|
873
878
|
const meta = this.metadata();
|
|
874
879
|
const trig = meta?.validators?.validationTrigger;
|
|
@@ -883,13 +888,19 @@ class SimpleBaseInputComponent {
|
|
|
883
888
|
case 'immediate':
|
|
884
889
|
return true;
|
|
885
890
|
case 'blur':
|
|
886
|
-
return componentState.touched;
|
|
891
|
+
return componentState.touched || parentTouched || controlTouched;
|
|
887
892
|
case 'submit':
|
|
888
893
|
// Praxis onSubmit marca todos como touched; usamos esse sinal
|
|
889
|
-
return componentState.touched;
|
|
894
|
+
return componentState.touched || parentTouched || controlTouched;
|
|
890
895
|
case 'change':
|
|
891
896
|
default:
|
|
892
|
-
return (componentState.dirty
|
|
897
|
+
return (componentState.dirty
|
|
898
|
+
|| componentState.touched
|
|
899
|
+
|| parentDirty
|
|
900
|
+
|| parentTouched
|
|
901
|
+
|| controlDirty
|
|
902
|
+
|| controlTouched)
|
|
903
|
+
&& this.errorDisplayReady();
|
|
893
904
|
}
|
|
894
905
|
}, ...(ngDevMode ? [{ debugName: "hasValidationError" }] : []));
|
|
895
906
|
/** CSS classes básicas do componente */
|
|
@@ -1492,10 +1503,12 @@ class SimpleBaseInputComponent {
|
|
|
1492
1503
|
// =============================================================================
|
|
1493
1504
|
setupFormControlIntegration() {
|
|
1494
1505
|
const control = this.control();
|
|
1506
|
+
this.syncComponentStateFromControl(control);
|
|
1495
1507
|
control.valueChanges
|
|
1496
1508
|
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
1497
1509
|
.subscribe((value) => {
|
|
1498
1510
|
this.fieldState.update((state) => ({ ...state, value }));
|
|
1511
|
+
this.syncComponentStateFromControl(control);
|
|
1499
1512
|
});
|
|
1500
1513
|
control.statusChanges
|
|
1501
1514
|
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
@@ -1505,6 +1518,7 @@ class SimpleBaseInputComponent {
|
|
|
1505
1518
|
valid: status === 'VALID',
|
|
1506
1519
|
errors: control.errors,
|
|
1507
1520
|
}));
|
|
1521
|
+
this.syncComponentStateFromControl(control);
|
|
1508
1522
|
this.refreshErrorTooltip();
|
|
1509
1523
|
});
|
|
1510
1524
|
// Sincronizar erros/estado do controle pai apenas quando usando controle interno
|
|
@@ -1520,35 +1534,51 @@ class SimpleBaseInputComponent {
|
|
|
1520
1534
|
errors: errs,
|
|
1521
1535
|
valid: !errs,
|
|
1522
1536
|
}));
|
|
1537
|
+
this.syncComponentStateFromControl(control);
|
|
1523
1538
|
this.refreshErrorTooltip();
|
|
1524
1539
|
this.cdr.markForCheck();
|
|
1525
1540
|
});
|
|
1526
1541
|
}
|
|
1527
1542
|
}
|
|
1543
|
+
syncComponentStateFromControl(control) {
|
|
1544
|
+
this.componentState.update((state) => ({
|
|
1545
|
+
...state,
|
|
1546
|
+
touched: !!control.touched,
|
|
1547
|
+
dirty: !!control.dirty,
|
|
1548
|
+
disabled: !!control.disabled,
|
|
1549
|
+
}));
|
|
1550
|
+
}
|
|
1528
1551
|
// Atualiza tooltip/atributos de erro quando erros mudam e quando inline errors estiverem desabilitados
|
|
1529
1552
|
refreshErrorTooltip() {
|
|
1530
1553
|
if (!this.nativeElement)
|
|
1531
1554
|
return;
|
|
1532
|
-
// Só aplica tooltip nativo quando errorPosition === 'tooltip' e não houver MatTooltip no template
|
|
1533
|
-
// Força avaliação de tooltipPosition para evitar aviso de membro não utilizado
|
|
1534
|
-
void this.tooltipPosition();
|
|
1535
|
-
if (!this.tooltipEnabled()) {
|
|
1536
|
-
this.nativeElement.removeAttribute('title');
|
|
1537
|
-
this.nativeElement.removeAttribute('aria-invalid');
|
|
1538
|
-
return;
|
|
1539
|
-
}
|
|
1540
1555
|
const hasErrors = !!(this.getNgControl()?.errors ?? this.control().errors);
|
|
1541
1556
|
if (hasErrors) {
|
|
1542
|
-
const msg = this.errorMessage();
|
|
1543
|
-
if (msg)
|
|
1544
|
-
this.nativeElement.setAttribute('title', msg);
|
|
1545
1557
|
this.nativeElement.setAttribute('aria-invalid', 'true');
|
|
1558
|
+
if (this.tooltipEnabled()) {
|
|
1559
|
+
// Força avaliação de tooltipPosition para evitar aviso de membro não utilizado
|
|
1560
|
+
void this.tooltipPosition();
|
|
1561
|
+
const msg = this.errorMessage();
|
|
1562
|
+
if (msg) {
|
|
1563
|
+
this.nativeElement.setAttribute('title', msg);
|
|
1564
|
+
}
|
|
1565
|
+
else {
|
|
1566
|
+
this.nativeElement.removeAttribute('title');
|
|
1567
|
+
}
|
|
1568
|
+
}
|
|
1569
|
+
else {
|
|
1570
|
+
this.nativeElement.removeAttribute('title');
|
|
1571
|
+
}
|
|
1546
1572
|
}
|
|
1547
1573
|
else {
|
|
1548
1574
|
this.nativeElement.removeAttribute('title');
|
|
1549
1575
|
this.nativeElement.removeAttribute('aria-invalid');
|
|
1550
1576
|
}
|
|
1551
1577
|
}
|
|
1578
|
+
ariaInvalidAttribute() {
|
|
1579
|
+
const hasErrors = !!(this.getNgControl()?.errors ?? this.control().errors);
|
|
1580
|
+
return hasErrors ? 'true' : null;
|
|
1581
|
+
}
|
|
1552
1582
|
tDynamicFields(keySuffix, fallback, params) {
|
|
1553
1583
|
return this.i18n.t(`praxis.dynamicFields.${keySuffix}`, params, fallback, 'dynamicFields');
|
|
1554
1584
|
}
|
|
@@ -2404,6 +2434,8 @@ class SimpleBaseSelectComponent extends SimpleBaseInputComponent {
|
|
|
2404
2434
|
maxSelections = signal(null, ...(ngDevMode ? [{ debugName: "maxSelections" }] : []));
|
|
2405
2435
|
/** Backend resource path for dynamic option loading */
|
|
2406
2436
|
resourcePath = signal(null, ...(ngDevMode ? [{ debugName: "resourcePath" }] : []));
|
|
2437
|
+
/** Canonical source for derived options */
|
|
2438
|
+
optionSource = signal(null, ...(ngDevMode ? [{ debugName: "optionSource" }] : []));
|
|
2407
2439
|
/** Criteria applied to backend filtering */
|
|
2408
2440
|
filterCriteria = signal({}, ...(ngDevMode ? [{ debugName: "filterCriteria" }] : []));
|
|
2409
2441
|
/** Field used for option labels when loading from backend */
|
|
@@ -2472,18 +2504,26 @@ class SimpleBaseSelectComponent extends SimpleBaseInputComponent {
|
|
|
2472
2504
|
? null
|
|
2473
2505
|
: this.resolveDynamicFieldsMessage(this.dynamicFieldsI18n?.select?.emptyOptionText, 'select.emptyOptionText', '').trim() || null;
|
|
2474
2506
|
this.emptyOptionText.set(isMultiple ? null : (metadata.emptyOptionText ?? fallbackEmptyOption));
|
|
2475
|
-
const
|
|
2507
|
+
const optionSource = metadata.optionSource ?? null;
|
|
2508
|
+
this.optionSource.set(optionSource);
|
|
2509
|
+
const path = optionSource?.resourcePath ?? metadata.resourcePath ?? metadata.endpoint;
|
|
2476
2510
|
if (path) {
|
|
2477
2511
|
this.resourcePath.set(path);
|
|
2478
2512
|
this.filterCriteria.set(metadata.filterCriteria ?? {});
|
|
2479
|
-
const needLabel = !metadata.optionLabelKey;
|
|
2480
|
-
const needValue = !metadata.optionValueKey;
|
|
2513
|
+
const needLabel = !metadata.optionLabelKey && !optionSource;
|
|
2514
|
+
const needValue = !metadata.optionValueKey && !optionSource;
|
|
2481
2515
|
if (metadata.optionLabelKey) {
|
|
2482
2516
|
this.optionLabelKey.set(metadata.optionLabelKey);
|
|
2483
2517
|
}
|
|
2518
|
+
else if (optionSource) {
|
|
2519
|
+
this.optionLabelKey.set('label');
|
|
2520
|
+
}
|
|
2484
2521
|
if (metadata.optionValueKey) {
|
|
2485
2522
|
this.optionValueKey.set(metadata.optionValueKey);
|
|
2486
2523
|
}
|
|
2524
|
+
else if (optionSource) {
|
|
2525
|
+
this.optionValueKey.set('id');
|
|
2526
|
+
}
|
|
2487
2527
|
this.configureCrudService(path);
|
|
2488
2528
|
if (needLabel || needValue) {
|
|
2489
2529
|
this.loadSchema(needLabel, needValue);
|
|
@@ -2919,12 +2959,22 @@ class SimpleBaseSelectComponent extends SimpleBaseInputComponent {
|
|
|
2919
2959
|
return;
|
|
2920
2960
|
}
|
|
2921
2961
|
const filter = { ...criteria };
|
|
2922
|
-
if (searchTerm) {
|
|
2962
|
+
if (searchTerm && !this.optionSource()) {
|
|
2923
2963
|
filter[this.optionLabelKey()] = searchTerm;
|
|
2924
2964
|
}
|
|
2925
2965
|
this.loading.set(true);
|
|
2926
|
-
this.
|
|
2927
|
-
.
|
|
2966
|
+
const request$ = this.optionSource()
|
|
2967
|
+
? this.crudService.filterOptionSourceOptions(this.optionSource().key, filter, { pageNumber: page, pageSize: this.pageSize() }, {
|
|
2968
|
+
search: searchTerm || undefined,
|
|
2969
|
+
includeIds: this.optionSource().includeIds
|
|
2970
|
+
? this.currentIncludeIds()
|
|
2971
|
+
: undefined,
|
|
2972
|
+
})
|
|
2973
|
+
: this.crudService.filter(filter, {
|
|
2974
|
+
pageNumber: page,
|
|
2975
|
+
pageSize: this.pageSize(),
|
|
2976
|
+
});
|
|
2977
|
+
request$
|
|
2928
2978
|
.pipe(takeUntilDestroyed(this.destroyRef), take(1))
|
|
2929
2979
|
.subscribe({
|
|
2930
2980
|
next: (resp) => {
|
|
@@ -2950,6 +3000,16 @@ class SimpleBaseSelectComponent extends SimpleBaseInputComponent {
|
|
|
2950
3000
|
},
|
|
2951
3001
|
});
|
|
2952
3002
|
}
|
|
3003
|
+
currentIncludeIds() {
|
|
3004
|
+
const currentValue = this.control().value;
|
|
3005
|
+
if (Array.isArray(currentValue)) {
|
|
3006
|
+
return currentValue.filter((value) => value !== null && value !== undefined && value !== '');
|
|
3007
|
+
}
|
|
3008
|
+
if (currentValue === null || currentValue === undefined || currentValue === '') {
|
|
3009
|
+
return [];
|
|
3010
|
+
}
|
|
3011
|
+
return [currentValue];
|
|
3012
|
+
}
|
|
2953
3013
|
/** Dev-only warning when legacy alias keys are used instead of canonical ones */
|
|
2954
3014
|
devWarnSelectAliases(meta, component) {
|
|
2955
3015
|
const isDev = () => typeof globalThis.ngDevMode !== 'undefined'
|
|
@@ -3300,6 +3360,9 @@ const RETRY_DELAY = 1000; // 1 segundo
|
|
|
3300
3360
|
* Focado no essencial: registro, carregamento e cache básico
|
|
3301
3361
|
*/
|
|
3302
3362
|
const { SELECT: INLINE_SELECT_CONTROL_TYPE, MULTI_SELECT: INLINE_MULTI_SELECT_CONTROL_TYPE, INPUT: INLINE_INPUT_CONTROL_TYPE, TOGGLE: INLINE_TOGGLE_CONTROL_TYPE, RANGE: INLINE_RANGE_CONTROL_TYPE, SEARCHABLE_SELECT: INLINE_SEARCHABLE_SELECT_CONTROL_TYPE, ASYNC_SELECT: INLINE_ASYNC_SELECT_CONTROL_TYPE, ENTITY_LOOKUP: INLINE_ENTITY_LOOKUP_CONTROL_TYPE, AUTOCOMPLETE: INLINE_AUTOCOMPLETE_CONTROL_TYPE, NUMBER: INLINE_NUMBER_CONTROL_TYPE, CURRENCY: INLINE_CURRENCY_CONTROL_TYPE, CURRENCY_RANGE: INLINE_CURRENCY_RANGE_CONTROL_TYPE, DATE: INLINE_DATE_CONTROL_TYPE, DATE_RANGE: INLINE_DATE_RANGE_CONTROL_TYPE, TIME: INLINE_TIME_CONTROL_TYPE, TIME_RANGE: INLINE_TIME_RANGE_CONTROL_TYPE, TREE_SELECT: INLINE_TREE_SELECT_CONTROL_TYPE, RATING: INLINE_RATING_CONTROL_TYPE, DISTANCE_RADIUS: INLINE_DISTANCE_RADIUS_CONTROL_TYPE, PIPELINE_STATUS: INLINE_PIPELINE_STATUS_CONTROL_TYPE, SCORE_PRIORITY: INLINE_SCORE_PRIORITY_CONTROL_TYPE, RELATIVE_PERIOD: INLINE_RELATIVE_PERIOD_CONTROL_TYPE, SENTIMENT: INLINE_SENTIMENT_CONTROL_TYPE, COLOR_LABEL: INLINE_COLOR_LABEL_CONTROL_TYPE, } = INLINE_FILTER_CONTROL_TYPES;
|
|
3363
|
+
const INLINE_PERIOD_RANGE_CONTROL_TYPE = FieldControlType.INLINE_PERIOD_RANGE;
|
|
3364
|
+
const INLINE_YEAR_RANGE_CONTROL_TYPE = FieldControlType.INLINE_YEAR_RANGE;
|
|
3365
|
+
const INLINE_MONTH_RANGE_CONTROL_TYPE = FieldControlType.INLINE_MONTH_RANGE;
|
|
3303
3366
|
function lazyComponent(loader, exportName) {
|
|
3304
3367
|
return async () => loader().then((module) => module[exportName]);
|
|
3305
3368
|
}
|
|
@@ -3558,6 +3621,9 @@ class ComponentRegistryService {
|
|
|
3558
3621
|
this.register(INLINE_INPUT_CONTROL_TYPE, lazyComponent(() => import('./praxisui-dynamic-fields-index-iIeaA6ko.mjs'), 'InlineInputComponent'));
|
|
3559
3622
|
this.register(INLINE_TOGGLE_CONTROL_TYPE, lazyComponent(() => import('./praxisui-dynamic-fields-index-BMHfcV1t.mjs'), 'InlineToggleComponent'));
|
|
3560
3623
|
this.register(INLINE_RANGE_CONTROL_TYPE, lazyComponent(() => import('./praxisui-dynamic-fields-index-DYV54GUZ.mjs'), 'InlineRangeSliderComponent'));
|
|
3624
|
+
this.register(INLINE_PERIOD_RANGE_CONTROL_TYPE, lazyComponent(() => import('./praxisui-dynamic-fields-index-CsBUpYPm.mjs'), 'InlinePeriodRangeComponent'));
|
|
3625
|
+
this.register(INLINE_YEAR_RANGE_CONTROL_TYPE, lazyComponent(() => import('./praxisui-dynamic-fields-index-CY-plw8X.mjs'), 'InlineYearRangeComponent'));
|
|
3626
|
+
this.register(INLINE_MONTH_RANGE_CONTROL_TYPE, lazyComponent(() => import('./praxisui-dynamic-fields-index-DlL36zZl.mjs'), 'InlineMonthRangeComponent'));
|
|
3561
3627
|
this.register(INLINE_DATE_CONTROL_TYPE, lazyComponent(() => import('./praxisui-dynamic-fields-index-CfZxkljy.mjs'), 'InlineDateComponent'));
|
|
3562
3628
|
this.register(INLINE_DATE_RANGE_CONTROL_TYPE, lazyComponent(() => import('./praxisui-dynamic-fields-index-7NLgtZV4.mjs'), 'InlineDateRangeComponent'));
|
|
3563
3629
|
this.register(INLINE_TIME_CONTROL_TYPE, lazyComponent(() => import('./praxisui-dynamic-fields-index-DD5h8DRG.mjs'), 'InlineTimeComponent'));
|
|
@@ -7689,6 +7755,7 @@ class TextInputComponent extends SimpleBaseInputComponent {
|
|
|
7689
7755
|
[minlength]="metadata()?.minLength || null"
|
|
7690
7756
|
[attr.aria-label]="!label && placeholder ? placeholder : null"
|
|
7691
7757
|
[attr.aria-required]="metadata()?.required ? 'true' : 'false'"
|
|
7758
|
+
[attr.aria-invalid]="ariaInvalidAttribute()"
|
|
7692
7759
|
[matTooltip]="tooltipEnabled() ? errorMessage() : null"
|
|
7693
7760
|
[matTooltipDisabled]="!(tooltipEnabled() && !!errorMessage())"
|
|
7694
7761
|
[matTooltipPosition]="tooltipPosition()"
|
|
@@ -7780,6 +7847,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
7780
7847
|
[minlength]="metadata()?.minLength || null"
|
|
7781
7848
|
[attr.aria-label]="!label && placeholder ? placeholder : null"
|
|
7782
7849
|
[attr.aria-required]="metadata()?.required ? 'true' : 'false'"
|
|
7850
|
+
[attr.aria-invalid]="ariaInvalidAttribute()"
|
|
7783
7851
|
[matTooltip]="tooltipEnabled() ? errorMessage() : null"
|
|
7784
7852
|
[matTooltipDisabled]="!(tooltipEnabled() && !!errorMessage())"
|
|
7785
7853
|
[matTooltipPosition]="tooltipPosition()"
|
|
@@ -15432,6 +15500,9 @@ class MaterialAsyncSelectComponent extends SimpleBaseSelectComponent {
|
|
|
15432
15500
|
dataVersion;
|
|
15433
15501
|
useCursor = false;
|
|
15434
15502
|
// Uses protected `global` from base class
|
|
15503
|
+
isCategoricalBucketOptionSource(optionSource) {
|
|
15504
|
+
return String(optionSource?.type || '').trim().toUpperCase() === 'CATEGORICAL_BUCKET';
|
|
15505
|
+
}
|
|
15435
15506
|
setSelectMetadata(metadata) {
|
|
15436
15507
|
// Normalize and store metadata without triggering the base's remote load
|
|
15437
15508
|
this.devWarnSelectAliases(metadata, 'MaterialAsyncSelectComponent');
|
|
@@ -15450,28 +15521,40 @@ class MaterialAsyncSelectComponent extends SimpleBaseSelectComponent {
|
|
|
15450
15521
|
}
|
|
15451
15522
|
// Apply base input metadata (placeholder, validators, a11y, etc.)
|
|
15452
15523
|
super.setMetadata({ ...metadata });
|
|
15524
|
+
const optionSource = metadata.optionSource ?? null;
|
|
15525
|
+
const isCategoricalBucket = this.isCategoricalBucketOptionSource(optionSource);
|
|
15453
15526
|
// Local select configuration
|
|
15454
15527
|
if (mappedOptions)
|
|
15455
15528
|
this.options.set(mappedOptions);
|
|
15456
15529
|
this.multiple.set(!!metadata.multiple);
|
|
15457
|
-
this.searchable.set(
|
|
15530
|
+
this.searchable.set(metadata.searchable ?? !isCategoricalBucket);
|
|
15458
15531
|
this.selectAll.set(!!metadata.selectAll);
|
|
15459
15532
|
this.maxSelections.set(metadata.maxSelections ?? null);
|
|
15460
15533
|
this.emptyOptionText.set(this.multiple() ? null : (metadata.emptyOptionText ?? null));
|
|
15461
15534
|
// Load strategy: default 'open' to avoid unnecessary requests
|
|
15462
15535
|
const loadOn = metadata.loadOn ??
|
|
15536
|
+
(isCategoricalBucket ? 'init' : undefined) ??
|
|
15463
15537
|
this.global.getDynamicFields()?.asyncSelect?.loadOn ??
|
|
15464
15538
|
'open';
|
|
15465
15539
|
this.initialLoadStrategy = loadOn;
|
|
15466
15540
|
// Remote config without auto-loading here (avoid duplicate /filter on init)
|
|
15467
|
-
|
|
15541
|
+
this.optionSource.set(optionSource);
|
|
15542
|
+
const path = optionSource?.resourcePath ?? metadata.resourcePath;
|
|
15468
15543
|
if (path) {
|
|
15469
15544
|
this.resourcePath.set(path);
|
|
15470
15545
|
this.filterCriteria.set(metadata.filterCriteria ?? {});
|
|
15471
|
-
if (metadata.optionLabelKey)
|
|
15546
|
+
if (metadata.optionLabelKey) {
|
|
15472
15547
|
this.optionLabelKey.set(metadata.optionLabelKey);
|
|
15473
|
-
|
|
15548
|
+
}
|
|
15549
|
+
else if (optionSource) {
|
|
15550
|
+
this.optionLabelKey.set('label');
|
|
15551
|
+
}
|
|
15552
|
+
if (metadata.optionValueKey) {
|
|
15474
15553
|
this.optionValueKey.set(metadata.optionValueKey);
|
|
15554
|
+
}
|
|
15555
|
+
else if (optionSource) {
|
|
15556
|
+
this.optionValueKey.set('id');
|
|
15557
|
+
}
|
|
15475
15558
|
if (this.lastConfiguredPath !== path) {
|
|
15476
15559
|
this.configureCrudService(path);
|
|
15477
15560
|
this.lastConfiguredPath = path;
|
|
@@ -15548,8 +15631,11 @@ class MaterialAsyncSelectComponent extends SimpleBaseSelectComponent {
|
|
|
15548
15631
|
const ids = this.getSelectedIds();
|
|
15549
15632
|
if (!ids.length)
|
|
15550
15633
|
return;
|
|
15551
|
-
this.
|
|
15552
|
-
|
|
15634
|
+
const optionSource = this.optionSource();
|
|
15635
|
+
const request$ = optionSource
|
|
15636
|
+
? this.crudService.getOptionSourceOptionsByIds(optionSource.key, ids)
|
|
15637
|
+
: this.crudService.getOptionsByIds(ids);
|
|
15638
|
+
request$
|
|
15553
15639
|
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
15554
15640
|
.subscribe((opts) => {
|
|
15555
15641
|
const returned = new Set(opts.map((o) => o.id));
|
|
@@ -15571,7 +15657,7 @@ class MaterialAsyncSelectComponent extends SimpleBaseSelectComponent {
|
|
|
15571
15657
|
}
|
|
15572
15658
|
const term = this.termControl.value || '';
|
|
15573
15659
|
const filter = { ...this.filterCriteria() };
|
|
15574
|
-
if (term) {
|
|
15660
|
+
if (term && !this.optionSource()) {
|
|
15575
15661
|
filter[this.optionLabelKey()] = term;
|
|
15576
15662
|
}
|
|
15577
15663
|
const selected = this.getSelectedIds();
|
|
@@ -15597,11 +15683,18 @@ class MaterialAsyncSelectComponent extends SimpleBaseSelectComponent {
|
|
|
15597
15683
|
}));
|
|
15598
15684
|
}
|
|
15599
15685
|
const page = this.pageIndex();
|
|
15600
|
-
|
|
15601
|
-
|
|
15602
|
-
|
|
15603
|
-
|
|
15604
|
-
|
|
15686
|
+
const optionSource = this.optionSource();
|
|
15687
|
+
const request$ = optionSource
|
|
15688
|
+
? this.crudService.filterOptionSourceOptions(optionSource.key, filter, { pageNumber: page, pageSize: this.pageSize() }, {
|
|
15689
|
+
...(include || {}),
|
|
15690
|
+
observeVersionHeader: observeVersion,
|
|
15691
|
+
search: term || undefined,
|
|
15692
|
+
})
|
|
15693
|
+
: this.crudService.filterOptions(filter, { pageNumber: page, pageSize: this.pageSize() }, {
|
|
15694
|
+
...(include || {}),
|
|
15695
|
+
observeVersionHeader: observeVersion,
|
|
15696
|
+
});
|
|
15697
|
+
return request$
|
|
15605
15698
|
.pipe(tap((resp) => {
|
|
15606
15699
|
if (resp.dataVersion)
|
|
15607
15700
|
this.dataVersion = resp.dataVersion;
|
|
@@ -15719,7 +15812,7 @@ class MaterialAsyncSelectComponent extends SimpleBaseSelectComponent {
|
|
|
15719
15812
|
[matTooltipDisabled]="!(tooltipEnabled() && !!errorMessage())"
|
|
15720
15813
|
[matTooltipPosition]="tooltipPosition()"
|
|
15721
15814
|
>
|
|
15722
|
-
<mat-option disabled>
|
|
15815
|
+
<mat-option *ngIf="searchable()" disabled>
|
|
15723
15816
|
<input
|
|
15724
15817
|
#searchInput
|
|
15725
15818
|
matInput
|
|
@@ -15833,7 +15926,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
15833
15926
|
[matTooltipDisabled]="!(tooltipEnabled() && !!errorMessage())"
|
|
15834
15927
|
[matTooltipPosition]="tooltipPosition()"
|
|
15835
15928
|
>
|
|
15836
|
-
<mat-option disabled>
|
|
15929
|
+
<mat-option *ngIf="searchable()" disabled>
|
|
15837
15930
|
<input
|
|
15838
15931
|
#searchInput
|
|
15839
15932
|
matInput
|
|
@@ -19310,9 +19403,35 @@ class InlineNumberComponent extends SimpleBaseInputComponent {
|
|
|
19310
19403
|
return custom;
|
|
19311
19404
|
return this.showPercentSuffix() ? 'percent' : 'tag';
|
|
19312
19405
|
}
|
|
19406
|
+
showPercentGraphicMode() {
|
|
19407
|
+
return this.showPercentSuffix() && this.currentMetadata().inlineVisualStyle === 'graphic';
|
|
19408
|
+
}
|
|
19313
19409
|
showPercentSuffix() {
|
|
19314
19410
|
return this.isPercentFormat();
|
|
19315
19411
|
}
|
|
19412
|
+
percentDisplayText() {
|
|
19413
|
+
const value = this.currentNumericValue();
|
|
19414
|
+
if (value === null) {
|
|
19415
|
+
return '--%';
|
|
19416
|
+
}
|
|
19417
|
+
return `${this.formatCompactNumber(value)}%`;
|
|
19418
|
+
}
|
|
19419
|
+
percentRangeText() {
|
|
19420
|
+
const min = this.effectiveMinValue();
|
|
19421
|
+
const max = this.effectiveMaxValue();
|
|
19422
|
+
if (min === null && max === null) {
|
|
19423
|
+
return '';
|
|
19424
|
+
}
|
|
19425
|
+
const start = min === null ? '—' : this.formatCompactNumber(min);
|
|
19426
|
+
const end = max === null ? '—' : this.formatCompactNumber(max);
|
|
19427
|
+
return `${start}-${end}%`;
|
|
19428
|
+
}
|
|
19429
|
+
percentAngle() {
|
|
19430
|
+
return this.percentRatio() * 360;
|
|
19431
|
+
}
|
|
19432
|
+
percentFillWidth() {
|
|
19433
|
+
return this.percentRatio() * 100;
|
|
19434
|
+
}
|
|
19316
19435
|
effectiveMinValue() {
|
|
19317
19436
|
return this.resolveEffectiveMin(this.currentMetadata());
|
|
19318
19437
|
}
|
|
@@ -19362,8 +19481,14 @@ class InlineNumberComponent extends SimpleBaseInputComponent {
|
|
|
19362
19481
|
widthProbeText() {
|
|
19363
19482
|
const value = this.control().value;
|
|
19364
19483
|
if (value !== null && value !== undefined && String(value).trim().length) {
|
|
19484
|
+
if (this.showPercentGraphicMode()) {
|
|
19485
|
+
return this.longestMeasureCandidate(String(value), this.placeholderText(), this.percentRangeText());
|
|
19486
|
+
}
|
|
19365
19487
|
return String(value);
|
|
19366
19488
|
}
|
|
19489
|
+
if (this.showPercentGraphicMode()) {
|
|
19490
|
+
return this.longestMeasureCandidate(this.placeholderText(), this.percentRangeText(), this.defaultFieldLabel());
|
|
19491
|
+
}
|
|
19367
19492
|
return this.placeholderText() || this.defaultFieldLabel();
|
|
19368
19493
|
}
|
|
19369
19494
|
placeholderText() {
|
|
@@ -19466,6 +19591,12 @@ class InlineNumberComponent extends SimpleBaseInputComponent {
|
|
|
19466
19591
|
baseMinMobile = 84;
|
|
19467
19592
|
baseMaxMobile = 188;
|
|
19468
19593
|
}
|
|
19594
|
+
if (this.showPercentGraphicMode()) {
|
|
19595
|
+
baseMinDesktop = Math.max(baseMinDesktop, 192);
|
|
19596
|
+
baseMaxDesktop = Math.max(baseMaxDesktop, 288);
|
|
19597
|
+
baseMinMobile = Math.max(baseMinMobile, 184);
|
|
19598
|
+
baseMaxMobile = Math.max(baseMaxMobile, 260);
|
|
19599
|
+
}
|
|
19469
19600
|
const min = Math.max(84, Math.round(isMobile
|
|
19470
19601
|
? (cfg.minWidthMobile ?? baseMinMobile)
|
|
19471
19602
|
: (cfg.minWidth ?? baseMinDesktop)));
|
|
@@ -19543,6 +19674,39 @@ class InlineNumberComponent extends SimpleBaseInputComponent {
|
|
|
19543
19674
|
? InlineNumberComponent.PERCENT_PLACEHOLDER_DEFAULT
|
|
19544
19675
|
: 'Número';
|
|
19545
19676
|
}
|
|
19677
|
+
currentNumericValue() {
|
|
19678
|
+
return this.resolveFiniteNumber(this.control().value);
|
|
19679
|
+
}
|
|
19680
|
+
percentRatio() {
|
|
19681
|
+
const value = this.currentNumericValue();
|
|
19682
|
+
if (value === null) {
|
|
19683
|
+
return 0;
|
|
19684
|
+
}
|
|
19685
|
+
const min = this.effectiveMinValue() ?? InlineNumberComponent.PERCENT_MIN_DEFAULT;
|
|
19686
|
+
const max = this.effectiveMaxValue() ?? InlineNumberComponent.PERCENT_MAX_DEFAULT;
|
|
19687
|
+
if (max <= min) {
|
|
19688
|
+
return 0;
|
|
19689
|
+
}
|
|
19690
|
+
return Math.max(0, Math.min(1, (value - min) / (max - min)));
|
|
19691
|
+
}
|
|
19692
|
+
formatCompactNumber(value) {
|
|
19693
|
+
if (!Number.isFinite(value)) {
|
|
19694
|
+
return '';
|
|
19695
|
+
}
|
|
19696
|
+
if (Number.isInteger(value)) {
|
|
19697
|
+
return `${value}`;
|
|
19698
|
+
}
|
|
19699
|
+
return value.toFixed(2).replace(/\.?0+$/, '');
|
|
19700
|
+
}
|
|
19701
|
+
longestMeasureCandidate(...values) {
|
|
19702
|
+
const candidates = values
|
|
19703
|
+
.map((value) => String(value ?? '').trim())
|
|
19704
|
+
.filter((value) => value.length);
|
|
19705
|
+
if (!candidates.length) {
|
|
19706
|
+
return '';
|
|
19707
|
+
}
|
|
19708
|
+
return candidates.reduce((longest, current) => current.length > longest.length ? current : longest);
|
|
19709
|
+
}
|
|
19546
19710
|
isPercentFormat(meta) {
|
|
19547
19711
|
const metadataRecord = this.asRecord(meta) ?? this.metadataRecord();
|
|
19548
19712
|
const numberFormat = this.asRecord(metadataRecord.numberFormat);
|
|
@@ -19603,80 +19767,107 @@ class InlineNumberComponent extends SimpleBaseInputComponent {
|
|
|
19603
19767
|
multi: true,
|
|
19604
19768
|
},
|
|
19605
19769
|
], viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["inputEl"], descendants: true, read: ElementRef }, { propertyName: "measureEl", first: true, predicate: ["measureEl"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: `
|
|
19606
|
-
<
|
|
19607
|
-
|
|
19608
|
-
|
|
19609
|
-
|
|
19610
|
-
|
|
19611
|
-
|
|
19612
|
-
|
|
19613
|
-
|
|
19614
|
-
|
|
19615
|
-
|
|
19616
|
-
|
|
19617
|
-
|
|
19618
|
-
|
|
19619
|
-
|
|
19620
|
-
|
|
19621
|
-
|
|
19622
|
-
</mat-icon>
|
|
19623
|
-
<input
|
|
19624
|
-
#inputEl
|
|
19625
|
-
matInput
|
|
19626
|
-
type="number"
|
|
19627
|
-
[formControl]="control()"
|
|
19628
|
-
[errorStateMatcher]="errorStateMatcher()"
|
|
19629
|
-
[placeholder]="placeholderText()"
|
|
19630
|
-
[required]="metadata()?.required || false"
|
|
19631
|
-
[readonly]="isReadonlyEffective()"
|
|
19632
|
-
[autocomplete]="metadata()?.autocomplete || 'off'"
|
|
19633
|
-
[spellcheck]="metadata()?.spellcheck ?? false"
|
|
19634
|
-
[min]="effectiveMinValue()"
|
|
19635
|
-
[max]="effectiveMaxValue()"
|
|
19636
|
-
[step]="effectiveStepValue()"
|
|
19637
|
-
[attr.inputmode]="metadata()?.inputMode || 'decimal'"
|
|
19638
|
-
[attr.aria-label]="ariaLabel()"
|
|
19639
|
-
[matTooltip]="inlineTooltipText()"
|
|
19640
|
-
[matTooltipDisabled]="inlineTooltipDisabled()"
|
|
19641
|
-
[matTooltipPosition]="tooltipPosition()"
|
|
19642
|
-
(input)="onInlineInput()"
|
|
19643
|
-
/>
|
|
19644
|
-
@if (showInlinePlaceholder()) {
|
|
19645
|
-
<span class="pdx-inline-placeholder" aria-hidden="true">{{ placeholderText() }}</span>
|
|
19770
|
+
<div class="pdx-inline-number-shell" [class.pdx-inline-number-shell-percent]="showPercentGraphicMode()">
|
|
19771
|
+
@if (showPercentGraphicMode()) {
|
|
19772
|
+
<div class="pdx-inline-percent-insight" aria-hidden="true">
|
|
19773
|
+
<div
|
|
19774
|
+
class="pdx-inline-percent-gauge"
|
|
19775
|
+
[style.--pdx-inline-percent-angle]="percentAngle() + 'deg'"
|
|
19776
|
+
>
|
|
19777
|
+
<div class="pdx-inline-percent-gauge__core">
|
|
19778
|
+
<span class="pdx-inline-percent-gauge__value">{{ percentDisplayText() }}</span>
|
|
19779
|
+
</div>
|
|
19780
|
+
</div>
|
|
19781
|
+
<div class="pdx-inline-percent-copy">
|
|
19782
|
+
<span class="pdx-inline-percent-copy__label">{{ placeholderText() }}</span>
|
|
19783
|
+
<span class="pdx-inline-percent-copy__range">{{ percentRangeText() }}</span>
|
|
19784
|
+
</div>
|
|
19785
|
+
</div>
|
|
19646
19786
|
}
|
|
19647
|
-
|
|
19648
|
-
|
|
19787
|
+
|
|
19788
|
+
<mat-form-field
|
|
19789
|
+
[appearance]="'outline'"
|
|
19790
|
+
[color]="materialColor()"
|
|
19791
|
+
[class]="componentCssClasses()"
|
|
19792
|
+
[floatLabel]="'auto'"
|
|
19793
|
+
[subscriptSizing]="'dynamic'"
|
|
19794
|
+
[hideRequiredMarker]="true"
|
|
19795
|
+
[style.width.px]="inlineWidthPx || null"
|
|
19796
|
+
[style.--pdx-inline-number-max-w.px]="inlineMaxWidthPx || null"
|
|
19797
|
+
>
|
|
19649
19798
|
<mat-icon
|
|
19650
|
-
|
|
19651
|
-
|
|
19652
|
-
[color]="
|
|
19653
|
-
[style.color]="iconResolvedColor(suffixIconColor())"
|
|
19654
|
-
[matTooltip]="metadata()?.suffixIconTooltip || null"
|
|
19655
|
-
[attr.aria-label]="metadata()?.suffixIconAriaLabel || null"
|
|
19799
|
+
matPrefix
|
|
19800
|
+
[color]="iconPalette(prefixIconColor())"
|
|
19801
|
+
[style.color]="iconResolvedColor(prefixIconColor())"
|
|
19656
19802
|
>
|
|
19657
|
-
{{
|
|
19803
|
+
{{ leadingIconName() }}
|
|
19658
19804
|
</mat-icon>
|
|
19659
|
-
|
|
19660
|
-
|
|
19661
|
-
|
|
19662
|
-
|
|
19663
|
-
|
|
19664
|
-
|
|
19665
|
-
|
|
19666
|
-
|
|
19667
|
-
|
|
19668
|
-
|
|
19669
|
-
|
|
19670
|
-
[
|
|
19671
|
-
|
|
19805
|
+
<input
|
|
19806
|
+
#inputEl
|
|
19807
|
+
matInput
|
|
19808
|
+
type="number"
|
|
19809
|
+
[formControl]="control()"
|
|
19810
|
+
[errorStateMatcher]="errorStateMatcher()"
|
|
19811
|
+
[placeholder]="placeholderText()"
|
|
19812
|
+
[required]="metadata()?.required || false"
|
|
19813
|
+
[readonly]="isReadonlyEffective()"
|
|
19814
|
+
[autocomplete]="metadata()?.autocomplete || 'off'"
|
|
19815
|
+
[spellcheck]="metadata()?.spellcheck ?? false"
|
|
19816
|
+
[min]="effectiveMinValue()"
|
|
19817
|
+
[max]="effectiveMaxValue()"
|
|
19818
|
+
[step]="effectiveStepValue()"
|
|
19819
|
+
[attr.inputmode]="metadata()?.inputMode || 'decimal'"
|
|
19820
|
+
[attr.aria-label]="ariaLabel()"
|
|
19821
|
+
[matTooltip]="inlineTooltipText()"
|
|
19822
|
+
[matTooltipDisabled]="inlineTooltipDisabled()"
|
|
19823
|
+
[matTooltipPosition]="tooltipPosition()"
|
|
19824
|
+
(input)="onInlineInput()"
|
|
19825
|
+
/>
|
|
19826
|
+
@if (showInlinePlaceholder()) {
|
|
19827
|
+
<span class="pdx-inline-placeholder" aria-hidden="true">{{ placeholderText() }}</span>
|
|
19828
|
+
}
|
|
19829
|
+
<span #measureEl aria-hidden="true" class="pdx-inline-measure">{{ widthProbeText() }}</span>
|
|
19830
|
+
@if (suffixIconName()) {
|
|
19672
19831
|
<mat-icon
|
|
19673
|
-
|
|
19674
|
-
|
|
19675
|
-
|
|
19676
|
-
|
|
19832
|
+
matSuffix
|
|
19833
|
+
class="pdx-inline-static-suffix"
|
|
19834
|
+
[color]="iconPalette(suffixIconColor())"
|
|
19835
|
+
[style.color]="iconResolvedColor(suffixIconColor())"
|
|
19836
|
+
[matTooltip]="metadata()?.suffixIconTooltip || null"
|
|
19837
|
+
[attr.aria-label]="metadata()?.suffixIconAriaLabel || null"
|
|
19838
|
+
>
|
|
19839
|
+
{{ suffixIconName() }}
|
|
19840
|
+
</mat-icon>
|
|
19841
|
+
}
|
|
19842
|
+
@if (showPercentSuffix()) {
|
|
19843
|
+
<span matSuffix class="pdx-inline-number-suffix">%</span>
|
|
19844
|
+
}
|
|
19845
|
+
@if (showQuickClear()) {
|
|
19846
|
+
<button
|
|
19847
|
+
matSuffix
|
|
19848
|
+
type="button"
|
|
19849
|
+
class="pdx-inline-clear"
|
|
19850
|
+
(mousedown)="onTriggerIconMouseDown($event)"
|
|
19851
|
+
(click)="onQuickClear($event)"
|
|
19852
|
+
[attr.aria-label]="clearActionAriaLabel()"
|
|
19853
|
+
>
|
|
19854
|
+
<mat-icon
|
|
19855
|
+
[color]="iconPalette(clearIconColor())"
|
|
19856
|
+
[style.color]="iconResolvedColor(clearIconColor())"
|
|
19857
|
+
>{{ clearIconName() }}</mat-icon>
|
|
19858
|
+
</button>
|
|
19859
|
+
}
|
|
19860
|
+
</mat-form-field>
|
|
19861
|
+
|
|
19862
|
+
@if (showPercentGraphicMode()) {
|
|
19863
|
+
<div class="pdx-inline-percent-rail" aria-hidden="true">
|
|
19864
|
+
<div class="pdx-inline-percent-rail__track"></div>
|
|
19865
|
+
<div class="pdx-inline-percent-rail__fill" [style.width.%]="percentFillWidth()"></div>
|
|
19866
|
+
<div class="pdx-inline-percent-rail__marker" [style.left.%]="percentFillWidth()"></div>
|
|
19867
|
+
</div>
|
|
19677
19868
|
}
|
|
19678
|
-
</
|
|
19679
|
-
`, isInline: true, styles: [":host{display:inline-flex;width:auto;min-width:0;max-width:100%}:host ::ng-deep .pdx-inline-number .mat-mdc-form-field{width:auto;min-width:0;margin-bottom:0;transition:width .12s ease}:host ::ng-deep .pdx-inline-number .mat-mdc-form-field-subscript-wrapper{display:none}:host ::ng-deep .pdx-inline-number .mdc-notched-outline{display:none}:host ::ng-deep .pdx-inline-number .mat-mdc-form-field-flex,:host ::ng-deep .pdx-inline-number .mat-mdc-text-field-wrapper{padding:0;background:transparent}:host ::ng-deep .pdx-inline-number .mat-mdc-form-field-focus-overlay{display:none}:host ::ng-deep .pdx-inline-number .mat-mdc-form-field-infix{min-height:0;width:auto;flex:0 1 auto;min-width:0;padding:0;position:relative}:host ::ng-deep .pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined{display:flex;align-items:center;min-height:44px;min-width:0;max-width:min(var(--pdx-inline-number-max-w, 280px),calc(100vw - 48px));padding-inline:14px;border-radius:999px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-high);box-sizing:border-box;transition:border-color .12s ease,box-shadow .12s ease}:host ::ng-deep .pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined:after{display:none!important;content:none!important}:host ::ng-deep .pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--focused{border-color:var(--md-sys-color-primary);box-shadow:0 0 0 2px color-mix(in srgb,var(--md-sys-color-primary) 22%,transparent)}:host ::ng-deep .pdx-inline-number input.mat-mdc-input-element{color:var(--md-sys-color-on-surface);font-size:1.05rem;line-height:1.2;width:auto!important;min-width:2ch}:host ::ng-deep .pdx-inline-number .mdc-text-field__input::placeholder,:host ::ng-deep .pdx-inline-number input.mat-mdc-input-element::placeholder{color:var(--md-sys-color-on-surface-variant)!important;opacity:0!important}:host ::ng-deep .pdx-inline-number .pdx-inline-placeholder{position:absolute;left:0;top:50%;transform:translateY(-50%);max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;color:var(--md-sys-color-on-surface-variant);font-size:1.05rem;line-height:1.2}:host ::ng-deep .pdx-inline-number .pdx-inline-measure{position:absolute;visibility:hidden;pointer-events:none;white-space:pre;font-size:1.05rem;line-height:1.2;font-weight:400;left:-9999px;top:-9999px}:host ::ng-deep .pdx-inline-number .mat-mdc-form-field-icon-prefix{padding:0;margin-right:10px}:host ::ng-deep .pdx-inline-number .mat-mdc-form-field-icon-prefix mat-icon{width:22px;height:22px;font-size:22px;color:var(--md-sys-color-primary)}:host ::ng-deep .pdx-inline-number .mat-mdc-form-field-icon-suffix{display:inline-flex;align-items:center;justify-content:center;align-self:center;margin-left:10px;gap:8px;padding:0}:host ::ng-deep .pdx-inline-number .pdx-inline-static-suffix{width:18px;height:18px;font-size:18px}:host ::ng-deep .pdx-inline-number .pdx-inline-number-suffix{color:var(--md-sys-color-on-surface-variant);font-size:.95rem;line-height:1;font-weight:600}:host ::ng-deep .pdx-inline-number .pdx-inline-clear{--clear-ring-color: var(--md-sys-color-primary);width:24px;height:24px;min-width:24px;border:0;border-radius:50%;appearance:none;-webkit-appearance:none;outline:none;padding:0;display:grid;place-items:center;background:color-mix(in srgb,var(--md-sys-color-on-surface) 12%,transparent);color:var(--md-sys-color-on-surface-variant);cursor:pointer;line-height:0;font-size:0;transition:background-color .12s ease,box-shadow .12s ease,color .12s ease}:host ::ng-deep .pdx-inline-number .pdx-inline-clear:hover{background:color-mix(in srgb,var(--md-sys-color-on-surface) 18%,transparent)}:host ::ng-deep .pdx-inline-number .pdx-inline-clear:focus-visible{background:color-mix(in srgb,var(--md-sys-color-on-surface) 20%,transparent);box-shadow:0 0 0 2px color-mix(in srgb,var(--clear-ring-color) 34%,transparent)}:host ::ng-deep .pdx-inline-number .pdx-inline-clear mat-icon{display:block;width:16px;height:16px;font-size:16px;line-height:1;margin:0}@media(max-width:768px){:host ::ng-deep .pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined{min-height:40px;padding-inline:12px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$3.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i1$3.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i1$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] });
|
|
19869
|
+
</div>
|
|
19870
|
+
`, isInline: true, styles: [":host{display:inline-flex;width:auto;min-width:0;max-width:100%}.pdx-inline-number-shell{display:inline-flex;flex-direction:column;gap:8px;width:auto;min-width:0;max-width:100%}.pdx-inline-number-shell-percent{--pdx-inline-percent-accent-start: color-mix(in srgb, var(--md-sys-color-tertiary) 72%, var(--md-sys-color-primary));--pdx-inline-percent-accent-mid: color-mix(in srgb, var(--md-sys-color-secondary) 82%, var(--md-sys-color-primary));--pdx-inline-percent-accent-end: color-mix(in srgb, var(--md-sys-color-primary) 88%, var(--md-sys-color-tertiary));padding:10px 12px 12px;border-radius:20px;border:1px solid color-mix(in srgb,var(--md-sys-color-primary) 16%,var(--md-sys-color-outline-variant));background:linear-gradient(180deg,color-mix(in srgb,var(--md-sys-color-primary) 8%,var(--md-sys-color-surface-container-highest)) 0%,var(--md-sys-color-surface-container) 100%);box-shadow:inset 0 1px color-mix(in srgb,var(--md-sys-color-on-surface) 5%,transparent),0 8px 24px color-mix(in srgb,var(--md-sys-color-primary) 10%,transparent)}.pdx-inline-percent-insight{display:grid;grid-template-columns:auto minmax(0,1fr);gap:12px;align-items:center}.pdx-inline-percent-gauge{--pdx-inline-percent-angle: 0deg;position:relative;width:52px;height:52px;border-radius:50%;background:radial-gradient(circle at center,var(--md-sys-color-surface-container) 56%,transparent 57%),conic-gradient(from -90deg,var(--pdx-inline-percent-accent-start) 0deg,var(--pdx-inline-percent-accent-mid) 150deg,var(--pdx-inline-percent-accent-end) var(--pdx-inline-percent-angle),color-mix(in srgb,var(--md-sys-color-outline-variant) 54%,transparent) var(--pdx-inline-percent-angle),color-mix(in srgb,var(--md-sys-color-outline-variant) 54%,transparent) 360deg);box-shadow:0 0 0 1px color-mix(in srgb,var(--md-sys-color-primary) 12%,transparent),0 10px 22px color-mix(in srgb,var(--md-sys-color-primary) 16%,transparent)}.pdx-inline-percent-gauge__core{position:absolute;inset:7px;display:grid;place-items:center;border-radius:50%;background:radial-gradient(circle at 30% 30%,color-mix(in srgb,white 54%,transparent),transparent 42%),var(--md-sys-color-surface);border:1px solid color-mix(in srgb,var(--md-sys-color-primary) 14%,var(--md-sys-color-outline-variant))}.pdx-inline-percent-gauge__value{font-size:.85rem;font-weight:700;line-height:1;letter-spacing:-.02em;color:var(--md-sys-color-primary)}.pdx-inline-percent-copy{min-width:0;display:flex;flex-direction:column;gap:4px}.pdx-inline-percent-copy__label{font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:color-mix(in srgb,var(--md-sys-color-primary) 84%,var(--md-sys-color-on-surface))}.pdx-inline-percent-copy__range{font-size:.82rem;font-weight:500;color:var(--md-sys-color-on-surface-variant);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .pdx-inline-number .mat-mdc-form-field{width:auto;min-width:0;margin-bottom:0;transition:width .12s ease}:host ::ng-deep .pdx-inline-number .mat-mdc-form-field-subscript-wrapper{display:none}:host ::ng-deep .pdx-inline-number .mdc-notched-outline{display:none}:host ::ng-deep .pdx-inline-number .mat-mdc-form-field-flex,:host ::ng-deep .pdx-inline-number .mat-mdc-text-field-wrapper{padding:0;background:transparent}:host ::ng-deep .pdx-inline-number .mat-mdc-form-field-focus-overlay{display:none}:host ::ng-deep .pdx-inline-number .mat-mdc-form-field-infix{min-height:0;width:auto;flex:0 1 auto;min-width:0;padding:0;position:relative}:host ::ng-deep .pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined{display:flex;align-items:center;min-height:44px;min-width:0;max-width:min(var(--pdx-inline-number-max-w, 280px),calc(100vw - 48px));padding-inline:14px;border-radius:999px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-high);box-sizing:border-box;transition:border-color .12s ease,box-shadow .12s ease}:host ::ng-deep .pdx-inline-number-shell-percent .pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined{background:linear-gradient(180deg,color-mix(in srgb,white 68%,transparent),color-mix(in srgb,var(--md-sys-color-surface-container-high) 88%,white));border-color:color-mix(in srgb,var(--md-sys-color-primary) 20%,var(--md-sys-color-outline-variant))}:host ::ng-deep .pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined:after{display:none!important;content:none!important}:host ::ng-deep .pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--focused{border-color:var(--md-sys-color-primary);box-shadow:0 0 0 2px color-mix(in srgb,var(--md-sys-color-primary) 22%,transparent)}:host ::ng-deep .pdx-inline-number input.mat-mdc-input-element{color:var(--md-sys-color-on-surface);font-size:1.05rem;line-height:1.2;width:auto!important;min-width:2ch}:host ::ng-deep .pdx-inline-number .mdc-text-field__input::placeholder,:host ::ng-deep .pdx-inline-number input.mat-mdc-input-element::placeholder{color:var(--md-sys-color-on-surface-variant)!important;opacity:0!important}:host ::ng-deep .pdx-inline-number .pdx-inline-placeholder{position:absolute;left:0;top:50%;transform:translateY(-50%);max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;color:var(--md-sys-color-on-surface-variant);font-size:1.05rem;line-height:1.2}:host ::ng-deep .pdx-inline-number .pdx-inline-measure{position:absolute;visibility:hidden;pointer-events:none;white-space:pre;font-size:1.05rem;line-height:1.2;font-weight:400;left:-9999px;top:-9999px}:host ::ng-deep .pdx-inline-number .mat-mdc-form-field-icon-prefix{padding:0;margin-right:10px}:host ::ng-deep .pdx-inline-number .mat-mdc-form-field-icon-prefix mat-icon{width:22px;height:22px;font-size:22px;color:var(--md-sys-color-primary)}:host ::ng-deep .pdx-inline-number .mat-mdc-form-field-icon-suffix{display:inline-flex;align-items:center;justify-content:center;align-self:center;margin-left:10px;gap:8px;padding:0}:host ::ng-deep .pdx-inline-number .pdx-inline-static-suffix{width:18px;height:18px;font-size:18px}:host ::ng-deep .pdx-inline-number .pdx-inline-number-suffix{color:var(--md-sys-color-on-surface-variant);font-size:.95rem;line-height:1;font-weight:600}:host ::ng-deep .pdx-inline-number .pdx-inline-clear{--clear-ring-color: var(--md-sys-color-primary);width:24px;height:24px;min-width:24px;border:0;border-radius:50%;appearance:none;-webkit-appearance:none;outline:none;padding:0;display:grid;place-items:center;background:color-mix(in srgb,var(--md-sys-color-on-surface) 12%,transparent);color:var(--md-sys-color-on-surface-variant);cursor:pointer;line-height:0;font-size:0;transition:background-color .12s ease,box-shadow .12s ease,color .12s ease}:host ::ng-deep .pdx-inline-number .pdx-inline-clear:hover{background:color-mix(in srgb,var(--md-sys-color-on-surface) 18%,transparent)}:host ::ng-deep .pdx-inline-number .pdx-inline-clear:focus-visible{background:color-mix(in srgb,var(--md-sys-color-on-surface) 20%,transparent);box-shadow:0 0 0 2px color-mix(in srgb,var(--clear-ring-color) 34%,transparent)}:host ::ng-deep .pdx-inline-number .pdx-inline-clear mat-icon{display:block;width:16px;height:16px;font-size:16px;line-height:1;margin:0}.pdx-inline-percent-rail{position:relative;height:10px;margin-top:2px}.pdx-inline-percent-rail__track,.pdx-inline-percent-rail__fill{position:absolute;inset-block:1px;left:0;border-radius:999px}.pdx-inline-percent-rail__track{right:0;background:linear-gradient(90deg,color-mix(in srgb,var(--pdx-inline-percent-accent-start) 70%,var(--md-sys-color-surface-container-high)),color-mix(in srgb,var(--pdx-inline-percent-accent-mid) 78%,var(--md-sys-color-surface-container-high)) 52%,color-mix(in srgb,var(--pdx-inline-percent-accent-end) 82%,var(--md-sys-color-surface-container-high)));opacity:.2}.pdx-inline-percent-rail__fill{width:0;background:linear-gradient(90deg,var(--pdx-inline-percent-accent-start) 0%,var(--pdx-inline-percent-accent-mid) 52%,var(--pdx-inline-percent-accent-end) 100%);box-shadow:0 0 18px color-mix(in srgb,var(--md-sys-color-primary) 22%,transparent)}.pdx-inline-percent-rail__marker{position:absolute;top:50%;width:14px;height:14px;border-radius:50%;transform:translate(-50%,-50%);background:var(--md-sys-color-surface);border:2px solid var(--md-sys-color-primary);box-shadow:0 0 0 3px color-mix(in srgb,var(--md-sys-color-primary) 12%,transparent),0 4px 14px color-mix(in srgb,var(--md-sys-color-primary) 18%,transparent)}@media(max-width:768px){.pdx-inline-number-shell-percent{padding:9px 10px 10px;gap:6px}.pdx-inline-percent-insight{gap:10px}.pdx-inline-percent-gauge{width:46px;height:46px}:host ::ng-deep .pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined{min-height:40px;padding-inline:12px}}@media(forced-colors:active){.pdx-inline-number-shell-percent{border-color:CanvasText;background:Canvas;box-shadow:none}.pdx-inline-percent-gauge,.pdx-inline-percent-rail__track,.pdx-inline-percent-rail__fill,.pdx-inline-percent-rail__marker{forced-color-adjust:none}.pdx-inline-percent-gauge{background:radial-gradient(circle at center,Canvas 56%,transparent 57%),conic-gradient(from -90deg,Highlight 0deg,Highlight var(--pdx-inline-percent-angle),GrayText var(--pdx-inline-percent-angle),GrayText 360deg);box-shadow:none}.pdx-inline-percent-gauge__core,.pdx-inline-percent-rail__marker{background:Canvas;border-color:CanvasText}.pdx-inline-percent-rail__track{background:GrayText;opacity:1}.pdx-inline-percent-rail__fill{background:Highlight;box-shadow:none}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$3.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i1$3.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i1$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] });
|
|
19680
19871
|
}
|
|
19681
19872
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: InlineNumberComponent, decorators: [{
|
|
19682
19873
|
type: Component,
|
|
@@ -19688,79 +19879,106 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
19688
19879
|
MatIconModule,
|
|
19689
19880
|
MatTooltipModule,
|
|
19690
19881
|
], template: `
|
|
19691
|
-
<
|
|
19692
|
-
|
|
19693
|
-
|
|
19694
|
-
|
|
19695
|
-
|
|
19696
|
-
|
|
19697
|
-
|
|
19698
|
-
|
|
19699
|
-
|
|
19700
|
-
|
|
19701
|
-
|
|
19702
|
-
|
|
19703
|
-
|
|
19704
|
-
|
|
19705
|
-
|
|
19706
|
-
|
|
19707
|
-
</mat-icon>
|
|
19708
|
-
<input
|
|
19709
|
-
#inputEl
|
|
19710
|
-
matInput
|
|
19711
|
-
type="number"
|
|
19712
|
-
[formControl]="control()"
|
|
19713
|
-
[errorStateMatcher]="errorStateMatcher()"
|
|
19714
|
-
[placeholder]="placeholderText()"
|
|
19715
|
-
[required]="metadata()?.required || false"
|
|
19716
|
-
[readonly]="isReadonlyEffective()"
|
|
19717
|
-
[autocomplete]="metadata()?.autocomplete || 'off'"
|
|
19718
|
-
[spellcheck]="metadata()?.spellcheck ?? false"
|
|
19719
|
-
[min]="effectiveMinValue()"
|
|
19720
|
-
[max]="effectiveMaxValue()"
|
|
19721
|
-
[step]="effectiveStepValue()"
|
|
19722
|
-
[attr.inputmode]="metadata()?.inputMode || 'decimal'"
|
|
19723
|
-
[attr.aria-label]="ariaLabel()"
|
|
19724
|
-
[matTooltip]="inlineTooltipText()"
|
|
19725
|
-
[matTooltipDisabled]="inlineTooltipDisabled()"
|
|
19726
|
-
[matTooltipPosition]="tooltipPosition()"
|
|
19727
|
-
(input)="onInlineInput()"
|
|
19728
|
-
/>
|
|
19729
|
-
@if (showInlinePlaceholder()) {
|
|
19730
|
-
<span class="pdx-inline-placeholder" aria-hidden="true">{{ placeholderText() }}</span>
|
|
19882
|
+
<div class="pdx-inline-number-shell" [class.pdx-inline-number-shell-percent]="showPercentGraphicMode()">
|
|
19883
|
+
@if (showPercentGraphicMode()) {
|
|
19884
|
+
<div class="pdx-inline-percent-insight" aria-hidden="true">
|
|
19885
|
+
<div
|
|
19886
|
+
class="pdx-inline-percent-gauge"
|
|
19887
|
+
[style.--pdx-inline-percent-angle]="percentAngle() + 'deg'"
|
|
19888
|
+
>
|
|
19889
|
+
<div class="pdx-inline-percent-gauge__core">
|
|
19890
|
+
<span class="pdx-inline-percent-gauge__value">{{ percentDisplayText() }}</span>
|
|
19891
|
+
</div>
|
|
19892
|
+
</div>
|
|
19893
|
+
<div class="pdx-inline-percent-copy">
|
|
19894
|
+
<span class="pdx-inline-percent-copy__label">{{ placeholderText() }}</span>
|
|
19895
|
+
<span class="pdx-inline-percent-copy__range">{{ percentRangeText() }}</span>
|
|
19896
|
+
</div>
|
|
19897
|
+
</div>
|
|
19731
19898
|
}
|
|
19732
|
-
|
|
19733
|
-
|
|
19899
|
+
|
|
19900
|
+
<mat-form-field
|
|
19901
|
+
[appearance]="'outline'"
|
|
19902
|
+
[color]="materialColor()"
|
|
19903
|
+
[class]="componentCssClasses()"
|
|
19904
|
+
[floatLabel]="'auto'"
|
|
19905
|
+
[subscriptSizing]="'dynamic'"
|
|
19906
|
+
[hideRequiredMarker]="true"
|
|
19907
|
+
[style.width.px]="inlineWidthPx || null"
|
|
19908
|
+
[style.--pdx-inline-number-max-w.px]="inlineMaxWidthPx || null"
|
|
19909
|
+
>
|
|
19734
19910
|
<mat-icon
|
|
19735
|
-
|
|
19736
|
-
|
|
19737
|
-
[color]="
|
|
19738
|
-
[style.color]="iconResolvedColor(suffixIconColor())"
|
|
19739
|
-
[matTooltip]="metadata()?.suffixIconTooltip || null"
|
|
19740
|
-
[attr.aria-label]="metadata()?.suffixIconAriaLabel || null"
|
|
19911
|
+
matPrefix
|
|
19912
|
+
[color]="iconPalette(prefixIconColor())"
|
|
19913
|
+
[style.color]="iconResolvedColor(prefixIconColor())"
|
|
19741
19914
|
>
|
|
19742
|
-
{{
|
|
19915
|
+
{{ leadingIconName() }}
|
|
19743
19916
|
</mat-icon>
|
|
19744
|
-
|
|
19745
|
-
|
|
19746
|
-
|
|
19747
|
-
|
|
19748
|
-
|
|
19749
|
-
|
|
19750
|
-
|
|
19751
|
-
|
|
19752
|
-
|
|
19753
|
-
|
|
19754
|
-
|
|
19755
|
-
[
|
|
19756
|
-
|
|
19917
|
+
<input
|
|
19918
|
+
#inputEl
|
|
19919
|
+
matInput
|
|
19920
|
+
type="number"
|
|
19921
|
+
[formControl]="control()"
|
|
19922
|
+
[errorStateMatcher]="errorStateMatcher()"
|
|
19923
|
+
[placeholder]="placeholderText()"
|
|
19924
|
+
[required]="metadata()?.required || false"
|
|
19925
|
+
[readonly]="isReadonlyEffective()"
|
|
19926
|
+
[autocomplete]="metadata()?.autocomplete || 'off'"
|
|
19927
|
+
[spellcheck]="metadata()?.spellcheck ?? false"
|
|
19928
|
+
[min]="effectiveMinValue()"
|
|
19929
|
+
[max]="effectiveMaxValue()"
|
|
19930
|
+
[step]="effectiveStepValue()"
|
|
19931
|
+
[attr.inputmode]="metadata()?.inputMode || 'decimal'"
|
|
19932
|
+
[attr.aria-label]="ariaLabel()"
|
|
19933
|
+
[matTooltip]="inlineTooltipText()"
|
|
19934
|
+
[matTooltipDisabled]="inlineTooltipDisabled()"
|
|
19935
|
+
[matTooltipPosition]="tooltipPosition()"
|
|
19936
|
+
(input)="onInlineInput()"
|
|
19937
|
+
/>
|
|
19938
|
+
@if (showInlinePlaceholder()) {
|
|
19939
|
+
<span class="pdx-inline-placeholder" aria-hidden="true">{{ placeholderText() }}</span>
|
|
19940
|
+
}
|
|
19941
|
+
<span #measureEl aria-hidden="true" class="pdx-inline-measure">{{ widthProbeText() }}</span>
|
|
19942
|
+
@if (suffixIconName()) {
|
|
19757
19943
|
<mat-icon
|
|
19758
|
-
|
|
19759
|
-
|
|
19760
|
-
|
|
19761
|
-
|
|
19944
|
+
matSuffix
|
|
19945
|
+
class="pdx-inline-static-suffix"
|
|
19946
|
+
[color]="iconPalette(suffixIconColor())"
|
|
19947
|
+
[style.color]="iconResolvedColor(suffixIconColor())"
|
|
19948
|
+
[matTooltip]="metadata()?.suffixIconTooltip || null"
|
|
19949
|
+
[attr.aria-label]="metadata()?.suffixIconAriaLabel || null"
|
|
19950
|
+
>
|
|
19951
|
+
{{ suffixIconName() }}
|
|
19952
|
+
</mat-icon>
|
|
19953
|
+
}
|
|
19954
|
+
@if (showPercentSuffix()) {
|
|
19955
|
+
<span matSuffix class="pdx-inline-number-suffix">%</span>
|
|
19956
|
+
}
|
|
19957
|
+
@if (showQuickClear()) {
|
|
19958
|
+
<button
|
|
19959
|
+
matSuffix
|
|
19960
|
+
type="button"
|
|
19961
|
+
class="pdx-inline-clear"
|
|
19962
|
+
(mousedown)="onTriggerIconMouseDown($event)"
|
|
19963
|
+
(click)="onQuickClear($event)"
|
|
19964
|
+
[attr.aria-label]="clearActionAriaLabel()"
|
|
19965
|
+
>
|
|
19966
|
+
<mat-icon
|
|
19967
|
+
[color]="iconPalette(clearIconColor())"
|
|
19968
|
+
[style.color]="iconResolvedColor(clearIconColor())"
|
|
19969
|
+
>{{ clearIconName() }}</mat-icon>
|
|
19970
|
+
</button>
|
|
19971
|
+
}
|
|
19972
|
+
</mat-form-field>
|
|
19973
|
+
|
|
19974
|
+
@if (showPercentGraphicMode()) {
|
|
19975
|
+
<div class="pdx-inline-percent-rail" aria-hidden="true">
|
|
19976
|
+
<div class="pdx-inline-percent-rail__track"></div>
|
|
19977
|
+
<div class="pdx-inline-percent-rail__fill" [style.width.%]="percentFillWidth()"></div>
|
|
19978
|
+
<div class="pdx-inline-percent-rail__marker" [style.left.%]="percentFillWidth()"></div>
|
|
19979
|
+
</div>
|
|
19762
19980
|
}
|
|
19763
|
-
</
|
|
19981
|
+
</div>
|
|
19764
19982
|
`, providers: [
|
|
19765
19983
|
{
|
|
19766
19984
|
provide: NG_VALUE_ACCESSOR,
|
|
@@ -19777,7 +19995,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
19777
19995
|
'[attr.data-field-type]': '"inlineNumber"',
|
|
19778
19996
|
'[attr.data-field-name]': 'metadata()?.name',
|
|
19779
19997
|
'[attr.data-component-id]': 'componentId()',
|
|
19780
|
-
}, styles: [":host{display:inline-flex;width:auto;min-width:0;max-width:100%}:host ::ng-deep .pdx-inline-number .mat-mdc-form-field{width:auto;min-width:0;margin-bottom:0;transition:width .12s ease}:host ::ng-deep .pdx-inline-number .mat-mdc-form-field-subscript-wrapper{display:none}:host ::ng-deep .pdx-inline-number .mdc-notched-outline{display:none}:host ::ng-deep .pdx-inline-number .mat-mdc-form-field-flex,:host ::ng-deep .pdx-inline-number .mat-mdc-text-field-wrapper{padding:0;background:transparent}:host ::ng-deep .pdx-inline-number .mat-mdc-form-field-focus-overlay{display:none}:host ::ng-deep .pdx-inline-number .mat-mdc-form-field-infix{min-height:0;width:auto;flex:0 1 auto;min-width:0;padding:0;position:relative}:host ::ng-deep .pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined{display:flex;align-items:center;min-height:44px;min-width:0;max-width:min(var(--pdx-inline-number-max-w, 280px),calc(100vw - 48px));padding-inline:14px;border-radius:999px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-high);box-sizing:border-box;transition:border-color .12s ease,box-shadow .12s ease}:host ::ng-deep .pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined:after{display:none!important;content:none!important}:host ::ng-deep .pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--focused{border-color:var(--md-sys-color-primary);box-shadow:0 0 0 2px color-mix(in srgb,var(--md-sys-color-primary) 22%,transparent)}:host ::ng-deep .pdx-inline-number input.mat-mdc-input-element{color:var(--md-sys-color-on-surface);font-size:1.05rem;line-height:1.2;width:auto!important;min-width:2ch}:host ::ng-deep .pdx-inline-number .mdc-text-field__input::placeholder,:host ::ng-deep .pdx-inline-number input.mat-mdc-input-element::placeholder{color:var(--md-sys-color-on-surface-variant)!important;opacity:0!important}:host ::ng-deep .pdx-inline-number .pdx-inline-placeholder{position:absolute;left:0;top:50%;transform:translateY(-50%);max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;color:var(--md-sys-color-on-surface-variant);font-size:1.05rem;line-height:1.2}:host ::ng-deep .pdx-inline-number .pdx-inline-measure{position:absolute;visibility:hidden;pointer-events:none;white-space:pre;font-size:1.05rem;line-height:1.2;font-weight:400;left:-9999px;top:-9999px}:host ::ng-deep .pdx-inline-number .mat-mdc-form-field-icon-prefix{padding:0;margin-right:10px}:host ::ng-deep .pdx-inline-number .mat-mdc-form-field-icon-prefix mat-icon{width:22px;height:22px;font-size:22px;color:var(--md-sys-color-primary)}:host ::ng-deep .pdx-inline-number .mat-mdc-form-field-icon-suffix{display:inline-flex;align-items:center;justify-content:center;align-self:center;margin-left:10px;gap:8px;padding:0}:host ::ng-deep .pdx-inline-number .pdx-inline-static-suffix{width:18px;height:18px;font-size:18px}:host ::ng-deep .pdx-inline-number .pdx-inline-number-suffix{color:var(--md-sys-color-on-surface-variant);font-size:.95rem;line-height:1;font-weight:600}:host ::ng-deep .pdx-inline-number .pdx-inline-clear{--clear-ring-color: var(--md-sys-color-primary);width:24px;height:24px;min-width:24px;border:0;border-radius:50%;appearance:none;-webkit-appearance:none;outline:none;padding:0;display:grid;place-items:center;background:color-mix(in srgb,var(--md-sys-color-on-surface) 12%,transparent);color:var(--md-sys-color-on-surface-variant);cursor:pointer;line-height:0;font-size:0;transition:background-color .12s ease,box-shadow .12s ease,color .12s ease}:host ::ng-deep .pdx-inline-number .pdx-inline-clear:hover{background:color-mix(in srgb,var(--md-sys-color-on-surface) 18%,transparent)}:host ::ng-deep .pdx-inline-number .pdx-inline-clear:focus-visible{background:color-mix(in srgb,var(--md-sys-color-on-surface) 20%,transparent);box-shadow:0 0 0 2px color-mix(in srgb,var(--clear-ring-color) 34%,transparent)}:host ::ng-deep .pdx-inline-number .pdx-inline-clear mat-icon{display:block;width:16px;height:16px;font-size:16px;line-height:1;margin:0}@media(max-width:768px){:host ::ng-deep .pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined{min-height:40px;padding-inline:12px}}\n"] }]
|
|
19998
|
+
}, styles: [":host{display:inline-flex;width:auto;min-width:0;max-width:100%}.pdx-inline-number-shell{display:inline-flex;flex-direction:column;gap:8px;width:auto;min-width:0;max-width:100%}.pdx-inline-number-shell-percent{--pdx-inline-percent-accent-start: color-mix(in srgb, var(--md-sys-color-tertiary) 72%, var(--md-sys-color-primary));--pdx-inline-percent-accent-mid: color-mix(in srgb, var(--md-sys-color-secondary) 82%, var(--md-sys-color-primary));--pdx-inline-percent-accent-end: color-mix(in srgb, var(--md-sys-color-primary) 88%, var(--md-sys-color-tertiary));padding:10px 12px 12px;border-radius:20px;border:1px solid color-mix(in srgb,var(--md-sys-color-primary) 16%,var(--md-sys-color-outline-variant));background:linear-gradient(180deg,color-mix(in srgb,var(--md-sys-color-primary) 8%,var(--md-sys-color-surface-container-highest)) 0%,var(--md-sys-color-surface-container) 100%);box-shadow:inset 0 1px color-mix(in srgb,var(--md-sys-color-on-surface) 5%,transparent),0 8px 24px color-mix(in srgb,var(--md-sys-color-primary) 10%,transparent)}.pdx-inline-percent-insight{display:grid;grid-template-columns:auto minmax(0,1fr);gap:12px;align-items:center}.pdx-inline-percent-gauge{--pdx-inline-percent-angle: 0deg;position:relative;width:52px;height:52px;border-radius:50%;background:radial-gradient(circle at center,var(--md-sys-color-surface-container) 56%,transparent 57%),conic-gradient(from -90deg,var(--pdx-inline-percent-accent-start) 0deg,var(--pdx-inline-percent-accent-mid) 150deg,var(--pdx-inline-percent-accent-end) var(--pdx-inline-percent-angle),color-mix(in srgb,var(--md-sys-color-outline-variant) 54%,transparent) var(--pdx-inline-percent-angle),color-mix(in srgb,var(--md-sys-color-outline-variant) 54%,transparent) 360deg);box-shadow:0 0 0 1px color-mix(in srgb,var(--md-sys-color-primary) 12%,transparent),0 10px 22px color-mix(in srgb,var(--md-sys-color-primary) 16%,transparent)}.pdx-inline-percent-gauge__core{position:absolute;inset:7px;display:grid;place-items:center;border-radius:50%;background:radial-gradient(circle at 30% 30%,color-mix(in srgb,white 54%,transparent),transparent 42%),var(--md-sys-color-surface);border:1px solid color-mix(in srgb,var(--md-sys-color-primary) 14%,var(--md-sys-color-outline-variant))}.pdx-inline-percent-gauge__value{font-size:.85rem;font-weight:700;line-height:1;letter-spacing:-.02em;color:var(--md-sys-color-primary)}.pdx-inline-percent-copy{min-width:0;display:flex;flex-direction:column;gap:4px}.pdx-inline-percent-copy__label{font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:color-mix(in srgb,var(--md-sys-color-primary) 84%,var(--md-sys-color-on-surface))}.pdx-inline-percent-copy__range{font-size:.82rem;font-weight:500;color:var(--md-sys-color-on-surface-variant);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .pdx-inline-number .mat-mdc-form-field{width:auto;min-width:0;margin-bottom:0;transition:width .12s ease}:host ::ng-deep .pdx-inline-number .mat-mdc-form-field-subscript-wrapper{display:none}:host ::ng-deep .pdx-inline-number .mdc-notched-outline{display:none}:host ::ng-deep .pdx-inline-number .mat-mdc-form-field-flex,:host ::ng-deep .pdx-inline-number .mat-mdc-text-field-wrapper{padding:0;background:transparent}:host ::ng-deep .pdx-inline-number .mat-mdc-form-field-focus-overlay{display:none}:host ::ng-deep .pdx-inline-number .mat-mdc-form-field-infix{min-height:0;width:auto;flex:0 1 auto;min-width:0;padding:0;position:relative}:host ::ng-deep .pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined{display:flex;align-items:center;min-height:44px;min-width:0;max-width:min(var(--pdx-inline-number-max-w, 280px),calc(100vw - 48px));padding-inline:14px;border-radius:999px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-high);box-sizing:border-box;transition:border-color .12s ease,box-shadow .12s ease}:host ::ng-deep .pdx-inline-number-shell-percent .pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined{background:linear-gradient(180deg,color-mix(in srgb,white 68%,transparent),color-mix(in srgb,var(--md-sys-color-surface-container-high) 88%,white));border-color:color-mix(in srgb,var(--md-sys-color-primary) 20%,var(--md-sys-color-outline-variant))}:host ::ng-deep .pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined:after{display:none!important;content:none!important}:host ::ng-deep .pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--focused{border-color:var(--md-sys-color-primary);box-shadow:0 0 0 2px color-mix(in srgb,var(--md-sys-color-primary) 22%,transparent)}:host ::ng-deep .pdx-inline-number input.mat-mdc-input-element{color:var(--md-sys-color-on-surface);font-size:1.05rem;line-height:1.2;width:auto!important;min-width:2ch}:host ::ng-deep .pdx-inline-number .mdc-text-field__input::placeholder,:host ::ng-deep .pdx-inline-number input.mat-mdc-input-element::placeholder{color:var(--md-sys-color-on-surface-variant)!important;opacity:0!important}:host ::ng-deep .pdx-inline-number .pdx-inline-placeholder{position:absolute;left:0;top:50%;transform:translateY(-50%);max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;color:var(--md-sys-color-on-surface-variant);font-size:1.05rem;line-height:1.2}:host ::ng-deep .pdx-inline-number .pdx-inline-measure{position:absolute;visibility:hidden;pointer-events:none;white-space:pre;font-size:1.05rem;line-height:1.2;font-weight:400;left:-9999px;top:-9999px}:host ::ng-deep .pdx-inline-number .mat-mdc-form-field-icon-prefix{padding:0;margin-right:10px}:host ::ng-deep .pdx-inline-number .mat-mdc-form-field-icon-prefix mat-icon{width:22px;height:22px;font-size:22px;color:var(--md-sys-color-primary)}:host ::ng-deep .pdx-inline-number .mat-mdc-form-field-icon-suffix{display:inline-flex;align-items:center;justify-content:center;align-self:center;margin-left:10px;gap:8px;padding:0}:host ::ng-deep .pdx-inline-number .pdx-inline-static-suffix{width:18px;height:18px;font-size:18px}:host ::ng-deep .pdx-inline-number .pdx-inline-number-suffix{color:var(--md-sys-color-on-surface-variant);font-size:.95rem;line-height:1;font-weight:600}:host ::ng-deep .pdx-inline-number .pdx-inline-clear{--clear-ring-color: var(--md-sys-color-primary);width:24px;height:24px;min-width:24px;border:0;border-radius:50%;appearance:none;-webkit-appearance:none;outline:none;padding:0;display:grid;place-items:center;background:color-mix(in srgb,var(--md-sys-color-on-surface) 12%,transparent);color:var(--md-sys-color-on-surface-variant);cursor:pointer;line-height:0;font-size:0;transition:background-color .12s ease,box-shadow .12s ease,color .12s ease}:host ::ng-deep .pdx-inline-number .pdx-inline-clear:hover{background:color-mix(in srgb,var(--md-sys-color-on-surface) 18%,transparent)}:host ::ng-deep .pdx-inline-number .pdx-inline-clear:focus-visible{background:color-mix(in srgb,var(--md-sys-color-on-surface) 20%,transparent);box-shadow:0 0 0 2px color-mix(in srgb,var(--clear-ring-color) 34%,transparent)}:host ::ng-deep .pdx-inline-number .pdx-inline-clear mat-icon{display:block;width:16px;height:16px;font-size:16px;line-height:1;margin:0}.pdx-inline-percent-rail{position:relative;height:10px;margin-top:2px}.pdx-inline-percent-rail__track,.pdx-inline-percent-rail__fill{position:absolute;inset-block:1px;left:0;border-radius:999px}.pdx-inline-percent-rail__track{right:0;background:linear-gradient(90deg,color-mix(in srgb,var(--pdx-inline-percent-accent-start) 70%,var(--md-sys-color-surface-container-high)),color-mix(in srgb,var(--pdx-inline-percent-accent-mid) 78%,var(--md-sys-color-surface-container-high)) 52%,color-mix(in srgb,var(--pdx-inline-percent-accent-end) 82%,var(--md-sys-color-surface-container-high)));opacity:.2}.pdx-inline-percent-rail__fill{width:0;background:linear-gradient(90deg,var(--pdx-inline-percent-accent-start) 0%,var(--pdx-inline-percent-accent-mid) 52%,var(--pdx-inline-percent-accent-end) 100%);box-shadow:0 0 18px color-mix(in srgb,var(--md-sys-color-primary) 22%,transparent)}.pdx-inline-percent-rail__marker{position:absolute;top:50%;width:14px;height:14px;border-radius:50%;transform:translate(-50%,-50%);background:var(--md-sys-color-surface);border:2px solid var(--md-sys-color-primary);box-shadow:0 0 0 3px color-mix(in srgb,var(--md-sys-color-primary) 12%,transparent),0 4px 14px color-mix(in srgb,var(--md-sys-color-primary) 18%,transparent)}@media(max-width:768px){.pdx-inline-number-shell-percent{padding:9px 10px 10px;gap:6px}.pdx-inline-percent-insight{gap:10px}.pdx-inline-percent-gauge{width:46px;height:46px}:host ::ng-deep .pdx-inline-number .mat-mdc-text-field-wrapper.mdc-text-field--outlined{min-height:40px;padding-inline:12px}}@media(forced-colors:active){.pdx-inline-number-shell-percent{border-color:CanvasText;background:Canvas;box-shadow:none}.pdx-inline-percent-gauge,.pdx-inline-percent-rail__track,.pdx-inline-percent-rail__fill,.pdx-inline-percent-rail__marker{forced-color-adjust:none}.pdx-inline-percent-gauge{background:radial-gradient(circle at center,Canvas 56%,transparent 57%),conic-gradient(from -90deg,Highlight 0deg,Highlight var(--pdx-inline-percent-angle),GrayText var(--pdx-inline-percent-angle),GrayText 360deg);box-shadow:none}.pdx-inline-percent-gauge__core,.pdx-inline-percent-rail__marker{background:Canvas;border-color:CanvasText}.pdx-inline-percent-rail__track{background:GrayText;opacity:1}.pdx-inline-percent-rail__fill{background:Highlight;box-shadow:none}}\n"] }]
|
|
19781
19999
|
}], propDecorators: { inputEl: [{
|
|
19782
20000
|
type: ViewChild,
|
|
19783
20001
|
args: ['inputEl', { read: ElementRef }]
|
|
@@ -23673,6 +23891,673 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
23673
23891
|
args: ['document:keydown.escape']
|
|
23674
23892
|
}] } });
|
|
23675
23893
|
|
|
23894
|
+
class InlinePeriodRangeComponent extends SimpleBaseInputComponent {
|
|
23895
|
+
innerComponent;
|
|
23896
|
+
readonlyMode = false;
|
|
23897
|
+
disabledMode = false;
|
|
23898
|
+
visible = true;
|
|
23899
|
+
presentationMode = false;
|
|
23900
|
+
sliderControl = new FormControl(null);
|
|
23901
|
+
syncingFromOuter = false;
|
|
23902
|
+
syncingFromInner = false;
|
|
23903
|
+
periodState = computed(() => {
|
|
23904
|
+
const metadata = this.metadata();
|
|
23905
|
+
if (!metadata)
|
|
23906
|
+
return null;
|
|
23907
|
+
const values = this.buildPeriods(metadata);
|
|
23908
|
+
if (!values.length)
|
|
23909
|
+
return null;
|
|
23910
|
+
return {
|
|
23911
|
+
values,
|
|
23912
|
+
indexByValue: new Map(values.map((value, index) => [value, index])),
|
|
23913
|
+
};
|
|
23914
|
+
}, ...(ngDevMode ? [{ debugName: "periodState" }] : []));
|
|
23915
|
+
resolvedMetadata = computed(() => {
|
|
23916
|
+
const metadata = this.metadata();
|
|
23917
|
+
const periodState = this.periodState();
|
|
23918
|
+
if (!metadata || !periodState)
|
|
23919
|
+
return null;
|
|
23920
|
+
const maxIndex = Math.max(periodState.values.length - 1, 0);
|
|
23921
|
+
const defaultInlineTexts = metadata.granularity === 'year'
|
|
23922
|
+
? {
|
|
23923
|
+
minLabel: 'Período inicial',
|
|
23924
|
+
maxLabel: 'Período final',
|
|
23925
|
+
quickPresetsLabel: 'Períodos rápidos',
|
|
23926
|
+
}
|
|
23927
|
+
: {
|
|
23928
|
+
quickPresetsLabel: 'Períodos rápidos',
|
|
23929
|
+
};
|
|
23930
|
+
return {
|
|
23931
|
+
...metadata,
|
|
23932
|
+
controlType: FieldControlType.RANGE_SLIDER,
|
|
23933
|
+
mode: 'range',
|
|
23934
|
+
min: 0,
|
|
23935
|
+
max: maxIndex,
|
|
23936
|
+
step: 1,
|
|
23937
|
+
discrete: metadata.discrete ?? true,
|
|
23938
|
+
showTicks: metadata.showTicks ?? true,
|
|
23939
|
+
showInputs: metadata.showInputs ??
|
|
23940
|
+
(metadata.granularity === 'year' &&
|
|
23941
|
+
periodState.values.every((value) => /^\d{4}$/.test(value))),
|
|
23942
|
+
prefixIcon: metadata.prefixIcon || this.defaultIcon(metadata.granularity),
|
|
23943
|
+
inlineTexts: metadata.inlineTexts ?? defaultInlineTexts,
|
|
23944
|
+
displayWith: metadata.displayWith ??
|
|
23945
|
+
((value) => this.formatPeriodLabel(periodState.values[this.boundIndex(value, maxIndex)] || '', metadata)),
|
|
23946
|
+
quickPresets: this.adaptQuickPresets(metadata.quickPresets, periodState),
|
|
23947
|
+
quickPresetsAuto: false,
|
|
23948
|
+
};
|
|
23949
|
+
}, ...(ngDevMode ? [{ debugName: "resolvedMetadata" }] : []));
|
|
23950
|
+
ngOnInit() {
|
|
23951
|
+
super.ngOnInit();
|
|
23952
|
+
this.control().valueChanges
|
|
23953
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
23954
|
+
.subscribe((value) => {
|
|
23955
|
+
if (this.syncingFromInner)
|
|
23956
|
+
return;
|
|
23957
|
+
this.syncFromOuterValue(value);
|
|
23958
|
+
});
|
|
23959
|
+
this.sliderControl.valueChanges
|
|
23960
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
23961
|
+
.subscribe((value) => {
|
|
23962
|
+
if (this.syncingFromOuter)
|
|
23963
|
+
return;
|
|
23964
|
+
this.syncFromInnerValue(value);
|
|
23965
|
+
});
|
|
23966
|
+
}
|
|
23967
|
+
ngAfterViewInit() {
|
|
23968
|
+
super.ngAfterViewInit();
|
|
23969
|
+
this.syncInnerMetadata();
|
|
23970
|
+
this.syncFromOuterValue(this.control().value);
|
|
23971
|
+
}
|
|
23972
|
+
writeValue(value) {
|
|
23973
|
+
super.writeValue(value);
|
|
23974
|
+
this.syncFromOuterValue(value);
|
|
23975
|
+
}
|
|
23976
|
+
setInputMetadata(metadata) {
|
|
23977
|
+
this.setMetadata(metadata);
|
|
23978
|
+
this.syncInnerMetadata();
|
|
23979
|
+
this.syncFromOuterValue(this.control().value);
|
|
23980
|
+
}
|
|
23981
|
+
setMetadata(metadata) {
|
|
23982
|
+
super.setMetadata(metadata);
|
|
23983
|
+
this.syncInnerMetadata();
|
|
23984
|
+
this.syncFromOuterValue(this.control().value);
|
|
23985
|
+
}
|
|
23986
|
+
getSpecificCssClasses() {
|
|
23987
|
+
return ['pdx-inline-period-range'];
|
|
23988
|
+
}
|
|
23989
|
+
syncFromOuterValue(value) {
|
|
23990
|
+
const periodState = this.periodState();
|
|
23991
|
+
if (!periodState)
|
|
23992
|
+
return;
|
|
23993
|
+
const nextValue = this.toSliderValue(value, periodState);
|
|
23994
|
+
this.syncingFromOuter = true;
|
|
23995
|
+
try {
|
|
23996
|
+
this.sliderControl.setValue(nextValue, { emitEvent: false });
|
|
23997
|
+
}
|
|
23998
|
+
finally {
|
|
23999
|
+
this.syncingFromOuter = false;
|
|
24000
|
+
}
|
|
24001
|
+
}
|
|
24002
|
+
syncFromInnerValue(value) {
|
|
24003
|
+
const periodState = this.periodState();
|
|
24004
|
+
if (!periodState)
|
|
24005
|
+
return;
|
|
24006
|
+
const nextOuter = this.toOuterValue(value, periodState);
|
|
24007
|
+
this.syncingFromInner = true;
|
|
24008
|
+
try {
|
|
24009
|
+
this.setValue(nextOuter, { emitEvent: true });
|
|
24010
|
+
}
|
|
24011
|
+
finally {
|
|
24012
|
+
this.syncingFromInner = false;
|
|
24013
|
+
}
|
|
24014
|
+
}
|
|
24015
|
+
toSliderValue(value, periodState) {
|
|
24016
|
+
if (!Array.isArray(value) || value.length < 2)
|
|
24017
|
+
return null;
|
|
24018
|
+
const start = periodState.indexByValue.get(String(value[0]));
|
|
24019
|
+
const end = periodState.indexByValue.get(String(value[1]));
|
|
24020
|
+
if (start === undefined || end === undefined)
|
|
24021
|
+
return null;
|
|
24022
|
+
return {
|
|
24023
|
+
start: Math.min(start, end),
|
|
24024
|
+
end: Math.max(start, end),
|
|
24025
|
+
};
|
|
24026
|
+
}
|
|
24027
|
+
toOuterValue(value, periodState) {
|
|
24028
|
+
if (!value)
|
|
24029
|
+
return null;
|
|
24030
|
+
const start = this.boundIndex(value.start ?? 0, periodState.values.length - 1);
|
|
24031
|
+
const end = this.boundIndex(value.end ?? 0, periodState.values.length - 1);
|
|
24032
|
+
return [periodState.values[Math.min(start, end)], periodState.values[Math.max(start, end)]];
|
|
24033
|
+
}
|
|
24034
|
+
adaptQuickPresets(presets, periodState) {
|
|
24035
|
+
if (!Array.isArray(presets) || !presets.length)
|
|
24036
|
+
return [];
|
|
24037
|
+
return presets
|
|
24038
|
+
.map((preset) => {
|
|
24039
|
+
const start = periodState.indexByValue.get(String(preset.start));
|
|
24040
|
+
const end = periodState.indexByValue.get(String(preset.end));
|
|
24041
|
+
if (start === undefined || end === undefined)
|
|
24042
|
+
return null;
|
|
24043
|
+
return {
|
|
24044
|
+
id: preset.id,
|
|
24045
|
+
label: preset.label,
|
|
24046
|
+
start: Math.min(start, end),
|
|
24047
|
+
end: Math.max(start, end),
|
|
24048
|
+
};
|
|
24049
|
+
})
|
|
24050
|
+
.filter((preset) => Boolean(preset));
|
|
24051
|
+
}
|
|
24052
|
+
formatPeriodLabel(value, metadata) {
|
|
24053
|
+
if (!value)
|
|
24054
|
+
return '';
|
|
24055
|
+
switch (metadata.granularity) {
|
|
24056
|
+
case 'month':
|
|
24057
|
+
return this.formatMonthValue(value, metadata);
|
|
24058
|
+
case 'quarter':
|
|
24059
|
+
case 'fiscal-quarter':
|
|
24060
|
+
return value.replace('-', '/');
|
|
24061
|
+
case 'fiscal-year':
|
|
24062
|
+
return value;
|
|
24063
|
+
case 'year':
|
|
24064
|
+
return value;
|
|
24065
|
+
default:
|
|
24066
|
+
return value;
|
|
24067
|
+
}
|
|
24068
|
+
}
|
|
24069
|
+
formatMonthValue(value, metadata) {
|
|
24070
|
+
const match = /^(\d{4})-(\d{2})$/.exec(value);
|
|
24071
|
+
if (!match)
|
|
24072
|
+
return value;
|
|
24073
|
+
const [, year, month] = match;
|
|
24074
|
+
const monthIndex = Number(month) - 1;
|
|
24075
|
+
const customLabels = Array.isArray(metadata.monthLabels) ? metadata.monthLabels : [];
|
|
24076
|
+
const labelFromConfig = customLabels[monthIndex];
|
|
24077
|
+
if (labelFromConfig)
|
|
24078
|
+
return `${labelFromConfig}/${year}`;
|
|
24079
|
+
const formatter = new Intl.DateTimeFormat(metadata.locale || 'pt-BR', {
|
|
24080
|
+
month: 'short',
|
|
24081
|
+
});
|
|
24082
|
+
const raw = formatter.format(new Date(Number(year), monthIndex, 1)).replace('.', '');
|
|
24083
|
+
return `${raw.charAt(0).toUpperCase()}${raw.slice(1)}/${year}`;
|
|
24084
|
+
}
|
|
24085
|
+
defaultIcon(granularity) {
|
|
24086
|
+
switch (granularity) {
|
|
24087
|
+
case 'month':
|
|
24088
|
+
return 'calendar_view_month';
|
|
24089
|
+
case 'quarter':
|
|
24090
|
+
case 'fiscal-quarter':
|
|
24091
|
+
return 'date_range';
|
|
24092
|
+
case 'year':
|
|
24093
|
+
case 'fiscal-year':
|
|
24094
|
+
return 'calendar_today';
|
|
24095
|
+
default:
|
|
24096
|
+
return 'date_range';
|
|
24097
|
+
}
|
|
24098
|
+
}
|
|
24099
|
+
buildPeriods(metadata) {
|
|
24100
|
+
switch (metadata.granularity) {
|
|
24101
|
+
case 'month':
|
|
24102
|
+
return this.buildMonthPeriods(metadata.min, metadata.max);
|
|
24103
|
+
case 'quarter':
|
|
24104
|
+
case 'fiscal-quarter':
|
|
24105
|
+
return this.buildQuarterPeriods(metadata.min, metadata.max);
|
|
24106
|
+
case 'year':
|
|
24107
|
+
case 'fiscal-year':
|
|
24108
|
+
return this.buildYearPeriods(metadata.min, metadata.max);
|
|
24109
|
+
default:
|
|
24110
|
+
return [];
|
|
24111
|
+
}
|
|
24112
|
+
}
|
|
24113
|
+
buildMonthPeriods(min, max) {
|
|
24114
|
+
const start = this.parseYearMonth(min);
|
|
24115
|
+
const end = this.parseYearMonth(max);
|
|
24116
|
+
if (!start || !end)
|
|
24117
|
+
return [];
|
|
24118
|
+
const periods = [];
|
|
24119
|
+
let current = start.year * 12 + (start.month - 1);
|
|
24120
|
+
const last = end.year * 12 + (end.month - 1);
|
|
24121
|
+
while (current <= last) {
|
|
24122
|
+
const year = Math.floor(current / 12);
|
|
24123
|
+
const month = (current % 12) + 1;
|
|
24124
|
+
periods.push(`${year}-${String(month).padStart(2, '0')}`);
|
|
24125
|
+
current += 1;
|
|
24126
|
+
}
|
|
24127
|
+
return periods;
|
|
24128
|
+
}
|
|
24129
|
+
buildQuarterPeriods(min, max) {
|
|
24130
|
+
const start = this.parseQuarter(min);
|
|
24131
|
+
const end = this.parseQuarter(max);
|
|
24132
|
+
if (!start || !end)
|
|
24133
|
+
return [];
|
|
24134
|
+
const periods = [];
|
|
24135
|
+
let currentYear = start.year;
|
|
24136
|
+
let currentQuarter = start.quarter;
|
|
24137
|
+
while (currentYear < end.year ||
|
|
24138
|
+
(currentYear === end.year && currentQuarter <= end.quarter)) {
|
|
24139
|
+
periods.push(`${currentYear}-Q${currentQuarter}`);
|
|
24140
|
+
currentQuarter += 1;
|
|
24141
|
+
if (currentQuarter > 4) {
|
|
24142
|
+
currentQuarter = 1;
|
|
24143
|
+
currentYear += 1;
|
|
24144
|
+
}
|
|
24145
|
+
}
|
|
24146
|
+
return periods;
|
|
24147
|
+
}
|
|
24148
|
+
buildYearPeriods(min, max) {
|
|
24149
|
+
const start = this.parseYear(min);
|
|
24150
|
+
const end = this.parseYear(max);
|
|
24151
|
+
if (start === null || end === null)
|
|
24152
|
+
return [];
|
|
24153
|
+
const periods = [];
|
|
24154
|
+
for (let year = Math.min(start, end); year <= Math.max(start, end); year += 1) {
|
|
24155
|
+
periods.push(String(year));
|
|
24156
|
+
}
|
|
24157
|
+
return periods;
|
|
24158
|
+
}
|
|
24159
|
+
parseYearMonth(value) {
|
|
24160
|
+
if (!value)
|
|
24161
|
+
return null;
|
|
24162
|
+
const match = /^(\d{4})-(\d{2})$/.exec(String(value).trim());
|
|
24163
|
+
if (!match)
|
|
24164
|
+
return null;
|
|
24165
|
+
const year = Number(match[1]);
|
|
24166
|
+
const month = Number(match[2]);
|
|
24167
|
+
if (!Number.isFinite(year) || !Number.isFinite(month) || month < 1 || month > 12) {
|
|
24168
|
+
return null;
|
|
24169
|
+
}
|
|
24170
|
+
return { year, month };
|
|
24171
|
+
}
|
|
24172
|
+
parseQuarter(value) {
|
|
24173
|
+
if (!value)
|
|
24174
|
+
return null;
|
|
24175
|
+
const match = /^(\d{4})-Q([1-4])$/i.exec(String(value).trim());
|
|
24176
|
+
if (!match)
|
|
24177
|
+
return null;
|
|
24178
|
+
return { year: Number(match[1]), quarter: Number(match[2]) };
|
|
24179
|
+
}
|
|
24180
|
+
parseYear(value) {
|
|
24181
|
+
if (!value)
|
|
24182
|
+
return null;
|
|
24183
|
+
const normalized = String(value).trim().replace(/^FY/i, '');
|
|
24184
|
+
const year = Number(normalized);
|
|
24185
|
+
return Number.isFinite(year) ? year : null;
|
|
24186
|
+
}
|
|
24187
|
+
boundIndex(value, max) {
|
|
24188
|
+
const numeric = Number.isFinite(Number(value)) ? Number(value) : 0;
|
|
24189
|
+
return Math.min(max, Math.max(0, Math.round(numeric)));
|
|
24190
|
+
}
|
|
24191
|
+
syncInnerMetadata() {
|
|
24192
|
+
const metadata = this.resolvedMetadata();
|
|
24193
|
+
if (!metadata || !this.innerComponent)
|
|
24194
|
+
return;
|
|
24195
|
+
this.innerComponent.setMetadata(metadata);
|
|
24196
|
+
}
|
|
24197
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: InlinePeriodRangeComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
24198
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.17", type: InlinePeriodRangeComponent, isStandalone: true, selector: "pdx-inline-period-range", inputs: { readonlyMode: "readonlyMode", disabledMode: "disabledMode", visible: "visible", presentationMode: "presentationMode" }, host: { properties: { "style.display": "visible ? null : \"none\"", "attr.aria-hidden": "visible ? null : \"true\"", "attr.data-field-type": "\"inlinePeriodRange\"", "attr.data-field-name": "metadata()?.name", "attr.data-component-id": "componentId()" } }, providers: [
|
|
24199
|
+
{
|
|
24200
|
+
provide: NG_VALUE_ACCESSOR,
|
|
24201
|
+
useExisting: forwardRef(() => InlinePeriodRangeComponent),
|
|
24202
|
+
multi: true,
|
|
24203
|
+
},
|
|
24204
|
+
], viewQueries: [{ propertyName: "innerComponent", first: true, predicate: InlineRangeSliderComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: `
|
|
24205
|
+
<pdx-inline-range-slider
|
|
24206
|
+
[formControl]="sliderControl"
|
|
24207
|
+
[readonlyMode]="readonlyMode"
|
|
24208
|
+
[disabledMode]="disabledMode"
|
|
24209
|
+
[visible]="visible"
|
|
24210
|
+
[presentationMode]="presentationMode"
|
|
24211
|
+
/>
|
|
24212
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: InlineRangeSliderComponent, selector: "pdx-inline-range-slider", inputs: ["readonlyMode", "disabledMode", "visible", "presentationMode"] }] });
|
|
24213
|
+
}
|
|
24214
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: InlinePeriodRangeComponent, decorators: [{
|
|
24215
|
+
type: Component,
|
|
24216
|
+
args: [{
|
|
24217
|
+
selector: 'pdx-inline-period-range',
|
|
24218
|
+
standalone: true,
|
|
24219
|
+
imports: [CommonModule, ReactiveFormsModule, InlineRangeSliderComponent],
|
|
24220
|
+
template: `
|
|
24221
|
+
<pdx-inline-range-slider
|
|
24222
|
+
[formControl]="sliderControl"
|
|
24223
|
+
[readonlyMode]="readonlyMode"
|
|
24224
|
+
[disabledMode]="disabledMode"
|
|
24225
|
+
[visible]="visible"
|
|
24226
|
+
[presentationMode]="presentationMode"
|
|
24227
|
+
/>
|
|
24228
|
+
`,
|
|
24229
|
+
providers: [
|
|
24230
|
+
{
|
|
24231
|
+
provide: NG_VALUE_ACCESSOR,
|
|
24232
|
+
useExisting: forwardRef(() => InlinePeriodRangeComponent),
|
|
24233
|
+
multi: true,
|
|
24234
|
+
},
|
|
24235
|
+
],
|
|
24236
|
+
host: {
|
|
24237
|
+
'[style.display]': 'visible ? null : "none"',
|
|
24238
|
+
'[attr.aria-hidden]': 'visible ? null : "true"',
|
|
24239
|
+
'[attr.data-field-type]': '"inlinePeriodRange"',
|
|
24240
|
+
'[attr.data-field-name]': 'metadata()?.name',
|
|
24241
|
+
'[attr.data-component-id]': 'componentId()',
|
|
24242
|
+
},
|
|
24243
|
+
}]
|
|
24244
|
+
}], propDecorators: { innerComponent: [{
|
|
24245
|
+
type: ViewChild,
|
|
24246
|
+
args: [InlineRangeSliderComponent]
|
|
24247
|
+
}], readonlyMode: [{
|
|
24248
|
+
type: Input
|
|
24249
|
+
}], disabledMode: [{
|
|
24250
|
+
type: Input
|
|
24251
|
+
}], visible: [{
|
|
24252
|
+
type: Input
|
|
24253
|
+
}], presentationMode: [{
|
|
24254
|
+
type: Input
|
|
24255
|
+
}] } });
|
|
24256
|
+
|
|
24257
|
+
class InlineYearRangeComponent extends SimpleBaseInputComponent {
|
|
24258
|
+
innerComponent;
|
|
24259
|
+
readonlyMode = false;
|
|
24260
|
+
disabledMode = false;
|
|
24261
|
+
visible = true;
|
|
24262
|
+
presentationMode = false;
|
|
24263
|
+
resolvedMetadata = computed(() => {
|
|
24264
|
+
const metadata = this.metadata();
|
|
24265
|
+
if (!metadata)
|
|
24266
|
+
return null;
|
|
24267
|
+
const maxYear = Number.isFinite(Number(metadata.max))
|
|
24268
|
+
? Number(metadata.max)
|
|
24269
|
+
: new Date().getFullYear();
|
|
24270
|
+
const minYear = Number.isFinite(Number(metadata.min))
|
|
24271
|
+
? Number(metadata.min)
|
|
24272
|
+
: Math.max(2000, maxYear - 10);
|
|
24273
|
+
const boundedMin = Math.min(minYear, maxYear);
|
|
24274
|
+
const boundedMax = Math.max(maxYear, minYear);
|
|
24275
|
+
const fullLabel = metadata.quickPresetsLabels?.full ||
|
|
24276
|
+
(boundedMin === boundedMax ? String(boundedMax) : 'Todo o período');
|
|
24277
|
+
const currentLabel = metadata.quickPresetsLabels?.current || String(boundedMax);
|
|
24278
|
+
const previousYear = Math.max(boundedMin, boundedMax - 1);
|
|
24279
|
+
const previousLabel = metadata.quickPresetsLabels?.previous || String(previousYear);
|
|
24280
|
+
const recentStart = Math.max(boundedMin, boundedMax - 2);
|
|
24281
|
+
const recentLabel = metadata.quickPresetsLabels?.recent ||
|
|
24282
|
+
(recentStart === boundedMax ? String(boundedMax) : `${recentStart}-${boundedMax}`);
|
|
24283
|
+
const quickPresets = metadata.quickPresets ??
|
|
24284
|
+
[
|
|
24285
|
+
{
|
|
24286
|
+
id: 'full',
|
|
24287
|
+
label: fullLabel,
|
|
24288
|
+
start: boundedMin,
|
|
24289
|
+
end: boundedMax,
|
|
24290
|
+
},
|
|
24291
|
+
{
|
|
24292
|
+
id: 'current',
|
|
24293
|
+
label: currentLabel,
|
|
24294
|
+
start: boundedMax,
|
|
24295
|
+
end: boundedMax,
|
|
24296
|
+
},
|
|
24297
|
+
...(previousYear < boundedMax
|
|
24298
|
+
? [
|
|
24299
|
+
{
|
|
24300
|
+
id: 'previous',
|
|
24301
|
+
label: previousLabel,
|
|
24302
|
+
start: previousYear,
|
|
24303
|
+
end: previousYear,
|
|
24304
|
+
},
|
|
24305
|
+
]
|
|
24306
|
+
: []),
|
|
24307
|
+
...(recentStart < boundedMax
|
|
24308
|
+
? [
|
|
24309
|
+
{
|
|
24310
|
+
id: 'recent',
|
|
24311
|
+
label: recentLabel,
|
|
24312
|
+
start: recentStart,
|
|
24313
|
+
end: boundedMax,
|
|
24314
|
+
},
|
|
24315
|
+
]
|
|
24316
|
+
: []),
|
|
24317
|
+
];
|
|
24318
|
+
return {
|
|
24319
|
+
...metadata,
|
|
24320
|
+
controlType: FieldControlType.RANGE_SLIDER,
|
|
24321
|
+
mode: 'range',
|
|
24322
|
+
min: boundedMin,
|
|
24323
|
+
max: boundedMax,
|
|
24324
|
+
step: Number.isFinite(Number(metadata.step)) ? Number(metadata.step) : 1,
|
|
24325
|
+
discrete: metadata.discrete ?? true,
|
|
24326
|
+
showTicks: metadata.showTicks ?? true,
|
|
24327
|
+
showInputs: metadata.showInputs ?? true,
|
|
24328
|
+
prefixIcon: metadata.prefixIcon || 'calendar_today',
|
|
24329
|
+
inlineTexts: metadata.inlineTexts ?? {
|
|
24330
|
+
minLabel: 'Ano inicial',
|
|
24331
|
+
maxLabel: 'Ano final',
|
|
24332
|
+
quickPresetsLabel: 'Anos rápidos',
|
|
24333
|
+
},
|
|
24334
|
+
displayWith: metadata.displayWith ??
|
|
24335
|
+
((value) => {
|
|
24336
|
+
const year = Math.round(value);
|
|
24337
|
+
return Number.isFinite(year) ? String(year) : '';
|
|
24338
|
+
}),
|
|
24339
|
+
quickPresets,
|
|
24340
|
+
quickPresetsAuto: false,
|
|
24341
|
+
};
|
|
24342
|
+
}, ...(ngDevMode ? [{ debugName: "resolvedMetadata" }] : []));
|
|
24343
|
+
getSpecificCssClasses() {
|
|
24344
|
+
return ['pdx-inline-year-range'];
|
|
24345
|
+
}
|
|
24346
|
+
ngAfterViewInit() {
|
|
24347
|
+
super.ngAfterViewInit();
|
|
24348
|
+
this.syncInnerMetadata();
|
|
24349
|
+
}
|
|
24350
|
+
setInputMetadata(metadata) {
|
|
24351
|
+
this.setMetadata(metadata);
|
|
24352
|
+
this.syncInnerMetadata();
|
|
24353
|
+
}
|
|
24354
|
+
setMetadata(metadata) {
|
|
24355
|
+
super.setMetadata(metadata);
|
|
24356
|
+
this.syncInnerMetadata();
|
|
24357
|
+
}
|
|
24358
|
+
syncInnerMetadata() {
|
|
24359
|
+
const metadata = this.resolvedMetadata();
|
|
24360
|
+
if (!metadata || !this.innerComponent)
|
|
24361
|
+
return;
|
|
24362
|
+
this.innerComponent.setMetadata(metadata);
|
|
24363
|
+
}
|
|
24364
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: InlineYearRangeComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
24365
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.17", type: InlineYearRangeComponent, isStandalone: true, selector: "pdx-inline-year-range", inputs: { readonlyMode: "readonlyMode", disabledMode: "disabledMode", visible: "visible", presentationMode: "presentationMode" }, host: { properties: { "style.display": "visible ? null : \"none\"", "attr.aria-hidden": "visible ? null : \"true\"", "attr.data-field-type": "\"inlineYearRange\"", "attr.data-field-name": "metadata()?.name", "attr.data-component-id": "componentId()" } }, providers: [
|
|
24366
|
+
{
|
|
24367
|
+
provide: NG_VALUE_ACCESSOR,
|
|
24368
|
+
useExisting: forwardRef(() => InlineYearRangeComponent),
|
|
24369
|
+
multi: true,
|
|
24370
|
+
},
|
|
24371
|
+
], viewQueries: [{ propertyName: "innerComponent", first: true, predicate: InlineRangeSliderComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: `
|
|
24372
|
+
<pdx-inline-range-slider
|
|
24373
|
+
[formControl]="control()"
|
|
24374
|
+
[readonlyMode]="readonlyMode"
|
|
24375
|
+
[disabledMode]="disabledMode"
|
|
24376
|
+
[visible]="visible"
|
|
24377
|
+
[presentationMode]="presentationMode"
|
|
24378
|
+
/>
|
|
24379
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: InlineRangeSliderComponent, selector: "pdx-inline-range-slider", inputs: ["readonlyMode", "disabledMode", "visible", "presentationMode"] }] });
|
|
24380
|
+
}
|
|
24381
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: InlineYearRangeComponent, decorators: [{
|
|
24382
|
+
type: Component,
|
|
24383
|
+
args: [{
|
|
24384
|
+
selector: 'pdx-inline-year-range',
|
|
24385
|
+
standalone: true,
|
|
24386
|
+
imports: [CommonModule, ReactiveFormsModule, InlineRangeSliderComponent],
|
|
24387
|
+
template: `
|
|
24388
|
+
<pdx-inline-range-slider
|
|
24389
|
+
[formControl]="control()"
|
|
24390
|
+
[readonlyMode]="readonlyMode"
|
|
24391
|
+
[disabledMode]="disabledMode"
|
|
24392
|
+
[visible]="visible"
|
|
24393
|
+
[presentationMode]="presentationMode"
|
|
24394
|
+
/>
|
|
24395
|
+
`,
|
|
24396
|
+
providers: [
|
|
24397
|
+
{
|
|
24398
|
+
provide: NG_VALUE_ACCESSOR,
|
|
24399
|
+
useExisting: forwardRef(() => InlineYearRangeComponent),
|
|
24400
|
+
multi: true,
|
|
24401
|
+
},
|
|
24402
|
+
],
|
|
24403
|
+
host: {
|
|
24404
|
+
'[style.display]': 'visible ? null : "none"',
|
|
24405
|
+
'[attr.aria-hidden]': 'visible ? null : "true"',
|
|
24406
|
+
'[attr.data-field-type]': '"inlineYearRange"',
|
|
24407
|
+
'[attr.data-field-name]': 'metadata()?.name',
|
|
24408
|
+
'[attr.data-component-id]': 'componentId()',
|
|
24409
|
+
},
|
|
24410
|
+
}]
|
|
24411
|
+
}], propDecorators: { innerComponent: [{
|
|
24412
|
+
type: ViewChild,
|
|
24413
|
+
args: [InlineRangeSliderComponent]
|
|
24414
|
+
}], readonlyMode: [{
|
|
24415
|
+
type: Input
|
|
24416
|
+
}], disabledMode: [{
|
|
24417
|
+
type: Input
|
|
24418
|
+
}], visible: [{
|
|
24419
|
+
type: Input
|
|
24420
|
+
}], presentationMode: [{
|
|
24421
|
+
type: Input
|
|
24422
|
+
}] } });
|
|
24423
|
+
|
|
24424
|
+
class InlineMonthRangeComponent extends SimpleBaseInputComponent {
|
|
24425
|
+
innerComponent;
|
|
24426
|
+
readonlyMode = false;
|
|
24427
|
+
disabledMode = false;
|
|
24428
|
+
visible = true;
|
|
24429
|
+
presentationMode = false;
|
|
24430
|
+
resolvedMetadata = computed(() => {
|
|
24431
|
+
const metadata = this.metadata();
|
|
24432
|
+
if (!metadata)
|
|
24433
|
+
return null;
|
|
24434
|
+
const labels = this.resolveMonthLabels(metadata);
|
|
24435
|
+
const fullLabel = metadata.quickPresetsLabels?.full || 'Ano todo';
|
|
24436
|
+
const firstHalfLabel = metadata.quickPresetsLabels?.firstHalf || 'Jan-Jun';
|
|
24437
|
+
const secondHalfLabel = metadata.quickPresetsLabels?.secondHalf || 'Jul-Dez';
|
|
24438
|
+
return {
|
|
24439
|
+
...metadata,
|
|
24440
|
+
controlType: FieldControlType.RANGE_SLIDER,
|
|
24441
|
+
mode: 'range',
|
|
24442
|
+
min: 1,
|
|
24443
|
+
max: 12,
|
|
24444
|
+
step: 1,
|
|
24445
|
+
discrete: metadata.discrete ?? true,
|
|
24446
|
+
showTicks: metadata.showTicks ?? true,
|
|
24447
|
+
showInputs: metadata.showInputs ?? false,
|
|
24448
|
+
prefixIcon: metadata.prefixIcon || 'calendar_view_month',
|
|
24449
|
+
inlineTexts: metadata.inlineTexts ?? {
|
|
24450
|
+
quickPresetsLabel: 'Períodos rápidos',
|
|
24451
|
+
},
|
|
24452
|
+
displayWith: metadata.displayWith ??
|
|
24453
|
+
((value) => {
|
|
24454
|
+
const monthNumber = Math.min(12, Math.max(1, Math.round(value)));
|
|
24455
|
+
return labels[monthNumber - 1] || String(monthNumber);
|
|
24456
|
+
}),
|
|
24457
|
+
quickPresets: metadata.quickPresets ??
|
|
24458
|
+
[
|
|
24459
|
+
{ id: 'full', label: fullLabel, start: 1, end: 12 },
|
|
24460
|
+
{ id: 'q1', label: metadata.quickPresetsLabels?.q1 || 'Q1', start: 1, end: 3 },
|
|
24461
|
+
{ id: 'q2', label: metadata.quickPresetsLabels?.q2 || 'Q2', start: 4, end: 6 },
|
|
24462
|
+
{ id: 'q3', label: metadata.quickPresetsLabels?.q3 || 'Q3', start: 7, end: 9 },
|
|
24463
|
+
{ id: 'q4', label: metadata.quickPresetsLabels?.q4 || 'Q4', start: 10, end: 12 },
|
|
24464
|
+
{ id: 'first-half', label: firstHalfLabel, start: 1, end: 6 },
|
|
24465
|
+
{ id: 'second-half', label: secondHalfLabel, start: 7, end: 12 },
|
|
24466
|
+
],
|
|
24467
|
+
quickPresetsAuto: false,
|
|
24468
|
+
};
|
|
24469
|
+
}, ...(ngDevMode ? [{ debugName: "resolvedMetadata" }] : []));
|
|
24470
|
+
getSpecificCssClasses() {
|
|
24471
|
+
return ['pdx-inline-month-range'];
|
|
24472
|
+
}
|
|
24473
|
+
ngAfterViewInit() {
|
|
24474
|
+
super.ngAfterViewInit();
|
|
24475
|
+
this.syncInnerMetadata();
|
|
24476
|
+
}
|
|
24477
|
+
setInputMetadata(metadata) {
|
|
24478
|
+
this.setMetadata(metadata);
|
|
24479
|
+
this.syncInnerMetadata();
|
|
24480
|
+
}
|
|
24481
|
+
setMetadata(metadata) {
|
|
24482
|
+
super.setMetadata(metadata);
|
|
24483
|
+
this.syncInnerMetadata();
|
|
24484
|
+
}
|
|
24485
|
+
resolveMonthLabels(metadata) {
|
|
24486
|
+
if (Array.isArray(metadata.monthLabels) && metadata.monthLabels.length >= 12) {
|
|
24487
|
+
return metadata.monthLabels.slice(0, 12);
|
|
24488
|
+
}
|
|
24489
|
+
const formatter = new Intl.DateTimeFormat('pt-BR', { month: 'short' });
|
|
24490
|
+
return Array.from({ length: 12 }, (_, index) => {
|
|
24491
|
+
const raw = formatter.format(new Date(2020, index, 1)).replace('.', '');
|
|
24492
|
+
return raw.charAt(0).toUpperCase() + raw.slice(1);
|
|
24493
|
+
});
|
|
24494
|
+
}
|
|
24495
|
+
syncInnerMetadata() {
|
|
24496
|
+
const metadata = this.resolvedMetadata();
|
|
24497
|
+
if (!metadata || !this.innerComponent)
|
|
24498
|
+
return;
|
|
24499
|
+
this.innerComponent.setMetadata(metadata);
|
|
24500
|
+
}
|
|
24501
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: InlineMonthRangeComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
24502
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.17", type: InlineMonthRangeComponent, isStandalone: true, selector: "pdx-inline-month-range", inputs: { readonlyMode: "readonlyMode", disabledMode: "disabledMode", visible: "visible", presentationMode: "presentationMode" }, host: { properties: { "style.display": "visible ? null : \"none\"", "attr.aria-hidden": "visible ? null : \"true\"", "attr.data-field-type": "\"inlineMonthRange\"", "attr.data-field-name": "metadata()?.name", "attr.data-component-id": "componentId()" } }, providers: [
|
|
24503
|
+
{
|
|
24504
|
+
provide: NG_VALUE_ACCESSOR,
|
|
24505
|
+
useExisting: forwardRef(() => InlineMonthRangeComponent),
|
|
24506
|
+
multi: true,
|
|
24507
|
+
},
|
|
24508
|
+
], viewQueries: [{ propertyName: "innerComponent", first: true, predicate: InlineRangeSliderComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: `
|
|
24509
|
+
<pdx-inline-range-slider
|
|
24510
|
+
[formControl]="control()"
|
|
24511
|
+
[readonlyMode]="readonlyMode"
|
|
24512
|
+
[disabledMode]="disabledMode"
|
|
24513
|
+
[visible]="visible"
|
|
24514
|
+
[presentationMode]="presentationMode"
|
|
24515
|
+
/>
|
|
24516
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: InlineRangeSliderComponent, selector: "pdx-inline-range-slider", inputs: ["readonlyMode", "disabledMode", "visible", "presentationMode"] }] });
|
|
24517
|
+
}
|
|
24518
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: InlineMonthRangeComponent, decorators: [{
|
|
24519
|
+
type: Component,
|
|
24520
|
+
args: [{
|
|
24521
|
+
selector: 'pdx-inline-month-range',
|
|
24522
|
+
standalone: true,
|
|
24523
|
+
imports: [CommonModule, ReactiveFormsModule, InlineRangeSliderComponent],
|
|
24524
|
+
template: `
|
|
24525
|
+
<pdx-inline-range-slider
|
|
24526
|
+
[formControl]="control()"
|
|
24527
|
+
[readonlyMode]="readonlyMode"
|
|
24528
|
+
[disabledMode]="disabledMode"
|
|
24529
|
+
[visible]="visible"
|
|
24530
|
+
[presentationMode]="presentationMode"
|
|
24531
|
+
/>
|
|
24532
|
+
`,
|
|
24533
|
+
providers: [
|
|
24534
|
+
{
|
|
24535
|
+
provide: NG_VALUE_ACCESSOR,
|
|
24536
|
+
useExisting: forwardRef(() => InlineMonthRangeComponent),
|
|
24537
|
+
multi: true,
|
|
24538
|
+
},
|
|
24539
|
+
],
|
|
24540
|
+
host: {
|
|
24541
|
+
'[style.display]': 'visible ? null : "none"',
|
|
24542
|
+
'[attr.aria-hidden]': 'visible ? null : "true"',
|
|
24543
|
+
'[attr.data-field-type]': '"inlineMonthRange"',
|
|
24544
|
+
'[attr.data-field-name]': 'metadata()?.name',
|
|
24545
|
+
'[attr.data-component-id]': 'componentId()',
|
|
24546
|
+
},
|
|
24547
|
+
}]
|
|
24548
|
+
}], propDecorators: { innerComponent: [{
|
|
24549
|
+
type: ViewChild,
|
|
24550
|
+
args: [InlineRangeSliderComponent]
|
|
24551
|
+
}], readonlyMode: [{
|
|
24552
|
+
type: Input
|
|
24553
|
+
}], disabledMode: [{
|
|
24554
|
+
type: Input
|
|
24555
|
+
}], visible: [{
|
|
24556
|
+
type: Input
|
|
24557
|
+
}], presentationMode: [{
|
|
24558
|
+
type: Input
|
|
24559
|
+
}] } });
|
|
24560
|
+
|
|
23676
24561
|
class InlineDateComponent extends MaterialDatepickerComponent {
|
|
23677
24562
|
inputEl;
|
|
23678
24563
|
measureEl;
|
|
@@ -45619,6 +46504,60 @@ const PDX_INLINE_RANGE_SLIDER_COMPONENT_METADATA = {
|
|
|
45619
46504
|
lib: '@praxisui/dynamic-fields',
|
|
45620
46505
|
};
|
|
45621
46506
|
|
|
46507
|
+
const PDX_INLINE_PERIOD_RANGE_COMPONENT_METADATA = {
|
|
46508
|
+
id: 'pdx-inline-period-range',
|
|
46509
|
+
selector: 'pdx-inline-period-range',
|
|
46510
|
+
component: InlinePeriodRangeComponent,
|
|
46511
|
+
friendlyName: 'Inline Period Range',
|
|
46512
|
+
description: 'Faixa temporal corporativa por granularidade, cobrindo meses, trimestres, anos e períodos fiscais em um contrato inline canônico.',
|
|
46513
|
+
icon: 'date_range',
|
|
46514
|
+
inputs: [
|
|
46515
|
+
{ name: 'metadata', type: 'InlinePeriodRangeMetadata', description: 'Configuração do campo' },
|
|
46516
|
+
{ name: 'readonlyMode', type: 'boolean', default: false, description: 'Define modo somente leitura' },
|
|
46517
|
+
{ name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilita o campo' },
|
|
46518
|
+
{ name: 'visible', type: 'boolean', default: true, description: 'Controla a visibilidade' },
|
|
46519
|
+
{ name: 'presentationMode', type: 'boolean', default: false, description: 'Modo de apresentação' },
|
|
46520
|
+
],
|
|
46521
|
+
tags: ['widget', 'field', 'period', 'range', 'filter', 'inline', 'temporal'],
|
|
46522
|
+
lib: '@praxisui/dynamic-fields',
|
|
46523
|
+
};
|
|
46524
|
+
|
|
46525
|
+
const PDX_INLINE_YEAR_RANGE_COMPONENT_METADATA = {
|
|
46526
|
+
id: 'pdx-inline-year-range',
|
|
46527
|
+
selector: 'pdx-inline-year-range',
|
|
46528
|
+
component: InlineYearRangeComponent,
|
|
46529
|
+
friendlyName: 'Inline Year Range',
|
|
46530
|
+
description: 'Faixa anual compacta para filtros inline corporativos, com slider dedicado, presets por período recente e leitura semântica orientada a analytics.',
|
|
46531
|
+
icon: 'calendar_today',
|
|
46532
|
+
inputs: [
|
|
46533
|
+
{ name: 'metadata', type: 'InlineYearRangeMetadata', description: 'Configuração do campo' },
|
|
46534
|
+
{ name: 'readonlyMode', type: 'boolean', default: false, description: 'Define modo somente leitura' },
|
|
46535
|
+
{ name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilita o campo' },
|
|
46536
|
+
{ name: 'visible', type: 'boolean', default: true, description: 'Controla a visibilidade' },
|
|
46537
|
+
{ name: 'presentationMode', type: 'boolean', default: false, description: 'Modo de apresentação' },
|
|
46538
|
+
],
|
|
46539
|
+
tags: ['widget', 'field', 'year', 'range', 'filter', 'inline'],
|
|
46540
|
+
lib: '@praxisui/dynamic-fields',
|
|
46541
|
+
};
|
|
46542
|
+
|
|
46543
|
+
const PDX_INLINE_MONTH_RANGE_COMPONENT_METADATA = {
|
|
46544
|
+
id: 'pdx-inline-month-range',
|
|
46545
|
+
selector: 'pdx-inline-month-range',
|
|
46546
|
+
component: InlineMonthRangeComponent,
|
|
46547
|
+
friendlyName: 'Inline Month Range',
|
|
46548
|
+
description: 'Faixa mensal compacta para filtros inline, com leitura por nomes de mês e atalhos de trimestre/semestre para dashboards analíticos.',
|
|
46549
|
+
icon: 'calendar_view_month',
|
|
46550
|
+
inputs: [
|
|
46551
|
+
{ name: 'metadata', type: 'InlineMonthRangeMetadata', description: 'Configuração do campo' },
|
|
46552
|
+
{ name: 'readonlyMode', type: 'boolean', default: false, description: 'Define modo somente leitura' },
|
|
46553
|
+
{ name: 'disabledMode', type: 'boolean', default: false, description: 'Desabilita o campo' },
|
|
46554
|
+
{ name: 'visible', type: 'boolean', default: true, description: 'Controla a visibilidade' },
|
|
46555
|
+
{ name: 'presentationMode', type: 'boolean', default: false, description: 'Modo de apresentação' },
|
|
46556
|
+
],
|
|
46557
|
+
tags: ['widget', 'field', 'month', 'range', 'filter', 'inline'],
|
|
46558
|
+
lib: '@praxisui/dynamic-fields',
|
|
46559
|
+
};
|
|
46560
|
+
|
|
45622
46561
|
const PDX_INLINE_DATE_COMPONENT_METADATA = {
|
|
45623
46562
|
id: 'pdx-inline-date',
|
|
45624
46563
|
selector: 'pdx-inline-date',
|
|
@@ -47047,6 +47986,1139 @@ function providePraxisDynamicFieldsCoreNoDefaults() {
|
|
|
47047
47986
|
];
|
|
47048
47987
|
}
|
|
47049
47988
|
|
|
47989
|
+
const DYNAMIC_FIELD_DEFAULT_STATE_RECIPE = {
|
|
47990
|
+
state: 'default',
|
|
47991
|
+
label: 'Default',
|
|
47992
|
+
supported: true,
|
|
47993
|
+
};
|
|
47994
|
+
const DYNAMIC_FIELD_FILLED_STATE_RECIPE = {
|
|
47995
|
+
state: 'filled',
|
|
47996
|
+
label: 'Filled',
|
|
47997
|
+
supported: true,
|
|
47998
|
+
note: 'Consumer or playground should provide a representative value for the field.',
|
|
47999
|
+
};
|
|
48000
|
+
const DYNAMIC_FIELD_DISABLED_STATE_RECIPE = {
|
|
48001
|
+
state: 'disabled',
|
|
48002
|
+
label: 'Disabled',
|
|
48003
|
+
supported: true,
|
|
48004
|
+
metadataPatch: { disabled: true },
|
|
48005
|
+
};
|
|
48006
|
+
const DYNAMIC_FIELD_READONLY_STATE_RECIPE = {
|
|
48007
|
+
state: 'readonly',
|
|
48008
|
+
label: 'Readonly',
|
|
48009
|
+
supported: true,
|
|
48010
|
+
metadataPatch: { readonly: true },
|
|
48011
|
+
};
|
|
48012
|
+
const DYNAMIC_FIELD_ERROR_STATE_RECIPE = {
|
|
48013
|
+
state: 'error',
|
|
48014
|
+
label: 'Error',
|
|
48015
|
+
supported: true,
|
|
48016
|
+
metadataPatch: {
|
|
48017
|
+
required: true,
|
|
48018
|
+
validators: {
|
|
48019
|
+
requiredMessage: 'Governed sample error state for playground preview.',
|
|
48020
|
+
validationTrigger: 'immediate',
|
|
48021
|
+
},
|
|
48022
|
+
},
|
|
48023
|
+
errorMessage: 'Governed sample error state for playground preview.',
|
|
48024
|
+
};
|
|
48025
|
+
const DYNAMIC_FIELD_BASE_STATE_RECIPES = [
|
|
48026
|
+
DYNAMIC_FIELD_DEFAULT_STATE_RECIPE,
|
|
48027
|
+
DYNAMIC_FIELD_FILLED_STATE_RECIPE,
|
|
48028
|
+
DYNAMIC_FIELD_DISABLED_STATE_RECIPE,
|
|
48029
|
+
DYNAMIC_FIELD_READONLY_STATE_RECIPE,
|
|
48030
|
+
DYNAMIC_FIELD_ERROR_STATE_RECIPE,
|
|
48031
|
+
];
|
|
48032
|
+
function createDynamicFieldPreviewRecipe(input) {
|
|
48033
|
+
return {
|
|
48034
|
+
recipeId: input.recipeId,
|
|
48035
|
+
fieldName: input.fieldName,
|
|
48036
|
+
label: input.label,
|
|
48037
|
+
description: input.description,
|
|
48038
|
+
baseMetadata: {
|
|
48039
|
+
name: input.fieldName,
|
|
48040
|
+
label: input.label,
|
|
48041
|
+
controlType: input.controlType,
|
|
48042
|
+
...(input.metadata ?? {}),
|
|
48043
|
+
},
|
|
48044
|
+
states: input.states ? [...input.states] : [...DYNAMIC_FIELD_BASE_STATE_RECIPES],
|
|
48045
|
+
};
|
|
48046
|
+
}
|
|
48047
|
+
|
|
48048
|
+
const PRIMARY_CATALOG_SLUG = 'dynamic-fields-field-catalog';
|
|
48049
|
+
const INLINE_CATALOG_SLUG = 'dynamic-fields-inline-filter-catalog';
|
|
48050
|
+
const OVERVIEW_SLUG = 'dynamic-fields-overview';
|
|
48051
|
+
const SELECTION_GUIDE_SLUG = 'dynamic-fields-field-selection-guide';
|
|
48052
|
+
const INLINE_SELECTION_GUIDE_SLUG = 'dynamic-fields-inline-filter-selection-guide';
|
|
48053
|
+
const DEFAULT_A11Y_NOTES = [
|
|
48054
|
+
'Use labels claros e nao dependa apenas de placeholder.',
|
|
48055
|
+
'Garanta foco visivel, contraste AA e mensagens de erro textuais.',
|
|
48056
|
+
];
|
|
48057
|
+
const DEFAULT_THEMING_NOTES = [
|
|
48058
|
+
'O preview deve respeitar tokens do host e nao introduzir skin isolada da landing.',
|
|
48059
|
+
];
|
|
48060
|
+
function detailFragment(controlType) {
|
|
48061
|
+
return controlType.toLowerCase().replace(/[^a-z0-9-]+/g, '-');
|
|
48062
|
+
}
|
|
48063
|
+
function jsonApiPath(relativePath) {
|
|
48064
|
+
return `projects/praxis-dynamic-fields/src/lib/components/${relativePath}`;
|
|
48065
|
+
}
|
|
48066
|
+
function createEntry(input) {
|
|
48067
|
+
const states = input.states ?? ['default', 'filled', 'disabled', 'readonly', 'error'];
|
|
48068
|
+
return {
|
|
48069
|
+
id: input.id,
|
|
48070
|
+
controlType: input.controlType,
|
|
48071
|
+
track: input.track,
|
|
48072
|
+
family: input.family,
|
|
48073
|
+
status: input.status ?? 'stable',
|
|
48074
|
+
friendlyName: input.friendlyName,
|
|
48075
|
+
description: input.description,
|
|
48076
|
+
tags: input.tags,
|
|
48077
|
+
keywords: input.keywords ?? input.tags,
|
|
48078
|
+
valueShape: input.valueShape,
|
|
48079
|
+
recommendedWhen: input.recommendedWhen,
|
|
48080
|
+
avoidWhen: input.avoidWhen,
|
|
48081
|
+
dataSourceKind: input.dataSourceKind,
|
|
48082
|
+
supportsStates: states,
|
|
48083
|
+
docs: {
|
|
48084
|
+
catalogSlug: input.catalogSlug ?? (input.track === 'inline-filter' ? INLINE_CATALOG_SLUG : PRIMARY_CATALOG_SLUG),
|
|
48085
|
+
detailFragment: input.detailFragment ?? detailFragment(input.controlType),
|
|
48086
|
+
selectionGuideSlug: input.selectionGuideSlug ?? (input.track === 'inline-filter' ? INLINE_SELECTION_GUIDE_SLUG : SELECTION_GUIDE_SLUG),
|
|
48087
|
+
overviewSlug: input.overviewSlug ?? OVERVIEW_SLUG,
|
|
48088
|
+
jsonApiPath: input.apiPath,
|
|
48089
|
+
},
|
|
48090
|
+
previewRecipe: createDynamicFieldPreviewRecipe({
|
|
48091
|
+
recipeId: input.id,
|
|
48092
|
+
fieldName: `${input.id}Field`,
|
|
48093
|
+
label: input.friendlyName,
|
|
48094
|
+
controlType: input.controlType,
|
|
48095
|
+
description: input.description,
|
|
48096
|
+
metadata: input.metadata,
|
|
48097
|
+
states: input.stateRecipes,
|
|
48098
|
+
}),
|
|
48099
|
+
snippetRecipe: {
|
|
48100
|
+
language: input.snippetLanguage ?? 'json',
|
|
48101
|
+
snippet: input.snippet ??
|
|
48102
|
+
`{ "name": "${input.id}", "label": "${input.friendlyName}", "controlType": "${input.controlType}" }`,
|
|
48103
|
+
note: input.snippetNote,
|
|
48104
|
+
},
|
|
48105
|
+
a11yNotes: input.a11yNotes ?? DEFAULT_A11Y_NOTES,
|
|
48106
|
+
themingNotes: input.themingNotes ?? DEFAULT_THEMING_NOTES,
|
|
48107
|
+
};
|
|
48108
|
+
}
|
|
48109
|
+
const DYNAMIC_FIELDS_PLAYGROUND_CATALOG = [
|
|
48110
|
+
createEntry({
|
|
48111
|
+
id: 'text-input',
|
|
48112
|
+
controlType: FieldControlType.INPUT,
|
|
48113
|
+
track: 'primary-form',
|
|
48114
|
+
family: 'text',
|
|
48115
|
+
friendlyName: 'Text input',
|
|
48116
|
+
description: 'Entrada textual curta e canonica para formularios metadata-driven.',
|
|
48117
|
+
tags: ['text', 'input', 'form'],
|
|
48118
|
+
valueShape: 'string',
|
|
48119
|
+
recommendedWhen: ['texto livre curto', 'nome', 'descricao curta'],
|
|
48120
|
+
avoidWhen: ['lista governada de opcoes', 'texto longo multi-linha'],
|
|
48121
|
+
dataSourceKind: 'local',
|
|
48122
|
+
apiPath: jsonApiPath('text-input/pdx-text-input.json-api.md'),
|
|
48123
|
+
metadata: { placeholder: 'Type here' },
|
|
48124
|
+
}),
|
|
48125
|
+
createEntry({
|
|
48126
|
+
id: 'email-input',
|
|
48127
|
+
controlType: FieldControlType.EMAIL_INPUT,
|
|
48128
|
+
track: 'primary-form',
|
|
48129
|
+
family: 'text',
|
|
48130
|
+
friendlyName: 'Email input',
|
|
48131
|
+
description: 'Campo textual especializado para emails.',
|
|
48132
|
+
tags: ['text', 'email', 'validation'],
|
|
48133
|
+
valueShape: 'string',
|
|
48134
|
+
recommendedWhen: ['email validado', 'contato institucional'],
|
|
48135
|
+
avoidWhen: ['texto livre generico'],
|
|
48136
|
+
dataSourceKind: 'local',
|
|
48137
|
+
apiPath: jsonApiPath('email-input/pdx-email-input.json-api.md'),
|
|
48138
|
+
metadata: { placeholder: 'name@company.com' },
|
|
48139
|
+
}),
|
|
48140
|
+
createEntry({
|
|
48141
|
+
id: 'password-input',
|
|
48142
|
+
controlType: FieldControlType.PASSWORD,
|
|
48143
|
+
track: 'primary-form',
|
|
48144
|
+
family: 'text',
|
|
48145
|
+
friendlyName: 'Password input',
|
|
48146
|
+
description: 'Campo de segredo com mascaramento e interacao apropriada.',
|
|
48147
|
+
tags: ['text', 'password', 'security'],
|
|
48148
|
+
valueShape: 'string',
|
|
48149
|
+
recommendedWhen: ['segredos', 'credenciais'],
|
|
48150
|
+
avoidWhen: ['valor que precisa ficar legivel em tela'],
|
|
48151
|
+
dataSourceKind: 'local',
|
|
48152
|
+
apiPath: jsonApiPath('password-input/pdx-password-input.json-api.md'),
|
|
48153
|
+
}),
|
|
48154
|
+
createEntry({
|
|
48155
|
+
id: 'textarea',
|
|
48156
|
+
controlType: FieldControlType.TEXTAREA,
|
|
48157
|
+
track: 'primary-form',
|
|
48158
|
+
family: 'text',
|
|
48159
|
+
friendlyName: 'Textarea',
|
|
48160
|
+
description: 'Campo multi-linha para observacoes e conteudo textual maior.',
|
|
48161
|
+
tags: ['text', 'textarea', 'multiline'],
|
|
48162
|
+
valueShape: 'string',
|
|
48163
|
+
recommendedWhen: ['descricao longa', 'observacoes', 'justificativa'],
|
|
48164
|
+
avoidWhen: ['texto curto de uma linha'],
|
|
48165
|
+
dataSourceKind: 'local',
|
|
48166
|
+
apiPath: jsonApiPath('material-textarea/pdx-material-textarea.json-api.md'),
|
|
48167
|
+
metadata: { rows: 4, placeholder: 'Describe the situation' },
|
|
48168
|
+
}),
|
|
48169
|
+
createEntry({
|
|
48170
|
+
id: 'search-input',
|
|
48171
|
+
controlType: FieldControlType.SEARCH_INPUT,
|
|
48172
|
+
track: 'primary-form',
|
|
48173
|
+
family: 'text',
|
|
48174
|
+
friendlyName: 'Search input',
|
|
48175
|
+
description: 'Entrada textual dedicada a busca.',
|
|
48176
|
+
tags: ['text', 'search', 'query'],
|
|
48177
|
+
valueShape: 'string',
|
|
48178
|
+
recommendedWhen: ['busca textual', 'query curta'],
|
|
48179
|
+
avoidWhen: ['campo de negocio comum sem semantica de busca'],
|
|
48180
|
+
dataSourceKind: 'local',
|
|
48181
|
+
apiPath: jsonApiPath('search-input/pdx-search-input.json-api.md'),
|
|
48182
|
+
metadata: { placeholder: 'Search records' },
|
|
48183
|
+
}),
|
|
48184
|
+
createEntry({
|
|
48185
|
+
id: 'phone-input',
|
|
48186
|
+
controlType: FieldControlType.PHONE,
|
|
48187
|
+
track: 'primary-form',
|
|
48188
|
+
family: 'text',
|
|
48189
|
+
friendlyName: 'Phone input',
|
|
48190
|
+
description: 'Campo especializado para telefone.',
|
|
48191
|
+
tags: ['text', 'phone', 'formatted'],
|
|
48192
|
+
valueShape: 'string',
|
|
48193
|
+
recommendedWhen: ['telefone', 'contato'],
|
|
48194
|
+
avoidWhen: ['dominio sem telefone'],
|
|
48195
|
+
dataSourceKind: 'local',
|
|
48196
|
+
status: 'partial-docs',
|
|
48197
|
+
apiPath: jsonApiPath('phone-input/pdx-phone-input.json-api.md'),
|
|
48198
|
+
}),
|
|
48199
|
+
createEntry({
|
|
48200
|
+
id: 'url-input',
|
|
48201
|
+
controlType: FieldControlType.URL_INPUT,
|
|
48202
|
+
track: 'primary-form',
|
|
48203
|
+
family: 'text',
|
|
48204
|
+
friendlyName: 'URL input',
|
|
48205
|
+
description: 'Campo para links e URLs.',
|
|
48206
|
+
tags: ['text', 'url', 'link'],
|
|
48207
|
+
valueShape: 'string',
|
|
48208
|
+
recommendedWhen: ['website', 'link institucional'],
|
|
48209
|
+
avoidWhen: ['texto generico'],
|
|
48210
|
+
dataSourceKind: 'local',
|
|
48211
|
+
status: 'partial-docs',
|
|
48212
|
+
apiPath: jsonApiPath('url-input/pdx-url-input.json-api.md'),
|
|
48213
|
+
}),
|
|
48214
|
+
createEntry({
|
|
48215
|
+
id: 'cpf-cnpj-input',
|
|
48216
|
+
controlType: FieldControlType.CPF_CNPJ_INPUT,
|
|
48217
|
+
track: 'primary-form',
|
|
48218
|
+
family: 'text',
|
|
48219
|
+
friendlyName: 'CPF/CNPJ input',
|
|
48220
|
+
description: 'Campo regionalizado para documento brasileiro.',
|
|
48221
|
+
tags: ['text', 'brazil', 'document'],
|
|
48222
|
+
valueShape: 'string',
|
|
48223
|
+
recommendedWhen: ['CPF', 'CNPJ', 'documento BR'],
|
|
48224
|
+
avoidWhen: ['dominio internacional ou sem documento nacional'],
|
|
48225
|
+
dataSourceKind: 'local',
|
|
48226
|
+
status: 'partial-docs',
|
|
48227
|
+
apiPath: jsonApiPath('material-cpf-cnpj-input/pdx-material-cpf-cnpj-input.json-api.md'),
|
|
48228
|
+
}),
|
|
48229
|
+
createEntry({
|
|
48230
|
+
id: 'number-input',
|
|
48231
|
+
controlType: FieldControlType.NUMERIC_TEXT_BOX,
|
|
48232
|
+
track: 'primary-form',
|
|
48233
|
+
family: 'numbers-range',
|
|
48234
|
+
friendlyName: 'Number input',
|
|
48235
|
+
description: 'Campo numerico canonico para valores pontuais.',
|
|
48236
|
+
tags: ['number', 'numeric', 'form'],
|
|
48237
|
+
valueShape: 'number',
|
|
48238
|
+
recommendedWhen: ['idade', 'quantidade', 'score unico'],
|
|
48239
|
+
avoidWhen: ['range', 'moeda'],
|
|
48240
|
+
dataSourceKind: 'local',
|
|
48241
|
+
status: 'partial-docs',
|
|
48242
|
+
apiPath: jsonApiPath('number-input/pdx-number-input.json-api.md'),
|
|
48243
|
+
}),
|
|
48244
|
+
createEntry({
|
|
48245
|
+
id: 'currency-input',
|
|
48246
|
+
controlType: FieldControlType.CURRENCY_INPUT,
|
|
48247
|
+
track: 'primary-form',
|
|
48248
|
+
family: 'numbers-range',
|
|
48249
|
+
friendlyName: 'Currency input',
|
|
48250
|
+
description: 'Campo monetario para valor unico.',
|
|
48251
|
+
tags: ['number', 'currency', 'money'],
|
|
48252
|
+
valueShape: 'number',
|
|
48253
|
+
recommendedWhen: ['orcamento', 'ticket medio', 'valor monetario unico'],
|
|
48254
|
+
avoidWhen: ['faixa monetaria'],
|
|
48255
|
+
dataSourceKind: 'local',
|
|
48256
|
+
apiPath: jsonApiPath('material-currency/pdx-material-currency.json-api.md'),
|
|
48257
|
+
metadata: { currency: 'BRL', locale: 'pt-BR' },
|
|
48258
|
+
}),
|
|
48259
|
+
createEntry({
|
|
48260
|
+
id: 'slider',
|
|
48261
|
+
controlType: FieldControlType.SLIDER,
|
|
48262
|
+
track: 'primary-form',
|
|
48263
|
+
family: 'numbers-range',
|
|
48264
|
+
friendlyName: 'Slider',
|
|
48265
|
+
description: 'Campo de faixa continua para valor unico.',
|
|
48266
|
+
tags: ['number', 'slider', 'range'],
|
|
48267
|
+
valueShape: 'number',
|
|
48268
|
+
recommendedWhen: ['nota', 'nivel', 'escala continua'],
|
|
48269
|
+
avoidWhen: ['valor financeiro complexo', 'range duplo'],
|
|
48270
|
+
dataSourceKind: 'local',
|
|
48271
|
+
apiPath: jsonApiPath('material-slider/pdx-material-slider.json-api.md'),
|
|
48272
|
+
metadata: { min: 0, max: 10 },
|
|
48273
|
+
}),
|
|
48274
|
+
createEntry({
|
|
48275
|
+
id: 'range-slider',
|
|
48276
|
+
controlType: FieldControlType.RANGE_SLIDER,
|
|
48277
|
+
track: 'primary-form',
|
|
48278
|
+
family: 'numbers-range',
|
|
48279
|
+
friendlyName: 'Range slider',
|
|
48280
|
+
description: 'Campo para faixa numerica com um ou dois bounds.',
|
|
48281
|
+
tags: ['number', 'range', 'slider'],
|
|
48282
|
+
valueShape: 'number | { start, end }',
|
|
48283
|
+
recommendedWhen: ['faixa numerica', 'limite minimo e maximo'],
|
|
48284
|
+
avoidWhen: ['datas ou horarios'],
|
|
48285
|
+
dataSourceKind: 'local',
|
|
48286
|
+
status: 'partial-docs',
|
|
48287
|
+
apiPath: jsonApiPath('material-range-slider/pdx-material-range-slider.json-api.md'),
|
|
48288
|
+
}),
|
|
48289
|
+
createEntry({
|
|
48290
|
+
id: 'price-range',
|
|
48291
|
+
controlType: FieldControlType.PRICE_RANGE,
|
|
48292
|
+
track: 'primary-form',
|
|
48293
|
+
family: 'numbers-range',
|
|
48294
|
+
friendlyName: 'Price range',
|
|
48295
|
+
description: 'Faixa monetaria com semantica propria.',
|
|
48296
|
+
tags: ['number', 'currency', 'range'],
|
|
48297
|
+
valueShape: '{ min, max }',
|
|
48298
|
+
recommendedWhen: ['faixa de preco', 'banda salarial', 'orcamento minimo/maximo'],
|
|
48299
|
+
avoidWhen: ['valor monetario unico'],
|
|
48300
|
+
dataSourceKind: 'local',
|
|
48301
|
+
status: 'partial-docs',
|
|
48302
|
+
apiPath: jsonApiPath('material-price-range/pdx-material-price-range.json-api.md'),
|
|
48303
|
+
metadata: { currency: 'BRL', locale: 'pt-BR' },
|
|
48304
|
+
}),
|
|
48305
|
+
createEntry({
|
|
48306
|
+
id: 'rating',
|
|
48307
|
+
controlType: FieldControlType.RATING,
|
|
48308
|
+
track: 'primary-form',
|
|
48309
|
+
family: 'numbers-range',
|
|
48310
|
+
friendlyName: 'Rating',
|
|
48311
|
+
description: 'Controle visual de nota.',
|
|
48312
|
+
tags: ['number', 'rating', 'visual'],
|
|
48313
|
+
valueShape: 'number',
|
|
48314
|
+
recommendedWhen: ['avaliacao visual', 'satisfacao', 'score legivel'],
|
|
48315
|
+
avoidWhen: ['quando numero bruto ja basta'],
|
|
48316
|
+
dataSourceKind: 'local',
|
|
48317
|
+
apiPath: jsonApiPath('material-rating/pdx-material-rating.json-api.md'),
|
|
48318
|
+
metadata: { max: 5 },
|
|
48319
|
+
}),
|
|
48320
|
+
createEntry({
|
|
48321
|
+
id: 'date-input',
|
|
48322
|
+
controlType: FieldControlType.DATE_INPUT,
|
|
48323
|
+
track: 'primary-form',
|
|
48324
|
+
family: 'date-time',
|
|
48325
|
+
friendlyName: 'Date input',
|
|
48326
|
+
description: 'Input nativo de data.',
|
|
48327
|
+
tags: ['date', 'native', 'time'],
|
|
48328
|
+
valueShape: 'string | Date',
|
|
48329
|
+
recommendedWhen: ['integracao simples com input nativo'],
|
|
48330
|
+
avoidWhen: ['quando a UX Material padronizada e obrigatoria'],
|
|
48331
|
+
dataSourceKind: 'local',
|
|
48332
|
+
status: 'partial-docs',
|
|
48333
|
+
apiPath: jsonApiPath('date-input/pdx-date-input.json-api.md'),
|
|
48334
|
+
}),
|
|
48335
|
+
createEntry({
|
|
48336
|
+
id: 'date-picker',
|
|
48337
|
+
controlType: FieldControlType.DATE_PICKER,
|
|
48338
|
+
track: 'primary-form',
|
|
48339
|
+
family: 'date-time',
|
|
48340
|
+
friendlyName: 'Date picker',
|
|
48341
|
+
description: 'Datepicker Material canonico.',
|
|
48342
|
+
tags: ['date', 'picker', 'material'],
|
|
48343
|
+
valueShape: 'Date | string',
|
|
48344
|
+
recommendedWhen: ['data unica', 'consistencia de design system'],
|
|
48345
|
+
avoidWhen: ['range temporal'],
|
|
48346
|
+
dataSourceKind: 'local',
|
|
48347
|
+
apiPath: jsonApiPath('material-datepicker/pdx-material-datepicker.json-api.md'),
|
|
48348
|
+
}),
|
|
48349
|
+
createEntry({
|
|
48350
|
+
id: 'date-range',
|
|
48351
|
+
controlType: FieldControlType.DATE_RANGE,
|
|
48352
|
+
track: 'primary-form',
|
|
48353
|
+
family: 'date-time',
|
|
48354
|
+
friendlyName: 'Date range',
|
|
48355
|
+
description: 'Intervalo de datas.',
|
|
48356
|
+
tags: ['date', 'range', 'time'],
|
|
48357
|
+
valueShape: '{ startDate, endDate }',
|
|
48358
|
+
recommendedWhen: ['periodo', 'janela temporal'],
|
|
48359
|
+
avoidWhen: ['data unica'],
|
|
48360
|
+
dataSourceKind: 'local',
|
|
48361
|
+
apiPath: jsonApiPath('material-date-range/pdx-material-date-range.json-api.md'),
|
|
48362
|
+
}),
|
|
48363
|
+
createEntry({
|
|
48364
|
+
id: 'datetime-local',
|
|
48365
|
+
controlType: FieldControlType.DATETIME_LOCAL_INPUT,
|
|
48366
|
+
track: 'primary-form',
|
|
48367
|
+
family: 'date-time',
|
|
48368
|
+
friendlyName: 'Datetime local',
|
|
48369
|
+
description: 'Campo unificado para data e hora local.',
|
|
48370
|
+
tags: ['date', 'time', 'datetime'],
|
|
48371
|
+
valueShape: 'string',
|
|
48372
|
+
recommendedWhen: ['agendamento local', 'data + hora no mesmo campo'],
|
|
48373
|
+
avoidWhen: ['quando data e hora precisam de UX separada'],
|
|
48374
|
+
dataSourceKind: 'local',
|
|
48375
|
+
status: 'partial-docs',
|
|
48376
|
+
apiPath: jsonApiPath('datetime-local-input/pdx-datetime-local-input.json-api.md'),
|
|
48377
|
+
}),
|
|
48378
|
+
createEntry({
|
|
48379
|
+
id: 'month-input',
|
|
48380
|
+
controlType: FieldControlType.MONTH_INPUT,
|
|
48381
|
+
track: 'primary-form',
|
|
48382
|
+
family: 'date-time',
|
|
48383
|
+
friendlyName: 'Month input',
|
|
48384
|
+
description: 'Campo especializado para mes e ano.',
|
|
48385
|
+
tags: ['date', 'month', 'competence'],
|
|
48386
|
+
valueShape: 'string',
|
|
48387
|
+
recommendedWhen: ['competencia', 'mes/ano'],
|
|
48388
|
+
avoidWhen: ['data completa'],
|
|
48389
|
+
dataSourceKind: 'local',
|
|
48390
|
+
status: 'partial-docs',
|
|
48391
|
+
apiPath: jsonApiPath('month-input/pdx-month-input.json-api.md'),
|
|
48392
|
+
}),
|
|
48393
|
+
createEntry({
|
|
48394
|
+
id: 'time-input',
|
|
48395
|
+
controlType: FieldControlType.TIME_INPUT,
|
|
48396
|
+
track: 'primary-form',
|
|
48397
|
+
family: 'date-time',
|
|
48398
|
+
friendlyName: 'Time input',
|
|
48399
|
+
description: 'Campo simples para horario.',
|
|
48400
|
+
tags: ['time', 'input', 'hour'],
|
|
48401
|
+
valueShape: 'string',
|
|
48402
|
+
recommendedWhen: ['hora simples', 'slot horario'],
|
|
48403
|
+
avoidWhen: ['range horario'],
|
|
48404
|
+
dataSourceKind: 'local',
|
|
48405
|
+
apiPath: jsonApiPath('time-input/pdx-time-input.json-api.md'),
|
|
48406
|
+
}),
|
|
48407
|
+
createEntry({
|
|
48408
|
+
id: 'time-picker',
|
|
48409
|
+
controlType: FieldControlType.TIME_PICKER,
|
|
48410
|
+
track: 'primary-form',
|
|
48411
|
+
family: 'date-time',
|
|
48412
|
+
friendlyName: 'Time picker',
|
|
48413
|
+
description: 'Seletor Material de horario.',
|
|
48414
|
+
tags: ['time', 'picker', 'hour'],
|
|
48415
|
+
valueShape: 'string',
|
|
48416
|
+
recommendedWhen: ['escolha guiada de horario'],
|
|
48417
|
+
avoidWhen: ['texto/mascara simples e suficiente'],
|
|
48418
|
+
dataSourceKind: 'local',
|
|
48419
|
+
apiPath: jsonApiPath('material-timepicker/pdx-material-timepicker.json-api.md'),
|
|
48420
|
+
}),
|
|
48421
|
+
createEntry({
|
|
48422
|
+
id: 'time-range',
|
|
48423
|
+
controlType: FieldControlType.TIME_RANGE,
|
|
48424
|
+
track: 'primary-form',
|
|
48425
|
+
family: 'date-time',
|
|
48426
|
+
friendlyName: 'Time range',
|
|
48427
|
+
description: 'Intervalo de horario.',
|
|
48428
|
+
tags: ['time', 'range', 'hour'],
|
|
48429
|
+
valueShape: '{ start, end }',
|
|
48430
|
+
recommendedWhen: ['janela de atendimento', 'turno'],
|
|
48431
|
+
avoidWhen: ['horario unico'],
|
|
48432
|
+
dataSourceKind: 'local',
|
|
48433
|
+
status: 'partial-docs',
|
|
48434
|
+
apiPath: jsonApiPath('pdx-material-time-range/pdx-material-time-range.json-api.md'),
|
|
48435
|
+
}),
|
|
48436
|
+
createEntry({
|
|
48437
|
+
id: 'week-input',
|
|
48438
|
+
controlType: FieldControlType.WEEK_INPUT,
|
|
48439
|
+
track: 'primary-form',
|
|
48440
|
+
family: 'date-time',
|
|
48441
|
+
friendlyName: 'Week input',
|
|
48442
|
+
description: 'Campo de semana ISO.',
|
|
48443
|
+
tags: ['date', 'week', 'iso'],
|
|
48444
|
+
valueShape: 'string',
|
|
48445
|
+
recommendedWhen: ['semana de referencia'],
|
|
48446
|
+
avoidWhen: ['negocio centrado em datas convencionais'],
|
|
48447
|
+
dataSourceKind: 'local',
|
|
48448
|
+
status: 'partial-docs',
|
|
48449
|
+
apiPath: jsonApiPath('week-input/pdx-week-input.json-api.md'),
|
|
48450
|
+
}),
|
|
48451
|
+
createEntry({
|
|
48452
|
+
id: 'year-input',
|
|
48453
|
+
controlType: FieldControlType.YEAR_INPUT,
|
|
48454
|
+
track: 'primary-form',
|
|
48455
|
+
family: 'date-time',
|
|
48456
|
+
friendlyName: 'Year input',
|
|
48457
|
+
description: 'Campo para ano isolado.',
|
|
48458
|
+
tags: ['date', 'year', 'fiscal'],
|
|
48459
|
+
valueShape: 'number | string',
|
|
48460
|
+
recommendedWhen: ['ano fiscal', 'ano civil isolado'],
|
|
48461
|
+
avoidWhen: ['mes/ano ou data completa'],
|
|
48462
|
+
dataSourceKind: 'local',
|
|
48463
|
+
status: 'partial-docs',
|
|
48464
|
+
apiPath: jsonApiPath('pdx-year-input/pdx-year-input.json-api.md'),
|
|
48465
|
+
}),
|
|
48466
|
+
createEntry({
|
|
48467
|
+
id: 'select',
|
|
48468
|
+
controlType: FieldControlType.SELECT,
|
|
48469
|
+
track: 'primary-form',
|
|
48470
|
+
family: 'selection',
|
|
48471
|
+
friendlyName: 'Select',
|
|
48472
|
+
description: 'Lista fechada simples para escolha unica.',
|
|
48473
|
+
tags: ['selection', 'select', 'options'],
|
|
48474
|
+
valueShape: 'string | number | object',
|
|
48475
|
+
recommendedWhen: ['lista pequena estavel', 'escolha unica'],
|
|
48476
|
+
avoidWhen: ['lista grande ou remota'],
|
|
48477
|
+
dataSourceKind: 'mixed',
|
|
48478
|
+
apiPath: jsonApiPath('material-select/pdx-material-select.json-api.md'),
|
|
48479
|
+
metadata: {
|
|
48480
|
+
options: [
|
|
48481
|
+
{ label: 'Active', value: 'ACTIVE' },
|
|
48482
|
+
{ label: 'Paused', value: 'PAUSED' },
|
|
48483
|
+
],
|
|
48484
|
+
},
|
|
48485
|
+
}),
|
|
48486
|
+
createEntry({
|
|
48487
|
+
id: 'searchable-select',
|
|
48488
|
+
controlType: FieldControlType.SEARCHABLE_SELECT,
|
|
48489
|
+
track: 'primary-form',
|
|
48490
|
+
family: 'selection',
|
|
48491
|
+
friendlyName: 'Searchable select',
|
|
48492
|
+
description: 'Select com busca local para listas medias ou grandes.',
|
|
48493
|
+
tags: ['selection', 'select', 'search'],
|
|
48494
|
+
valueShape: 'string | number | object',
|
|
48495
|
+
recommendedWhen: ['lista maior com busca', 'descoberta de opcao'],
|
|
48496
|
+
avoidWhen: ['lista remota sob demanda'],
|
|
48497
|
+
dataSourceKind: 'mixed',
|
|
48498
|
+
status: 'partial-docs',
|
|
48499
|
+
apiPath: jsonApiPath('material-searchable-select/pdx-material-searchable-select.json-api.md'),
|
|
48500
|
+
}),
|
|
48501
|
+
createEntry({
|
|
48502
|
+
id: 'async-select',
|
|
48503
|
+
controlType: FieldControlType.ASYNC_SELECT,
|
|
48504
|
+
track: 'primary-form',
|
|
48505
|
+
family: 'selection',
|
|
48506
|
+
friendlyName: 'Async select',
|
|
48507
|
+
description: 'Select remoto para opcoes sob demanda.',
|
|
48508
|
+
tags: ['selection', 'remote', 'async'],
|
|
48509
|
+
valueShape: 'string | number | object',
|
|
48510
|
+
recommendedWhen: ['lookup remoto', 'lista paginada', 'catalogo grande'],
|
|
48511
|
+
avoidWhen: ['opcoes locais pequenas'],
|
|
48512
|
+
dataSourceKind: 'remote',
|
|
48513
|
+
status: 'partial-docs',
|
|
48514
|
+
apiPath: jsonApiPath('material-async-select/pdx-material-async-select.json-api.md'),
|
|
48515
|
+
metadata: { resourcePath: 'cities', optionLabelKey: 'name', optionValueKey: 'id' },
|
|
48516
|
+
}),
|
|
48517
|
+
createEntry({
|
|
48518
|
+
id: 'autocomplete',
|
|
48519
|
+
controlType: FieldControlType.AUTO_COMPLETE,
|
|
48520
|
+
track: 'primary-form',
|
|
48521
|
+
family: 'selection',
|
|
48522
|
+
friendlyName: 'Autocomplete',
|
|
48523
|
+
description: 'Busca incremental com sugestoes.',
|
|
48524
|
+
tags: ['selection', 'autocomplete', 'search'],
|
|
48525
|
+
valueShape: 'string | number | object',
|
|
48526
|
+
recommendedWhen: ['sugestoes incrementais', 'descoberta textual'],
|
|
48527
|
+
avoidWhen: ['lista pequena e fechada'],
|
|
48528
|
+
dataSourceKind: 'mixed',
|
|
48529
|
+
apiPath: jsonApiPath('material-autocomplete/pdx-material-autocomplete.json-api.md'),
|
|
48530
|
+
}),
|
|
48531
|
+
createEntry({
|
|
48532
|
+
id: 'multi-select',
|
|
48533
|
+
controlType: FieldControlType.MULTI_SELECT,
|
|
48534
|
+
track: 'primary-form',
|
|
48535
|
+
family: 'selection',
|
|
48536
|
+
friendlyName: 'Multi select',
|
|
48537
|
+
description: 'Selecao multipla de opcoes.',
|
|
48538
|
+
tags: ['selection', 'multiple', 'options'],
|
|
48539
|
+
valueShape: 'unknown[]',
|
|
48540
|
+
recommendedWhen: ['multiplas escolhas discretas'],
|
|
48541
|
+
avoidWhen: ['escolha unica'],
|
|
48542
|
+
dataSourceKind: 'mixed',
|
|
48543
|
+
status: 'partial-docs',
|
|
48544
|
+
apiPath: jsonApiPath('material-multi-select/pdx-material-multi-select.json-api.md'),
|
|
48545
|
+
}),
|
|
48546
|
+
createEntry({
|
|
48547
|
+
id: 'multi-select-tree',
|
|
48548
|
+
controlType: FieldControlType.MULTI_SELECT_TREE,
|
|
48549
|
+
track: 'primary-form',
|
|
48550
|
+
family: 'trees-lists',
|
|
48551
|
+
friendlyName: 'Multi select tree',
|
|
48552
|
+
description: 'Arvore hierarquica com selecao multipla.',
|
|
48553
|
+
tags: ['tree', 'selection', 'hierarchy'],
|
|
48554
|
+
valueShape: 'unknown[]',
|
|
48555
|
+
recommendedWhen: ['taxonomia hierarquica com multiplas escolhas'],
|
|
48556
|
+
avoidWhen: ['lista plana pequena'],
|
|
48557
|
+
dataSourceKind: 'mixed',
|
|
48558
|
+
status: 'partial-docs',
|
|
48559
|
+
apiPath: jsonApiPath('material-multi-select-tree/pdx-material-multi-select-tree.json-api.md'),
|
|
48560
|
+
}),
|
|
48561
|
+
createEntry({
|
|
48562
|
+
id: 'tree-select',
|
|
48563
|
+
controlType: FieldControlType.TREE_SELECT,
|
|
48564
|
+
track: 'primary-form',
|
|
48565
|
+
family: 'trees-lists',
|
|
48566
|
+
friendlyName: 'Tree select',
|
|
48567
|
+
description: 'Arvore hierarquica com selecao simples.',
|
|
48568
|
+
tags: ['tree', 'selection', 'hierarchy'],
|
|
48569
|
+
valueShape: 'string | number | object',
|
|
48570
|
+
recommendedWhen: ['estrutura hierarquica com escolha unica'],
|
|
48571
|
+
avoidWhen: ['multiplas escolhas'],
|
|
48572
|
+
dataSourceKind: 'mixed',
|
|
48573
|
+
status: 'partial-docs',
|
|
48574
|
+
apiPath: jsonApiPath('material-tree-select/pdx-material-tree-select.json-api.md'),
|
|
48575
|
+
}),
|
|
48576
|
+
createEntry({
|
|
48577
|
+
id: 'selection-list',
|
|
48578
|
+
controlType: FieldControlType.SELECTION_LIST,
|
|
48579
|
+
track: 'primary-form',
|
|
48580
|
+
family: 'trees-lists',
|
|
48581
|
+
friendlyName: 'Selection list',
|
|
48582
|
+
description: 'Lista explicita de opcoes selecionaveis.',
|
|
48583
|
+
tags: ['list', 'selection', 'explicit'],
|
|
48584
|
+
valueShape: 'unknown[]',
|
|
48585
|
+
recommendedWhen: ['lista visivel de opcoes', 'affordance forte de lista'],
|
|
48586
|
+
avoidWhen: ['dropdown compacto resolve melhor'],
|
|
48587
|
+
dataSourceKind: 'mixed',
|
|
48588
|
+
status: 'partial-docs',
|
|
48589
|
+
apiPath: jsonApiPath('material-selection-list/pdx-material-selection-list.json-api.md'),
|
|
48590
|
+
}),
|
|
48591
|
+
createEntry({
|
|
48592
|
+
id: 'transfer-list',
|
|
48593
|
+
controlType: FieldControlType.TRANSFER_LIST,
|
|
48594
|
+
track: 'primary-form',
|
|
48595
|
+
family: 'trees-lists',
|
|
48596
|
+
friendlyName: 'Transfer list',
|
|
48597
|
+
description: 'Move itens entre listas disponivel e selecionado.',
|
|
48598
|
+
tags: ['list', 'transfer', 'selection'],
|
|
48599
|
+
valueShape: 'unknown[]',
|
|
48600
|
+
recommendedWhen: ['alocacao entre disponiveis e selecionados'],
|
|
48601
|
+
avoidWhen: ['selecao simples ou pequena'],
|
|
48602
|
+
dataSourceKind: 'mixed',
|
|
48603
|
+
status: 'partial-docs',
|
|
48604
|
+
apiPath: jsonApiPath('material-transfer-list/pdx-material-transfer-list.json-api.md'),
|
|
48605
|
+
}),
|
|
48606
|
+
createEntry({
|
|
48607
|
+
id: 'chip-input',
|
|
48608
|
+
controlType: FieldControlType.CHIP_INPUT,
|
|
48609
|
+
track: 'primary-form',
|
|
48610
|
+
family: 'trees-lists',
|
|
48611
|
+
friendlyName: 'Chip input',
|
|
48612
|
+
description: 'Entrada de itens textuais em formato de chips.',
|
|
48613
|
+
tags: ['chips', 'list', 'text'],
|
|
48614
|
+
valueShape: 'string[]',
|
|
48615
|
+
recommendedWhen: ['emails', 'labels editaveis', 'lista textual'],
|
|
48616
|
+
avoidWhen: ['valor unico'],
|
|
48617
|
+
dataSourceKind: 'local',
|
|
48618
|
+
status: 'partial-docs',
|
|
48619
|
+
apiPath: jsonApiPath('material-chips/pdx-material-chips.json-api.md'),
|
|
48620
|
+
}),
|
|
48621
|
+
createEntry({
|
|
48622
|
+
id: 'chip-list',
|
|
48623
|
+
controlType: FieldControlType.CHIP_LIST,
|
|
48624
|
+
track: 'primary-form',
|
|
48625
|
+
family: 'trees-lists',
|
|
48626
|
+
friendlyName: 'Chip list',
|
|
48627
|
+
description: 'Lista textual em chips.',
|
|
48628
|
+
tags: ['chips', 'list', 'display'],
|
|
48629
|
+
valueShape: 'string[]',
|
|
48630
|
+
recommendedWhen: ['lista curta em chips', 'edicao leve'],
|
|
48631
|
+
avoidWhen: ['valor unico'],
|
|
48632
|
+
dataSourceKind: 'local',
|
|
48633
|
+
status: 'partial-docs',
|
|
48634
|
+
apiPath: jsonApiPath('material-chips/pdx-material-chips.json-api.md'),
|
|
48635
|
+
}),
|
|
48636
|
+
createEntry({
|
|
48637
|
+
id: 'checkbox-group',
|
|
48638
|
+
controlType: FieldControlType.CHECKBOX,
|
|
48639
|
+
track: 'primary-form',
|
|
48640
|
+
family: 'toggle-choice',
|
|
48641
|
+
friendlyName: 'Checkbox group',
|
|
48642
|
+
description: 'Escolhas discretas booleanas ou multiplas.',
|
|
48643
|
+
tags: ['choice', 'checkbox', 'boolean'],
|
|
48644
|
+
valueShape: 'boolean | unknown[]',
|
|
48645
|
+
recommendedWhen: ['multiplas escolhas discretas', 'booleano com selectionMode apropriado'],
|
|
48646
|
+
avoidWhen: ['escolha unica'],
|
|
48647
|
+
dataSourceKind: 'mixed',
|
|
48648
|
+
apiPath: jsonApiPath('material-checkbox-group/pdx-material-checkbox-group.json-api.md'),
|
|
48649
|
+
}),
|
|
48650
|
+
createEntry({
|
|
48651
|
+
id: 'radio-group',
|
|
48652
|
+
controlType: FieldControlType.RADIO,
|
|
48653
|
+
track: 'primary-form',
|
|
48654
|
+
family: 'toggle-choice',
|
|
48655
|
+
friendlyName: 'Radio group',
|
|
48656
|
+
description: 'Escolha unica explicita.',
|
|
48657
|
+
tags: ['choice', 'radio', 'single'],
|
|
48658
|
+
valueShape: 'string | number | boolean',
|
|
48659
|
+
recommendedWhen: ['escolha unica com poucas opcoes e alta legibilidade'],
|
|
48660
|
+
avoidWhen: ['muitas opcoes'],
|
|
48661
|
+
dataSourceKind: 'mixed',
|
|
48662
|
+
apiPath: jsonApiPath('material-radio-group/pdx-material-radio-group.json-api.md'),
|
|
48663
|
+
}),
|
|
48664
|
+
createEntry({
|
|
48665
|
+
id: 'toggle',
|
|
48666
|
+
controlType: FieldControlType.TOGGLE,
|
|
48667
|
+
track: 'primary-form',
|
|
48668
|
+
family: 'toggle-choice',
|
|
48669
|
+
friendlyName: 'Toggle',
|
|
48670
|
+
description: 'Booleano binario on/off.',
|
|
48671
|
+
tags: ['choice', 'toggle', 'boolean'],
|
|
48672
|
+
valueShape: 'boolean',
|
|
48673
|
+
recommendedWhen: ['booleano simples'],
|
|
48674
|
+
avoidWhen: ['mais de dois estados'],
|
|
48675
|
+
dataSourceKind: 'local',
|
|
48676
|
+
apiPath: jsonApiPath('material-slide-toggle/pdx-material-slide-toggle.json-api.md'),
|
|
48677
|
+
}),
|
|
48678
|
+
createEntry({
|
|
48679
|
+
id: 'button-toggle',
|
|
48680
|
+
controlType: FieldControlType.BUTTON_TOGGLE,
|
|
48681
|
+
track: 'primary-form',
|
|
48682
|
+
family: 'toggle-choice',
|
|
48683
|
+
friendlyName: 'Button toggle',
|
|
48684
|
+
description: 'Grupo segmentado para poucas opcoes.',
|
|
48685
|
+
tags: ['choice', 'toggle', 'segmented'],
|
|
48686
|
+
valueShape: 'string | number',
|
|
48687
|
+
recommendedWhen: ['poucas opcoes curtas', 'segmentacao visivel'],
|
|
48688
|
+
avoidWhen: ['lista longa'],
|
|
48689
|
+
dataSourceKind: 'local',
|
|
48690
|
+
status: 'partial-docs',
|
|
48691
|
+
apiPath: jsonApiPath('material-button-toggle/pdx-material-button-toggle.json-api.md'),
|
|
48692
|
+
}),
|
|
48693
|
+
createEntry({
|
|
48694
|
+
id: 'file-upload',
|
|
48695
|
+
controlType: FieldControlType.FILE_UPLOAD,
|
|
48696
|
+
track: 'primary-form',
|
|
48697
|
+
family: 'upload-color-visual',
|
|
48698
|
+
friendlyName: 'File upload',
|
|
48699
|
+
description: 'Campo para anexos e documentos.',
|
|
48700
|
+
tags: ['upload', 'files', 'attachments'],
|
|
48701
|
+
valueShape: 'File | File[] | metadata',
|
|
48702
|
+
recommendedWhen: ['documentos', 'anexos', 'comprovantes'],
|
|
48703
|
+
avoidWhen: ['fluxo sem arquivos'],
|
|
48704
|
+
dataSourceKind: 'specialized',
|
|
48705
|
+
apiPath: jsonApiPath('material-file-upload/pdx-material-file-upload.json-api.md'),
|
|
48706
|
+
}),
|
|
48707
|
+
createEntry({
|
|
48708
|
+
id: 'color-input',
|
|
48709
|
+
controlType: FieldControlType.COLOR_INPUT,
|
|
48710
|
+
track: 'primary-form',
|
|
48711
|
+
family: 'upload-color-visual',
|
|
48712
|
+
friendlyName: 'Color input',
|
|
48713
|
+
description: 'Entrada simples de cor.',
|
|
48714
|
+
tags: ['color', 'input', 'visual'],
|
|
48715
|
+
valueShape: 'string',
|
|
48716
|
+
recommendedWhen: ['cor por valor simples'],
|
|
48717
|
+
avoidWhen: ['paleta rica ou presets'],
|
|
48718
|
+
dataSourceKind: 'local',
|
|
48719
|
+
apiPath: jsonApiPath('color-input/pdx-color-input.json-api.md'),
|
|
48720
|
+
}),
|
|
48721
|
+
createEntry({
|
|
48722
|
+
id: 'color-picker',
|
|
48723
|
+
controlType: FieldControlType.COLOR_PICKER,
|
|
48724
|
+
track: 'primary-form',
|
|
48725
|
+
family: 'upload-color-visual',
|
|
48726
|
+
friendlyName: 'Color picker',
|
|
48727
|
+
description: 'Picker avancado de cor com paleta.',
|
|
48728
|
+
tags: ['color', 'picker', 'visual'],
|
|
48729
|
+
valueShape: 'string',
|
|
48730
|
+
recommendedWhen: ['paleta rica', 'preset visual', 'tema'],
|
|
48731
|
+
avoidWhen: ['valor simples textual basta'],
|
|
48732
|
+
dataSourceKind: 'local',
|
|
48733
|
+
apiPath: jsonApiPath('color-picker/pdx-color-picker.json-api.md'),
|
|
48734
|
+
}),
|
|
48735
|
+
createEntry({
|
|
48736
|
+
id: 'avatar',
|
|
48737
|
+
controlType: FieldControlType.AVATAR,
|
|
48738
|
+
track: 'primary-form',
|
|
48739
|
+
family: 'upload-color-visual',
|
|
48740
|
+
friendlyName: 'Avatar',
|
|
48741
|
+
description: 'Representacao visual de entidade/usuario.',
|
|
48742
|
+
tags: ['visual', 'avatar', 'display'],
|
|
48743
|
+
valueShape: 'string | object',
|
|
48744
|
+
recommendedWhen: ['representacao visual de usuario ou entidade'],
|
|
48745
|
+
avoidWhen: ['captura de dado textual'],
|
|
48746
|
+
dataSourceKind: 'specialized',
|
|
48747
|
+
apiPath: jsonApiPath('material-avatar/pdx-material-avatar.json-api.md'),
|
|
48748
|
+
}),
|
|
48749
|
+
createEntry({
|
|
48750
|
+
id: 'button',
|
|
48751
|
+
controlType: FieldControlType.BUTTON,
|
|
48752
|
+
track: 'primary-form',
|
|
48753
|
+
family: 'upload-color-visual',
|
|
48754
|
+
friendlyName: 'Button',
|
|
48755
|
+
description: 'Acao auxiliar embutida no layout do formulario.',
|
|
48756
|
+
tags: ['action', 'button', 'visual'],
|
|
48757
|
+
valueShape: 'n/a',
|
|
48758
|
+
recommendedWhen: ['acao auxiliar no layout'],
|
|
48759
|
+
avoidWhen: ['submit/cancel padrao do form'],
|
|
48760
|
+
dataSourceKind: 'specialized',
|
|
48761
|
+
apiPath: jsonApiPath('material-button/pdx-material-button.json-api.md'),
|
|
48762
|
+
states: ['default', 'disabled', 'readonly'],
|
|
48763
|
+
}),
|
|
48764
|
+
createEntry({
|
|
48765
|
+
id: 'cron-builder',
|
|
48766
|
+
controlType: FieldControlType.CRON_BUILDER,
|
|
48767
|
+
track: 'primary-form',
|
|
48768
|
+
family: 'upload-color-visual',
|
|
48769
|
+
friendlyName: 'Cron builder',
|
|
48770
|
+
description: 'Controle especializado para expressoes CRON.',
|
|
48771
|
+
tags: ['cron', 'schedule', 'specialized'],
|
|
48772
|
+
valueShape: 'string',
|
|
48773
|
+
recommendedWhen: ['agenda cron', 'frequencia recorrente'],
|
|
48774
|
+
avoidWhen: ['datas ou ranges simples'],
|
|
48775
|
+
dataSourceKind: 'specialized',
|
|
48776
|
+
status: 'partial-docs',
|
|
48777
|
+
snippetNote: 'A documentacao detalhada continua vivendo na lib especializada @praxisui/cron-builder.',
|
|
48778
|
+
}),
|
|
48779
|
+
createEntry({
|
|
48780
|
+
id: 'inline-input',
|
|
48781
|
+
controlType: FieldControlType.INLINE_INPUT,
|
|
48782
|
+
track: 'inline-filter',
|
|
48783
|
+
family: 'text',
|
|
48784
|
+
friendlyName: 'Inline input',
|
|
48785
|
+
description: 'Filtro textual compacto para toolbar.',
|
|
48786
|
+
tags: ['inline', 'filter', 'text'],
|
|
48787
|
+
valueShape: 'string',
|
|
48788
|
+
recommendedWhen: ['busca curta em toolbar', 'identificador', 'nome'],
|
|
48789
|
+
avoidWhen: ['texto longo', 'validacao complexa'],
|
|
48790
|
+
dataSourceKind: 'local',
|
|
48791
|
+
apiPath: jsonApiPath('inline-input/pdx-inline-input.json-api.md'),
|
|
48792
|
+
}),
|
|
48793
|
+
createEntry({
|
|
48794
|
+
id: 'inline-select',
|
|
48795
|
+
controlType: FieldControlType.INLINE_SELECT,
|
|
48796
|
+
track: 'inline-filter',
|
|
48797
|
+
family: 'selection',
|
|
48798
|
+
friendlyName: 'Inline select',
|
|
48799
|
+
description: 'Selecao compacta em pill para filtros.',
|
|
48800
|
+
tags: ['inline', 'filter', 'selection'],
|
|
48801
|
+
valueShape: 'simple value',
|
|
48802
|
+
recommendedWhen: ['lista pequena ou media em toolbar'],
|
|
48803
|
+
avoidWhen: ['lookup remoto grande'],
|
|
48804
|
+
dataSourceKind: 'mixed',
|
|
48805
|
+
apiPath: jsonApiPath('inline-select/pdx-inline-select.json-api.md'),
|
|
48806
|
+
}),
|
|
48807
|
+
createEntry({
|
|
48808
|
+
id: 'inline-searchable-select',
|
|
48809
|
+
controlType: FieldControlType.INLINE_SEARCHABLE_SELECT,
|
|
48810
|
+
track: 'inline-filter',
|
|
48811
|
+
family: 'selection',
|
|
48812
|
+
friendlyName: 'Inline searchable select',
|
|
48813
|
+
description: 'Selecao compacta com busca.',
|
|
48814
|
+
tags: ['inline', 'filter', 'selection', 'search'],
|
|
48815
|
+
valueShape: 'simple value | option object',
|
|
48816
|
+
recommendedWhen: ['lista media/grande com busca em toolbar'],
|
|
48817
|
+
avoidWhen: ['select simples ja resolve'],
|
|
48818
|
+
dataSourceKind: 'mixed',
|
|
48819
|
+
apiPath: jsonApiPath('inline-searchable-select/pdx-inline-searchable-select.json-api.md'),
|
|
48820
|
+
}),
|
|
48821
|
+
createEntry({
|
|
48822
|
+
id: 'inline-async-select',
|
|
48823
|
+
controlType: FieldControlType.INLINE_ASYNC_SELECT,
|
|
48824
|
+
track: 'inline-filter',
|
|
48825
|
+
family: 'selection',
|
|
48826
|
+
friendlyName: 'Inline async select',
|
|
48827
|
+
description: 'Selecao remota compacta para toolbar.',
|
|
48828
|
+
tags: ['inline', 'filter', 'selection', 'remote'],
|
|
48829
|
+
valueShape: 'simple value | option object',
|
|
48830
|
+
recommendedWhen: ['lookup remoto em toolbar', 'lista sob demanda'],
|
|
48831
|
+
avoidWhen: ['lista local pequena'],
|
|
48832
|
+
dataSourceKind: 'remote',
|
|
48833
|
+
apiPath: jsonApiPath('inline-async-select/pdx-inline-async-select.json-api.md'),
|
|
48834
|
+
}),
|
|
48835
|
+
createEntry({
|
|
48836
|
+
id: 'inline-entity-lookup',
|
|
48837
|
+
controlType: FieldControlType.INLINE_ENTITY_LOOKUP,
|
|
48838
|
+
track: 'inline-filter',
|
|
48839
|
+
family: 'selection',
|
|
48840
|
+
friendlyName: 'Inline entity lookup',
|
|
48841
|
+
description: 'Lookup compacto de entidade com semantica corporativa.',
|
|
48842
|
+
tags: ['inline', 'filter', 'lookup', 'remote'],
|
|
48843
|
+
valueShape: 'object | id',
|
|
48844
|
+
recommendedWhen: ['id + descricao', 'identidade de entidade'],
|
|
48845
|
+
avoidWhen: ['select local simples'],
|
|
48846
|
+
dataSourceKind: 'remote',
|
|
48847
|
+
apiPath: jsonApiPath('inline-entity-lookup/pdx-inline-entity-lookup.json-api.md'),
|
|
48848
|
+
}),
|
|
48849
|
+
createEntry({
|
|
48850
|
+
id: 'inline-autocomplete',
|
|
48851
|
+
controlType: FieldControlType.INLINE_AUTOCOMPLETE,
|
|
48852
|
+
track: 'inline-filter',
|
|
48853
|
+
family: 'selection',
|
|
48854
|
+
friendlyName: 'Inline autocomplete',
|
|
48855
|
+
description: 'Autocomplete compacto para filtros.',
|
|
48856
|
+
tags: ['inline', 'filter', 'autocomplete'],
|
|
48857
|
+
valueShape: 'simple value | option object',
|
|
48858
|
+
recommendedWhen: ['sugestao incremental em toolbar'],
|
|
48859
|
+
avoidWhen: ['select simples basta'],
|
|
48860
|
+
dataSourceKind: 'mixed',
|
|
48861
|
+
apiPath: jsonApiPath('inline-autocomplete/pdx-inline-autocomplete.json-api.md'),
|
|
48862
|
+
}),
|
|
48863
|
+
createEntry({
|
|
48864
|
+
id: 'inline-multi-select',
|
|
48865
|
+
controlType: FieldControlType.INLINE_MULTISELECT,
|
|
48866
|
+
track: 'inline-filter',
|
|
48867
|
+
family: 'selection',
|
|
48868
|
+
friendlyName: 'Inline multi select',
|
|
48869
|
+
description: 'Selecao multipla compacta com resumo em pill.',
|
|
48870
|
+
tags: ['inline', 'filter', 'multiple'],
|
|
48871
|
+
valueShape: 'unknown[]',
|
|
48872
|
+
recommendedWhen: ['poucas selecoes simultaneas com resumo curto'],
|
|
48873
|
+
avoidWhen: ['necessidade de leitura integral de todos os itens'],
|
|
48874
|
+
dataSourceKind: 'mixed',
|
|
48875
|
+
apiPath: jsonApiPath('inline-multi-select/pdx-inline-multi-select.json-api.md'),
|
|
48876
|
+
}),
|
|
48877
|
+
createEntry({
|
|
48878
|
+
id: 'inline-number',
|
|
48879
|
+
controlType: FieldControlType.INLINE_NUMBER,
|
|
48880
|
+
track: 'inline-filter',
|
|
48881
|
+
family: 'numbers-range',
|
|
48882
|
+
friendlyName: 'Inline number',
|
|
48883
|
+
description: 'Filtro numerico compacto.',
|
|
48884
|
+
tags: ['inline', 'filter', 'number'],
|
|
48885
|
+
valueShape: 'number',
|
|
48886
|
+
recommendedWhen: ['valor numerico pontual em toolbar'],
|
|
48887
|
+
avoidWhen: ['range'],
|
|
48888
|
+
dataSourceKind: 'local',
|
|
48889
|
+
apiPath: jsonApiPath('inline-number/pdx-inline-number.json-api.md'),
|
|
48890
|
+
}),
|
|
48891
|
+
createEntry({
|
|
48892
|
+
id: 'inline-currency',
|
|
48893
|
+
controlType: FieldControlType.INLINE_CURRENCY,
|
|
48894
|
+
track: 'inline-filter',
|
|
48895
|
+
family: 'numbers-range',
|
|
48896
|
+
friendlyName: 'Inline currency',
|
|
48897
|
+
description: 'Filtro monetario compacto.',
|
|
48898
|
+
tags: ['inline', 'filter', 'currency'],
|
|
48899
|
+
valueShape: 'number',
|
|
48900
|
+
recommendedWhen: ['valor monetario unico em toolbar'],
|
|
48901
|
+
avoidWhen: ['faixa monetaria'],
|
|
48902
|
+
dataSourceKind: 'local',
|
|
48903
|
+
apiPath: jsonApiPath('inline-currency/pdx-inline-currency.json-api.md'),
|
|
48904
|
+
}),
|
|
48905
|
+
createEntry({
|
|
48906
|
+
id: 'inline-currency-range',
|
|
48907
|
+
controlType: FieldControlType.INLINE_CURRENCY_RANGE,
|
|
48908
|
+
track: 'inline-filter',
|
|
48909
|
+
family: 'numbers-range',
|
|
48910
|
+
friendlyName: 'Inline currency range',
|
|
48911
|
+
description: 'Faixa monetaria compacta para toolbar.',
|
|
48912
|
+
tags: ['inline', 'filter', 'currency', 'range'],
|
|
48913
|
+
valueShape: '{ minPrice?, maxPrice?, currency? }',
|
|
48914
|
+
recommendedWhen: ['faixa monetaria em toolbar'],
|
|
48915
|
+
avoidWhen: ['valor unico'],
|
|
48916
|
+
dataSourceKind: 'specialized',
|
|
48917
|
+
apiPath: jsonApiPath('inline-currency-range/pdx-inline-currency-range.json-api.md'),
|
|
48918
|
+
}),
|
|
48919
|
+
createEntry({
|
|
48920
|
+
id: 'inline-range',
|
|
48921
|
+
controlType: FieldControlType.INLINE_RANGE,
|
|
48922
|
+
track: 'inline-filter',
|
|
48923
|
+
family: 'numbers-range',
|
|
48924
|
+
friendlyName: 'Inline range',
|
|
48925
|
+
description: 'Range numerico compacto para toolbar.',
|
|
48926
|
+
tags: ['inline', 'filter', 'range', 'slider'],
|
|
48927
|
+
valueShape: 'number | { start?, end? }',
|
|
48928
|
+
recommendedWhen: ['faixa numerica compacta'],
|
|
48929
|
+
avoidWhen: ['datas ou horarios'],
|
|
48930
|
+
dataSourceKind: 'specialized',
|
|
48931
|
+
apiPath: jsonApiPath('inline-currency-range/pdx-inline-currency-range.json-api.md'),
|
|
48932
|
+
detailFragment: 'inline-range',
|
|
48933
|
+
}),
|
|
48934
|
+
createEntry({
|
|
48935
|
+
id: 'inline-rating',
|
|
48936
|
+
controlType: FieldControlType.INLINE_RATING,
|
|
48937
|
+
track: 'inline-filter',
|
|
48938
|
+
family: 'numbers-range',
|
|
48939
|
+
friendlyName: 'Inline rating',
|
|
48940
|
+
description: 'Filtro visual de rating para toolbar.',
|
|
48941
|
+
tags: ['inline', 'filter', 'rating'],
|
|
48942
|
+
valueShape: 'number | { start?, end? }',
|
|
48943
|
+
recommendedWhen: ['score visual', 'avaliacao em estrelas'],
|
|
48944
|
+
avoidWhen: ['quando numero bruto ja basta'],
|
|
48945
|
+
dataSourceKind: 'specialized',
|
|
48946
|
+
apiPath: jsonApiPath('inline-rating/pdx-inline-rating.json-api.md'),
|
|
48947
|
+
}),
|
|
48948
|
+
createEntry({
|
|
48949
|
+
id: 'inline-distance-radius',
|
|
48950
|
+
controlType: FieldControlType.INLINE_DISTANCE_RADIUS,
|
|
48951
|
+
track: 'inline-filter',
|
|
48952
|
+
family: 'numbers-range',
|
|
48953
|
+
friendlyName: 'Inline distance radius',
|
|
48954
|
+
description: 'Filtro semantico de distancia e raio.',
|
|
48955
|
+
tags: ['inline', 'filter', 'distance', 'radius'],
|
|
48956
|
+
valueShape: 'number | { start?, end? }',
|
|
48957
|
+
recommendedWhen: ['raio de busca', 'proximidade'],
|
|
48958
|
+
avoidWhen: ['range numerico generico'],
|
|
48959
|
+
dataSourceKind: 'specialized',
|
|
48960
|
+
apiPath: jsonApiPath('inline-distance-radius/pdx-inline-distance-radius.json-api.md'),
|
|
48961
|
+
}),
|
|
48962
|
+
createEntry({
|
|
48963
|
+
id: 'inline-score-priority',
|
|
48964
|
+
controlType: FieldControlType.INLINE_SCORE_PRIORITY,
|
|
48965
|
+
track: 'inline-filter',
|
|
48966
|
+
family: 'numbers-range',
|
|
48967
|
+
friendlyName: 'Inline score priority',
|
|
48968
|
+
description: 'Filtro semantico de score/prioridade.',
|
|
48969
|
+
tags: ['inline', 'filter', 'score', 'priority'],
|
|
48970
|
+
valueShape: 'number | { start?, end? }',
|
|
48971
|
+
recommendedWhen: ['prioridade', 'criticidade', 'banda de score'],
|
|
48972
|
+
avoidWhen: ['numero simples sem ganho semantico'],
|
|
48973
|
+
dataSourceKind: 'specialized',
|
|
48974
|
+
apiPath: jsonApiPath('inline-score-priority/pdx-inline-score-priority.json-api.md'),
|
|
48975
|
+
}),
|
|
48976
|
+
createEntry({
|
|
48977
|
+
id: 'inline-date',
|
|
48978
|
+
controlType: FieldControlType.INLINE_DATE,
|
|
48979
|
+
track: 'inline-filter',
|
|
48980
|
+
family: 'date-time',
|
|
48981
|
+
friendlyName: 'Inline date',
|
|
48982
|
+
description: 'Filtro de data compacta.',
|
|
48983
|
+
tags: ['inline', 'filter', 'date'],
|
|
48984
|
+
valueShape: 'Date',
|
|
48985
|
+
recommendedWhen: ['data unica em toolbar'],
|
|
48986
|
+
avoidWhen: ['periodo completo'],
|
|
48987
|
+
dataSourceKind: 'specialized',
|
|
48988
|
+
apiPath: jsonApiPath('inline-date/pdx-inline-date.json-api.md'),
|
|
48989
|
+
}),
|
|
48990
|
+
createEntry({
|
|
48991
|
+
id: 'inline-date-range',
|
|
48992
|
+
controlType: FieldControlType.INLINE_DATE_RANGE,
|
|
48993
|
+
track: 'inline-filter',
|
|
48994
|
+
family: 'date-time',
|
|
48995
|
+
friendlyName: 'Inline date range',
|
|
48996
|
+
description: 'Range de data compacta com semantica de toolbar.',
|
|
48997
|
+
tags: ['inline', 'filter', 'date', 'range'],
|
|
48998
|
+
valueShape: '{ startDate?, endDate? }',
|
|
48999
|
+
recommendedWhen: ['janela temporal em toolbar'],
|
|
49000
|
+
avoidWhen: ['toolbar saturada ou data unica'],
|
|
49001
|
+
dataSourceKind: 'specialized',
|
|
49002
|
+
apiPath: jsonApiPath('inline-date-range/pdx-inline-date-range.json-api.md'),
|
|
49003
|
+
}),
|
|
49004
|
+
createEntry({
|
|
49005
|
+
id: 'inline-time',
|
|
49006
|
+
controlType: FieldControlType.INLINE_TIME,
|
|
49007
|
+
track: 'inline-filter',
|
|
49008
|
+
family: 'date-time',
|
|
49009
|
+
friendlyName: 'Inline time',
|
|
49010
|
+
description: 'Filtro compacto de horario.',
|
|
49011
|
+
tags: ['inline', 'filter', 'time'],
|
|
49012
|
+
valueShape: 'string HH:mm',
|
|
49013
|
+
recommendedWhen: ['horario unico em toolbar'],
|
|
49014
|
+
avoidWhen: ['periodo relativo ou range'],
|
|
49015
|
+
dataSourceKind: 'specialized',
|
|
49016
|
+
apiPath: jsonApiPath('inline-time/pdx-inline-time.json-api.md'),
|
|
49017
|
+
}),
|
|
49018
|
+
createEntry({
|
|
49019
|
+
id: 'inline-time-range',
|
|
49020
|
+
controlType: FieldControlType.INLINE_TIME_RANGE,
|
|
49021
|
+
track: 'inline-filter',
|
|
49022
|
+
family: 'date-time',
|
|
49023
|
+
friendlyName: 'Inline time range',
|
|
49024
|
+
description: 'Faixa horaria compacta para toolbar.',
|
|
49025
|
+
tags: ['inline', 'filter', 'time', 'range'],
|
|
49026
|
+
valueShape: '{ start?, end? }',
|
|
49027
|
+
recommendedWhen: ['turno', 'janela operacional'],
|
|
49028
|
+
avoidWhen: ['horario unico'],
|
|
49029
|
+
dataSourceKind: 'specialized',
|
|
49030
|
+
apiPath: jsonApiPath('inline-time-range/pdx-inline-time-range.json-api.md'),
|
|
49031
|
+
}),
|
|
49032
|
+
createEntry({
|
|
49033
|
+
id: 'inline-tree-select',
|
|
49034
|
+
controlType: FieldControlType.INLINE_TREE_SELECT,
|
|
49035
|
+
track: 'inline-filter',
|
|
49036
|
+
family: 'trees-lists',
|
|
49037
|
+
friendlyName: 'Inline tree select',
|
|
49038
|
+
description: 'Arvore compacta para filtro em toolbar.',
|
|
49039
|
+
tags: ['inline', 'filter', 'tree', 'hierarchy'],
|
|
49040
|
+
valueShape: 'simple node value',
|
|
49041
|
+
recommendedWhen: ['taxonomia ou unidade organizacional em toolbar'],
|
|
49042
|
+
avoidWhen: ['arvore profunda demais'],
|
|
49043
|
+
dataSourceKind: 'mixed',
|
|
49044
|
+
apiPath: jsonApiPath('inline-tree-select/pdx-inline-tree-select.json-api.md'),
|
|
49045
|
+
}),
|
|
49046
|
+
createEntry({
|
|
49047
|
+
id: 'inline-pipeline-status',
|
|
49048
|
+
controlType: FieldControlType.INLINE_PIPELINE_STATUS,
|
|
49049
|
+
track: 'inline-filter',
|
|
49050
|
+
family: 'selection',
|
|
49051
|
+
friendlyName: 'Inline pipeline status',
|
|
49052
|
+
description: 'Filtro semantico de status de pipeline.',
|
|
49053
|
+
tags: ['inline', 'filter', 'pipeline', 'status'],
|
|
49054
|
+
valueShape: 'simple value | unknown[]',
|
|
49055
|
+
recommendedWhen: ['esteira operacional', 'pipeline comercial'],
|
|
49056
|
+
avoidWhen: ['status simples sem ganho visual'],
|
|
49057
|
+
dataSourceKind: 'specialized',
|
|
49058
|
+
apiPath: jsonApiPath('inline-pipeline-status/pdx-inline-pipeline-status.json-api.md'),
|
|
49059
|
+
}),
|
|
49060
|
+
createEntry({
|
|
49061
|
+
id: 'inline-relative-period',
|
|
49062
|
+
controlType: FieldControlType.INLINE_RELATIVE_PERIOD,
|
|
49063
|
+
track: 'inline-filter',
|
|
49064
|
+
family: 'date-time',
|
|
49065
|
+
friendlyName: 'Inline relative period',
|
|
49066
|
+
description: 'Preset semantico de periodo relativo.',
|
|
49067
|
+
tags: ['inline', 'filter', 'date', 'relative'],
|
|
49068
|
+
valueShape: 'string',
|
|
49069
|
+
recommendedWhen: ['hoje', 'ontem', 'ultimos 7 dias', 'este mes'],
|
|
49070
|
+
avoidWhen: ['API fora da trilha canonica que nao normaliza presets'],
|
|
49071
|
+
dataSourceKind: 'specialized',
|
|
49072
|
+
apiPath: jsonApiPath('inline-relative-period/pdx-inline-relative-period.json-api.md'),
|
|
49073
|
+
}),
|
|
49074
|
+
createEntry({
|
|
49075
|
+
id: 'inline-sentiment',
|
|
49076
|
+
controlType: FieldControlType.INLINE_SENTIMENT,
|
|
49077
|
+
track: 'inline-filter',
|
|
49078
|
+
family: 'selection',
|
|
49079
|
+
friendlyName: 'Inline sentiment',
|
|
49080
|
+
description: 'Filtro semantico de sentimento/polaridade.',
|
|
49081
|
+
tags: ['inline', 'filter', 'sentiment'],
|
|
49082
|
+
valueShape: 'string',
|
|
49083
|
+
recommendedWhen: ['sentimento', 'polaridade', 'humor'],
|
|
49084
|
+
avoidWhen: ['enum simples sem ganho visual'],
|
|
49085
|
+
dataSourceKind: 'specialized',
|
|
49086
|
+
apiPath: jsonApiPath('inline-sentiment/pdx-inline-sentiment.json-api.md'),
|
|
49087
|
+
}),
|
|
49088
|
+
createEntry({
|
|
49089
|
+
id: 'inline-color-label',
|
|
49090
|
+
controlType: FieldControlType.INLINE_COLOR_LABEL,
|
|
49091
|
+
track: 'inline-filter',
|
|
49092
|
+
family: 'selection',
|
|
49093
|
+
friendlyName: 'Inline color label',
|
|
49094
|
+
description: 'Filtro de labels coloridas semanticas.',
|
|
49095
|
+
tags: ['inline', 'filter', 'color', 'labels'],
|
|
49096
|
+
valueShape: 'simple value | unknown[]',
|
|
49097
|
+
recommendedWhen: ['tags coloridas', 'categorias visuais'],
|
|
49098
|
+
avoidWhen: ['quando cor e o unico canal de significado'],
|
|
49099
|
+
dataSourceKind: 'specialized',
|
|
49100
|
+
apiPath: jsonApiPath('inline-color-label/pdx-inline-color-label.json-api.md'),
|
|
49101
|
+
a11yNotes: [
|
|
49102
|
+
'Nunca dependa apenas de cor para comunicar estado ou significado.',
|
|
49103
|
+
'Garanta contraste AA e rotulagem textual no resumo da pill e no painel.',
|
|
49104
|
+
],
|
|
49105
|
+
}),
|
|
49106
|
+
createEntry({
|
|
49107
|
+
id: 'inline-toggle',
|
|
49108
|
+
controlType: FieldControlType.INLINE_TOGGLE,
|
|
49109
|
+
track: 'inline-filter',
|
|
49110
|
+
family: 'toggle-choice',
|
|
49111
|
+
friendlyName: 'Inline toggle',
|
|
49112
|
+
description: 'Booleano compacto com estado neutro para toolbar.',
|
|
49113
|
+
tags: ['inline', 'filter', 'toggle', 'boolean'],
|
|
49114
|
+
valueShape: 'boolean | null',
|
|
49115
|
+
recommendedWhen: ['booleano simples em toolbar'],
|
|
49116
|
+
avoidWhen: ['false e null nao estao bem documentados no fluxo'],
|
|
49117
|
+
dataSourceKind: 'local',
|
|
49118
|
+
apiPath: jsonApiPath('inline-toggle/pdx-inline-toggle.json-api.md'),
|
|
49119
|
+
}),
|
|
49120
|
+
];
|
|
49121
|
+
|
|
47050
49122
|
const BRAZIL_INPUTS_AI_CAPABILITIES = {
|
|
47051
49123
|
version: 'v2.0',
|
|
47052
49124
|
enums: {
|
|
@@ -48856,6 +50928,14 @@ const CLEAR_BUTTON_CONTROL_TYPES = new Set([
|
|
|
48856
50928
|
'inlinetime',
|
|
48857
50929
|
'inlinetimerange',
|
|
48858
50930
|
'inlinetreeselect',
|
|
50931
|
+
'inlineperiodrange',
|
|
50932
|
+
'inlinerating',
|
|
50933
|
+
'inlinedistanceradius',
|
|
50934
|
+
'inlinepipelinestatus',
|
|
50935
|
+
'inlinescorepriority',
|
|
50936
|
+
'inlinerelativeperiod',
|
|
50937
|
+
'inlinesentiment',
|
|
50938
|
+
'inlinecolorlabel',
|
|
48859
50939
|
]);
|
|
48860
50940
|
function supportsClearButtonControlType(controlType) {
|
|
48861
50941
|
if (!controlType)
|
|
@@ -48872,5 +50952,5 @@ function supportsClearButtonControlType(controlType) {
|
|
|
48872
50952
|
* Generated bundle index. Do not edit.
|
|
48873
50953
|
*/
|
|
48874
50954
|
|
|
48875
|
-
export { ActionResolverService, BRAZIL_INPUTS_AI_CAPABILITIES, CACHE_TTL, CHIPS_CONTROLS_AI_CAPABILITIES, CLEAR_BUTTON_CONTROL_TYPES, COLOR_CONTROLS_AI_CAPABILITIES, CONTROL_TYPE_AI_CATALOGS, ColorInputComponent, ComponentPreloaderService, ComponentRegistryService, ConfirmDialogComponent, DATE_CONTROLS_AI_CAPABILITIES, DISPLAY_ACTION_AI_CAPABILITIES, DateInputComponent, DateUtilsService, DatetimeLocalInputComponent, DynamicFieldLoaderDirective, EmailInputComponent, FILE_UPLOAD_AI_CAPABILITIES, InlineAsyncSelectComponent, InlineAutocompleteComponent, InlineColorLabelComponent, InlineCurrencyComponent, InlineCurrencyRangeComponent, InlineDateComponent, InlineDateRangeComponent, InlineDistanceRadiusComponent, InlineEntityLookupComponent, InlineInputComponent, InlineMultiSelectComponent, InlineNumberComponent, InlinePipelineStatusComponent, InlineRangeSliderComponent, InlineRatingComponent, InlineRelativePeriodComponent, InlineScorePriorityComponent, InlineSearchableSelectComponent, InlineSelectComponent, InlineSentimentComponent, InlineTimeComponent, InlineTimeRangeComponent, InlineToggleComponent, InlineTreeSelectComponent, KeyboardShortcutService, LIST_CONTROLS_AI_CAPABILITIES, LoggerPresets, MAX_LOAD_ATTEMPTS, MaterialAsyncSelectComponent, MaterialAutocompleteComponent, MaterialAvatarComponent, MaterialButtonComponent, MaterialButtonToggleComponent, MaterialCheckboxGroupComponent, MaterialChipsComponent, MaterialColorPickerComponent, MaterialCpfCnpjInputComponent, MaterialCurrencyComponent, MaterialDateRangeComponent, MaterialDatepickerComponent, MaterialFileUploadComponent, MaterialMultiSelectComponent, MaterialMultiSelectTreeComponent, MaterialPriceRangeComponent, MaterialRadioGroupComponent, MaterialRatingComponent, MaterialSearchableSelectComponent, MaterialSelectComponent, MaterialSelectionListComponent, MaterialSlideToggleComponent, MaterialSliderComponent, MaterialTextareaComponent, MaterialTimepickerComponent, MaterialTransferListComponent, MaterialTreeSelectComponent, MonthInputComponent, NUMERIC_INPUTS_AI_CAPABILITIES, NumberInputComponent, OptionStore, PDX_COLOR_INPUT_COMPONENT_METADATA, PDX_COLOR_PICKER_COMPONENT_METADATA, PDX_DATETIME_LOCAL_INPUT_COMPONENT_METADATA, PDX_DATE_INPUT_COMPONENT_METADATA, PDX_EMAIL_INPUT_COMPONENT_METADATA, PDX_FIELD_SHELL_COMPONENT_METADATA, PDX_INLINE_ASYNC_SELECT_COMPONENT_METADATA, PDX_INLINE_AUTOCOMPLETE_COMPONENT_METADATA, PDX_INLINE_COLOR_LABEL_COMPONENT_METADATA, PDX_INLINE_CURRENCY_COMPONENT_METADATA, PDX_INLINE_CURRENCY_RANGE_COMPONENT_METADATA, PDX_INLINE_DATE_COMPONENT_METADATA, PDX_INLINE_DATE_RANGE_COMPONENT_METADATA, PDX_INLINE_DISTANCE_RADIUS_COMPONENT_METADATA, PDX_INLINE_ENTITY_LOOKUP_COMPONENT_METADATA, PDX_INLINE_INPUT_COMPONENT_METADATA, PDX_INLINE_MULTI_SELECT_COMPONENT_METADATA, PDX_INLINE_NUMBER_COMPONENT_METADATA, PDX_INLINE_PIPELINE_STATUS_COMPONENT_METADATA, PDX_INLINE_RANGE_SLIDER_COMPONENT_METADATA, PDX_INLINE_RATING_COMPONENT_METADATA, PDX_INLINE_RELATIVE_PERIOD_COMPONENT_METADATA, PDX_INLINE_SCORE_PRIORITY_COMPONENT_METADATA, PDX_INLINE_SEARCHABLE_SELECT_COMPONENT_METADATA, PDX_INLINE_SELECT_COMPONENT_METADATA, PDX_INLINE_SENTIMENT_COMPONENT_METADATA, PDX_INLINE_TIME_COMPONENT_METADATA, PDX_INLINE_TIME_RANGE_COMPONENT_METADATA, PDX_INLINE_TOGGLE_COMPONENT_METADATA, PDX_INLINE_TREE_SELECT_COMPONENT_METADATA, PDX_MATERIAL_AVATAR_COMPONENT_METADATA, PDX_MATERIAL_BUTTON_COMPONENT_METADATA, PDX_MATERIAL_BUTTON_TOGGLE_COMPONENT_METADATA, PDX_MATERIAL_CHECKBOX_GROUP_COMPONENT_METADATA, PDX_MATERIAL_CHIPS_COMPONENT_METADATA, PDX_MATERIAL_COLORPICKER_COMPONENT_METADATA, PDX_MATERIAL_CPF_CNPJ_INPUT_COMPONENT_METADATA, PDX_MATERIAL_CURRENCY_COMPONENT_METADATA, PDX_MATERIAL_DATEPICKER_COMPONENT_METADATA, PDX_MATERIAL_DATE_RANGE_COMPONENT_METADATA, PDX_MATERIAL_FILE_UPLOAD_COMPONENT_METADATA, PDX_MATERIAL_MULTI_SELECT_COMPONENT_METADATA, PDX_MATERIAL_MULTI_SELECT_TREE_COMPONENT_METADATA, PDX_MATERIAL_PRICE_RANGE_COMPONENT_METADATA, PDX_MATERIAL_RADIO_GROUP_COMPONENT_METADATA, PDX_MATERIAL_RANGE_SLIDER_COMPONENT_METADATA, PDX_MATERIAL_RATING_COMPONENT_METADATA, PDX_MATERIAL_SEARCHABLE_SELECT_COMPONENT_METADATA, PDX_MATERIAL_SELECTION_LIST_COMPONENT_METADATA, PDX_MATERIAL_SELECT_COMPONENT_METADATA, PDX_MATERIAL_SLIDER_COMPONENT_METADATA, PDX_MATERIAL_TEXTAREA_COMPONENT_METADATA, PDX_MATERIAL_TIMEPICKER_COMPONENT_METADATA, PDX_MATERIAL_TIME_RANGE_COMPONENT_METADATA, PDX_MATERIAL_TRANSFER_LIST_COMPONENT_METADATA, PDX_MATERIAL_TREE_SELECT_COMPONENT_METADATA, PDX_MONTH_INPUT_COMPONENT_METADATA, PDX_NUMBER_INPUT_COMPONENT_METADATA, PDX_PASSWORD_INPUT_COMPONENT_METADATA, PDX_PHONE_INPUT_COMPONENT_METADATA, PDX_PRELOAD_STATUS_COMPONENT_METADATA, PDX_SEARCH_INPUT_COMPONENT_METADATA, PDX_TEXT_INPUT_COMPONENT_METADATA, PDX_TIME_INPUT_COMPONENT_METADATA, PDX_URL_INPUT_COMPONENT_METADATA, PDX_WEEK_INPUT_COMPONENT_METADATA, PDX_YEAR_INPUT_COMPONENT_METADATA, PRAXIS_DYNAMIC_FIELDS_EN_US, PRAXIS_DYNAMIC_FIELDS_I18N, PRAXIS_DYNAMIC_FIELDS_LOGGER_BACKEND, PRAXIS_DYNAMIC_FIELDS_PT_BR, PRICE_RANGE_AI_CAPABILITIES, PasswordInputComponent, PdxColorPickerComponent, PdxMaterialRangeSliderComponent, PdxMaterialTimeRangeComponent, PdxYearInputComponent, PhoneInputComponent, PraxisErrorStateMatcher, PreloadStatusComponent, RETRY_DELAY, SELECT_CONTROLS_AI_CAPABILITIES, SearchInputComponent, SimpleBaseButtonComponent, SimpleBaseInputComponent, SimpleBaseSelectComponent, TEXT_INPUTS_AI_CAPABILITIES, TIME_RANGE_AI_CAPABILITIES, TOGGLE_CONTROLS_AI_CAPABILITIES, TREE_CONTROLS_AI_CAPABILITIES, TextInputComponent, TimeInputComponent, UrlInputComponent, WeekInputComponent, YEAR_INPUT_AI_CAPABILITIES, bindDynamicFieldsLoggerBackendFromInjector, clearDynamicFieldsLoggerBackend, configureDynamicFieldsLogger, createErrorStateMatcher, createPraxisDynamicFieldsI18nConfig, emitToDynamicFieldsLoggerBackend, enableDebugForComponent, getControlTypeCatalog, getErrorStateMatcherForField, inferErrorStateStrategy, initializeComponentSystem, initializeComponentSystemSync, isBaseDynamicFieldComponent, isLoadingCapableComponent, isValidJsonSchema, isValueBasedComponent, logger, mapJsonSchemaToFields, mapPropertyToFieldMetadata, normalizeFormMetadata, provideMaterialAvatarMetadata, providePraxisDynamicFields, providePraxisDynamicFieldsCore, providePraxisDynamicFieldsCoreNoDefaults, providePraxisDynamicFieldsI18n, providePraxisDynamicFieldsNoDefaults, resolvePraxisDynamicFieldsText, setDynamicFieldsLoggerBackend, silenceComponent, supportsClearButtonControlType };
|
|
50955
|
+
export { ActionResolverService, BRAZIL_INPUTS_AI_CAPABILITIES, CACHE_TTL, CHIPS_CONTROLS_AI_CAPABILITIES, CLEAR_BUTTON_CONTROL_TYPES, COLOR_CONTROLS_AI_CAPABILITIES, CONTROL_TYPE_AI_CATALOGS, ColorInputComponent, ComponentPreloaderService, ComponentRegistryService, ConfirmDialogComponent, DATE_CONTROLS_AI_CAPABILITIES, DISPLAY_ACTION_AI_CAPABILITIES, DYNAMIC_FIELDS_PLAYGROUND_CATALOG, DYNAMIC_FIELD_BASE_STATE_RECIPES, DYNAMIC_FIELD_DEFAULT_STATE_RECIPE, DYNAMIC_FIELD_DISABLED_STATE_RECIPE, DYNAMIC_FIELD_ERROR_STATE_RECIPE, DYNAMIC_FIELD_FILLED_STATE_RECIPE, DYNAMIC_FIELD_READONLY_STATE_RECIPE, DateInputComponent, DateUtilsService, DatetimeLocalInputComponent, DynamicFieldLoaderDirective, EmailInputComponent, FILE_UPLOAD_AI_CAPABILITIES, InlineAsyncSelectComponent, InlineAutocompleteComponent, InlineColorLabelComponent, InlineCurrencyComponent, InlineCurrencyRangeComponent, InlineDateComponent, InlineDateRangeComponent, InlineDistanceRadiusComponent, InlineEntityLookupComponent, InlineInputComponent, InlineMonthRangeComponent, InlineMultiSelectComponent, InlineNumberComponent, InlinePeriodRangeComponent, InlinePipelineStatusComponent, InlineRangeSliderComponent, InlineRatingComponent, InlineRelativePeriodComponent, InlineScorePriorityComponent, InlineSearchableSelectComponent, InlineSelectComponent, InlineSentimentComponent, InlineTimeComponent, InlineTimeRangeComponent, InlineToggleComponent, InlineTreeSelectComponent, InlineYearRangeComponent, KeyboardShortcutService, LIST_CONTROLS_AI_CAPABILITIES, LoggerPresets, MAX_LOAD_ATTEMPTS, MaterialAsyncSelectComponent, MaterialAutocompleteComponent, MaterialAvatarComponent, MaterialButtonComponent, MaterialButtonToggleComponent, MaterialCheckboxGroupComponent, MaterialChipsComponent, MaterialColorPickerComponent, MaterialCpfCnpjInputComponent, MaterialCurrencyComponent, MaterialDateRangeComponent, MaterialDatepickerComponent, MaterialFileUploadComponent, MaterialMultiSelectComponent, MaterialMultiSelectTreeComponent, MaterialPriceRangeComponent, MaterialRadioGroupComponent, MaterialRatingComponent, MaterialSearchableSelectComponent, MaterialSelectComponent, MaterialSelectionListComponent, MaterialSlideToggleComponent, MaterialSliderComponent, MaterialTextareaComponent, MaterialTimepickerComponent, MaterialTransferListComponent, MaterialTreeSelectComponent, MonthInputComponent, NUMERIC_INPUTS_AI_CAPABILITIES, NumberInputComponent, OptionStore, PDX_COLOR_INPUT_COMPONENT_METADATA, PDX_COLOR_PICKER_COMPONENT_METADATA, PDX_DATETIME_LOCAL_INPUT_COMPONENT_METADATA, PDX_DATE_INPUT_COMPONENT_METADATA, PDX_EMAIL_INPUT_COMPONENT_METADATA, PDX_FIELD_SHELL_COMPONENT_METADATA, PDX_INLINE_ASYNC_SELECT_COMPONENT_METADATA, PDX_INLINE_AUTOCOMPLETE_COMPONENT_METADATA, PDX_INLINE_COLOR_LABEL_COMPONENT_METADATA, PDX_INLINE_CURRENCY_COMPONENT_METADATA, PDX_INLINE_CURRENCY_RANGE_COMPONENT_METADATA, PDX_INLINE_DATE_COMPONENT_METADATA, PDX_INLINE_DATE_RANGE_COMPONENT_METADATA, PDX_INLINE_DISTANCE_RADIUS_COMPONENT_METADATA, PDX_INLINE_ENTITY_LOOKUP_COMPONENT_METADATA, PDX_INLINE_INPUT_COMPONENT_METADATA, PDX_INLINE_MONTH_RANGE_COMPONENT_METADATA, PDX_INLINE_MULTI_SELECT_COMPONENT_METADATA, PDX_INLINE_NUMBER_COMPONENT_METADATA, PDX_INLINE_PERIOD_RANGE_COMPONENT_METADATA, PDX_INLINE_PIPELINE_STATUS_COMPONENT_METADATA, PDX_INLINE_RANGE_SLIDER_COMPONENT_METADATA, PDX_INLINE_RATING_COMPONENT_METADATA, PDX_INLINE_RELATIVE_PERIOD_COMPONENT_METADATA, PDX_INLINE_SCORE_PRIORITY_COMPONENT_METADATA, PDX_INLINE_SEARCHABLE_SELECT_COMPONENT_METADATA, PDX_INLINE_SELECT_COMPONENT_METADATA, PDX_INLINE_SENTIMENT_COMPONENT_METADATA, PDX_INLINE_TIME_COMPONENT_METADATA, PDX_INLINE_TIME_RANGE_COMPONENT_METADATA, PDX_INLINE_TOGGLE_COMPONENT_METADATA, PDX_INLINE_TREE_SELECT_COMPONENT_METADATA, PDX_INLINE_YEAR_RANGE_COMPONENT_METADATA, PDX_MATERIAL_AVATAR_COMPONENT_METADATA, PDX_MATERIAL_BUTTON_COMPONENT_METADATA, PDX_MATERIAL_BUTTON_TOGGLE_COMPONENT_METADATA, PDX_MATERIAL_CHECKBOX_GROUP_COMPONENT_METADATA, PDX_MATERIAL_CHIPS_COMPONENT_METADATA, PDX_MATERIAL_COLORPICKER_COMPONENT_METADATA, PDX_MATERIAL_CPF_CNPJ_INPUT_COMPONENT_METADATA, PDX_MATERIAL_CURRENCY_COMPONENT_METADATA, PDX_MATERIAL_DATEPICKER_COMPONENT_METADATA, PDX_MATERIAL_DATE_RANGE_COMPONENT_METADATA, PDX_MATERIAL_FILE_UPLOAD_COMPONENT_METADATA, PDX_MATERIAL_MULTI_SELECT_COMPONENT_METADATA, PDX_MATERIAL_MULTI_SELECT_TREE_COMPONENT_METADATA, PDX_MATERIAL_PRICE_RANGE_COMPONENT_METADATA, PDX_MATERIAL_RADIO_GROUP_COMPONENT_METADATA, PDX_MATERIAL_RANGE_SLIDER_COMPONENT_METADATA, PDX_MATERIAL_RATING_COMPONENT_METADATA, PDX_MATERIAL_SEARCHABLE_SELECT_COMPONENT_METADATA, PDX_MATERIAL_SELECTION_LIST_COMPONENT_METADATA, PDX_MATERIAL_SELECT_COMPONENT_METADATA, PDX_MATERIAL_SLIDER_COMPONENT_METADATA, PDX_MATERIAL_TEXTAREA_COMPONENT_METADATA, PDX_MATERIAL_TIMEPICKER_COMPONENT_METADATA, PDX_MATERIAL_TIME_RANGE_COMPONENT_METADATA, PDX_MATERIAL_TRANSFER_LIST_COMPONENT_METADATA, PDX_MATERIAL_TREE_SELECT_COMPONENT_METADATA, PDX_MONTH_INPUT_COMPONENT_METADATA, PDX_NUMBER_INPUT_COMPONENT_METADATA, PDX_PASSWORD_INPUT_COMPONENT_METADATA, PDX_PHONE_INPUT_COMPONENT_METADATA, PDX_PRELOAD_STATUS_COMPONENT_METADATA, PDX_SEARCH_INPUT_COMPONENT_METADATA, PDX_TEXT_INPUT_COMPONENT_METADATA, PDX_TIME_INPUT_COMPONENT_METADATA, PDX_URL_INPUT_COMPONENT_METADATA, PDX_WEEK_INPUT_COMPONENT_METADATA, PDX_YEAR_INPUT_COMPONENT_METADATA, PRAXIS_DYNAMIC_FIELDS_EN_US, PRAXIS_DYNAMIC_FIELDS_I18N, PRAXIS_DYNAMIC_FIELDS_LOGGER_BACKEND, PRAXIS_DYNAMIC_FIELDS_PT_BR, PRICE_RANGE_AI_CAPABILITIES, PasswordInputComponent, PdxColorPickerComponent, PdxMaterialRangeSliderComponent, PdxMaterialTimeRangeComponent, PdxYearInputComponent, PhoneInputComponent, PraxisErrorStateMatcher, PreloadStatusComponent, RETRY_DELAY, SELECT_CONTROLS_AI_CAPABILITIES, SearchInputComponent, SimpleBaseButtonComponent, SimpleBaseInputComponent, SimpleBaseSelectComponent, TEXT_INPUTS_AI_CAPABILITIES, TIME_RANGE_AI_CAPABILITIES, TOGGLE_CONTROLS_AI_CAPABILITIES, TREE_CONTROLS_AI_CAPABILITIES, TextInputComponent, TimeInputComponent, UrlInputComponent, WeekInputComponent, YEAR_INPUT_AI_CAPABILITIES, bindDynamicFieldsLoggerBackendFromInjector, clearDynamicFieldsLoggerBackend, configureDynamicFieldsLogger, createDynamicFieldPreviewRecipe, createErrorStateMatcher, createPraxisDynamicFieldsI18nConfig, emitToDynamicFieldsLoggerBackend, enableDebugForComponent, getControlTypeCatalog, getErrorStateMatcherForField, inferErrorStateStrategy, initializeComponentSystem, initializeComponentSystemSync, isBaseDynamicFieldComponent, isLoadingCapableComponent, isValidJsonSchema, isValueBasedComponent, logger, mapJsonSchemaToFields, mapPropertyToFieldMetadata, normalizeFormMetadata, provideMaterialAvatarMetadata, providePraxisDynamicFields, providePraxisDynamicFieldsCore, providePraxisDynamicFieldsCoreNoDefaults, providePraxisDynamicFieldsI18n, providePraxisDynamicFieldsNoDefaults, resolvePraxisDynamicFieldsText, setDynamicFieldsLoggerBackend, silenceComponent, supportsClearButtonControlType };
|
|
48876
50956
|
//# sourceMappingURL=praxisui-dynamic-fields.mjs.map
|