ng-configcat-publicapi-ui 5.0.5 → 5.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.d.ts CHANGED
@@ -1,12 +1,14 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { Provider, InjectionToken, OnInit, OnChanges, OnDestroy } from '@angular/core';
3
3
  import * as ng_configcat_publicapi from 'ng-configcat-publicapi';
4
- import { MeService, ProductsService, ConfigsService, EnvironmentsService, FeatureFlagsSettingsService, FeatureFlagSettingValuesV2Service, FeatureFlagSettingValuesService, IntegrationLinksService, SegmentsService, UserComparator, SettingType, SegmentComparator, PrerequisiteComparator, SettingFormulaModel, FeatureFlagLimitations, TargetingRuleModel, PercentageOptionModel, ConditionModel, UserConditionModel, SegmentConditionModel, PrerequisiteFlagConditionModel, ComparisonValueListModel, ComparisonValueModel, ValueModel, UpdateEvaluationFormulaModel, ConfigModel, EnvironmentModel, SettingValueModel, UpdateSettingValueModel, SettingDataModel, SegmentListModel, ProductModel, SettingModel } from 'ng-configcat-publicapi';
4
+ import { MeService, ProductsService, ConfigsService, EnvironmentsService, FeatureFlagsSettingsService, FeatureFlagSettingValuesV2Service, FeatureFlagSettingValuesService, IntegrationLinksService, SegmentsService, OrganizationsService, UserComparator, SettingType, PredefinedVariationModel, SegmentComparator, PrerequisiteComparator, SettingFormulaModel, FeatureFlagLimitations, TargetingRuleModel, PercentageOptionModel, ConditionModel, UserConditionModel, SegmentConditionModel, PrerequisiteFlagConditionModel, ComparisonValueListModel, ComparisonValueModel, ValueModel, UpdateEvaluationFormulaModel, ConfigModel, EnvironmentModel, SettingValueModel, UpdateSettingValueModel, SettingDataModel, SegmentListModel, ProductModel, SettingModel, EvaluationVersion } from 'ng-configcat-publicapi';
5
5
  import { HttpErrorResponse } from '@angular/common/http';
6
6
  import * as _angular_forms from '@angular/forms';
7
7
  import { FormGroup, FormControl, FormArray, ValidatorFn, AbstractControl } from '@angular/forms';
8
8
  import { Observable, Subscription } from 'rxjs';
9
9
  import { MatDialogRef } from '@angular/material/dialog';
10
+ import * as _angular_material_paginator from '@angular/material/paginator';
11
+ import { MatTableDataSource } from '@angular/material/table';
10
12
 
