@gooddata/sdk-ui-kit 11.52.0-alpha.5 → 11.52.0-alpha.7

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 (46) hide show
  1. package/esm/@ui/UiAddGranteeDialog/UiAddGranteeDialogCard.d.ts +8 -1
  2. package/esm/@ui/UiAddGranteeDialog/UiAddGranteeDialogCard.d.ts.map +1 -1
  3. package/esm/@ui/UiAddGranteeDialog/UiAddGranteeDialogCard.js +3 -3
  4. package/esm/@ui/UiAddGranteeDialog/useGranteeSelection.d.ts +2 -0
  5. package/esm/@ui/UiAddGranteeDialog/useGranteeSelection.d.ts.map +1 -1
  6. package/esm/@ui/UiAddGranteeDialog/useGranteeSelection.js +4 -1
  7. package/esm/@ui/UiCombobox/UiComboboxInput.d.ts +2 -0
  8. package/esm/@ui/UiCombobox/UiComboboxInput.d.ts.map +1 -1
  9. package/esm/@ui/UiCombobox/UiComboboxInput.js +2 -2
  10. package/esm/@ui/UiGranteeAsyncPicker/UiGranteeAsyncPicker.d.ts +18 -1
  11. package/esm/@ui/UiGranteeAsyncPicker/UiGranteeAsyncPicker.d.ts.map +1 -1
  12. package/esm/@ui/UiGranteeAsyncPicker/UiGranteeAsyncPicker.js +7 -2
  13. package/esm/@ui/UiGranteeRowControls/UiGranteeRowControls.d.ts +14 -5
  14. package/esm/@ui/UiGranteeRowControls/UiGranteeRowControls.d.ts.map +1 -1
  15. package/esm/@ui/UiGranteeRowControls/UiGranteeRowControls.js +8 -7
  16. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuInteractiveItem.d.ts.map +1 -1
  17. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuInteractiveItem.js +25 -22
  18. package/esm/@ui/UiMenu/types.d.ts +1 -0
  19. package/esm/@ui/UiMenu/types.d.ts.map +1 -1
  20. package/esm/@ui/UiPermissionMenu/UiPermissionMenu.d.ts +9 -1
  21. package/esm/@ui/UiPermissionMenu/UiPermissionMenu.d.ts.map +1 -1
  22. package/esm/@ui/UiPermissionMenu/UiPermissionMenu.js +8 -4
  23. package/esm/@ui/UiTextInput/UiTextInput.d.ts +3 -1
  24. package/esm/@ui/UiTextInput/UiTextInput.d.ts.map +1 -1
  25. package/esm/@ui/UiTextInput/UiTextInput.js +2 -2
  26. package/esm/ChartSorting/ChartSorting.d.ts +2 -14
  27. package/esm/ChartSorting/ChartSorting.d.ts.map +1 -1
  28. package/esm/ChartSorting/ChartSorting.js +4 -7
  29. package/esm/Datepicker/Datepicker.d.ts +5 -56
  30. package/esm/Datepicker/Datepicker.d.ts.map +1 -1
  31. package/esm/Datepicker/Datepicker.js +145 -183
  32. package/esm/Form/InputWithNumberFormat.d.ts +0 -1
  33. package/esm/Form/InputWithNumberFormat.d.ts.map +1 -1
  34. package/esm/Form/InputWithNumberFormat.js +12 -18
  35. package/esm/index.d.ts +2 -2
  36. package/esm/index.d.ts.map +1 -1
  37. package/esm/index.js +1 -1
  38. package/esm/locales.d.ts +3 -0
  39. package/esm/locales.d.ts.map +1 -1
  40. package/esm/locales.js +1 -0
  41. package/esm/sdk-ui-kit.d.ts +57 -28
  42. package/package.json +11 -11
  43. package/src/@ui/UiMenu/UiMenu.scss +1 -1
  44. package/src/@ui/UiTextInput/UiTextInput.scss +7 -0
  45. package/styles/css/main.css +4 -1
  46. package/styles/css/main.css.map +1 -1
@@ -1,4 +1,5 @@
1
1
  import { type IUiGranteeAsyncOptions, type IUiPickedGrantee } from "../UiGranteeAsyncPicker/UiGranteeAsyncPicker.js";
2
+ import { type IUiLabelsChecklistItem } from "../UiLabelsChecklist/UiLabelsChecklist.js";
2
3
  import { type PermissionMenuLevel } from "../UiPermissionMenu/UiPermissionMenu.js";
3
4
  /**
4
5
  * @internal
@@ -25,6 +26,12 @@ export interface IUiAddGranteeDialogCardProps {
25
26
  * "SHARE" for owners) override here.
26
27
  */
27
28
  initialPermissionLevel?: PermissionMenuLevel;
29
+ /**
30
+ * Labels the picked grantees can be scoped to. Non-empty adds a Label access
31
+ * drill-in to each row's permission menu, so the scope is picked in the same
32
+ * step as the grant rather than after it. Omit for objects without labels.
33
+ */
34
+ labels?: ReadonlyArray<IUiLabelsChecklistItem>;
28
35
  /** Fires when the user clicks the header back-arrow button. */
29
36
  onBack: () => void;
30
37
  /** Fires when the user clicks the header X close button. */
@@ -52,5 +59,5 @@ export interface IUiAddGranteeDialogCardProps {
52
59
  *
53
60
  * @internal
54
61
  */
55
- export declare function UiAddGranteeDialogCard({ objectTitle, loadOptions, selectedGrantees, onSelectedGranteesChange, initialPermissionLevel, onBack, onClose, onCancel, onShare, dataTestId }: IUiAddGranteeDialogCardProps): import("react/jsx-runtime").JSX.Element;
62
+ export declare function UiAddGranteeDialogCard({ objectTitle, loadOptions, selectedGrantees, onSelectedGranteesChange, initialPermissionLevel, labels, onBack, onClose, onCancel, onShare, dataTestId }: IUiAddGranteeDialogCardProps): import("react/jsx-runtime").JSX.Element;
56
63
  //# sourceMappingURL=UiAddGranteeDialogCard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"UiAddGranteeDialogCard.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiAddGranteeDialog/UiAddGranteeDialogCard.tsx"],"names":[],"mappings":"AAWA,OAAO,EACH,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EAExB,MAAM,iDAAiD,CAAC;AAIzD,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAMnF;;GAEG;AACH,MAAM,WAAW,4BAA4B;IACzC,6EAA2E;IAC3E,WAAW,EAAE,MAAM,CAAC;IAEpB,6EAA6E;IAC7E,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACjE;;;OAGG;IACH,gBAAgB,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAClD;;;;OAIG;IACH,wBAAwB,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,IAAI,CAAC;IAC7D;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,mBAAmB,CAAC;IAE7C,+DAA+D;IAC/D,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,4DAA4D;IAC5D,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,uDAAuD;IACvD,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB;;;OAGG;IACH,OAAO,EAAE,MAAM,IAAI,CAAC;IAEpB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CAAC,EACnC,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,wBAAwB,EACxB,sBAA+B,EAC/B,MAAM,EACN,OAAO,EACP,QAAQ,EACR,OAAO,EACP,UAAU,EACb,EAAE,4BAA4B,2CAgD9B"}
1
+ {"version":3,"file":"UiAddGranteeDialogCard.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiAddGranteeDialog/UiAddGranteeDialogCard.tsx"],"names":[],"mappings":"AAWA,OAAO,EACH,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EAExB,MAAM,iDAAiD,CAAC;AAEzD,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AAGxF,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAMnF;;GAEG;AACH,MAAM,WAAW,4BAA4B;IACzC,6EAA2E;IAC3E,WAAW,EAAE,MAAM,CAAC;IAEpB,6EAA6E;IAC7E,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACjE;;;OAGG;IACH,gBAAgB,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAClD;;;;OAIG;IACH,wBAAwB,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,IAAI,CAAC;IAC7D;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,mBAAmB,CAAC;IAC7C;;;;OAIG;IACH,MAAM,CAAC,EAAE,aAAa,CAAC,sBAAsB,CAAC,CAAC;IAE/C,+DAA+D;IAC/D,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,4DAA4D;IAC5D,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,uDAAuD;IACvD,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB;;;OAGG;IACH,OAAO,EAAE,MAAM,IAAI,CAAC;IAEpB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CAAC,EACnC,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,wBAAwB,EACxB,sBAA+B,EAC/B,MAAM,EACN,MAAM,EACN,OAAO,EACP,QAAQ,EACR,OAAO,EACP,UAAU,EACb,EAAE,4BAA4B,2CAkD9B"}
@@ -23,17 +23,17 @@ const { b } = bem("gd-ui-kit-add-grantee-dialog");
23
23
  *
