@gooddata/sdk-ui-kit 11.55.0-alpha.1 → 11.55.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/esm/@ui/@types/icon.d.ts +1 -1
- package/esm/@ui/@types/icon.d.ts.map +1 -1
- package/esm/@ui/UiChip/ChipActionButton.d.ts +3 -0
- package/esm/@ui/UiChip/ChipActionButton.d.ts.map +1 -0
- package/esm/@ui/UiChip/ChipActionButton.js +8 -0
- package/esm/@ui/UiChip/ChipContent.d.ts +1 -1
- package/esm/@ui/UiChip/ChipContent.d.ts.map +1 -1
- package/esm/@ui/UiChip/ChipContent.js +6 -4
- package/esm/@ui/UiChip/ChipDeleteButton.d.ts +1 -1
- package/esm/@ui/UiChip/ChipDeleteButton.d.ts.map +1 -1
- package/esm/@ui/UiChip/ChipDeleteButton.js +2 -2
- package/esm/@ui/UiChip/UiChip.d.ts +1 -1
- package/esm/@ui/UiChip/UiChip.d.ts.map +1 -1
- package/esm/@ui/UiChip/UiChip.js +8 -5
- package/esm/@ui/UiChip/types.d.ts +19 -1
- package/esm/@ui/UiChip/types.d.ts.map +1 -1
- package/esm/@ui/UiColorPicker/UiColorPicker.d.ts +6 -0
- package/esm/@ui/UiColorPicker/UiColorPicker.d.ts.map +1 -0
- package/esm/@ui/UiColorPicker/UiColorPicker.js +49 -0
- package/esm/@ui/UiColorPicker/colorValue.d.ts +58 -0
- package/esm/@ui/UiColorPicker/colorValue.d.ts.map +1 -0
- package/esm/@ui/UiColorPicker/colorValue.js +90 -0
- package/esm/@ui/UiColorPicker/components/UiColorSlider.d.ts +19 -0
- package/esm/@ui/UiColorPicker/components/UiColorSlider.d.ts.map +1 -0
- package/esm/@ui/UiColorPicker/components/UiColorSlider.js +35 -0
- package/esm/@ui/UiColorPicker/components/UiColorValueField.d.ts +12 -0
- package/esm/@ui/UiColorPicker/components/UiColorValueField.d.ts.map +1 -0
- package/esm/@ui/UiColorPicker/components/UiColorValueField.js +40 -0
- package/esm/@ui/UiColorPicker/components/UiColorWheel.d.ts +9 -0
- package/esm/@ui/UiColorPicker/components/UiColorWheel.d.ts.map +1 -0
- package/esm/@ui/UiColorPicker/components/UiColorWheel.js +43 -0
- package/esm/@ui/UiColorPicker/types.d.ts +70 -0
- package/esm/@ui/UiColorPicker/types.d.ts.map +1 -0
- package/esm/@ui/UiColorPicker/types.js +2 -0
- package/esm/@ui/UiFloatingElement/UiFloatingElement.d.ts +1 -1
- package/esm/@ui/UiFloatingElement/UiFloatingElement.d.ts.map +1 -1
- package/esm/@ui/UiFloatingElement/UiFloatingElement.js +3 -1
- package/esm/@ui/UiFloatingElement/types.d.ts +19 -0
- package/esm/@ui/UiFloatingElement/types.d.ts.map +1 -1
- package/esm/@ui/UiFloatingElement/types.js +1 -1
- package/esm/@ui/UiFloatingElement/useFloatingPosition.d.ts +1 -1
- package/esm/@ui/UiFloatingElement/useFloatingPosition.d.ts.map +1 -1
- package/esm/@ui/UiFloatingElement/useFloatingPosition.js +17 -4
- package/esm/@ui/UiIcon/icons.d.ts.map +1 -1
- package/esm/@ui/UiIcon/icons.js +27 -0
- package/esm/@ui/hooks/useCloseOnOutsideClick.d.ts.map +1 -1
- package/esm/@ui/hooks/useCloseOnOutsideClick.js +2 -1
- package/esm/@ui/hooks/usePointerTrack.d.ts +23 -0
- package/esm/@ui/hooks/usePointerTrack.d.ts.map +1 -0
- package/esm/@ui/hooks/usePointerTrack.js +45 -0
- package/esm/index.d.ts +3 -0
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +2 -0
- package/esm/sdk-ui-kit.d.ts +136 -5
- package/package.json +13 -15
- package/src/@ui/UiChip/UiChip.scss +110 -15
- package/src/@ui/UiColorPicker/UiColorPicker.scss +120 -0
- package/src/@ui/index.scss +1 -0
- package/styles/css/main.css +167 -13
- package/styles/css/main.css.map +1 -1
package/esm/sdk-ui-kit.d.ts
CHANGED
|
@@ -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
|
|
@@ -5349,6 +5350,17 @@ export declare interface IParameterPickerProps {
|
|
|
5349
5350
|
onCancel: () => void;
|
|
5350
5351
|
}
|
|
5351
5352
|
|
|
5353
|
+
/**
|
|
5354
|
+
* @internal
|
|
5355
|
+
*/
|
|
5356
|
+
export declare interface IPointerTrackHandlers {
|
|
5357
|
+
onPointerDown: (event: PointerEvent_2<HTMLElement>) => void;
|
|
5358
|
+
onPointerMove: (event: PointerEvent_2<HTMLElement>) => void;
|
|
5359
|
+
onPointerUp: (event: PointerEvent_2<HTMLElement>) => void;
|
|
5360
|
+
onPointerCancel: (event: PointerEvent_2<HTMLElement>) => void;
|
|
5361
|
+
onLostPointerCapture: (event: PointerEvent_2<HTMLElement>) => void;
|
|
5362
|
+
}
|
|
5363
|
+
|
|
5352
5364
|
/**
|
|
5353
5365
|
* @internal
|
|
5354
5366
|
*/
|
|
@@ -7048,6 +7060,9 @@ export declare interface IUiChipAccessibilityConfig extends IAccessibilityConfig
|
|
|
7048
7060
|
deleteAriaLabel?: string;
|
|
7049
7061
|
deleteAriaDescribedBy?: string;
|
|
7050
7062
|
iconBeforeAriaLabel?: string;
|
|
7063
|
+
iconAfterAriaLabel?: string;
|
|
7064
|
+
actionAriaLabel?: string;
|
|
7065
|
+
actionAriaDescribedBy?: string;
|
|
7051
7066
|
}
|
|
7052
7067
|
|
|
7053
7068
|
/**
|
|
@@ -7057,23 +7072,103 @@ export declare interface IUiChipProps {
|
|
|
7057
7072
|
label: string;
|
|
7058
7073
|
tag?: string;
|
|
7059
7074
|
isDeletable?: boolean;
|
|
7075
|
+
isActionable?: boolean;
|
|
7060
7076
|
isActive?: boolean;
|
|
7061
7077
|
isLocked?: boolean;
|
|
7062
7078
|
isExpandable?: boolean;
|
|
7063
7079
|
isDisabled?: boolean;
|
|
7064
7080
|
maxWidth?: number;
|
|
7081
|
+
iconAction?: IconType;
|
|
7065
7082
|
iconBefore?: IconType;
|
|
7066
7083
|
iconAfter?: IconType;
|
|
7067
7084
|
iconColor?: ThemeColor | "currentColor";
|
|
7085
|
+
variant?: "normal" | "inactive";
|
|
7068
7086
|
onClick?: () => void;
|
|
7069
7087
|
onDelete?: () => void;
|
|
7070
7088
|
onKeyDown?: KeyboardEventHandler<HTMLButtonElement>;
|
|
7071
7089
|
onDeleteKeyDown?: KeyboardEventHandler<HTMLButtonElement>;
|
|
7090
|
+
onAction?: () => void;
|
|
7091
|
+
onActionKeyDown?: KeyboardEventHandler<HTMLButtonElement>;
|
|
7072
7092
|
accessibilityConfig?: IUiChipAccessibilityConfig;
|
|
7073
7093
|
dataTestId?: string;
|
|
7074
7094
|
buttonRef?: MutableRefObject<HTMLButtonElement>;
|
|
7075
7095
|
renderChipContent?: (content: ReactNode) => ReactNode;
|
|
7076
|
-
|
|
7096
|
+
renderActionButton?: (button: ReactNode) => ReactNode;
|
|
7097
|
+
}
|
|
7098
|
+
|
|
7099
|
+
/**
|
|
7100
|
+
* What every picker takes, whichever way it reports the color it gathers.
|
|
7101
|
+
*
|
|
7102
|
+
* @internal
|
|
7103
|
+
*/
|
|
7104
|
+
export declare interface IUiColorPickerBaseProps {
|
|
7105
|
+
/**
|
|
7106
|
+
* The color to start from. The picker follows it when it changes.
|
|
7107
|
+
*
|
|
7108
|
+
* @remarks
|
|
7109
|
+
* Never feed the picker the color it just reported: read in again it loses the hue that a gray,
|
|
7110
|
+
* black or white cannot carry, and the handle jumps off the wheel mid-drag. A caller applying
|
|
7111
|
+
* changes live should hold the color it seeds the picker with apart from the one it stores.
|
|
7112
|
+
*/
|
|
7113
|
+
initialRgbColor: IUiColorPickerRgb | IUiColorPickerRgba;
|
|
7114
|
+
/**
|
|
7115
|
+
* Adds an opacity control and lets the reported color carry one.
|
|
7116
|
+
*
|
|
7117
|
+
* @remarks
|
|
7118
|
+
* Off by default: a consumer that stores a color without an opacity would drop the one the user
|
|
7119
|
+
* had set, without saying so.
|
|
7120
|
+
*/
|
|
7121
|
+
supportsAlpha?: boolean;
|
|
7122
|
+
}
|
|
7123
|
+
|
|
7124
|
+
/**
|
|
7125
|
+
* A picker that gathers a color and reports it once, when confirmed.
|
|
7126
|
+
*
|
|
7127
|
+
* @internal
|
|
7128
|
+
*/
|
|
7129
|
+
export declare interface IUiColorPickerCommitProps extends IUiColorPickerBaseProps {
|
|
7130
|
+
onSubmit: (color: IUiColorPickerRgba) => void;
|
|
7131
|
+
/**
|
|
7132
|
+
* Dismisses the picker, leaving the color as it was.
|
|
7133
|
+
*/
|
|
7134
|
+
onCancel: () => void;
|
|
7135
|
+
onChange?: never;
|
|
7136
|
+
}
|
|
7137
|
+
|
|
7138
|
+
/**
|
|
7139
|
+
* A picker that reports every change as it is made, and so has nothing to confirm or take back: the
|
|
7140
|
+
* color is already applied, and going back from it is the caller's to offer.
|
|
7141
|
+
*
|
|
7142
|
+
* @internal
|
|
7143
|
+
*/
|
|
7144
|
+
export declare interface IUiColorPickerLiveProps extends IUiColorPickerBaseProps {
|
|
7145
|
+
onChange: (color: IUiColorPickerRgba) => void;
|
|
7146
|
+
onSubmit?: never;
|
|
7147
|
+
}
|
|
7148
|
+
|
|
7149
|
+
/**
|
|
7150
|
+
* @internal
|
|
7151
|
+
*/
|
|
7152
|
+
export declare type IUiColorPickerProps = IUiColorPickerCommitProps | IUiColorPickerLiveProps;
|
|
7153
|
+
|
|
7154
|
+
/**
|
|
7155
|
+
* Channels, each 0 to 255.
|
|
7156
|
+
*
|
|
7157
|
+
* @internal
|
|
7158
|
+
*/
|
|
7159
|
+
export declare interface IUiColorPickerRgb {
|
|
7160
|
+
r: number;
|
|
7161
|
+
g: number;
|
|
7162
|
+
b: number;
|
|
7163
|
+
}
|
|
7164
|
+
|
|
7165
|
+
/**
|
|
7166
|
+
* Channels, each 0 to 255, with opacity from 0 (transparent) to 1 (opaque).
|
|
7167
|
+
*
|
|
7168
|
+
* @internal
|
|
7169
|
+
*/
|
|
7170
|
+
export declare interface IUiColorPickerRgba extends IUiColorPickerRgb {
|
|
7171
|
+
a: number;
|
|
7077
7172
|
}
|
|
7078
7173
|
|
|
7079
7174
|
/** @internal */
|
|
@@ -7686,6 +7781,23 @@ export declare interface IUiFloatingElementProps {
|
|
|
7686
7781
|
strategy?: Strategy;
|
|
7687
7782
|
offset?: OffsetOptions;
|
|
7688
7783
|
autoFlip?: boolean;
|
|
7784
|
+
/**
|
|
7785
|
+
* Whether the floating element may slide over its anchor to stay in view.
|
|
7786
|
+
*
|
|
7787
|
+
* @remarks
|
|
7788
|
+
* By default it only slides along the side it is placed on. An anchor taller than the viewport
|
|
7789
|
+
* has room on neither side, which leaves the element off the screen.
|
|
7790
|
+
*/
|
|
7791
|
+
allowOverlapAnchor?: boolean;
|
|
7792
|
+
/**
|
|
7793
|
+
* Element the floating element is kept inside of, instead of the window.
|
|
7794
|
+
*
|
|
7795
|
+
* @remarks
|
|
7796
|
+
* The portal puts it outside whatever the anchor scrolls in, so by default only the window
|
|
7797
|
+
* constrains it. Pass the element rather than its rect, so the position is measured again as
|
|
7798
|
+
* the element moves.
|
|
7799
|
+
*/
|
|
7800
|
+
overflowBoundary?: Element;
|
|
7689
7801
|
closeOnOutsideClick?: boolean;
|
|
7690
7802
|
closeOnEscape?: boolean;
|
|
7691
7803
|
closeOnParentScroll?: boolean;
|
|
@@ -9629,6 +9741,8 @@ export declare interface IUseFloatingPositionOptions {
|
|
|
9629
9741
|
strategy?: Strategy;
|
|
9630
9742
|
offset?: OffsetOptions;
|
|
9631
9743
|
autoFlip?: boolean;
|
|
9744
|
+
allowOverlapAnchor?: boolean;
|
|
9745
|
+
overflowBoundary?: Element;
|
|
9632
9746
|
fallbackPlacements?: Placement[];
|
|
9633
9747
|
arrowRef?: RefObject<SVGSVGElement | null>;
|
|
9634
9748
|
customMiddleware?: Middleware[];
|
|
@@ -11020,7 +11134,12 @@ export declare function UiCheckbox({ checked, onChange, preventDefault, stopProp
|
|
|
11020
11134
|
/**
|
|
11021
11135
|
* @internal
|
|
11022
11136
|
*/
|
|
11023
|
-
export declare function UiChip({ label, tag, isDeletable, isActive, isLocked, isExpandable, isDisabled, maxWidth, iconBefore, iconAfter, iconColor, onClick,
|
|
11137
|
+
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;
|
|
11138
|
+
|
|
11139
|
+
/**
|
|
11140
|
+
* @internal
|
|
11141
|
+
*/
|
|
11142
|
+
export declare function UiColorPicker(props: IUiColorPickerProps): JSX.Element;
|
|
11024
11143
|
|
|
11025
11144
|
/**
|
|
11026
11145
|
* A composable combobox component that enables users to select from a filtered list of options.
|
|
@@ -11225,7 +11344,7 @@ export declare function UiErrorPage({ title, description, dataTestId, accessibil
|
|
|
11225
11344
|
*
|
|
11226
11345
|
* @internal
|
|
11227
11346
|
*/
|
|
11228
|
-
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;
|
|
11347
|
+
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;
|
|
11229
11348
|
|
|
11230
11349
|
/**
|
|
11231
11350
|
* `UiFloatingElement` plus the kit's canonical popup chrome (background,
|
|
@@ -11874,7 +11993,7 @@ export declare function useFileSelection({ rules, multiple, onValidateFile, onFi
|
|
|
11874
11993
|
*
|
|
11875
11994
|
* @internal
|
|
11876
11995
|
*/
|
|
11877
|
-
export declare function useFloatingPosition({ isOpen, onOpenChange, placement: placementProp, alignPoints, strategy, offset: offsetProp, autoFlip, fallbackPlacements: fallbackPlacementsProp, arrowRef, customMiddleware, maxWidth, maxHeight, zIndex: zIndexProp, shiftPadding }: IUseFloatingPositionOptions): IUseFloatingPositionResult;
|
|
11996
|
+
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;
|
|
11878
11997
|
|
|
11879
11998
|
/**
|
|
11880
11999
|
* @internal
|
|
@@ -12065,6 +12184,18 @@ export declare const useOverlayZIndex: (uuid: string) => number | undefined;
|
|
|
12065
12184
|
*/
|
|
12066
12185
|
export declare function useOverlayZIndexWithRegister(): number;
|
|
12067
12186
|
|
|
12187
|
+
/**
|
|
12188
|
+
* Follows a press and everything it drags through.
|
|
12189
|
+
*
|
|
12190
|
+
* @remarks
|
|
12191
|
+
* The handlers must be spread on the element the gesture is measured against: they report
|
|
12192
|
+
* `currentTarget`, and a caller that reads a child's or a parent's size instead will place the value
|
|
12193
|
+
* somewhere the pointer is not.
|
|
12194
|
+
*
|
|
12195
|
+
* @internal
|
|
12196
|
+
*/
|
|
12197
|
+
export declare function usePointerTrack(track: (event: PointerEvent_2<HTMLElement>) => void): IPointerTrackHandlers;
|
|
12198
|
+
|
|
12068
12199
|
/**
|
|
12069
12200
|
* Hook to consume responsive context.
|
|
12070
12201
|
*
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gooddata/sdk-ui-kit",
|
|
3
|
-
"version": "11.55.0-alpha.
|
|
3
|
+
"version": "11.55.0-alpha.3",
|
|
4
4
|
"description": "GoodData SDK - UI Building Components",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "GoodData Corporation",
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"@lezer/highlight": "~1.2.3",
|
|
52
52
|
"@tanstack/react-virtual": "^3.11.1",
|
|
53
53
|
"@types/mdast": "^4.0.4",
|
|
54
|
-
"@types/unist": "
|
|
54
|
+
"@types/unist": "3.0.3",
|
|
55
55
|
"classnames": "2.5.1",
|
|
56
56
|
"copy-to-clipboard": "^3.3.3",
|
|
57
57
|
"cron-parser": "5.9.0",
|
|
@@ -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.
|
|
82
|
-
"@gooddata/sdk-model": "11.55.0-alpha.
|
|
83
|
-
"@gooddata/sdk-ui
|
|
84
|
-
"@gooddata/
|
|
85
|
-
"@gooddata/
|
|
81
|
+
"@gooddata/sdk-backend-spi": "11.55.0-alpha.3",
|
|
82
|
+
"@gooddata/sdk-model": "11.55.0-alpha.3",
|
|
83
|
+
"@gooddata/sdk-ui": "11.55.0-alpha.3",
|
|
84
|
+
"@gooddata/sdk-ui-theme-provider": "11.55.0-alpha.3",
|
|
85
|
+
"@gooddata/util": "11.55.0-alpha.3"
|
|
86
86
|
},
|
|
87
87
|
"devDependencies": {
|
|
88
88
|
"@microsoft/api-documenter": "7.30.10",
|
|
@@ -106,10 +106,8 @@
|
|
|
106
106
|
"@vitest/eslint-plugin": "1.6.19",
|
|
107
107
|
"dependency-cruiser": "17.3.10",
|
|
108
108
|
"eslint": "^9.39.2",
|
|
109
|
-
"eslint-import-resolver-typescript": "4.4.4",
|
|
110
109
|
"eslint-plugin-headers": "1.3.3",
|
|
111
110
|
"eslint-plugin-import-esm": "1.2.1",
|
|
112
|
-
"eslint-plugin-import-x": "4.16.1",
|
|
113
111
|
"eslint-plugin-jsdoc": "62.1.0",
|
|
114
112
|
"eslint-plugin-no-barrel-files": "1.2.2",
|
|
115
113
|
"eslint-plugin-no-only-tests": "3.3.0",
|
|
@@ -120,7 +118,7 @@
|
|
|
120
118
|
"kefir": "3.8.8",
|
|
121
119
|
"npm-run-all": "4.1.5",
|
|
122
120
|
"oxfmt": "0.52.0",
|
|
123
|
-
"oxlint": "1.
|
|
121
|
+
"oxlint": "1.57.0",
|
|
124
122
|
"oxlint-tsgolint": "0.15.0",
|
|
125
123
|
"raf": "3.4.1",
|
|
126
124
|
"react": "19.1.1",
|
|
@@ -131,11 +129,11 @@
|
|
|
131
129
|
"typescript": "5.9.3",
|
|
132
130
|
"vitest": "4.1.8",
|
|
133
131
|
"vitest-dom": "0.1.1",
|
|
134
|
-
"@gooddata/eslint-config": "11.55.0-alpha.
|
|
135
|
-
"@gooddata/
|
|
136
|
-
"@gooddata/
|
|
137
|
-
"@gooddata/sdk-backend-mockingbird": "11.55.0-alpha.
|
|
138
|
-
"@gooddata/stylelint-config": "11.55.0-alpha.
|
|
132
|
+
"@gooddata/eslint-config": "11.55.0-alpha.3",
|
|
133
|
+
"@gooddata/reference-workspace": "11.55.0-alpha.3",
|
|
134
|
+
"@gooddata/oxlint-config": "11.55.0-alpha.3",
|
|
135
|
+
"@gooddata/sdk-backend-mockingbird": "11.55.0-alpha.3",
|
|
136
|
+
"@gooddata/stylelint-config": "11.55.0-alpha.3"
|
|
139
137
|
},
|
|
140
138
|
"peerDependencies": {
|
|
141
139
|
"react": "^18.0.0 || ^19.0.0",
|
|
@@ -7,9 +7,13 @@ $box-shadow: var(--gd-button-dropShadow, 0 -1px 0 0) var(--gd-palette-complement
|
|
|
7
7
|
|
|
8
8
|
$active-background-color: var(--gd-palette-complementary-2);
|
|
9
9
|
|
|
10
|
-
$
|
|
11
|
-
$
|
|
12
|
-
$
|
|
10
|
+
$delete-border-color: var(--gd-palette-error-base-t50);
|
|
11
|
+
$delete-background-color: var(--gd-palette-error-lightest);
|
|
12
|
+
$delete-box-shadow: var(--gd-button-dropShadow, 0 -1px 0 0) var(--gd-palette-error-base-t50) inset;
|
|
13
|
+
|
|
14
|
+
$action-border-color: var(--gd-palette-complementary-4);
|
|
15
|
+
$action-background-color: var(--gd-palette-complementary-2);
|
|
16
|
+
$action-box-shadow: var(--gd-button-dropShadow, 0 -1px 0 0) var(--gd-palette-complementary-5-t40) inset;
|
|
13
17
|
|
|
14
18
|
.gd-ui-kit-chip {
|
|
15
19
|
$root: &;
|
|
@@ -50,6 +54,15 @@ $action-box-shadow: var(--gd-button-dropShadow, 0 -1px 0 0) var(--gd-palette-err
|
|
|
50
54
|
#{$root}__trigger--isDeletable:not(:disabled) {
|
|
51
55
|
border-right: 1px solid $border-color;
|
|
52
56
|
}
|
|
57
|
+
#{$root}__trigger--isDeletable#{$root}__trigger--variant-inactive:not(:disabled) {
|
|
58
|
+
border-right: 1px dashed $border-color;
|
|
59
|
+
}
|
|
60
|
+
#{$root}__trigger--isActionable:not(:disabled) {
|
|
61
|
+
border-right: 1px solid $border-color;
|
|
62
|
+
}
|
|
63
|
+
#{$root}__trigger--isActionable#{$root}__trigger--variant-inactive:not(:disabled) {
|
|
64
|
+
border-right: 1px dashed $border-color;
|
|
65
|
+
}
|
|
53
66
|
|
|
54
67
|
&:has(#{$root}__trigger--isLocked:hover) {
|
|
55
68
|
&::after {
|
|
@@ -64,45 +77,94 @@ $action-box-shadow: var(--gd-button-dropShadow, 0 -1px 0 0) var(--gd-palette-err
|
|
|
64
77
|
}
|
|
65
78
|
|
|
66
79
|
&:has(#{$root}__delete:hover) {
|
|
80
|
+
border-color: $delete-border-color;
|
|
81
|
+
background-color: $delete-background-color;
|
|
82
|
+
|
|
83
|
+
&::after {
|
|
84
|
+
box-shadow: $delete-box-shadow;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
#{$root}__trigger:not(#{$root}__trigger--isLocked:disabled) {
|
|
88
|
+
border-color: $delete-border-color;
|
|
89
|
+
border-right: 1px solid $delete-border-color;
|
|
90
|
+
}
|
|
91
|
+
#{$root}__trigger#{$root}__trigger--variant-inactive:not(#{$root}__trigger--isLocked:disabled) {
|
|
92
|
+
border-right: 1px dashed $delete-border-color;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
#{$root}__trigger--isActive {
|
|
96
|
+
background-color: $delete-background-color;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
&:has(#{$root}__action:hover) {
|
|
67
101
|
border-color: $action-border-color;
|
|
68
102
|
background-color: $action-background-color;
|
|
69
103
|
|
|
70
104
|
&::after {
|
|
71
|
-
content: "";
|
|
72
|
-
border-radius: inherit;
|
|
73
105
|
box-shadow: $action-box-shadow;
|
|
74
|
-
position: absolute;
|
|
75
|
-
width: 100%;
|
|
76
|
-
height: 100%;
|
|
77
|
-
left: 0;
|
|
78
|
-
top: 0;
|
|
79
|
-
pointer-events: none;
|
|
80
106
|
}
|
|
81
107
|
|
|
82
108
|
#{$root}__trigger:not(#{$root}__trigger--isLocked:disabled) {
|
|
83
109
|
border-color: $action-border-color;
|
|
84
110
|
border-right: 1px solid $action-border-color;
|
|
85
111
|
}
|
|
112
|
+
#{$root}__trigger#{$root}__trigger--variant-inactive:not(#{$root}__trigger--isLocked:disabled) {
|
|
113
|
+
border-right: 1px dashed $action-border-color;
|
|
114
|
+
}
|
|
86
115
|
|
|
87
116
|
#{$root}__trigger--isActive {
|
|
88
117
|
background-color: $action-background-color;
|
|
89
118
|
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
&:has(#{$root}__delete:hover),
|
|
122
|
+
&:has(#{$root}__action:hover) {
|
|
123
|
+
&::after {
|
|
124
|
+
content: "";
|
|
125
|
+
border-radius: inherit;
|
|
126
|
+
position: absolute;
|
|
127
|
+
width: 100%;
|
|
128
|
+
height: 100%;
|
|
129
|
+
left: 0;
|
|
130
|
+
top: 0;
|
|
131
|
+
pointer-events: none;
|
|
132
|
+
}
|
|
90
133
|
|
|
91
134
|
#{$root}__delete {
|
|
92
135
|
color: var(--gd-palette-error-base);
|
|
93
136
|
}
|
|
137
|
+
#{$root}__action {
|
|
138
|
+
color: var(--gd-palette-complementary-2);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
&--variant-inactive {
|
|
143
|
+
border-style: dashed;
|
|
94
144
|
}
|
|
95
145
|
|
|
96
146
|
#{$root}__trigger--isDeletable {
|
|
97
147
|
border-right: 1px solid transparent;
|
|
98
148
|
}
|
|
99
|
-
|
|
149
|
+
#{$root}__trigger--isDeletable#{$root}__trigger--variant-inactive {
|
|
150
|
+
border-right: 1px dashed transparent;
|
|
151
|
+
}
|
|
100
152
|
#{$root}__trigger--hasIconAfter#{$root}__trigger--isDeletable {
|
|
101
153
|
padding-right: 3px;
|
|
102
154
|
}
|
|
155
|
+
#{$root}__trigger--isActionable {
|
|
156
|
+
border-right: 1px solid transparent;
|
|
157
|
+
}
|
|
158
|
+
#{$root}__trigger--isActionable#{$root}__trigger--variant-inactive {
|
|
159
|
+
border-right: 1px dashed transparent;
|
|
160
|
+
}
|
|
161
|
+
#{$root}__trigger--hasIconAfter#{$root}__trigger--isActionable {
|
|
162
|
+
padding-right: 3px;
|
|
163
|
+
}
|
|
103
164
|
|
|
104
165
|
&__trigger,
|
|
105
|
-
&__delete
|
|
166
|
+
&__delete,
|
|
167
|
+
&__action {
|
|
106
168
|
color: var(--gd-palette-complementary-7);
|
|
107
169
|
background-color: transparent;
|
|
108
170
|
border-radius: var(--gd-button-borderRadius);
|
|
@@ -129,11 +191,19 @@ $action-box-shadow: var(--gd-button-dropShadow, 0 -1px 0 0) var(--gd-palette-err
|
|
|
129
191
|
border-radius: $border-radius 0 0 $border-radius;
|
|
130
192
|
border-right: 1px solid transparent;
|
|
131
193
|
|
|
194
|
+
&--variant-inactive {
|
|
195
|
+
border-right: 1px dashed transparent;
|
|
196
|
+
color: var(--gd-palette-complementary-6);
|
|
197
|
+
}
|
|
198
|
+
|
|
132
199
|
&--isActive {
|
|
133
200
|
color: var(--gd-palette-complementary-8);
|
|
134
201
|
background-color: $active-background-color;
|
|
135
202
|
border-right: 1px solid $border-color;
|
|
136
203
|
}
|
|
204
|
+
&--isActive#{$root}__trigger--variant-inactive {
|
|
205
|
+
border-right: 1px dashed $border-color;
|
|
206
|
+
}
|
|
137
207
|
|
|
138
208
|
&--isLocked {
|
|
139
209
|
cursor: default;
|
|
@@ -147,7 +217,7 @@ $action-box-shadow: var(--gd-button-dropShadow, 0 -1px 0 0) var(--gd-palette-err
|
|
|
147
217
|
}
|
|
148
218
|
}
|
|
149
219
|
|
|
150
|
-
&:not(&:disabled) {
|
|
220
|
+
&:not(&:disabled):not(#{$root}__trigger--variant-inactive) {
|
|
151
221
|
&:hover,
|
|
152
222
|
&:focus,
|
|
153
223
|
&:active {
|
|
@@ -159,7 +229,7 @@ $action-box-shadow: var(--gd-button-dropShadow, 0 -1px 0 0) var(--gd-palette-err
|
|
|
159
229
|
}
|
|
160
230
|
}
|
|
161
231
|
|
|
162
|
-
&:not(&--isDeletable) {
|
|
232
|
+
&:not(&--isDeletable):not(&--isActionable) {
|
|
163
233
|
border-radius: $border-radius;
|
|
164
234
|
border: none;
|
|
165
235
|
}
|
|
@@ -183,6 +253,24 @@ $action-box-shadow: var(--gd-button-dropShadow, 0 -1px 0 0) var(--gd-palette-err
|
|
|
183
253
|
}
|
|
184
254
|
}
|
|
185
255
|
|
|
256
|
+
&__action {
|
|
257
|
+
flex-shrink: 0;
|
|
258
|
+
border-radius: 0 $border-radius $border-radius 0;
|
|
259
|
+
padding: 0 7px 0 3px;
|
|
260
|
+
|
|
261
|
+
&:not(&:disabled) {
|
|
262
|
+
&:hover,
|
|
263
|
+
&:focus,
|
|
264
|
+
&:active {
|
|
265
|
+
svg {
|
|
266
|
+
color: var(--gd-palette-complementary-2);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
color: var(--gd-palette-complementary-8);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
|
|
186
274
|
&__label {
|
|
187
275
|
transition: var(--gd-transition-all);
|
|
188
276
|
white-space: nowrap;
|
|
@@ -242,4 +330,11 @@ $action-box-shadow: var(--gd-button-dropShadow, 0 -1px 0 0) var(--gd-palette-err
|
|
|
242
330
|
justify-content: center;
|
|
243
331
|
transition: var(--gd-transition-all);
|
|
244
332
|
}
|
|
333
|
+
|
|
334
|
+
&__icon-action {
|
|
335
|
+
display: flex;
|
|
336
|
+
align-items: center;
|
|
337
|
+
justify-content: center;
|
|
338
|
+
transition: var(--gd-transition-all);
|
|
339
|
+
}
|
|
245
340
|
}
|
|
@@ -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
|
+
}
|
package/src/@ui/index.scss
CHANGED
|
@@ -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";
|