@koobiq/react-components 0.0.1-beta.2 → 0.0.1-beta.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 (203) hide show
  1. package/dist/components/Alert/Alert.js +2 -2
  2. package/dist/components/Alert/components/AlertIcon/utils.js +1 -1
  3. package/dist/components/Alert/intl.json.js +2 -6
  4. package/dist/components/Alert/types.d.ts +2 -1
  5. package/dist/components/AnimatedIcon/AnimatedIcon.d.ts +4 -0
  6. package/dist/components/AnimatedIcon/AnimatedIcon.js +50 -0
  7. package/dist/components/AnimatedIcon/AnimatedIcon.module.css.js +11 -0
  8. package/dist/components/AnimatedIcon/index.d.ts +2 -0
  9. package/dist/components/AnimatedIcon/types.d.ts +19 -0
  10. package/dist/components/Button/Button.js +1 -1
  11. package/dist/components/Button/Button.module.css.js +2 -2
  12. package/dist/components/Button/types.d.ts +4 -5
  13. package/dist/components/ButtonToggleGroup/ButtonToggleGroup.d.ts +2 -0
  14. package/dist/components/ButtonToggleGroup/ButtonToggleGroup.js +130 -0
  15. package/dist/components/ButtonToggleGroup/ButtonToggleGroup.module.css.js +17 -0
  16. package/dist/components/ButtonToggleGroup/ButtonToggleGroupContext.d.ts +7 -0
  17. package/dist/components/ButtonToggleGroup/ButtonToggleGroupContext.js +12 -0
  18. package/dist/components/ButtonToggleGroup/components/ButtonToggle/ButtonToggle.d.ts +2 -0
  19. package/dist/components/ButtonToggleGroup/components/ButtonToggle/ButtonToggle.js +90 -0
  20. package/dist/components/ButtonToggleGroup/components/ButtonToggle/ButtonToggle.module.css.js +32 -0
  21. package/dist/components/ButtonToggleGroup/components/ButtonToggle/index.d.ts +2 -0
  22. package/dist/components/ButtonToggleGroup/components/ButtonToggle/types.d.ts +27 -0
  23. package/dist/components/ButtonToggleGroup/components/index.d.ts +1 -0
  24. package/dist/components/ButtonToggleGroup/index.d.ts +3 -0
  25. package/dist/components/ButtonToggleGroup/reducer.d.ts +23 -0
  26. package/dist/components/ButtonToggleGroup/reducer.js +25 -0
  27. package/dist/components/ButtonToggleGroup/types.d.ts +38 -0
  28. package/dist/components/ButtonToggleGroup/utils.d.ts +3 -0
  29. package/dist/components/ButtonToggleGroup/utils.js +19 -0
  30. package/dist/components/Checkbox/Checkbox.js +18 -8
  31. package/dist/components/Collections/Divider.d.ts +19 -0
  32. package/dist/components/Collections/Divider.js +14 -0
  33. package/dist/components/Collections/Header.d.ts +20 -0
  34. package/dist/components/Collections/Header.js +16 -0
  35. package/dist/components/Collections/Item.d.ts +14 -0
  36. package/dist/components/Collections/Item.js +10 -0
  37. package/dist/components/{List/ListSection.d.ts → Collections/Section.d.ts} +6 -6
  38. package/dist/components/Collections/Section.js +10 -0
  39. package/dist/components/Collections/index.d.ts +4 -0
  40. package/dist/components/Container/Container.js +2 -1
  41. package/dist/components/Container/utils.d.ts +1 -1
  42. package/dist/components/Dialog/Dialog.d.ts +9 -1
  43. package/dist/components/Dialog/Dialog.js +31 -17
  44. package/dist/components/Dialog/components/DialogBody.d.ts +13 -0
  45. package/dist/components/Dialog/components/{DialogContent.js → DialogBody.js} +9 -8
  46. package/dist/components/Dialog/components/DialogCloseButton.d.ts +14 -1
  47. package/dist/components/Dialog/components/DialogCloseButton.js +3 -6
  48. package/dist/components/Dialog/components/index.d.ts +1 -1
  49. package/dist/components/Dialog/index.d.ts +0 -1
  50. package/dist/components/Dialog/intl.json.js +2 -6
  51. package/dist/components/Divider/Divider.d.ts +4 -0
  52. package/dist/components/Divider/Divider.js +44 -0
  53. package/dist/components/Divider/Divider.module.css.js +29 -0
  54. package/dist/components/Divider/index.d.ts +2 -0
  55. package/dist/components/Divider/types.d.ts +26 -0
  56. package/dist/components/Divider/types.js +6 -0
  57. package/dist/components/FieldComponents/FieldControl/FieldControl.d.ts +1 -1
  58. package/dist/components/FieldComponents/FieldInputGroup/FieldInputGroup.d.ts +8 -2
  59. package/dist/components/FieldComponents/FieldInputGroup/FieldInputGroup.js +32 -30
  60. package/dist/components/FieldComponents/FieldNumberControl/FieldNumberControl.d.ts +1 -1
  61. package/dist/components/FieldComponents/FieldSelect/FieldSelect.d.ts +12 -0
  62. package/dist/components/FieldComponents/FieldSelect/FieldSelect.js +37 -0
  63. package/dist/components/FieldComponents/FieldSelect/FieldSelect.module.css.js +20 -0
  64. package/dist/components/FieldComponents/FieldSelect/index.d.ts +1 -0
  65. package/dist/components/FieldComponents/index.d.ts +1 -0
  66. package/dist/components/FlexBox/FlexBox.d.ts +4 -0
  67. package/dist/components/FlexBox/FlexBox.js +47 -0
  68. package/dist/components/FlexBox/index.d.ts +2 -0
  69. package/dist/components/FlexBox/types.d.ts +27 -0
  70. package/dist/components/Grid/Grid.d.ts +8 -2
  71. package/dist/components/Grid/Grid.js +5 -2
  72. package/dist/components/IconButton/types.d.ts +5 -4
  73. package/dist/components/Input/Input.d.ts +1 -0
  74. package/dist/components/Input/Input.js +11 -11
  75. package/dist/components/Input/types.d.ts +2 -1
  76. package/dist/components/Link/Link.js +13 -15
  77. package/dist/components/Link/types.d.ts +4 -4
  78. package/dist/components/List/List.d.ts +17 -3
  79. package/dist/components/List/List.js +32 -18
  80. package/dist/components/List/List.module.css.js +0 -3
  81. package/dist/components/List/components/ListItemText/ListItemText.js +26 -0
  82. package/dist/components/List/components/ListItemText/ListItemText.module.css.js +11 -0
  83. package/dist/components/List/components/ListOption/ListOption.d.ts +3 -2
  84. package/dist/components/List/components/ListOption/ListOption.js +11 -16
  85. package/dist/components/List/components/ListSection/ListSection.d.ts +3 -2
  86. package/dist/components/List/components/ListSection/ListSection.js +1 -4
  87. package/dist/components/List/index.d.ts +2 -2
  88. package/dist/components/List/types.d.ts +13 -2
  89. package/dist/components/Menu/Menu.d.ts +15 -0
  90. package/dist/components/Menu/Menu.js +68 -0
  91. package/dist/components/Menu/Menu.module.css.js +8 -0
  92. package/dist/components/Menu/components/MenuHeader/MenuHeader.d.ts +5 -0
  93. package/dist/components/Menu/components/MenuHeader/MenuHeader.js +9 -0
  94. package/dist/components/Menu/components/MenuHeader/index.d.ts +1 -0
  95. package/dist/components/Menu/components/MenuInner/MenuInner.d.ts +3 -0
  96. package/dist/components/Menu/components/MenuInner/MenuInner.js +45 -0
  97. package/dist/components/Menu/components/MenuInner/MenuInner.module.css.js +11 -0
  98. package/dist/components/Menu/components/MenuInner/index.d.ts +1 -0
  99. package/dist/components/Menu/components/MenuItem/MenuItem.d.ts +6 -0
  100. package/dist/components/Menu/components/MenuItem/MenuItem.js +36 -0
  101. package/dist/components/Menu/components/MenuItem/index.d.ts +1 -0
  102. package/dist/components/Menu/components/MenuSection/MenuSection.d.ts +6 -0
  103. package/dist/components/Menu/components/MenuSection/MenuSection.js +30 -0
  104. package/dist/components/Menu/components/MenuSection/MenuSection.module.css.js +11 -0
  105. package/dist/components/Menu/components/MenuSection/index.d.ts +1 -0
  106. package/dist/components/Menu/components/index.d.ts +1 -0
  107. package/dist/components/Menu/index.d.ts +2 -0
  108. package/dist/components/Menu/types.d.ts +62 -0
  109. package/dist/components/Menu/types.js +4 -0
  110. package/dist/components/Modal/Modal.d.ts +9 -1
  111. package/dist/components/Modal/Modal.js +21 -16
  112. package/dist/components/Modal/index.d.ts +15 -2
  113. package/dist/components/Modal/index.js +9 -0
  114. package/dist/components/Modal/types.d.ts +7 -0
  115. package/dist/components/Popover/Popover.d.ts +12 -2
  116. package/dist/components/Popover/Popover.js +143 -128
  117. package/dist/components/Popover/Popover.module.css.js +3 -0
  118. package/dist/components/Popover/index.d.ts +15 -2
  119. package/dist/components/Popover/index.js +9 -0
  120. package/dist/components/Popover/types.d.ts +28 -4
  121. package/dist/components/Popover/types.js +9 -1
  122. package/dist/components/ProgressBar/ProgressBar.module.css.js +1 -2
  123. package/dist/components/ProgressSpinner/ProgressSpinner.module.css.js +1 -2
  124. package/dist/components/Provider/BreakpointsProvider.d.ts +2 -1
  125. package/dist/components/Provider/BreakpointsProvider.js +8 -1
  126. package/dist/components/Provider/Provider.d.ts +1 -1
  127. package/dist/components/Provider/Provider.js +9 -1
  128. package/dist/components/Provider/types.d.ts +5 -0
  129. package/dist/components/Provider/utils/useBreakpoints.d.ts +2 -1
  130. package/dist/components/Provider/utils/useBreakpoints.js +2 -2
  131. package/dist/components/RadioGroup/RadioContext.js +1 -0
  132. package/dist/components/RadioGroup/RadioGroup.js +2 -1
  133. package/dist/components/RadioGroup/components/Radio/Radio.js +3 -2
  134. package/dist/components/RadioGroup/components/Radio/Radio.module.css.js +3 -0
  135. package/dist/components/Select/Select.d.ts +11 -0
  136. package/dist/components/Select/Select.js +179 -0
  137. package/dist/components/Select/Select.module.css.js +20 -0
  138. package/dist/components/Select/index.d.ts +2 -0
  139. package/dist/components/Select/types.d.ts +87 -0
  140. package/dist/components/SidePanel/SidePanel.d.ts +9 -1
  141. package/dist/components/SidePanel/SidePanel.js +24 -19
  142. package/dist/components/SidePanel/index.d.ts +15 -2
  143. package/dist/components/SidePanel/index.js +9 -0
  144. package/dist/components/SidePanel/types.d.ts +7 -0
  145. package/dist/components/SkeletonBlock/SkeletonBlock.module.css.js +0 -1
  146. package/dist/components/SkeletonTypography/utils.js +3 -0
  147. package/dist/components/TagGroup/Tag.d.ts +24 -0
  148. package/dist/components/TagGroup/Tag.js +10 -0
  149. package/dist/components/TagGroup/TagGroup.d.ts +2 -0
  150. package/dist/components/TagGroup/TagGroup.js +22 -0
  151. package/dist/components/TagGroup/TagGroup.module.css.js +8 -0
  152. package/dist/components/TagGroup/components/TagInner/TagInner.d.ts +11 -0
  153. package/dist/components/TagGroup/components/TagInner/TagInner.js +86 -0
  154. package/dist/components/TagGroup/components/TagInner/TagInner.module.css.js +30 -0
  155. package/dist/components/TagGroup/components/TagInner/index.d.ts +1 -0
  156. package/dist/components/TagGroup/components/TagInner/utils.d.ts +3 -0
  157. package/dist/components/TagGroup/components/TagInner/utils.js +9 -0
  158. package/dist/components/TagGroup/components/index.d.ts +1 -0
  159. package/dist/components/TagGroup/index.d.ts +3 -0
  160. package/dist/components/TagGroup/intl.json.js +7 -0
  161. package/dist/components/TagGroup/types.d.ts +37 -0
  162. package/dist/components/TagGroup/types.js +9 -0
  163. package/dist/components/Toggle/Toggle.js +1 -1
  164. package/dist/components/Tooltip/Tooltip.d.ts +2 -1
  165. package/dist/components/Tooltip/Tooltip.js +9 -8
  166. package/dist/components/Tooltip/types.d.ts +9 -4
  167. package/dist/components/Typography/Typography.js +2 -2
  168. package/dist/components/Typography/Typography.module.css.js +2 -1
  169. package/dist/components/Typography/types.d.ts +7 -2
  170. package/dist/components/Typography/types.js +2 -1
  171. package/dist/components/index.d.ts +8 -0
  172. package/dist/components/layout/flex/flex.d.ts +15 -4
  173. package/dist/components/layout/flex/flex.js +6 -1
  174. package/dist/components/layout/flex/flex.module.css.js +78 -39
  175. package/dist/index.js +51 -23
  176. package/dist/style.css +862 -350
  177. package/dist/styles/utility.d.ts +2 -0
  178. package/dist/styles/utility.js +3 -2
  179. package/dist/styles/utility.module.css.js +5 -2
  180. package/dist/types.d.ts +1 -0
  181. package/package.json +11 -6
  182. package/dist/components/Dialog/DialogContext.d.ts +0 -9
  183. package/dist/components/Dialog/DialogContext.js +0 -12
  184. package/dist/components/Dialog/components/DialogContent.d.ts +0 -12
  185. package/dist/components/Input/components/FieldAddon/FieldAddon.d.ts +0 -10
  186. package/dist/components/Input/components/FieldAddon/index.d.ts +0 -1
  187. package/dist/components/Input/components/FieldCaption/FieldCaption.d.ts +0 -6
  188. package/dist/components/Input/components/FieldCaption/index.d.ts +0 -1
  189. package/dist/components/Input/components/FieldControl/FieldControl.d.ts +0 -9
  190. package/dist/components/Input/components/FieldControl/index.d.ts +0 -1
  191. package/dist/components/Input/components/FieldError/FieldError.d.ts +0 -7
  192. package/dist/components/Input/components/FieldError/index.d.ts +0 -1
  193. package/dist/components/Input/components/FieldInput/FieldInput.d.ts +0 -9
  194. package/dist/components/Input/components/FieldInput/index.d.ts +0 -1
  195. package/dist/components/Input/components/FieldInputGroup/FieldInputGroup.d.ts +0 -7
  196. package/dist/components/Input/components/FieldInputGroup/index.d.ts +0 -1
  197. package/dist/components/Input/components/FieldLabel/FieldLabel.d.ts +0 -9
  198. package/dist/components/Input/components/FieldLabel/index.d.ts +0 -1
  199. package/dist/components/Input/components/index.d.ts +0 -7
  200. package/dist/components/List/ListItem.d.ts +0 -11
  201. package/dist/components/List/ListItem.js +0 -11
  202. package/dist/components/List/ListSection.js +0 -11
  203. package/dist/components/List/components/ListOption/ListOption.module.css.js +0 -23