24
24
  * @internal
25
25
  */
26
- export function UiAddGranteeDialogCard({ objectTitle, loadOptions, selectedGrantees, onSelectedGranteesChange, initialPermissionLevel = "VIEW", onBack, onClose, onCancel, onShare, dataTestId, }) {
26
+ export function UiAddGranteeDialogCard({ objectTitle, loadOptions, selectedGrantees, onSelectedGranteesChange, initialPermissionLevel = "VIEW", labels, onBack, onClose, onCancel, onShare, dataTestId, }) {
27
27
  const intl = useIntl();
28
28
  const dialogTitle = intl.formatMessage(olpObjectShareDialogMessages.title, { title: objectTitle });
29
29
  const backButton = (_jsx(UiIconButton, { icon: "chevronLeft", variant: "tertiary", size: "small", onClick: onBack, accessibilityConfig: { ariaLabel: intl.formatMessage(olpAddGranteeDialogMessages.back) } }));
30
- const { select, changePermission, remove } = useGranteeSelection({
30
+ const { select, changePermission, changeLabels, remove } = useGranteeSelection({
31
31
  selectedGrantees,
32
32
  onSelectedGranteesChange,
33
33
  initialPermissionLevel,
34
34
  });
35
35
  return (_jsxs("div", { className: b(), "data-testid": dataTestId, children: [
36
- _jsx(UiDialogHeader, { title: dialogTitle, titleSize: "large", onClose: onClose, leading: backButton }), _jsx(UiGranteeAsyncPicker, { loadOptions: loadOptions, selectedGrantees: selectedGrantees, onSelect: select, onPermissionChange: changePermission, onRemove: remove }), _jsxs(UiDialogFooter, { divider: true, children: [
36
+ _jsx(UiDialogHeader, { title: dialogTitle, titleSize: "large", onClose: onClose, leading: backButton }), _jsx(UiGranteeAsyncPicker, { loadOptions: loadOptions, selectedGrantees: selectedGrantees, onSelect: select, onPermissionChange: changePermission, labels: labels, onLabelsChange: changeLabels, onRemove: remove }), _jsxs(UiDialogFooter, { divider: true, children: [
37
37
  _jsx(UiButton, { label: intl.formatMessage(commonDialogMessages.cancel), variant: "secondary", size: "medium", onClick: onCancel }), _jsx(UiButton, { label: intl.formatMessage(olpAddGranteeDialogMessages.add), variant: "primary", size: "medium", onClick: onShare, isDisabled: selectedGrantees.length === 0 })
38
38
  ] })
39
39
  ] }));
@@ -22,6 +22,8 @@ export interface IUseGranteeSelectionResult {
22
22
  select: (option: IUiGranteeAsyncOption) => void;
23
23
  /** Change a row's permission level. */
24
24
  changePermission: (grantee: IUiPickedGrantee, next: PermissionMenuLevel) => void;
25
+ /** Change a row's label scope. */
26
+ changeLabels: (grantee: IUiPickedGrantee, selectedLabelIds: string[]) => void;
25
27
  /** Remove a row. */
26
28
  remove: (grantee: IUiPickedGrantee) => void;
27
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useGranteeSelection.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiAddGranteeDialog/useGranteeSelection.ts"],"names":[],"mappings":"AAIA,OAAO,EACH,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACxB,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAEnF;;GAEG;AACH,MAAM,WAAW,2BAA2B;IACxC,qDAAmD;IACnD,gBAAgB,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAClD,oEAAoE;IACpE,wBAAwB,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,IAAI,CAAC;IAC7D;;;OAGG;IACH,sBAAsB,CAAC,EAAE,mBAAmB,CAAC;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACvC,uEAAqE;IACrE,MAAM,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAChD,uCAAuC;IACvC,gBAAgB,EAAE,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACjF,oBAAoB;IACpB,MAAM,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAC/C;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,EAChC,gBAAgB,EAChB,wBAAwB,EACxB,sBAA+B,EAClC,EAAE,2BAA2B,GAAG,0BAA0B,CAkC1D"}
1
+ {"version":3,"file":"useGranteeSelection.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiAddGranteeDialog/useGranteeSelection.ts"],"names":[],"mappings":"AAIA,OAAO,EACH,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACxB,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAEnF;;GAEG;AACH,MAAM,WAAW,2BAA2B;IACxC,qDAAmD;IACnD,gBAAgB,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAClD,oEAAoE;IACpE,wBAAwB,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,IAAI,CAAC;IAC7D;;;OAGG;IACH,sBAAsB,CAAC,EAAE,mBAAmB,CAAC;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACvC,uEAAqE;IACrE,MAAM,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAChD,uCAAuC;IACvC,gBAAgB,EAAE,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACjF,kCAAkC;IAClC,YAAY,EAAE,CAAC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC9E,oBAAoB;IACpB,MAAM,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAC/C;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,EAChC,gBAAgB,EAChB,wBAAwB,EACxB,sBAA+B,EAClC,EAAE,2BAA2B,GAAG,0BAA0B,CA2C1D"}
@@ -22,8 +22,11 @@ export function useGranteeSelection({ selectedGrantees, onSelectedGranteesChange
22
22
  const changePermission = useCallback((grantee, next) => {
23
23
  onSelectedGranteesChange(selectedGrantees.map((g) => (g.id === grantee.id ? { ...g, permissionLevel: next } : g)));
24
24
  }, [selectedGrantees, onSelectedGranteesChange]);
25
+ const changeLabels = useCallback((grantee, selectedLabelIds) => {
26
+ onSelectedGranteesChange(selectedGrantees.map((g) => (g.id === grantee.id ? { ...g, labelIds: selectedLabelIds } : g)));
27
+ }, [selectedGrantees, onSelectedGranteesChange]);
25
28
  const remove = useCallback((grantee) => {
26
29
  onSelectedGranteesChange(selectedGrantees.filter((g) => g.id !== grantee.id));
27
30
  }, [selectedGrantees, onSelectedGranteesChange]);
28
- return { select, changePermission, remove };
31
+ return { select, changePermission, changeLabels, remove };
29
32
  }
@@ -10,6 +10,8 @@ export interface IUiComboboxInputProps {
10
10
  accessibilityConfig?: IAccessibilityConfigBase;
11
11
  /** Visible placeholder. */
12
12
  placeholder?: string;
13
+ /** Marks the field invalid: error-colored border plus `aria-invalid`. */
14
+ isError?: boolean;
13
15
  /** Form field name forwarded to the underlying input. */
14
16
  name?: string;
15
17
  autoFocus?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"UiComboboxInput.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiCombobox/UiComboboxInput.tsx"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,UAAU,EAIlB,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAK/E,gBAAgB;AAChB,MAAM,WAAW,qBAAqB;IAClC;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,wBAAwB,CAAC;IAC/C,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IAC7D,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACxD,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACvD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe,oHAsF3B,CAAC"}
1
+ {"version":3,"file":"UiComboboxInput.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiCombobox/UiComboboxInput.tsx"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,UAAU,EAIlB,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAK/E,gBAAgB;AAChB,MAAM,WAAW,qBAAqB;IAClC;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,wBAAwB,CAAC;IAC/C,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yDAAyD;IACzD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IAC7D,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACxD,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACvD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe,oHAwF3B,CAAC"}
@@ -10,7 +10,7 @@ import { useComboboxState } from "./UiComboboxContext.js";
10
10
  * @internal
11
11
  */
12
12
  export const UiComboboxInput = forwardRef(function UiComboboxInput(props, forwardedRef) {
13
- const { accessibilityConfig, placeholder, name, autoFocus, onKeyDown: callerOnKeyDown, onFocus: callerOnFocus, onBlur: callerOnBlur, onClick: callerOnClick, dataTestId, } = props;
13
+ const { accessibilityConfig, placeholder, isError, name, autoFocus, onKeyDown: callerOnKeyDown, onFocus: callerOnFocus, onBlur: callerOnBlur, onClick: callerOnClick, dataTestId, } = props;
14
14
  const { inputValue, onInputChange, onInputKeyDown, onInputBlur, isOpen, setIsOpen, anchorRef, activeOption, listboxId, } = useComboboxState();
15
15
  const handleKeyDown = useCallback((event) => {
16
16
  onInputKeyDown(event);
@@ -29,7 +29,7 @@ export const UiComboboxInput = forwardRef(function UiComboboxInput(props, forwar
29
29
  setIsOpen(!isOpen);
30
30
  callerOnClick?.(event);
31
31
  }, [isOpen, setIsOpen, callerOnClick]);
32
- return (_jsx(UiTextInput, { inputRef: forwardedRef, wrapperRef: anchorRef, value: inputValue, onChange: onInputChange, name: name, placeholder: placeholder, autoFocus: autoFocus,
32
+ return (_jsx(UiTextInput, { inputRef: forwardedRef, wrapperRef: anchorRef, value: inputValue, onChange: onInputChange, name: name, placeholder: placeholder, isError: isError, autoFocus: autoFocus,
33
33
  // Browser autofill would overlap the listbox; the combobox
34
34
  // owns its own typeahead so we suppress all native suggestions.
35
35
  autoComplete: "off", autoCapitalize: "none", autoCorrect: "off", dataTestId: dataTestId, onKeyDown: handleKeyDown, onFocus: callerOnFocus, onBlur: handleBlur, onClick: handleClick, accessibilityConfig: {
@@ -1,5 +1,6 @@
1
1
  import { type ObjRef } from "@gooddata/sdk-model";
2
2
  import { type GranteeAvatarKind } from "../UiGranteeAvatar/UiGranteeAvatar.js";
3
+ import { type IUiLabelsChecklistItem } from "../UiLabelsChecklist/UiLabelsChecklist.js";
3
4
  import { type PermissionMenuLevel } from "../UiPermissionMenu/UiPermissionMenu.js";
4
5
  /**
5
6
  * One pickable user or group entry.
@@ -28,6 +29,12 @@ export interface IUiGranteeAsyncOption {
28
29
  export interface IUiPickedGrantee extends IUiGranteeAsyncOption {
29
30
  /** Permission level chosen for this grantee. Drives the row's permission menu trigger label. */
30
31
  permissionLevel: PermissionMenuLevel;
32
+ /**
33
+ * Label scope chosen for this grantee, as ids of the picker's `labels`.
34
+ * `undefined` means every label — the untouched default, so a consumer that
35
+ * offers no label picker never has to populate it.
36
+ */
37
+ labelIds?: ReadonlyArray<string>;
31
38
  }
32
39
  /**
33
40
  * Result returned by the consumer's loader: separate `groups` and `users` arrays
@@ -62,6 +69,16 @@ export interface IUiGranteeAsyncPickerProps {
62
69
  onPermissionChange?: (grantee: IUiPickedGrantee, next: PermissionMenuLevel) => void;
63
70
  /** Fires when the user picks Remove access in the row's permission menu. */
64
71
  onRemove?: (grantee: IUiPickedGrantee) => void;
72
+ /**
73
+ * Labels the picked grantees can be scoped to. Non-empty adds a Label access
74
+ * drill-in to each row's permission menu, so a scope can be narrowed before the
75
+ * grantee is granted anything. The row renders `grantee.labelIds`, which the consumer
76
+ * owns. Requires `onLabelsChange`: without somewhere to put the pick, the drill-in
77
+ * stays hidden rather than offering an Apply that discards it.
78
+ */
79
+ labels?: ReadonlyArray<IUiLabelsChecklistItem>;
80
+ /** Fires with the applied label scope of a picked row. Enables `labels`. */
81
+ onLabelsChange?: (grantee: IUiPickedGrantee, selectedLabelIds: string[]) => void;
65
82
  /** Test id forwarded to the root element. */
66
83
  dataTestId?: string;
67
84
  }
@@ -74,5 +91,5 @@ export interface IUiGranteeAsyncPickerProps {
74
91
  *
75
92
  * @internal
76
93
  */
77
- export declare function UiGranteeAsyncPicker({ loadOptions, selectedGrantees, onSelect, onPermissionChange, onRemove, dataTestId }: IUiGranteeAsyncPickerProps): import("react/jsx-runtime").JSX.Element;
94
+ export declare function UiGranteeAsyncPicker({ loadOptions, selectedGrantees, onSelect, onPermissionChange, onRemove, labels, onLabelsChange, dataTestId }: IUiGranteeAsyncPickerProps): import("react/jsx-runtime").JSX.Element;
78
95
  //# sourceMappingURL=UiGranteeAsyncPicker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"UiGranteeAsyncPicker.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiGranteeAsyncPicker/UiGranteeAsyncPicker.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAOlD,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAE/E,OAAO,EACH,KAAK,mBAAmB,EAG3B,MAAM,yCAAyC,CAAC;AAIjD;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IAClC,yFAAuF;IACvF,EAAE,EAAE,MAAM,CAAC;IACX;;yBAEqB;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,sBAAsB;IACtB,IAAI,EAAE,iBAAiB,CAAC;IACxB,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAiB,SAAQ,qBAAqB;IAC3D,gGAAgG;IAChG,eAAe,EAAE,mBAAmB,CAAC;CACxC;AAED;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACnC,MAAM,EAAE,qBAAqB,EAAE,CAAC;IAChC,KAAK,EAAE,qBAAqB,EAAE,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACvC;;;;;OAKG;IACH,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACjE;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IACnD,6DAA6D;IAC7D,QAAQ,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAClD,wEAAwE;IACxE,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACpF,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC/C,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAOD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,EACjC,WAAW,EACX,gBAAqB,EACrB,QAAQ,EACR,kBAAkB,EAClB,QAAQ,EACR,UAAU,EACb,EAAE,0BAA0B,2CA8G5B"}
1
+ {"version":3,"file":"UiGranteeAsyncPicker.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiGranteeAsyncPicker/UiGranteeAsyncPicker.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAOlD,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAE/E,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AACxF,OAAO,EACH,KAAK,mBAAmB,EAG3B,MAAM,yCAAyC,CAAC;AAIjD;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IAClC,yFAAuF;IACvF,EAAE,EAAE,MAAM,CAAC;IACX;;yBAEqB;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,sBAAsB;IACtB,IAAI,EAAE,iBAAiB,CAAC;IACxB,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAiB,SAAQ,qBAAqB;IAC3D,gGAAgG;IAChG,eAAe,EAAE,mBAAmB,CAAC;IACrC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CACpC;AAED;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACnC,MAAM,EAAE,qBAAqB,EAAE,CAAC;IAChC,KAAK,EAAE,qBAAqB,EAAE,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACvC;;;;;OAKG;IACH,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACjE;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IACnD,6DAA6D;IAC7D,QAAQ,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAClD,wEAAwE;IACxE,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACpF,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC/C;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,aAAa,CAAC,sBAAsB,CAAC,CAAC;IAC/C,4EAA4E;IAC5E,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACjF,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAOD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,EACjC,WAAW,EACX,gBAAqB,EACrB,QAAQ,EACR,kBAAkB,EAClB,QAAQ,EACR,MAAM,EACN,cAAc,EACd,UAAU,EACb,EAAE,0BAA0B,2CAuH5B"}
@@ -18,7 +18,7 @@ const { b, e } = bem("gd-ui-kit-grantee-async-picker");
18
18
  *
19
19
  * @internal
20
20
  */
21
- export function UiGranteeAsyncPicker({ loadOptions, selectedGrantees = [], onSelect, onPermissionChange, onRemove, dataTestId, }) {
21
+ export function UiGranteeAsyncPicker({ loadOptions, selectedGrantees = [], onSelect, onPermissionChange, onRemove, labels, onLabelsChange, dataTestId, }) {
22
22
  const intl = useIntl();
23
23
  const groupsLabel = intl.formatMessage(uiGranteeAsyncPickerMessages.sectionGroups);
24
24
  const usersLabel = intl.formatMessage(uiGranteeAsyncPickerMessages.sectionUsers);
@@ -58,6 +58,11 @@ export function UiGranteeAsyncPicker({ loadOptions, selectedGrantees = [], onSel
58
58
  stateNoMatch: intl.formatMessage(uiGranteeAsyncPickerMessages.stateNoMatch),
59
59
  }), [intl]);
60
60
  const fieldLabel = intl.formatMessage(olpAddGranteeDialogMessages.userOrGroup);
61
+ // A row with no scope of its own covers every label (see `labelIds`). The drill-in is
62
+ // offered only when the pick has somewhere to go — otherwise Apply would silently
63
+ // discard it.
64
+ const scopeLabels = onLabelsChange ? labels : undefined;
65
+ const allLabelIds = useMemo(() => (scopeLabels ?? []).map((l) => l.id), [scopeLabels]);
61
66
  return (_jsxs("div", { className: b(), "data-testid": dataTestId, children: [
62
67
  _jsxs("div", { className: e("field"), children: [
63
68
  _jsx("div", { className: e("field-label"), children: fieldLabel }), _jsx(UiAutocomplete, { loadOptions: adaptedLoadOptions, selectedIds: selectedIds, onSelect: handleSelect, messages: autocompleteMessages, accessibilityConfig: {
@@ -65,6 +70,6 @@ export function UiGranteeAsyncPicker({ loadOptions, selectedGrantees = [], onSel
65
70
  } })
66
71
  ] }), selectedGrantees.length === 0 ? (_jsx("div", { className: e("empty-state"), children: intl.formatMessage(olpAddGranteeDialogMessages.emptyState) })) : null, selectedGrantees.length > 0 ? (_jsx("ul", { className: e("picked-list"), children: selectedGrantees.map((g) => {
67
72
  const triggerLabel = intl.formatMessage(permissionLevelMessage(g.permissionLevel));
68
- return (_jsx("li", { className: e("picked-item"), children: _jsx(UiGranteeRow, { kind: g.kind, name: g.name, email: g.email, controls: _jsx(UiPermissionMenu, { selectedLevel: g.permissionLevel, onPermissionChange: (next) => onPermissionChange?.(g, next), onRemoveAccess: onRemove ? () => onRemove(g) : undefined, anchor: _jsx(UiButton, { label: triggerLabel, variant: "dropdownInline", size: "small", iconAfter: "navigateDown" }) }) }) }, g.id));
73
+ return (_jsx("li", { className: e("picked-item"), children: _jsx(UiGranteeRow, { kind: g.kind, name: g.name, email: g.email, controls: _jsx(UiPermissionMenu, { selectedLevel: g.permissionLevel, onPermissionChange: (next) => onPermissionChange?.(g, next), labels: scopeLabels, selectedLabelIds: g.labelIds ?? allLabelIds, onLabelsChange: (ids) => onLabelsChange?.(g, ids), onRemoveAccess: onRemove ? () => onRemove(g) : undefined, anchor: _jsx(UiButton, { label: triggerLabel, variant: "dropdownInline", size: "small", iconAfter: "navigateDown" }) }) }) }, g.id));
69
74
  }) })) : null] }));
70
75
  }
@@ -11,10 +11,12 @@ export interface IUiGranteeRowControlsProps {
11
11
  /** The grantee's current permission level — anchors the permission menu. */
12
12
  permissionLevel: AccessGranularPermission;
13
13
  /**
14
- * CONTRACT: set only when the grantee inherits a higher permission than
15
- * `permissionLevel` (e.g. via a group) the control renders the warning badge
16
- * whenever this is set and does not re-check the ordering. Undefined when the
17
- * assigned level already is the effective one.
14
+ * CONTRACT: set to the INHERITED level whenever inheritance — from a group or a
15
+ * parent workspace is what decides this row's level: either it outranks the grant
16
+ * made here, or there is no local grant at all and the whole level is inherited (then
17
+ * it equals `permissionLevel`, VIEW included). The control renders the warning badge
18
+ * whenever this is set and does not re-check the ordering. Undefined when the level
19
+ * granted here already is the effective one.
18
20
  */
19
21
  effectivePermission?: AccessGranularPermission;
20
22
  /** Levels rendered disabled in the permission menu — see {@link UiPermissionMenu}. */
@@ -24,6 +26,13 @@ export interface IUiGranteeRowControlsProps {
24
26
  onLabelsChange: (selectedIds: string[]) => void;
25
27
  onPermissionChange: (level: PermissionMenuLevel) => void;
26
28
  onRemoveAccess?: () => void;
29
+ /**
30
+ * Renders Remove access disabled instead of hiding it — e.g. for a grantee whose
31
+ * access is inherited, so there is no grant here to revoke.
32
+ */
33
+ isRemoveDisabled?: boolean;
34
+ /** Tooltip shown on Remove access while it is disabled. */
35
+ removeDisabledTooltip?: string;
27
36
  /** Disables the permission trigger, e.g. while the row's change is saving. */
28
37
  isDisabled?: boolean;
29
38
  dataTestId?: string;
@@ -35,5 +44,5 @@ export interface IUiGranteeRowControlsProps {
35
44
  *
36
45
  * @internal
37
46
  */
38
- export declare function UiGranteeRowControls({ labels, selectedLabelIds, permissionLevel, effectivePermission, disabledLevels, disabledTooltip, onLabelsChange, onPermissionChange, onRemoveAccess, isDisabled, dataTestId }: IUiGranteeRowControlsProps): import("react/jsx-runtime").JSX.Element;
47
+ export declare function UiGranteeRowControls({ labels, selectedLabelIds, permissionLevel, effectivePermission, disabledLevels, disabledTooltip, onLabelsChange, onPermissionChange, onRemoveAccess, isRemoveDisabled, removeDisabledTooltip, isDisabled, dataTestId }: IUiGranteeRowControlsProps): import("react/jsx-runtime").JSX.Element;
39
48
  //# sourceMappingURL=UiGranteeRowControls.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"UiGranteeRowControls.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiGranteeRowControls/UiGranteeRowControls.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAMpE,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AACxF,OAAO,EACH,KAAK,mBAAmB,EAG3B,MAAM,yCAAyC,CAAC;AAYjD;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACvC,mDAAmD;IACnD,MAAM,EAAE,aAAa,CAAC,sBAAsB,CAAC,CAAC;IAC9C,gBAAgB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACxC,8EAA4E;IAC5E,eAAe,EAAE,wBAAwB,CAAC;IAC1C;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,wBAAwB,CAAC;IAC/C,wFAAsF;IACtF,cAAc,CAAC,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;IACpD,8EAA8E;IAC9E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAChD,kBAAkB,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACzD,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,8EAA8E;IAC9E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,EACjC,MAAM,EACN,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,UAAU,EACV,UAAU,EACb,EAAE,0BAA0B,2CAuD5B"}
1
+ {"version":3,"file":"UiGranteeRowControls.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiGranteeRowControls/UiGranteeRowControls.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAMpE,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AACxF,OAAO,EACH,KAAK,mBAAmB,EAG3B,MAAM,yCAAyC,CAAC;AAcjD;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACvC,mDAAmD;IACnD,MAAM,EAAE,aAAa,CAAC,sBAAsB,CAAC,CAAC;IAC9C,gBAAgB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACxC,8EAA4E;IAC5E,eAAe,EAAE,wBAAwB,CAAC;IAC1C;;;;;;;OAOG;IACH,mBAAmB,CAAC,EAAE,wBAAwB,CAAC;IAC/C,wFAAsF;IACtF,cAAc,CAAC,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;IACpD,8EAA8E;IAC9E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAChD,kBAAkB,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACzD,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,2DAA2D;IAC3D,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,8EAA8E;IAC9E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,EACjC,MAAM,EACN,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,qBAAqB,EACrB,UAAU,EACV,UAAU,EACb,EAAE,0BAA0B,2CAwD5B"}
@@ -8,11 +8,13 @@ import { UiIcon } from "../UiIcon/UiIcon.js";
8
8
  import { UiPermissionMenu, permissionLevelMessage, } from "../UiPermissionMenu/UiPermissionMenu.js";
9
9
  import { UiTooltip } from "../UiTooltip/UiTooltip.js";
10
10
  const { b, e } = bem("gd-ui-kit-grantee-row-controls");
11
- // The warning badge names an inherited EDIT or SHARE. VIEW can never be the
12
- // higher level and has no entry an absent entry means "no badge".
11
+ // The warning badge names the inherited level. VIEW is here because an inherited-only
12
+ // grantee's whole level comes from inheritance, so it needs the badge at any level —
13
+ // including VIEW, where nothing is "higher" but the access is still not ours to change.
13
14
  const EFFECTIVE_PERMISSION_TOOLTIP = {
14
15
  EDIT: olpPermissionMessages.effectivePermissionTooltipEdit,
15
16
  SHARE: olpPermissionMessages.effectivePermissionTooltipShare,
17
+ VIEW: olpPermissionMessages.effectivePermissionTooltipView,
16
18
  };
17
19
  /**
18
20
  * Per-row controls in the OLP share dialog: the permission dropdown
@@ -21,16 +23,15 @@ const EFFECTIVE_PERMISSION_TOOLTIP = {
21
23
  *
22
24
  * @internal
23
25
  */
24
- export function UiGranteeRowControls({ labels, selectedLabelIds, permissionLevel, effectivePermission, disabledLevels, disabledTooltip, onLabelsChange, onPermissionChange, onRemoveAccess, isDisabled, dataTestId, }) {
26
+ export function UiGranteeRowControls({ labels, selectedLabelIds, permissionLevel, effectivePermission, disabledLevels, disabledTooltip, onLabelsChange, onPermissionChange, onRemoveAccess, isRemoveDisabled, removeDisabledTooltip, isDisabled, dataTestId, }) {
25
27
  const intl = useIntl();
26
28
  const hasLabels = labels.length > 0;
27
- // The caller sets `effectivePermission` only when it outranks the assigned level
28
- // (the ext side owns that comparison) — render the badge whenever it is set and
29
- // has tooltip copy, without re-deriving the level ordering here.
29
+ // The caller decides when inheritance drives the row (see the prop's contract) —
30
+ // render the badge whenever it is set, without re-deriving the level ordering here.
30
31
  const inheritedTooltipMessage = effectivePermission === undefined ? undefined : EFFECTIVE_PERMISSION_TOOLTIP[effectivePermission];
31
32
  const effectiveTooltip = inheritedTooltipMessage
32
33
  ? intl.formatMessage(inheritedTooltipMessage)
33
34
  : undefined;
34
- return (_jsxs("div", { className: b(), "data-testid": dataTestId, children: [effectiveTooltip ? (_jsx(UiTooltip, { triggerBy: ["hover", "focus"], content: effectiveTooltip, anchor: _jsx("span", { className: e("effective-warning"), role: "img", "aria-label": intl.formatMessage(olpPermissionMessages.effectivePermissionAriaLabel), tabIndex: 0, children: _jsx(UiIcon, { type: "warning", size: 16, color: "warning" }) }) })) : null, _jsx(UiPermissionMenu, { anchor: _jsx(UiButton, { label: intl.formatMessage(permissionLevelMessage(permissionLevel)), size: "small", variant: "dropdownInline", iconAfter: "navigateDown", isDisabled: isDisabled }), selectedLevel: permissionLevel, onPermissionChange: onPermissionChange, disabledLevels: disabledLevels, disabledTooltip: disabledTooltip, labels: hasLabels ? labels : undefined, selectedLabelIds: selectedLabelIds, onLabelsChange: onLabelsChange, onRemoveAccess: onRemoveAccess })
35
+ return (_jsxs("div", { className: b(), "data-testid": dataTestId, children: [effectiveTooltip ? (_jsx(UiTooltip, { triggerBy: ["hover", "focus"], content: effectiveTooltip, anchor: _jsx("span", { className: e("effective-warning"), role: "img", "aria-label": intl.formatMessage(olpPermissionMessages.effectivePermissionAriaLabel), tabIndex: 0, children: _jsx(UiIcon, { type: "warning", size: 16, color: "warning" }) }) })) : null, _jsx(UiPermissionMenu, { anchor: _jsx(UiButton, { label: intl.formatMessage(permissionLevelMessage(permissionLevel)), size: "small", variant: "dropdownInline", iconAfter: "navigateDown", isDisabled: isDisabled }), selectedLevel: permissionLevel, onPermissionChange: onPermissionChange, disabledLevels: disabledLevels, disabledTooltip: disabledTooltip, labels: hasLabels ? labels : undefined, selectedLabelIds: selectedLabelIds, onLabelsChange: onLabelsChange, onRemoveAccess: onRemoveAccess, isRemoveDisabled: isRemoveDisabled, removeDisabledTooltip: removeDisabledTooltip })
35
36
  ] }));
36
37
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultUiMenuInteractiveItem.d.ts","sourceRoot":"","sources":["../../../../../src/@ui/UiMenu/components/defaults/DefaultUiMenuInteractiveItem.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAuC,KAAK,SAAS,EAAyB,MAAM,OAAO,CAAC;AASnG,OAAO,EAEH,KAAK,2BAA2B,EAChC,KAAK,kCAAkC,EACvC,KAAK,eAAe,EACvB,MAAM,gBAAgB,CAAC;AAUxB;;GAEG;AACH,wBAAgB,mCAAmC,CAAC,CAAC,SAAS,eAAe,GAAG,MAAM,EAAE,EACpF,IAAI,EACP,EAAE,kCAAkC,CAAC,CAAC,CAAC,GAAG,SAAS,CAiHnD;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,CAAC,SAAS,eAAe,GAAG,MAAM,EAAE,EAC7E,IAAI,EACJ,SAAS,EACT,aAAa,EAChB,EAAE,2BAA2B,CAAC,CAAC,CAAC,GAAG,SAAS,CAoC5C"}
1
+ {"version":3,"file":"DefaultUiMenuInteractiveItem.d.ts","sourceRoot":"","sources":["../../../../../src/@ui/UiMenu/components/defaults/DefaultUiMenuInteractiveItem.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAuC,KAAK,SAAS,EAAyB,MAAM,OAAO,CAAC;AASnG,OAAO,EAEH,KAAK,2BAA2B,EAChC,KAAK,kCAAkC,EACvC,KAAK,eAAe,EACvB,MAAM,gBAAgB,CAAC;AAmBxB;;GAEG;AACH,wBAAgB,mCAAmC,CAAC,CAAC,SAAS,eAAe,GAAG,MAAM,EAAE,EACpF,IAAI,EACP,EAAE,kCAAkC,CAAC,CAAC,CAAC,GAAG,SAAS,CAsGnD;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,CAAC,SAAS,eAAe,GAAG,MAAM,EAAE,EAC7E,IAAI,EACJ,SAAS,EACT,aAAa,EAChB,EAAE,2BAA2B,CAAC,CAAC,CAAC,GAAG,SAAS,CAoD5C"}
@@ -7,9 +7,18 @@ import { useCloseOnEscape } from "../../../hooks/useCloseOnEscape.js";
7
7
  import { UiTooltip } from "../../../UiTooltip/UiTooltip.js";
8
8
  import { typedUiMenuContextStore } from "../../context.js";
9
9
  import { e } from "../../menuBem.js";
10
- function getTooltipId(item, makeItemId) {
11
- const itemId = makeItemId(item);
12
- return item.tooltip && itemId ? `${itemId}__tooltip` : undefined;
10
+ function hasIconTooltip(item) {
11
+ return !!item.tooltip && !!item.iconRight;
12
+ }
13
+ function getItemRole(selectionRole) {
14
+ switch (selectionRole) {
15
+ case "radio":
16
+ return "menuitemradio";
17
+ case "checkbox":
18
+ return "menuitemcheckbox";
19
+ default:
20
+ return "menuitem";
21
+ }
13
22
  }
14
23
  /**
15
24
  * @internal
@@ -50,7 +59,7 @@ export function DefaultUiMenuInteractiveItemWrapper({ item, }) {
50
59
  }
51
60
  }
52
61
  const isTooltipOpen = !!item.tooltip && isKeyboardFocused && !isDismissed;
53
- useCloseOnEscape(isTooltipOpen, () => setIsDismissed(true), true);
62
+ useCloseOnEscape(isTooltipOpen && !hasIconTooltip(item), () => setIsDismissed(true), true);
54
63
  const handleMouseFocus = useCallback(() => {
55
64
  if (controlType !== "mouse") {
56
65
  return;
@@ -69,27 +78,21 @@ export function DefaultUiMenuInteractiveItemWrapper({ item, }) {
69
78
  isDestructive: !!item.isDestructive,
70
79
  }), typeof itemClassName === "function" ? itemClassName(item) : itemClassName);
71
80
  const dataTestId = typeof itemDataTestId === "function" ? itemDataTestId(item) : itemDataTestId;
72
- const tooltipId = getTooltipId(item, makeItemId);
73
- // Only link while open — the sr-only copy it points to is empty otherwise.
74
- return (_jsx("li", { ref: scrollToItem, role: "menuitem", ...item.ariaAttributes, "aria-haspopup": item.subItems ? "menu" : item.ariaAttributes?.["aria-haspopup"], "aria-disabled": item.isDisabled, "aria-label": item.tooltip
75
- ? (item.ariaAttributes?.["aria-label"] ?? item.stringTitle)
76
- : item.ariaAttributes?.["aria-label"], "aria-describedby": isTooltipOpen
77
- ? [tooltipId, item.ariaAttributes?.["aria-describedby"]].filter(Boolean).join(" ") ||
78
- undefined
79
- : item.ariaAttributes?.["aria-describedby"], onMouseMove: handleMouseFocus, onClick: item.isDisabled ? undefined : handleSelect, tabIndex: -1, id: makeItemId(item), className: classNames, "data-testid": dataTestId, children: _jsx(InteractiveItemComponent, { item: item, isFocused: isFocused, isTooltipOpen: isTooltipOpen }) }));
81
+ return (_jsx("li", { ref: scrollToItem, ...item.ariaAttributes, role: getItemRole(item.selectionRole), "aria-checked": item.selectionRole ? !!item.isSelected : item.ariaAttributes?.["aria-checked"], "aria-haspopup": item.subItems ? "menu" : item.ariaAttributes?.["aria-haspopup"], "aria-disabled": item.isDisabled, "aria-label": item.ariaAttributes?.["aria-label"], onMouseMove: handleMouseFocus, onClick: item.isDisabled ? undefined : handleSelect, tabIndex: -1, id: makeItemId(item), className: classNames, "data-testid": dataTestId, children: _jsx(InteractiveItemComponent, { item: item, isFocused: isFocused, isTooltipOpen: isTooltipOpen }) }));
80
82
  }
81
83
  /**
82
84
  * @internal
83
85
  */
84
86
  export function DefaultUiMenuInteractiveItem({ item, isFocused, isTooltipOpen, }) {
85
- const { useContextStore, createSelector } = typedUiMenuContextStore();
86
- const selector = createSelector((ctx) => ({ makeItemId: ctx.makeItemId }));
87
- const { makeItemId } = useContextStore(selector);
88
- const tooltipId = getTooltipId(item, makeItemId);
89
- return (_jsx(UiTooltip, { id: tooltipId, anchor: _jsxs("div", { className: e("item", {
90
- isFocused,
91
- isSelected: !!item.isSelected,
92
- isDisabled: !!item.isDisabled,
93
- isDestructive: !!item.isDestructive,
94
- }), children: [item.iconLeft ? item.iconLeft : null, _jsx(ShortenedText, { className: e("item-title"), ellipsisPosition: "end", children: item.stringTitle }), !!item.subItems && _jsx("i", { className: "gd-icon-navigateright" }), item.iconRight ? item.iconRight : null] }), content: item.tooltip, disabled: !item.tooltip, optimalPlacement: true, isOpen: isTooltipOpen ? true : undefined, triggerBy: ["hover"], arrowPlacement: "left", width: item.tooltipWidth }));
87
+ const useIconTooltip = hasIconTooltip(item);
88
+ const itemInner = (_jsxs("div", { className: e("item", {
89
+ isFocused,
90
+ isSelected: !!item.isSelected,
91
+ isDisabled: !!item.isDisabled,
92
+ isDestructive: !!item.isDestructive,
93
+ }), children: [item.iconLeft ? item.iconLeft : null, _jsx(ShortenedText, { className: e("item-title"), ellipsisPosition: "end", children: item.stringTitle }), !!item.subItems && _jsx("i", { className: "gd-icon-navigateright" }), useIconTooltip ? (_jsx(UiTooltip, { anchor: item.iconRight, content: item.tooltip, optimalPlacement: true, triggerBy: ["hover"], inlineAnchor: true, accessibilityHidden: true, arrowPlacement: "bottom-end", width: item.tooltipWidth })) : item.iconRight ? (item.iconRight) : null, item.tooltip ? _jsx("span", { className: "sr-only", children: item.tooltip }) : null] }));
94
+ if (!item.tooltip) {
95
+ return itemInner;
96
+ }
97
+ return (_jsx(UiTooltip, { anchor: itemInner, content: item.tooltip, optimalPlacement: true, isOpen: useIconTooltip ? isTooltipOpen : isTooltipOpen || undefined, triggerBy: useIconTooltip ? [] : ["hover"], accessibilityHidden: true, arrowPlacement: "left", width: item.tooltipWidth }));
95
98
  }
@@ -34,6 +34,7 @@ export type IUiMenuInteractiveItem<T extends IUiMenuItemData = object> = {
34
34
  stringTitle: string;
35
35
  isDisabled?: boolean;
36
36
  isSelected?: boolean;
37
+ selectionRole?: "radio" | "checkbox";
37
38
  isDestructive?: boolean;
38
39
  tooltip?: ReactNode;
39
40
  tooltipWidth?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiMenu/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiMenu/types.ts"],"names":[],"mappings":"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"}
@@ -44,6 +44,14 @@ export interface IUiPermissionMenuProps {
44
44
  onLabelsChange?: (selectedIds: string[]) => void;
45
45
  /** Fires when the user picks Remove access. */
46
46
  onRemoveAccess?: () => void;
47
+ /**
48
+ * Renders Remove access disabled (`aria-disabled`, click blocked) instead of
49
+ * hiding it — e.g. for a grantee whose access is inherited, so there is nothing
50
+ * to remove here. Pair with `removeDisabledTooltip` to say why.
51
+ */
52
+ isRemoveDisabled?: boolean;
53
+ /** Tooltip shown on Remove access while it is disabled. */
54
+ removeDisabledTooltip?: string;
47
55
  /** Test id forwarded to the menu body. */
48
56
  dataTestId?: string;
49
57
  }
@@ -56,5 +64,5 @@ export interface IUiPermissionMenuProps {
56
64
  *
57
65
  * @internal
58
66
  */
59
- export declare function UiPermissionMenu({ anchor, selectedLevel, onPermissionChange, disabledLevels, disabledTooltip, labels, selectedLabelIds, onLabelsChange, onRemoveAccess, dataTestId }: IUiPermissionMenuProps): import("react/jsx-runtime").JSX.Element;
67
+ export declare function UiPermissionMenu({ anchor, selectedLevel, onPermissionChange, disabledLevels, disabledTooltip, labels, selectedLabelIds, onLabelsChange, onRemoveAccess, isRemoveDisabled, removeDisabledTooltip, dataTestId }: IUiPermissionMenuProps): import("react/jsx-runtime").JSX.Element;
60
68
  //# sourceMappingURL=UiPermissionMenu.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"UiPermissionMenu.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiPermissionMenu/UiPermissionMenu.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,YAAY,EAAiC,MAAM,OAAO,CAAC;AAE7F,OAAO,EAAE,KAAK,iBAAiB,EAAW,MAAM,YAAY,CAAC;AAO7D,OAAO,EAAE,KAAK,sBAAsB,EAAqB,MAAM,2CAA2C,CAAC;AAM3G;;;;;;GAMG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAQ5D;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,mBAAmB,GAAG,iBAAiB,CAEpF;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACnC,4CAA4C;IAC5C,MAAM,EAAE,YAAY,CAAC;IACrB,qEAAmE;IACnE,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,oDAAoD;IACpD,kBAAkB,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACzD;;;OAGG;IACH,cAAc,CAAC,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;IACpD,8EAA8E;IAC9E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,MAAM,CAAC,EAAE,aAAa,CAAC,sBAAsB,CAAC,CAAC;IAC/C,mDAAmD;IACnD,gBAAgB,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACzC,uEAAuE;IACvE,cAAc,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACjD,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,0CAA0C;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAsBD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,EAC7B,MAAM,EACN,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,MAAM,EACN,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,UAAU,EACb,EAAE,sBAAsB,2CAuBxB"}
1
+ {"version":3,"file":"UiPermissionMenu.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiPermissionMenu/UiPermissionMenu.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,YAAY,EAAiC,MAAM,OAAO,CAAC;AAE7F,OAAO,EAAE,KAAK,iBAAiB,EAAW,MAAM,YAAY,CAAC;AAO7D,OAAO,EAAE,KAAK,sBAAsB,EAAqB,MAAM,2CAA2C,CAAC;AAM3G;;;;;;GAMG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAQ5D;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,mBAAmB,GAAG,iBAAiB,CAEpF;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACnC,4CAA4C;IAC5C,MAAM,EAAE,YAAY,CAAC;IACrB,qEAAmE;IACnE,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,oDAAoD;IACpD,kBAAkB,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACzD;;;OAGG;IACH,cAAc,CAAC,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;IACpD,8EAA8E;IAC9E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,MAAM,CAAC,EAAE,aAAa,CAAC,sBAAsB,CAAC,CAAC;IAC/C,mDAAmD;IACnD,gBAAgB,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACzC,uEAAuE;IACvE,cAAc,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACjD,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,2DAA2D;IAC3D,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,0CAA0C;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAsBD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,EAC7B,MAAM,EACN,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,MAAM,EACN,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,qBAAqB,EACrB,UAAU,EACb,EAAE,sBAAsB,2CAyBxB"}
@@ -33,11 +33,11 @@ export function permissionLevelMessage(level) {
33
33
  *
34
34
  * @internal
35
35
  */
36
- export function UiPermissionMenu({ anchor, selectedLevel, onPermissionChange, disabledLevels, disabledTooltip, labels, selectedLabelIds, onLabelsChange, onRemoveAccess, dataTestId, }) {
36
+ export function UiPermissionMenu({ anchor, selectedLevel, onPermissionChange, disabledLevels, disabledTooltip, labels, selectedLabelIds, onLabelsChange, onRemoveAccess, isRemoveDisabled, removeDisabledTooltip, dataTestId, }) {
37
37
  const hasLabels = (labels?.length ?? 0) > 0;
38
- return (_jsx(UiPopover, { anchor: anchor, anchorAccessibilityConfig: { ariaHaspopup: "menu" }, width: hasLabels ? 200 : 180, content: ({ onClose }) => (_jsx(MenuBody, { selectedLevel: selectedLevel, onPermissionChange: onPermissionChange, disabledLevels: disabledLevels, disabledTooltip: disabledTooltip, labels: labels, selectedLabelIds: selectedLabelIds, onLabelsChange: onLabelsChange, onRemoveAccess: onRemoveAccess, onClose: onClose, dataTestId: dataTestId })) }));
38
+ return (_jsx(UiPopover, { anchor: anchor, anchorAccessibilityConfig: { ariaHaspopup: "menu" }, width: hasLabels ? 200 : 180, content: ({ onClose }) => (_jsx(MenuBody, { selectedLevel: selectedLevel, onPermissionChange: onPermissionChange, disabledLevels: disabledLevels, disabledTooltip: disabledTooltip, labels: labels, selectedLabelIds: selectedLabelIds, onLabelsChange: onLabelsChange, onRemoveAccess: onRemoveAccess, isRemoveDisabled: isRemoveDisabled, removeDisabledTooltip: removeDisabledTooltip, onClose: onClose, dataTestId: dataTestId })) }));
39
39
  }
40
- function MenuBody({ selectedLevel, onPermissionChange, disabledLevels, disabledTooltip, labels, selectedLabelIds, onLabelsChange, onRemoveAccess, onClose, dataTestId, }) {
40
+ function MenuBody({ selectedLevel, onPermissionChange, disabledLevels, disabledTooltip, labels, selectedLabelIds, onLabelsChange, onRemoveAccess, isRemoveDisabled, removeDisabledTooltip, onClose, dataTestId, }) {
41
41
  const intl = useIntl();
42
42
  // Drill-in state — swaps the row list for the labels checklist. Local to the
43
43
  // popover content, so it resets every time the menu opens. `origin` is what
@@ -83,11 +83,15 @@ function MenuBody({ selectedLevel, onPermissionChange, disabledLevels, disabledT
83
83
  });
84
84
  }
85
85
  if (onRemoveAccess) {
86
+ // Offered disabled rather than hidden when there is nothing to remove, so the
87
+ // row can explain why instead of the action silently going missing.
86
88
  actionItems.push({
87
89
  key: "remove",
88
90
  label: intl.formatMessage(olpPermissionMessages.removeAccess),
89
91
  icon: "trash",
90
- onClick: choose(onRemoveAccess),
92
+ tooltip: isRemoveDisabled ? removeDisabledTooltip : undefined,
93
+ disabled: isRemoveDisabled,
94
+ onClick: isRemoveDisabled ? () => { } : choose(onRemoveAccess),
91
95
  });
92
96
  }
93
97
  const menuRef = useRef(null);
@@ -41,6 +41,8 @@ export interface IUiTextInputProps {
41
41
  onIconAfter?: IUiTextInputIconAfterButton;
42
42
  /** Accessibility config forwarded to the input element. */
43
43
  accessibilityConfig?: IAccessibilityConfigBase;
44
+ /** Marks the field invalid: error-colored border plus `aria-invalid`. */
45
+ isError?: boolean;
44
46
  disabled?: boolean;
45
47
  autoFocus?: boolean;
46
48
  /** Forwarded to the input element. Use for autocomplete / combobox patterns. */
@@ -72,5 +74,5 @@ export interface IUiTextInputProps {
72
74
  *
73
75
  * @internal
74
76
  */
75
- export declare function UiTextInput({ type, value, onChange, label, placeholder, iconBefore, iconAfter, onIconAfter, accessibilityConfig, disabled, autoFocus, onKeyDown, onFocus, onBlur, onClick, dataTestId, inputRef, wrapperRef, name, autoComplete, autoCapitalize, autoCorrect }: IUiTextInputProps): import("react/jsx-runtime").JSX.Element;
77
+ export declare function UiTextInput({ type, value, onChange, label, placeholder, iconBefore, iconAfter, onIconAfter, accessibilityConfig, isError, disabled, autoFocus, onKeyDown, onFocus, onBlur, onClick, dataTestId, inputRef, wrapperRef, name, autoComplete, autoCapitalize, autoCorrect }: IUiTextInputProps): import("react/jsx-runtime").JSX.Element;
76
78
  //# sourceMappingURL=UiTextInput.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"UiTextInput.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiTextInput/UiTextInput.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEH,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,GAAG,EAEX,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAE/E,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAOlD;;;;;GAKG;AACH,MAAM,WAAW,2BAA2B;IACxC,uCAAuC;IACvC,IAAI,EAAE,QAAQ,CAAC;IACf,sBAAsB;IACtB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC;IAC3C,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,QAAQ,CAAC;IACtB,mFAAmF;IACnF,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB;;;;OAIG;IACH,WAAW,CAAC,EAAE,2BAA2B,CAAC;IAC1C,2DAA2D;IAC3D,mBAAmB,CAAC,EAAE,wBAAwB,CAAC;IAC/C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gFAAgF;IAChF,SAAS,CAAC,EAAE,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;IACnD,sCAAsC;IACtC,OAAO,CAAC,EAAE,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IAC9C,sCAAsC;IACtC,MAAM,CAAC,EAAE,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IAC7C,sCAAsC;IACtC,OAAO,CAAC,EAAE,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IAC9C,8CAA8C;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACjC,yFAAyF;IACzF,UAAU,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,EACxB,IAAa,EACb,KAAK,EACL,QAAQ,EACR,KAAK,EACL,WAAW,EACX,UAAU,EACV,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,QAAgB,EAChB,SAAiB,EACjB,SAAS,EACT,OAAO,EACP,MAAM,EACN,OAAO,EACP,UAAU,EACV,QAAQ,EACR,UAAU,EACV,IAAI,EACJ,YAAY,EACZ,cAAc,EACd,WAAW,EACd,EAAE,iBAAiB,2CA4DnB"}
1
+ {"version":3,"file":"UiTextInput.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiTextInput/UiTextInput.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEH,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,GAAG,EAEX,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAE/E,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAOlD;;;;;GAKG;AACH,MAAM,WAAW,2BAA2B;IACxC,uCAAuC;IACvC,IAAI,EAAE,QAAQ,CAAC;IACf,sBAAsB;IACtB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC;IAC3C,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,QAAQ,CAAC;IACtB,mFAAmF;IACnF,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB;;;;OAIG;IACH,WAAW,CAAC,EAAE,2BAA2B,CAAC;IAC1C,2DAA2D;IAC3D,mBAAmB,CAAC,EAAE,wBAAwB,CAAC;IAC/C,yEAAyE;IACzE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gFAAgF;IAChF,SAAS,CAAC,EAAE,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;IACnD,sCAAsC;IACtC,OAAO,CAAC,EAAE,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IAC9C,sCAAsC;IACtC,MAAM,CAAC,EAAE,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IAC7C,sCAAsC;IACtC,OAAO,CAAC,EAAE,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IAC9C,8CAA8C;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACjC,yFAAyF;IACzF,UAAU,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,EACxB,IAAa,EACb,KAAK,EACL,QAAQ,EACR,KAAK,EACL,WAAW,EACX,UAAU,EACV,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,OAAe,EACf,QAAgB,EAChB,SAAiB,EACjB,SAAS,EACT,OAAO,EACP,MAAM,EACN,OAAO,EACP,UAAU,EACV,QAAQ,EACR,UAAU,EACV,IAAI,EACJ,YAAY,EACZ,cAAc,EACd,WAAW,EACd,EAAE,iBAAiB,2CA6DnB"}
@@ -13,12 +13,12 @@ const { b, e } = bem("gd-ui-kit-text-input");
13
13
  *
14
14
  * @internal
15
15
  */
16
- export function UiTextInput({ type = "text", value, onChange, label, placeholder, iconBefore, iconAfter, onIconAfter, accessibilityConfig, disabled = false, autoFocus = false, onKeyDown, onFocus, onBlur, onClick, dataTestId, inputRef, wrapperRef, name, autoComplete, autoCapitalize, autoCorrect, }) {
16
+ export function UiTextInput({ type = "text", value, onChange, label, placeholder, iconBefore, iconAfter, onIconAfter, accessibilityConfig, isError = false, disabled = false, autoFocus = false, onKeyDown, onFocus, onBlur, onClick, dataTestId, inputRef, wrapperRef, name, autoComplete, autoCapitalize, autoCorrect, }) {
17
17
  const id = useId();
18
18
  const { ariaLabel, ...restA11y } = accessibilityConfig ?? {};
19
19
  // When a visible <label> is present, the label provides the accessible name;
20
20
  // forwarding aria-label would override it (WCAG name-in-name mismatch).
21
21
  const inputA11y = label ? restA11y : { ...restA11y, ariaLabel };
22
- return (_jsxs("div", { ref: wrapperRef, className: b(), children: [label ? (_jsx("label", { className: e("label"), htmlFor: id, children: label })) : null, _jsxs("div", { className: e("field", { disabled }), children: [iconBefore ? (_jsx("span", { className: e("icon-before"), children: _jsx(UiIcon, { type: iconBefore, size: 14, color: "complementary-6" }) })) : null, _jsx("input", { ref: inputRef, id: id, name: name, type: type, className: e("input"), value: value, placeholder: placeholder, disabled: disabled, autoFocus: autoFocus, autoComplete: autoComplete, autoCapitalize: autoCapitalize, autoCorrect: autoCorrect, "data-testid": dataTestId, onChange: (event) => onChange(event.target.value), onKeyDown: onKeyDown, onFocus: onFocus, onBlur: onBlur, onClick: onClick, ...accessibilityConfigToAttributes(inputA11y) }), onIconAfter ? (_jsx("span", { className: e("icon-after"), children: _jsx(UiIconButton, { icon: onIconAfter.icon, size: "xsmall", variant: "tertiary", onClick: onIconAfter.onClick, isDisabled: disabled, label: onIconAfter.ariaLabel, iconColor: "complementary-6" }) })) : iconAfter ? (_jsx("span", { className: e("icon-after"), children: _jsx(UiIcon, { type: iconAfter, size: 14, color: "complementary-6" }) })) : null] })
22
+ return (_jsxs("div", { ref: wrapperRef, className: b(), children: [label ? (_jsx("label", { className: e("label"), htmlFor: id, children: label })) : null, _jsxs("div", { className: e("field", { disabled, error: isError }), children: [iconBefore ? (_jsx("span", { className: e("icon-before"), children: _jsx(UiIcon, { type: iconBefore, size: 14, color: "complementary-6" }) })) : null, _jsx("input", { ref: inputRef, id: id, name: name, type: type, className: e("input"), value: value, placeholder: placeholder, disabled: disabled, autoFocus: autoFocus, autoComplete: autoComplete, autoCapitalize: autoCapitalize, autoCorrect: autoCorrect, "data-testid": dataTestId, onChange: (event) => onChange(event.target.value), onKeyDown: onKeyDown, onFocus: onFocus, onBlur: onBlur, onClick: onClick, "aria-invalid": isError || undefined, ...accessibilityConfigToAttributes(inputA11y) }), onIconAfter ? (_jsx("span", { className: e("icon-after"), children: _jsx(UiIconButton, { icon: onIconAfter.icon, size: "xsmall", variant: "tertiary", onClick: onIconAfter.onClick, isDisabled: disabled, label: onIconAfter.ariaLabel, iconColor: "complementary-6" }) })) : iconAfter ? (_jsx("span", { className: e("icon-after"), children: _jsx(UiIcon, { type: iconAfter, size: 14, color: "complementary-6" }) })) : null] })
23
23
  ] }));
24
24
  }
@@ -1,10 +1,9 @@
1
- import { type WrappedComponentProps } from "react-intl";
2
1
  import { type ISortItem } from "@gooddata/sdk-model";
3
2
  import { type IAvailableSortsGroup, type IBucketItemDescriptors } from "./types.js";
4
3
  /**
5
4
  * @internal
6
5
  */
7
- export interface IChartSortingOwnProps {
6
+ export interface IChartSortingProps {
8
7
  currentSort: ISortItem[];
9
8
  availableSorts: IAvailableSortsGroup[];
10
9
  bucketItems: IBucketItemDescriptors;
@@ -16,16 +15,5 @@ export interface IChartSortingOwnProps {
16
15
  /**
17
16
  * @internal
18
17
  */
19
- export interface IChartSortingProps extends IChartSortingOwnProps, WrappedComponentProps {
20
- }
21
- /**
22
- * @internal
23
- */
24
- export declare const ChartSortingWithIntl: import("react").FC<import("react-intl").WithIntlProps<IChartSortingProps>> & {
25
- WrappedComponent: import("react").ComponentType<IChartSortingProps>;
26
- };
27
- /**
28
- * @internal
29
- */
30
- export declare function ChartSortingDialog(props: IChartSortingOwnProps): import("react/jsx-runtime").JSX.Element;
18
+ export declare function ChartSortingDialog(props: IChartSortingProps): import("react/jsx-runtime").JSX.Element;
31
19
  //# sourceMappingURL=ChartSorting.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChartSorting.d.ts","sourceRoot":"","sources":["../../src/ChartSorting/ChartSorting.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAoB,KAAK,qBAAqB,EAAc,MAAM,YAAY,CAAC;AAEtF,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAOrD,OAAO,EAAE,KAAK,oBAAoB,EAAE,KAAK,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEpF;;GAEG;AACH,MAAM,WAAW,qBAAqB;IAClC,WAAW,EAAE,SAAS,EAAE,CAAC;IACzB,cAAc,EAAE,oBAAoB,EAAE,CAAC;IACvC,WAAW,EAAE,sBAAsB,CAAC;IACpC,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,IAAI,CAAC;IAC1C,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,qBAAqB,EAAE,qBAAqB;CAAG;AAuD3F;;GAEG;AACH,eAAO,MAAM,oBAAoB;;CAA2B,CAAC;AAE7D;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,qBAAqB,2CAM9D"}
1
+ {"version":3,"file":"ChartSorting.d.ts","sourceRoot":"","sources":["../../src/ChartSorting/ChartSorting.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAOrD,OAAO,EAAE,KAAK,oBAAoB,EAAE,KAAK,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEpF;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,WAAW,EAAE,SAAS,EAAE,CAAC;IACzB,cAAc,EAAE,oBAAoB,EAAE,CAAC;IACvC,WAAW,EAAE,sBAAsB,CAAC;IACpC,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,IAAI,CAAC;IAC1C,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAwDD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,2CAM3D"}