@gooddata/sdk-ui-kit 10.27.0-alpha.2 → 10.27.0-alpha.21

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 (140) hide show
  1. package/esm/@ui/@utils/keyboardNavigation.d.ts +23 -12
  2. package/esm/@ui/@utils/keyboardNavigation.d.ts.map +1 -1
  3. package/esm/@ui/@utils/keyboardNavigation.js +58 -16
  4. package/esm/@ui/@utils/keyboardNavigation.js.map +1 -1
  5. package/esm/@ui/UiFocusTrap/UiFocusTrap.d.ts +9 -0
  6. package/esm/@ui/UiFocusTrap/UiFocusTrap.d.ts.map +1 -1
  7. package/esm/@ui/UiFocusTrap/UiFocusTrap.js +82 -71
  8. package/esm/@ui/UiFocusTrap/UiFocusTrap.js.map +1 -1
  9. package/esm/@ui/UiListbox/UiListbox.d.ts.map +1 -1
  10. package/esm/@ui/UiListbox/UiListbox.js +1 -3
  11. package/esm/@ui/UiListbox/UiListbox.js.map +1 -1
  12. package/esm/@ui/UiListbox/defaults/DefaultUiListboxStaticItemComponent.d.ts +5 -2
  13. package/esm/@ui/UiListbox/defaults/DefaultUiListboxStaticItemComponent.d.ts.map +1 -1
  14. package/esm/@ui/UiListbox/defaults/DefaultUiListboxStaticItemComponent.js.map +1 -1
  15. package/esm/@ui/UiListbox/defaults/firstCharacterSearch.d.ts +2 -2
  16. package/esm/@ui/UiListbox/defaults/firstCharacterSearch.d.ts.map +1 -1
  17. package/esm/@ui/UiListbox/defaults/firstCharacterSearch.js +1 -1
  18. package/esm/@ui/UiListbox/defaults/firstCharacterSearch.js.map +1 -1
  19. package/esm/@ui/UiListbox/types.d.ts +4 -4
  20. package/esm/@ui/UiListbox/types.d.ts.map +1 -1
  21. package/esm/@ui/UiMenu/UiMenu.d.ts +11 -0
  22. package/esm/@ui/UiMenu/UiMenu.d.ts.map +1 -0
  23. package/esm/@ui/UiMenu/UiMenu.js +94 -0
  24. package/esm/@ui/UiMenu/UiMenu.js.map +1 -0
  25. package/esm/@ui/UiMenu/defaults/DefaultUiMenuHeaderComponent.d.ts +9 -0
  26. package/esm/@ui/UiMenu/defaults/DefaultUiMenuHeaderComponent.d.ts.map +1 -0
  27. package/esm/@ui/UiMenu/defaults/DefaultUiMenuHeaderComponent.js +23 -0
  28. package/esm/@ui/UiMenu/defaults/DefaultUiMenuHeaderComponent.js.map +1 -0
  29. package/esm/@ui/UiMenu/defaults/DefaultUiMenuInteractiveItemComponent.d.ts +7 -0
  30. package/esm/@ui/UiMenu/defaults/DefaultUiMenuInteractiveItemComponent.d.ts.map +1 -0
  31. package/esm/@ui/UiMenu/defaults/DefaultUiMenuInteractiveItemComponent.js +16 -0
  32. package/esm/@ui/UiMenu/defaults/DefaultUiMenuInteractiveItemComponent.js.map +1 -0
  33. package/esm/@ui/UiMenu/defaults/DefaultUiMenuStaticItemComponent.d.ts +8 -0
  34. package/esm/@ui/UiMenu/defaults/DefaultUiMenuStaticItemComponent.d.ts.map +1 -0
  35. package/esm/@ui/UiMenu/defaults/DefaultUiMenuStaticItemComponent.js +9 -0
  36. package/esm/@ui/UiMenu/defaults/DefaultUiMenuStaticItemComponent.js.map +1 -0
  37. package/esm/@ui/UiMenu/hooks.d.ts +16 -0
  38. package/esm/@ui/UiMenu/hooks.d.ts.map +1 -0
  39. package/esm/@ui/UiMenu/hooks.js +87 -0
  40. package/esm/@ui/UiMenu/hooks.js.map +1 -0
  41. package/esm/@ui/UiMenu/itemUtils.d.ts +17 -0
  42. package/esm/@ui/UiMenu/itemUtils.d.ts.map +1 -0
  43. package/esm/@ui/UiMenu/itemUtils.js +73 -0
  44. package/esm/@ui/UiMenu/itemUtils.js.map +1 -0
  45. package/esm/@ui/UiMenu/menuBem.d.ts +2 -0
  46. package/esm/@ui/UiMenu/menuBem.d.ts.map +1 -0
  47. package/esm/@ui/UiMenu/menuBem.js +4 -0
  48. package/esm/@ui/UiMenu/menuBem.js.map +1 -0
  49. package/esm/@ui/UiMenu/types.d.ts +86 -0
  50. package/esm/@ui/UiMenu/types.d.ts.map +1 -0
  51. package/esm/@ui/UiMenu/types.js +3 -0
  52. package/esm/@ui/UiMenu/types.js.map +1 -0
  53. package/esm/Dialog/ConfirmDialogBase.d.ts.map +1 -1
  54. package/esm/Dialog/ConfirmDialogBase.js +1 -1
  55. package/esm/Dialog/ConfirmDialogBase.js.map +1 -1
  56. package/esm/Dialog/DialogBase.d.ts.map +1 -1
  57. package/esm/Dialog/DialogBase.js +2 -2
  58. package/esm/Dialog/DialogBase.js.map +1 -1
  59. package/esm/Dialog/DialogCloseButton.d.ts +1 -1
  60. package/esm/Dialog/DialogCloseButton.d.ts.map +1 -1
  61. package/esm/Dialog/DialogCloseButton.js +11 -2
  62. package/esm/Dialog/DialogCloseButton.js.map +1 -1
  63. package/esm/Dialog/ExportDialogBase.d.ts.map +1 -1
  64. package/esm/Dialog/ExportDialogBase.js +8 -3
  65. package/esm/Dialog/ExportDialogBase.js.map +1 -1
  66. package/esm/Dialog/ShareDialog/ShareDialogBase/AddGranteeBase.d.ts.map +1 -1
  67. package/esm/Dialog/ShareDialog/ShareDialogBase/AddGranteeBase.js +1 -5
  68. package/esm/Dialog/ShareDialog/ShareDialogBase/AddGranteeBase.js.map +1 -1
  69. package/esm/Dialog/ShareDialog/ShareDialogBase/GranteeItem.js +2 -2
  70. package/esm/Dialog/ShareDialog/ShareDialogBase/GranteeItem.js.map +1 -1
  71. package/esm/Dialog/ShareDialog/ShareDialogBase/ShareGranteeBase.d.ts.map +1 -1
  72. package/esm/Dialog/ShareDialog/ShareDialogBase/ShareGranteeBase.js +1 -5
  73. package/esm/Dialog/ShareDialog/ShareDialogBase/ShareGranteeBase.js.map +1 -1
  74. package/esm/Dialog/typings.d.ts +1 -0
  75. package/esm/Dialog/typings.d.ts.map +1 -1
  76. package/esm/Form/Checkbox.d.ts +1 -0
  77. package/esm/Form/Checkbox.d.ts.map +1 -1
  78. package/esm/Form/Checkbox.js +3 -3
  79. package/esm/Form/Checkbox.js.map +1 -1
  80. package/esm/Header/Header.d.ts.map +1 -1
  81. package/esm/Header/Header.js +1 -1
  82. package/esm/Header/Header.js.map +1 -1
  83. package/esm/Header/HeaderAccount.d.ts.map +1 -1
  84. package/esm/Header/HeaderAccount.js +2 -3
  85. package/esm/Header/HeaderAccount.js.map +1 -1
  86. package/esm/Header/HeaderChatButton.d.ts +2 -0
  87. package/esm/Header/HeaderChatButton.d.ts.map +1 -1
  88. package/esm/Header/HeaderChatButton.js +3 -3
  89. package/esm/Header/HeaderChatButton.js.map +1 -1
  90. package/esm/Header/HeaderHelp.d.ts.map +1 -1
  91. package/esm/Header/HeaderHelp.js +2 -3
  92. package/esm/Header/HeaderHelp.js.map +1 -1
  93. package/esm/Header/HeaderSearchButton.d.ts.map +1 -1
  94. package/esm/Header/HeaderSearchButton.js +2 -3
  95. package/esm/Header/HeaderSearchButton.js.map +1 -1
  96. package/esm/List/ListItem.d.ts +8 -21
  97. package/esm/List/ListItem.d.ts.map +1 -1
  98. package/esm/List/ListItem.js +69 -70
  99. package/esm/List/ListItem.js.map +1 -1
  100. package/esm/List/MenuList.d.ts +3 -0
  101. package/esm/List/MenuList.d.ts.map +1 -1
  102. package/esm/List/MenuList.js +3 -3
  103. package/esm/List/MenuList.js.map +1 -1
  104. package/esm/List/index.d.ts +1 -1
  105. package/esm/List/index.d.ts.map +1 -1
  106. package/esm/List/index.js.map +1 -1
  107. package/esm/RecurrenceForm/DateTime.js +2 -2
  108. package/esm/RecurrenceForm/DateTime.js.map +1 -1
  109. package/esm/RecurrenceForm/Recurrence.js +3 -3
  110. package/esm/RecurrenceForm/Recurrence.js.map +1 -1
  111. package/esm/index.d.ts +8 -1
  112. package/esm/index.d.ts.map +1 -1
  113. package/esm/index.js +5 -0
  114. package/esm/index.js.map +1 -1
  115. package/esm/sdk-ui-kit.d.ts +201 -38
  116. package/esm/typings/accessibility.d.ts +17 -0
  117. package/esm/typings/accessibility.d.ts.map +1 -1
  118. package/esm/typings/accessibility.js +1 -1
  119. package/esm/typings/accessibility.js.map +1 -1
  120. package/esm/utils/domUtilities.d.ts +11 -0
  121. package/esm/utils/domUtilities.d.ts.map +1 -1
  122. package/esm/utils/domUtilities.js +29 -0
  123. package/esm/utils/domUtilities.js.map +1 -1
  124. package/esm/utils/useId.d.ts +6 -0
  125. package/esm/utils/useId.d.ts.map +1 -1
  126. package/esm/utils/useId.js +9 -0
  127. package/esm/utils/useId.js.map +1 -1
  128. package/package.json +10 -9
  129. package/src/@ui/UiMenu/UiMenu.scss +115 -0
  130. package/src/@ui/index.scss +1 -0
  131. package/styles/css/dialog.css +3 -2
  132. package/styles/css/dialog.css.map +1 -1
  133. package/styles/css/list.css +7 -0
  134. package/styles/css/list.css.map +1 -1
  135. package/styles/css/main.css +105 -2
  136. package/styles/css/main.css.map +1 -1
  137. package/styles/css/menu.css +7 -0
  138. package/styles/css/menu.css.map +1 -1
  139. package/styles/scss/dialog.scss +3 -2
  140. package/styles/scss/list.scss +7 -0
