@gooddata/sdk-ui-kit 11.55.0-alpha.2 → 11.55.0-alpha.4

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 (92) hide show
  1. package/esm/@ui/@types/icon.d.ts +1 -1
  2. package/esm/@ui/@types/icon.d.ts.map +1 -1
  3. package/esm/@ui/UiColorPicker/UiColorPicker.d.ts +6 -0
  4. package/esm/@ui/UiColorPicker/UiColorPicker.d.ts.map +1 -0
  5. package/esm/@ui/UiColorPicker/UiColorPicker.js +49 -0
  6. package/esm/@ui/UiColorPicker/colorValue.d.ts +58 -0
  7. package/esm/@ui/UiColorPicker/colorValue.d.ts.map +1 -0
  8. package/esm/@ui/UiColorPicker/colorValue.js +90 -0
  9. package/esm/@ui/UiColorPicker/components/UiColorSlider.d.ts +19 -0
  10. package/esm/@ui/UiColorPicker/components/UiColorSlider.d.ts.map +1 -0
  11. package/esm/@ui/UiColorPicker/components/UiColorSlider.js +35 -0
  12. package/esm/@ui/UiColorPicker/components/UiColorValueField.d.ts +12 -0
  13. package/esm/@ui/UiColorPicker/components/UiColorValueField.d.ts.map +1 -0
  14. package/esm/@ui/UiColorPicker/components/UiColorValueField.js +40 -0
  15. package/esm/@ui/UiColorPicker/components/UiColorWheel.d.ts +9 -0
  16. package/esm/@ui/UiColorPicker/components/UiColorWheel.d.ts.map +1 -0
  17. package/esm/@ui/UiColorPicker/components/UiColorWheel.js +43 -0
  18. package/esm/@ui/UiColorPicker/types.d.ts +70 -0
  19. package/esm/@ui/UiColorPicker/types.d.ts.map +1 -0
  20. package/esm/@ui/UiColorPicker/types.js +2 -0
  21. package/esm/@ui/UiFloatingElement/UiFloatingElement.d.ts +1 -1
  22. package/esm/@ui/UiFloatingElement/UiFloatingElement.d.ts.map +1 -1
  23. package/esm/@ui/UiFloatingElement/UiFloatingElement.js +3 -1
  24. package/esm/@ui/UiFloatingElement/types.d.ts +19 -0
  25. package/esm/@ui/UiFloatingElement/types.d.ts.map +1 -1
  26. package/esm/@ui/UiFloatingElement/types.js +1 -1
  27. package/esm/@ui/UiFloatingElement/useFloatingPosition.d.ts +1 -1
  28. package/esm/@ui/UiFloatingElement/useFloatingPosition.d.ts.map +1 -1
  29. package/esm/@ui/UiFloatingElement/useFloatingPosition.js +17 -4
  30. package/esm/@ui/UiIcon/icons.d.ts.map +1 -1
  31. package/esm/@ui/UiIcon/icons.js +27 -0
  32. package/esm/@ui/hooks/useCloseOnOutsideClick.d.ts.map +1 -1
  33. package/esm/@ui/hooks/useCloseOnOutsideClick.js +2 -1
  34. package/esm/@ui/hooks/usePointerTrack.d.ts +23 -0
  35. package/esm/@ui/hooks/usePointerTrack.d.ts.map +1 -0
  36. package/esm/@ui/hooks/usePointerTrack.js +45 -0
  37. package/esm/Bubble/Bubble.d.ts +2 -2
  38. package/esm/Bubble/Bubble.d.ts.map +1 -1
  39. package/esm/Bubble/Bubble.js +1 -1
  40. package/esm/Datepicker/Datepicker.d.ts +2 -2
  41. package/esm/Datepicker/Datepicker.d.ts.map +1 -1
  42. package/esm/Dialog/ConfirmDialog.d.ts +2 -1
  43. package/esm/Dialog/ConfirmDialog.d.ts.map +1 -1
  44. package/esm/FilterLabel/FilterLabel.d.ts +2 -1
  45. package/esm/FilterLabel/FilterLabel.d.ts.map +1 -1
  46. package/esm/FilterLabel/FilterLabel.js +2 -2
  47. package/esm/Form/Checkbox.d.ts +2 -1
  48. package/esm/Form/Checkbox.d.ts.map +1 -1
  49. package/esm/Form/InputWithNumberFormat.d.ts +2 -2
  50. package/esm/Form/InputWithNumberFormat.d.ts.map +1 -1
  51. package/esm/Form/InputWithNumberFormat.js +1 -1
  52. package/esm/List/LegacyMultiSelectListItem.d.ts +2 -1
  53. package/esm/List/LegacyMultiSelectListItem.d.ts.map +1 -1
  54. package/esm/List/LegacyMultiSelectListItem.js +1 -1
  55. package/esm/List/MultiSelectListItem.d.ts +2 -1
  56. package/esm/List/MultiSelectListItem.d.ts.map +1 -1
  57. package/esm/Overlay/ErrorOverlay.d.ts +2 -2
  58. package/esm/Overlay/ErrorOverlay.d.ts.map +1 -1
  59. package/esm/ParameterControl/AllowedValuesParameterControlDropdown.d.ts +6 -5
  60. package/esm/ParameterControl/AllowedValuesParameterControlDropdown.d.ts.map +1 -1
  61. package/esm/ParameterControl/AllowedValuesParameterControlDropdown.js +5 -4
  62. package/esm/ParameterControl/NumberParameterControlDropdown.d.ts +9 -10
  63. package/esm/ParameterControl/NumberParameterControlDropdown.d.ts.map +1 -1
  64. package/esm/ParameterControl/NumberParameterControlDropdown.js +11 -4
  65. package/esm/ParameterControl/ParameterControl.d.ts +13 -8
  66. package/esm/ParameterControl/ParameterControl.d.ts.map +1 -1
  67. package/esm/ParameterControl/ParameterControl.js +19 -6
  68. package/esm/ParameterControl/ParameterControlDropdown.d.ts +6 -3
  69. package/esm/ParameterControl/ParameterControlDropdown.d.ts.map +1 -1
  70. package/esm/ParameterControl/ParameterControlDropdown.js +5 -4
  71. package/esm/ParameterControl/StringParameterControlDropdown.d.ts +9 -10
  72. package/esm/ParameterControl/StringParameterControlDropdown.d.ts.map +1 -1
  73. package/esm/ParameterControl/StringParameterControlDropdown.js +11 -4
  74. package/esm/ParameterControl/submitMode.d.ts +18 -0
  75. package/esm/ParameterControl/submitMode.d.ts.map +1 -0
  76. package/esm/ParameterControl/submitMode.js +2 -0
  77. package/esm/Spinner/Spinner.d.ts +2 -1
  78. package/esm/Spinner/Spinner.d.ts.map +1 -1
  79. package/esm/Spinner/Spinner.js +2 -2
  80. package/esm/Timepicker/Timepicker.d.ts +3 -2
  81. package/esm/Timepicker/Timepicker.d.ts.map +1 -1
  82. package/esm/index.d.ts +4 -0
  83. package/esm/index.d.ts.map +1 -1
  84. package/esm/index.js +2 -0
  85. package/esm/measureNumberFormat/MeasureNumberFormat.d.ts +2 -2
  86. package/esm/measureNumberFormat/MeasureNumberFormat.d.ts.map +1 -1
  87. package/esm/sdk-ui-kit.d.ts +156 -11
  88. package/package.json +13 -14
  89. package/src/@ui/UiColorPicker/UiColorPicker.scss +120 -0
  90. package/src/@ui/index.scss +1 -0
  91. package/styles/css/main.css +81 -0
  92. package/styles/css/main.css.map +1 -1
