@gooddata/sdk-ui-filters 11.15.0-alpha.0 → 11.15.0-alpha.2

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.
Files changed (104) hide show
  1. package/esm/DateFilter/DateFilterBody/CalendarTypeTabs.d.ts +12 -0
  2. package/esm/DateFilter/DateFilterBody/CalendarTypeTabs.d.ts.map +1 -0
  3. package/esm/DateFilter/DateFilterBody/CalendarTypeTabs.js +22 -0
  4. package/esm/DateFilter/DateFilterBody/CalendarTypeTabs.js.map +1 -0
  5. package/esm/DateFilter/DateFilterBody/DateFilterBodyContent.d.ts.map +1 -1
  6. package/esm/DateFilter/DateFilterBody/DateFilterBodyContent.js +16 -1
  7. package/esm/DateFilter/DateFilterBody/DateFilterBodyContent.js.map +1 -1
  8. package/esm/DateFilter/DateFilterBody/DateFilterBodyContentFiltered.d.ts +7 -2
  9. package/esm/DateFilter/DateFilterBody/DateFilterBodyContentFiltered.d.ts.map +1 -1
  10. package/esm/DateFilter/DateFilterBody/DateFilterBodyContentFiltered.js +4 -3
  11. package/esm/DateFilter/DateFilterBody/DateFilterBodyContentFiltered.js.map +1 -1
  12. package/esm/DateFilter/DateFilterBody/DateFilterBodyMobileContent.d.ts.map +1 -1
  13. package/esm/DateFilter/DateFilterBody/DateFilterBodyMobileContent.js +10 -1
  14. package/esm/DateFilter/DateFilterBody/DateFilterBodyMobileContent.js.map +1 -1
  15. package/esm/DateFilter/DateFilterBody/DateFilterBodyRedesigned.d.ts.map +1 -1
  16. package/esm/DateFilter/DateFilterBody/DateFilterBodyRedesigned.js +30 -6
  17. package/esm/DateFilter/DateFilterBody/DateFilterBodyRedesigned.js.map +1 -1
  18. package/esm/DateFilter/DateFilterBody/RelativePresetFilterItems.d.ts.map +1 -1
  19. package/esm/DateFilter/DateFilterBody/RelativePresetFilterItems.js +3 -0
  20. package/esm/DateFilter/DateFilterBody/RelativePresetFilterItems.js.map +1 -1
  21. package/esm/DateFilter/DateFilterButtonLocalized/DateFilterButtonLocalized.js +2 -2
  22. package/esm/DateFilter/DateFilterButtonLocalized/DateFilterButtonLocalized.js.map +1 -1
  23. package/esm/DateFilter/DateFilterTextLocalized/DateFilterTextLocalized.d.ts +10 -2
  24. package/esm/DateFilter/DateFilterTextLocalized/DateFilterTextLocalized.d.ts.map +1 -1
  25. package/esm/DateFilter/DateFilterTextLocalized/DateFilterTextLocalized.js +4 -4
  26. package/esm/DateFilter/DateFilterTextLocalized/DateFilterTextLocalized.js.map +1 -1
  27. package/esm/DateFilter/DynamicSelect/utils.d.ts +3 -0
  28. package/esm/DateFilter/DynamicSelect/utils.d.ts.map +1 -1
  29. package/esm/DateFilter/DynamicSelect/utils.js +6 -0
  30. package/esm/DateFilter/DynamicSelect/utils.js.map +1 -1
  31. package/esm/DateFilter/RelativeDateFilterForm/GranularityTabs.d.ts.map +1 -1
  32. package/esm/DateFilter/RelativeDateFilterForm/GranularityTabs.js +12 -9
  33. package/esm/DateFilter/RelativeDateFilterForm/GranularityTabs.js.map +1 -1
  34. package/esm/DateFilter/constants/i18n.d.ts +26 -0
  35. package/esm/DateFilter/constants/i18n.d.ts.map +1 -1
  36. package/esm/DateFilter/constants/i18n.js +25 -0
  37. package/esm/DateFilter/constants/i18n.js.map +1 -1
  38. package/esm/DateFilter/index.d.ts +9 -4
  39. package/esm/DateFilter/index.d.ts.map +1 -1
  40. package/esm/DateFilter/index.js +1 -0
  41. package/esm/DateFilter/index.js.map +1 -1
  42. package/esm/DateFilter/utils/Translations/DateFilterTitle.d.ts +5 -4
  43. package/esm/DateFilter/utils/Translations/DateFilterTitle.d.ts.map +1 -1
  44. package/esm/DateFilter/utils/Translations/DateFilterTitle.js +17 -15
  45. package/esm/DateFilter/utils/Translations/DateFilterTitle.js.map +1 -1
  46. package/esm/DateFilter/utils/presetFilterUtils.d.ts +116 -0
  47. package/esm/DateFilter/utils/presetFilterUtils.d.ts.map +1 -0
  48. package/esm/DateFilter/utils/presetFilterUtils.js +197 -0
  49. package/esm/DateFilter/utils/presetFilterUtils.js.map +1 -0
  50. package/esm/MeasureValueFilter/AttributePicker.d.ts +12 -2
  51. package/esm/MeasureValueFilter/AttributePicker.d.ts.map +1 -1
  52. package/esm/MeasureValueFilter/AttributePicker.js +94 -68
  53. package/esm/MeasureValueFilter/AttributePicker.js.map +1 -1
  54. package/esm/MeasureValueFilter/DateDatasetPickerItem.d.ts +31 -0
  55. package/esm/MeasureValueFilter/DateDatasetPickerItem.d.ts.map +1 -0
  56. package/esm/MeasureValueFilter/DateDatasetPickerItem.js +26 -0
  57. package/esm/MeasureValueFilter/DateDatasetPickerItem.js.map +1 -0
  58. package/esm/MeasureValueFilter/DimensionalitySection.d.ts +13 -0
  59. package/esm/MeasureValueFilter/DimensionalitySection.d.ts.map +1 -1
  60. package/esm/MeasureValueFilter/DimensionalitySection.js +38 -28
  61. package/esm/MeasureValueFilter/DimensionalitySection.js.map +1 -1
  62. package/esm/MeasureValueFilter/Dropdown.d.ts +3 -0
  63. package/esm/MeasureValueFilter/Dropdown.d.ts.map +1 -1
  64. package/esm/MeasureValueFilter/Dropdown.js +2 -2
  65. package/esm/MeasureValueFilter/Dropdown.js.map +1 -1
  66. package/esm/MeasureValueFilter/DropdownBody.d.ts +3 -0
  67. package/esm/MeasureValueFilter/DropdownBody.d.ts.map +1 -1
  68. package/esm/MeasureValueFilter/DropdownBody.js +17 -7
  69. package/esm/MeasureValueFilter/DropdownBody.js.map +1 -1
  70. package/esm/MeasureValueFilter/MeasureValueFilterDropdown.d.ts.map +1 -1
  71. package/esm/MeasureValueFilter/MeasureValueFilterDropdown.js +11 -21
  72. package/esm/MeasureValueFilter/MeasureValueFilterDropdown.js.map +1 -1
  73. package/esm/MeasureValueFilter/OperatorDropdown.d.ts.map +1 -1
  74. package/esm/MeasureValueFilter/OperatorDropdown.js +2 -2
  75. package/esm/MeasureValueFilter/OperatorDropdown.js.map +1 -1
  76. package/esm/MeasureValueFilter/typings.d.ts +46 -1
  77. package/esm/MeasureValueFilter/typings.d.ts.map +1 -1
  78. package/esm/MeasureValueFilter/typings.js.map +1 -1
  79. package/esm/MeasureValueFilter/useAttributePickerItemsData.d.ts +25 -0
  80. package/esm/MeasureValueFilter/useAttributePickerItemsData.d.ts.map +1 -0
  81. package/esm/MeasureValueFilter/useAttributePickerItemsData.js +86 -0
  82. package/esm/MeasureValueFilter/useAttributePickerItemsData.js.map +1 -0
  83. package/esm/MeasureValueFilter/useAttributePickerListboxItems.d.ts +36 -0
  84. package/esm/MeasureValueFilter/useAttributePickerListboxItems.d.ts.map +1 -0
  85. package/esm/MeasureValueFilter/useAttributePickerListboxItems.js +120 -0
  86. package/esm/MeasureValueFilter/useAttributePickerListboxItems.js.map +1 -0
  87. package/esm/index.d.ts +2 -2
  88. package/esm/index.d.ts.map +1 -1
  89. package/esm/index.js +1 -1
  90. package/esm/index.js.map +1 -1
  91. package/esm/internal.d.ts +1 -0
  92. package/esm/internal.d.ts.map +1 -1
  93. package/esm/internal.js +2 -1
  94. package/esm/internal.js.map +1 -1
  95. package/esm/locales.d.ts.map +1 -1
  96. package/esm/locales.js +40 -0
  97. package/esm/locales.js.map +1 -1
  98. package/esm/sdk-ui-filters.d.ts +162 -3
  99. package/package.json +10 -10
  100. package/styles/css/main.css +96 -6
  101. package/styles/css/main.css.map +1 -1
  102. package/styles/css/measureValueFilter.css +96 -6
  103. package/styles/css/measureValueFilter.css.map +1 -1
  104. package/styles/scss/measureValueFilter.scss +116 -6