@@ -396,6 +396,7 @@ export declare class Checkbox extends React_2.PureComponent<CheckboxProps> {
396
396
  * @internal
397
397
  */
398
398
  export declare interface CheckboxProps {
399
+ id?: string;
399
400
  disabled: boolean;
400
401
  name: string;
401
402
  text: string;
@@ -556,6 +557,17 @@ export declare function DefaultUiListboxInteractiveItemComponent<T>({ item, isFo
556
557
  */
557
558
  export declare function DefaultUiListboxStaticItemComponent<T>({ item, }: UiListboxStaticItemProps<T>): React_2.ReactNode;
558
559
 
560
+ /**
561
+ * @internal
562
+ */
563
+ export declare function DefaultUiMenuInteractiveItemComponent<InteractiveItemData, StaticItemData>({ item, isFocused, onSelect, }: UiMenuInteractiveItemProps<InteractiveItemData, StaticItemData>): React_2.ReactNode;
564
+
565
+ /**
566
+ * By default just renders the data.
567
+ * @internal
568
+ */
569
+ export declare function DefaultUiMenuStaticItemComponent<T>({ item }: UiMenuStaticItemProps<T>): React_2.ReactNode;
570
+
559
571
  /**
560
572
  * @internal
561
573
  */
@@ -859,6 +871,18 @@ export declare function getDateTimeConfig(date: string, options?: IDateTimeConfi
859
871
  */
860
872
  export declare const getDefaultEmbedTypeOptions: (embedType: EmbedType) => EmbedOptionsType;
861
873
 
874
+ /**
875
+ * @internal
876
+ * Returns the focusable elements of the given element
877
+ * @param element - the element to get the focusable elements from
878
+ * @returns an object containing the focusable elements, the first focusable element, and the last focusable element
879
+ */
880
+ export declare const getFocusableElements: (element?: HTMLElement) => {
881
+ focusableElements: NodeListOf<HTMLElement>;
882
+ firstElement: HTMLElement;
883
+ lastElement: HTMLElement;
884
+ };
885
+
862
886
  /**
863
887
  * @internal
864
888
  */
@@ -1663,6 +1687,7 @@ export declare interface IDialogBaseProps {
1663
1687
  CloseButton?: React_2.ComponentType<IDialogCloseButtonProps>;
1664
1688
  initialFocus?: React_2.RefObject<HTMLElement> | string;
1665
1689
  returnFocusTo?: React_2.RefObject<HTMLElement> | string;
1690
+ returnFocusAfterClose?: boolean;
1666
1691
  }
1667
1692
 
1668
1693
  /**
@@ -2688,6 +2713,8 @@ export declare interface IItemsWrapperProps {
2688
2713
  children: React_2.ReactNode;
2689
2714
  className?: string;
2690
2715
  style?: React_2.CSSProperties;
2716
+ accessibilityConfig?: IMenuContainerAccessibilityConfig;
2717
+ wrapperRef?: React_2.RefObject<HTMLDivElement>;
2691
2718
  }
2692
2719
 
2693
2720
  /**
@@ -2847,20 +2874,6 @@ export declare interface ILegacySingleSelectListProps<T> {
2847
2874
  width: number;
2848
2875
  }
2849
2876
 
2850
- /**
2851
- * @internal
2852
- */
2853
- export declare interface IListboxContext<InteractiveItemData, StaticItemData = React_2.ReactNode> {
2854
- items: IUiListboxItem<InteractiveItemData, StaticItemData>[];
2855
- itemRefs: React_2.MutableRefObject<(HTMLLIElement | null)[]>;
2856
- onSelect: (item: IUiListboxInteractiveItem<InteractiveItemData>) => void;
2857
- onClose?: () => void;
2858
- selectedItemId: string | undefined;
2859
- focusedIndex: number | undefined;
2860
- setFocusedIndex: React_2.Dispatch<React_2.SetStateAction<number>>;
2861
- isItemFocusable: (item: IUiListboxItem<InteractiveItemData, StaticItemData>) => boolean;
2862
- }
2863
-
2864
2877
  /**
2865
2878
  * @internal
2866
2879
  */
@@ -3007,6 +3020,25 @@ export declare interface IMediaQueries {
3007
3020
  "<desktop": string;
3008
3021
  }
3009
3022
 
3023
+ /**
3024
+ * @internal
3025
+ */
3026
+ export declare interface IMenuAccessibilityConfig extends IAccessibilityConfigBase {
3027
+ id?: string;
3028
+ role?: "menu" | "menuitem" | "separator" | "presentation";
3029
+ ariaDisabled?: "true" | "false";
3030
+ ariaHaspopup?: "true" | "false" | "menu" | "listbox" | "tree" | "grid" | "dialog";
3031
+ ariaExpanded?: "true" | "false";
3032
+ ariaControls?: string;
3033
+ }
3034
+
3035
+ /**
3036
+ * @internal
3037
+ */
3038
+ export declare interface IMenuContainerAccessibilityConfig extends IMenuAccessibilityConfig {
3039
+ role?: "menu";
3040
+ }
3041
+
3010
3042
  /**
3011
3043
  * @internal
3012
3044
  */
@@ -4045,18 +4077,16 @@ export declare interface ISingleSelectListItemProps {
4045
4077
  hideDelayBubble?: number;
4046
4078
  isSelected?: boolean;
4047
4079
  isMenu?: boolean;
4080
+ accessibilityConfig?: IMenuAccessibilityConfig;
4081
+ tabIndex?: number;
4082
+ elementType?: "div" | "button";
4083
+ iconRenderer?: (icon: string | ReactNode | React_2.FC) => ReactNode;
4084
+ infoRenderer?: (info: string | ReactNode | React_2.FC) => ReactNode;
4048
4085
  onClick?: (e: React_2.MouseEvent<HTMLElement>) => void;
4049
4086
  onMouseOver?: (e: React_2.MouseEvent<HTMLElement>) => void;
4050
4087
  onMouseOut?: (e: React_2.MouseEvent<HTMLElement>) => void;
4051
4088
  }
4052
4089
 
4053
- /**
4054
- * @internal
4055
- */
4056
- export declare interface ISingleSelectListItemState {
4057
- isOverflowed: boolean;
4058
- }
4059
-
4060
4090
  /**
4061
4091
  * @internal
4062
4092
  */
@@ -4288,6 +4318,20 @@ export declare interface IUiChipAccessibilityConfig extends IAccessibilityConfig
4288
4318
  deleteAriaLabel?: string;
4289
4319
  }
4290
4320
 
4321
+ /**
4322
+ * @internal
4323
+ */
4324
+ export declare interface IUiListboxContext<InteractiveItemData, StaticItemData = React_2.ReactNode> {
4325
+ items: IUiListboxItem<InteractiveItemData, StaticItemData>[];
4326
+ itemRefs: React_2.MutableRefObject<(HTMLLIElement | null)[]>;
4327
+ onSelect: (item: IUiListboxInteractiveItem<InteractiveItemData>) => void;
4328
+ onClose?: () => void;
4329
+ selectedItemId: string | undefined;
4330
+ focusedIndex: number | undefined;
4331
+ setFocusedIndex: React_2.Dispatch<React_2.SetStateAction<number | undefined>>;
4332
+ isItemFocusable: (item: IUiListboxItem<InteractiveItemData, StaticItemData>) => boolean;
4333
+ }
4334
+
4291
4335
  /**
4292
4336
  * @internal
4293
4337
  */
@@ -4313,6 +4357,47 @@ export declare interface IUiListboxStaticItem<T> {
4313
4357
  data: T;
4314
4358
  }
4315
4359
 
4360
+ /**
4361
+ * @internal
4362
+ */
4363
+ export declare interface IUiMenuContext<InteractiveItemData, StaticItemData = React_2.ReactNode> {
4364
+ items: IUiMenuItem<InteractiveItemData, StaticItemData>[];
4365
+ focusedItem: IUiMenuInteractiveItem<InteractiveItemData, StaticItemData> | undefined;
4366
+ itemRefs: React_2.MutableRefObject<{
4367
+ [id: string]: HTMLElement;
4368
+ }>;
4369
+ onSelect: (item: IUiMenuInteractiveItem<InteractiveItemData, StaticItemData> | undefined) => void;
4370
+ onClose?: () => void;
4371
+ setFocusedId: React_2.Dispatch<React_2.SetStateAction<string | undefined>>;
4372
+ isItemFocusable: (item: IUiMenuItem<InteractiveItemData, StaticItemData>) => boolean;
4373
+ }
4374
+
4375
+ /**
4376
+ * @internal
4377
+ */
4378
+ export declare interface IUiMenuInteractiveItem<InteractiveItemData, StaticItemData = React_2.ReactNode> {
4379
+ type: "interactive";
4380
+ id: string;
4381
+ stringTitle: string;
4382
+ isDisabled?: boolean;
4383
+ data: InteractiveItemData;
4384
+ subMenu?: IUiMenuItem<InteractiveItemData, StaticItemData>[];
4385
+ }
4386
+
4387
+ /**
4388
+ * @internal
4389
+ */
4390
+ export declare type IUiMenuItem<InteractiveItemData, StaticItemData = React_2.ReactNode> = IUiMenuStaticItem<StaticItemData> | IUiMenuInteractiveItem<InteractiveItemData, StaticItemData>;
4391
+
4392
+ /**
4393
+ * @internal
4394
+ */
4395
+ export declare interface IUiMenuStaticItem<T> {
4396
+ type: "static";
4397
+ id?: string;
4398
+ data: T;
4399
+ }
4400
+
4316
4401
  /**
4317
4402
  * @internal
4318
4403
  */
@@ -4534,6 +4619,23 @@ export declare const LoadingSpinner: React_2.FC<ILoadingSpinner>;
4534
4619
  */
4535
4620
  export declare const LocaleSetting: React_2.VFC<ILocaleSettingProps>;
4536
4621
 
4622
+ /**
4623
+ * @internal
4624
+ */
4625
+ export declare const makeMenuKeyboardNavigation: <T extends KeyboardEvent | KeyboardEvent_2<Element> = KeyboardEvent_2<Element>>({ onFocusPrevious, onFocusNext, onFocusFirst, onFocusLast, onEnterLevel, onLeaveLevel, onSelect, onClose, onUnhandledKeyDown, shouldPreventDefault, shouldStopPropagation, }: {
4626
+ onFocusNext?: (event: T) => void;
4627
+ onFocusPrevious?: (event: T) => void;
4628
+ onFocusFirst?: (event: T) => void;
4629
+ onFocusLast?: (event: T) => void;
4630
+ onEnterLevel?: (event: T) => void;
4631
+ onLeaveLevel?: (event: T) => void;
4632
+ onSelect?: (event: T) => void;
4633
+ onClose?: (event: T) => void;
4634
+ onUnhandledKeyDown?: (event: T) => void;
4635
+ shouldPreventDefault?: boolean;
4636
+ shouldStopPropagation?: boolean;
4637
+ }) => (event: T) => void;
4638
+
4537
4639
  /**
4538
4640
  * @internal
4539
4641
  */
@@ -4914,7 +5016,10 @@ export declare type Separators = {
4914
5016
  /**
4915
5017
  * @internal
4916
5018
  */
4917
- export declare const separatorStaticItem: IUiListboxStaticItem<React_2.ReactNode>;
5019
+ export declare const separatorStaticItem: {
5020
+ data: React_2.JSX.Element;
5021
+ type: "static";
5022
+ };
4918
5023
 
4919
5024
  /**
4920
5025
  * @internal
@@ -5000,20 +5105,7 @@ export declare const SimpleSettingWidget: React_2.FC<ISimpleSettingWidgetProps>;
5000
5105
  /**
5001
5106
  * @internal
5002
5107
  */
5003
- export declare class SingleSelectListItem extends Component<ISingleSelectListItemProps, ISingleSelectListItemState> {
5004
- private titleRef;
5005
- constructor(props: ISingleSelectListItemProps);
5006
- componentDidMount(): void;
5007
- componentDidUpdate(): void;
5008
- private checkOverflow;
5009
- private getClassNames;
5010
- render(): JSX.Element;
5011
- private renderTitle;
5012
- private renderIcon;
5013
- private renderSeparatorItem;
5014
- private renderHeaderItem;
5015
- private renderInfo;
5016
- }
5108
+ export declare const SingleSelectListItem: React_2.ForwardRefExoticComponent<ISingleSelectListItemProps & React_2.RefAttributes<HTMLButtonElement | HTMLDivElement>>;
5017
5109
 
5018
5110
  /**
5019
5111
  * @internal
@@ -5335,11 +5427,20 @@ export declare interface UiFocusTrapProps {
5335
5427
  * If a ref is provided, the focus will be returned to the element referenced by the ref.
5336
5428
  */
5337
5429
  returnFocusTo?: React_2.RefObject<HTMLElement> | string;
5430
+ /**
5431
+ * If true, the focus will be returned to the element referenced by the returnFocusTo prop when the trap is unmounted.
5432
+ */
5433
+ returnFocusOnUnmount?: boolean;
5338
5434
  /**
5339
5435
  * Specify the element that should receive focus when the trap is activated.
5340
5436
  * If not provided, the first focusable element will be focused.
5341
5437
  */
5342
5438
  initialFocus?: React_2.RefObject<HTMLElement> | string;
5439
+ /**
5440
+ * Specify a custom keyboard navigation handler.
5441
+ * If not provided, the default keyboard navigation handler will be used.
5442
+ */
5443
+ customKeyboardNavigationHandler?: (event: KeyboardEvent) => void;
5343
5444
  }
5344
5445
 
5345
5446
  /**
@@ -5405,7 +5506,7 @@ export declare interface UiListboxProps<InteractiveItemData, StaticItemData = Re
5405
5506
  maxWidth?: number;
5406
5507
  onSelect?: (item: IUiListboxInteractiveItem<InteractiveItemData>) => void;
5407
5508
  onClose?: () => void;
5408
- onUnhandledKeyDown?: (event: React_2.KeyboardEvent, context: IListboxContext<InteractiveItemData, StaticItemData>) => void;
5509
+ onUnhandledKeyDown?: (event: React_2.KeyboardEvent, context: IUiListboxContext<InteractiveItemData, StaticItemData>) => void;
5409
5510
  selectedItemId?: string;
5410
5511
  InteractiveItemComponent?: React_2.ComponentType<UiListboxInteractiveItemProps<InteractiveItemData>>;
5411
5512
  StaticItemComponent?: React_2.ComponentType<UiListboxStaticItemProps<StaticItemData>>;
@@ -5413,7 +5514,7 @@ export declare interface UiListboxProps<InteractiveItemData, StaticItemData = Re
5413
5514
  shouldKeyboardActionStopPropagation?: boolean;
5414
5515
  shouldCloseOnSelect?: boolean;
5415
5516
  isDisabledFocusable?: boolean;
5416
- ariaAttributes: IDropdownBodyRenderProps["ariaAttributes"];
5517
+ ariaAttributes: Omit<IDropdownBodyRenderProps["ariaAttributes"], "role">;
5417
5518
  }
5418
5519
 
5419
5520
  /**
@@ -5423,6 +5524,61 @@ export declare interface UiListboxStaticItemProps<T> {
5423
5524
  item: IUiListboxStaticItem<T>;
5424
5525
  }
5425
5526
 
5527
+ /**
5528
+ * An accessible menu component that can be navigated by keyboard.
5529
+ * Usable in a <Dropdown /> component.
5530
+ * Should implement https://www.w3.org/WAI/ARIA/apg/patterns/menubar/
5531
+ *
5532
+ * @internal
5533
+ */
5534
+ export declare function UiMenu<InteractiveItemData, StaticItemData>({ items, className, itemClassName, maxWidth, onSelect, onClose, onUnhandledKeyDown, InteractiveItemComponent, StaticItemComponent, MenuHeaderComponent, shouldKeyboardActionPreventDefault, shouldKeyboardActionStopPropagation, shouldCloseOnSelect, isDisabledFocusable, ariaAttributes, }: UiMenuProps<InteractiveItemData, StaticItemData>): React_2.ReactNode;
5535
+
5536
+ /**
5537
+ * @internal
5538
+ */
5539
+ export declare interface UiMenuHeaderProps<InteractiveItemData, StaticItemData = React_2.ReactNode> {
5540
+ onBack?: () => void;
5541
+ onClose?: () => void;
5542
+ parentItem?: IUiMenuInteractiveItem<InteractiveItemData, StaticItemData>;
5543
+ }
5544
+
5545
+ /**
5546
+ * @internal
5547
+ */
5548
+ export declare interface UiMenuInteractiveItemProps<InteractiveItemData, StaticItemData = React_2.ReactNode> {
5549
+ item: IUiMenuInteractiveItem<InteractiveItemData, StaticItemData>;
5550
+ isFocused: boolean;
5551
+ onSelect: () => void;
5552
+ }
5553
+
5554
+ /**
5555
+ * @internal
5556
+ */
5557
+ export declare interface UiMenuProps<InteractiveItemData, StaticItemData = React_2.ReactNode> {
5558
+ items: IUiMenuItem<InteractiveItemData, StaticItemData>[];
5559
+ className?: string;
5560
+ itemClassName?: ((item: IUiMenuItem<InteractiveItemData, StaticItemData>) => string | undefined) | string;
5561
+ maxWidth?: number;
5562
+ onSelect?: (item: IUiMenuInteractiveItem<InteractiveItemData, StaticItemData>) => void;
5563
+ onClose?: () => void;
5564
+ onUnhandledKeyDown?: (event: React_2.KeyboardEvent, context: IUiMenuContext<InteractiveItemData, StaticItemData>) => void;
5565
+ InteractiveItemComponent?: React_2.ComponentType<UiMenuInteractiveItemProps<InteractiveItemData, StaticItemData>>;
5566
+ StaticItemComponent?: React_2.ComponentType<UiMenuStaticItemProps<StaticItemData>>;
5567
+ MenuHeaderComponent?: React_2.ComponentType<UiMenuHeaderProps<InteractiveItemData, StaticItemData>>;
5568
+ shouldKeyboardActionPreventDefault?: boolean;
5569
+ shouldKeyboardActionStopPropagation?: boolean;
5570
+ shouldCloseOnSelect?: boolean;
5571
+ isDisabledFocusable?: boolean;
5572
+ ariaAttributes: Omit<IDropdownBodyRenderProps["ariaAttributes"], "role">;
5573
+ }
5574
+
5575
+ /**
5576
+ * @internal
5577
+ */
5578
+ export declare interface UiMenuStaticItemProps<T> {
5579
+ item: IUiMenuStaticItem<T>;
5580
+ }
5581
+
5426
5582
  /**
5427
5583
  * @internal
5428
5584
  */
@@ -5558,6 +5714,13 @@ export declare const useHeaderSearch: () => HeaderSearchContext;
5558
5714
  */
5559
5715
  export declare const useId: () => string;
5560
5716
 
5717
+ /**
5718
+ * This is a hook that generates a unique ID for purposes of aria references and so on. Can be enhanced with a prefix.
5719
+ * @param prefix - The prefix to be added to the generated ID.
5720
+ * @internal
5721
+ */
5722
+ export declare const useIdPrefixed: (prefix?: string) => string;
5723
+
5561
5724
  /**
5562
5725
  * @internal
5563
5726
  */
@@ -8,4 +8,21 @@ export interface IAccessibilityConfigBase {
8
8
  ariaDescribedBy?: React.AriaAttributes["aria-describedby"];
9
9
  role?: React.HTMLAttributes<HTMLElement>["role"];
10
10
  }
11
+ /**
12
+ * @internal
13
+ */
14
+ export interface IMenuAccessibilityConfig extends IAccessibilityConfigBase {
15
+ id?: string;
16
+ role?: "menu" | "menuitem" | "separator" | "presentation";
17
+ ariaDisabled?: "true" | "false";
18
+ ariaHaspopup?: "true" | "false" | "menu" | "listbox" | "tree" | "grid" | "dialog";
19
+ ariaExpanded?: "true" | "false";
20
+ ariaControls?: string;
21
+ }
22
+ /**
23
+ * @internal
24
+ */
25
+ export interface IMenuContainerAccessibilityConfig extends IMenuAccessibilityConfig {
26
+ role?: "menu";
27
+ }
11
28
  //# sourceMappingURL=accessibility.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"accessibility.d.ts","sourceRoot":"","sources":["../../src/typings/accessibility.ts"],"names":[],"mappings":";AAEA;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACrC,SAAS,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;IAC/C,cAAc,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;IACzD,eAAe,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;IAC3D,IAAI,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;CACpD"}
1
+ {"version":3,"file":"accessibility.d.ts","sourceRoot":"","sources":["../../src/typings/accessibility.ts"],"names":[],"mappings":";AAEA;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACrC,SAAS,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;IAC/C,cAAc,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;IACzD,eAAe,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;IAC3D,IAAI,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;CACpD;AAED;;GAEG;AACH,MAAM,WAAW,wBAAyB,SAAQ,wBAAwB;IACtE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,cAAc,CAAC;IAC1D,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAEhC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;IAClF,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,iCAAkC,SAAQ,wBAAwB;IAC/E,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB"}
@@ -1,3 +1,3 @@
1
- // (C) 2025 GoodData Corporation
1
+ // (C) 2020-2025 GoodData Corporation
2
2
  export {};
3
3
  //# sourceMappingURL=accessibility.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"accessibility.js","sourceRoot":"","sources":["../../src/typings/accessibility.ts"],"names":[],"mappings":"AAAA,gCAAgC"}
1
+ {"version":3,"file":"accessibility.js","sourceRoot":"","sources":["../../src/typings/accessibility.ts"],"names":[],"mappings":"AAAA,qCAAqC"}
@@ -28,4 +28,15 @@ export declare const isFixedPosition: (element: HTMLElement | string) => boolean
28
28
  export declare const elementRegion: (elementOrSelector: HTMLElement | string, getRegionBasedOnPosition?: boolean) => IRegion;
29
29
  export declare const isElementTextInput: (element: HTMLElement | EventTarget | null | undefined) => boolean;
30
30
  export declare const isElementSubmitButton: (event: React.KeyboardEvent) => boolean;
31
+ /**
32
+ * @internal
33
+ * Returns the focusable elements of the given element
34
+ * @param element - the element to get the focusable elements from
35
+ * @returns an object containing the focusable elements, the first focusable element, and the last focusable element
36
+ */
37
+ export declare const getFocusableElements: (element?: HTMLElement) => {
38
+ focusableElements: NodeListOf<HTMLElement>;
39
+ firstElement: HTMLElement;
40
+ lastElement: HTMLElement;
41
+ };
31
42
  //# sourceMappingURL=domUtilities.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"domUtilities.d.ts","sourceRoot":"","sources":["../../src/utils/domUtilities.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAErD;;GAEG;AACH,eAAO,MAAM,aAAa,YAAa,WAAW,KAAG,IAIpD,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,MAAM,YACN,WAAW,wBACE,OAAO,gDAE9B,OAeF,CAAC;AAiBF;;;;GAIG;AACH,eAAO,MAAM,eAAe,YAAa,WAAW,GAAG,MAAM,KAAG,OAe/D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa,sBACH,WAAW,GAAG,MAAM,6BACZ,OAAO,KACnC,OAuCF,CAAC;AAEF,eAAO,MAAM,kBAAkB,YAAa,WAAW,GAAG,WAAW,GAAG,IAAI,GAAG,SAAS,KAAG,OAc1F,CAAC;AAEF,eAAO,MAAM,qBAAqB,UAAW,mBAAmB,YAI/D,CAAC"}
1
+ {"version":3,"file":"domUtilities.d.ts","sourceRoot":"","sources":["../../src/utils/domUtilities.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAErD;;GAEG;AACH,eAAO,MAAM,aAAa,YAAa,WAAW,KAAG,IAIpD,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,MAAM,YACN,WAAW,wBACE,OAAO,gDAE9B,OAeF,CAAC;AAiBF;;;;GAIG;AACH,eAAO,MAAM,eAAe,YAAa,WAAW,GAAG,MAAM,KAAG,OAe/D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa,sBACH,WAAW,GAAG,MAAM,6BACZ,OAAO,KACnC,OAuCF,CAAC;AAEF,eAAO,MAAM,kBAAkB,YAAa,WAAW,GAAG,WAAW,GAAG,IAAI,GAAG,SAAS,KAAG,OAc1F,CAAC;AAEF,eAAO,MAAM,qBAAqB,UAAW,mBAAmB,YAI/D,CAAC;AAwBF;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,aAAc,WAAW;;;;CAKzD,CAAC"}
@@ -116,4 +116,33 @@ export const isElementSubmitButton = (event) => {
116
116
  const { id } = event.target;
117
117
  return id === CONFIRM_DIALOG_BASE_ID;
118
118
  };
119
+ const focusableElementsSelector = [
120
+ // Interactive form elements
121
+ 'button:not(:disabled):not([aria-disabled="true"])',
122
+ 'input:not(:disabled):not([aria-disabled="true"])',
123
+ 'select:not(:disabled):not([aria-disabled="true"])',
124
+ 'textarea:not(:disabled):not([aria-disabled="true"])',
125
+ // Links and areas
126
+ "a[href]",
127
+ "area[href]",
128
+ // Custom elements with tabindex
129
+ '[tabindex]:not([tabindex="-1"]):not(:disabled):not([aria-disabled="true"])',
130
+ // Media with controls
131
+ "audio[controls]",
132
+ "video[controls]",
133
+ // Editable content
134
+ '[contenteditable]:not([contenteditable="false"])',
135
+ ].join(",");
136
+ /**
137
+ * @internal
138
+ * Returns the focusable elements of the given element
139
+ * @param element - the element to get the focusable elements from
140
+ * @returns an object containing the focusable elements, the first focusable element, and the last focusable element
141
+ */
142
+ export const getFocusableElements = (element) => {
143
+ const focusableElements = element?.querySelectorAll(focusableElementsSelector);
144
+ const firstElement = focusableElements?.[0];
145
+ const lastElement = focusableElements?.[focusableElements.length - 1];
146
+ return { focusableElements, firstElement, lastElement };
147
+ };
119
148
  //# sourceMappingURL=domUtilities.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"domUtilities.js","sourceRoot":"","sources":["../../src/utils/domUtilities.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"domUtilities.js","sourceRoot":"","sources":["../../src/utils/domUtilities.ts"],"names":[],"mappings":"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"}
@@ -4,4 +4,10 @@
4
4
  * @internal
5
5
  */
6
6
  export declare const useId: () => string;
7
+ /**
8
+ * This is a hook that generates a unique ID for purposes of aria references and so on. Can be enhanced with a prefix.
9
+ * @param prefix - The prefix to be added to the generated ID.
10
+ * @internal
11
+ */
12
+ export declare const useIdPrefixed: (prefix?: string) => string;
7
13
  //# sourceMappingURL=useId.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useId.d.ts","sourceRoot":"","sources":["../../src/utils/useId.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,eAAO,MAAM,KAAK,QAAO,MAGxB,CAAC"}
1
+ {"version":3,"file":"useId.d.ts","sourceRoot":"","sources":["../../src/utils/useId.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,eAAO,MAAM,KAAK,QAAO,MAGxB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa,YAAa,MAAM,KAAG,MAG/C,CAAC"}
@@ -10,4 +10,13 @@ export const useId = () => {
10
10
  const [id] = useState(uuid());
11
11
  return id;
12
12
  };
13
+ /**
14
+ * This is a hook that generates a unique ID for purposes of aria references and so on. Can be enhanced with a prefix.
15
+ * @param prefix - The prefix to be added to the generated ID.
16
+ * @internal
17
+ */
18
+ export const useIdPrefixed = (prefix) => {
19
+ const id = useId();
20
+ return prefix ? `${prefix}-${id}` : id;
21
+ };
13
22
  //# sourceMappingURL=useId.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useId.js","sourceRoot":"","sources":["../../src/utils/useId.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAC;AAElC;;;;GAIG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,GAAW,EAAE;IAC9B,MAAM,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAS,IAAI,EAAE,CAAC,CAAC;IACtC,OAAO,EAAE,CAAC;AACd,CAAC,CAAC"}
1
+ {"version":3,"file":"useId.js","sourceRoot":"","sources":["../../src/utils/useId.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAC;AAElC;;;;GAIG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,GAAW,EAAE;IAC9B,MAAM,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAS,IAAI,EAAE,CAAC,CAAC;IACtC,OAAO,EAAE,CAAC;AACd,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAe,EAAU,EAAE;IACrD,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3C,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gooddata/sdk-ui-kit",
3
- "version": "10.27.0-alpha.2",
3
+ "version": "10.27.0-alpha.21",
4
4
  "description": "GoodData SDK - UI Building Components",
5
5
  "repository": {
6
6
  "type": "git",
@@ -14,7 +14,8 @@
14
14
  "exports": {
15
15
  ".": "./esm/index.js",
16
16
  "./styles/*": "./styles/*",
17
- "./esm/assets/*": "./esm/assets/*"
17
+ "./esm/assets/*": "./esm/assets/*",
18
+ "./utils/*": "./esm/utils/*.js"
18
19
  },
19
20
  "types": "./esm/index.d.ts",
20
21
  "sideEffects": [
@@ -69,11 +70,11 @@
69
70
  "tslib": "^2.5.0",
70
71
  "uuid": "^8.3.2",
71
72
  "unified": "^11.0.5",
72
- "@gooddata/sdk-backend-spi": "10.27.0-alpha.2",
73
- "@gooddata/sdk-model": "10.27.0-alpha.2",
74
- "@gooddata/sdk-ui-theme-provider": "10.27.0-alpha.2",
75
- "@gooddata/sdk-ui": "10.27.0-alpha.2",
76
- "@gooddata/util": "10.27.0-alpha.2"
73
+ "@gooddata/sdk-backend-spi": "10.27.0-alpha.21",
74
+ "@gooddata/sdk-model": "10.27.0-alpha.21",
75
+ "@gooddata/sdk-ui": "10.27.0-alpha.21",
76
+ "@gooddata/sdk-ui-theme-provider": "10.27.0-alpha.21",
77
+ "@gooddata/util": "10.27.0-alpha.21"
77
78
  },
78
79
  "peerDependencies": {
79
80
  "react": "^16.10.0 || ^17.0.0 || ^18.0.0",
@@ -132,8 +133,8 @@
132
133
  "typescript": "5.3.3",
133
134
  "vitest": "3.0.8",
134
135
  "vitest-dom": "0.1.1",
135
- "@gooddata/reference-workspace": "10.27.0-alpha.2",
136
- "@gooddata/sdk-backend-mockingbird": "10.27.0-alpha.2"
136
+ "@gooddata/reference-workspace": "10.27.0-alpha.21",
137
+ "@gooddata/sdk-backend-mockingbird": "10.27.0-alpha.21"
137
138
  },
138
139
  "scripts": {
139
140
  "clean": "rm -rf ci dist esm coverage styles/css *.log tsconfig.tsbuildinfo",