@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
@@ -0,0 +1,179 @@
1
+ import { jsxs, Fragment, jsx } from "react/jsx-runtime";
2
+ import { forwardRef } from "react";
3
+ import { useDOMRef, useBoolean, mergeProps, clsx, useElementSize } from "@koobiq/react-core";
4
+ import { IconChevronDownS16 } from "@koobiq/react-icons";
5
+ import { useSelectState, useSelect, HiddenSelect } from "@koobiq/react-primitives";
6
+ import s from "./Select.module.css.js";
7
+ import { FieldSelect } from "../FieldComponents/FieldSelect/FieldSelect.js";
8
+ import { PopoverInner } from "../Popover/Popover.js";
9
+ import { ListInner } from "../List/List.js";
10
+ import { FieldLabel } from "../FieldComponents/FieldLabel/FieldLabel.js";
11
+ import { FieldInputGroup } from "../FieldComponents/FieldInputGroup/FieldInputGroup.js";
12
+ import { FieldCaption } from "../FieldComponents/FieldCaption/FieldCaption.js";
13
+ import { FieldError } from "../FieldComponents/FieldError/FieldError.js";
14
+ import { Item } from "../Collections/Item.js";
15
+ import { Section } from "../Collections/Section.js";
16
+ import { ListItemText } from "../List/components/ListItemText/ListItemText.js";
17
+ function SelectRender(props, ref) {
18
+ const {
19
+ fullWidth = false,
20
+ hiddenLabel = false,
21
+ "data-testid": testId,
22
+ open,
23
+ onOpenChange,
24
+ defaultOpen,
25
+ items,
26
+ error,
27
+ caption,
28
+ endAddon,
29
+ required,
30
+ disabled,
31
+ children,
32
+ slotProps,
33
+ startAddon,
34
+ selectedKey,
35
+ placeholder,
36
+ errorMessage,
37
+ disabledKeys,
38
+ onSelectionChange,
39
+ defaultSelectedKey,
40
+ renderValue: renderValueProp,
41
+ ...other
42
+ } = props;
43
+ const state = useSelectState({
44
+ ...other,
45
+ items,
46
+ defaultOpen,
47
+ onOpenChange,
48
+ isOpen: open,
49
+ placeholder,
50
+ selectedKey,
51
+ disabledKeys,
52
+ errorMessage,
53
+ isInvalid: error,
54
+ onSelectionChange,
55
+ defaultSelectedKey,
56
+ isRequired: required,
57
+ isDisabled: disabled,
58
+ children
59
+ });
60
+ const domRef = useDOMRef(ref);
61
+ const [opened, { on, off }] = useBoolean(state.isOpen);
62
+ const {
63
+ menuProps,
64
+ valueProps,
65
+ triggerProps,
66
+ labelProps: labelPropsCommon
67
+ } = useSelect(
68
+ {
69
+ ...other,
70
+ placeholder,
71
+ errorMessage,
72
+ disabledKeys,
73
+ isInvalid: error,
74
+ isRequired: required,
75
+ isDisabled: disabled
76
+ },
77
+ { ...state, isOpen: state.isOpen || opened },
78
+ domRef
79
+ );
80
+ const rootProps = mergeProps(
81
+ {
82
+ "data-testid": testId,
83
+ "data-fullwidth": fullWidth,
84
+ "data-disabled": disabled,
85
+ "data-required": required,
86
+ "data-error": error,
87
+ className: clsx(s.base, fullWidth && s.fullWidth)
88
+ },
89
+ other
90
+ );
91
+ const { ref: containerRef, width } = useElementSize();
92
+ const listProps = mergeProps(
93
+ { className: s.list, state },
94
+ slotProps?.list,
95
+ menuProps
96
+ );
97
+ const labelProps = mergeProps(
98
+ { hidden: hiddenLabel, required },
99
+ slotProps?.label,
100
+ labelPropsCommon
101
+ );
102
+ const groupProps = mergeProps(
103
+ {
104
+ slotProps: {
105
+ end: { className: s.addon },
106
+ start: { className: s.addon }
107
+ },
108
+ startAddon,
109
+ endAddon: /* @__PURE__ */ jsxs(Fragment, { children: [
110
+ endAddon,
111
+ /* @__PURE__ */ jsx(IconChevronDownS16, {})
112
+ ] }),
113
+ error,
114
+ ref: containerRef
115
+ },
116
+ slotProps?.group
117
+ );
118
+ const controlProps = mergeProps(
119
+ {
120
+ error,
121
+ disabled,
122
+ ref: domRef,
123
+ placeholder
124
+ },
125
+ slotProps?.control,
126
+ valueProps,
127
+ triggerProps
128
+ );
129
+ const captionProps = slotProps?.caption;
130
+ const errorProps = mergeProps({ error }, slotProps?.errorMessage);
131
+ const popoverProps = mergeProps(
132
+ {
133
+ state,
134
+ offset: 4,
135
+ size: width,
136
+ hideArrow: true,
137
+ anchorRef: domRef,
138
+ className: s.popover,
139
+ placement: "bottom start",
140
+ type: "listbox",
141
+ slotProps: {
142
+ transition: {
143
+ onEnter: on,
144
+ onExited: off
145
+ }
146
+ }
147
+ },
148
+ slotProps?.popover
149
+ );
150
+ const renderDefaultValue = (selectedItem) => selectedItem?.rendered;
151
+ const renderValue = renderValueProp || renderDefaultValue;
152
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
153
+ /* @__PURE__ */ jsxs("div", { ...rootProps, children: [
154
+ /* @__PURE__ */ jsx(FieldLabel, { ...labelProps, children: props.label }),
155
+ /* @__PURE__ */ jsx(
156
+ HiddenSelect,
157
+ {
158
+ state,
159
+ isDisabled: disabled,
160
+ triggerRef: domRef,
161
+ label: props.label,
162
+ name: props.name
163
+ }
164
+ ),
165
+ /* @__PURE__ */ jsx(FieldInputGroup, { ...groupProps, children: /* @__PURE__ */ jsx(FieldSelect, { ...controlProps, children: renderValue(state?.selectedItem) }) }),
166
+ /* @__PURE__ */ jsx(FieldCaption, { ...captionProps, children: captionProps?.children || caption }),
167
+ /* @__PURE__ */ jsx(FieldError, { ...errorProps, children: errorProps.children || errorMessage })
168
+ ] }),
169
+ /* @__PURE__ */ jsx(PopoverInner, { ...popoverProps, children: /* @__PURE__ */ jsx(ListInner, { ...listProps }) })
170
+ ] });
171
+ }
172
+ const SelectComponent = forwardRef(SelectRender);
173
+ const Select = SelectComponent;
174
+ Select.Item = Item;
175
+ Select.Section = Section;
176
+ Select.ItemText = ListItemText;
177
+ export {
178
+ Select
179
+ };
@@ -0,0 +1,20 @@
1
+ const base = "kbq-select-6d31ad";
2
+ const fullWidth = "kbq-select-fullWidth-1dfc13";
3
+ const addon = "kbq-select-addon-cbc524";
4
+ const popover = "kbq-select-popover-79fc05";
5
+ const list = "kbq-select-list-8ffac0";
6
+ const s = {
7
+ base,
8
+ fullWidth,
9
+ addon,
10
+ popover,
11
+ list
12
+ };
13
+ export {
14
+ addon,
15
+ base,
16
+ s as default,
17
+ fullWidth,
18
+ list,
19
+ popover
20
+ };
@@ -0,0 +1,2 @@
1
+ export * from './Select';
2
+ export * from './types';
@@ -0,0 +1,87 @@
1
+ import type { ComponentRef, CSSProperties, ReactElement, ReactNode, Ref } from 'react';
2
+ import type { Node } from '@koobiq/react-primitives';
3
+ import type { FieldErrorProps, FieldLabelProps, FieldSelectProps, FieldCaptionProps, FieldInputGroupProps } from '../FieldComponents';
4
+ import type { ListPropItems, ListPropChildren, ListPropDisabledKeys } from '../List';
5
+ import type { PopoverProps } from '../Popover';
6
+ export type SelectKey = string | number;
7
+ export type SelectPropOnSelectionChange = (selected: SelectKey) => void;
8
+ export type SelectProps<T extends object> = {
9
+ /** Additional CSS-classes. */
10
+ className?: string;
11
+ /** The content to display as the label. */
12
+ label?: ReactNode;
13
+ /** The contents of the collection. */
14
+ children?: ListPropChildren<T>;
15
+ /** Item objects in the collection. */
16
+ items?: ListPropItems<T>;
17
+ /** Addon placed before the children. */
18
+ startAddon?: ReactNode;
19
+ /** Addon placed after the children. */
20
+ endAddon?: ReactNode;
21
+ /** Inline styles. */
22
+ style?: CSSProperties;
23
+ /** The text appears in a control until the user puts focus on the field. */
24
+ placeholder?: string;
25
+ /**
26
+ * If `true`, the input will indicate an error.
27
+ * @default false
28
+ * */
29
+ error?: boolean;
30
+ /** Message for the error state */
31
+ errorMessage?: string | number;
32
+ /**
33
+ * If `true`, the label is hidden. Be sure to add aria-label to the input element.
34
+ * @default false
35
+ * */
36
+ hiddenLabel?: boolean;
37
+ /** The helper text content. */
38
+ caption?: string | number;
39
+ /**
40
+ * If true, the input will take up the full width of its container.
41
+ * @default false
42
+ * */
43
+ fullWidth?: boolean;
44
+ /**
45
+ * If `true`, the component is disabled.
46
+ * @default false
47
+ * */
48
+ disabled?: boolean;
49
+ /**
50
+ * If `true`, the label is displayed as required and the input element is required.
51
+ * @default false
52
+ * */
53
+ required?: boolean;
54
+ /** Unique identifier for testing purposes. */
55
+ 'data-testid'?: string | number;
56
+ /** Ref to the control */
57
+ ref?: Ref<HTMLButtonElement>;
58
+ /** The item keys that are disabled. These items cannot be selected, focused, or otherwise interacted with. */
59
+ disabledKeys?: ListPropDisabledKeys<T>;
60
+ /** The initial selected key in the collection (uncontrolled). */
61
+ defaultSelectedKey?: SelectKey;
62
+ /** The currently selected key in the collection (controlled). */
63
+ selectedKey?: SelectKey | null;
64
+ /** Handler that is called when the selection changes. */
65
+ onSelectionChange?: SelectPropOnSelectionChange;
66
+ /** Sets the open state of the menu. */
67
+ open?: boolean;
68
+ /** Sets the default open state of the menu. */
69
+ defaultOpen?: boolean;
70
+ /** Method that is called when the open state of the menu changes. */
71
+ onOpenChange?: (isOpen: boolean) => void;
72
+ /** A render function for displaying the selected value. */
73
+ renderValue?: (props: Node<T> | null) => ReactElement;
74
+ name?: string;
75
+ /** The props used for each slot inside. */
76
+ slotProps?: {
77
+ popover?: PopoverProps;
78
+ label?: FieldLabelProps;
79
+ list?: ListPropChildren<T>;
80
+ control?: FieldSelectProps;
81
+ caption?: FieldCaptionProps;
82
+ group?: FieldInputGroupProps;
83
+ errorMessage?: FieldErrorProps;
84
+ };
85
+ };
86
+ export type SelectComponentProp = <T extends object>(props: SelectProps<T>) => ReactElement | null;
87
+ export type SelectRef = ComponentRef<'button'>;
@@ -1,2 +1,10 @@
1
+ import { Dialog } from '../Dialog';
1
2
  import type { SidePanelProps } from './types';