@@ -489,6 +489,12 @@ export declare function AttributeFilterSimpleDropdownButtonWithSelection({ isOpe
489
489
  */
490
490
  export declare function AttributeFilterStatusBar({ attributeTitle, isFilteredByParentFilters, parentFilterTitles, totalElementsCountWithCurrentSettings, getItemTitle, isInverted, selectedItems, selectedItemsLimit, enableShowingFilteredElements, onShowFilteredElements, irrelevantSelection, onClearIrrelevantSelection, isFilteredByLimitingValidationItems, isFilteredByDependentDateFilters, withoutApply, }: IAttributeFilterStatusBarProps): JSX.Element;
491
491
 
492
+ /**
493
+ * Type representing the calendar tab selection.
494
+ * @alpha
495
+ */
496
+ export declare type CalendarTabType = "standard" | "fiscal";
497
+
492
498
  /**
493
499
  * @public
494
500
  */
@@ -540,13 +546,16 @@ export declare class DateFilter extends PureComponent<IDateFilterProps, IDateFil
540
546
  */
541
547
  export declare const DateFilterHelpers: {
542
548
  validateFilterOption: (filterOption: DateFilterOption) => IExtendedDateFilterErrors;
543
- getDateFilterTitleUsingTranslator: (filter: DateFilterOption, translator: IDateAndMessageTranslator, dateFormat?: string) => string;
544
- getDateFilterRepresentation: (filter: DateFilterOption, locale: ILocale, messages: ITranslations, dateFormat?: string) => string;
549
+ getDateFilterTitleUsingTranslator: (filter: DateFilterOption, translator: IDateAndMessageTranslator, dateFormat?: string, labelMode?: DateFilterLabelMode) => string;
550
+ getDateFilterRepresentation: (filter: DateFilterOption, locale: ILocale, messages: ITranslations, dateFormat?: string, labelMode?: DateFilterLabelMode) => string;
545
551
  granularityIntlCodes: {
546
552
  "GDC.time.year": GranularityIntlKey;
553
+ "GDC.time.fiscal_year": GranularityIntlKey;
547
554
  "GDC.time.week_us": GranularityIntlKey;
548
555
  "GDC.time.quarter": GranularityIntlKey;
556
+ "GDC.time.fiscal_quarter": GranularityIntlKey;
549
557
  "GDC.time.month": GranularityIntlKey;
558
+ "GDC.time.fiscal_month": GranularityIntlKey;
550
559
  "GDC.time.date": GranularityIntlKey;
551
560
  "GDC.time.hour": GranularityIntlKey;
552
561
  "GDC.time.minute": GranularityIntlKey;
@@ -556,10 +565,18 @@ export declare const DateFilterHelpers: {
556
565
  canExcludeCurrentPeriod: (dateFilterOption: DateFilterOption) => boolean;
557
566
  mapOptionToAfm: (value: DateFilterOption, dateDataSet: ObjRef, excludeCurrentPeriod: boolean) => IDateFilter | null;
558
567
  formatAbsoluteDateRange: (from: Date | string, to: Date | string, dateFormat: string, splitter?: string) => string;
559
- formatRelativeDateRange: (from: number, to: number, granularity: DateFilterGranularity, translator: IDateAndMessageTranslator, boundedFilter?: IUpperBoundedFilter | ILowerBoundedFilter) => string;
568
+ formatRelativeDateRange: (from: number, to: number, granularity: DateFilterGranularity, translator: IDateAndMessageTranslator, boundedFilter?: IUpperBoundedFilter | ILowerBoundedFilter, labelMode?: DateFilterLabelMode) => string;
560
569
  filterVisibleDateFilterOptions: typeof filterVisibleDateFilterOptions;
561
570
  };
562
571
 
572
+ /**
573
+ * Label mode for date filter display.
574
+ * - "short": Abbreviated labels suitable for list context (group heading provides granularity info)
575
+ * - "full": Complete labels suitable for standalone display (button, selected value)
576
+ * @beta
577
+ */
578
+ export declare type DateFilterLabelMode = "short" | "full";
579
+
563
580
  /**
564
581
  * Represents any option in the date filter dropdown
565
582
  * @public
@@ -598,6 +615,51 @@ export declare type DimensionalityItemType = "attribute" | "chronologicalDate" |
598
615
  */
599
616
  export declare function EmptyElementsSearchBar(_props: IAttributeFilterElementsSearchBarProps): JSX.Element;
600
617
 
618
+ /**
619
+ * Ensures the granularity in a relative filter option is compatible with the available granularities.
620
+ * If the current granularity is not available, maps it to an equivalent or picks the first available.
621
+ * @param filterOption - The filter option to check/correct
622
+ * @param availableGranularities - List of available granularities
623
+ * @param fiscalFirst - Whether to prefer fiscal granularities when mapping
624
+ * @returns The filter option with a compatible granularity
625
+ * @internal
626
+ */
627
+ export declare function ensureCompatibleGranularity<T extends IUiRelativeDateFilterFormLike>(filterOption: T, availableGranularities: DateFilterGranularity[], fiscalFirst: boolean): T;
628
+
629
+ /**
630
+ * Filter granularities for the fiscal tab view.
631
+ * Includes fiscal granularities and shared granularities (week, day, hour, minute).
632
+ * @param granularities - Available granularities to filter
633
+ * @returns Granularities suitable for fiscal tab
634
+ * @internal
635
+ */
636
+ export declare function filterFiscalGranularities(granularities: DateFilterGranularity[]): DateFilterGranularity[];
637
+
638
+ /**
639
+ * Filter presets for the Fiscal tab.
640
+ * @param presets - The relative presets option group to filter
641
+ * @returns Filtered presets containing fiscal granularities and shared granularities (week, day, hour, minute)
642
+ * @alpha
643
+ */
644
+ export declare function filterFiscalPresets(presets: DateFilterRelativeOptionGroup): DateFilterRelativeOptionGroup;
645
+
646
+ /**
647
+ * Filter granularities for the standard tab view.
648
+ * Excludes all fiscal granularities.
649
+ * @param granularities - Available granularities to filter
650
+ * @returns Granularities suitable for standard tab
651
+ * @internal
652
+ */
653
+ export declare function filterStandardGranularities(granularities: DateFilterGranularity[]): DateFilterGranularity[];
654
+
655
+ /**
656
+ * Filter presets for the Standard tab.
657
+ * @param presets - The relative presets option group to filter
658
+ * @returns Filtered presets containing only standard granularities
659
+ * @alpha
660
+ */
661
+ export declare function filterStandardPresets(presets: DateFilterRelativeOptionGroup): DateFilterRelativeOptionGroup;
662
+
601
663
  /**
602
664
  * Returns dateFilterOptions with only items that have visible set to true.
603
665
  *
@@ -611,6 +673,14 @@ export declare function filterVisibleDateFilterOptions(dateFilterOptions: IDateF
611
673
  */
612
674
  export declare function getAttributeFilterSubtitle(isCommittedSelectionInverted: boolean, committedSelectionElements: IAttributeElement[], intl: IntlShape): string;
613
675
 
676
+ /**
677
+ * Get fiscal tabs configuration based on available presets.
678
+ * @param presets - The relative presets option group to check, or undefined
679
+ * @returns Configuration object with hasFiscal, hasStandard, and showTabs flags
680
+ * @alpha
681
+ */
682
+ export declare function getFiscalTabsConfig(presets: DateFilterRelativeOptionGroup | undefined): IFiscalTabsConfig;
683
+
614
684
  /**
615
685
  * Returns localized date format pattern for DAY granularity according to ICU. Unsupported locales default to en-US.
616
686
  *
@@ -621,10 +691,35 @@ export declare function getAttributeFilterSubtitle(isCommittedSelectionInverted:
621
691
  export declare const getLocalizedIcuDateFormatPattern: (locale: string) => string;
622
692
 
623
693
  /**
694
+ * Determine which tab should be selected based on the selected preset's granularity.
695
+ * @param preset - The currently selected date filter option
696
+ * @returns "fiscal" if the preset uses a fiscal granularity, otherwise "standard"
697
+ * @alpha
698
+ */
699
+ export declare function getTabForPreset(preset: DateFilterOption): CalendarTabType;
700
+
701
+ /**
702
+ * Short-form intl keys for granularities.
624
703
  * @beta
625
704
  */
626
705
  export declare type GranularityIntlKey = "day" | "minute" | "hour" | "week" | "month" | "quarter" | "year";
627
706
 
707
+ /**
708
+ * Check if the presets contain any fiscal granularities.
709
+ * @param presets - The relative presets option group to check
710
+ * @returns true if any fiscal granularities are present
711
+ * @alpha
712
+ */
713
+ export declare function hasFiscalPresets(presets: DateFilterRelativeOptionGroup): boolean;
714
+
715
+ /**
716
+ * Check if the presets contain any standard granularities.
717
+ * @param presets - The relative presets option group to check
718
+ * @returns true if any standard granularities are present
719
+ * @alpha
720
+ */
721
+ export declare function hasStandardPresets(presets: DateFilterRelativeOptionGroup): boolean;
722
+
628
723
  /**
629
724
  * @internal
630
725
  */
@@ -2699,6 +2794,29 @@ export declare interface IDimensionalityItem {
2699
2794
  * Defaults to "attribute" if not specified.
2700
2795
  */
2701
2796
  type: DimensionalityItemType;
2797
+ /**
2798
+ * Optional object reference for the item (typically the attribute/date display form reference).
2799
+ *
2800
+ * This is useful when the item `identifier` is a LocalIdRef (bucket item),
2801
+ * but we still want to compare/deduplicate it against catalog candidates that are referenced by ObjRef.
2802
+ *
2803
+ * @beta
2804
+ */
2805
+ ref?: ObjRef;
2806
+ /**
2807
+ * Optional dataset information for grouping catalog items.
2808
+ * Present for catalog items, undefined for bucket items.
2809
+ */
2810
+ dataset?: {
2811
+ /**
2812
+ * Dataset identifier.
2813
+ */
2814
+ identifier: ObjRef;
2815
+ /**
2816
+ * Human-readable dataset title.
2817
+ */
2818
+ title: string;
2819
+ };
2702
2820
  }
2703
2821
 
2704
2822
  /**
@@ -2759,6 +2877,16 @@ export declare interface IFilterConfigurationProps {
2759
2877
  onCancelButtonClick: () => void;
2760
2878
  }
2761
2879
 
2880
+ /**
2881
+ * Configuration for fiscal calendar tabs.
2882
+ * @alpha
2883
+ */
2884
+ export declare interface IFiscalTabsConfig {
2885
+ hasFiscal: boolean;
2886
+ hasStandard: boolean;
2887
+ showTabs: boolean;
2888
+ }
2889
+
2762
2890
  /**
2763
2891
  * Handles the selection that can be inverted.
2764
2892
  *
@@ -2866,6 +2994,20 @@ export declare interface IMeasureValueFilterCommonProps {
2866
2994
  dimensionality?: IDimensionalityItem[];
2867
2995
  insightDimensionality?: IDimensionalityItem[];
2868
2996
  isDimensionalityEnabled?: boolean;
2997
+ /**
2998
+ * Catalog items available for dimensionality
2999
+ */
3000
+ catalogDimensionality?: IDimensionalityItem[];
3001
+ /**
3002
+ * Callback triggered when dimensionality changes.
3003
+ * Used to revalidate catalog items after selection changes.
3004
+ */
3005
+ onDimensionalityChange?: (dimensionality: ObjRefInScope[]) => void;
3006
+ /**
3007
+ * Whether catalog dimensionality is currently being loaded.
3008
+ * If true, the attribute picker can show a small loading indicator.
3009
+ */
3010
+ isLoadingCatalogDimensionality?: boolean;
2869
3011
  }
2870
3012
 
2871
3013
  /**
@@ -3017,6 +3159,14 @@ export declare interface IRankingFilterProps {
3017
3159
  */
3018
3160
  export declare const isAbsoluteDateFilterOption: (obj: unknown) => obj is AbsoluteDateFilterOption;
3019
3161
 
3162
+ /**
3163
+ * Check if a granularity is a fiscal granularity.
3164
+ * @param granularity - The granularity to check
3165
+ * @returns true if the granularity is fiscal (fiscal_year, fiscal_quarter, or fiscal_month)
3166
+ * @alpha
3167
+ */
3168
+ export declare function isFiscalGranularity(granularity: DateFilterGranularity): boolean;
3169
+
3020
3170
  /**
3021
3171
  * Core API for attribute filter components, that allows you to implement custom attribute filter components.
3022
3172
  *
@@ -3217,6 +3367,15 @@ export declare interface IUiRelativeDateFilterForm extends Omit<IRelativeDateFil
3217
3367
  boundedFilter?: IUpperBoundedFilter | ILowerBoundedFilter;
3218
3368
  }
3219
3369
 
3370
+ /**
3371
+ * @internal
3372
+ */
3373
+ export declare interface IUiRelativeDateFilterFormLike {
3374
+ granularity?: DateFilterGranularity;
3375
+ from?: number;
3376
+ to?: number;
3377
+ }
3378
+
3220
3379
  /**
3221
3380
  * Properties of {@link useAttributeFilterController}
3222
3381
  * @public
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gooddata/sdk-ui-filters",
3
- "version": "11.15.0-alpha.0",
3
+ "version": "11.15.0-alpha.2",
4
4
  "description": "GoodData.UI SDK - Filter Components",
5
5
  "repository": {
6
6
  "type": "git",
@@ -47,11 +47,11 @@
47
47
  "ts-invariant": "^0.7.5",
48
48
  "tslib": "2.8.1",
49
49
  "uuid": "^11.1.0",
50
- "@gooddata/sdk-backend-spi": "11.15.0-alpha.0",
51
- "@gooddata/sdk-ui": "11.15.0-alpha.0",
52
- "@gooddata/sdk-ui-kit": "11.15.0-alpha.0",
53
- "@gooddata/util": "11.15.0-alpha.0",
54
- "@gooddata/sdk-model": "11.15.0-alpha.0"
50
+ "@gooddata/sdk-backend-spi": "11.15.0-alpha.2",
51
+ "@gooddata/sdk-model": "11.15.0-alpha.2",
52
+ "@gooddata/sdk-ui": "11.15.0-alpha.2",
53
+ "@gooddata/sdk-ui-kit": "11.15.0-alpha.2",
54
+ "@gooddata/util": "11.15.0-alpha.2"
55
55
  },
56
56
  "devDependencies": {
57
57
  "@gooddata/stylelint-config": "^5.0.0",
@@ -94,10 +94,10 @@
94
94
  "typescript": "5.8.3",
95
95
  "vitest": "3.2.4",
96
96
  "vitest-dom": "0.1.1",
97
- "@gooddata/eslint-config": "11.15.0-alpha.0",
98
- "@gooddata/reference-workspace": "11.15.0-alpha.0",
99
- "@gooddata/sdk-backend-mockingbird": "11.15.0-alpha.0",
100
- "@gooddata/sdk-ui-theme-provider": "11.15.0-alpha.0"
97
+ "@gooddata/eslint-config": "11.15.0-alpha.2",
98
+ "@gooddata/reference-workspace": "11.15.0-alpha.2",
99
+ "@gooddata/sdk-backend-mockingbird": "11.15.0-alpha.2",
100
+ "@gooddata/sdk-ui-theme-provider": "11.15.0-alpha.2"
101
101
  },
102
102
  "peerDependencies": {
103
103
  "react": "^18.0.0 || ^19.0.0",
@@ -8074,6 +8074,16 @@ div.gd-empty-item-bubble {
8074
8074
  width: 100%;
8075
8075
  }
8076
8076
 
8077
+ .gd-mvf-operator-dropdown {
8078
+ display: flex;
8079
+ flex-direction: column;
8080
+ }
8081
+
8082
+ .gd-mvf-operator-dropdown-label {
8083
+ font-size: 12px;
8084
+ color: var(--gd-palette-complementary-7, #6d7680);
8085
+ }
8086
+
8077
8087
  .gd-mvf-operator-dropdown-body {
8078
8088
  width: 230px;
8079
8089
  padding: 5px 0;
@@ -8106,6 +8116,12 @@ div.gd-empty-item-bubble {
8106
8116
  display: none;
8107
8117
  }
8108
8118
 
8119
+ .s-mvf-comparison-value-input .gd-input-field,
8120
+ .s-mvf-range-from-input .gd-input-field,
8121
+ .s-mvf-range-to-input .gd-input-field {
8122
+ text-align: right;
8123
+ }
8124
+
8109
8125
  .gd-mvf-dimensionality-header {
8110
8126
  display: flex;
8111
8127
  justify-content: space-between;
@@ -8113,6 +8129,8 @@ div.gd-empty-item-bubble {
8113
8129
  }
8114
8130
  .gd-mvf-dimensionality-header label {
8115
8131
  font-size: 12px;
8132
+ line-height: 20px;
8133
+ color: var(--gd-palette-complementary-7, #6d7680);
8116
8134
  }
8117
8135
 
8118
8136
  .gd-mvf-dimensionality-items {
@@ -8120,6 +8138,14 @@ div.gd-empty-item-bubble {
8120
8138
  flex-wrap: wrap;
8121
8139
  align-items: center;
8122
8140
  gap: 5px;
8141
+ max-height: 350px;
8142
+ overflow-y: auto;
8143
+ }
8144
+
8145
+ .gd-mvf-dimensionality-tag-wrapper {
8146
+ max-width: 180px;
8147
+ min-width: 0;
8148
+ display: flex;
8123
8149
  }
8124
8150
 
8125
8151
  .gd-mvf-dimensionality-add-wrapper {
@@ -8134,6 +8160,15 @@ div.gd-empty-item-bubble {
8134
8160
  height: inherit;
8135
8161
  font-size: 12px;
8136
8162
  }
8163
+ .gd-mvf-attribute-picker-body .gd-mvf-attribute-picker-item .gd-ui-kit-icon {
8164
+ flex-shrink: 0;
8165
+ }
8166
+ .gd-mvf-attribute-picker-body .gd-mvf-attribute-picker-item .gd-ui-kit-listbox__item-title {
8167
+ flex: 1 1 auto;
8168
+ min-width: 0;
8169
+ overflow: hidden;
8170
+ text-overflow: ellipsis;
8171
+ }
8137
8172
  .gd-mvf-attribute-picker-body .gd-mvf-attribute-picker-header {
8138
8173
  display: flex;
8139
8174
  align-items: center;
@@ -8152,6 +8187,10 @@ div.gd-empty-item-bubble {
8152
8187
  font-size: 11px;
8153
8188
  font-weight: bold;
8154
8189
  }
8190
+ .gd-mvf-attribute-picker-body .gd-mvf-attribute-picker-loading-spinner {
8191
+ display: inline-flex;
8192
+ align-items: center;
8193
+ }
8155
8194
  .gd-mvf-attribute-picker-body .gd-mvf-attribute-picker-search-bar {
8156
8195
  display: flex;
8157
8196
  flex-shrink: 0;
@@ -8168,23 +8207,67 @@ div.gd-empty-item-bubble {
8168
8207
  .gd-mvf-attribute-picker-body .gd-mvf-attribute-picker-content {
8169
8208
  flex: 1 1 auto;
8170
8209
  }
8210
+ .gd-mvf-attribute-picker-body .gd-mvf-attribute-picker-loading-row {
8211
+ display: flex;
8212
+ align-items: center;
8213
+ justify-content: center;
8214
+ padding: 10px;
8215
+ }
8171
8216
  .gd-mvf-attribute-picker-body .gd-mvf-attribute-picker-list-header {
8172
8217
  text-transform: uppercase;
8173
8218
  color: var(--gd-palette-complementary-6, #94a1ad);
8174
8219
  font-size: 10px;
8220
+ padding: 10px 10px 0;
8221
+ line-height: 16px;
8222
+ }
8223
+ .gd-mvf-attribute-picker-body .gd-mvf-attribute-picker-divider {
8224
+ height: 10px;
8175
8225
  padding: 0 10px;
8176
8226
  }
8227
+ .gd-mvf-attribute-picker-body .gd-mvf-attribute-picker-divider::before {
8228
+ content: "";
8229
+ display: block;
8230
+ position: relative;
8231
+ top: 50%;
8232
+ border-top: 1px solid var(--gd-palette-complementary-3, #dde4eb);
8233
+ }
8177
8234
  .gd-mvf-attribute-picker-body .gd-mvf-attribute-picker-no-results {
8178
8235
  padding: 10px;
8179
8236
  color: var(--gd-palette-complementary-6, #94a1ad);
8180
8237
  text-align: center;
8181
8238
  }
8182
- .gd-mvf-attribute-picker-body .gd-mvf-attribute-picker-footer {
8183
- flex: 0 0 auto;
8184
- margin: 0 10px;
8185
- padding: 10px 0;
8186
- border-top: 1px solid var(--gd-palette-complementary-3, #dde4eb);
8187
- text-align: right;
8239
+ .gd-mvf-attribute-picker-body .gd-mvf-attribute-picker-date-dataset {
8240
+ padding: 5px 10px 10px;
8241
+ }
8242
+ .gd-mvf-attribute-picker-body .gd-mvf-attribute-picker-date-dataset-label {
8243
+ color: var(--gd-palette-complementary-6, #94a1ad);
8244
+ font-size: 12px;
8245
+ line-height: 20px;
8246
+ margin-bottom: 5px;
8247
+ }
8248
+ .gd-mvf-attribute-picker-body .gd-mvf-attribute-picker-date-dataset-control {
8249
+ position: relative;
8250
+ }
8251
+ .gd-mvf-attribute-picker-body .gd-mvf-attribute-picker-date-dataset-control .gd-ui-kit-button {
8252
+ width: 100%;
8253
+ justify-content: space-between;
8254
+ }
8255
+ .gd-mvf-attribute-picker-body .gd-mvf-attribute-picker-date-dataset-dropdown {
8256
+ position: absolute;
8257
+ left: 0;
8258
+ right: 0;
8259
+ top: calc(100% + 4px);
8260
+ background: var(--gd-palette-complementary-0, #fff);
8261
+ border: 1px solid var(--gd-palette-complementary-3, #dde4eb);
8262
+ border-radius: 3px;
8263
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
8264
+ z-index: 2;
8265
+ overflow: hidden;
8266
+ }
8267
+ .gd-mvf-attribute-picker-body .gd-ui-kit-listbox {
8268
+ padding: 0;
8269
+ min-width: 0;
8270
+ max-height: 200px;
8188
8271
  }
8189
8272
 
8190
8273
  .gd-mvf-preview {
@@ -8196,6 +8279,13 @@ div.gd-empty-item-bubble {
8196
8279
  padding-top: 10px;
8197
8280
  }
8198
8281
 
8282
+ .gd-mvf-backward-compatibility-message {
8283
+ margin-top: 10px;
8284
+ }
8285
+ .gd-mvf-backward-compatibility-message .gd-message-text {
8286
+ font-size: 12px;
8287
+ }
8288
+
8199
8289
  .gd-numeric-input {
8200
8290
  display: flex;
8201
8291
  }