11
13
  interface IConfigCatPublicApiConfiguration {
12
14
  basicAuthUsername?: string;
@@ -42,6 +44,7 @@ declare class PublicApiService {
42
44
  createSettingValuesService(basicAuthUsername?: string | null, basicAuthPassword?: string | null, basePath?: string | null): FeatureFlagSettingValuesService;
43
45
  createIntegrationLinksService(basicAuthUsername?: string | null, basicAuthPassword?: string | null, basePath?: string | null): IntegrationLinksService;
44
46
  createSegmentsService(basicAuthUsername?: string | null, basicAuthPassword?: string | null, basePath?: string | null): SegmentsService;
47
+ createOrganizationService(basicAuthUsername?: string | null, basicAuthPassword?: string | null, basePath?: string | null): OrganizationsService;
45
48
  getDashboardBasePath(): string;
46
49
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<PublicApiService, never>;
47
50
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<PublicApiService>;
@@ -131,6 +134,7 @@ interface ValueForm {
131
134
  stringValue?: FormControl<string>;
132
135
  intValue?: FormControl<number>;
133
136
  doubleValue?: FormControl<number>;
137
+ predefinedVariationId?: FormControl<string>;
134
138
  }
135
139
  interface UserConditionForm {
136
140
  comparisonAttribute: FormControl<string>;
@@ -170,6 +174,7 @@ interface IPrerequisiteSetting {
170
174
  key: string;
171
175
  name: string;
172
176
  settingType: SettingType;
177
+ predefinedVariations: PredefinedVariationModel[];
173
178
  }
174
179
  interface IDependeeSetting {
175
180
  settingId: number;
@@ -199,10 +204,10 @@ interface IAddRuleButtonTracker {
199
204
  declare class FormGenerator {
200
205
  generateSettingValuesFormGroup(model: SettingFormulaModel, readOnly: boolean, settings: IPrerequisiteSetting[], featureFlagLimitations: FeatureFlagLimitations): FormGroup<UpdateSettingValueForm>;
201
206
  generatePercentageEvaluationAttributeFormControl(percentageEvaluationAttribute: string | null, readOnly: boolean): FormControl<string | null>;
202
- generateTargetingRuleFormGroup(model: TargetingRuleModel, settingType: SettingType, readOnly: boolean, settings: IPrerequisiteSetting[], featureFlagLimitations: FeatureFlagLimitations): FormGroup<TargetingRuleForm>;
203
- generateTargetingRuleWithEmptyPercentageOptions(settingType: SettingType, readOnly: boolean, settings: IPrerequisiteSetting[], featureFlagLimitations: FeatureFlagLimitations): FormGroup<TargetingRuleForm>;
204
- getEmptyPercentageOptions(settingType: SettingType): PercentageOptionModel[];
205
- generatePercentageOptionFormGroup(model: PercentageOptionModel, settingType: SettingType, readOnly: boolean, featureFlagLimitations: FeatureFlagLimitations): FormGroup<PercentageOptionForm>;
207
+ generateTargetingRuleFormGroup(model: TargetingRuleModel, settingType: SettingType, predefinedVariations: PredefinedVariationModel[], readOnly: boolean, settings: IPrerequisiteSetting[], featureFlagLimitations: FeatureFlagLimitations): FormGroup<TargetingRuleForm>;
208
+ generateTargetingRuleWithEmptyPercentageOptions(settingType: SettingType, predefinedVariations: PredefinedVariationModel[], readOnly: boolean, settings: IPrerequisiteSetting[], featureFlagLimitations: FeatureFlagLimitations): FormGroup<TargetingRuleForm>;
209
+ getEmptyPercentageOptions(settingType: SettingType, predefinedVariations: PredefinedVariationModel[], featureFlagLimitations: FeatureFlagLimitations): PercentageOptionModel[];
210
+ generatePercentageOptionFormGroup(model: PercentageOptionModel, settingType: SettingType, predefinedVariations: PredefinedVariationModel[], readOnly: boolean, featureFlagLimitations: FeatureFlagLimitations): FormGroup<PercentageOptionForm>;
206
211
  generateConditionFormGroup(model: ConditionModel, readOnly: boolean, settings: IPrerequisiteSetting[], featureFlagLimitations: FeatureFlagLimitations): FormGroup<ConditionForm>;
207
212
  generateUserConditionFormGroup(value: UserConditionModel, readOnly: boolean, featureFlagLimitations: FeatureFlagLimitations): FormGroup<UserConditionForm>;
208
213
  generateSegmentConditionFormGroup(value: SegmentConditionModel, readOnly: boolean): FormGroup<SegmentConditionForm>;
@@ -217,9 +222,10 @@ declare class FormGenerator {
217
222
  getComparisonValueStringListItemValidators(featureFlagLimitations: FeatureFlagLimitations): ValidatorFn[];
218
223
  getComparisonValueSemverValidators(featureFlagLimitations: FeatureFlagLimitations): ValidatorFn[];
219
224
  getComparisonValueSemverListItemValidators(featureFlagLimitations: FeatureFlagLimitations): ValidatorFn[];
220
- generateDefaultValue(settingType: SettingType): ValueModel;
221
- generateDefaultValueFormGroup(settingType: SettingType, readOnly: boolean, featureFlagLimitations: FeatureFlagLimitations): FormGroup<ValueForm>;
222
- generateValueFormGroup(value: ValueModel, settingType: SettingType, readOnly: boolean, featureFlagLimitations: FeatureFlagLimitations): FormGroup<ValueForm>;
225
+ generateDefaultValue(settingType: SettingType, predefinedVariations: PredefinedVariationModel[]): ValueModel;
226
+ generatePrerequisiteDefaultValue(settingType: SettingType, predefinedVariations: PredefinedVariationModel[]): ValueModel;
227
+ generateDefaultValueFormGroup(settingType: SettingType, predefinedVariations: PredefinedVariationModel[], readOnly: boolean, featureFlagLimitations: FeatureFlagLimitations): FormGroup<ValueForm>;
228
+ generateValueFormGroup(value: ValueModel, settingType: SettingType, predefinedVariations: PredefinedVariationModel[], readOnly: boolean, featureFlagLimitations: FeatureFlagLimitations): FormGroup<ValueForm>;
223
229
  getComparisonValueType(comparator: UserComparator): UserComparatorType;
224
230
  getValidatorsForSettingType(settingType: SettingType, featureFlagLimitations: FeatureFlagLimitations): ValidatorFn[];
225
231
  isPercentageOnlyTargetingRule(formGroup: FormGroup<TargetingRuleForm>): boolean;
@@ -285,6 +291,11 @@ interface AuthorizationModel {
285
291
  fullName: string;
286
292
  }
287
293
 
294
+ interface LinkFeatureFlagParameters {
295
+ environmentId: string;
296
+ settingId: number;
297
+ }
298
+
288
299
  declare class BaseComponent {
289
300
  private readonly publicApiService;
290
301
  readonly basePath: _angular_core.InputSignal<string | null>;
@@ -297,6 +308,7 @@ declare class BaseComponent {
297
308
  protected createSettingValuesService(): ng_configcat_publicapi.FeatureFlagSettingValuesService;
298
309
  protected createSettingValuesV2Service(): ng_configcat_publicapi.FeatureFlagSettingValuesV2Service;
299
310
  protected createSegmentsService(): ng_configcat_publicapi.SegmentsService;
311
+ protected createOrganizationService(): ng_configcat_publicapi.OrganizationsService;
300
312
  protected getDashboardBasePath(): string;
301
313
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<BaseComponent, never>;
302
314
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<BaseComponent, "app-base", never, { "basePath": { "alias": "basePath"; "required": false; "isSignal": true; }; "basicAuthUsername": { "alias": "basicAuthUsername"; "required": false; "isSignal": true; }; "basicAuthPassword": { "alias": "basicAuthPassword"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -317,12 +329,12 @@ declare class SettingItemComponent extends BaseComponent {
317
329
  readonly saveFailed: _angular_core.OutputEmitterRef<Error>;
318
330
  readonly formValuesChanged: _angular_core.OutputEmitterRef<void>;
319
331
  settingValue: SettingValueModel;
320
- segments: SegmentListModel[];
321
332
  dashboardBasePath: string;
322
333
  settingFormulaModel: SettingFormulaModel;
323
334
  constructor();
324
335
  loadSettingValues: () => Observable<SettingValuesModel>;
325
336
  itemLoadSucceeded(): void;
337
+ itenSaveFailed(error: Error): void;
326
338
  loadSegments: () => Observable<SegmentListModel[]>;
327
339
  handleSave: (model: UpdateSettingValuesModel) => Observable<SettingValuesModel>;
328
340
  onDeleteSettingRequested(setting: DeleteSettingModel): void;
@@ -359,30 +371,70 @@ declare class BaseSelectComponent extends BaseComponent {
359
371
 
360
372
  declare class ProductSelectComponent extends BaseSelectComponent implements OnInit {
361
373
  readonly valueFormControl: _angular_core.InputSignal<FormControl<any>>;
362
- products: ProductModel[];
374
+ readonly preSelectedProductId: _angular_core.InputSignal<string | undefined>;
375
+ readonly products: _angular_core.WritableSignal<ProductModel[]>;
376
+ readonly filterText: _angular_core.WritableSignal<string>;
377
+ readonly filteredProducts: _angular_core.WritableSignal<{
378
+ hidden: boolean;
379
+ organization: ng_configcat_publicapi.OrganizationModel;
380
+ productId: string;
381
+ name: string;
382
+ description: string | null;
383
+ order: number;
384
+ reasonRequired: boolean;
385
+ }[]>;
386
+ readonly hasFilteredProduct: _angular_core.Signal<boolean>;
363
387
  ngOnInit(): void;
388
+ clearFilter(): void;
364
389
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ProductSelectComponent, never>;
365
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ProductSelectComponent, "app-product-select", never, { "valueFormControl": { "alias": "valueFormControl"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
390
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ProductSelectComponent, "app-product-select", never, { "valueFormControl": { "alias": "valueFormControl"; "required": true; "isSignal": true; }; "preSelectedProductId": { "alias": "preSelectedProductId"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
366
391
  }
367
392
 
368
393
  declare class ConfigSelectComponent extends BaseSelectComponent implements OnInit, OnChanges {
369
- readonly valueFormControl: _angular_core.InputSignal<FormControl<any>>;
394
+ readonly valueFormControl: _angular_core.InputSignal<FormControl<string>>;
370
395
  readonly productId: _angular_core.InputSignal<string>;
371
- configs: ConfigModel[];
396
+ readonly preSelectedConfigId: _angular_core.InputSignal<string | undefined>;
397
+ readonly configs: _angular_core.WritableSignal<ConfigModel[]>;
398
+ readonly filterText: _angular_core.WritableSignal<string>;
399
+ readonly filteredConfigs: _angular_core.WritableSignal<{
400
+ hidden: boolean;
401
+ product: ng_configcat_publicapi.ProductModel;
402
+ configId: string;
403
+ name: string;
404
+ description: string | null;
405
+ order: number;
406
+ migratedConfigId: string | null;
407
+ evaluationVersion: ng_configcat_publicapi.EvaluationVersion;
408
+ }[]>;
409
+ readonly hasFilteredConfig: _angular_core.Signal<boolean>;
372
410
  ngOnInit(): void;
373
411
  ngOnChanges(): void;
374
412
  reloadConfigs(): void;
413
+ clearFilter(): void;
375
414
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ConfigSelectComponent, never>;
376
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ConfigSelectComponent, "app-config-select", never, { "valueFormControl": { "alias": "valueFormControl"; "required": true; "isSignal": true; }; "productId": { "alias": "productId"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
415
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ConfigSelectComponent, "app-config-select", never, { "valueFormControl": { "alias": "valueFormControl"; "required": true; "isSignal": true; }; "productId": { "alias": "productId"; "required": true; "isSignal": true; }; "preSelectedConfigId": { "alias": "preSelectedConfigId"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
377
416
  }
378
417
 
379
418
  declare class EnvironmentSelectComponent extends BaseSelectComponent implements OnInit, OnChanges {
380
419
  readonly valueFormControl: _angular_core.InputSignal<FormControl<any>>;
381
420
  readonly productId: _angular_core.InputSignal<string>;
382
- environments: EnvironmentModel[];
421
+ readonly environments: _angular_core.WritableSignal<EnvironmentModel[]>;
422
+ readonly filterText: _angular_core.WritableSignal<string>;
423
+ readonly filteredEnvironments: _angular_core.WritableSignal<{
424
+ hidden: boolean;
425
+ product: ng_configcat_publicapi.ProductModel;
426
+ environmentId: string;
427
+ name: string;
428
+ color: string | null;
429
+ description: string | null;
430
+ order: number;
431
+ reasonRequired: boolean;
432
+ }[]>;
433
+ readonly hasFilteredEnvironment: _angular_core.Signal<boolean>;
383
434
  ngOnInit(): void;
384
435
  ngOnChanges(): void;
385
436
  reloadEnvironments(): void;
437
+ clearFilter(): void;
386
438
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<EnvironmentSelectComponent, never>;
387
439
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<EnvironmentSelectComponent, "app-environment-select", never, { "valueFormControl": { "alias": "valueFormControl"; "required": true; "isSignal": true; }; "productId": { "alias": "productId"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
388
440
  }
@@ -390,10 +442,34 @@ declare class EnvironmentSelectComponent extends BaseSelectComponent implements
390
442
  declare class SettingSelectComponent extends BaseSelectComponent implements OnInit, OnChanges {
391
443
  readonly valueFormControl: _angular_core.InputSignal<FormControl<any>>;
392
444
  readonly configId: _angular_core.InputSignal<string>;
393
- settings: SettingModel[];
445
+ SettingTypeEnum: {
446
+ Boolean: SettingType;
447
+ String: SettingType;
448
+ Int: SettingType;
449
+ Double: SettingType;
450
+ };
451
+ readonly settings: _angular_core.WritableSignal<SettingModel[]>;
452
+ readonly filterText: _angular_core.WritableSignal<string>;
453
+ readonly filteredSettings: _angular_core.WritableSignal<{
454
+ hidden: boolean;
455
+ settingId: number;
456
+ key: string;
457
+ name: string;
458
+ hint: string | null;
459
+ order: number;
460
+ settingType: SettingType;
461
+ configId: string;
462
+ configName: string;
463
+ createdAt: string | null;
464
+ tags: Array<ng_configcat_publicapi.TagModel>;
465
+ predefinedVariations: Array<ng_configcat_publicapi.PredefinedVariationModel>;
466
+ }[]>;
467
+ readonly hasFilteredSetting: _angular_core.Signal<boolean>;
394
468
  ngOnInit(): void;
395
469
  ngOnChanges(): void;
470
+ selectedSettingTiggetText(): string;
396
471
  reloadSettings(): void;
472
+ clearFilter(): void;
397
473
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SettingSelectComponent, never>;
398
474
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SettingSelectComponent, "app-setting-select", never, { "valueFormControl": { "alias": "valueFormControl"; "required": true; "isSignal": true; }; "configId": { "alias": "configId"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
399
475
  }
@@ -470,9 +546,225 @@ declare class FeatureFlagItemComponent extends BaseComponent implements OnInit,
470
546
  recalcAddButtons(): void;
471
547
  hasOnlyPercentageRule(group: FormGroup<UpdateSettingValueForm>): boolean;
472
548
  expandedChanged(expandedState: boolean): void;
549
+ private openDiscardDialog;
550
+ canDeactivate(): boolean;
551
+ viewVariations(event: {
552
+ settingId: number;
553
+ }): void;
554
+ openConcurentDeleteDialog(): void;
555
+ openVariationsDialog(event: {
556
+ settingId: number;
557
+ }): void;
473
558
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FeatureFlagItemComponent, never>;
474
559
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<FeatureFlagItemComponent, "app-feature-flag-item", never, { "productId": { "alias": "productId"; "required": true; "isSignal": true; }; "environmentId": { "alias": "environmentId"; "required": true; "isSignal": true; }; "configId": { "alias": "configId"; "required": true; "isSignal": true; }; "settingId": { "alias": "settingId"; "required": true; "isSignal": true; }; "canDeleteSetting": { "alias": "canDeleteSetting"; "required": false; "isSignal": true; }; "deleteSettingText": { "alias": "deleteSettingText"; "required": false; "isSignal": true; }; "showEnvironmentName": { "alias": "showEnvironmentName"; "required": false; "isSignal": true; }; }, { "deleteSettingRequested": "deleteSettingRequested"; "loadSucceeded": "loadSucceeded"; "loadFailed": "loadFailed"; "saveSucceeded": "saveSucceeded"; "saveFailed": "saveFailed"; "expandedStateChanged": "expandedStateChanged"; "formValuesChanged": "formValuesChanged"; }, never, never, true, never>;
475
560
  }
476
561
 
477
- export { AuthorizationComponent, CONFIGCAT_PUBLICAPI_UI_CONFIGURATION, ConfigSelectComponent, DeleteSettingDialogComponent, EnvironmentSelectComponent, FeatureFlagItemComponent, FormGenerator, FormHelper, InputDisplayNormalizerDirective, ProductSelectComponent, PublicApiService, SettingItemComponent, SettingSelectComponent, Theme, ThemeService, UserComparatorText, UserComparatorType, defaultErrorMessageTypes, featureFlagKeyRegex, getRawSettiongValue, getRawValue, isClearTextComparator, percentageRegex, provideConfigCatPublicApiUi, validatePercentageSum, wholeNumberRegex };
478
- export type { AuthorizationModel, DeleteSettingDialogData, DeleteSettingDialogResult, DeleteSettingModel, SettingValuesModel, UpdateSettingValuesModel };
562
+ interface AuthorizationParameters {
563
+ basicAuthUsername: string;
564
+ basicAuthPassword: string;
565
+ }
566
+
567
+ declare class LinkFeatureFlagComponent implements OnInit, OnDestroy {
568
+ readonly authorizationParameters: _angular_core.InputSignal<AuthorizationParameters | null | undefined>;
569
+ readonly hideCancelButton: _angular_core.InputSignal<boolean>;
570
+ readonly addButtonLabel: _angular_core.InputSignal<unknown>;
571
+ readonly cancelButtonLabel: _angular_core.InputSignal<unknown>;
572
+ readonly linkInitiated: _angular_core.OutputEmitterRef<LinkFeatureFlagParameters>;
573
+ readonly resizeRequested: _angular_core.OutputEmitterRef<void>;
574
+ readonly cancelInitiated: _angular_core.OutputEmitterRef<void>;
575
+ readonly selectDropdownPanelChangedReqested: _angular_core.OutputEmitterRef<boolean>;
576
+ private readonly formBuilder;
577
+ formGroup: _angular_forms.FormGroup<{
578
+ productId: FormControl<string>;
579
+ environmentId: FormControl<string>;
580
+ configId: FormControl<string>;
581
+ settingId: FormControl<number>;
582
+ }>;
583
+ subscription: Subscription | null;
584
+ ngOnInit(): void;
585
+ ngOnDestroy(): void;
586
+ add(): void;
587
+ cancel(): void;
588
+ selectDropdownPanelChanged(useSelector: boolean): void;
589
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LinkFeatureFlagComponent, never>;
590
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LinkFeatureFlagComponent, "app-link-feature-flag", never, { "authorizationParameters": { "alias": "authorizationParameters"; "required": false; "isSignal": true; }; "hideCancelButton": { "alias": "hideCancelButton"; "required": false; "isSignal": true; }; "addButtonLabel": { "alias": "addButtonLabel"; "required": false; "isSignal": true; }; "cancelButtonLabel": { "alias": "cancelButtonLabel"; "required": false; "isSignal": true; }; }, { "linkInitiated": "linkInitiated"; "resizeRequested": "resizeRequested"; "cancelInitiated": "cancelInitiated"; "selectDropdownPanelChangedReqested": "selectDropdownPanelChangedReqested"; }, never, never, true, never>;
591
+ }
592
+
593
+ type FeatureFlagValueType = boolean | string | number;
594
+ interface PredefinedVariationValueFormGroup {
595
+ boolValue?: FormControl<boolean>;
596
+ stringValue?: FormControl<string>;
597
+ intValue?: FormControl<number>;
598
+ doubleValue?: FormControl<number>;
599
+ }
600
+ interface PredefinedVariationFormGroup {
601
+ name: FormControl<string | null>;
602
+ hint: FormControl<string | null>;
603
+ value: FormGroup<PredefinedVariationValueFormGroup>;
604
+ valueForComparison: FormControl<string | null>;
605
+ }
606
+ interface InitialValueFormGroup {
607
+ environmentName: FormControl<string>;
608
+ environmentId: FormControl<string>;
609
+ settingValue: FormControl<FeatureFlagValueType>;
610
+ predefinedVariationIndex: FormControl<number>;
611
+ }
612
+ interface CreateSettingFormGroup {
613
+ name: FormControl<string>;
614
+ key: FormControl<string>;
615
+ hint: FormControl<string>;
616
+ settingType: FormControl<SettingType>;
617
+ useVariations: FormControl<boolean>;
618
+ predefinedVariations: FormArray<FormGroup<PredefinedVariationFormGroup>>;
619
+ initialValuesPerEnvironment: FormControl<boolean>;
620
+ initialValueForAll: FormControl<FeatureFlagValueType>;
621
+ initialValueForAllVariationIndex: FormControl<number>;
622
+ initialValues: FormArray<FormGroup<InitialValueFormGroup>>;
623
+ }
624
+ interface IntegrationCreateSettingFormGroup extends CreateSettingFormGroup {
625
+ productId: FormControl<string>;
626
+ environmentId: FormControl<string>;
627
+ configId: FormControl<string>;
628
+ }
629
+ interface CreateConfigFormGroup {
630
+ productId: FormControl<string>;
631
+ name: FormControl<string>;
632
+ description: FormControl<string>;
633
+ evaluationVersion: FormControl<EvaluationVersion>;
634
+ }
635
+
636
+ interface PresetProductAndConfig {
637
+ productId: string;
638
+ configId: string;
639
+ productName: string;
640
+ configName: string;
641
+ }
642
+ declare class CreateFeatureFlagComponent extends BaseComponent implements OnInit {
643
+ private readonly formBuilder;
644
+ private readonly destroyRef;
645
+ private readonly dialog;
646
+ readonly hideCancelButton: _angular_core.InputSignal<boolean>;
647
+ readonly createButtonLabel: _angular_core.InputSignal<string | undefined>;
648
+ readonly cancelButtonLabel: _angular_core.InputSignal<string | undefined>;
649
+ readonly targetSectionHeader: _angular_core.InputSignal<string | undefined>;
650
+ readonly targetSectionDescription: _angular_core.InputSignal<string | undefined>;
651
+ readonly flagSectionHeader: _angular_core.InputSignal<string | undefined>;
652
+ readonly flagSectionDescription: _angular_core.InputSignal<string | undefined>;
653
+ readonly linkSectionHeader: _angular_core.InputSignal<string | undefined>;
654
+ readonly linkSectionDescription: _angular_core.InputSignal<string | undefined>;
655
+ readonly hideLinkSection: _angular_core.InputSignal<boolean>;
656
+ readonly presetProductAndConfig: _angular_core.InputSignal<PresetProductAndConfig | undefined>;
657
+ readonly createInitiated: _angular_core.OutputEmitterRef<LinkFeatureFlagParameters>;
658
+ readonly resizeRequested: _angular_core.OutputEmitterRef<void>;
659
+ readonly cancelInitiated: _angular_core.OutputEmitterRef<void>;
660
+ readonly selectDropdownPanelChangedReqested: _angular_core.OutputEmitterRef<boolean>;
661
+ SettingTypeEnum: {
662
+ Boolean: SettingType;
663
+ String: SettingType;
664
+ Int: SettingType;
665
+ Double: SettingType;
666
+ };
667
+ FormHelper: typeof FormHelper;
668
+ EvaluationVersion: {
669
+ V1: EvaluationVersion;
670
+ V2: EvaluationVersion;
671
+ };
672
+ loading: boolean;
673
+ dataSource: MatTableDataSource<FormGroup<PredefinedVariationFormGroup>, _angular_material_paginator.MatPaginator>;
674
+ formGroup: FormGroup<IntegrationCreateSettingFormGroup>;
675
+ configEvaluationVersion: EvaluationVersion;
676
+ maxPredefinedVariations: number;
677
+ maxStringFlagValueLength: number;
678
+ selectedProductOrganiaztionId: string;
679
+ selectedProductEnviroment: EnvironmentModel[];
680
+ focusIndex: number;
681
+ settingTypeText: string;
682
+ displayedColumns: string[];
683
+ stringValidators: _angular_forms.ValidatorFn[];
684
+ intValidators: _angular_forms.ValidatorFn[];
685
+ doubleValidators: _angular_forms.ValidatorFn[];
686
+ ngOnInit(): void;
687
+ initialValueForAllFormControlFunction(settingType: SettingType): FormControl<string> | FormControl<number> | FormControl<boolean>;
688
+ settingTypeChanges(newSettingType: SettingType): void;
689
+ setDataSource(): void;
690
+ create(): void;
691
+ cancel(): void;
692
+ selectDropdownPanelChanged(useSelector: boolean): void;
693
+ createEmptyVariationFormGroup(settingType: SettingType, boolValue?: boolean, stringValue?: string, intValue?: number, doubleValue?: number): FormGroup<{
694
+ name: FormControl<string | null>;
695
+ hint: FormControl<string | null>;
696
+ value: FormGroup<PredefinedVariationValueFormGroup>;
697
+ valueForComparison: FormControl<string | null>;
698
+ }>;
699
+ createEmptyVariationValueFormGroup(settingType: SettingType, boolValue?: boolean, stringValue?: string, intValue?: number, doubleValue?: number): FormGroup<{
700
+ boolValue?: FormControl<boolean> | undefined;
701
+ stringValue?: FormControl<string> | undefined;
702
+ intValue?: FormControl<number> | undefined;
703
+ doubleValue?: FormControl<number> | undefined;
704
+ }>;
705
+ addVariation(): void;
706
+ removeVariation(index: number): void;
707
+ fixupVariationIndex(removedIndex: number, formControl: FormControl<number>): void;
708
+ expandText(stringValueControl: FormControl<string>): void;
709
+ expandHint(stringValueControl: FormControl<string | null>): void;
710
+ getColorIndex(row: FormGroup<PredefinedVariationFormGroup>, index: number): FeatureFlagValueType;
711
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CreateFeatureFlagComponent, never>;
712
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CreateFeatureFlagComponent, "app-create-feature-flag", never, { "hideCancelButton": { "alias": "hideCancelButton"; "required": false; "isSignal": true; }; "createButtonLabel": { "alias": "createButtonLabel"; "required": false; "isSignal": true; }; "cancelButtonLabel": { "alias": "cancelButtonLabel"; "required": false; "isSignal": true; }; "targetSectionHeader": { "alias": "targetSectionHeader"; "required": false; "isSignal": true; }; "targetSectionDescription": { "alias": "targetSectionDescription"; "required": false; "isSignal": true; }; "flagSectionHeader": { "alias": "flagSectionHeader"; "required": false; "isSignal": true; }; "flagSectionDescription": { "alias": "flagSectionDescription"; "required": false; "isSignal": true; }; "linkSectionHeader": { "alias": "linkSectionHeader"; "required": false; "isSignal": true; }; "linkSectionDescription": { "alias": "linkSectionDescription"; "required": false; "isSignal": true; }; "hideLinkSection": { "alias": "hideLinkSection"; "required": false; "isSignal": true; }; "presetProductAndConfig": { "alias": "presetProductAndConfig"; "required": false; "isSignal": true; }; }, { "createInitiated": "createInitiated"; "resizeRequested": "resizeRequested"; "cancelInitiated": "cancelInitiated"; "selectDropdownPanelChangedReqested": "selectDropdownPanelChangedReqested"; }, never, never, true, never>;
713
+ }
714
+
715
+ interface PresetProduct {
716
+ productId: string;
717
+ productName: string;
718
+ }
719
+ declare class CreateConfigComponent extends BaseComponent implements OnInit {
720
+ private readonly formBuilder;
721
+ readonly hideCancelButton: _angular_core.InputSignal<boolean>;
722
+ readonly createButtonLabel: _angular_core.InputSignal<string | undefined>;
723
+ readonly cancelButtonLabel: _angular_core.InputSignal<string | undefined>;
724
+ readonly targetSectionHeader: _angular_core.InputSignal<string | undefined>;
725
+ readonly targetSectionDescription: _angular_core.InputSignal<string | undefined>;
726
+ readonly configSectionHeader: _angular_core.InputSignal<string | undefined>;
727
+ readonly configSectionDescription: _angular_core.InputSignal<string | undefined>;
728
+ readonly presetProduct: _angular_core.InputSignal<PresetProduct | undefined>;
729
+ readonly createInitiated: _angular_core.OutputEmitterRef<string>;
730
+ readonly resizeRequested: _angular_core.OutputEmitterRef<void>;
731
+ readonly cancelInitiated: _angular_core.OutputEmitterRef<void>;
732
+ readonly selectDropdownPanelChangedReqested: _angular_core.OutputEmitterRef<boolean>;
733
+ SettingTypeEnum: {
734
+ Boolean: SettingType;
735
+ String: SettingType;
736
+ Int: SettingType;
737
+ Double: SettingType;
738
+ };
739
+ FormHelper: typeof FormHelper;
740
+ EvaluationVersion: {
741
+ V1: EvaluationVersion;
742
+ V2: EvaluationVersion;
743
+ };
744
+ loading: boolean;
745
+ formGroup: FormGroup<CreateConfigFormGroup>;
746
+ maxPredefinedVariations: number;
747
+ maxStringFlagValueLength: number;
748
+ selectedProductOrganiaztionId: string;
749
+ selectedProductEnviroment: EnvironmentModel[];
750
+ focusIndex: number;
751
+ settingTypeText: string;
752
+ displayedColumns: string[];
753
+ ngOnInit(): void;
754
+ create(): void;
755
+ cancel(): void;
756
+ selectDropdownPanelChanged(useSelector: boolean): void;
757
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CreateConfigComponent, never>;
758
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CreateConfigComponent, "app-create-config", never, { "hideCancelButton": { "alias": "hideCancelButton"; "required": false; "isSignal": true; }; "createButtonLabel": { "alias": "createButtonLabel"; "required": false; "isSignal": true; }; "cancelButtonLabel": { "alias": "cancelButtonLabel"; "required": false; "isSignal": true; }; "targetSectionHeader": { "alias": "targetSectionHeader"; "required": false; "isSignal": true; }; "targetSectionDescription": { "alias": "targetSectionDescription"; "required": false; "isSignal": true; }; "configSectionHeader": { "alias": "configSectionHeader"; "required": false; "isSignal": true; }; "configSectionDescription": { "alias": "configSectionDescription"; "required": false; "isSignal": true; }; "presetProduct": { "alias": "presetProduct"; "required": false; "isSignal": true; }; }, { "createInitiated": "createInitiated"; "resizeRequested": "resizeRequested"; "cancelInitiated": "cancelInitiated"; "selectDropdownPanelChangedReqested": "selectDropdownPanelChangedReqested"; }, never, never, true, never>;
759
+ }
760
+
761
+ declare class LoaderComponent implements OnInit {
762
+ showLoader: boolean;
763
+ readonly skipTimeOut: _angular_core.InputSignal<boolean>;
764
+ ngOnInit(): void;
765
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LoaderComponent, never>;
766
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LoaderComponent, "app-loader", never, { "skipTimeOut": { "alias": "skipTimeOut"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
767
+ }
768
+
769
+ export { AuthorizationComponent, CONFIGCAT_PUBLICAPI_UI_CONFIGURATION, ConfigSelectComponent, CreateConfigComponent, CreateFeatureFlagComponent, DeleteSettingDialogComponent, EnvironmentSelectComponent, FeatureFlagItemComponent, FormGenerator, FormHelper, InputDisplayNormalizerDirective, LinkFeatureFlagComponent, LoaderComponent, ProductSelectComponent, PublicApiService, SettingItemComponent, SettingSelectComponent, Theme, ThemeService, UserComparatorText, UserComparatorType, defaultErrorMessageTypes, featureFlagKeyRegex, getRawSettiongValue, getRawValue, isClearTextComparator, percentageRegex, provideConfigCatPublicApiUi, validatePercentageSum, wholeNumberRegex };
770
+ export type { AuthorizationModel, DeleteSettingDialogData, DeleteSettingDialogResult, DeleteSettingModel, LinkFeatureFlagParameters, PresetProduct, PresetProductAndConfig, SettingValuesModel, UpdateSettingValuesModel };
package/package.json CHANGED
@@ -1,14 +1,15 @@
1
1
  {
2
2
  "name": "ng-configcat-publicapi-ui",
3
- "version": "5.0.5",
3
+ "version": "5.2.0",
4
4
  "peerDependencies": {
5
- "@angular/cdk": "^20.2.7",
6
- "@angular/common": "^20.3.3",
7
- "@angular/core": "^20.3.3",
8
- "@angular/forms": "^20.3.3",
9
- "@angular/material": "^20.2.7",
10
- "@angular/router": "^20.3.3",
11
- "ng-configcat-publicapi": "^5.0.4",
5
+ "@angular/cdk": "^20.2.14",
6
+ "@angular/common": "^20.3.15",
7
+ "@angular/core": "^20.3.15",
8
+ "@angular/forms": "^20.3.15",
9
+ "@angular/material": "^20.2.14",
10
+ "@angular/router": "^20.3.15",
11
+ "@configcat/sdk": "^1.0.2",
12
+ "ng-configcat-publicapi": "^5.2.2",
12
13
  "papaparse": "^5.5.3",
13
14
  "ace-builds": "^1.37.0"
14
15
  },
@@ -0,0 +1 @@
1
+ <svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 244.77 210.07"><defs><style>.cls-1{fill:#ed1c24;}.cls-2{fill:#fff;}.cls-3{fill:#000000;}</style></defs><title>cat</title><path class="cls-1" d="M201.57,100V40l-60,60H91.72l-40-40V190a60,60,0,0,0,60,60h90V100Z" transform="translate(-35.62 -40)"/><rect class="cls-2" x="34.22" y="80.48" width="113.76" height="51.71" rx="25.85" ry="25.85"/><circle class="cls-3" cx="119.95" cy="106.33" r="20"/><path class="cls-1" d="M97.52,130.63a16,16,0,1,1-16,16,16,16,0,0,1,16-16m0-4a20,20,0,1,0,20,20,20,20,0,0,0-20-20Z" transform="translate(-35.62 -40)"/><path class="cls-2" d="M135.68,187.4a2,2,0,0,0-2.83,0l-6.13,6.13-6.13-6.13a2,2,0,0,0-2.83,2.83l7,7v13.6a2,2,0,0,0,4,0v-13.6l7-7A2,2,0,0,0,135.68,187.4Z" transform="translate(-35.62 -40)"/><path class="cls-2" d="M44.76,195.06H85.29a1.5,1.5,0,1,0,0-3H44.76a1.5,1.5,0,1,0,0,3Z" transform="translate(-35.62 -40)"/><path class="cls-2" d="M92.94,199.3H37.12a1.5,1.5,0,0,0,0,3H92.94a1.5,1.5,0,0,0,0-3Z" transform="translate(-35.62 -40)"/><path class="cls-2" d="M85.29,206.54H44.76a1.5,1.5,0,1,0,0,3H85.29a1.5,1.5,0,0,0,0-3Z" transform="translate(-35.62 -40)"/><path class="cls-2" d="M168.5,193.57H209a1.5,1.5,0,1,0,0-3H168.5a1.5,1.5,0,0,0,0,3Z" transform="translate(-35.62 -40)"/><path class="cls-2" d="M216.67,197.8H160.85a1.5,1.5,0,1,0,0,3h55.82a1.5,1.5,0,1,0,0-3Z" transform="translate(-35.62 -40)"/><path class="cls-2" d="M209,205H168.5a1.5,1.5,0,0,0,0,3H209a1.5,1.5,0,0,0,0-3Z" transform="translate(-35.62 -40)"/><path class="cls-1" d="M275.34,139.62l0,0a20.17,20.17,0,1,0-37.5,14.83,65.67,65.67,0,0,1-79.17,85.36A82.1,82.1,0,0,0,275.34,139.62Z" transform="translate(-35.62 -40)"/></svg>
@@ -0,0 +1,4 @@
1
+ <svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M24 48C37.2548 48 48 37.2548 48 24C48 10.7452 37.2548 0 24 0C10.7452 0 0 10.7452 0 24C0 37.2548 10.7452 48 24 48Z" fill="#EF333A"/>
3
+ <path d="M16.1914 23.19L18.4034 20.67V19.2H11.5434V21.02H15.7154L13.6994 23.302V24.8H14.7354C16.0234 24.8 16.5694 25.262 16.5694 26.004C16.5694 26.802 15.8694 27.264 14.7354 27.264C13.7134 27.264 12.6774 26.942 11.9354 26.382L11.0534 28.118C12.0054 28.79 13.4194 29.168 14.7914 29.168C17.5774 29.168 18.8514 27.656 18.8514 26.004C18.8514 24.562 17.9554 23.47 16.1914 23.19ZM21.1865 29.112C21.9425 29.112 22.5445 28.538 22.5445 27.74C22.5445 26.928 21.9425 26.396 21.1865 26.396C20.4305 26.396 19.8285 26.928 19.8285 27.74C19.8285 28.538 20.4305 29.112 21.1865 29.112ZM22.8959 19.2V21.02H24.8559V29H27.1239V19.2H22.8959ZM37.8003 25.094H36.2043V23.26H34.0623V25.094H31.4303L35.7143 19.2H33.3343L28.7143 25.416V26.942H33.9923V29H36.2043V26.942H37.8003V25.094Z" fill="white"/>
4
+ </svg>
@@ -0,0 +1,5 @@
1
+ <svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M24 48C37.2548 48 48 37.2548 48 24C48 10.7452 37.2548 0 24 0C10.7452 0 0 10.7452 0 24C0 37.2548 10.7452 48 24 48Z" fill="#EC8030"/>
3
+ <rect x="10" y="18" width="28" height="12" rx="6" stroke="white" stroke-width="2"/>
4
+ <circle cx="30" cy="24" r="9" fill="white"/>
5
+ </svg>
@@ -0,0 +1,4 @@
1
+ <svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M24 48C37.2548 48 48 37.2548 48 24C48 10.7452 37.2548 0 24 0C10.7452 0 0 10.7452 0 24C0 37.2548 10.7452 48 24 48Z" fill="#27AE60"/>
3
+ <path d="M15.2569 20.356C14.0529 20.356 12.8349 20.678 12.0089 21.266L12.7929 22.792C13.3389 22.358 14.1649 22.092 14.9629 22.092C16.1389 22.092 16.6989 22.638 16.6989 23.576H14.9629C12.6669 23.576 11.7289 24.5 11.7289 25.83C11.7289 27.132 12.7789 28.112 14.5429 28.112C15.6489 28.112 16.4329 27.748 16.8389 27.062V28H18.8829V23.702C18.8829 21.42 17.5529 20.356 15.2569 20.356ZM15.0889 26.642C14.3189 26.642 13.8569 26.278 13.8569 25.732C13.8569 25.228 14.1789 24.85 15.2009 24.85H16.6989V25.62C16.4469 26.306 15.8169 26.642 15.0889 26.642ZM25.3116 20.356C24.3736 20.356 23.6036 20.65 23.0436 21.266V17.612H20.8596V28H22.9456V27.132C23.4916 27.79 24.3036 28.112 25.3116 28.112C27.4256 28.112 29.0636 26.6 29.0636 24.234C29.0636 21.868 27.4256 20.356 25.3116 20.356ZM24.9336 26.32C23.8416 26.32 23.0156 25.536 23.0156 24.234C23.0156 22.932 23.8416 22.148 24.9336 22.148C26.0256 22.148 26.8516 22.932 26.8516 24.234C26.8516 25.536 26.0256 26.32 24.9336 26.32ZM34.1656 28.112C35.7476 28.112 36.9936 27.412 37.5396 26.208L35.8456 25.284C35.4396 26.012 34.8376 26.32 34.1516 26.32C33.0456 26.32 32.1776 25.55 32.1776 24.234C32.1776 22.918 33.0456 22.148 34.1516 22.148C34.8376 22.148 35.4396 22.47 35.8456 23.184L37.5396 22.274C36.9936 21.042 35.7476 20.356 34.1656 20.356C31.7156 20.356 29.9656 21.966 29.9656 24.234C29.9656 26.502 31.7156 28.112 34.1656 28.112Z" fill="white"/>
4
+ </svg>
@@ -0,0 +1,4 @@
1
+ <svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M24 48C37.2548 48 48 37.2548 48 24C48 10.7452 37.2548 0 24 0C10.7452 0 0 10.7452 0 24C0 37.2548 10.7452 48 24 48Z" fill="#F2C94C"/>
3
+ <path d="M25.0786 25.094H23.4826V23.26H21.3406V25.094H18.7086L22.9926 19.2H20.6126L15.9926 25.416V26.942H21.2706V29H23.4826V26.942H25.0786V25.094ZM28.8376 27.152L31.0916 25.024C32.4636 23.75 32.7296 22.882 32.7296 21.93C32.7296 20.152 31.2736 19.032 29.0896 19.032C27.3256 19.032 25.9536 19.746 25.1976 20.852L26.8496 21.916C27.3256 21.258 28.0396 20.936 28.8796 20.936C29.9156 20.936 30.4476 21.384 30.4476 22.154C30.4476 22.63 30.2936 23.134 29.4256 23.96L25.6456 27.53V29H33.0516V27.152H28.8376Z" fill="#333333"/>
4
+ </svg>
@@ -151,6 +151,21 @@ html > body {
151
151
  }
152
152
  }
153
153
 
154
+ .mat-form-field-disabled {
155
+ .mdc-notched-outline > * {
156
+ border-color: var(--input-disabled-border-color) !important;
157
+ }
158
+
159
+ .mat-mdc-text-field-wrapper {
160
+ --mat-form-field-outlined-disabled-input-text-color: var(--input-disabled-color);
161
+ background-color: var(--input-disabled-background-color);
162
+ }
163
+
164
+ .mat-mdc-select-disabled {
165
+ --mat-select-disabled-trigger-text-color: var(--input-disabled-color);
166
+ }
167
+ }
168
+
154
169
  .mat-mdc-paginator {
155
170
  .mat-mdc-form-field {
156
171
  .mat-mdc-text-field-wrapper {
@@ -375,6 +390,26 @@ html > body {
375
390
  }
376
391
  }
377
392
 
393
+ .menu-filter {
394
+ display: flex;
395
+ margin: 0 8px 8px 8px;
396
+ justify-content: space-around;
397
+ min-width: 230px;
398
+
399
+ mat-form-field {
400
+ width: 100%;
401
+ }
402
+ }
403
+
404
+ .clear-filter {
405
+ @include input-suffix-button();
406
+ margin-right: 5px;
407
+
408
+ &.marginless {
409
+ margin-right: unset;
410
+ }
411
+ }
412
+
378
413
  &[data-theme="dark"] .mat-mdc-autocomplete-panel,
379
414
  &[data-theme="dark"] .mat-mdc-dialog-surface,
380
415
  &[data-theme="dark"] .mat-mdc-select-panel,
package/src/css/icon.scss CHANGED
@@ -4,4 +4,8 @@ html > body {
4
4
  .mat-icon.icon-transform-rotate {
5
5
  transform: rotate(0.03deg);
6
6
  }
7
+
8
+ .mat-icon.icon-transform-rotate-90 {
9
+ transform: rotate(90deg);
10
+ }
7
11
  }
@@ -8,5 +8,18 @@ html > body {
8
8
 
9
9
  .multiline-tooltip {
10
10
  white-space: pre-line;
11
+
12
+ &.left-aligned {
13
+ .mdc-tooltip__surface {
14
+ text-align: left;
15
+ }
16
+ }
17
+ }
18
+
19
+ .wide-tooltip {
20
+ // See also: https://stackoverflow.com/a/78637566
21
+ .mdc-tooltip__surface {
22
+ max-width: min(800px, 90vw) !important;
23
+ }
11
24
  }
12
25
  }
@@ -73,7 +73,10 @@
73
73
  --input-background: #{theme.$input-background};
74
74
  --input-border-color: #dbdbdb;
75
75
  --input-transparent-background: #{color.adjust(theme.$input-background, $alpha: -0.2)};
76
- --input-placeholder-opacity: 0.87;
76
+ --input-placeholder-opacity: 0.9;
77
+ --input-disabled-background-color: #ebebeb;
78
+ --input-disabled-border-color: #d1d1d1;
79
+ --input-disabled-color: #0000009c;
77
80
 
78
81
  // ==== NAV ====
79
82
  --nav-background-color: var(--panel-background-color);
@@ -199,6 +202,9 @@
199
202
  --input-border-color: #474e57;
200
203
  --input-transparent-background: #{color.adjust(theme.$input-background-dark, $alpha: -0.2)};
201
204
  --input-placeholder-opacity: 0.6;
205
+ --input-disabled-background-color: #2f3135;
206
+ --input-disabled-border-color: #4d4d4e;
207
+ --input-disabled-color: #bdbdbd;
202
208
 
203
209
  // ==== NAV ====
204
210
  --nav-background-color: var(--panel-background-color);
@@ -0,0 +1,30 @@
1
+ @use "sass:list";
2
+
3
+ $colors: #71c95b, #ff5252, #a482e7, #48b6b6, #a19180, #23afdd, #e08ba9, #97b0df, #e0ae17, #e46bb2;
4
+ $colorsDark: #5ca12e, #e04f4f, #866fcf, #399, #837361, #008fb3, #c77a8b, #7d8ebb, #bd8e02, #bd509c;
5
+
6
+ html > body {
7
+ .variation-indicator {
8
+ display: flex;
9
+ min-width: 8px;
10
+ width: 8px;
11
+ height: 8px;
12
+ border-radius: 50%;
13
+ }
14
+
15
+ @each $color in $colors {
16
+ $index: list.index($colors, $color);
17
+ .variation-color-#{$index} {
18
+ background-color: $color;
19
+ }
20
+ }
21
+
22
+ &[data-theme="dark"] {
23
+ @each $color in $colorsDark {
24
+ $index: list.index($colorsDark, $color);
25
+ .variation-color-#{$index} {
26
+ background-color: $color;
27
+ }
28
+ }
29
+ }
30
+ }