2
- export declare const SidePanel: import("react").ForwardRefExoticComponent<SidePanelProps & import("react").RefAttributes<HTMLDivElement>>;
3
+ declare const SidePanelComponent: import("react").ForwardRefExoticComponent<SidePanelProps & import("react").RefAttributes<HTMLDivElement>>;
4
+ type CompoundedComponent = typeof SidePanelComponent & {
5
+ Header: typeof Dialog.Header;
6
+ Body: typeof Dialog.Body;
7
+ Footer: typeof Dialog.Footer;
8
+ };
9
+ export declare const SidePanel: CompoundedComponent;
10
+ export {};
@@ -7,23 +7,24 @@ import { Transition } from "react-transition-group";
7
7
  import s from "./SidePanel.module.css.js";
8
8
  import { Backdrop } from "../Backdrop/Backdrop.js";
9
9
  import { Dialog } from "../Dialog/Dialog.js";
10
- const SidePanel = forwardRef(
10
+ const SidePanelComponent = forwardRef(
11
11
  (props, ref) => {
12
12
  const {
13
- hideCloseButton = false,
14
- position = "left",
15
13
  size = "medium",
16
- disableExitOnEscapeKeyDown,
17
- disableExitOnClickOutside,
18
- disableFocusManagement,
19
- portalContainer,
20
- open: openProp,
21
- hideBackdrop,
22
- onOpenChange,
23
- defaultOpen,
24
- children,
14
+ position = "left",
15
+ hideCloseButton = false,
25
16
  control,
17
+ children,
26
18
  slotProps,
19
+ defaultOpen,
20
+ onOpenChange,
21
+ hideBackdrop,
22
+ open: openProp,
23
+ portalContainer,
24
+ disableFocusManagement,
25
+ disableExitOnClickOutside,
26
+ disableExitOnEscapeKeyDown,
27
+ shouldCloseOnInteractOutside,
27
28
  ...other
28
29
  } = props;
29
30
  const state = useOverlayTriggerState({
@@ -43,6 +44,7 @@ const SidePanel = forwardRef(
43
44
  const { modalProps: modalCommonProps, underlayProps } = useModalOverlay(
44
45
  {
45
46
  ...props,
47
+ shouldCloseOnInteractOutside,
46
48
  isDismissable: !disableExitOnClickOutside,
47
49
  isKeyboardDismissDisabled: disableExitOnEscapeKeyDown
48
50
  },
@@ -57,10 +59,10 @@ const SidePanel = forwardRef(
57
59
  };
58
60
  const containerProps = mergeProps(
59
61
  {
60
- className: clsx(s.base, s[size], s[position]),
62
+ ref: containerRef,
61
63
  "data-size": size,
62
64
  "data-position": position,
63
- ref: containerRef
65
+ className: clsx(s.base, s[size], s[position])
64
66
  },
65
67
  other
66
68
  );
@@ -81,15 +83,14 @@ const SidePanel = forwardRef(
81
83
  const panelProps = mergeProps(
82
84
  modalCommonProps,
83
85
  {
84
- className: s.panel,
85
- ref: modalRef
86
+ ref: modalRef,
87
+ className: s.panel
86
88
  },
87
89
  slotProps?.panel
88
90
  );
89
- const { isDisabled, onPress, ...otherTriggerProps } = triggerProps;
91
+ const { isDisabled, ...otherTriggerProps } = triggerProps;
90
92
  return /* @__PURE__ */ jsxs(Fragment, { children: [
91
93
  control?.({
92
- onClick: onPress,
93
94
  disabled: isDisabled,
94
95
  ...otherTriggerProps
95
96
  }),
@@ -119,7 +120,11 @@ const SidePanel = forwardRef(
119
120
  ] });
120
121
  }
121
122
  );
122
- SidePanel.displayName = "SidePanel";
123
+ SidePanelComponent.displayName = "SidePanel";
124
+ const SidePanel = SidePanelComponent;
125
+ SidePanel.Header = Dialog.Header;
126
+ SidePanel.Body = Dialog.Body;
127
+ SidePanel.Footer = Dialog.Footer;
123
128
  export {
124
129
  SidePanel
125
130
  };
@@ -1,4 +1,17 @@
1
1
  export * from './SidePanel';
2
2
  export * from './types';
3
- export { DialogHeader, DialogFooter, DialogContent } from '../Dialog';
4
- export { DialogHeader as SidePanelHeader, DialogContent as SidePanelContent, DialogFooter as SidePanelFooter, } from '../Dialog';
3
+ /**
4
+ * @deprecated
5
+ * This component has been deprecated, please use `SidePanel.Header` instead.
6
+ */
7
+ export declare const SidePanelHeader: import("react").ForwardRefExoticComponent<Omit<import("../Dialog").DialogHeaderProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
8
+ /**
9
+ * @deprecated
10
+ * This component has been deprecated, please use `SidePanel.Body` instead.
11
+ */
12
+ export declare const SidePanelContent: import("react").ForwardRefExoticComponent<Omit<import("../Dialog").DialogBodyProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
13
+ /**
14
+ * @deprecated
15
+ * This component has been deprecated, please use `SidePanel.Footer` instead.
16
+ */
17
+ export declare const SidePanelFooter: 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 SidePanelHeader = Dialog.Header;
3
+ const SidePanelContent = Dialog.Body;
4
+ const SidePanelFooter = Dialog.Footer;
5
+ export {
6
+ SidePanelContent,
7
+ SidePanelFooter,
8
+ SidePanelHeader
9
+ };
@@ -65,6 +65,13 @@ export type SidePanelProps = {
65
65
  * @default false
66
66
  */
67
67
  disableFocusManagement?: boolean;
68
+ /**
69
+ * When user interacts with the argument element outside of the overlay ref,
70
+ * return true if onClose should be called. This gives you a chance to filter
71
+ * out interaction with elements that should not dismiss the overlay.
72
+ * By default, onClose will always be called on interaction outside the overlay ref.
73
+ */
74
+ shouldCloseOnInteractOutside?: (element: Element) => boolean;
68
75
  /** The props used for each slot inside. */
69
76
  slotProps?: {
70
77
  dialog?: DialogProps;
@@ -2,7 +2,6 @@ const base = "kbq-skeletonblock-e98401";
2
2
  const hasChildren = "kbq-skeletonblock-hasChildren-88ab53";
3
3
  const s = {
4
4
  base,
5
- "skeleton-wave": "kbq-skeletonblock-skeleton-wave-3094a0",
6
5
  hasChildren
7
6
  };
8
7
  export {
@@ -4,10 +4,13 @@ const getRowWidth = (idx, rows = 0) => {
4
4
  return "50%";
5
5
  }
6
6
  switch (idx % 3) {
7
+ // The first, fourth etc.
7
8
  case 0:
8
9
  return "95%";
10
+ // The second, fifth etc.
9
11
  case 1:
10
12
  return "100%";
13
+ // The third, sixth etc.
11
14
  case 2:
12
15
  return "90%";
13
16
  }
@@ -0,0 +1,24 @@
1
+ import type { ComponentPropsWithRef, CSSProperties, ReactNode } from 'react';
2
+ import type { ItemProps as AriaItemProps } from '@koobiq/react-primitives';
3
+ import type { IconButtonProps } from '../IconButton';
4
+ export type TagProps<T> = AriaItemProps<T> & {
5
+ /** Additional CSS-classes. */
6
+ className?: string;
7
+ /** Inline styles. */
8
+ style?: CSSProperties;
9
+ /** Unique identifier for testing purposes. */
10
+ 'data-testid'?: string | number;
11
+ /** Icon placed before the children. */
12
+ icon?: ReactNode;
13
+ /** The props used for each slot inside. */
14
+ slotProps?: {
15
+ root?: ComponentPropsWithRef<'div'>;
16
+ icon?: ComponentPropsWithRef<'span'>;
17
+ content?: ComponentPropsWithRef<'span'>;
18
+ removeIcon?: IconButtonProps;
19
+ };
20
+ };
21
+ export declare function Tag<T>(_props: TagProps<T>): null;
22
+ export declare namespace Tag {
23
+ var getCollectionNode: unknown;
24
+ }
@@ -0,0 +1,10 @@
1
+ "use client";
2
+ import { Item } from "@koobiq/react-primitives";
3
+ const ItemInner = Item;
4
+ function Tag(_props) {
5
+ return null;
6
+ }
7
+ Tag.getCollectionNode = ItemInner.getCollectionNode;
8
+ export {
9
+ Tag
10
+ };
@@ -0,0 +1,2 @@
1
+ import type { TagGroupComponentProp } from './types';
2
+ export declare const TagGroup: TagGroupComponentProp;
@@ -0,0 +1,22 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { forwardRef } from "react";
3
+ import { useDOMRef, mergeProps, clsx } from "@koobiq/react-core";
4
+ import { useListState, useTagGroup } from "@koobiq/react-primitives";
5
+ import s from "./TagGroup.module.css.js";
6
+ import { TagInner } from "./components/TagInner/TagInner.js";
7
+ function TagGroupRender(props, ref) {
8
+ const { variant = "theme-fade", style, className, slotProps } = props;
9
+ const domRef = useDOMRef(ref);
10
+ const state = useListState(props);
11
+ const { gridProps } = useTagGroup(props, state, domRef);
12
+ const rootProps = mergeProps(
13
+ { className: clsx(s.base, className), style, ref: domRef },
14
+ gridProps,
15
+ slotProps?.root
16
+ );
17
+ return /* @__PURE__ */ jsx("div", { ...rootProps, children: [...state.collection].map((item) => /* @__PURE__ */ jsx(TagInner, { item, variant, state }, item.key)) });
18
+ }
19
+ const TagGroup = forwardRef(TagGroupRender);
20
+ export {
21
+ TagGroup
22
+ };
@@ -0,0 +1,8 @@
1
+ const base = "kbq-taggroup-20136b";
2
+ const s = {
3
+ base
4
+ };
5
+ export {
6
+ base,
7
+ s as default
8
+ };
@@ -0,0 +1,11 @@
1
+ import { type AriaTagProps, type ListState } from '@koobiq/react-primitives';
2
+ import type { TagGroupPropVariant } from '../../index';
3
+ export type TagInnerProps<T> = AriaTagProps<T> & {
4
+ state: ListState<T>;
5
+ /**
6
+ * The variant to use.
7
+ * @default theme-fade
8
+ * */
9
+ variant?: TagGroupPropVariant;
10
+ };
11
+ export declare function TagInner<T>(props: TagInnerProps<T>): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,86 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { useRef } from "react";
3
+ import { useFocusRing, useHover, mergeProps, clsx, isNotNil } from "@koobiq/react-core";
4
+ import { IconXmarkS16 } from "@koobiq/react-icons";
5
+ import { useLocalizedStringFormatter, useTag } from "@koobiq/react-primitives";
6
+ import { utilClasses } from "../../../../styles/utility.js";
7
+ import intlMessages from "../../intl.json.js";
8
+ import s from "./TagInner.module.css.js";
9
+ import { matchVariantToCloseButton } from "./utils.js";
10
+ import { IconButton } from "../../../IconButton/IconButton.js";
11
+ const textNormalMedium = utilClasses.typography["text-normal-medium"];
12
+ function TagInner(props) {
13
+ const { item, state, variant = "theme-fade" } = props;
14
+ const { slotProps, icon, className, style } = item.props;
15
+ const ref = useRef(null);
16
+ const stringFormatter = useLocalizedStringFormatter(intlMessages);
17
+ const { focusProps, isFocusVisible, isFocused } = useFocusRing({
18
+ within: false
19
+ });
20
+ const {
21
+ rowProps,
22
+ gridCellProps,
23
+ removeButtonProps: removeButtonPropsAria,
24
+ allowsRemoving,
25
+ isDisabled,
26
+ isPressed
27
+ } = useTag(props, state, ref);
28
+ const { hoverProps, isHovered } = useHover({ isDisabled });
29
+ const rootProps = mergeProps(
30
+ {
31
+ className: clsx(
32
+ s.base,
33
+ s[variant],
34
+ isFocused && s.focused,
35
+ isHovered && s.hovered,
36
+ isDisabled && s.disabled,
37
+ textNormalMedium,
38
+ className
39
+ ),
40
+ style,
41
+ "data-variant": variant,
42
+ "data-focused": isFocused,
43
+ "data-pressed": isPressed,
44
+ "data-hovered": isHovered,
45
+ "aria-disabled": isDisabled,
46
+ "data-disabled": isDisabled,
47
+ "data-focus-visible": isFocusVisible
48
+ },
49
+ rowProps,
50
+ hoverProps,
51
+ focusProps,
52
+ slotProps?.root
53
+ );
54
+ const removeButtonProps = mergeProps(
55
+ {
56
+ tabIndex: -1,
57
+ compact: true,
58
+ disabled: isDisabled,
59
+ className: s.cancelIcon,
60
+ variant: matchVariantToCloseButton[variant],
61
+ "aria-label": stringFormatter.format("close")
62
+ },
63
+ removeButtonPropsAria,
64
+ slotProps?.removeIcon
65
+ );
66
+ const contentProps = mergeProps(
67
+ {
68
+ className: s.content
69
+ },
70
+ slotProps?.content
71
+ );
72
+ const iconProps = mergeProps(
73
+ {
74
+ className: s.icon
75
+ },
76
+ slotProps?.icon
77
+ );
78
+ return /* @__PURE__ */ jsx("div", { ref, ...rootProps, children: /* @__PURE__ */ jsxs("div", { ...gridCellProps, children: [
79
+ isNotNil(icon) && /* @__PURE__ */ jsx("span", { ...iconProps, children: icon }),
80
+ isNotNil(item.rendered) && /* @__PURE__ */ jsx("span", { ...contentProps, children: item.rendered }),
81
+ allowsRemoving && /* @__PURE__ */ jsx(IconButton, { size: "l", ...removeButtonProps, children: /* @__PURE__ */ jsx(IconXmarkS16, {}) })
82
+ ] }) });
83
+ }
84
+ export {
85
+ TagInner
86
+ };
@@ -0,0 +1,30 @@
1
+ const base = "kbq-taginner-f9f19a";
2
+ const content = "kbq-taginner-content-72ca39";
3
+ const icon = "kbq-taginner-icon-df45be";
4
+ const cancelIcon = "kbq-taginner-cancelIcon-8a3dbe";
5
+ const hovered = "kbq-taginner-hovered-abf199";
6
+ const focused = "kbq-taginner-focused-16f44f";
7
+ const disabled = "kbq-taginner-disabled-0c6073";
8
+ const s = {
9
+ base,
10
+ content,
11
+ icon,
12
+ cancelIcon,
13
+ "theme-fade": "kbq-taginner-theme-fade-68b99c",
14
+ "contrast-fade": "kbq-taginner-contrast-fade-39d7a7",
15
+ "error-fade": "kbq-taginner-error-fade-6d7d03",
16
+ "warning-fade": "kbq-taginner-warning-fade-9403c7",
17
+ hovered,
18
+ focused,
19
+ disabled
20
+ };
21
+ export {
22
+ base,
23
+ cancelIcon,
24
+ content,
25
+ s as default,
26
+ disabled,
27
+ focused,
28
+ hovered,
29
+ icon
30
+ };
@@ -0,0 +1 @@
1
+ export * from './TagInner';
@@ -0,0 +1,3 @@
1
+ import type { IconButtonPropVariant } from '../../../IconButton';
2
+ import type { TagGroupPropVariant } from '../../types';
3
+ export declare const matchVariantToCloseButton: Record<TagGroupPropVariant, IconButtonPropVariant>;