@gooddata/sdk-ui-ext 11.43.0-alpha.1 → 11.43.0-alpha.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/NOTICE +4826 -13873
- package/esm/index.d.ts +4 -0
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +2 -0
- package/esm/internal/components/configurationControls/ConfigSection.d.ts +2 -1
- package/esm/internal/components/configurationControls/ConfigSection.d.ts.map +1 -1
- package/esm/internal/components/configurationControls/ConfigSection.js +7 -3
- package/esm/internal/components/configurationControls/colors/colorDropdown/ColorDropdown.d.ts +4 -0
- package/esm/internal/components/configurationControls/colors/colorDropdown/ColorDropdown.d.ts.map +1 -1
- package/esm/internal/components/configurationControls/colors/colorDropdown/ColorDropdown.js +13 -2
- package/esm/internal/components/configurationControls/colors/colorDropdown/ColorPalette.d.ts +5 -0
- package/esm/internal/components/configurationControls/colors/colorDropdown/ColorPalette.d.ts.map +1 -1
- package/esm/internal/components/configurationControls/colors/colorDropdown/ColorPalette.js +5 -3
- package/esm/internal/components/configurationControls/conditionalFormatting/ConditionalFormattingDialog.d.ts +13 -0
- package/esm/internal/components/configurationControls/conditionalFormatting/ConditionalFormattingDialog.d.ts.map +1 -0
- package/esm/internal/components/configurationControls/conditionalFormatting/ConditionalFormattingDialog.js +158 -0
- package/esm/internal/components/configurationControls/conditionalFormatting/ConditionalFormattingSection.d.ts +12 -0
- package/esm/internal/components/configurationControls/conditionalFormatting/ConditionalFormattingSection.d.ts.map +1 -0
- package/esm/internal/components/configurationControls/conditionalFormatting/ConditionalFormattingSection.js +54 -0
- package/esm/internal/components/configurationControls/conditionalFormatting/conditionalFormattingColors.d.ts +14 -0
- package/esm/internal/components/configurationControls/conditionalFormatting/conditionalFormattingColors.d.ts.map +1 -0
- package/esm/internal/components/configurationControls/conditionalFormatting/conditionalFormattingColors.js +32 -0
- package/esm/internal/components/configurationControls/conditionalFormatting/conditionalFormattingModel.d.ts +28 -0
- package/esm/internal/components/configurationControls/conditionalFormatting/conditionalFormattingModel.d.ts.map +1 -0
- package/esm/internal/components/configurationControls/conditionalFormatting/conditionalFormattingModel.js +149 -0
- package/esm/internal/components/configurationControls/customTooltip/CustomTooltipSection.d.ts.map +1 -1
- package/esm/internal/components/configurationControls/customTooltip/CustomTooltipSection.js +3 -2
- package/esm/internal/components/configurationPanels/ConfigurationPanelContent.d.ts +1 -0
- package/esm/internal/components/configurationPanels/ConfigurationPanelContent.d.ts.map +1 -1
- package/esm/internal/components/configurationPanels/PivotTableConfigurationPanel.d.ts +1 -0
- package/esm/internal/components/configurationPanels/PivotTableConfigurationPanel.d.ts.map +1 -1
- package/esm/internal/components/configurationPanels/PivotTableConfigurationPanel.js +9 -1
- package/esm/internal/components/dialogs/userManagementDialogs/AddWorkspaceToSubjects.d.ts +0 -1
- package/esm/internal/components/dialogs/userManagementDialogs/AddWorkspaceToSubjects.d.ts.map +1 -1
- package/esm/internal/components/dialogs/userManagementDialogs/AddWorkspaceToSubjects.js +3 -3
- package/esm/internal/components/dialogs/userManagementDialogs/UserEditDialog.d.ts +0 -1
- package/esm/internal/components/dialogs/userManagementDialogs/UserEditDialog.d.ts.map +1 -1
- package/esm/internal/components/dialogs/userManagementDialogs/UserEditDialog.js +2 -2
- package/esm/internal/components/dialogs/userManagementDialogs/UserGroupEditDialog.d.ts +0 -1
- package/esm/internal/components/dialogs/userManagementDialogs/UserGroupEditDialog.d.ts.map +1 -1
- package/esm/internal/components/dialogs/userManagementDialogs/UserGroupEditDialog.js +3 -3
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/AddWorkspace.d.ts +1 -2
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/AddWorkspace.d.ts.map +1 -1
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/AddWorkspace.js +2 -2
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/GranularPermissions.d.ts +1 -2
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/GranularPermissions.d.ts.map +1 -1
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/GranularPermissions.js +3 -3
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/PermissionsDropdown.d.ts +0 -1
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/PermissionsDropdown.d.ts.map +1 -1
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/PermissionsDropdown.js +3 -5
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/WorkspaceItem.d.ts +1 -2
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/WorkspaceItem.d.ts.map +1 -1
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceItem/WorkspaceItem.js +2 -2
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceList.d.ts +0 -1
- package/esm/internal/components/dialogs/userManagementDialogs/Workspace/WorkspaceList.d.ts.map +1 -1
- package/esm/internal/components/pluggableVisualizations/pivotTableNext/PluggablePivotTableNext.d.ts +3 -0
- package/esm/internal/components/pluggableVisualizations/pivotTableNext/PluggablePivotTableNext.d.ts.map +1 -1
- package/esm/internal/components/pluggableVisualizations/pivotTableNext/PluggablePivotTableNext.js +33 -5
- package/esm/internal/constants/supportedProperties.d.ts.map +1 -1
- package/esm/internal/constants/supportedProperties.js +1 -0
- package/esm/internal/translations/de-DE.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/de-DE.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/de-DE.localization-bundle.js +12 -1
- package/esm/internal/translations/en-AU.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/en-AU.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/en-AU.localization-bundle.js +12 -1
- package/esm/internal/translations/en-GB.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/en-GB.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/en-GB.localization-bundle.js +12 -1
- package/esm/internal/translations/en-US.localization-bundle.d.ts +212 -0
- package/esm/internal/translations/en-US.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/en-US.localization-bundle.js +212 -0
- package/esm/internal/translations/es-419.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/es-419.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/es-419.localization-bundle.js +12 -1
- package/esm/internal/translations/es-ES.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/es-ES.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/es-ES.localization-bundle.js +12 -1
- package/esm/internal/translations/fi-FI.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/fi-FI.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/fi-FI.localization-bundle.js +12 -1
- package/esm/internal/translations/fr-CA.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/fr-CA.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/fr-CA.localization-bundle.js +12 -1
- package/esm/internal/translations/fr-FR.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/fr-FR.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/fr-FR.localization-bundle.js +12 -1
- package/esm/internal/translations/id-ID.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/id-ID.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/id-ID.localization-bundle.js +12 -1
- package/esm/internal/translations/it-IT.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/it-IT.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/it-IT.localization-bundle.js +12 -1
- package/esm/internal/translations/ja-JP.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/ja-JP.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/ja-JP.localization-bundle.js +12 -1
- package/esm/internal/translations/ko-KR.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/ko-KR.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/ko-KR.localization-bundle.js +12 -1
- package/esm/internal/translations/nl-NL.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/nl-NL.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/nl-NL.localization-bundle.js +12 -1
- package/esm/internal/translations/pl-PL.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/pl-PL.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/pl-PL.localization-bundle.js +12 -1
- package/esm/internal/translations/pt-BR.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/pt-BR.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/pt-BR.localization-bundle.js +12 -1
- package/esm/internal/translations/pt-PT.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/pt-PT.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/pt-PT.localization-bundle.js +12 -1
- package/esm/internal/translations/ru-RU.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/ru-RU.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/ru-RU.localization-bundle.js +12 -1
- package/esm/internal/translations/sl-SI.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/sl-SI.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/sl-SI.localization-bundle.js +12 -1
- package/esm/internal/translations/th-TH.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/th-TH.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/th-TH.localization-bundle.js +12 -1
- package/esm/internal/translations/tr-TR.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/tr-TR.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/tr-TR.localization-bundle.js +12 -1
- package/esm/internal/translations/uk-UA.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/uk-UA.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/uk-UA.localization-bundle.js +12 -1
- package/esm/internal/translations/vi-VN.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/vi-VN.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/vi-VN.localization-bundle.js +12 -1
- package/esm/internal/translations/zh-HK.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/zh-HK.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/zh-HK.localization-bundle.js +12 -1
- package/esm/internal/translations/zh-Hans.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/zh-Hans.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/zh-Hans.localization-bundle.js +12 -1
- package/esm/internal/translations/zh-Hant.localization-bundle.d.ts +11 -0
- package/esm/internal/translations/zh-Hant.localization-bundle.d.ts.map +1 -1
- package/esm/internal/translations/zh-Hant.localization-bundle.js +12 -1
- package/esm/internal/utils/propertiesHelper.d.ts +2 -1
- package/esm/internal/utils/propertiesHelper.d.ts.map +1 -1
- package/esm/internal/utils/propertiesHelper.js +3 -0
- package/esm/locales.d.ts +79 -0
- package/esm/locales.d.ts.map +1 -1
- package/esm/locales.js +46 -0
- package/esm/sdk-ui-ext.d.ts +274 -3
- package/esm/share/ObjectShareDialog.d.ts +67 -0
- package/esm/share/ObjectShareDialog.d.ts.map +1 -0
- package/esm/share/ObjectShareDialog.js +102 -0
- package/esm/share/accessSummary.d.ts +20 -0
- package/esm/share/accessSummary.d.ts.map +1 -0
- package/esm/share/accessSummary.js +26 -0
- package/esm/share/messages.d.ts +44 -0
- package/esm/share/messages.d.ts.map +1 -0
- package/esm/share/messages.js +23 -0
- package/esm/share/objectShareController.helpers.d.ts +80 -0
- package/esm/share/objectShareController.helpers.d.ts.map +1 -0
- package/esm/share/objectShareController.helpers.js +152 -0
- package/esm/share/objectShareController.types.d.ts +110 -0
- package/esm/share/objectShareController.types.d.ts.map +1 -0
- package/esm/share/objectShareController.types.js +2 -0
- package/esm/share/types.d.ts +47 -0
- package/esm/share/types.d.ts.map +1 -0
- package/esm/share/types.js +2 -0
- package/esm/share/useAccessList.d.ts +51 -0
- package/esm/share/useAccessList.d.ts.map +1 -0
- package/esm/share/useAccessList.js +263 -0
- package/esm/share/useLabelScope.d.ts +54 -0
- package/esm/share/useLabelScope.d.ts.map +1 -0
- package/esm/share/useLabelScope.js +160 -0
- package/esm/share/useObjectShare.d.ts +50 -0
- package/esm/share/useObjectShare.d.ts.map +1 -0
- package/esm/share/useObjectShare.js +17 -0
- package/esm/share/useObjectShareController.d.ts +24 -0
- package/esm/share/useObjectShareController.d.ts.map +1 -0
- package/esm/share/useObjectShareController.js +347 -0
- package/package.json +21 -21
- package/styles/css/main.css +238 -0
- package/styles/css/main.css.map +1 -1
- package/styles/internal/css/conditional_formatting.css +239 -0
- package/styles/internal/css/conditional_formatting.css.map +1 -0
- package/styles/internal/css/config_panel.css +5 -0
- package/styles/internal/css/config_panel.css.map +1 -1
- package/styles/internal/scss/conditional_formatting.scss +269 -0
- package/styles/internal/scss/config_panel.scss +11 -0
- package/styles/scss/main.scss +1 -0
package/esm/index.d.ts
CHANGED
|
@@ -75,4 +75,8 @@ export type { INotificationsPanelView } from "./notificationsPanel/types.js";
|
|
|
75
75
|
*/
|
|
76
76
|
export declare function provideCreateRoot(_fn: any): void;
|
|
77
77
|
export { useInsightPagedList, type IUsePagedDropdownConfig, type IUsePagedDropdownResult, type ITabsIds, type InsightListSortBy, type InsightListSortDirection, } from "./internal/components/insightList/useInsightPagedList.js";
|
|
78
|
+
export { ObjectShareDialog, type IObjectShareDialogProps } from "./share/ObjectShareDialog.js";
|
|
79
|
+
export { useObjectShare, type IUseObjectShareOptions } from "./share/useObjectShare.js";
|
|
80
|
+
export type { IObjectAccessSummary, IObjectShareLabel } from "./share/types.js";
|
|
81
|
+
export type { IObjectShareController, IObjectShareControllerActions, IObjectShareControllerState, IObjectShareGrantee, ObjectSharePermissionLevel, } from "./share/objectShareController.types.js";
|
|
78
82
|
//# sourceMappingURL=index.d.ts.map
|
package/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/esm/index.js
CHANGED
|
@@ -69,3 +69,5 @@ export function provideCreateRoot(_fn) {
|
|
|
69
69
|
// no-op, kept for backward compatibility
|
|
70
70
|
}
|
|
71
71
|
export { useInsightPagedList, } from "./internal/components/insightList/useInsightPagedList.js";
|
|
72
|
+
export { ObjectShareDialog } from "./share/ObjectShareDialog.js";
|
|
73
|
+
export { useObjectShare } from "./share/useObjectShare.js";
|
|
@@ -14,6 +14,7 @@ export interface IConfigSectionProps {
|
|
|
14
14
|
pushData?(data: any): void;
|
|
15
15
|
children?: ReactNode;
|
|
16
16
|
toggleMessageId?: string;
|
|
17
|
+
onToggle?(checked: boolean): void;
|
|
17
18
|
}
|
|
18
|
-
export declare function ConfigSection({ id, valuePath, canBeToggled, toggleDisabled, toggledOn, propertiesMeta, properties, title, subtitle, showDisabledMessage, className, pushData, children, toggleMessageId }: IConfigSectionProps): import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
export declare function ConfigSection({ id, valuePath, canBeToggled, toggleDisabled, toggledOn, propertiesMeta, properties, title, subtitle, showDisabledMessage, className, pushData, children, toggleMessageId, onToggle }: IConfigSectionProps): import("react/jsx-runtime").JSX.Element;
|
|
19
20
|
//# sourceMappingURL=ConfigSection.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigSection.d.ts","sourceRoot":"","sources":["../../../../src/internal/components/configurationControls/ConfigSection.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAoB,KAAK,SAAS,EAA6C,MAAM,OAAO,CAAC;AASpG,MAAM,WAAW,mBAAmB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,GAAG,CAAC;IACrB,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"ConfigSection.d.ts","sourceRoot":"","sources":["../../../../src/internal/components/configurationControls/ConfigSection.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAoB,KAAK,SAAS,EAA6C,MAAM,OAAO,CAAC;AASpG,MAAM,WAAW,mBAAmB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,GAAG,CAAC;IACrB,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,QAAQ,CAAC,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CACrC;AAED,wBAAgB,aAAa,CAAC,EAC1B,EAAE,EACF,SAAS,EACT,YAAoB,EACpB,cAAsB,EACtB,SAAgB,EAChB,cAAc,EACd,UAAe,EACf,KAAK,EACL,QAAQ,EACR,mBAA2B,EAC3B,SAAc,EACd,QAAmB,EACnB,QAAQ,EACR,eAAe,EACf,QAAQ,EACX,EAAE,mBAAmB,2CA2GrB"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
// (C) 2019-
|
|
2
|
+
// (C) 2019-2026 GoodData Corporation
|
|
3
3
|
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
4
4
|
import cx from "classnames";
|
|
5
5
|
import { cloneDeep, set } from "lodash-es";
|
|
6
6
|
import { useIntl } from "react-intl";
|
|
7
7
|
import { getTranslation } from "../../utils/translations.js";
|
|
8
8
|
import { DisabledBubbleMessage } from "../DisabledBubbleMessage.js";
|
|
9
|
-
export function ConfigSection({ id, valuePath, canBeToggled = false, toggleDisabled = false, toggledOn = true, propertiesMeta, properties = {}, title, subtitle, showDisabledMessage = false, className = "", pushData = () => { }, children, toggleMessageId, }) {
|
|
9
|
+
export function ConfigSection({ id, valuePath, canBeToggled = false, toggleDisabled = false, toggledOn = true, propertiesMeta, properties = {}, title, subtitle, showDisabledMessage = false, className = "", pushData = () => { }, children, toggleMessageId, onToggle, }) {
|
|
10
10
|
const intl = useIntl();
|
|
11
11
|
const [collapsed, setCollapsed] = useState(() => propertiesMeta?.[id]?.collapsed ?? true);
|
|
12
12
|
useEffect(() => {
|
|
@@ -23,12 +23,16 @@ export function ConfigSection({ id, valuePath, canBeToggled = false, toggleDisab
|
|
|
23
23
|
pushData({ propertiesMeta: propertiesMetaUpdate });
|
|
24
24
|
}, [id, collapsed, pushData]);
|
|
25
25
|
const toggleValue = useCallback((event) => {
|
|
26
|
+
if (onToggle) {
|
|
27
|
+
onToggle(event.target.checked);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
26
30
|
if (valuePath && properties && pushData) {
|
|
27
31
|
const clonedProperties = cloneDeep(properties);
|
|
28
32
|
set(clonedProperties, `controls.${valuePath}`, event.target.checked);
|
|
29
33
|
pushData({ properties: clonedProperties });
|
|
30
34
|
}
|
|
31
|
-
}, [valuePath, properties, pushData]);
|
|
35
|
+
}, [onToggle, valuePath, properties, pushData]);
|
|
32
36
|
const getToggleLabelClassNames = useMemo(() => cx("input-checkbox-toggle", "s-checkbox-toggle-label"), []);
|
|
33
37
|
const renderToggleSwitch = useCallback(() => {
|
|
34
38
|
if (canBeToggled) {
|
package/esm/internal/components/configurationControls/colors/colorDropdown/ColorDropdown.d.ts
CHANGED
|
@@ -18,6 +18,10 @@ export interface IColorDropdownOwnProps {
|
|
|
18
18
|
children?: ReactNode;
|
|
19
19
|
chartFill?: IChartFillConfig;
|
|
20
20
|
patternFillIndex?: number | PatternFillName;
|
|
21
|
+
/** When provided, the palette shows a "no color" swatch that calls this to clear the selection. */
|
|
22
|
+
onClear?: () => void;
|
|
23
|
+
/** Accessibility label for the "no color" swatch (localized by the caller); required when onClear is set. */
|
|
24
|
+
noneColorAriaLabel?: string;
|
|
21
25
|
}
|
|
22
26
|
export type IColorDropdownProps = IColorDropdownOwnProps;
|
|
23
27
|
export declare const ColorDropdown: import("react").NamedExoticComponent<IColorDropdownOwnProps>;
|
package/esm/internal/components/configurationControls/colors/colorDropdown/ColorDropdown.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColorDropdown.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/components/configurationControls/colors/colorDropdown/ColorDropdown.tsx"],"names":[],"mappings":"AAEA,OAAO,EAGH,KAAK,SAAS,EAKjB,MAAM,OAAO,CAAC;AAIf,OAAO,EACH,KAAK,MAAM,EACX,KAAK,aAAa,EAKrB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAM3F,oBAAY,YAAY;IACpB,IAAI,IAAA;IACJ,KAAK,IAAA;CACR;AAED,MAAM,WAAW,gBAAgB;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACnC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,aAAa,CAAC;IAC5B,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC;CAC/
|
|
1
|
+
{"version":3,"file":"ColorDropdown.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/components/configurationControls/colors/colorDropdown/ColorDropdown.tsx"],"names":[],"mappings":"AAEA,OAAO,EAGH,KAAK,SAAS,EAKjB,MAAM,OAAO,CAAC;AAIf,OAAO,EACH,KAAK,MAAM,EACX,KAAK,aAAa,EAKrB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAM3F,oBAAY,YAAY;IACpB,IAAI,IAAA;IACJ,KAAK,IAAA;CACR;AAED,MAAM,WAAW,gBAAgB;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACnC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,aAAa,CAAC;IAC5B,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC;IAC5C,mGAAmG;IACnG,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,6GAA6G;IAC7G,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,MAAM,mBAAmB,GAAG,sBAAsB,CAAC;AAQzD,eAAO,MAAM,aAAa,8DAkLxB,CAAC"}
|
|
@@ -18,7 +18,7 @@ const COLOR_FOR_UNKNOWN_ITEM = {
|
|
|
18
18
|
g: 0,
|
|
19
19
|
b: 0,
|
|
20
20
|
};
|
|
21
|
-
export const ColorDropdown = memo(function ColorDropdown({ selectedColorItem, colorPalette, onColorSelected: onColorSelectedProp, disabled, children, chartFill, patternFillIndex, }) {
|
|
21
|
+
export const ColorDropdown = memo(function ColorDropdown({ selectedColorItem, colorPalette, onColorSelected: onColorSelectedProp, disabled, children, chartFill, patternFillIndex, onClear, noneColorAriaLabel, }) {
|
|
22
22
|
const [id] = useState(() => uuidv4());
|
|
23
23
|
const [isDropdownOpen, setIsDropdownOpen] = useState(false);
|
|
24
24
|
const [dropdownVersion, setDropdownVersion] = useState(DropdownVersionType.ColorPalette);
|
|
@@ -62,6 +62,13 @@ export const ColorDropdown = memo(function ColorDropdown({ selectedColorItem, co
|
|
|
62
62
|
onColorSelectedProp(color);
|
|
63
63
|
}, 100);
|
|
64
64
|
}, [onColorSelectedProp]);
|
|
65
|
+
const onNoneSelected = useCallback(() => {
|
|
66
|
+
setIsDropdownOpen(false);
|
|
67
|
+
setDropdownVersion(DropdownVersionType.ColorPalette);
|
|
68
|
+
setTimeout(() => {
|
|
69
|
+
onClear?.();
|
|
70
|
+
}, 100);
|
|
71
|
+
}, [onClear]);
|
|
65
72
|
const onColorPickerSubmit = useCallback((color) => {
|
|
66
73
|
const item = {
|
|
67
74
|
type: "rgb",
|
|
@@ -94,7 +101,7 @@ export const ColorDropdown = memo(function ColorDropdown({ selectedColorItem, co
|
|
|
94
101
|
}, [isDropdownOpen, getIconPosition, disabled, children]);
|
|
95
102
|
const renderColorPaletteContent = useCallback(() => {
|
|
96
103
|
return (_jsxs("div", { className: "gd-color-drop-down", children: [
|
|
97
|
-
_jsx(ColorPalette, { selectedColorGuid: getSelectedGuidFromColorItem(), colorPalette: colorPalette, onColorSelected: onColorSelected, chartFill: chartFill, patternFillIndex: patternFillIndex }), _jsx(CustomColorButton, { onClick: onCustomColorButtonClick })
|
|
104
|
+
_jsx(ColorPalette, { selectedColorGuid: getSelectedGuidFromColorItem(), colorPalette: colorPalette, onColorSelected: onColorSelected, chartFill: chartFill, patternFillIndex: patternFillIndex, showNoneColor: !!onClear, isNoneSelected: !selectedColorItem, onNoneSelected: onNoneSelected, noneColorAriaLabel: noneColorAriaLabel }), _jsx(CustomColorButton, { onClick: onCustomColorButtonClick })
|
|
98
105
|
] }));
|
|
99
106
|
}, [
|
|
100
107
|
getSelectedGuidFromColorItem,
|
|
@@ -103,6 +110,10 @@ export const ColorDropdown = memo(function ColorDropdown({ selectedColorItem, co
|
|
|
103
110
|
onCustomColorButtonClick,
|
|
104
111
|
chartFill,
|
|
105
112
|
patternFillIndex,
|
|
113
|
+
onClear,
|
|
114
|
+
selectedColorItem,
|
|
115
|
+
onNoneSelected,
|
|
116
|
+
noneColorAriaLabel,
|
|
106
117
|
]);
|
|
107
118
|
const renderColorPickerContent = useCallback(() => {
|
|
108
119
|
return (_jsx(ColorPicker, { initialRgbColor: getSelectedColorFromPalette(), onSubmit: onColorPickerSubmit, onCancel: onColorPickerCancel }));
|
package/esm/internal/components/configurationControls/colors/colorDropdown/ColorPalette.d.ts
CHANGED
|
@@ -6,6 +6,11 @@ export interface IColorPaletteProps {
|
|
|
6
6
|
onColorSelected: (color: IColor) => void;
|
|
7
7
|
chartFill?: IChartFillConfig;
|
|
8
8
|
patternFillIndex?: number | PatternFillName;
|
|
9
|
+
showNoneColor?: boolean;
|
|
10
|
+
isNoneSelected?: boolean;
|
|
11
|
+
onNoneSelected?: () => void;
|
|
12
|
+
/** Accessibility label for the "no color" swatch; supplied (localized) by the caller that opts in. */
|
|
13
|
+
noneColorAriaLabel?: string;
|
|
9
14
|
}
|
|
10
15
|
export declare const ColorPalette: import("react").NamedExoticComponent<IColorPaletteProps>;
|
|
11
16
|
//# sourceMappingURL=ColorPalette.d.ts.map
|
package/esm/internal/components/configurationControls/colors/colorDropdown/ColorPalette.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColorPalette.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/components/configurationControls/colors/colorDropdown/ColorPalette.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,aAAa,EAA0B,MAAM,qBAAqB,CAAC;AAC9F,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAM3F,MAAM,WAAW,kBAAkB;IAC/B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,YAAY,EAAE,aAAa,CAAC;IAC5B,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC;CAC/
|
|
1
|
+
{"version":3,"file":"ColorPalette.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/components/configurationControls/colors/colorDropdown/ColorPalette.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,aAAa,EAA0B,MAAM,qBAAqB,CAAC;AAC9F,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAM3F,MAAM,WAAW,kBAAkB;IAC/B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,YAAY,EAAE,aAAa,CAAC;IAC5B,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC;IAC5C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,sGAAsG;IACtG,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,eAAO,MAAM,YAAY,0DA2DvB,CAAC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
// (C) 2019-2026 GoodData Corporation
|
|
3
3
|
import { memo } from "react";
|
|
4
4
|
import cx from "classnames";
|
|
5
5
|
import { ColorPaletteItem } from "./ColorPaletteItem.js";
|
|
6
6
|
const MAX_SMALL_PALETTE_SIZE = 20;
|
|
7
|
-
export const ColorPalette = memo(function ColorPalette({ selectedColorGuid, colorPalette, onColorSelected, chartFill, patternFillIndex, }) {
|
|
7
|
+
export const ColorPalette = memo(function ColorPalette({ selectedColorGuid, colorPalette, onColorSelected, chartFill, patternFillIndex, showNoneColor = false, isNoneSelected = false, onNoneSelected, noneColorAriaLabel, }) {
|
|
8
8
|
const isColorPaletteLarge = () => {
|
|
9
9
|
return colorPalette.length > MAX_SMALL_PALETTE_SIZE;
|
|
10
10
|
};
|
|
@@ -23,5 +23,7 @@ export const ColorPalette = memo(function ColorPalette({ selectedColorGuid, colo
|
|
|
23
23
|
return (_jsx(ColorPaletteItem, { selected: isItemSelected(item.guid), paletteItem: item, onColorSelected: onColorSelected, chartFill: chartFill?.type, patternFillIndex: patternFillIndex }, item.guid));
|
|
24
24
|
});
|
|
25
25
|
};
|
|
26
|
-
return (
|
|
26
|
+
return (_jsxs("div", { "aria-label": "Color palette", className: getClassNames(), children: [showNoneColor ? (_jsx("div", { "aria-label": noneColorAriaLabel, onClick: onNoneSelected, className: cx("gd-color-list-item", "gd-color-list-item-none", "s-color-list-item-none", {
|
|
27
|
+
"gd-color-list-item-active": isNoneSelected,
|
|
28
|
+
}) })) : null, renderItems()] }));
|
|
27
29
|
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type IConditionalFormattingRule } from "@gooddata/sdk-ui-pivot/next";
|
|
2
|
+
import { type ITargetOption } from "./conditionalFormattingModel.js";
|
|
3
|
+
export interface IConditionalFormattingDialogProps {
|
|
4
|
+
rule: IConditionalFormattingRule;
|
|
5
|
+
isNew: boolean;
|
|
6
|
+
targetOptions: ITargetOption[];
|
|
7
|
+
/** CSS selector of a small, stable element the popover anchors to. */
|
|
8
|
+
alignTo: string;
|
|
9
|
+
onSave: (rule: IConditionalFormattingRule) => void;
|
|
10
|
+
onClose: () => void;
|
|
11
|
+
}
|
|
12
|
+
export declare function ConditionalFormattingDialog({ rule: initialRule, isNew, targetOptions, alignTo, onSave, onClose }: IConditionalFormattingDialogProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
//# sourceMappingURL=ConditionalFormattingDialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConditionalFormattingDialog.d.ts","sourceRoot":"","sources":["../../../../../src/internal/components/configurationControls/conditionalFormatting/ConditionalFormattingDialog.tsx"],"names":[],"mappings":"AAsBA,OAAO,EAMH,KAAK,0BAA0B,EAClC,MAAM,6BAA6B,CAAC;AAMrC,OAAO,EACH,KAAK,aAAa,EAQrB,MAAM,iCAAiC,CAAC;AA0UzC,MAAM,WAAW,iCAAiC;IAC9C,IAAI,EAAE,0BAA0B,CAAC;IACjC,KAAK,EAAE,OAAO,CAAC;IACf,aAAa,EAAE,aAAa,EAAE,CAAC;IAC/B,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,CAAC,IAAI,EAAE,0BAA0B,KAAK,IAAI,CAAC;IACnD,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,wBAAgB,2BAA2B,CAAC,EACxC,IAAI,EAAE,WAAW,EACjB,KAAK,EACL,aAAa,EACb,OAAO,EACP,MAAM,EACN,OAAO,EACV,EAAE,iCAAiC,2CA0GnC"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// (C) 2026 GoodData Corporation
|
|
3
|
+
import { useId, useState } from "react";
|
|
4
|
+
import cx from "classnames";
|
|
5
|
+
import { useIntl } from "react-intl";
|
|
6
|
+
import { Button, Dropdown, DropdownButton, Input, Overlay, SingleSelectListItem, UiButton, UiButtonSegmentedControl, UiListbox, } from "@gooddata/sdk-ui-kit";
|
|
7
|
+
import { conditionalFormattingMessages, conditionalFormattingOperatorMessages } from "../../../../locales.js";
|
|
8
|
+
import { ColorDropdown } from "../colors/colorDropdown/ColorDropdown.js";
|
|
9
|
+
import { CF_COLOR_PALETTE, colorToHex, hexToColor } from "./conditionalFormattingColors.js";
|
|
10
|
+
import { findTargetOption, isRuleComplete, newCondition, operatorArity, operatorIcon, operatorsForKind, targetIcon, } from "./conditionalFormattingModel.js";
|
|
11
|
+
// One listbox option; the iconRenderer sizes the type (attribute/metric) and wide operator glyphs.
|
|
12
|
+
function CfListItem({ item, isSelected, isFocused, onSelect, }) {
|
|
13
|
+
const { title, icon } = item.data;
|
|
14
|
+
return (_jsx(SingleSelectListItem, { title: title, icon: icon, iconRenderer: (ic) => {
|
|
15
|
+
if (typeof ic !== "string" || !ic) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
const isTypeIcon = ic === "gd-icon-attribute" || ic === "gd-icon-metric";
|
|
19
|
+
return (_jsx("span", { "aria-hidden": "true", className: cx("gd-list-icon", ic, { "gd-cf-type-icon": isTypeIcon }) }));
|
|
20
|
+
}, isSelected: isSelected, isFocused: isFocused, onClick: onSelect }));
|
|
21
|
+
}
|
|
22
|
+
function CfSelect({ value, items, onSelect, placeholder, width = 200 }) {
|
|
23
|
+
const listboxId = useId();
|
|
24
|
+
const selected = items.find((item) => item.value === value);
|
|
25
|
+
const listItems = items.map((item) => ({
|
|
26
|
+
type: "interactive",
|
|
27
|
+
id: item.value,
|
|
28
|
+
stringTitle: item.title,
|
|
29
|
+
data: { title: item.title, icon: item.icon },
|
|
30
|
+
}));
|
|
31
|
+
return (_jsx(Dropdown, { closeOnParentScroll: true, closeOnMouseDrag: true, renderButton: ({ isOpen, toggleDropdown }) => (_jsx(DropdownButton, { value: selected?.title ?? placeholder ?? "", iconLeft: selected?.icon, isOpen: isOpen, onClick: toggleDropdown })), renderBody: ({ closeDropdown }) => (_jsx(UiListbox, { items: listItems, width: width, maxHeight: 300, selectedItemId: value, ariaAttributes: { id: listboxId }, InteractiveItemComponent: CfListItem, onClose: closeDropdown, onSelect: (listItem) => {
|
|
32
|
+
const original = items.find((candidate) => candidate.value === listItem.id);
|
|
33
|
+
if (original) {
|
|
34
|
+
onSelect(original.value);
|
|
35
|
+
}
|
|
36
|
+
closeDropdown();
|
|
37
|
+
} })) }));
|
|
38
|
+
}
|
|
39
|
+
const valueForOperator = (operator, previous) => {
|
|
40
|
+
switch (operatorArity(operator)) {
|
|
41
|
+
case "none":
|
|
42
|
+
return { kind: "none" };
|
|
43
|
+
case "range":
|
|
44
|
+
// NaN = a bound not yet entered (rendered blank by rangeText). isRuleComplete blocks Save
|
|
45
|
+
// until both bounds are finite, so NaN stays dialog-local and never persists (it would
|
|
46
|
+
// JSON-serialize to null); the contract type can stay a tight `{ from: number; to: number }`.
|
|
47
|
+
return previous.kind === "literalRange" ? previous : { kind: "literalRange", from: NaN, to: NaN };
|
|
48
|
+
case "single":
|
|
49
|
+
return previous.kind === "literal" ? previous : { kind: "literal", value: "" };
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
const literalText = (value) => value.kind === "literal" ? String(value.value) : "";
|
|
53
|
+
const rangeText = (value, bound) => {
|
|
54
|
+
if (value.kind !== "literalRange") {
|
|
55
|
+
return "";
|
|
56
|
+
}
|
|
57
|
+
const n = value[bound];
|
|
58
|
+
return Number.isFinite(n) ? String(n) : "";
|
|
59
|
+
};
|
|
60
|
+
// The ColorDropdown trigger swatch. ColorDropdown clones it with selectable-child props the swatch
|
|
61
|
+
// ignores. No color renders a "none" slash rather than a misleading white.
|
|
62
|
+
function CfSwatch({ hex }) {
|
|
63
|
+
return (_jsx("span", { className: `gd-cf-swatch${hex ? "" : " gd-cf-swatch--none"}`, style: hex ? { backgroundColor: hex } : undefined }));
|
|
64
|
+
}
|
|
65
|
+
function CfColorPick({ hex, noneColorLabel, onChange }) {
|
|
66
|
+
return (_jsx(ColorDropdown, { colorPalette: CF_COLOR_PALETTE, selectedColorItem: hexToColor(hex), onColorSelected: (color) => onChange(colorToHex(color)), onClear: () => onChange(undefined), noneColorAriaLabel: noneColorLabel, children: _jsx(CfSwatch, { hex: hex }) }));
|
|
67
|
+
}
|
|
68
|
+
const PREVIEW_SAMPLE = {
|
|
69
|
+
measure: "1,234.56",
|
|
70
|
+
attribute: "Abc",
|
|
71
|
+
};
|
|
72
|
+
// Row scope shows two sample cells to convey that the whole row is formatted.
|
|
73
|
+
const ROW_PREVIEW_SAMPLE = ["Abc", "123"];
|
|
74
|
+
function FormatEditor({ format, intl, onChange }) {
|
|
75
|
+
return (_jsx(Dropdown, { closeOnParentScroll: true, closeOnMouseDrag: true, renderButton: ({ toggleDropdown }) => (_jsx(Button, { className: "gd-button-link gd-button-icon-only gd-icon-pencil gd-cf-condition__edit", accessibilityConfig: {
|
|
76
|
+
ariaLabel: intl.formatMessage(conditionalFormattingMessages.dialogFormat),
|
|
77
|
+
}, onClick: toggleDropdown })), renderBody: () => (_jsxs("div", { className: "gd-cf-format", children: [
|
|
78
|
+
_jsx("span", { className: "gd-cf-format__label", children: intl.formatMessage(conditionalFormattingMessages.dialogTextColor) }), _jsx(CfColorPick, { hex: format.color, noneColorLabel: intl.formatMessage(conditionalFormattingMessages.dialogNoColor), onChange: (color) => onChange({ ...format, color }) }), _jsx("span", { className: "gd-cf-format__label", children: intl.formatMessage(conditionalFormattingMessages.dialogFillColor) }), _jsx(CfColorPick, { hex: format.backgroundColor, noneColorLabel: intl.formatMessage(conditionalFormattingMessages.dialogNoColor), onChange: (backgroundColor) => onChange({ ...format, backgroundColor }) }), _jsxs(UiButtonSegmentedControl, { children: [
|
|
79
|
+
_jsx(UiButton, { size: "small", variant: "secondary", label: intl.formatMessage(conditionalFormattingMessages.dialogScopeCell), isSelected: format.scope === "cell", onClick: () => onChange({ ...format, scope: "cell" }) }), _jsx(UiButton, { size: "small", variant: "secondary", label: intl.formatMessage(conditionalFormattingMessages.dialogScopeRow), isSelected: format.scope === "row", onClick: () => onChange({ ...format, scope: "row" }) })
|
|
80
|
+
] })
|
|
81
|
+
] })) }));
|
|
82
|
+
}
|
|
83
|
+
function ConditionEditor({ condition, kind, removable, intl, onChange, onRemove }) {
|
|
84
|
+
const operatorItems = operatorsForKind(kind).map((operator) => ({
|
|
85
|
+
value: operator,
|
|
86
|
+
title: intl.formatMessage(conditionalFormattingOperatorMessages[operator]),
|
|
87
|
+
icon: operatorIcon(operator),
|
|
88
|
+
}));
|
|
89
|
+
const arity = operatorArity(condition.operator);
|
|
90
|
+
const setValue = (value) => onChange({ ...condition, value });
|
|
91
|
+
const setFormat = (format) => onChange({ ...condition, format });
|
|
92
|
+
const parseBound = (v) => (v === "" ? NaN : Number(v));
|
|
93
|
+
const range = condition.value.kind === "literalRange" ? condition.value : { from: NaN, to: NaN };
|
|
94
|
+
const setRange = (from, to) => setValue({ kind: "literalRange", from, to });
|
|
95
|
+
const previewStyle = {
|
|
96
|
+
...(condition.format.color ? { color: condition.format.color } : {}),
|
|
97
|
+
...(condition.format.backgroundColor ? { backgroundColor: condition.format.backgroundColor } : {}),
|
|
98
|
+
};
|
|
99
|
+
return (_jsxs("div", { className: "gd-cf-condition", children: [
|
|
100
|
+
_jsxs("div", { className: "gd-cf-condition__header", children: [
|
|
101
|
+
_jsx("span", { className: "gd-cf-condition__title", children: intl.formatMessage(conditionalFormattingMessages.dialogCondition) }), removable ? (_jsx(Button, { className: "gd-button-link gd-button-icon-only gd-icon-cross", accessibilityConfig: {
|
|
102
|
+
ariaLabel: intl.formatMessage(conditionalFormattingMessages.dialogRemoveCondition),
|
|
103
|
+
}, onClick: onRemove })) : null] }), _jsx(CfSelect, { value: condition.operator, items: operatorItems, onSelect: (operator) => onChange({ ...condition, operator, value: valueForOperator(operator, condition.value) }) }), arity === "single" ? (_jsx(Input, { type: kind === "measure" ? "number" : "text", value: literalText(condition.value), placeholder: intl.formatMessage(conditionalFormattingMessages.dialogValuePlaceholder), onChange: (v) => setValue({ kind: "literal", value: String(v) }) })) : null, arity === "range" ? (_jsxs("div", { className: "gd-cf-condition__range", children: [
|
|
104
|
+
_jsx(Input, { type: "number", value: rangeText(condition.value, "from"), placeholder: intl.formatMessage(conditionalFormattingMessages.dialogFromPlaceholder), onChange: (v) => setRange(parseBound(v), range.to) }), _jsx(Input, { type: "number", value: rangeText(condition.value, "to"), placeholder: intl.formatMessage(conditionalFormattingMessages.dialogToPlaceholder), onChange: (v) => setRange(range.from, parseBound(v)) })
|
|
105
|
+
] })) : null, _jsxs("div", { className: "gd-cf-condition__format-row", children: [
|
|
106
|
+
_jsx("span", { className: "gd-cf-dialog__label", children: intl.formatMessage(conditionalFormattingMessages.dialogFormat) }), _jsx("div", { className: "gd-cf-preview", children: condition.format.scope === "row" ? (ROW_PREVIEW_SAMPLE.map((sample, index) => (_jsx("span", { className: "gd-cf-preview__cell", style: previewStyle, children: sample }, index)))) : (_jsx("span", { className: "gd-cf-preview__cell", style: previewStyle, children: PREVIEW_SAMPLE[kind] })) }), _jsx(FormatEditor, { format: condition.format, intl: intl, onChange: setFormat })
|
|
107
|
+
] })
|
|
108
|
+
] }));
|
|
109
|
+
}
|
|
110
|
+
// The config panel sits on the right edge of the screen, so open the popover to the LEFT of the
|
|
111
|
+
// anchor (self's right edge to the anchor's left edge); fall back to the right when there's no room.
|
|
112
|
+
const POPOVER_ALIGN_POINTS = [
|
|
113
|
+
{ align: "cl cr", offset: { x: -5, y: 0 } },
|
|
114
|
+
{ align: "cr cl", offset: { x: 5, y: 0 } },
|
|
115
|
+
];
|
|
116
|
+
export function ConditionalFormattingDialog({ rule: initialRule, isNew, targetOptions, alignTo, onSave, onClose, }) {
|
|
117
|
+
const intl = useIntl();
|
|
118
|
+
const [rule, setRule] = useState(initialRule);
|
|
119
|
+
const updateCondition = (id, next) => setRule((current) => ({
|
|
120
|
+
...current,
|
|
121
|
+
conditions: current.conditions.map((condition) => (condition.id === id ? next : condition)),
|
|
122
|
+
}));
|
|
123
|
+
const removeCondition = (id) => setRule((current) => ({
|
|
124
|
+
...current,
|
|
125
|
+
conditions: current.conditions.filter((condition) => condition.id !== id),
|
|
126
|
+
}));
|
|
127
|
+
const addCondition = () => setRule((current) => ({ ...current, conditions: [...current.conditions, newCondition()] }));
|
|
128
|
+
const changeTarget = (value) => {
|
|
129
|
+
const option = targetOptions.find((candidate) => candidate.value === value);
|
|
130
|
+
if (!option) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
setRule((current) =>
|
|
134
|
+
// Switching target kind (measure <-> attribute) invalidates the operators, so reset the
|
|
135
|
+
// conditions; same-kind switches keep the existing conditions.
|
|
136
|
+
option.target.kind === current.target.kind
|
|
137
|
+
? { ...current, target: option.target }
|
|
138
|
+
: { ...current, target: option.target, conditions: [newCondition()] });
|
|
139
|
+
};
|
|
140
|
+
const selectedTarget = findTargetOption(targetOptions, rule.target);
|
|
141
|
+
const complete = isRuleComplete(rule);
|
|
142
|
+
const title = intl.formatMessage(isNew ? conditionalFormattingMessages.dialogAddTitle : conditionalFormattingMessages.dialogEditTitle);
|
|
143
|
+
return (_jsx(Overlay, { alignTo: alignTo, alignPoints: POPOVER_ALIGN_POINTS, closeOnParentScroll: true, closeOnMouseDrag: true, onClose: onClose, children: _jsxs("div", { className: "gd-cf-dialog", "aria-label": title, children: [
|
|
144
|
+
_jsxs("div", { className: "gd-cf-dialog__header", children: [
|
|
145
|
+
_jsx("h3", { className: "gd-cf-dialog__title", children: title }), _jsx(Button, { className: "gd-button-link gd-button-icon-only gd-icon-cross", accessibilityConfig: {
|
|
146
|
+
ariaLabel: intl.formatMessage(conditionalFormattingMessages.dialogCancel),
|
|
147
|
+
}, onClick: onClose })
|
|
148
|
+
] }), _jsxs("div", { className: "gd-cf-dialog__body", children: [
|
|
149
|
+
_jsx("span", { className: "gd-cf-dialog__label", children: intl.formatMessage(conditionalFormattingMessages.dialogTarget) }), _jsx(CfSelect, { value: selectedTarget?.value ?? "", items: targetOptions.map((option) => ({
|
|
150
|
+
value: option.value,
|
|
151
|
+
title: option.title,
|
|
152
|
+
icon: targetIcon(option.target.kind),
|
|
153
|
+
})), onSelect: changeTarget, placeholder: intl.formatMessage(conditionalFormattingMessages.dialogSelectTarget) }), rule.conditions.map((condition) => (_jsx(ConditionEditor, { condition: condition, kind: rule.target.kind, removable: rule.conditions.length > 1, intl: intl, onChange: (next) => updateCondition(condition.id, next), onRemove: () => removeCondition(condition.id) }, condition.id))), _jsx(Button, { className: "gd-button-secondary gd-cf-dialog__add-condition", iconLeft: "gd-icon-plus", value: intl.formatMessage(conditionalFormattingMessages.dialogAddCondition), onClick: addCondition })
|
|
154
|
+
] }), _jsxs("div", { className: "gd-cf-dialog__footer", children: [
|
|
155
|
+
_jsx(Button, { className: "gd-button-secondary", value: intl.formatMessage(conditionalFormattingMessages.dialogCancel), onClick: onClose }), _jsx(Button, { className: "gd-button-action", value: intl.formatMessage(conditionalFormattingMessages.dialogSave), disabled: !complete, onClick: () => onSave(rule) })
|
|
156
|
+
] })
|
|
157
|
+
] }) }));
|
|
158
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type IInsightDefinition } from "@gooddata/sdk-model";
|
|
2
|
+
import { type IVisualizationProperties } from "../../../interfaces/Visualization.js";
|
|
3
|
+
export interface IConditionalFormattingSectionProps {
|
|
4
|
+
properties?: IVisualizationProperties;
|
|
5
|
+
propertiesMeta?: Record<string, unknown>;
|
|
6
|
+
insight?: IInsightDefinition;
|
|
7
|
+
titlesByLocalId?: Record<string, string>;
|
|
8
|
+
isLoading?: boolean;
|
|
9
|
+
pushData?: (data: unknown) => void;
|
|
10
|
+
}
|
|
11
|
+
export declare function ConditionalFormattingSection({ properties, propertiesMeta, insight, titlesByLocalId, isLoading, pushData }: IConditionalFormattingSectionProps): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
//# sourceMappingURL=ConditionalFormattingSection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConditionalFormattingSection.d.ts","sourceRoot":"","sources":["../../../../../src/internal/components/configurationControls/conditionalFormatting/ConditionalFormattingSection.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAK9D,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAoBrF,MAAM,WAAW,kCAAkC;IAC/C,UAAU,CAAC,EAAE,wBAAwB,CAAC;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACtC;AAmCD,wBAAgB,4BAA4B,CAAC,EACzC,UAAU,EACV,cAAc,EACd,OAAO,EACP,eAAe,EACf,SAAS,EACT,QAAQ,EACX,EAAE,kCAAkC,2CAsGpC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// (C) 2026 GoodData Corporation
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import { cloneDeep, set } from "lodash-es";
|
|
5
|
+
import { useIntl } from "react-intl";
|
|
6
|
+
import { Button } from "@gooddata/sdk-ui-kit";
|
|
7
|
+
import { conditionalFormattingMessages } from "../../../../locales.js";
|
|
8
|
+
import { ConfigSection } from "../ConfigSection.js";
|
|
9
|
+
import { ConditionalFormattingDialog } from "./ConditionalFormattingDialog.js";
|
|
10
|
+
import { buildTargetOptions, findTargetOption, newRule, targetIcon, targetLocalId, } from "./conditionalFormattingModel.js";
|
|
11
|
+
const SECTION_ID = "conditionalFormatting_section";
|
|
12
|
+
// A saved rule: its target type icon (ABC / metric) + title; the delete (trash) appears on hover.
|
|
13
|
+
// Reorder is preserved as rules-array order (first-match-wins) — drag-to-reorder UI is deferred.
|
|
14
|
+
function RuleChip({ rule, option, labels, onEdit, onDelete }) {
|
|
15
|
+
return (_jsxs("div", { className: "gd-cf-rule", children: [
|
|
16
|
+
_jsxs("button", { type: "button", className: "gd-cf-rule__body", onClick: onEdit, title: labels.edit, children: [
|
|
17
|
+
_jsx("span", { className: `gd-cf-type-icon ${targetIcon(rule.target.kind)}`, "aria-hidden": "true" }), _jsx("span", { className: "gd-cf-rule__title", children: option ? option.title : targetLocalId(rule.target) }), option ? null : _jsx("span", { className: "gd-cf-rule__invalid", children: labels.invalid })] }), _jsx(Button, { className: "gd-button-link gd-button-icon-only gd-icon-trash gd-cf-rule__delete", accessibilityConfig: { ariaLabel: labels.delete }, onClick: onDelete })
|
|
18
|
+
] }));
|
|
19
|
+
}
|
|
20
|
+
export function ConditionalFormattingSection({ properties, propertiesMeta, insight, titlesByLocalId, isLoading, pushData, }) {
|
|
21
|
+
const intl = useIntl();
|
|
22
|
+
const [dialog, setDialog] = useState(null);
|
|
23
|
+
const config = properties?.controls?.["conditionalFormatting"];
|
|
24
|
+
const rules = config?.rules ?? [];
|
|
25
|
+
const enabled = config?.enabled ?? false;
|
|
26
|
+
const targetOptions = insight ? buildTargetOptions(insight, titlesByLocalId) : [];
|
|
27
|
+
const canAddRule = !isLoading && targetOptions.length > 0;
|
|
28
|
+
const commit = (rulesNext, enabledNext) => {
|
|
29
|
+
// Spread the existing config so version (and any future cross-stack fields) survive an edit.
|
|
30
|
+
const next = { ...config, enabled: enabledNext, rules: rulesNext };
|
|
31
|
+
const cloned = cloneDeep(properties ?? {});
|
|
32
|
+
set(cloned, "controls.conditionalFormatting", next);
|
|
33
|
+
pushData?.({ properties: cloned });
|
|
34
|
+
};
|
|
35
|
+
const saveRule = (rule, isNew) => {
|
|
36
|
+
const rulesNext = isNew
|
|
37
|
+
? [...rules, rule]
|
|
38
|
+
: rules.map((existing) => (existing.id === rule.id ? rule : existing));
|
|
39
|
+
// Enable on save for a freshly authored rule so it takes effect without a second click; when
|
|
40
|
+
// editing an existing rule, preserve the current toggle (don't silently re-enable).
|
|
41
|
+
commit(rulesNext, isNew ? true : enabled);
|
|
42
|
+
setDialog(null);
|
|
43
|
+
};
|
|
44
|
+
const deleteRule = (id) => commit(rules.filter((rule) => rule.id !== id), enabled);
|
|
45
|
+
const chipLabels = {
|
|
46
|
+
invalid: intl.formatMessage(conditionalFormattingMessages.ruleInvalid),
|
|
47
|
+
edit: intl.formatMessage(conditionalFormattingMessages.ruleEdit),
|
|
48
|
+
delete: intl.formatMessage(conditionalFormattingMessages.ruleDelete),
|
|
49
|
+
};
|
|
50
|
+
return (_jsxs(ConfigSection, { id: SECTION_ID, className: "gd-cf-section", title: conditionalFormattingMessages.sectionTitle.id, propertiesMeta: propertiesMeta, properties: properties, pushData: pushData, canBeToggled: true, toggledOn: enabled, toggleDisabled: isLoading, onToggle: (checked) => commit(rules, checked), children: [
|
|
51
|
+
_jsx("span", { className: "s-cf-popover-anchor gd-cf-section__anchor" }), _jsxs("div", { className: "gd-cf-section__subcategory", children: [
|
|
52
|
+
_jsx("span", { className: "gd-cf-section__rules-label", children: intl.formatMessage(conditionalFormattingMessages.rulesLabel) }), _jsx("span", { className: "gd-cf-section__divider" }), _jsx(Button, { className: "gd-button-link gd-cf-section__add", iconLeft: "gd-icon-plus", value: intl.formatMessage(conditionalFormattingMessages.addRule), disabled: !canAddRule, onClick: () => setDialog({ rule: newRule(targetOptions[0].target), isNew: true }) })
|
|
53
|
+
] }), rules.length === 0 ? (_jsx("div", { className: "gd-cf-section__empty", children: intl.formatMessage(conditionalFormattingMessages.empty) })) : (_jsx("div", { className: "gd-cf-section__rules", children: rules.map((rule) => (_jsx(RuleChip, { rule: rule, option: findTargetOption(targetOptions, rule.target), labels: chipLabels, onEdit: () => setDialog({ rule, isNew: false }), onDelete: () => deleteRule(rule.id) }, rule.id))) })), dialog ? (_jsx(ConditionalFormattingDialog, { rule: dialog.rule, isNew: dialog.isNew, targetOptions: targetOptions, alignTo: ".s-cf-popover-anchor", onSave: (rule) => saveRule(rule, dialog.isNew), onClose: () => setDialog(null) }, dialog.rule.id)) : null] }));
|
|
54
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type IColor, type IColorPalette, type IRgbColorValue } from "@gooddata/sdk-model";
|
|
2
|
+
export declare const CF_DEFAULT_COLOR = "#E54D40";
|
|
3
|
+
/**
|
|
4
|
+
* Fixed palette backing the conditional-formatting color dropdowns. Reuses the chart color palette
|
|
5
|
+
* builder so the dropdown's palette branch works unchanged; the dropdown's custom-color branch
|
|
6
|
+
* handles any RGB value outside these presets.
|
|
7
|
+
*/
|
|
8
|
+
export declare const CF_COLOR_PALETTE: IColorPalette;
|
|
9
|
+
export declare const rgbToHex: ({ r, g, b }: IRgbColorValue) => string;
|
|
10
|
+
/** Maps a stored hex string to the dropdown's selected item (palette guid when it matches a preset). */
|
|
11
|
+
export declare function hexToColor(hex: string | undefined): IColor | undefined;
|
|
12
|
+
/** Resolves a dropdown selection (palette guid or raw RGB) back to the stored hex string. */
|
|
13
|
+
export declare function colorToHex(color: IColor): string;
|
|
14
|
+
//# sourceMappingURL=conditionalFormattingColors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conditionalFormattingColors.d.ts","sourceRoot":"","sources":["../../../../../src/internal/components/configurationControls/conditionalFormatting/conditionalFormattingColors.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAK3F,eAAO,MAAM,gBAAgB,YAAY,CAAC;AAG1C;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,aAAuD,CAAC;AAKvF,eAAO,MAAM,QAAQ,yCACsD,CAAC;AAK5E,wGAAwG;AACxG,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAOtE;AAED,6FAA6F;AAC7F,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKhD"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// (C) 2026 GoodData Corporation
|
|
2
|
+
import { getColorByGuid, getColorPaletteFromColors, getRgbFromWebColor } from "@gooddata/sdk-ui-vis-commons";
|
|
3
|
+
// Preset semantic swatches (red / green / gray / white); the custom RGB picker covers everything else.
|
|
4
|
+
// CF_DEFAULT_COLOR is the new-condition default and the first preset, kept here as the single source.
|
|
5
|
+
export const CF_DEFAULT_COLOR = "#E54D40";
|
|
6
|
+
const PRESET_HEXES = [CF_DEFAULT_COLOR, "#3DB36B", "#94A1AD", "#FFFFFF"];
|
|
7
|
+
/**
|
|
8
|
+
* Fixed palette backing the conditional-formatting color dropdowns. Reuses the chart color palette
|
|
9
|
+
* builder so the dropdown's palette branch works unchanged; the dropdown's custom-color branch
|
|
10
|
+
* handles any RGB value outside these presets.
|
|
11
|
+
*/
|
|
12
|
+
export const CF_COLOR_PALETTE = getColorPaletteFromColors(PRESET_HEXES);
|
|
13
|
+
const channelToHex = (channel) => Math.max(0, Math.min(255, channel)).toString(16).padStart(2, "0");
|
|
14
|
+
export const rgbToHex = ({ r, g, b }) => `#${channelToHex(r)}${channelToHex(g)}${channelToHex(b)}`.toUpperCase();
|
|
15
|
+
// Parses a stored hex string into an RGB value; null when absent/unparseable. Internal to hexToColor.
|
|
16
|
+
const hexToRgb = (hex) => (hex ? getRgbFromWebColor(hex) : null);
|
|
17
|
+
/** Maps a stored hex string to the dropdown's selected item (palette guid when it matches a preset). */
|
|
18
|
+
export function hexToColor(hex) {
|
|
19
|
+
const rgb = hexToRgb(hex);
|
|
20
|
+
if (!rgb) {
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
const preset = CF_COLOR_PALETTE.find((item) => rgbToHex(item.fill) === rgbToHex(rgb));
|
|
24
|
+
return preset ? { type: "guid", value: preset.guid } : { type: "rgb", value: rgb };
|
|
25
|
+
}
|
|
26
|
+
/** Resolves a dropdown selection (palette guid or raw RGB) back to the stored hex string. */
|
|
27
|
+
export function colorToHex(color) {
|
|
28
|
+
if (color.type === "guid") {
|
|
29
|
+
return rgbToHex(getColorByGuid(CF_COLOR_PALETTE, color.value, 0));
|
|
30
|
+
}
|
|
31
|
+
return rgbToHex(color.value);
|
|
32
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type IInsightDefinition } from "@gooddata/sdk-model";
|
|
2
|
+
import { type DataViewFacade } from "@gooddata/sdk-ui";
|
|
3
|
+
import { type ConditionalFormattingOperator, type ConditionalFormattingTarget, type IConditionalFormattingCondition, type IConditionalFormattingRule } from "@gooddata/sdk-ui-pivot/next";
|
|
4
|
+
/** A selectable measure/attribute for the rule's "applies to" dropdown. */
|
|
5
|
+
export interface ITargetOption {
|
|
6
|
+
value: string;
|
|
7
|
+
title: string;
|
|
8
|
+
target: ConditionalFormattingTarget;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Builds a `localIdentifier -> display title` map from the executed data view. Attribute titles live
|
|
12
|
+
* only on the result headers (not on the insight/buckets), so this is the only reliable source for
|
|
13
|
+
* human attribute names; measures also resolve to their final header name here.
|
|
14
|
+
*/
|
|
15
|
+
export declare function buildTitlesByLocalId(dataView: DataViewFacade): Record<string, string>;
|
|
16
|
+
export declare function buildTargetOptions(insight: IInsightDefinition, titles?: Record<string, string>): ITargetOption[];
|
|
17
|
+
export declare const findTargetOption: (options: ITargetOption[], target: ConditionalFormattingTarget) => ITargetOption | undefined;
|
|
18
|
+
export declare const targetLocalId: (target: ConditionalFormattingTarget) => string;
|
|
19
|
+
export declare const operatorsForKind: (kind: "attribute" | "measure") => ConditionalFormattingOperator[];
|
|
20
|
+
export declare const operatorIcon: (operator: ConditionalFormattingOperator) => string | undefined;
|
|
21
|
+
export declare const targetIcon: (kind: "attribute" | "measure") => string;
|
|
22
|
+
export type OperatorArity = "none" | "single" | "range";
|
|
23
|
+
export declare const operatorArity: (operator: ConditionalFormattingOperator) => OperatorArity;
|
|
24
|
+
export declare const newCondition: () => IConditionalFormattingCondition;
|
|
25
|
+
export declare const newRule: (target: ConditionalFormattingTarget) => IConditionalFormattingRule;
|
|
26
|
+
/** A rule is saveable when every condition has the operand its operator requires. */
|
|
27
|
+
export declare const isRuleComplete: (rule: IConditionalFormattingRule) => boolean;
|
|
28
|
+
//# sourceMappingURL=conditionalFormattingModel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conditionalFormattingModel.d.ts","sourceRoot":"","sources":["../../../../../src/internal/components/configurationControls/conditionalFormatting/conditionalFormattingModel.ts"],"names":[],"mappings":"AAIA,OAAO,EACH,KAAK,kBAAkB,EAS1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAe,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EACH,KAAK,6BAA6B,EAClC,KAAK,2BAA2B,EAChC,KAAK,+BAA+B,EACpC,KAAK,0BAA0B,EAClC,MAAM,6BAA6B,CAAC;AAIrC,2EAA2E;AAC3E,MAAM,WAAW,aAAa;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,2BAA2B,CAAC;CACvC;AAOD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASrF;AAED,wBAAgB,kBAAkB,CAC9B,OAAO,EAAE,kBAAkB,EAG3B,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACpC,aAAa,EAAE,CA0BjB;AAED,eAAO,MAAM,gBAAgB,8FAGmE,CAAC;AAEjG,eAAO,MAAM,aAAa,iDAC2D,CAAC;AAwCtF,eAAO,MAAM,gBAAgB,oEAEuE,CAAC;AAgBrG,eAAO,MAAM,YAAY,iEAGxB,CAAC;AAIF,eAAO,MAAM,UAAU,2CAC0C,CAAC;AAElE,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAExD,eAAO,MAAM,aAAa,4DAKzB,CAAC;AAIF,eAAO,MAAM,YAAY,uCAMvB,CAAC;AAEH,eAAO,MAAM,OAAO,qEAIlB,CAAC;AA2BH,qFAAqF;AACrF,eAAO,MAAM,cAAc,+CAE+D,CAAC"}
|