@@ -1,15 +1,13 @@
1
1
  "use client";
2
2
  import { jsx } from "react/jsx-runtime";
3
3
  import { useRef } from "react";
4
- import { useHover, usePress, mergeProps, clsx } from "@koobiq/react-core";
4
+ import { useHover, usePress, clsx, mergeProps } from "@koobiq/react-core";
5
5
  import { useOption } from "@koobiq/react-primitives";
6
6
  import { utilClasses } from "../../../../styles/utility.js";
7
- import s from "./ListOption.module.css.js";
8
7
  const textVariant = utilClasses.typography;
9
- function ListOption({
10
- item,
11
- state
12
- }) {
8
+ const { listItem } = utilClasses;
9
+ function ListOption({ item, state }) {
10
+ const { href, className, style } = item.props;
13
11
  const ref = useRef(null);
14
12
  const {
15
13
  optionProps,
@@ -19,21 +17,18 @@ function ListOption({
19
17
  } = useOption({ key: item.key }, state, ref);
20
18
  const { hoverProps, isHovered: hovered } = useHover({ isDisabled: disabled });
21
19
  const { isPressed: pressed, pressProps } = usePress({ isDisabled: disabled });
22
- const Tag = item.props.href ? "a" : "li";
20
+ const Tag = href ? "a" : "li";
23
21
  return /* @__PURE__ */ jsx(
24
22
  Tag,
25
23
  {
26
24
  ...mergeProps(optionProps, hoverProps, pressProps),
27
- className: clsx(
28
- s.base,
29
- hovered && s.hovered,
30
- pressed && s.pressed,
31
- selected && s.selected,
32
- textVariant["text-normal"],
33
- disabled && s.disabled,
34
- focusVisible && s.focusVisible
35
- ),
25
+ className: clsx(listItem, textVariant["text-normal"], className),
26
+ style,
36
27
  ref,
28
+ "data-hovered": hovered,
29
+ "data-pressed": pressed,
30
+ "data-disabled": disabled,
31
+ "data-selected": selected,
37
32
  "data-focus-visible": focusVisible,
38
33
  children: item.rendered
39
34
  }
@@ -1,5 +1,6 @@
1
1
  import type { ListState, Node } from '@koobiq/react-primitives';
2
- export declare function ListSection<T>({ section, state, }: {
2
+ export type ListSectionProps<T> = {
3
3
  section: Node<T>;
4
4
  state: ListState<T>;
5
- }): import("react/jsx-runtime").JSX.Element;
5
+ };
6
+ export declare function ListSection<T>({ section, state }: ListSectionProps<T>): import("react/jsx-runtime").JSX.Element;
@@ -4,10 +4,7 @@ import { useListBoxSection } from "@koobiq/react-primitives";
4
4
  import s from "./ListSection.module.css.js";
5
5
  import { ListOption } from "../ListOption/ListOption.js";
6
6
  import { Typography } from "../../../Typography/Typography.js";
7
- function ListSection({
8
- section,
9
- state
10
- }) {
7
+ function ListSection({ section, state }) {
11
8
  const { itemProps, headingProps, groupProps } = useListBoxSection({
12
9
  heading: section.rendered,
13
10
  "aria-label": section["aria-label"]
@@ -1,4 +1,4 @@
1
1
  export * from './List';
2
+ export * from './components/ListItemText';
2
3
  export * from './types';
3
- export * from './ListItem';
4
- export * from './ListSection';
4
+ export { Item as ListItem, Section as ListSection } from '../Collections';
@@ -1,5 +1,6 @@
1
- import type { ComponentRef, ReactElement, ReactNode, Ref } from 'react';
1
+ import type { ComponentPropsWithRef, ComponentRef, CSSProperties, ReactElement, ReactNode, Ref } from 'react';
2
2
  import type { AriaListBoxProps } from '@koobiq/react-primitives';
3
+ import type { TypographyProps } from '../Typography';
3
4
  export declare const listPropSelectionMode: readonly ["none", "single", "multiple"];
4
5
  export type ListPropSelectionMode = (typeof listPropSelectionMode)[number];
5
6
  export type ListPropItems<T extends object> = AriaListBoxProps<T>['items'];
@@ -14,8 +15,11 @@ export type ListBaseProps<T extends object> = {
14
15
  label?: ReactNode;
15
16
  /** Additional CSS-classes. */
16
17
  className?: string;
18
+ /** Inline styles. */
19
+ style?: CSSProperties;
17
20
  /** The type of selection that is allowed in the collection. */
18
21
  selectionMode?: ListPropSelectionMode;
22
+ /** Ref to the HTML ul-element. */
19
23
  ref?: Ref<HTMLElement>;
20
24
  /** The contents of the collection. */
21
25
  children?: ListPropChildren<T>;
@@ -36,7 +40,14 @@ export type ListBaseProps<T extends object> = {
36
40
  onAction?: ListPropOnAction<T>;
37
41
  /** How multiple selection should behave in the collection. */
38
42
  selectionBehavior?: ListPropSelectionBehavior<T>;
43
+ /** Whether to autofocus the list or an option. */
44
+ autoFocus?: boolean | 'first' | 'last';
45
+ /** The props used for each slot inside. */
46
+ slotProps?: {
47
+ label?: TypographyProps;
48
+ list?: ComponentPropsWithRef<'div'>;
49
+ };
39
50
  };
40
51
  export type ListProps<T extends object> = ListBaseProps<T>;
41
52
  export type ListRef = ComponentRef<'ul'>;
42
- export type ListComponent = <T extends object>(props: ListProps<T>) => ReactElement | null;
53
+ export type ListComponentProps = <T extends object>(props: ListProps<T>) => ReactElement | null;
@@ -0,0 +1,15 @@
1
+ import { Pressable } from '@koobiq/react-core';
2
+ import { Divider, Item, Section, Header } from '../Collections';
3
+ import { ListItemText } from '../List';
4
+ import type { MenuComponentProps } from './index';
5
+ declare const MenuComponent: MenuComponentProps;
6
+ type CompoundedComponent = typeof MenuComponent & {
7
+ Item: typeof Item;
8
+ Header: typeof Header;
9
+ Section: typeof Section;
10
+ Divider: typeof Divider;
11
+ ItemText: typeof ListItemText;
12
+ Control: typeof Pressable;
13
+ };
14
+ export declare const Menu: CompoundedComponent;
15
+ export {};
@@ -0,0 +1,68 @@
1
+ "use client";
2
+ import { jsxs, Fragment, jsx } from "react/jsx-runtime";
3
+ import { forwardRef, useRef } from "react";
4
+ import { useDOMRef, mergeProps, clsx, Pressable } from "@koobiq/react-core";
5
+ import { useMenuTriggerState, useMenuTrigger } from "@koobiq/react-primitives";
6
+ import s from "./Menu.module.css.js";
7
+ import { MenuInner } from "./components/MenuInner/MenuInner.js";
8
+ import { Header } from "../Collections/Header.js";
9
+ import { Divider } from "../Collections/Divider.js";
10
+ import { PopoverInner } from "../Popover/Popover.js";
11
+ import { Item } from "../Collections/Item.js";
12
+ import { Section } from "../Collections/Section.js";
13
+ import { ListItemText } from "../List/components/ListItemText/ListItemText.js";
14
+ function MenuRender(props, ref) {
15
+ const {
16
+ placement = "bottom start",
17
+ "data-testid": testId,
18
+ control,
19
+ style,
20
+ open,
21
+ anchorRef,
22
+ className,
23
+ slotProps,
24
+ ...otherProps
25
+ } = props;
26
+ const state = useMenuTriggerState({ ...props, isOpen: open });
27
+ const domRef = useDOMRef(ref);
28
+ const controlRef = useRef(null);
29
+ const { menuTriggerProps, menuProps } = useMenuTrigger(
30
+ {},
31
+ state,
32
+ controlRef
33
+ );
34
+ const { isDisabled, ...otherMenuTriggerProps } = menuTriggerProps;
35
+ const popoverProps = mergeProps(
36
+ {
37
+ style,
38
+ state,
39
+ offset: 4,
40
+ size: "auto",
41
+ hideArrow: true,
42
+ popoverRef: domRef,
43
+ "data-testid": testId,
44
+ anchorRef: anchorRef || controlRef,
45
+ className: clsx(s.popover, className)
46
+ },
47
+ slotProps?.popover
48
+ );
49
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
50
+ control?.({
51
+ ref: controlRef,
52
+ disabled: isDisabled,
53
+ ...otherMenuTriggerProps
54
+ }),
55
+ /* @__PURE__ */ jsx(PopoverInner, { type: "menu", placement, ...popoverProps, children: /* @__PURE__ */ jsx(MenuInner, { ...otherProps, ...menuProps }) })
56
+ ] });
57
+ }
58
+ const MenuComponent = forwardRef(MenuRender);
59
+ const Menu = MenuComponent;
60
+ Menu.Item = Item;
61
+ Menu.Section = Section;
62
+ Menu.Header = Header;
63
+ Menu.Divider = Divider;
64
+ Menu.ItemText = ListItemText;
65
+ Menu.Control = Pressable;
66
+ export {
67
+ Menu
68
+ };
@@ -0,0 +1,8 @@
1
+ const popover = "kbq-menu-popover-e1857c";
2
+ const s = {
3
+ popover
4
+ };
5
+ export {
6
+ s as default,
7
+ popover
8
+ };
@@ -0,0 +1,5 @@
1
+ import type { Node } from '@koobiq/react-primitives';
2
+ export type MenuHeaderProps<T> = {
3
+ item: Node<T>;
4
+ };
5
+ export declare function MenuHeader<T>({ item }: MenuHeaderProps<T>): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,9 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ function MenuHeader({ item }) {
4
+ const { key, rendered, props } = item;
5
+ return /* @__PURE__ */ jsx("header", { role: "presentation", ...props, children: rendered }, key);
6
+ }
7
+ export {
8
+ MenuHeader
9
+ };
@@ -0,0 +1 @@
1
+ export * from './MenuHeader';
@@ -0,0 +1,3 @@
1
+ import type { AriaMenuOptions } from '@koobiq/react-primitives';
2
+ export type MenuInnerProps<T> = AriaMenuOptions<T>;
3
+ export declare function MenuInner<T extends object>(props: MenuInnerProps<T>): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,45 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { useRef } from "react";
4
+ import { clsx } from "@koobiq/react-core";
5
+ import { useTreeState, useMenu } from "@koobiq/react-primitives";
6
+ import { utilClasses } from "../../../../styles/utility.js";
7
+ import s from "./MenuInner.module.css.js";
8
+ import { MenuSection } from "../MenuSection/MenuSection.js";
9
+ import { Divider } from "../../../Divider/Divider.js";
10
+ import { MenuHeader } from "../MenuHeader/MenuHeader.js";
11
+ import { MenuItem } from "../MenuItem/MenuItem.js";
12
+ const { list } = utilClasses;
13
+ function MenuInner(props) {
14
+ const state = useTreeState(props);
15
+ const ref = useRef(null);
16
+ const { menuProps } = useMenu(props, state, ref);
17
+ const multiple = props.selectionMode === "multiple";
18
+ const renderItems = (treeState) => [...treeState.collection].map((item) => {
19
+ switch (item.type) {
20
+ case "header":
21
+ return /* @__PURE__ */ jsx(MenuHeader, { item }, item.key);
22
+ case "divider":
23
+ return /* @__PURE__ */ jsx(Divider, { className: s.divider }, item.key);
24
+ case "item":
25
+ return /* @__PURE__ */ jsx(MenuItem, { item, state }, item.key);
26
+ case "section":
27
+ return /* @__PURE__ */ jsx(MenuSection, { section: item, state }, item.key);
28
+ default:
29
+ return null;
30
+ }
31
+ });
32
+ return /* @__PURE__ */ jsx(
33
+ "ul",
34
+ {
35
+ ...menuProps,
36
+ className: clsx(s.base, list),
37
+ ...multiple && { "aria-multiselectable": true },
38
+ ref,
39
+ children: renderItems(state)
40
+ }
41
+ );
42
+ }
43
+ export {
44
+ MenuInner
45
+ };
@@ -0,0 +1,11 @@
1
+ const base = "kbq-menuinner-0117f8";
2
+ const divider = "kbq-menuinner-divider-acbe04";
3
+ const s = {
4
+ base,
5
+ divider
6
+ };
7
+ export {
8
+ base,
9
+ s as default,
10
+ divider
11
+ };
@@ -0,0 +1 @@
1
+ export * from './MenuInner';
@@ -0,0 +1,6 @@
1
+ import type { Node, TreeState } from '@koobiq/react-primitives';
2
+ export type MenuItemProps<T> = {
3
+ item: Node<T>;
4
+ state: TreeState<T>;
5
+ };
6
+ export declare function MenuItem<T>({ item, state }: MenuItemProps<T>): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,36 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { useRef } from "react";
4
+ import { useHover, usePress, clsx, mergeProps } from "@koobiq/react-core";
5
+ import { useMenuItem } from "@koobiq/react-primitives";
6
+ import { utilClasses } from "../../../../styles/utility.js";
7
+ const { listItem } = utilClasses;
8
+ const textVariant = utilClasses.typography;
9
+ function MenuItem({ item, state }) {
10
+ const ref = useRef(null);
11
+ const {
12
+ menuItemProps,
13
+ isSelected: selected,
14
+ isDisabled: disabled,
15
+ isFocusVisible: focusVisible
16
+ } = useMenuItem({ key: item.key }, state, ref);
17
+ const { hoverProps, isHovered: hovered } = useHover({ isDisabled: disabled });
18
+ const { isPressed: pressed, pressProps } = usePress({ isDisabled: disabled });
19
+ const Tag = item.props.href ? "a" : "li";
20
+ return /* @__PURE__ */ jsx(
21
+ Tag,
22
+ {
23
+ ...mergeProps(menuItemProps, hoverProps, pressProps),
24
+ "data-hovered": hovered,
25
+ "data-pressed": pressed,
26
+ "data-selected": selected,
27
+ "data-focus-visible": focusVisible,
28
+ className: clsx(listItem, textVariant["text-normal"]),
29
+ ref,
30
+ children: item.rendered
31
+ }
32
+ );
33
+ }
34
+ export {
35
+ MenuItem
36
+ };
@@ -0,0 +1 @@
1
+ export * from './MenuItem';
@@ -0,0 +1,6 @@
1
+ import type { Node, TreeState } from '@koobiq/react-primitives';
2
+ export type MenuSectionProps<T> = {
3
+ section: Node<T>;
4
+ state: TreeState<T>;
5
+ };
6
+ export declare function MenuSection<T>({ section, state }: MenuSectionProps<T>): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,30 @@
1
+ "use client";
2
+ import { jsx, Fragment, jsxs } from "react/jsx-runtime";
3
+ import { useMenuSection } from "@koobiq/react-primitives";
4
+ import s from "./MenuSection.module.css.js";
5
+ import { MenuItem } from "../MenuItem/MenuItem.js";
6
+ import { Typography } from "../../../Typography/Typography.js";
7
+ function MenuSection({ section, state }) {
8
+ const { itemProps, headingProps, groupProps } = useMenuSection({
9
+ heading: section.rendered,
10
+ "aria-label": section["aria-label"]
11
+ });
12
+ return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs("li", { ...itemProps, children: [
13
+ section.rendered && /* @__PURE__ */ jsx(
14
+ Typography,
15
+ {
16
+ as: "span",
17
+ display: "block",
18
+ variant: "caps-compact-strong",
19
+ color: "contrast-secondary",
20
+ className: s.heading,
21
+ ...headingProps,
22
+ children: section.rendered
23
+ }
24
+ ),
25
+ /* @__PURE__ */ jsx("ul", { ...groupProps, className: s.base, children: [...section.childNodes].map((node) => /* @__PURE__ */ jsx(MenuItem, { item: node, state }, node.key)) })
26
+ ] }) });
27
+ }
28
+ export {
29
+ MenuSection
30
+ };
@@ -0,0 +1,11 @@
1
+ const base = "kbq-menusection-6a5530";
2
+ const heading = "kbq-menusection-heading-2be1f1";
3
+ const s = {
4
+ base,
5
+ heading
6
+ };
7
+ export {
8
+ base,
9
+ s as default,
10
+ heading
11
+ };
@@ -0,0 +1 @@
1
+ export * from './MenuSection';
@@ -0,0 +1 @@
1
+ export * from './MenuInner';
@@ -0,0 +1,2 @@
1
+ export * from './Menu';
2
+ export * from './types';
@@ -0,0 +1,62 @@
1
+ import type { ComponentRef, CSSProperties, ReactElement, Ref, RefObject } from 'react';
2
+ import type { ButtonOptions, AriaMenuProps } from '@koobiq/react-primitives';
3
+ import type { PopoverInnerProps, PopoverPropPlacement } from '../Popover';
4
+ export type MenuPropControl = (props: ButtonOptions & {
5
+ ref?: Ref<HTMLButtonElement>;
6
+ }) => ReactElement;
7
+ export type MenuPropChildren<T extends object> = AriaMenuProps<T>['children'];
8
+ export type MenuPropItems<T extends object> = AriaMenuProps<T>['items'];
9
+ export declare const menuPropSelectionMode: readonly ["none", "single", "multiple"];
10
+ export type MenuPropSelectionMode = (typeof menuPropSelectionMode)[number];
11
+ export type MenuPropOnAction<T extends object> = AriaMenuProps<T>['onAction'];
12
+ export type MenuPropSelected<T extends object> = AriaMenuProps<T>['selectedKeys'];
13
+ export type MenuPropSelectionChange<T extends object> = AriaMenuProps<T>['onSelectionChange'];
14
+ export type MenuPropDisabledKeys<T extends object> = AriaMenuProps<T>['disabledKeys'];
15
+ export type MenuPropPlacement = PopoverPropPlacement;
16
+ export type MenuProps<T extends object> = {
17
+ /** Additional CSS-classes. */
18
+ className?: string;
19
+ /** Unique identifier for testing purposes. */
20
+ 'data-testid'?: string | number;
21
+ /** Inline styles. */
22
+ style?: CSSProperties;
23
+ /** The contents of the collection. */
24
+ children?: MenuPropChildren<T>;
25
+ /** The render function of the control for displaying the modal window. */
26
+ control?: MenuPropControl;
27
+ /** Whether the overlay is open by default (controlled). */
28
+ open?: boolean;
29
+ /** Whether the overlay is open by default (uncontrolled). */
30
+ defaultOpen?: boolean;
31
+ /** Handler that is called when the overlay's open state changes. */
32
+ onOpenChange?: (isOpen: boolean) => void;
33
+ /** Item objects in the collection. */
34
+ items?: MenuPropItems<T>;
35
+ /** The type of selection that is allowed in the collection. */
36
+ selectionMode?: MenuPropSelectionMode;
37
+ /**
38
+ * Handler that is called when a user performs an action on an item. The exact user event depends on
39
+ * the collection's `selectionBehavior` prop and the interaction modality.
40
+ */
41
+ onAction?: MenuPropOnAction<T>;
42
+ /** The currently selected keys in the collection (controlled). */
43
+ selectedKeys?: MenuPropSelected<T>;
44
+ /** Handler that is called when the selection changes. */
45
+ onSelectionChange?: MenuPropSelectionChange<T>;
46
+ disabledKeys?: MenuPropDisabledKeys<T>;
47
+ /** The ref for the element which the popover positions itself with respect to. */
48
+ anchorRef?: RefObject<HTMLElement | null>;
49
+ /**
50
+ * The placement of the element with respect to its anchor element.
51
+ * @default bottom start
52
+ * */
53
+ placement?: MenuPropPlacement;
54
+ /** Ref to the popover */
55
+ ref?: Ref<HTMLDivElement>;
56
+ /** The props used for each slot inside. */
57
+ slotProps?: {
58
+ popover?: PopoverInnerProps;
59
+ };
60
+ };
61
+ export type MenuComponentProps = <T extends object>(props: MenuProps<T>) => ReactElement | null;
62
+ export type MenuRef = ComponentRef<'div'>;
@@ -0,0 +1,4 @@
1
+ const menuPropSelectionMode = ["none", "single", "multiple"];
2
+ export {
3
+ menuPropSelectionMode
4
+ };
@@ -1,2 +1,10 @@
1
+ import { Dialog } from '../Dialog';
1
2
  import type { ModalProps } from './types';
2
- export declare const Modal: import("react").ForwardRefExoticComponent<ModalProps & import("react").RefAttributes<HTMLDivElement>>;
3
+ declare const ModalComponent: import("react").ForwardRefExoticComponent<ModalProps & import("react").RefAttributes<HTMLDivElement>>;
4
+ type CompoundedComponent = typeof ModalComponent & {
5
+ Header: typeof Dialog.Header;
6
+ Body: typeof Dialog.Body;
7
+ Footer: typeof Dialog.Footer;
8
+ };
9
+ export declare const Modal: CompoundedComponent;
10
+ export {};
@@ -7,21 +7,22 @@ import { Transition } from "react-transition-group";
7
7
  import s from "./Modal.module.css.js";
8
8
  import { Backdrop } from "../Backdrop/Backdrop.js";
9
9
  import { Dialog } from "../Dialog/Dialog.js";
10
- const Modal = forwardRef((props, ref) => {
10
+ const ModalComponent = forwardRef((props, ref) => {
11
11
  const {
12
- hideCloseButton = false,
13
12
  size = "medium",
14
- disableExitOnEscapeKeyDown,
15
- disableExitOnClickOutside,
16
- disableFocusManagement,
17
- portalContainer,
18
- open: openProp,
19
- hideBackdrop,
20
- onOpenChange,
21
- defaultOpen,
22
- children,
13
+ hideCloseButton = false,
23
14
  control,
15
+ children,
24
16
  slotProps,
17
+ defaultOpen,
18
+ hideBackdrop,
19
+ onOpenChange,
20
+ open: openProp,
21
+ portalContainer,
22
+ disableFocusManagement,
23
+ disableExitOnClickOutside,
24
+ disableExitOnEscapeKeyDown,
25
+ shouldCloseOnInteractOutside,
25
26
  ...other
26
27
  } = props;
27
28
  const state = useOverlayTriggerState({
@@ -41,6 +42,7 @@ const Modal = forwardRef((props, ref) => {
41
42
  const { modalProps: modalCommonProps, underlayProps } = useModalOverlay(
42
43
  {
43
44
  ...props,
45
+ shouldCloseOnInteractOutside,
44
46
  isDismissable: !disableExitOnClickOutside,
45
47
  isKeyboardDismissDisabled: disableExitOnEscapeKeyDown
46
48
  },
@@ -55,9 +57,9 @@ const Modal = forwardRef((props, ref) => {
55
57
  };
56
58
  const containerProps = mergeProps(
57
59
  {
58
- className: clsx(s.base, s[size]),
59
60
  ref: containerRef,
60
- "data-size": size
61
+ "data-size": size,
62
+ className: clsx(s.base, s[size])
61
63
  },
62
64
  other
63
65
  );
@@ -83,10 +85,9 @@ const Modal = forwardRef((props, ref) => {
83
85
  },
84
86
  slotProps?.modal
85
87
  );
86
- const { isDisabled, onPress, ...otherTriggerProps } = triggerProps;
88
+ const { isDisabled, ...otherTriggerProps } = triggerProps;
87
89
  return /* @__PURE__ */ jsxs(Fragment, { children: [
88
90
  control?.({
89
- onClick: onPress,
90
91
  disabled: isDisabled,
91
92
  ...otherTriggerProps
92
93
  }),
@@ -115,7 +116,11 @@ const Modal = forwardRef((props, ref) => {
115
116
  )
116
117
  ] });
117
118
  });
118
- Modal.displayName = "Modal";
119
+ ModalComponent.displayName = "Modal";
120
+ const Modal = ModalComponent;
121
+ Modal.Header = Dialog.Header;
122
+ Modal.Body = Dialog.Body;
123
+ Modal.Footer = Dialog.Footer;
119
124
  export {
120
125
  Modal
121
126
  };
@@ -1,4 +1,17 @@
1
1
  export * from './Modal';
2
2
  export * from './types';
3
- export { DialogHeader, DialogFooter, DialogContent } from '../Dialog';
4
- export { DialogHeader as ModalHeader, DialogContent as ModalContent, DialogFooter as ModalFooter, } from '../Dialog';
3
+ /**
4
+ * @deprecated
5
+ * This component has been deprecated, please use `Modal.Header` instead.
6
+ */
7
+ export declare const ModalHeader: import("react").ForwardRefExoticComponent<Omit<import("../Dialog").DialogHeaderProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
8
+ /**
9
+ * @deprecated
10
+ * This component has been deprecated, please use `Modal.Body` instead.
11
+ */
12
+ export declare const ModalContent: import("react").ForwardRefExoticComponent<Omit<import("../Dialog").DialogBodyProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
13
+ /**
14
+ * @deprecated
15
+ * This component has been deprecated, please use `Modal.Footer` instead.
16
+ */
17
+ export declare const ModalFooter: import("react").ForwardRefExoticComponent<Omit<import("../Dialog").DialogFooterProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,9 @@
1
+ import { Dialog } from "../Dialog/Dialog.js";
2
+ const ModalHeader = Dialog.Header;
3
+ const ModalContent = Dialog.Body;
4
+ const ModalFooter = Dialog.Footer;
5
+ export {
6
+ ModalContent,
7
+ ModalFooter,
8
+ ModalHeader
9
+ };
@@ -58,6 +58,13 @@ export type ModalProps = {
58
58
  * @default false
59
59
  */
60
60
  disableFocusManagement?: boolean;
61
+ /**
62
+ * When user interacts with the argument element outside of the overlay ref,
63
+ * return true if onClose should be called. This gives you a chance to filter
64
+ * out interaction with elements that should not dismiss the overlay.
65
+ * By default, onClose will always be called on interaction outside the overlay ref.
66
+ */
67
+ shouldCloseOnInteractOutside?: (element: Element) => boolean;
61
68
  /** The props used for each slot inside. */
62
69
  slotProps?: {
63
70
  dialog?: DialogProps;
@@ -1,2 +1,12 @@
1
- import type { PopoverProps } from './types';
2
- export declare const Popover: import("react").ForwardRefExoticComponent<PopoverProps & import("react").RefAttributes<HTMLDivElement>>;
1
+ import type { FC } from 'react';
2
+ import { Dialog } from '../Dialog';
3
+ import type { PopoverInnerProps } from './types';
4
+ export declare const PopoverInner: FC<PopoverInnerProps>;
5
+ declare const PopoverComponent: import("react").ForwardRefExoticComponent<import("./types").PopoverBaseProps & import("react").RefAttributes<HTMLDivElement>>;
6
+ type CompoundedComponent = typeof PopoverComponent & {
7
+ Header: typeof Dialog.Header;
8
+ Body: typeof Dialog.Body;
9
+ Footer: typeof Dialog.Footer;
10
+ };
11
+ export declare const Popover: CompoundedComponent;
12
+ export {};