@@ -87,6 +87,7 @@ import { OnError } from '@gooddata/sdk-ui';
87
87
  import { OnLoadingChanged } from '@gooddata/sdk-ui';
88
88
  import { ParameterValue } from '@gooddata/sdk-model';
89
89
  import { Placement } from '@floating-ui/react';
90
+ import { PointerEvent as PointerEvent_2 } from 'react';
90
91
  import { PrimitiveType } from 'react-intl';
91
92
  import { PropsWithChildren } from 'react';
92
93
  import { PropsWithoutRef } from 'react';
@@ -2720,7 +2721,7 @@ export declare function IconTreeMap({ className, width, height, color, ariaHidde
2720
2721
  /**
2721
2722
  * @internal
2722
2723
  */
2723
- export declare type IconType = "aiAgent" | "aiAgentDisabled" | "brain" | "brainDisabled" | "check" | "checkCircle" | "certification" | "plus" | "plusCircle" | "sync" | "alert" | "alertPaused" | "close" | "cross" | "edit" | "crossCircle" | "question" | "chevronUp" | "chevronRight" | "chevronDown" | "chevronLeft" | "date" | "navigateUp" | "navigateDown" | "navigateRight" | "navigateLeft" | "download" | "slack" | "expand" | "exclamationCircle" | "infoCircle" | "book" | "visible" | "invisible" | "lock" | "unlock" | "ai" | "aiFill" | "drawer" | "drawerEmpty" | "prohibited" | "dropDown" | "dropRight" | "clock" | "clockPaused" | "questionMark" | "upload" | "expandRectangle" | "file" | "number" | "code" | "user" | "userPlus" | "users" | "magic" | "tab" | "pauseCircle" | "filter" | "timer" | "mail" | "envelope" | "copy" | "rain" | "earth" | "geoCollection" | "geoCollectionUpload" | "minimize" | "shrink" | "copyright" | "ellipsis" | "pencil" | "folder" | "folderSmall" | "folderPlus" | "trash" | "arrowUp" | "arrowRight" | "arrowDown" | "arrowLeft" | "undo" | "redo" | "trendDown" | "trendUp" | "save" | "minus" | "minusCircle" | "percent" | "enter" | "enterRight" | "money" | "ghost" | "warning" | "home" | "settings" | "search" | "university" | "building" | "printer" | "picture" | "visualization" | "dashboard" | "metric" | "fact" | "ldmAttribute" | "ldmKey" | "ldmLabel" | "sharp" | "attribute" | "horn" | "cw" | "ccw" | "table" | "directionColumn" | "directionRow" | "header" | "genai" | "genai2" | "explainai" | "hiddenForAi" | "box" | "ellipsisVertical" | "list" | "drillTo" | "hierarchy" | "history" | "history2" | "thumbsUp" | "thumbsDown" | "send" | "visualizationArea" | "visualizationTable" | "visualizationTreemap" | "visualizationScatter" | "visualizationDonut" | "visualizationHeadline" | "visualizationColumn" | "visualizationLine" | "visualizationPyramid" | "visualizationFunnel" | "visualizationHeatmap" | "visualizationBubble" | "visualizationPie" | "visualizationBar" | "visualizationCombo" | "visualizationBullet" | "visualizationWaterfall" | "visualizationDependencywheel" | "visualizationSankey" | "visualizationPushpin" | "visualizationRepeater" | "visualizationXirr" | "link" | "externalLink" | "click" | "fileXlsx" | "filePptx" | "filePdf" | "fileImage" | "fileCsvFormatted" | "fileCsvRaw" | "aiDocument" | "recommendation" | "streamUp" | "streamDown" | "stream" | "density" | "parameter" | "pin" | "unpin" | "speechBubble" | "pieChart" | "timezone";
2724
+ export declare type IconType = "aiAgent" | "aiAgentDisabled" | "brain" | "brainDisabled" | "check" | "checkCircle" | "certification" | "plus" | "plusCircle" | "sync" | "alert" | "alertPaused" | "close" | "cross" | "edit" | "crossCircle" | "question" | "chevronUp" | "chevronRight" | "chevronDown" | "chevronLeft" | "date" | "navigateUp" | "navigateDown" | "navigateRight" | "navigateLeft" | "download" | "slack" | "expand" | "exclamationCircle" | "infoCircle" | "book" | "visible" | "invisible" | "lock" | "unlock" | "ai" | "aiFill" | "drawer" | "drawerEmpty" | "prohibited" | "dropDown" | "dropRight" | "clock" | "clockPaused" | "questionMark" | "upload" | "expandRectangle" | "file" | "number" | "code" | "user" | "userPlus" | "users" | "magic" | "tab" | "pauseCircle" | "filter" | "timer" | "mail" | "envelope" | "copy" | "rain" | "earth" | "geoCollection" | "geoCollectionUpload" | "minimize" | "shrink" | "copyright" | "ellipsis" | "pencil" | "folder" | "folderSmall" | "folderPlus" | "trash" | "arrowUp" | "arrowRight" | "arrowDown" | "arrowLeft" | "undo" | "redo" | "trendDown" | "trendUp" | "save" | "minus" | "minusCircle" | "percent" | "enter" | "enterRight" | "money" | "ghost" | "warning" | "home" | "settings" | "search" | "university" | "building" | "printer" | "picture" | "visualization" | "dashboard" | "metric" | "fact" | "ldmAttribute" | "ldmKey" | "ldmLabel" | "sharp" | "attribute" | "horn" | "cw" | "ccw" | "table" | "directionColumn" | "directionRow" | "alignLeft" | "alignCenter" | "alignRight" | "alignTop" | "alignMiddle" | "alignBottom" | "imageContain" | "imageCover" | "imageFill" | "header" | "genai" | "genai2" | "explainai" | "hiddenForAi" | "box" | "ellipsisVertical" | "list" | "drillTo" | "hierarchy" | "history" | "history2" | "thumbsUp" | "thumbsDown" | "send" | "visualizationArea" | "visualizationTable" | "visualizationTreemap" | "visualizationScatter" | "visualizationDonut" | "visualizationHeadline" | "visualizationColumn" | "visualizationLine" | "visualizationPyramid" | "visualizationFunnel" | "visualizationHeatmap" | "visualizationBubble" | "visualizationPie" | "visualizationBar" | "visualizationCombo" | "visualizationBullet" | "visualizationWaterfall" | "visualizationDependencywheel" | "visualizationSankey" | "visualizationPushpin" | "visualizationRepeater" | "visualizationXirr" | "link" | "externalLink" | "click" | "fileXlsx" | "filePptx" | "filePdf" | "fileImage" | "fileCsvFormatted" | "fileCsvRaw" | "aiDocument" | "recommendation" | "streamUp" | "streamDown" | "stream" | "density" | "parameter" | "pin" | "unpin" | "speechBubble" | "pieChart" | "timezone";
2724
2725
 
2725
2726
  /**
2726
2727
  * @internal
@@ -5323,16 +5324,20 @@ export declare interface IParameterControlButtonProps {
5323
5324
  /**
5324
5325
  * @internal
5325
5326
  */
5326
- export declare interface IParameterControlProps {
5327
+ export declare type IParameterControlProps = {
5327
5328
  name: string;
5328
5329
  definition: IParameterDefinition;
5329
5330
  value: ParameterValue;
5330
5331
  resetValue?: ParameterValue;
5331
5332
  inputId?: string;
5332
5333
  ariaAttributes?: IDropdownBodyRenderProps["ariaAttributes"];
5333
- onApply: (value: ParameterValue) => void;
5334
- onCancel: () => void;
5335
- }
5334
+ /**
5335
+ * The control calls this itself after a commit-mode Apply, and after the user selects an
5336
+ * allowed value. The footer Cancel or Close button also calls this. Close does not remove the
5337
+ * staged value.
5338
+ */
5339
+ onClose: () => void;
5340
+ } & ParameterSubmitModeProps<ParameterValue>;
5336
5341
 
5337
5342
  /**
5338
5343
  * @internal
@@ -5349,6 +5354,17 @@ export declare interface IParameterPickerProps {
5349
5354
  onCancel: () => void;
5350
5355
  }
5351
5356
 
5357
+ /**
5358
+ * @internal
5359
+ */
5360
+ export declare interface IPointerTrackHandlers {
5361
+ onPointerDown: (event: PointerEvent_2<HTMLElement>) => void;
5362
+ onPointerMove: (event: PointerEvent_2<HTMLElement>) => void;
5363
+ onPointerUp: (event: PointerEvent_2<HTMLElement>) => void;
5364
+ onPointerCancel: (event: PointerEvent_2<HTMLElement>) => void;
5365
+ onLostPointerCapture: (event: PointerEvent_2<HTMLElement>) => void;
5366
+ }
5367
+
5352
5368
  /**
5353
5369
  * @internal
5354
5370
  */
@@ -7084,6 +7100,81 @@ export declare interface IUiChipProps {
7084
7100
  renderActionButton?: (button: ReactNode) => ReactNode;
7085
7101
  }
7086
7102
 
7103
+ /**
7104
+ * What every picker takes, whichever way it reports the color it gathers.
7105
+ *
7106
+ * @internal
7107
+ */
7108
+ export declare interface IUiColorPickerBaseProps {
7109
+ /**
7110
+ * The color to start from. The picker follows it when it changes.
7111
+ *
7112
+ * @remarks
7113
+ * Never feed the picker the color it just reported: read in again it loses the hue that a gray,
7114
+ * black or white cannot carry, and the handle jumps off the wheel mid-drag. A caller applying
7115
+ * changes live should hold the color it seeds the picker with apart from the one it stores.
7116
+ */
7117
+ initialRgbColor: IUiColorPickerRgb | IUiColorPickerRgba;
7118
+ /**
7119
+ * Adds an opacity control and lets the reported color carry one.
7120
+ *
7121
+ * @remarks
7122
+ * Off by default: a consumer that stores a color without an opacity would drop the one the user
7123
+ * had set, without saying so.
7124
+ */
7125
+ supportsAlpha?: boolean;
7126
+ }
7127
+
7128
+ /**
7129
+ * A picker that gathers a color and reports it once, when confirmed.
7130
+ *
7131
+ * @internal
7132
+ */
7133
+ export declare interface IUiColorPickerCommitProps extends IUiColorPickerBaseProps {
7134
+ onSubmit: (color: IUiColorPickerRgba) => void;
7135
+ /**
7136
+ * Dismisses the picker, leaving the color as it was.
7137
+ */
7138
+ onCancel: () => void;
7139
+ onChange?: never;
7140
+ }
7141
+
7142
+ /**
7143
+ * A picker that reports every change as it is made, and so has nothing to confirm or take back: the
7144
+ * color is already applied, and going back from it is the caller's to offer.
7145
+ *
7146
+ * @internal
7147
+ */
7148
+ export declare interface IUiColorPickerLiveProps extends IUiColorPickerBaseProps {
7149
+ onChange: (color: IUiColorPickerRgba) => void;
7150
+ onSubmit?: never;
7151
+ }
7152
+
7153
+ /**
7154
+ * @internal
7155
+ */
7156
+ export declare type IUiColorPickerProps = IUiColorPickerCommitProps | IUiColorPickerLiveProps;
7157
+
7158
+ /**
7159
+ * Channels, each 0 to 255.
7160
+ *
7161
+ * @internal
7162
+ */
7163
+ export declare interface IUiColorPickerRgb {
7164
+ r: number;
7165
+ g: number;
7166
+ b: number;
7167
+ }
7168
+
7169
+ /**
7170
+ * Channels, each 0 to 255, with opacity from 0 (transparent) to 1 (opaque).
7171
+ *
7172
+ * @internal
7173
+ */
7174
+ export declare interface IUiColorPickerRgba extends IUiColorPickerRgb {
7175
+ a: number;
7176
+ }
7177
+
7087
7178
  /** @internal */
7088
7179
  export declare interface IUiComboboxInputProps {
7089
7180
  /**
@@ -7694,6 +7785,23 @@ export declare interface IUiFloatingElementProps {
7694
7785
  strategy?: Strategy;
7695
7786
  offset?: OffsetOptions;
7696
7787
  autoFlip?: boolean;
7788
+ /**
7789
+ * Whether the floating element may slide over its anchor to stay in view.
7790
+ *
7791
+ * @remarks
7792
+ * By default it only slides along the side it is placed on. An anchor taller than the viewport
7793
+ * has room on neither side, which leaves the element off the screen.
7794
+ */
7795
+ allowOverlapAnchor?: boolean;
7796
+ /**
7797
+ * Element the floating element is kept inside of, instead of the window.
7798
+ *
7799
+ * @remarks
7800
+ * The portal puts it outside whatever the anchor scrolls in, so by default only the window
7801
+ * constrains it. Pass the element rather than its rect, so the position is measured again as
7802
+ * the element moves.
7803
+ */
7804
+ overflowBoundary?: Element;
7697
7805
  closeOnOutsideClick?: boolean;
7698
7806
  closeOnEscape?: boolean;
7699
7807
  closeOnParentScroll?: boolean;
@@ -9637,6 +9745,8 @@ export declare interface IUseFloatingPositionOptions {
9637
9745
  strategy?: Strategy;
9638
9746
  offset?: OffsetOptions;
9639
9747
  autoFlip?: boolean;
9748
+ allowOverlapAnchor?: boolean;
9749
+ overflowBoundary?: Element;
9640
9750
  fallbackPlacements?: Placement[];
9641
9751
  arrowRef?: RefObject<SVGSVGElement | null>;
9642
9752
  customMiddleware?: Middleware[];
@@ -10240,13 +10350,13 @@ export declare type PageOrientation = "PORTRAIT" | "LANDSCAPE";
10240
10350
  export declare type PageSize = "A3" | "A4" | "LETTER";
10241
10351
 
10242
10352
  /**
10243
- * Selects the parameter editing control by `definition.type` and constraint shape — the single
10244
- * seam where control variants are dispatched. New variants get a sibling control and a new arm
10245
- * here.
10353
+ * Controls the full parameter edit session. It selects the control variant from `definition.type`
10354
+ * and the constraint shape, then gives the commit or staged mode to that variant. To add a
10355
+ * variant, add a sibling control and a new case here.
10246
10356
  *
10247
10357
  * @internal
10248
10358
  */
10249
- export declare function ParameterControl({ name, definition, value, resetValue, inputId, ariaAttributes, onApply, onCancel }: IParameterControlProps): JSX.Element;
10359
+ export declare function ParameterControl(props: IParameterControlProps): JSX.Element;
10250
10360
 
10251
10361
  /**
10252
10362
  * @internal
@@ -10261,6 +10371,24 @@ export declare function ParameterControlButton({ name, definition, value, isActi
10261
10371
  */
10262
10372
  export declare function ParameterPicker({ parameters, excludedKeys, isLoading, maxListHeight, onAdd, onCancel }: IParameterPickerProps): JSX.Element;
10263
10373
 
10374
+ /**
10375
+ * Submit mode of a parameter control edit session.
10376
+ *
10377
+ * - `commit`: the control sends the value through `onCommit` only, when the user clicks Apply.
10378
+ * The footer shows Cancel and Apply.
10379
+ * - `staged`: the control sends each valid draft through `onStage` immediately. The footer shows
10380
+ * only Close. Close does not remove the staged value.
10381
+ *
10382
+ * @internal
10383
+ */
10384
+ export declare type ParameterSubmitModeProps<TValue> = {
10385
+ mode: "commit";
10386
+ onCommit: (value: TValue) => void;
10387
+ } | {
10388
+ mode: "staged";
10389
+ onStage: (value: TValue) => void;
10390
+ };
10391
+
10264
10392
  /**
10265
10393
  * Message descriptor of a permission level's display label ("Can edit & share" /
10266
10394
  * "Can view & share" / "Can view") — for triggers anchoring {@link UiPermissionMenu}.
@@ -11030,6 +11158,11 @@ export declare function UiCheckbox({ checked, onChange, preventDefault, stopProp
11030
11158
  */
11031
11159
  export declare function UiChip({ label, tag, isDeletable, isActionable, isActive, isLocked, isExpandable, isDisabled, maxWidth, iconBefore, iconAfter, iconColor, onClick, onKeyDown, onDelete, onDeleteKeyDown, onAction, onActionKeyDown, accessibilityConfig, dataTestId, buttonRef, iconAction, variant, renderChipContent, renderActionButton }: IUiChipProps): JSX.Element;
11032
11160
 
11161
+ /**
11162
+ * @internal
11163
+ */
11164
+ export declare function UiColorPicker(props: IUiColorPickerProps): JSX.Element;
11165
+
11033
11166
  /**
11034
11167
  * A composable combobox component that enables users to select from a filtered list of options.
11035
11168
  *
@@ -11233,7 +11366,7 @@ export declare function UiErrorPage({ title, description, dataTestId, accessibil
11233
11366
  *
11234
11367
  * @internal
11235
11368
  */
11236
- export declare function UiFloatingElement({ children, anchor, isOpen, onClose, placement, alignPoints, strategy, offset, autoFlip, closeOnOutsideClick, closeOnEscape, closeOnParentScroll, closeOnMouseDrag, ignoreClicksOn, shouldCloseOnClick, zIndex: zIndexProp, className, contentClassName, style, width, maxWidth, maxHeight, accessibilityConfig, onPlacementChange }: IUiFloatingElementProps): JSX.Element | null;
11369
+ export declare function UiFloatingElement({ children, anchor, isOpen, onClose, placement, alignPoints, strategy, offset, autoFlip, allowOverlapAnchor, overflowBoundary, closeOnOutsideClick, closeOnEscape, closeOnParentScroll, closeOnMouseDrag, ignoreClicksOn, shouldCloseOnClick, zIndex: zIndexProp, className, contentClassName, style, width, maxWidth, maxHeight, accessibilityConfig, onPlacementChange }: IUiFloatingElementProps): JSX.Element | null;
11237
11370
 
11238
11371
  /**
11239
11372
  * `UiFloatingElement` plus the kit's canonical popup chrome (background,
@@ -11882,7 +12015,7 @@ export declare function useFileSelection({ rules, multiple, onValidateFile, onFi
11882
12015
  *
11883
12016
  * @internal
11884
12017
  */
11885
- export declare function useFloatingPosition({ isOpen, onOpenChange, placement: placementProp, alignPoints, strategy, offset: offsetProp, autoFlip, fallbackPlacements: fallbackPlacementsProp, arrowRef, customMiddleware, maxWidth, maxHeight, zIndex: zIndexProp, shiftPadding }: IUseFloatingPositionOptions): IUseFloatingPositionResult;
12018
+ export declare function useFloatingPosition({ isOpen, onOpenChange, placement: placementProp, alignPoints, strategy, offset: offsetProp, autoFlip, allowOverlapAnchor, overflowBoundary, fallbackPlacements: fallbackPlacementsProp, arrowRef, customMiddleware, maxWidth, maxHeight, zIndex: zIndexProp, shiftPadding }: IUseFloatingPositionOptions): IUseFloatingPositionResult;
11886
12019
 
11887
12020
  /**
11888
12021
  * @internal
@@ -12073,6 +12206,18 @@ export declare const useOverlayZIndex: (uuid: string) => number | undefined;
12073
12206
  */
12074
12207
  export declare function useOverlayZIndexWithRegister(): number;
12075
12208
 
12209
+ /**
12210
+ * Follows a press and everything it drags through.
12211
+ *
12212
+ * @remarks
12213
+ * The handlers must be spread on the element the gesture is measured against: they report
12214
+ * `currentTarget`, and a caller that reads a child's or a parent's size instead will place the value
12215
+ * somewhere the pointer is not.
12216
+ *
12217
+ * @internal
12218
+ */
12219
+ export declare function usePointerTrack(track: (event: PointerEvent_2<HTMLElement>) => void): IPointerTrackHandlers;
12220
+
12076
12221
  /**
12077
12222
  * Hook to consume responsive context.
12078
12223
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gooddata/sdk-ui-kit",
3
- "version": "11.55.0-alpha.2",
3
+ "version": "11.55.0-alpha.4",
4
4
  "description": "GoodData SDK - UI Building Components",
5
5
  "license": "MIT",
6
6
  "author": "GoodData Corporation",
@@ -78,11 +78,11 @@
78
78
  "unified": "^11.0.5",
79
79
  "uuid": "11.1.1",
80
80
  "yaml": "2.8.3",
81
- "@gooddata/sdk-backend-spi": "11.55.0-alpha.2",
82
- "@gooddata/sdk-model": "11.55.0-alpha.2",
83
- "@gooddata/sdk-ui": "11.55.0-alpha.2",
84
- "@gooddata/util": "11.55.0-alpha.2",
85
- "@gooddata/sdk-ui-theme-provider": "11.55.0-alpha.2"
81
+ "@gooddata/sdk-backend-spi": "11.55.0-alpha.4",
82
+ "@gooddata/sdk-model": "11.55.0-alpha.4",
83
+ "@gooddata/sdk-ui": "11.55.0-alpha.4",
84
+ "@gooddata/util": "11.55.0-alpha.4",
85
+ "@gooddata/sdk-ui-theme-provider": "11.55.0-alpha.4"
86
86
  },
87
87
  "devDependencies": {
88
88
  "@microsoft/api-documenter": "7.30.10",
@@ -103,7 +103,6 @@
103
103
  "@typescript-eslint/eslint-plugin": "8.58.0",
104
104
  "@typescript-eslint/parser": "8.58.0",
105
105
  "@typescript/native-preview": "7.0.0-dev.20260202.1",
106
- "@vitest/eslint-plugin": "1.6.19",
107
106
  "dependency-cruiser": "17.3.10",
108
107
  "eslint": "^9.39.2",
109
108
  "eslint-plugin-headers": "1.3.3",
@@ -117,8 +116,8 @@
117
116
  "happy-dom": "20.9.0",
118
117
  "kefir": "3.8.8",
119
118
  "npm-run-all": "4.1.5",
120
- "oxfmt": "0.52.0",
121
- "oxlint": "1.51.0",
119
+ "oxfmt": "0.58.0",
120
+ "oxlint": "1.57.0",
122
121
  "oxlint-tsgolint": "0.15.0",
123
122
  "raf": "3.4.1",
124
123
  "react": "19.1.1",
@@ -129,11 +128,11 @@
129
128
  "typescript": "5.9.3",
130
129
  "vitest": "4.1.8",
131
130
  "vitest-dom": "0.1.1",
132
- "@gooddata/eslint-config": "11.55.0-alpha.2",
133
- "@gooddata/oxlint-config": "11.55.0-alpha.2",
134
- "@gooddata/reference-workspace": "11.55.0-alpha.2",
135
- "@gooddata/stylelint-config": "11.55.0-alpha.2",
136
- "@gooddata/sdk-backend-mockingbird": "11.55.0-alpha.2"
131
+ "@gooddata/eslint-config": "11.55.0-alpha.4",
132
+ "@gooddata/oxlint-config": "11.55.0-alpha.4",
133
+ "@gooddata/reference-workspace": "11.55.0-alpha.4",
134
+ "@gooddata/sdk-backend-mockingbird": "11.55.0-alpha.4",
135
+ "@gooddata/stylelint-config": "11.55.0-alpha.4"
137
136
  },
138
137
  "peerDependencies": {
139
138
  "react": "^18.0.0 || ^19.0.0",
@@ -0,0 +1,120 @@
1
+ // (C) 2007-2026 GoodData Corporation
2
+
3
+ .gd-ui-kit-color-picker {
4
+ --color-picker-handle: 14px;
5
+
6
+ width: 200px;
7
+ padding: 15px;
8
+ }
9
+
10
+ // Hue runs around the wheel and saturation out from the middle, which the geometry in UiColorWheel.tsx
11
+ // reads back. The two agree only because the conic gradient starts where the screen angle is
12
+ // measured from - at 3 o'clock, running clockwise - so a gradient position is a hue is an angle.
13
+ //
14
+ // Painted at a fixed lightness, not the one being edited: at either extreme every hue renders the
15
+ // same white or black, and a wheel that followed it would leave nothing to aim at.
16
+ .gd-ui-kit-color-picker__wheel {
17
+ position: relative;
18
+ width: 100%;
19
+ aspect-ratio: 1;
20
+ margin-bottom: 15px;
21
+ border-radius: 50%;
22
+ cursor: crosshair;
23
+ // Without this a drag on a touch screen scrolls the page instead of picking a color.
24
+ touch-action: none;
25
+ user-select: none;
26
+ background:
27
+ radial-gradient(circle closest-side, hsl(0deg 0% 50%) 0%, transparent 100%),
28
+ conic-gradient(
29
+ from 90deg,
30
+ hsl(0deg 100% 50%),
31
+ hsl(60deg 100% 50%),
32
+ hsl(120deg 100% 50%),
33
+ hsl(180deg 100% 50%),
34
+ hsl(240deg 100% 50%),
35
+ hsl(300deg 100% 50%),
36
+ hsl(360deg 100% 50%)
37
+ );
38
+
39
+ &:focus-visible {
40
+ outline: 2px solid var(--gd-palette-primary-base);
41
+ outline-offset: 2px;
42
+ }
43
+ }
44
+
45
+ .gd-ui-kit-color-picker__slider {
46
+ position: relative;
47
+ height: var(--color-picker-handle);
48
+ margin-bottom: 15px;
49
+ border-radius: calc(var(--color-picker-handle) / 2);
50
+ cursor: pointer;
51
+ touch-action: none;
52
+ // A drag would otherwise select the labels around the control and show an I-beam over it.
53
+ user-select: none;
54
+ // Shows through wherever a track is not fully opaque, which is what marks it as see-through.
55
+ background: repeating-conic-gradient(
56
+ var(--gd-palette-complementary-2) 0% 25%,
57
+ var(--gd-palette-complementary-0) 0% 50%
58
+ )
59
+ 50% / 8px 8px;
60
+
61
+ &:focus-visible {
62
+ outline: 2px solid var(--gd-palette-primary-base);
63
+ outline-offset: 2px;
64
+ }
65
+ }
66
+
67
+ .gd-ui-kit-color-picker__slider-track {
68
+ position: absolute;
69
+ inset: 0;
70
+ border-radius: inherit;
71
+ }
72
+
73
+ // Placed by its middle, which is what the positions the controls set mean. The border counts
74
+ // towards its size, or the offset that centres it would be short by the border on each side.
75
+ .gd-ui-kit-color-picker__wheel-thumb,
76
+ .gd-ui-kit-color-picker__slider-thumb {
77
+ position: absolute;
78
+ box-sizing: border-box;
79
+ width: var(--color-picker-handle);
80
+ height: var(--color-picker-handle);
81
+ margin: calc(var(--color-picker-handle) / -2) 0 0 calc(var(--color-picker-handle) / -2);
82
+ border: 2px solid var(--gd-palette-complementary-0);
83
+ border-radius: 50%;
84
+ box-shadow: 0 0 2px var(--gd-palette-complementary-6);
85
+ // The handle only reports where the value is; the gesture belongs to the control under it.
86
+ pointer-events: none;
87
+ }
88
+
89
+ .gd-ui-kit-color-picker__slider-thumb {
90
+ top: 50%;
91
+ // Stops half a handle short of each end, so it stays inside the track it reads against.
92
+ left: calc(
93
+ var(--color-picker-handle) / 2 + (100% - var(--color-picker-handle)) *
94
+ var(--color-picker-slider-position)
95
+ );
96
+ }
97
+
98
+ .gd-ui-kit-color-picker__value {
99
+ display: flex;
100
+ align-items: center;
101
+ gap: 5px;
102
+
103
+ // A text input asks for a width of its own and a flex item will not shrink below what it asks
104
+ // for, so without this the notation button is pushed out of the panel.
105
+ .gd-ui-kit-text-input {
106
+ flex: 1;
107
+ min-width: 0;
108
+ }
109
+ }
110
+
111
+ .gd-ui-kit-color-picker__actions {
112
+ display: flex;
113
+ justify-content: space-between;
114
+ gap: 10px;
115
+ padding: 15px 0 0;
116
+
117
+ .gd-ui-kit-button {
118
+ flex: 1;
119
+ }
120
+ }
@@ -8,6 +8,7 @@
8
8
  @use "./UiSkeleton/UiSkeleton.scss";
9
9
  @use "./UiPagedVirtualList/UiPagedVirtualList.scss";
10
10
  @use "./UiChip/UiChip.scss";
11
+ @use "./UiColorPicker/UiColorPicker.scss";
11
12
  @use "./UiControlButton/UiControlButton.scss";
12
13
  @use "./UiCombobox/UiCombobox.scss";
13
14
  @use "./UiAutocomplete/UiAutocomplete.scss";
@@ -1376,6 +1376,87 @@
1376
1376
  transition: var(--gd-transition-all);
1377
1377
  }
1378
1378
 
1379
+ .gd-ui-kit-color-picker {
1380
+ --color-picker-handle: 14px;
1381
+ width: 200px;
1382
+ padding: 15px;
1383
+ }
1384
+
1385
+ .gd-ui-kit-color-picker__wheel {
1386
+ position: relative;
1387
+ width: 100%;
1388
+ aspect-ratio: 1;
1389
+ margin-bottom: 15px;
1390
+ border-radius: 50%;
1391
+ cursor: crosshair;
1392
+ touch-action: none;
1393
+ user-select: none;
1394
+ background: radial-gradient(circle closest-side, hsl(0, 0%, 50%) 0%, transparent 100%), conic-gradient(from 90deg, hsl(0, 100%, 50%), hsl(60, 100%, 50%), hsl(120, 100%, 50%), hsl(180, 100%, 50%), hsl(240, 100%, 50%), hsl(300, 100%, 50%), hsl(0, 100%, 50%));
1395
+ }
1396
+ .gd-ui-kit-color-picker__wheel:focus-visible {
1397
+ outline: 2px solid var(--gd-palette-primary-base);
1398
+ outline-offset: 2px;
1399
+ }
1400
+
1401
+ .gd-ui-kit-color-picker__slider {
1402
+ position: relative;
1403
+ height: var(--color-picker-handle);
1404
+ margin-bottom: 15px;
1405
+ border-radius: calc(var(--color-picker-handle) / 2);
1406
+ cursor: pointer;
1407
+ touch-action: none;
1408
+ user-select: none;
1409
+ background: repeating-conic-gradient(var(--gd-palette-complementary-2) 0% 25%, var(--gd-palette-complementary-0) 0% 50%) 50%/8px 8px;
1410
+ }
1411
+ .gd-ui-kit-color-picker__slider:focus-visible {
1412
+ outline: 2px solid var(--gd-palette-primary-base);
1413
+ outline-offset: 2px;
1414
+ }
1415
+
1416
+ .gd-ui-kit-color-picker__slider-track {
1417
+ position: absolute;
1418
+ inset: 0;
1419
+ border-radius: inherit;
1420
+ }
1421
+
1422
+ .gd-ui-kit-color-picker__wheel-thumb,
1423
+ .gd-ui-kit-color-picker__slider-thumb {
1424
+ position: absolute;
1425
+ box-sizing: border-box;
1426
+ width: var(--color-picker-handle);
1427
+ height: var(--color-picker-handle);
1428
+ margin: calc(var(--color-picker-handle) / -2) 0 0 calc(var(--color-picker-handle) / -2);
1429
+ border: 2px solid var(--gd-palette-complementary-0);
1430
+ border-radius: 50%;
1431
+ box-shadow: 0 0 2px var(--gd-palette-complementary-6);
1432
+ pointer-events: none;
1433
+ }
1434
+
1435
+ .gd-ui-kit-color-picker__slider-thumb {
1436
+ top: 50%;
1437
+ left: calc(var(--color-picker-handle) / 2 + (100% - var(--color-picker-handle)) * var(--color-picker-slider-position));
1438
+ }
1439
+
1440
+ .gd-ui-kit-color-picker__value {
1441
+ display: flex;
1442
+ align-items: center;
1443
+ gap: 5px;
1444
+ }
1445
+ .gd-ui-kit-color-picker__value .gd-ui-kit-text-input {
1446
+ flex: 1;
1447
+ min-width: 0;
1448
+ }
1449
+
1450
+ .gd-ui-kit-color-picker__actions {
1451
+ display: flex;
1452
+ justify-content: space-between;
1453
+ gap: 10px;
1454
+ padding: 15px 0 0;
1455
+ }
1456
+ .gd-ui-kit-color-picker__actions .gd-ui-kit-button {
1457
+ flex: 1;
1458
+ }
1459
+
1379
1460
  /* ==========================================================================
1380
1461
  Variables
1381
1462
  ========================================================================== */