@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.
- package/dist/components/Alert/Alert.js +2 -2
- package/dist/components/Alert/components/AlertIcon/utils.js +1 -1
- package/dist/components/Alert/intl.json.js +2 -6
- package/dist/components/Alert/types.d.ts +2 -1
- package/dist/components/AnimatedIcon/AnimatedIcon.d.ts +4 -0
- package/dist/components/AnimatedIcon/AnimatedIcon.js +50 -0
- package/dist/components/AnimatedIcon/AnimatedIcon.module.css.js +11 -0
- package/dist/components/AnimatedIcon/index.d.ts +2 -0
- package/dist/components/AnimatedIcon/types.d.ts +19 -0
- package/dist/components/Button/Button.js +1 -1
- package/dist/components/Button/Button.module.css.js +2 -2
- package/dist/components/Button/types.d.ts +4 -5
- package/dist/components/ButtonToggleGroup/ButtonToggleGroup.d.ts +2 -0
- package/dist/components/ButtonToggleGroup/ButtonToggleGroup.js +130 -0
- package/dist/components/ButtonToggleGroup/ButtonToggleGroup.module.css.js +17 -0
- package/dist/components/ButtonToggleGroup/ButtonToggleGroupContext.d.ts +7 -0
- package/dist/components/ButtonToggleGroup/ButtonToggleGroupContext.js +12 -0
- package/dist/components/ButtonToggleGroup/components/ButtonToggle/ButtonToggle.d.ts +2 -0
- package/dist/components/ButtonToggleGroup/components/ButtonToggle/ButtonToggle.js +90 -0
- package/dist/components/ButtonToggleGroup/components/ButtonToggle/ButtonToggle.module.css.js +32 -0
- package/dist/components/ButtonToggleGroup/components/ButtonToggle/index.d.ts +2 -0
- package/dist/components/ButtonToggleGroup/components/ButtonToggle/types.d.ts +27 -0
- package/dist/components/ButtonToggleGroup/components/index.d.ts +1 -0
- package/dist/components/ButtonToggleGroup/index.d.ts +3 -0
- package/dist/components/ButtonToggleGroup/reducer.d.ts +23 -0
- package/dist/components/ButtonToggleGroup/reducer.js +25 -0
- package/dist/components/ButtonToggleGroup/types.d.ts +38 -0
- package/dist/components/ButtonToggleGroup/utils.d.ts +3 -0
- package/dist/components/ButtonToggleGroup/utils.js +19 -0
- package/dist/components/Checkbox/Checkbox.js +18 -8
- package/dist/components/Collections/Divider.d.ts +19 -0
- package/dist/components/Collections/Divider.js +14 -0
- package/dist/components/Collections/Header.d.ts +20 -0
- package/dist/components/Collections/Header.js +16 -0
- package/dist/components/Collections/Item.d.ts +14 -0
- package/dist/components/Collections/Item.js +10 -0
- package/dist/components/{List/ListSection.d.ts → Collections/Section.d.ts} +6 -6
- package/dist/components/Collections/Section.js +10 -0
- package/dist/components/Collections/index.d.ts +4 -0
- package/dist/components/Container/Container.js +2 -1
- package/dist/components/Container/utils.d.ts +1 -1
- package/dist/components/Dialog/Dialog.d.ts +9 -1
- package/dist/components/Dialog/Dialog.js +31 -17
- package/dist/components/Dialog/components/DialogBody.d.ts +13 -0
- package/dist/components/Dialog/components/{DialogContent.js → DialogBody.js} +9 -8
- package/dist/components/Dialog/components/DialogCloseButton.d.ts +14 -1
- package/dist/components/Dialog/components/DialogCloseButton.js +3 -6
- package/dist/components/Dialog/components/index.d.ts +1 -1
- package/dist/components/Dialog/index.d.ts +0 -1
- package/dist/components/Dialog/intl.json.js +2 -6
- package/dist/components/Divider/Divider.d.ts +4 -0
- package/dist/components/Divider/Divider.js +44 -0
- package/dist/components/Divider/Divider.module.css.js +29 -0
- package/dist/components/Divider/index.d.ts +2 -0
- package/dist/components/Divider/types.d.ts +26 -0
- package/dist/components/Divider/types.js +6 -0
- package/dist/components/FieldComponents/FieldControl/FieldControl.d.ts +1 -1
- package/dist/components/FieldComponents/FieldInputGroup/FieldInputGroup.d.ts +8 -2
- package/dist/components/FieldComponents/FieldInputGroup/FieldInputGroup.js +32 -30
- package/dist/components/FieldComponents/FieldNumberControl/FieldNumberControl.d.ts +1 -1
- package/dist/components/FieldComponents/FieldSelect/FieldSelect.d.ts +12 -0
- package/dist/components/FieldComponents/FieldSelect/FieldSelect.js +37 -0
- package/dist/components/FieldComponents/FieldSelect/FieldSelect.module.css.js +20 -0
- package/dist/components/FieldComponents/FieldSelect/index.d.ts +1 -0
- package/dist/components/FieldComponents/index.d.ts +1 -0
- package/dist/components/FlexBox/FlexBox.d.ts +4 -0
- package/dist/components/FlexBox/FlexBox.js +47 -0
- package/dist/components/FlexBox/index.d.ts +2 -0
- package/dist/components/FlexBox/types.d.ts +27 -0
- package/dist/components/Grid/Grid.d.ts +8 -2
- package/dist/components/Grid/Grid.js +5 -2
- package/dist/components/IconButton/types.d.ts +5 -4
- package/dist/components/Input/Input.d.ts +1 -0
- package/dist/components/Input/Input.js +11 -11
- package/dist/components/Input/types.d.ts +2 -1
- package/dist/components/Link/Link.js +13 -15
- package/dist/components/Link/types.d.ts +4 -4
- package/dist/components/List/List.d.ts +17 -3
- package/dist/components/List/List.js +32 -18
- package/dist/components/List/List.module.css.js +0 -3
- package/dist/components/List/components/ListItemText/ListItemText.js +26 -0
- package/dist/components/List/components/ListItemText/ListItemText.module.css.js +11 -0
- package/dist/components/List/components/ListOption/ListOption.d.ts +3 -2
- package/dist/components/List/components/ListOption/ListOption.js +11 -16
- package/dist/components/List/components/ListSection/ListSection.d.ts +3 -2
- package/dist/components/List/components/ListSection/ListSection.js +1 -4
- package/dist/components/List/index.d.ts +2 -2
- package/dist/components/List/types.d.ts +13 -2
- package/dist/components/Menu/Menu.d.ts +15 -0
- package/dist/components/Menu/Menu.js +68 -0
- package/dist/components/Menu/Menu.module.css.js +8 -0
- package/dist/components/Menu/components/MenuHeader/MenuHeader.d.ts +5 -0
- package/dist/components/Menu/components/MenuHeader/MenuHeader.js +9 -0
- package/dist/components/Menu/components/MenuHeader/index.d.ts +1 -0
- package/dist/components/Menu/components/MenuInner/MenuInner.d.ts +3 -0
- package/dist/components/Menu/components/MenuInner/MenuInner.js +45 -0
- package/dist/components/Menu/components/MenuInner/MenuInner.module.css.js +11 -0
- package/dist/components/Menu/components/MenuInner/index.d.ts +1 -0
- package/dist/components/Menu/components/MenuItem/MenuItem.d.ts +6 -0
- package/dist/components/Menu/components/MenuItem/MenuItem.js +36 -0
- package/dist/components/Menu/components/MenuItem/index.d.ts +1 -0
- package/dist/components/Menu/components/MenuSection/MenuSection.d.ts +6 -0
- package/dist/components/Menu/components/MenuSection/MenuSection.js +30 -0
- package/dist/components/Menu/components/MenuSection/MenuSection.module.css.js +11 -0
- package/dist/components/Menu/components/MenuSection/index.d.ts +1 -0
- package/dist/components/Menu/components/index.d.ts +1 -0
- package/dist/components/Menu/index.d.ts +2 -0
- package/dist/components/Menu/types.d.ts +62 -0
- package/dist/components/Menu/types.js +4 -0
- package/dist/components/Modal/Modal.d.ts +9 -1
- package/dist/components/Modal/Modal.js +21 -16
- package/dist/components/Modal/index.d.ts +15 -2
- package/dist/components/Modal/index.js +9 -0
- package/dist/components/Modal/types.d.ts +7 -0
- package/dist/components/Popover/Popover.d.ts +12 -2
- package/dist/components/Popover/Popover.js +143 -128
- package/dist/components/Popover/Popover.module.css.js +3 -0
- package/dist/components/Popover/index.d.ts +15 -2
- package/dist/components/Popover/index.js +9 -0
- package/dist/components/Popover/types.d.ts +28 -4
- package/dist/components/Popover/types.js +9 -1
- package/dist/components/ProgressBar/ProgressBar.module.css.js +1 -2
- package/dist/components/ProgressSpinner/ProgressSpinner.module.css.js +1 -2
- package/dist/components/Provider/BreakpointsProvider.d.ts +2 -1
- package/dist/components/Provider/BreakpointsProvider.js +8 -1
- package/dist/components/Provider/Provider.d.ts +1 -1
- package/dist/components/Provider/Provider.js +9 -1
- package/dist/components/Provider/types.d.ts +5 -0
- package/dist/components/Provider/utils/useBreakpoints.d.ts +2 -1
- package/dist/components/Provider/utils/useBreakpoints.js +2 -2
- package/dist/components/RadioGroup/RadioContext.js +1 -0
- package/dist/components/RadioGroup/RadioGroup.js +2 -1
- package/dist/components/RadioGroup/components/Radio/Radio.js +3 -2
- package/dist/components/RadioGroup/components/Radio/Radio.module.css.js +3 -0
- package/dist/components/Select/Select.d.ts +11 -0
- package/dist/components/Select/Select.js +179 -0
- package/dist/components/Select/Select.module.css.js +20 -0
- package/dist/components/Select/index.d.ts +2 -0
- package/dist/components/Select/types.d.ts +87 -0
- package/dist/components/SidePanel/SidePanel.d.ts +9 -1
- package/dist/components/SidePanel/SidePanel.js +24 -19
- package/dist/components/SidePanel/index.d.ts +15 -2
- package/dist/components/SidePanel/index.js +9 -0
- package/dist/components/SidePanel/types.d.ts +7 -0
- package/dist/components/SkeletonBlock/SkeletonBlock.module.css.js +0 -1
- package/dist/components/SkeletonTypography/utils.js +3 -0
- package/dist/components/TagGroup/Tag.d.ts +24 -0
- package/dist/components/TagGroup/Tag.js +10 -0
- package/dist/components/TagGroup/TagGroup.d.ts +2 -0
- package/dist/components/TagGroup/TagGroup.js +22 -0
- package/dist/components/TagGroup/TagGroup.module.css.js +8 -0
- package/dist/components/TagGroup/components/TagInner/TagInner.d.ts +11 -0
- package/dist/components/TagGroup/components/TagInner/TagInner.js +86 -0
- package/dist/components/TagGroup/components/TagInner/TagInner.module.css.js +30 -0
- package/dist/components/TagGroup/components/TagInner/index.d.ts +1 -0
- package/dist/components/TagGroup/components/TagInner/utils.d.ts +3 -0
- package/dist/components/TagGroup/components/TagInner/utils.js +9 -0
- package/dist/components/TagGroup/components/index.d.ts +1 -0
- package/dist/components/TagGroup/index.d.ts +3 -0
- package/dist/components/TagGroup/intl.json.js +7 -0
- package/dist/components/TagGroup/types.d.ts +37 -0
- package/dist/components/TagGroup/types.js +9 -0
- package/dist/components/Toggle/Toggle.js +1 -1
- package/dist/components/Tooltip/Tooltip.d.ts +2 -1
- package/dist/components/Tooltip/Tooltip.js +9 -8
- package/dist/components/Tooltip/types.d.ts +9 -4
- package/dist/components/Typography/Typography.js +2 -2
- package/dist/components/Typography/Typography.module.css.js +2 -1
- package/dist/components/Typography/types.d.ts +7 -2
- package/dist/components/Typography/types.js +2 -1
- package/dist/components/index.d.ts +8 -0
- package/dist/components/layout/flex/flex.d.ts +15 -4
- package/dist/components/layout/flex/flex.js +6 -1
- package/dist/components/layout/flex/flex.module.css.js +78 -39
- package/dist/index.js +51 -23
- package/dist/style.css +862 -350
- package/dist/styles/utility.d.ts +2 -0
- package/dist/styles/utility.js +3 -2
- package/dist/styles/utility.module.css.js +5 -2
- package/dist/types.d.ts +1 -0
- package/package.json +11 -6
- package/dist/components/Dialog/DialogContext.d.ts +0 -9
- package/dist/components/Dialog/DialogContext.js +0 -12
- package/dist/components/Dialog/components/DialogContent.d.ts +0 -12
- package/dist/components/Input/components/FieldAddon/FieldAddon.d.ts +0 -10
- package/dist/components/Input/components/FieldAddon/index.d.ts +0 -1
- package/dist/components/Input/components/FieldCaption/FieldCaption.d.ts +0 -6
- package/dist/components/Input/components/FieldCaption/index.d.ts +0 -1
- package/dist/components/Input/components/FieldControl/FieldControl.d.ts +0 -9
- package/dist/components/Input/components/FieldControl/index.d.ts +0 -1
- package/dist/components/Input/components/FieldError/FieldError.d.ts +0 -7
- package/dist/components/Input/components/FieldError/index.d.ts +0 -1
- package/dist/components/Input/components/FieldInput/FieldInput.d.ts +0 -9
- package/dist/components/Input/components/FieldInput/index.d.ts +0 -1
- package/dist/components/Input/components/FieldInputGroup/FieldInputGroup.d.ts +0 -7
- package/dist/components/Input/components/FieldInputGroup/index.d.ts +0 -1
- package/dist/components/Input/components/FieldLabel/FieldLabel.d.ts +0 -9
- package/dist/components/Input/components/FieldLabel/index.d.ts +0 -1
- package/dist/components/Input/components/index.d.ts +0 -7
- package/dist/components/List/ListItem.d.ts +0 -11
- package/dist/components/List/ListItem.js +0 -11
- package/dist/components/List/ListSection.js +0 -11
- 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,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
|
-
|
|
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
|
|
10
|
+
const SidePanelComponent = forwardRef(
|
|
11
11
|
(props, ref) => {
|
|
12
12
|
const {
|
|
13
|
-
hideCloseButton = false,
|
|
14
|
-
position = "left",
|
|
15
13
|
size = "medium",
|
|
16
|
-
|
|
17
|
-
|
|
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
|
-
|
|
62
|
+
ref: containerRef,
|
|
61
63
|
"data-size": size,
|
|
62
64
|
"data-position": position,
|
|
63
|
-
|
|
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
|
-
|
|
85
|
-
|
|
86
|
+
ref: modalRef,
|
|
87
|
+
className: s.panel
|
|
86
88
|
},
|
|
87
89
|
slotProps?.panel
|
|
88
90
|
);
|
|
89
|
-
const { isDisabled,
|
|
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
|
-
|
|
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
|
-
|
|
4
|
-
|
|
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>>;
|
|
@@ -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;
|
|
@@ -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,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,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';
|