@koobiq/react-components 0.0.1-beta.8 → 0.0.1
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 +36 -21
- package/dist/components/Alert/components/AlertIcon/AlertIcon.js +3 -3
- package/dist/components/Alert/components/AlertIcon/types.d.ts +1 -1
- package/dist/components/Alert/types.d.ts +22 -6
- package/dist/components/AnimatedIcon/types.d.ts +1 -1
- package/dist/components/Backdrop/Backdrop.js +10 -2
- package/dist/components/Backdrop/types.d.ts +12 -2
- package/dist/components/Badge/Badge.js +34 -23
- package/dist/components/Badge/types.d.ts +12 -4
- package/dist/components/Button/Button.js +42 -26
- package/dist/components/Button/Button.module.css.js +5 -2
- package/dist/components/Button/types.d.ts +32 -18
- 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/Calendar/Calendar.d.ts +2 -0
- package/dist/components/Calendar/Calendar.js +42 -0
- package/dist/components/Calendar/Calendar.module.css.js +14 -0
- package/dist/components/Calendar/components/CalendarCell/CalendarCell.d.ts +7 -0
- package/dist/components/Calendar/components/CalendarCell/CalendarCell.js +51 -0
- package/dist/components/Calendar/components/CalendarCell/CalendarCell.module.css.js +32 -0
- package/dist/components/Calendar/components/CalendarCell/index.d.ts +1 -0
- package/dist/components/Calendar/components/CalendarGrid/CalendarGrid.d.ts +6 -0
- package/dist/components/Calendar/components/CalendarGrid/CalendarGrid.js +28 -0
- package/dist/components/Calendar/components/CalendarGrid/CalendarGrid.module.css.js +14 -0
- package/dist/components/Calendar/components/CalendarGrid/index.d.ts +1 -0
- package/dist/components/Calendar/components/CalendarHeader/CalendarHeader.d.ts +8 -0
- package/dist/components/Calendar/components/CalendarHeader/CalendarHeader.js +54 -0
- package/dist/components/Calendar/components/CalendarHeader/CalendarHeader.module.css.js +11 -0
- package/dist/components/Calendar/components/CalendarHeader/index.d.ts +1 -0
- package/dist/components/Calendar/components/CalendarMonthDropdown/CalendarMonthDropdown.d.ts +6 -0
- package/dist/components/Calendar/components/CalendarMonthDropdown/CalendarMonthDropdown.js +101 -0
- package/dist/components/Calendar/components/CalendarMonthDropdown/index.d.ts +1 -0
- package/dist/components/Calendar/components/CalendarYearDropdown/CalendarYearDropdown.d.ts +6 -0
- package/dist/components/Calendar/components/CalendarYearDropdown/CalendarYearDropdown.js +76 -0
- package/dist/components/Calendar/components/CalendarYearDropdown/index.d.ts +1 -0
- package/dist/components/Calendar/components/index.d.ts +2 -0
- package/dist/components/Calendar/index.d.ts +2 -0
- package/dist/components/Calendar/intl.json.js +7 -0
- package/dist/components/Calendar/types.d.ts +51 -0
- package/dist/components/Checkbox/Checkbox.d.ts +20 -11
- package/dist/components/Checkbox/Checkbox.js +81 -17
- package/dist/components/Checkbox/Checkbox.module.css.js +6 -6
- package/dist/components/Checkbox/types.d.ts +95 -10
- package/dist/components/Collections/Cell.d.ts +28 -0
- package/dist/components/Collections/Cell.js +10 -0
- package/dist/components/Collections/Column.d.ts +28 -0
- package/dist/components/Collections/Column.js +10 -0
- 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/Collections/Row.d.ts +14 -0
- package/dist/components/Collections/Row.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/TableBody.d.ts +6 -0
- package/dist/components/Collections/TableBody.js +10 -0
- package/dist/components/Collections/TableHeader.d.ts +6 -0
- package/dist/components/Collections/TableHeader.js +10 -0
- package/dist/components/Collections/index.d.ts +9 -0
- package/dist/components/Container/Container.js +13 -2
- package/dist/components/Container/types.d.ts +16 -6
- package/dist/components/DateInput/DateInput.d.ts +5 -0
- package/dist/components/DateInput/DateInput.js +105 -0
- package/dist/components/DateInput/DateInput.module.css.js +8 -0
- package/dist/components/DateInput/components/DateInputSegment/DateInputSegment.d.ts +7 -0
- package/dist/components/DateInput/components/DateInputSegment/DateInputSegment.js +27 -0
- package/dist/components/DateInput/components/DateInputSegment/DateInputSegment.module.css.js +17 -0
- package/dist/components/DateInput/components/DateInputSegment/index.d.ts +1 -0
- package/dist/components/DateInput/components/index.d.ts +1 -0
- package/dist/components/DateInput/index.d.ts +2 -0
- package/dist/components/DateInput/types.d.ts +47 -0
- package/dist/components/DateInput/types.js +4 -0
- package/dist/components/DatePicker/DatePicker.d.ts +5 -0
- package/dist/components/DatePicker/DatePicker.js +101 -0
- package/dist/components/DatePicker/DatePicker.module.css.js +8 -0
- package/dist/components/DatePicker/index.d.ts +2 -0
- package/dist/components/DatePicker/types.d.ts +34 -0
- 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 +22 -1
- package/dist/components/Dialog/components/DialogCloseButton.js +4 -7
- package/dist/components/Dialog/components/index.d.ts +1 -1
- package/dist/components/Dialog/index.d.ts +0 -1
- package/dist/components/Dialog/types.d.ts +1 -1
- package/dist/components/Divider/Divider.d.ts +4 -0
- package/dist/components/Divider/Divider.js +47 -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 +27 -0
- package/dist/components/Divider/types.js +6 -0
- package/dist/components/FieldComponents/FieldAddon/FieldAddon.d.ts +2 -1
- package/dist/components/FieldComponents/FieldAddon/FieldAddon.js +19 -2
- package/dist/components/FieldComponents/FieldAddon/FieldAddon.module.css.js +6 -3
- package/dist/components/FieldComponents/FieldControl/FieldControl.d.ts +6 -8
- package/dist/components/FieldComponents/FieldControl/FieldControl.js +5 -8
- package/dist/components/FieldComponents/FieldError/FieldError.d.ts +1 -1
- package/dist/components/FieldComponents/FieldError/FieldError.js +1 -1
- package/dist/components/FieldComponents/FieldInput/FieldInput.d.ts +3 -3
- package/dist/components/FieldComponents/FieldInput/FieldInput.js +4 -4
- package/dist/components/FieldComponents/FieldInput/FieldInput.module.css.js +3 -3
- package/dist/components/FieldComponents/FieldInputDate/FieldInputDate.d.ts +12 -0
- package/dist/components/FieldComponents/FieldInputDate/FieldInputDate.js +32 -0
- package/dist/components/FieldComponents/FieldInputDate/FieldInputDate.module.css.js +20 -0
- package/dist/components/FieldComponents/FieldInputDate/index.d.ts +1 -0
- package/dist/components/FieldComponents/FieldInputGroup/FieldInputGroup.d.ts +8 -2
- package/dist/components/FieldComponents/FieldInputGroup/FieldInputGroup.js +29 -5
- package/dist/components/FieldComponents/FieldInputGroup/FieldInputGroupContext.d.ts +4 -3
- package/dist/components/FieldComponents/FieldLabel/FieldLabel.d.ts +2 -2
- package/dist/components/FieldComponents/FieldLabel/FieldLabel.js +3 -3
- package/dist/components/FieldComponents/FieldSelect/FieldSelect.d.ts +13 -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 +2 -1
- package/dist/components/FormControlLabel/types.d.ts +5 -5
- package/dist/components/Grid/Grid.d.ts +8 -2
- package/dist/components/Grid/Grid.js +5 -2
- package/dist/components/Grid/types.d.ts +2 -2
- package/dist/components/IconButton/IconButton.js +38 -22
- package/dist/components/IconButton/index.d.ts +2 -2
- package/dist/components/IconButton/types.d.ts +32 -16
- package/dist/components/Input/Input.d.ts +32 -12
- package/dist/components/Input/Input.js +62 -15
- package/dist/components/Input/types.d.ts +69 -17
- package/dist/components/InputNumber/InputNumber.d.ts +27 -11
- package/dist/components/InputNumber/InputNumber.js +77 -26
- package/dist/components/InputNumber/components/InputNumberCounterControls.js +12 -12
- package/dist/components/InputNumber/components/InputNumberCounterControls.module.css.js +7 -4
- package/dist/components/InputNumber/types.d.ts +57 -17
- package/dist/components/Link/Link.js +42 -22
- package/dist/components/Link/Link.module.css.js +4 -4
- package/dist/components/Link/types.d.ts +43 -10
- package/dist/components/List/List.d.ts +17 -3
- package/dist/components/List/List.js +20 -8
- 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 +5 -3
- package/dist/components/List/components/ListOption/ListOption.js +10 -15
- package/dist/components/List/components/ListSection/ListSection.d.ts +5 -3
- 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 +2 -0
- package/dist/components/Menu/Menu.d.ts +15 -0
- package/dist/components/Menu/Menu.js +75 -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 +6 -0
- package/dist/components/Menu/components/MenuInner/MenuInner.js +46 -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 +7 -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 +7 -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 +72 -0
- package/dist/components/Menu/types.js +4 -0
- package/dist/components/Modal/Modal.d.ts +33 -2
- package/dist/components/Modal/Modal.js +23 -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 +14 -5
- package/dist/components/Popover/Popover.d.ts +42 -2
- package/dist/components/Popover/Popover.js +23 -141
- package/dist/components/Popover/Popover.module.css.js +3 -0
- package/dist/components/Popover/PopoverInner.d.ts +3 -0
- package/dist/components/Popover/PopoverInner.js +143 -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 +37 -11
- package/dist/components/Popover/types.js +9 -1
- package/dist/components/ProgressBar/types.d.ts +2 -2
- package/dist/components/ProgressSpinner/types.d.ts +4 -4
- package/dist/components/Provider/Provider.d.ts +1 -1
- package/dist/components/Provider/Provider.js +8 -4
- package/dist/components/Provider/types.d.ts +3 -1
- package/dist/components/RadioGroup/RadioGroup.js +42 -2
- package/dist/components/RadioGroup/components/Radio/Radio.d.ts +7 -4
- package/dist/components/RadioGroup/components/Radio/Radio.js +36 -10
- package/dist/components/RadioGroup/components/Radio/Radio.module.css.js +9 -6
- package/dist/components/RadioGroup/components/Radio/types.d.ts +25 -10
- package/dist/components/RadioGroup/components/Radio/types.js +1 -0
- package/dist/components/RadioGroup/types.d.ts +44 -17
- package/dist/components/Select/Select.d.ts +11 -0
- package/dist/components/Select/Select.js +204 -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 +125 -0
- package/dist/components/SidePanel/SidePanel.d.ts +35 -2
- package/dist/components/SidePanel/SidePanel.js +31 -18
- package/dist/components/SidePanel/SidePanel.module.css.js +7 -1
- package/dist/components/SidePanel/index.d.ts +15 -2
- package/dist/components/SidePanel/index.js +9 -0
- package/dist/components/SidePanel/types.d.ts +26 -8
- package/dist/components/SidePanel/types.js +2 -0
- package/dist/components/SkeletonTypography/types.d.ts +2 -2
- package/dist/components/Table/Table.d.ts +12 -0
- package/dist/components/Table/Table.js +97 -0
- package/dist/components/Table/Table.module.css.js +11 -0
- package/dist/components/Table/components/TableCell/TableCell.d.ts +7 -0
- package/dist/components/Table/components/TableCell/TableCell.js +39 -0
- package/dist/components/Table/components/TableCell/TableCell.module.css.js +27 -0
- package/dist/components/Table/components/TableCell/index.d.ts +1 -0
- package/dist/components/Table/components/TableCheckboxCell/TableCheckboxCell.d.ts +7 -0
- package/dist/components/Table/components/TableCheckboxCell/TableCheckboxCell.js +21 -0
- package/dist/components/Table/components/TableCheckboxCell/index.d.ts +1 -0
- package/dist/components/Table/components/TableColumnHeader/TableColumnHeader.d.ts +7 -0
- package/dist/components/Table/components/TableColumnHeader/TableColumnHeader.js +46 -0
- package/dist/components/Table/components/TableColumnHeader/TableColumnHeader.module.css.js +27 -0
- package/dist/components/Table/components/TableColumnHeader/index.d.ts +1 -0
- package/dist/components/Table/components/TableHeaderRow/TableHeaderRow.d.ts +9 -0
- package/dist/components/Table/components/TableHeaderRow/TableHeaderRow.js +16 -0
- package/dist/components/Table/components/TableHeaderRow/index.d.ts +1 -0
- package/dist/components/Table/components/TableRow/TableRow.d.ts +9 -0
- package/dist/components/Table/components/TableRow/TableRow.js +46 -0
- package/dist/components/Table/components/TableRow/TableRow.module.css.js +23 -0
- package/dist/components/Table/components/TableRow/index.d.ts +1 -0
- package/dist/components/Table/components/TableRowGroup/TableRowGroup.d.ts +6 -0
- package/dist/components/Table/components/TableRowGroup/TableRowGroup.js +15 -0
- package/dist/components/Table/components/TableRowGroup/index.d.ts +1 -0
- package/dist/components/Table/components/TableSelectAllCell/TableSelectAllCell.d.ts +7 -0
- package/dist/components/Table/components/TableSelectAllCell/TableSelectAllCell.js +22 -0
- package/dist/components/Table/components/TableSelectAllCell/index.d.ts +1 -0
- package/dist/components/Table/components/index.d.ts +7 -0
- package/dist/components/Table/index.d.ts +1 -0
- package/dist/components/Table/types.d.ts +71 -0
- package/dist/components/Table/utils.d.ts +2 -0
- package/dist/components/Table/utils.js +8 -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 +23 -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/Textarea/Textarea.d.ts +16 -8
- package/dist/components/Textarea/Textarea.js +48 -3
- package/dist/components/Textarea/components/TextareaContextConsumer/TextareaContextConsumer.d.ts +4 -4
- package/dist/components/Textarea/components/TextareaContextConsumer/TextareaContextConsumer.js +15 -12
- package/dist/components/Textarea/types.d.ts +61 -16
- package/dist/components/Textarea/utils/useTextareaAutosize.d.ts +1 -1
- package/dist/components/Textarea/utils/useTextareaAutosize.js +2 -2
- package/dist/components/Toggle/Toggle.d.ts +14 -7
- package/dist/components/Toggle/Toggle.js +72 -11
- package/dist/components/Toggle/Toggle.module.css.js +6 -6
- package/dist/components/Toggle/types.d.ts +65 -8
- package/dist/components/Tooltip/Tooltip.d.ts +5 -2
- package/dist/components/Tooltip/Tooltip.js +40 -20
- package/dist/components/Tooltip/types.d.ts +28 -12
- package/dist/components/Typography/types.d.ts +10 -5
- package/dist/components/index.d.ts +11 -0
- package/dist/index.js +65 -24
- package/dist/style.css +1113 -253
- package/dist/styles/utility.d.ts +2 -0
- package/dist/styles/utility.js +3 -1
- package/dist/styles/utility.module.css.js +5 -1
- package/dist/types.d.ts +1 -0
- package/dist/utils/capitalizeFirstLetter/capitalizeFirstLetter.d.ts +2 -0
- package/dist/utils/capitalizeFirstLetter/capitalizeFirstLetter.js +6 -0
- package/dist/utils/capitalizeFirstLetter/index.d.ts +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/package.json +13 -7
- 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/FieldComponents/FieldNumberControl/FieldNumberControl.d.ts +0 -10
- package/dist/components/FieldComponents/FieldNumberControl/FieldNumberControl.js +0 -18
- package/dist/components/FieldComponents/FieldNumberControl/FieldNumberControl.module.css.js +0 -11
- package/dist/components/FieldComponents/FieldNumberControl/index.d.ts +0 -1
- 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,130 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { forwardRef, useRef, useReducer, useEffect } from "react";
|
|
4
|
+
import { once } from "@koobiq/logger";
|
|
5
|
+
import { useDOMRef, mergeProps, clsx } from "@koobiq/react-core";
|
|
6
|
+
import { useToggleGroupState, useToggleButtonGroup } from "@koobiq/react-primitives";
|
|
7
|
+
import { Transition } from "react-transition-group";
|
|
8
|
+
import s from "./ButtonToggleGroup.module.css.js";
|
|
9
|
+
import { ButtonToggleGroupContext } from "./ButtonToggleGroupContext.js";
|
|
10
|
+
import { animationReducer, initialAnimationState } from "./reducer.js";
|
|
11
|
+
import { getSelectedToggleButton, getToggleButtonStyle } from "./utils.js";
|
|
12
|
+
const MAX_ITEMS = 5;
|
|
13
|
+
const ButtonToggleGroup = forwardRef((props, ref) => {
|
|
14
|
+
const {
|
|
15
|
+
fullWidth = false,
|
|
16
|
+
isDisabled = false,
|
|
17
|
+
hasEqualItemSize = false,
|
|
18
|
+
style,
|
|
19
|
+
className,
|
|
20
|
+
slotProps,
|
|
21
|
+
defaultSelectedKey,
|
|
22
|
+
children,
|
|
23
|
+
selectedKey: selectedKeyProp,
|
|
24
|
+
onSelectionChange: onSelectionChangeProp,
|
|
25
|
+
...other
|
|
26
|
+
} = props;
|
|
27
|
+
if (process.env.NODE_ENV !== "production" && children?.length && children?.length > MAX_ITEMS) {
|
|
28
|
+
once.warn(
|
|
29
|
+
`Use a ButtonToggleGroup to allow selection of up to ${MAX_ITEMS} options.`
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
const domRef = useDOMRef(ref);
|
|
33
|
+
const thumbRef = useRef(null);
|
|
34
|
+
const state = useToggleGroupState({
|
|
35
|
+
...other,
|
|
36
|
+
isDisabled,
|
|
37
|
+
disallowEmptySelection: true,
|
|
38
|
+
onSelectionChange: (keys) => {
|
|
39
|
+
onSelectionChangeProp?.(Array.from(keys)[0]);
|
|
40
|
+
},
|
|
41
|
+
defaultSelectedKeys: defaultSelectedKey ? [defaultSelectedKey] : [],
|
|
42
|
+
...!defaultSelectedKey && {
|
|
43
|
+
selectedKeys: selectedKeyProp ? [selectedKeyProp] : []
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
const { groupProps: groupPropsAria } = useToggleButtonGroup(
|
|
47
|
+
{},
|
|
48
|
+
state,
|
|
49
|
+
domRef
|
|
50
|
+
);
|
|
51
|
+
const previous = useRef(null);
|
|
52
|
+
const selectedKey = Array.from(state.selectedKeys)[0];
|
|
53
|
+
const [animatedState, dispatch] = useReducer(
|
|
54
|
+
animationReducer,
|
|
55
|
+
initialAnimationState
|
|
56
|
+
);
|
|
57
|
+
const { isAnimated, start, end, savedKey } = animatedState;
|
|
58
|
+
useEffect(() => {
|
|
59
|
+
const active = getSelectedToggleButton(domRef.current);
|
|
60
|
+
if (active && previous.current) {
|
|
61
|
+
dispatch({
|
|
62
|
+
type: "SET_ANIMATED",
|
|
63
|
+
payload: {
|
|
64
|
+
start: [previous.current.offsetLeft, previous.current.offsetWidth],
|
|
65
|
+
end: [active.offsetLeft, active.offsetWidth]
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
} else {
|
|
69
|
+
dispatch({ type: "SET_SAVED", payload: { savedKey: selectedKey } });
|
|
70
|
+
}
|
|
71
|
+
previous.current = active;
|
|
72
|
+
}, [selectedKey]);
|
|
73
|
+
useEffect(() => {
|
|
74
|
+
if (!selectedKey) dispatch({ type: "RESET" });
|
|
75
|
+
}, [selectedKey]);
|
|
76
|
+
const groupProps = mergeProps(
|
|
77
|
+
{
|
|
78
|
+
className: clsx(
|
|
79
|
+
s.base,
|
|
80
|
+
fullWidth && s.fullWidth,
|
|
81
|
+
hasEqualItemSize && s.hasEqualItemSize,
|
|
82
|
+
className
|
|
83
|
+
),
|
|
84
|
+
"data-fullwidth": fullWidth,
|
|
85
|
+
"data-animated": isAnimated,
|
|
86
|
+
"data-equal-item-size": hasEqualItemSize,
|
|
87
|
+
ref: domRef,
|
|
88
|
+
style
|
|
89
|
+
},
|
|
90
|
+
other,
|
|
91
|
+
groupPropsAria
|
|
92
|
+
);
|
|
93
|
+
const thumbProps = mergeProps(
|
|
94
|
+
{
|
|
95
|
+
ref: thumbRef,
|
|
96
|
+
className: clsx(s.thumb),
|
|
97
|
+
style: getToggleButtonStyle(start, end)
|
|
98
|
+
},
|
|
99
|
+
slotProps?.thumb
|
|
100
|
+
);
|
|
101
|
+
const containerProps = mergeProps(
|
|
102
|
+
{
|
|
103
|
+
className: clsx(s.container)
|
|
104
|
+
},
|
|
105
|
+
slotProps?.container
|
|
106
|
+
);
|
|
107
|
+
return /* @__PURE__ */ jsx(ButtonToggleGroupContext.Provider, { value: { state, savedKey }, children: /* @__PURE__ */ jsxs("div", { ...groupProps, children: [
|
|
108
|
+
/* @__PURE__ */ jsx(
|
|
109
|
+
Transition,
|
|
110
|
+
{
|
|
111
|
+
in: isAnimated,
|
|
112
|
+
timeout: 200,
|
|
113
|
+
nodeRef: thumbRef,
|
|
114
|
+
exit: false,
|
|
115
|
+
onEntered: () => {
|
|
116
|
+
dispatch({ type: "SET_SAVED", payload: { savedKey: selectedKey } });
|
|
117
|
+
},
|
|
118
|
+
mountOnEnter: true,
|
|
119
|
+
unmountOnExit: true,
|
|
120
|
+
enter: true,
|
|
121
|
+
children: (transitionState) => /* @__PURE__ */ jsx("div", { ...thumbProps, "data-transition": transitionState })
|
|
122
|
+
}
|
|
123
|
+
),
|
|
124
|
+
/* @__PURE__ */ jsx("div", { ...containerProps, children })
|
|
125
|
+
] }) });
|
|
126
|
+
});
|
|
127
|
+
ButtonToggleGroup.displayName = "ButtonToggleGroup";
|
|
128
|
+
export {
|
|
129
|
+
ButtonToggleGroup
|
|
130
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
const base = "kbq-buttontogglegroup-79a88d";
|
|
2
|
+
const fullWidth = "kbq-buttontogglegroup-fullWidth-f63c5c";
|
|
3
|
+
const thumb = "kbq-buttontogglegroup-thumb-7ff4ae";
|
|
4
|
+
const container = "kbq-buttontogglegroup-container-e48aaf";
|
|
5
|
+
const s = {
|
|
6
|
+
base,
|
|
7
|
+
fullWidth,
|
|
8
|
+
thumb,
|
|
9
|
+
container
|
|
10
|
+
};
|
|
11
|
+
export {
|
|
12
|
+
base,
|
|
13
|
+
container,
|
|
14
|
+
s as default,
|
|
15
|
+
fullWidth,
|
|
16
|
+
thumb
|
|
17
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ToggleGroupState } from '@koobiq/react-primitives';
|
|
2
|
+
export type ButtonToggleGroupContextProps = {
|
|
3
|
+
state: ToggleGroupState | null;
|
|
4
|
+
savedKey?: string | number;
|
|
5
|
+
};
|
|
6
|
+
export declare const ButtonToggleGroupContext: import("react").Context<ButtonToggleGroupContextProps>;
|
|
7
|
+
export declare function useButtonToggleGroupContext(): ButtonToggleGroupContextProps;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { createContext, useContext } from "react";
|
|
3
|
+
const ButtonToggleGroupContext = createContext({
|
|
4
|
+
state: null
|
|
5
|
+
});
|
|
6
|
+
function useButtonToggleGroupContext() {
|
|
7
|
+
return useContext(ButtonToggleGroupContext);
|
|
8
|
+
}
|
|
9
|
+
export {
|
|
10
|
+
ButtonToggleGroupContext,
|
|
11
|
+
useButtonToggleGroupContext
|
|
12
|
+
};
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { forwardRef, useRef } from "react";
|
|
4
|
+
import { useDOMRef, useElementSize, useHover, useFocusRing, mergeProps, useMultiRef, clsx, isNotNil } from "@koobiq/react-core";
|
|
5
|
+
import { useToggleButtonGroupItem } from "@koobiq/react-primitives";
|
|
6
|
+
import { utilClasses } from "../../../../styles/utility.js";
|
|
7
|
+
import { useButtonToggleGroupContext } from "../../ButtonToggleGroupContext.js";
|
|
8
|
+
import s from "./ButtonToggle.module.css.js";
|
|
9
|
+
import { Tooltip } from "../../../Tooltip/Tooltip.js";
|
|
10
|
+
const textNormalMedium = utilClasses.typography["text-normal-medium"];
|
|
11
|
+
const ButtonToggle = forwardRef(
|
|
12
|
+
(props, ref) => {
|
|
13
|
+
const {
|
|
14
|
+
isDisabled: isDisabledProp = false,
|
|
15
|
+
children,
|
|
16
|
+
id,
|
|
17
|
+
icon,
|
|
18
|
+
className,
|
|
19
|
+
slotProps,
|
|
20
|
+
...other
|
|
21
|
+
} = props;
|
|
22
|
+
const domRef = useDOMRef(ref);
|
|
23
|
+
const contentRef = useRef(null);
|
|
24
|
+
const { state, savedKey } = useButtonToggleGroupContext();
|
|
25
|
+
const { ref: containerRef } = useElementSize();
|
|
26
|
+
const showTooltip = (contentRef.current?.scrollWidth || 0) > (contentRef.current?.clientWidth || 0);
|
|
27
|
+
const { buttonProps, isPressed, isSelected, isDisabled } = useToggleButtonGroupItem(
|
|
28
|
+
{ id, isDisabled: isDisabledProp },
|
|
29
|
+
state,
|
|
30
|
+
domRef
|
|
31
|
+
);
|
|
32
|
+
const { hoverProps, isHovered } = useHover({ ...props, isDisabled });
|
|
33
|
+
const { focusProps, isFocusVisible } = useFocusRing({});
|
|
34
|
+
const iconProps = mergeProps({ className: s.icon }, slotProps?.icon);
|
|
35
|
+
return /* @__PURE__ */ jsx(
|
|
36
|
+
Tooltip,
|
|
37
|
+
{
|
|
38
|
+
delay: 300,
|
|
39
|
+
anchorRef: domRef,
|
|
40
|
+
isDisabled: !showTooltip,
|
|
41
|
+
...slotProps?.tooltip,
|
|
42
|
+
control: ({ ref: controlRef, ...controlProps }) => {
|
|
43
|
+
const rootRef = useMultiRef([domRef, controlRef]);
|
|
44
|
+
const rootProps = mergeProps(
|
|
45
|
+
{
|
|
46
|
+
className: clsx(
|
|
47
|
+
s.base,
|
|
48
|
+
textNormalMedium,
|
|
49
|
+
isHovered && s.hovered,
|
|
50
|
+
isPressed && s.pressed,
|
|
51
|
+
savedKey === id && s.selected,
|
|
52
|
+
isDisabled && s.disabled,
|
|
53
|
+
isFocusVisible && s.focusVisible,
|
|
54
|
+
className
|
|
55
|
+
),
|
|
56
|
+
"data-hovered": isHovered,
|
|
57
|
+
"data-pressed": isPressed,
|
|
58
|
+
"data-selected": isSelected,
|
|
59
|
+
"data-disabled": isDisabled,
|
|
60
|
+
"data-focus-visible": isFocusVisible,
|
|
61
|
+
ref: rootRef
|
|
62
|
+
},
|
|
63
|
+
controlProps,
|
|
64
|
+
focusProps,
|
|
65
|
+
hoverProps,
|
|
66
|
+
buttonProps,
|
|
67
|
+
other
|
|
68
|
+
);
|
|
69
|
+
const containerProps = mergeProps(
|
|
70
|
+
{ className: s.container, ref: containerRef },
|
|
71
|
+
slotProps?.container
|
|
72
|
+
);
|
|
73
|
+
const contentProps = mergeProps(
|
|
74
|
+
{ className: s.content, ref: contentRef },
|
|
75
|
+
slotProps?.content
|
|
76
|
+
);
|
|
77
|
+
return /* @__PURE__ */ jsx("button", { ...rootProps, children: /* @__PURE__ */ jsxs("span", { ...containerProps, children: [
|
|
78
|
+
isNotNil(icon) && /* @__PURE__ */ jsx("span", { ...iconProps, children: icon }),
|
|
79
|
+
isNotNil(children) && /* @__PURE__ */ jsx("span", { ...contentProps, children })
|
|
80
|
+
] }) });
|
|
81
|
+
},
|
|
82
|
+
children
|
|
83
|
+
}
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
);
|
|
87
|
+
ButtonToggle.displayName = "ButtonToggle";
|
|
88
|
+
export {
|
|
89
|
+
ButtonToggle
|
|
90
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
const base = "kbq-buttontoggle-caa007";
|
|
2
|
+
const hovered = "kbq-buttontoggle-hovered-4706db";
|
|
3
|
+
const pressed = "kbq-buttontoggle-pressed-6d5049";
|
|
4
|
+
const selected = "kbq-buttontoggle-selected-3e6996";
|
|
5
|
+
const disabled = "kbq-buttontoggle-disabled-c0d011";
|
|
6
|
+
const focusVisible = "kbq-buttontoggle-focusVisible-37d5be";
|
|
7
|
+
const container = "kbq-buttontoggle-container-f496bf";
|
|
8
|
+
const icon = "kbq-buttontoggle-icon-668db0";
|
|
9
|
+
const content = "kbq-buttontoggle-content-822c7d";
|
|
10
|
+
const s = {
|
|
11
|
+
base,
|
|
12
|
+
hovered,
|
|
13
|
+
pressed,
|
|
14
|
+
selected,
|
|
15
|
+
disabled,
|
|
16
|
+
focusVisible,
|
|
17
|
+
container,
|
|
18
|
+
icon,
|
|
19
|
+
content
|
|
20
|
+
};
|
|
21
|
+
export {
|
|
22
|
+
base,
|
|
23
|
+
container,
|
|
24
|
+
content,
|
|
25
|
+
s as default,
|
|
26
|
+
disabled,
|
|
27
|
+
focusVisible,
|
|
28
|
+
hovered,
|
|
29
|
+
icon,
|
|
30
|
+
pressed,
|
|
31
|
+
selected
|
|
32
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ComponentPropsWithRef, ComponentRef, ReactNode } from 'react';
|
|
2
|
+
import type { DataAttributeProps, ExtendableComponentPropsWithRef } from '@koobiq/react-core';
|
|
3
|
+
import type { TooltipProps } from '../../../Tooltip';
|
|
4
|
+
export type ButtonToggleKey = string | number;
|
|
5
|
+
export type ButtonToggleProps = ExtendableComponentPropsWithRef<{
|
|
6
|
+
/** An identifier for the item in the selectedKey of a ButtonToggleGroup. */
|
|
7
|
+
id: ButtonToggleKey;
|
|
8
|
+
/** Icon placed before the children. */
|
|
9
|
+
icon?: ReactNode;
|
|
10
|
+
/**
|
|
11
|
+
* If `true`, the component is disabled.
|
|
12
|
+
* @default false
|
|
13
|
+
*/
|
|
14
|
+
isDisabled?: boolean;
|
|
15
|
+
/** Additional CSS-classes. */
|
|
16
|
+
className?: string;
|
|
17
|
+
/** The props used for each slot inside. */
|
|
18
|
+
slotProps?: {
|
|
19
|
+
tooltip?: TooltipProps;
|
|
20
|
+
icon?: ComponentPropsWithRef<'span'> & DataAttributeProps;
|
|
21
|
+
content?: ComponentPropsWithRef<'span'> & DataAttributeProps;
|
|
22
|
+
container?: ComponentPropsWithRef<'span'> & DataAttributeProps;
|
|
23
|
+
};
|
|
24
|
+
/** Unique identifier for testing purposes. */
|
|
25
|
+
'data-testid'?: string | number;
|
|
26
|
+
}, 'div'>;
|
|
27
|
+
export type ButtonToggleRef = ComponentRef<'button'>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ButtonToggle';
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export type AnimationStateType = {
|
|
2
|
+
isAnimated?: boolean;
|
|
3
|
+
start?: [number, number];
|
|
4
|
+
end?: [number, number];
|
|
5
|
+
savedKey?: string | number;
|
|
6
|
+
};
|
|
7
|
+
type AnimationAction = {
|
|
8
|
+
type: 'SET_ANIMATED';
|
|
9
|
+
payload: {
|
|
10
|
+
start: [number, number];
|
|
11
|
+
end: [number, number];
|
|
12
|
+
};
|
|
13
|
+
} | {
|
|
14
|
+
type: 'SET_SAVED';
|
|
15
|
+
payload: {
|
|
16
|
+
savedKey?: string | number;
|
|
17
|
+
};
|
|
18
|
+
} | {
|
|
19
|
+
type: 'RESET';
|
|
20
|
+
};
|
|
21
|
+
export declare const initialAnimationState: AnimationStateType;
|
|
22
|
+
export declare function animationReducer(state: AnimationStateType, action: AnimationAction): AnimationStateType;
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
const initialAnimationState = {};
|
|
3
|
+
function animationReducer(state, action) {
|
|
4
|
+
switch (action.type) {
|
|
5
|
+
case "SET_ANIMATED":
|
|
6
|
+
return {
|
|
7
|
+
isAnimated: true,
|
|
8
|
+
start: action.payload.start,
|
|
9
|
+
end: action.payload.end
|
|
10
|
+
};
|
|
11
|
+
case "SET_SAVED":
|
|
12
|
+
return {
|
|
13
|
+
isAnimated: false,
|
|
14
|
+
savedKey: action.payload.savedKey
|
|
15
|
+
};
|
|
16
|
+
case "RESET":
|
|
17
|
+
return {};
|
|
18
|
+
default:
|
|
19
|
+
return state;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export {
|
|
23
|
+
animationReducer,
|
|
24
|
+
initialAnimationState
|
|
25
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { ComponentPropsWithRef, ComponentRef, ReactElement } from 'react';
|
|
2
|
+
import type { DataAttributeProps, ExtendableComponentPropsWithRef } from '@koobiq/react-core';
|
|
3
|
+
import type { ButtonToggleProps } from './components';
|
|
4
|
+
export type ButtonToggleGroupKey = string | number;
|
|
5
|
+
export type ButtonToggleGroupBaseProps = {
|
|
6
|
+
/**
|
|
7
|
+
* Whether all items are disabled.
|
|
8
|
+
* @default false
|
|
9
|
+
*/
|
|
10
|
+
isDisabled?: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* If `true`, the button will take up the full width of its container.
|
|
13
|
+
* @default false
|
|
14
|
+
*/
|
|
15
|
+
fullWidth?: boolean;
|
|
16
|
+
/** The contents of the collection. */
|
|
17
|
+
children?: Array<ReactElement<ButtonToggleProps>>;
|
|
18
|
+
/**
|
|
19
|
+
* If `true`, each item's width will be equal.
|
|
20
|
+
* @default false
|
|
21
|
+
*/
|
|
22
|
+
hasEqualItemSize?: boolean;
|
|
23
|
+
/** The currently selected key in the collection (controlled). */
|
|
24
|
+
selectedKey?: ButtonToggleGroupKey;
|
|
25
|
+
/** The initial selected key in the collection (uncontrolled). */
|
|
26
|
+
defaultSelectedKey?: ButtonToggleGroupKey;
|
|
27
|
+
/** Handler that is called when the selection changes. */
|
|
28
|
+
onSelectionChange?: (key: ButtonToggleGroupKey) => void;
|
|
29
|
+
/** Unique identifier for testing purposes. */
|
|
30
|
+
'data-testid'?: string | number;
|
|
31
|
+
/** The props used for each slot inside. */
|
|
32
|
+
slotProps?: {
|
|
33
|
+
thumb?: ComponentPropsWithRef<'div'> & DataAttributeProps;
|
|
34
|
+
container?: ComponentPropsWithRef<'div'> & DataAttributeProps;
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
export type ButtonToggleGroupProps = ExtendableComponentPropsWithRef<ButtonToggleGroupBaseProps, 'div'>;
|
|
38
|
+
export type ButtonToggleGroupRef = ComponentRef<'div'>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
function getToggleButtonStyle(start = [0, 0], end = [0, 0]) {
|
|
2
|
+
const [startX, startSize] = start;
|
|
3
|
+
const [endX, endSize] = end;
|
|
4
|
+
return {
|
|
5
|
+
"--thumb-inline-size-start": `${startSize}px`,
|
|
6
|
+
"--thumb-inline-size-end": `${endSize}px`,
|
|
7
|
+
"--thumb-transform-start": `translateX(${startX}px)`,
|
|
8
|
+
"--thumb-transform-end": `translateX(${endX}px)`
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
function getSelectedToggleButton(root) {
|
|
12
|
+
return root ? root.querySelector(
|
|
13
|
+
'[role="radio"][data-selected="true"] > span'
|
|
14
|
+
) : null;
|
|
15
|
+
}
|
|
16
|
+
export {
|
|
17
|
+
getSelectedToggleButton,
|
|
18
|
+
getToggleButtonStyle
|
|
19
|
+
};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
3
|
+
import { forwardRef } from "react";
|
|
4
|
+
import { useLocale, createCalendar, mergeProps, clsx } from "@koobiq/react-core";
|
|
5
|
+
import { useCalendarState, useCalendar } from "@koobiq/react-primitives";
|
|
6
|
+
import { utilClasses } from "../../styles/utility.js";
|
|
7
|
+
import s from "./Calendar.module.css.js";
|
|
8
|
+
import { CalendarHeader } from "./components/CalendarHeader/CalendarHeader.js";
|
|
9
|
+
import { CalendarGrid } from "./components/CalendarGrid/CalendarGrid.js";
|
|
10
|
+
const textNormal = utilClasses.typography["text-normal"];
|
|
11
|
+
function CalendarRender(props, ref) {
|
|
12
|
+
const { style, className } = props;
|
|
13
|
+
const { locale } = useLocale();
|
|
14
|
+
const state = useCalendarState({
|
|
15
|
+
createCalendar,
|
|
16
|
+
...props,
|
|
17
|
+
locale
|
|
18
|
+
});
|
|
19
|
+
const { calendarProps, prevButtonProps, nextButtonProps } = useCalendar(
|
|
20
|
+
props,
|
|
21
|
+
state
|
|
22
|
+
);
|
|
23
|
+
const rootProps = mergeProps(
|
|
24
|
+
{ className: clsx(s.base, textNormal, className), style, ref },
|
|
25
|
+
calendarProps
|
|
26
|
+
);
|
|
27
|
+
return /* @__PURE__ */ jsxs("div", { ...rootProps, children: [
|
|
28
|
+
/* @__PURE__ */ jsx(
|
|
29
|
+
CalendarHeader,
|
|
30
|
+
{
|
|
31
|
+
state,
|
|
32
|
+
prevButtonProps,
|
|
33
|
+
nextButtonProps
|
|
34
|
+
}
|
|
35
|
+
),
|
|
36
|
+
/* @__PURE__ */ jsx(CalendarGrid, { state })
|
|
37
|
+
] });
|
|
38
|
+
}
|
|
39
|
+
const Calendar = forwardRef(CalendarRender);
|
|
40
|
+
export {
|
|
41
|
+
Calendar
|
|
42
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { CalendarState, AriaCalendarCellProps } from '@koobiq/react-primitives';
|
|
2
|
+
type CalendarCellProps = {
|
|
3
|
+
state: CalendarState;
|
|
4
|
+
date: AriaCalendarCellProps['date'];
|
|
5
|
+
};
|
|
6
|
+
export declare function CalendarCell({ state, date }: CalendarCellProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useRef } from "react";
|
|
4
|
+
import { today, useHover, useFocusRing, clsx, mergeProps } from "@koobiq/react-core";
|
|
5
|
+
import { useCalendarCell } from "@koobiq/react-primitives";
|
|
6
|
+
import { utilClasses } from "../../../../styles/utility.js";
|
|
7
|
+
import s from "./CalendarCell.module.css.js";
|
|
8
|
+
const textNormalMedium = utilClasses.typography["text-normal-medium"];
|
|
9
|
+
function CalendarCell({ state, date }) {
|
|
10
|
+
const ref = useRef(null);
|
|
11
|
+
const isToday = date.compare(today(state.timeZone)) === 0;
|
|
12
|
+
const {
|
|
13
|
+
cellProps,
|
|
14
|
+
isSelected,
|
|
15
|
+
isDisabled,
|
|
16
|
+
isInvalid,
|
|
17
|
+
isPressed,
|
|
18
|
+
buttonProps,
|
|
19
|
+
isUnavailable,
|
|
20
|
+
formattedDate,
|
|
21
|
+
isOutsideVisibleRange
|
|
22
|
+
} = useCalendarCell({ date }, state, ref);
|
|
23
|
+
const { hoverProps, isHovered } = useHover({
|
|
24
|
+
isDisabled: isDisabled || isUnavailable
|
|
25
|
+
});
|
|
26
|
+
const { focusProps, isFocusVisible } = useFocusRing({});
|
|
27
|
+
return /* @__PURE__ */ jsx("td", { ...cellProps, children: /* @__PURE__ */ jsx(
|
|
28
|
+
"div",
|
|
29
|
+
{
|
|
30
|
+
...mergeProps(hoverProps, focusProps, buttonProps),
|
|
31
|
+
ref,
|
|
32
|
+
className: clsx(
|
|
33
|
+
s.base,
|
|
34
|
+
isToday && s.today,
|
|
35
|
+
isPressed && s.pressed,
|
|
36
|
+
isHovered && s.hovered,
|
|
37
|
+
isDisabled && s.disabled,
|
|
38
|
+
isSelected && s.selected,
|
|
39
|
+
isInvalid && s.invalid,
|
|
40
|
+
isUnavailable && s.unavailable,
|
|
41
|
+
isSelected && textNormalMedium,
|
|
42
|
+
isFocusVisible && s.focusVisible
|
|
43
|
+
),
|
|
44
|
+
hidden: isOutsideVisibleRange,
|
|
45
|
+
children: formattedDate
|
|
46
|
+
}
|
|
47
|
+
) });
|
|
48
|
+
}
|
|
49
|
+
export {
|
|
50
|
+
CalendarCell
|
|
51
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
const base = "kbq-calendarcell-dc4d6e";
|
|
2
|
+
const today = "kbq-calendarcell-today-04de99";
|
|
3
|
+
const hovered = "kbq-calendarcell-hovered-c94a4e";
|
|
4
|
+
const pressed = "kbq-calendarcell-pressed-a65ee0";
|
|
5
|
+
const focusVisible = "kbq-calendarcell-focusVisible-d92d99";
|
|
6
|
+
const selected = "kbq-calendarcell-selected-62a719";
|
|
7
|
+
const disabled = "kbq-calendarcell-disabled-a2a975";
|
|
8
|
+
const unavailable = "kbq-calendarcell-unavailable-a606f4";
|
|
9
|
+
const invalid = "kbq-calendarcell-invalid-02611e";
|
|
10
|
+
const s = {
|
|
11
|
+
base,
|
|
12
|
+
today,
|
|
13
|
+
hovered,
|
|
14
|
+
pressed,
|
|
15
|
+
focusVisible,
|
|
16
|
+
selected,
|
|
17
|
+
disabled,
|
|
18
|
+
unavailable,
|
|
19
|
+
invalid
|
|
20
|
+
};
|
|
21
|
+
export {
|
|
22
|
+
base,
|
|
23
|
+
s as default,
|
|
24
|
+
disabled,
|
|
25
|
+
focusVisible,
|
|
26
|
+
hovered,
|
|
27
|
+
invalid,
|
|
28
|
+
pressed,
|
|
29
|
+
selected,
|
|
30
|
+
today,
|
|
31
|
+
unavailable
|
|
32
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './CalendarCell';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type CalendarState, type AriaCalendarGridProps } from '@koobiq/react-primitives';
|
|
2
|
+
type CalendarGridProps = {
|
|
3
|
+
state: CalendarState;
|
|
4
|
+
} & AriaCalendarGridProps;
|
|
5
|
+
export declare function CalendarGrid({ state, ...props }: CalendarGridProps): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export {};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useLocale, getWeeksInMonth, clsx } from "@koobiq/react-core";
|
|
4
|
+
import { useCalendarGrid } from "@koobiq/react-primitives";
|
|
5
|
+
import { utilClasses } from "../../../../styles/utility.js";
|
|
6
|
+
import s from "./CalendarGrid.module.css.js";
|
|
7
|
+
import { CalendarCell } from "../CalendarCell/CalendarCell.js";
|
|
8
|
+
const textNormal = utilClasses.typography["text-normal"];
|
|
9
|
+
function CalendarGrid({ state, ...props }) {
|
|
10
|
+
const { locale } = useLocale();
|
|
11
|
+
const { gridProps, headerProps, weekDays } = useCalendarGrid(
|
|
12
|
+
{ ...props, weekdayStyle: "short" },
|
|
13
|
+
state
|
|
14
|
+
);
|
|
15
|
+
const weeksInMonth = getWeeksInMonth(state.visibleRange.start, locale);
|
|
16
|
+
return /* @__PURE__ */ jsxs("table", { ...gridProps, className: clsx(s.base, textNormal), children: [
|
|
17
|
+
/* @__PURE__ */ jsxs("thead", { ...headerProps, children: [
|
|
18
|
+
/* @__PURE__ */ jsx("tr", { children: weekDays.map((day, i) => /* @__PURE__ */ jsx("th", { className: clsx(s.weekDay, textNormal), children: day }, i)) }),
|
|
19
|
+
/* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx("th", { colSpan: 7, className: s.divider }) })
|
|
20
|
+
] }),
|
|
21
|
+
/* @__PURE__ */ jsx("tbody", { children: [...new Array(weeksInMonth).keys()].map((weekIndex) => /* @__PURE__ */ jsx("tr", { children: state.getDatesInWeek(weekIndex).map(
|
|
22
|
+
(date, i) => date ? /* @__PURE__ */ jsx(CalendarCell, { state, date }, i) : /* @__PURE__ */ jsx("td", {}, i)
|
|
23
|
+
) }, weekIndex)) })
|
|
24
|
+
] });
|
|
25
|
+
}
|
|
26
|
+
export {
|
|
27
|
+
CalendarGrid
|
|
28
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
const base = "kbq-calendargrid-1a43cf";
|
|
2
|
+
const weekDay = "kbq-calendargrid-weekDay-94b083";
|
|
3
|
+
const divider = "kbq-calendargrid-divider-3ec061";
|
|
4
|
+
const s = {
|
|
5
|
+
base,
|
|
6
|
+
weekDay,
|
|
7
|
+
divider
|
|
8
|
+
};
|
|
9
|
+
export {
|
|
10
|
+
base,
|
|
11
|
+
s as default,
|
|
12
|
+
divider,
|
|
13
|
+
weekDay
|
|
14
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './CalendarGrid';
|