@payfit/unity-components 0.0.0-alpha.7 → 0.0.0-alpha.9
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/cjs/components/actionable/Actionable.d.ts +6 -5
- package/dist/cjs/components/alert/Alert.js +1 -1
- package/dist/cjs/components/app-menu/parts/AppMenuFooter.js +1 -1
- package/dist/cjs/components/avatar/Avatar.js +1 -1
- package/dist/cjs/components/avatar/parts/AvatarPair.js +1 -1
- package/dist/cjs/components/badge/Badge.d.ts +3 -0
- package/dist/cjs/components/badge/Badge.js +1 -1
- package/dist/cjs/components/bottom-sheet/BottomSheet.d.ts +153 -0
- package/dist/cjs/components/bottom-sheet/BottomSheet.js +1 -0
- package/dist/cjs/components/bottom-sheet/parts/BottomSheetContent.d.ts +70 -0
- package/dist/cjs/components/bottom-sheet/parts/BottomSheetContent.js +1 -0
- package/dist/cjs/components/bottom-sheet/parts/BottomSheetDragIndicator.d.ts +54 -0
- package/dist/cjs/components/bottom-sheet/parts/BottomSheetDragIndicator.js +1 -0
- package/dist/cjs/components/bottom-sheet/parts/BottomSheetFooter.d.ts +27 -0
- package/dist/cjs/components/bottom-sheet/parts/BottomSheetFooter.js +1 -0
- package/dist/cjs/components/bottom-sheet/parts/BottomSheetHeader.d.ts +83 -0
- package/dist/cjs/components/bottom-sheet/parts/BottomSheetHeader.js +1 -0
- package/dist/cjs/components/breadcrumbs/Breadcrumbs.js +1 -1
- package/dist/cjs/components/breadcrumbs/parts/Breadcrumb.js +1 -1
- package/dist/cjs/components/button/Button.js +1 -1
- package/dist/cjs/components/button/Button.variants.js +1 -1
- package/dist/cjs/components/checkbox/Checkbox.js +1 -1
- package/dist/cjs/components/checkbox/parts/CheckboxIndicator.js +1 -1
- package/dist/cjs/components/checkbox-group/CheckboxGroup.js +1 -1
- package/dist/cjs/components/collapsible/Collapsible.d.ts +33 -0
- package/dist/cjs/components/collapsible/parts/CollapsibleContent.d.ts +36 -0
- package/dist/cjs/components/collapsible/parts/CollapsibleTitle.d.ts +39 -0
- package/dist/cjs/components/date-picker/DatePicker.js +1 -1
- package/dist/cjs/components/date-picker/parts/DateCalendar.js +1 -1
- package/dist/cjs/components/date-picker/parts/DateInput.js +1 -1
- package/dist/cjs/components/dialog/Dialog.d.ts +98 -11
- package/dist/cjs/components/dialog/Dialog.js +1 -1
- package/dist/cjs/components/dialog/parts/DialogActions.js +1 -1
- package/dist/cjs/components/dialog/parts/DialogContent.js +1 -1
- package/dist/cjs/components/dialog/parts/DialogTitle.js +1 -1
- package/dist/cjs/components/fieldset/Fieldset.d.ts +150 -0
- package/dist/cjs/components/fieldset/Fieldset.js +1 -0
- package/dist/cjs/components/fieldset/parts/FieldGroup.d.ts +27 -0
- package/dist/cjs/components/fieldset/parts/FieldGroup.js +1 -0
- package/dist/cjs/components/form/Form.js +1 -1
- package/dist/cjs/components/form-field/parts/FormContextualLink.js +1 -1
- package/dist/cjs/components/form-field/parts/FormControl.d.ts +23 -0
- package/dist/cjs/components/form-field/parts/FormFeedbackText.js +1 -1
- package/dist/cjs/components/form-field/parts/FormHelperText.js +1 -1
- package/dist/cjs/components/full-page-loader/FullPageLoader.js +1 -1
- package/dist/cjs/components/icon/Icon.js +1 -1
- package/dist/cjs/components/icon-button/CircularIconButton.d.ts +68 -3
- package/dist/cjs/components/icon-button/CircularIconButton.js +1 -1
- package/dist/cjs/components/icon-button/IconButton.js +1 -1
- package/dist/cjs/components/icon-button/IconButton.variants.js +1 -1
- package/dist/cjs/components/input/Input.js +1 -1
- package/dist/cjs/components/label/Label.js +1 -1
- package/dist/cjs/components/link/Link.d.ts +1 -1
- package/dist/cjs/components/link/Link.js +1 -1
- package/dist/cjs/components/menu/parts/MenuContent.js +1 -1
- package/dist/cjs/components/multi-select/MultiSelect.d.ts +62 -0
- package/dist/cjs/components/multi-select/MultiSelect.js +1 -0
- package/dist/cjs/components/multi-select/Multiselect.context.d.ts +7 -0
- package/dist/cjs/components/multi-select/Multiselect.context.js +1 -0
- package/dist/cjs/components/multi-select/Multiselect.types.d.ts +109 -0
- package/dist/cjs/components/multi-select/hooks/use-combobox-filter.d.ts +12 -0
- package/dist/cjs/components/multi-select/hooks/use-combobox-filter.js +1 -0
- package/dist/cjs/components/multi-select/hooks/use-multiselection-state.d.ts +14 -0
- package/dist/cjs/components/multi-select/hooks/use-multiselection-state.js +1 -0
- package/dist/cjs/components/multi-select/parts/MultiSelectButton.d.ts +16 -0
- package/dist/cjs/components/multi-select/parts/MultiSelectButton.js +1 -0
- package/dist/cjs/components/multi-select/parts/MultiSelectOptGroup.d.ts +69 -0
- package/dist/cjs/components/multi-select/parts/MultiSelectOptGroup.js +1 -0
- package/dist/cjs/components/multi-select/parts/MultiSelectOption.d.ts +20 -0
- package/dist/cjs/components/multi-select/parts/MultiSelectOption.js +1 -0
- package/dist/cjs/components/multi-select/parts/MultiSelectPopover.d.ts +7 -0
- package/dist/cjs/components/multi-select/parts/MultiSelectPopover.js +1 -0
- package/dist/cjs/components/multi-select-field/MultiSelectField.d.ts +59 -0
- package/dist/cjs/components/multi-select-field/MultiSelectField.js +1 -0
- package/dist/cjs/components/pill/Pill.js +1 -1
- package/dist/cjs/components/progress-bar/ProgressBar.js +1 -1
- package/dist/cjs/components/segmented-button-group/SegmentedButtonGroup.d.ts +43 -0
- package/dist/cjs/components/segmented-button-group/SegmentedButtonGroups.context.d.ts +8 -0
- package/dist/cjs/components/segmented-button-group/parts/ToggleButton.d.ts +47 -0
- package/dist/cjs/components/select/Select.js +1 -1
- package/dist/cjs/components/select/parts/SearchInput.js +1 -1
- package/dist/cjs/components/select/parts/SelectButton.js +1 -1
- package/dist/cjs/components/select/parts/SelectOption.js +1 -1
- package/dist/cjs/components/select/parts/SelectOptionHelper.js +1 -1
- package/dist/cjs/components/selectable-button-group/SelectableButtonGroup.context.d.ts +2 -0
- package/dist/cjs/components/selectable-button-group/SelectableButtonGroup.context.js +1 -0
- package/dist/cjs/components/selectable-button-group/SelectableButtonGroup.d.ts +59 -0
- package/dist/cjs/components/selectable-button-group/SelectableButtonGroup.js +1 -0
- package/dist/cjs/components/selectable-button-group/parts/SelectableButton.d.ts +127 -0
- package/dist/cjs/components/selectable-button-group/parts/SelectableButton.js +1 -0
- package/dist/cjs/components/side-panel/SidePanel.d.ts +152 -0
- package/dist/cjs/components/side-panel/SidePanel.js +1 -0
- package/dist/cjs/components/side-panel/parts/SidePanelContent.d.ts +71 -0
- package/dist/cjs/components/side-panel/parts/SidePanelContent.js +1 -0
- package/dist/cjs/components/side-panel/parts/SidePanelDragIndicator.d.ts +54 -0
- package/dist/cjs/components/side-panel/parts/SidePanelDragIndicator.js +1 -0
- package/dist/cjs/components/side-panel/parts/SidePanelFooter.d.ts +27 -0
- package/dist/cjs/components/side-panel/parts/SidePanelFooter.js +1 -0
- package/dist/cjs/components/side-panel/parts/SidePanelHeader.d.ts +75 -0
- package/dist/cjs/components/side-panel/parts/SidePanelHeader.js +1 -0
- package/dist/cjs/components/spinner/Spinner.js +1 -1
- package/dist/cjs/components/tabs/Tabs.js +1 -1
- package/dist/cjs/components/tabs/Tabs.variant.js +1 -1
- package/dist/cjs/components/tabs/parts/TabList.js +1 -1
- package/dist/cjs/components/text/Text.js +1 -1
- package/dist/cjs/components/text-area/TextArea.js +1 -1
- package/dist/cjs/components/toast/UnityToast.d.ts +3 -3
- package/dist/cjs/components/toast/UnityToast.js +1 -1
- package/dist/cjs/components/toast/toast.d.ts +2 -1
- package/dist/cjs/components/toast/toast.js +1 -1
- package/dist/cjs/components/tooltip/Tooltip.d.ts +1 -1
- package/dist/cjs/components/tooltip/Tooltip.js +1 -1
- package/dist/cjs/index.d.ts +18 -0
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/types/utils.d.ts +1 -0
- package/dist/esm/components/actionable/Actionable.d.mts +6 -5
- package/dist/esm/components/alert/Alert.mjs +31 -21
- package/dist/esm/components/app-menu/parts/AppMenuFooter.mjs +14 -6
- package/dist/esm/components/avatar/Avatar.mjs +15 -14
- package/dist/esm/components/avatar/parts/AvatarPair.mjs +10 -10
- package/dist/esm/components/badge/Badge.d.mts +3 -0
- package/dist/esm/components/badge/Badge.mjs +11 -8
- package/dist/esm/components/bottom-sheet/BottomSheet.d.mts +153 -0
- package/dist/esm/components/bottom-sheet/BottomSheet.mjs +68 -0
- package/dist/esm/components/bottom-sheet/parts/BottomSheetContent.d.mts +70 -0
- package/dist/esm/components/bottom-sheet/parts/BottomSheetContent.mjs +26 -0
- package/dist/esm/components/bottom-sheet/parts/BottomSheetDragIndicator.d.mts +54 -0
- package/dist/esm/components/bottom-sheet/parts/BottomSheetDragIndicator.mjs +67 -0
- package/dist/esm/components/bottom-sheet/parts/BottomSheetFooter.d.mts +27 -0
- package/dist/esm/components/bottom-sheet/parts/BottomSheetFooter.mjs +28 -0
- package/dist/esm/components/bottom-sheet/parts/BottomSheetHeader.d.mts +83 -0
- package/dist/esm/components/bottom-sheet/parts/BottomSheetHeader.mjs +45 -0
- package/dist/esm/components/breadcrumbs/Breadcrumbs.mjs +11 -11
- package/dist/esm/components/breadcrumbs/parts/Breadcrumb.mjs +10 -10
- package/dist/esm/components/button/Button.mjs +25 -24
- package/dist/esm/components/button/Button.variants.mjs +2 -2
- package/dist/esm/components/checkbox/Checkbox.mjs +13 -5
- package/dist/esm/components/checkbox/parts/CheckboxIndicator.mjs +2 -2
- package/dist/esm/components/checkbox-group/CheckboxGroup.mjs +32 -25
- package/dist/esm/components/collapsible/Collapsible.d.mts +33 -0
- package/dist/esm/components/collapsible/parts/CollapsibleContent.d.mts +36 -0
- package/dist/esm/components/collapsible/parts/CollapsibleTitle.d.mts +39 -0
- package/dist/esm/components/date-picker/DatePicker.mjs +3 -2
- package/dist/esm/components/date-picker/parts/DateCalendar.mjs +20 -20
- package/dist/esm/components/date-picker/parts/DateInput.mjs +7 -7
- package/dist/esm/components/dialog/Dialog.d.mts +98 -11
- package/dist/esm/components/dialog/Dialog.mjs +50 -29
- package/dist/esm/components/dialog/parts/DialogActions.mjs +11 -4
- package/dist/esm/components/dialog/parts/DialogContent.mjs +16 -8
- package/dist/esm/components/dialog/parts/DialogTitle.mjs +5 -5
- package/dist/esm/components/fieldset/Fieldset.d.mts +150 -0
- package/dist/esm/components/fieldset/Fieldset.mjs +66 -0
- package/dist/esm/components/fieldset/parts/FieldGroup.d.mts +27 -0
- package/dist/esm/components/fieldset/parts/FieldGroup.mjs +18 -0
- package/dist/esm/components/form/Form.mjs +15 -14
- package/dist/esm/components/form-field/parts/FormContextualLink.mjs +21 -19
- package/dist/esm/components/form-field/parts/FormControl.d.mts +23 -0
- package/dist/esm/components/form-field/parts/FormFeedbackText.mjs +26 -23
- package/dist/esm/components/form-field/parts/FormHelperText.mjs +11 -10
- package/dist/esm/components/full-page-loader/FullPageLoader.mjs +24 -15
- package/dist/esm/components/icon/Icon.mjs +1 -0
- package/dist/esm/components/icon-button/CircularIconButton.d.mts +68 -3
- package/dist/esm/components/icon-button/CircularIconButton.mjs +58 -25
- package/dist/esm/components/icon-button/IconButton.mjs +16 -15
- package/dist/esm/components/icon-button/IconButton.variants.mjs +9 -9
- package/dist/esm/components/input/Input.mjs +23 -22
- package/dist/esm/components/label/Label.mjs +9 -8
- package/dist/esm/components/link/Link.d.mts +1 -1
- package/dist/esm/components/link/Link.mjs +18 -17
- package/dist/esm/components/menu/parts/MenuContent.mjs +4 -3
- package/dist/esm/components/multi-select/MultiSelect.d.mts +62 -0
- package/dist/esm/components/multi-select/MultiSelect.mjs +231 -0
- package/dist/esm/components/multi-select/Multiselect.context.d.mts +7 -0
- package/dist/esm/components/multi-select/Multiselect.context.mjs +8 -0
- package/dist/esm/components/multi-select/Multiselect.types.d.mts +109 -0
- package/dist/esm/components/multi-select/hooks/use-combobox-filter.d.mts +12 -0
- package/dist/esm/components/multi-select/hooks/use-combobox-filter.mjs +22 -0
- package/dist/esm/components/multi-select/hooks/use-multiselection-state.d.mts +14 -0
- package/dist/esm/components/multi-select/hooks/use-multiselection-state.mjs +47 -0
- package/dist/esm/components/multi-select/parts/MultiSelectButton.d.mts +16 -0
- package/dist/esm/components/multi-select/parts/MultiSelectButton.mjs +161 -0
- package/dist/esm/components/multi-select/parts/MultiSelectOptGroup.d.mts +69 -0
- package/dist/esm/components/multi-select/parts/MultiSelectOptGroup.mjs +34 -0
- package/dist/esm/components/multi-select/parts/MultiSelectOption.d.mts +20 -0
- package/dist/esm/components/multi-select/parts/MultiSelectOption.mjs +87 -0
- package/dist/esm/components/multi-select/parts/MultiSelectPopover.d.mts +7 -0
- package/dist/esm/components/multi-select/parts/MultiSelectPopover.mjs +65 -0
- package/dist/esm/components/multi-select-field/MultiSelectField.d.mts +59 -0
- package/dist/esm/components/multi-select-field/MultiSelectField.mjs +82 -0
- package/dist/esm/components/pill/Pill.mjs +4 -3
- package/dist/esm/components/progress-bar/ProgressBar.mjs +8 -7
- package/dist/esm/components/segmented-button-group/SegmentedButtonGroup.d.mts +43 -0
- package/dist/esm/components/segmented-button-group/SegmentedButtonGroups.context.d.mts +8 -0
- package/dist/esm/components/segmented-button-group/parts/ToggleButton.d.mts +47 -0
- package/dist/esm/components/select/Select.mjs +19 -19
- package/dist/esm/components/select/parts/SearchInput.mjs +11 -11
- package/dist/esm/components/select/parts/SelectButton.mjs +40 -31
- package/dist/esm/components/select/parts/SelectOption.mjs +5 -4
- package/dist/esm/components/select/parts/SelectOptionHelper.mjs +11 -9
- package/dist/esm/components/selectable-button-group/SelectableButtonGroup.context.d.mts +2 -0
- package/dist/esm/components/selectable-button-group/SelectableButtonGroup.context.mjs +5 -0
- package/dist/esm/components/selectable-button-group/SelectableButtonGroup.d.mts +59 -0
- package/dist/esm/components/selectable-button-group/SelectableButtonGroup.mjs +34 -0
- package/dist/esm/components/selectable-button-group/parts/SelectableButton.d.mts +127 -0
- package/dist/esm/components/selectable-button-group/parts/SelectableButton.mjs +99 -0
- package/dist/esm/components/side-panel/SidePanel.d.mts +152 -0
- package/dist/esm/components/side-panel/SidePanel.mjs +67 -0
- package/dist/esm/components/side-panel/parts/SidePanelContent.d.mts +71 -0
- package/dist/esm/components/side-panel/parts/SidePanelContent.mjs +26 -0
- package/dist/esm/components/side-panel/parts/SidePanelDragIndicator.d.mts +54 -0
- package/dist/esm/components/side-panel/parts/SidePanelDragIndicator.mjs +67 -0
- package/dist/esm/components/side-panel/parts/SidePanelFooter.d.mts +27 -0
- package/dist/esm/components/side-panel/parts/SidePanelFooter.mjs +20 -0
- package/dist/esm/components/side-panel/parts/SidePanelHeader.d.mts +75 -0
- package/dist/esm/components/side-panel/parts/SidePanelHeader.mjs +43 -0
- package/dist/esm/components/spinner/Spinner.mjs +18 -17
- package/dist/esm/components/tabs/Tabs.mjs +19 -10
- package/dist/esm/components/tabs/Tabs.variant.mjs +1 -1
- package/dist/esm/components/tabs/parts/TabList.mjs +48 -26
- package/dist/esm/components/text/Text.mjs +11 -10
- package/dist/esm/components/text-area/TextArea.mjs +39 -40
- package/dist/esm/components/toast/UnityToast.d.mts +3 -3
- package/dist/esm/components/toast/UnityToast.mjs +22 -19
- package/dist/esm/components/toast/toast.d.mts +2 -1
- package/dist/esm/components/toast/toast.mjs +15 -13
- package/dist/esm/components/tooltip/Tooltip.d.mts +1 -1
- package/dist/esm/components/tooltip/Tooltip.mjs +12 -17
- package/dist/esm/index.d.mts +18 -0
- package/dist/esm/index.mjs +221 -173
- package/dist/esm/providers/router/RouterProvider.mjs +3 -3
- package/dist/esm/types/utils.d.mts +1 -0
- package/i18n/en-GB.json +1 -0
- package/i18n/es-ES.json +1 -0
- package/i18n/fr-FR.json +1 -0
- package/package.json +29 -22
- package/dist/cjs/components/index.d.ts +0 -4
- package/dist/esm/components/index.d.mts +0 -4
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { ForwardedRef, ReactNode } from 'react';
|
|
2
|
+
import { FieldPath, FieldValues } from 'react-hook-form';
|
|
3
|
+
import { infer as ZodInfer } from 'zod';
|
|
4
|
+
import { Schema } from '../../hooks/use-form.types.js';
|
|
5
|
+
import { LabelProps } from '../label/Label.js';
|
|
6
|
+
import { MultiSelectProps } from '../multi-select/Multiselect.types.js';
|
|
7
|
+
type Key = string | number;
|
|
8
|
+
interface FieldProps<TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>> extends Pick<LabelProps, 'isRequired' | 'requiredVariant'> {
|
|
9
|
+
/** The name of the field, which should match the form schema. */
|
|
10
|
+
name: TName;
|
|
11
|
+
/** The label for the multi-select field. */
|
|
12
|
+
label: string;
|
|
13
|
+
/** Helper text to display below the multi-select field. */
|
|
14
|
+
helperText?: ReactNode;
|
|
15
|
+
/** Feedback text to display below the multi-select field. */
|
|
16
|
+
feedbackText?: ReactNode;
|
|
17
|
+
/** A contextual link to display below the multi-select field. */
|
|
18
|
+
contextualLink?: ReactNode;
|
|
19
|
+
}
|
|
20
|
+
type BaseMultiSelectProps<TItem, // Item type
|
|
21
|
+
TItemKey extends keyof TItem, // key name of the item
|
|
22
|
+
TKeyType extends TItem[TItemKey] & Key> = Omit<MultiSelectProps<TItem, TItemKey, TKeyType>, 'value' | 'defaultValue' | 'onChange' | 'aria-labelledby' | 'aria-label'>;
|
|
23
|
+
export type MultiSelectFieldProps<TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>, TItem = unknown, TItemKey extends keyof TItem = keyof TItem, TKeyType extends TItem[TItemKey] & Key = TItem[TItemKey] & Key> = FieldProps<TFieldValues, TName> & BaseMultiSelectProps<TItem, TItemKey, TKeyType>;
|
|
24
|
+
/**
|
|
25
|
+
* The `MultiSelectField` component renders a full field that allows selecting multiple items from a dropdown list, and integrates with the `Form` component automatically.
|
|
26
|
+
* @example
|
|
27
|
+
* ```tsx
|
|
28
|
+
* const schema = z.object({
|
|
29
|
+
* fruits: z.set(z.string()),
|
|
30
|
+
* })
|
|
31
|
+
*
|
|
32
|
+
* function MyForm() {
|
|
33
|
+
* const { Form } = useUnityForm(schema)
|
|
34
|
+
*
|
|
35
|
+
* return (
|
|
36
|
+
* <Form action={handleSubmit}>
|
|
37
|
+
* <MultiSelectField<typeof schema>
|
|
38
|
+
* name="fruits"
|
|
39
|
+
* label="Select fruits"
|
|
40
|
+
* >
|
|
41
|
+
* <MultiSelectOption value="apple">Apple</MultiSelectOption>
|
|
42
|
+
* <MultiSelectOption value="banana">Banana</MultiSelectOption>
|
|
43
|
+
* <MultiSelectOption value="orange">Orange</MultiSelectOption>
|
|
44
|
+
* </MultiSelectField>
|
|
45
|
+
* </Form>
|
|
46
|
+
* )
|
|
47
|
+
* }
|
|
48
|
+
* ```
|
|
49
|
+
* @note The schema type parameter is needed to ensure type safety with the form's schema. If you omit it, the `name` prop will not be type-safe.
|
|
50
|
+
* @remarks
|
|
51
|
+
* [API & Docs](https://unity-components.payfit.io/?path=/docs/forms-multiselectfield--docs) • [Design Guidelines](https://www.payfit.design/24f360409/p/928776-multiselect)
|
|
52
|
+
*/
|
|
53
|
+
export declare const MultiSelectField: {
|
|
54
|
+
<TSchema extends Schema, TItem = unknown>(props: MultiSelectFieldProps<ZodInfer<TSchema>, FieldPath<ZodInfer<TSchema>>, TItem, keyof TItem, TItem[keyof TItem] & Key> & {
|
|
55
|
+
ref?: ForwardedRef<HTMLButtonElement>;
|
|
56
|
+
}): React.JSX.Element;
|
|
57
|
+
displayName?: string;
|
|
58
|
+
};
|
|
59
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),I=require("react"),T=require("react-hook-form"),g=require("tailwind-variants"),P=require("../form-field/FormField.js"),R=require("../form-field/parts/FormControl.js"),k=require("../form-field/parts/FormFeedbackText.js"),L=require("../form-field/parts/FormHelperText.js"),v=require("../form-field/parts/FormLabel.js"),m=require("../multi-select/MultiSelect.js"),w=g.tv({base:"uy-flex uy-flex-col uy-gap-100"});function C(e,l){const{control:i,setValue:x}=T.useFormContext(),{name:n,label:S,helperText:c,feedbackText:b,contextualLink:q,isRequired:h,isInvalid:j,isLoading:o,isDisabled:s,isReadOnly:u,requiredVariant:y,children:a,onClearButtonPress:r,...M}=e,f={isRequired:h,isInvalid:j,isLoading:o,isDisabled:s,isReadOnly:u},V="items"in e&&"getItemValue"in e,d={onClearButtonPress:()=>{x(n,new Set),r==null||r()},placeholder:e.placeholder,isSearchable:e.isSearchable,maxVisibleItems:e.maxVisibleItems,isDisabled:s,isReadOnly:u,isLoading:o,renderValue:e.renderValue};return t.jsxs(P.FormField,{control:i,name:n,className:w(),...f,children:[t.jsx(v.FormLabel,{requiredVariant:y,children:S}),c&&t.jsx(L.FormHelperText,{children:c}),t.jsx(R.FormControl,{children:V?t.jsx(m.MultiSelect,{...M,...d,ref:l,children:a}):t.jsx(m.MultiSelect,{...d,ref:l,children:a})}),t.jsx(k.FormFeedbackText,{children:b}),q]})}const F=I.forwardRef(function(l,i){return C(l,i)});F.displayName="MultiSelectField";exports.MultiSelectField=F;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("react/jsx-runtime"),o=require("react"),y=require("tailwind-variants"),d=y.tv({base:"uy-min-w-200 uy-max-w-400 uy-inline-flex uy-items-center uy-justify-center uy-text-center uy-typography-body-small",variants:{variant:{critical:"uy-bg-surface-danger uy-text-content-inverted",info:"uy-bg-surface-primary uy-text-content-inverted",neutral:"uy-bg-surface-neutral-lowest uy-text-content-neutral"},shape:{circle:"uy-rounded-circle",pill:"uy-rounded-pill uy-px-50"},isVisible:{true:"uy-visible",false:"uy-invisible"}},defaultVariants:{variant:"critical",shape:"pill",isVisible:!0}}),p=(e,i)=>{const t=10**i-1;return e>t?`${t}+`:e.toString()},
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("react/jsx-runtime"),o=require("react"),y=require("tailwind-variants"),d=y.tv({base:"uy-min-w-200 uy-max-w-400 uy-inline-flex uy-items-center uy-justify-center uy-text-center uy-typography-body-small",variants:{variant:{critical:"uy-bg-surface-danger uy-text-content-inverted",info:"uy-bg-surface-primary uy-text-content-inverted",neutral:"uy-bg-surface-neutral-lowest uy-text-content-neutral"},shape:{circle:"uy-rounded-circle",pill:"uy-rounded-pill uy-px-50"},isVisible:{true:"uy-visible",false:"uy-invisible"}},defaultVariants:{variant:"critical",shape:"pill",isVisible:!0}}),p=(e,i)=>{const t=10**i-1;return e>t?`${t}+`:e.toString()},r=o.forwardRef(({variant:e="critical",isVisible:i=!0,maxDigits:t=2,value:l,...n},u)=>{const a=p(Math.abs(l),t),s=d({variant:e,isVisible:i,shape:a.length===1?"circle":"pill"});return c.jsx("span",{"data-dd-privacy":"allow",...n,ref:u,role:"status",className:s,"aria-atomic":"true",children:a})});r.displayName="Pill";exports.Pill=r;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),c=require("react"),m=require("react-aria-components"),f=require("tailwind-variants"),b=f.tv({slots:{base:"uy-rounded-150 uy-bg-surface-neutral-disabled uy-h-150 uy-top-[50%] uy-transform uy-translate-y-[-50%] uy-w-full",meter:"uy-rounded-l-150 uy-absolute uy-h-full uy-top-[50%] uy-transform uy-translate-y-[-50%] uy-rounded-full uy-bg-surface-success"},variants:{isFull:{true:{meter:"uy-rounded-r-150"}}},defaultVariants:{isFull:!1}}),a=c.forwardRef(({value:e,range:t=[0,100],...u},l)=>{const[n,s]=t,o=e>=s,{base:i,meter:d}=b({isFull:o});return r.jsx(m.ProgressBar,{ref:l,value:e,minValue:n,maxValue:s,"aria-label":u["aria-label"],"data-dd-privacy":"allow",children:({percentage:y})=>r.jsx("div",{className:i(),children:r.jsx("div",{className:d(),style:{width:`${y}%`}})})})});a.displayName="ProgressBar";exports.ProgressBar=a;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { RadioGroupProps } from 'react-aria-components';
|
|
3
|
+
export interface BasedSegmentedButtonGroupProps extends Omit<RadioGroupProps, 'children' | 'style' | 'className' | 'isDisabled' | 'isInvalid' | 'isReadOnly' | 'orientation' | 'validationBehavior' | 'isRequired' | 'validate' | 'defaultValue'> {
|
|
4
|
+
/**
|
|
5
|
+
* The content of the `SegmentedButtonGroup`. Should contain `ToggleButton` components as children.
|
|
6
|
+
*/
|
|
7
|
+
children: ReactNode;
|
|
8
|
+
}
|
|
9
|
+
export interface UncontrolledSegmentedButtonGroupProps extends BasedSegmentedButtonGroupProps, Required<Pick<RadioGroupProps, 'defaultValue'>> {
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* The `SegmentedButtonGroup` component is an accessible control that allows users to select one option from a set of mutually exclusive options.
|
|
13
|
+
* It's similar to a radio group but styled as connected buttons, providing a more compact and visually distinct selection mechanism.
|
|
14
|
+
* Use this component when you need to:
|
|
15
|
+
* - Present a small set of related but mutually exclusive options
|
|
16
|
+
* - Create a toggle between different views or modes
|
|
17
|
+
* - Provide a compact alternative to radio buttons or tabs
|
|
18
|
+
* - Allow users to switch between different states of the same content*
|
|
19
|
+
* The component supports both controlled and uncontrolled usage patterns.
|
|
20
|
+
* @see {@link ToggleButton} - The child component used within SegmentedButtonGroup
|
|
21
|
+
* @see {@link https://react-spectrum.adobe.com/react-aria/useRadioGroup.html|React Aria useRadioGroup} - The underlying hook used for accessibility
|
|
22
|
+
* @see {@link https://www.payfit.design/24f360409/p/2745fe-segmented-control|Design System Documentation}
|
|
23
|
+
* @example
|
|
24
|
+
* Basic usage:
|
|
25
|
+
* ```tsx
|
|
26
|
+
* import { SegmentedButtonGroup, ToggleButton } from '@payfit/unity'
|
|
27
|
+
*
|
|
28
|
+
* function Example() {
|
|
29
|
+
* return (
|
|
30
|
+
* <SegmentedButtonGroup>
|
|
31
|
+
* <ToggleButton value="option1">Option 1</ToggleButton>
|
|
32
|
+
* <ToggleButton value="option2">Option 2</ToggleButton>
|
|
33
|
+
* <ToggleButton value="option3">Option 3</ToggleButton>
|
|
34
|
+
* </SegmentedButtonGroup>
|
|
35
|
+
* )
|
|
36
|
+
* }
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
declare const SegmentedButtonGroup: {
|
|
40
|
+
(props: UncontrolledSegmentedButtonGroupProps | BasedSegmentedButtonGroupProps): import("react/jsx-runtime").JSX.Element;
|
|
41
|
+
displayName: string;
|
|
42
|
+
};
|
|
43
|
+
export { SegmentedButtonGroup };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { PropsWithChildren } from 'react';
|
|
2
|
+
import { RadioGroupState } from 'react-stately';
|
|
3
|
+
interface SegmentedButtonGroupContextValue {
|
|
4
|
+
state: RadioGroupState;
|
|
5
|
+
}
|
|
6
|
+
export declare const SegmentedButtonGroupContext: import('react').Context<SegmentedButtonGroupContextValue>;
|
|
7
|
+
export declare function SegmentedButtonGroupProvider({ children, state, }: PropsWithChildren<SegmentedButtonGroupContextValue>): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { UnityIcon } from '@payfit/unity-icons';
|
|
2
|
+
import { AriaRadioProps } from 'react-aria';
|
|
3
|
+
import { IconName } from '../../../types/utils.js';
|
|
4
|
+
export interface ToggleButtonProps extends AriaRadioProps {
|
|
5
|
+
/**
|
|
6
|
+
* The icon to display before the button text.
|
|
7
|
+
* The icon will automatically switch between outlined and filled variants based on the selection state:
|
|
8
|
+
* - When selected: Uses the filled variant (`${prefixIcon}Filled`)
|
|
9
|
+
* - When not selected: Uses the outlined variant (`${prefixIcon}Outlined`)
|
|
10
|
+
*/
|
|
11
|
+
prefixIcon?: IconName<UnityIcon>;
|
|
12
|
+
/**
|
|
13
|
+
* Whether the button is in a loading state.
|
|
14
|
+
* When `true`, the button content is replaced with a spinner and the button becomes non-interactive.
|
|
15
|
+
* Use this prop to indicate that an action is being processed after the button is clicked.
|
|
16
|
+
* @default false
|
|
17
|
+
*/
|
|
18
|
+
isLoading?: boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* The `ToggleButton` component is a specialized button used within a `SegmentedButtonGroup`.
|
|
22
|
+
* It functions like a radio button but is styled as a button, providing a more visual selection mechanism.
|
|
23
|
+
*
|
|
24
|
+
* `ToggleButton`s can display text, icons, or both, and support various states including selected, loading, and focused.
|
|
25
|
+
* They should always be used as children of a `SegmentedButtonGroup` component, which manages their selection state.
|
|
26
|
+
* @remarks
|
|
27
|
+
* This component must be used inside a SegmentedButtonGroup component
|
|
28
|
+
* @see {@link SegmentedButtonGroup} - The parent component required for ToggleButton
|
|
29
|
+
* @see {@link https://react-spectrum.adobe.com/react-aria/useRadio.html|React Aria useRadio} - The underlying hook used for accessibility
|
|
30
|
+
* @example
|
|
31
|
+
* Basic usage within a SegmentedButtonGroup:
|
|
32
|
+
* ```tsx
|
|
33
|
+
* import { SegmentedButtonGroup, ToggleButton } from '@payfit/unity'
|
|
34
|
+
*
|
|
35
|
+
* function Example() {
|
|
36
|
+
* return (
|
|
37
|
+
* <SegmentedButtonGroup defaultValue="option1">
|
|
38
|
+
* <ToggleButton value="option1">Option 1</ToggleButton>
|
|
39
|
+
* <ToggleButton value="option2">Option 2</ToggleButton>
|
|
40
|
+
* <ToggleButton value="option3">Option 3</ToggleButton>
|
|
41
|
+
* </SegmentedButtonGroup>
|
|
42
|
+
* )
|
|
43
|
+
* }
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
declare const ToggleButton: import('react').ForwardRefExoticComponent<ToggleButtonProps & import('react').RefAttributes<HTMLLabelElement>>;
|
|
47
|
+
export { ToggleButton };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),a=require("react"),t=require("react-aria-components"),v=require("tailwind-variants"),q=require("./parts/SearchInput.js"),w=require("./parts/SelectButton.js"),N=v.tv({slots:{base:"uy-flex uy-flex-col uy-gap-100 uy-w-full",popover:"uy-rounded-75 uy-border uy-border-border-neutral uy-w-[var(--trigger-width)] uy-bg-surface-neutral",listbox:"uy-overflow-y-auto uy-max-h-[296px] uy-pt-100 uy-pb-100 uy-pl-100 uy-pr-100"}}),B=({children:
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),a=require("react"),t=require("react-aria-components"),v=require("tailwind-variants"),q=require("./parts/SearchInput.js"),w=require("./parts/SelectButton.js"),N=v.tv({slots:{base:"uy-flex uy-flex-col uy-gap-100 uy-w-full",popover:"uy-rounded-75 uy-border uy-border-solid uy-border-border-neutral uy-w-[var(--trigger-width)] uy-bg-surface-neutral",listbox:"uy-overflow-y-auto uy-max-h-[296px] uy-pt-100 uy-pb-100 uy-pl-100 uy-pr-100"}}),B=({children:r,items:o,placeholder:s,name:p,isDisabled:n,isInvalid:c,isReadOnly:u,value:y,onChange:d,isSearchable:x=!1,...f},S)=>{const[b,m]=a.useState(!1),{contains:g}=t.useFilter({sensitivity:"base"}),{base:h,popover:j,listbox:l}=N();return e.jsxs(t.Select,{onOpenChange:m,...f,ref:S,className:h(),placeholder:n?void 0:s,name:p,isDisabled:n||u,isInvalid:c,selectedKey:y,onSelectionChange:d,children:[e.jsx(w.SelectButton,{isDisabled:n,isInvalid:c,isReadOnly:u,isOpen:b}),e.jsx(t.Popover,{offset:1,containerPadding:8,className:j(),children:x?e.jsxs(t.Autocomplete,{filter:g,children:[e.jsx(q.SearchInput,{}),e.jsx(t.ListBox,{items:o,className:l(),children:r})]}):e.jsx(t.ListBox,{items:o,className:l(),children:r})})]})},i=a.forwardRef(function(o,s){return B(o,s)});i.displayName="Select";exports.Select=i;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),c=require("react"),t=require("react-aria-components"),l=require("react-intl"),y=require("tailwind-variants"),d=require("../../icon-button/CircularIconButton.js"),p=require("../../icon/Icon.js"),m=y.tv({slots:{base:"uy-flex uy-gap-100 uy-border uy-border-solid uy-pt-100 uy-pb-100 uy-pl-150 uy-pr-150 uy-rounded-75 uy-border-border-form-active uy-text-content-form-active uy-mt-100 uy-mb-100 uy-ml-100 uy-mr-100 uy-typography-body",input:"uy-flex-grow uy-outline-none [&::-webkit-search-cancel-button]:uy-hidden",button:"uy-text-content-neutral-enabled",separator:"uy-h-[1px] uy-bg-surface-neutral-lowest uy-w-full uy-mt-100"}}),r=c.forwardRef((b,n)=>{const u=l.useIntl(),{base:a,input:s,button:o,separator:i}=m();return e.jsxs(e.Fragment,{children:[e.jsxs(t.SearchField,{className:a(),ref:n,"data-dd-privacy":"mask",children:[e.jsx(p.Icon,{src:"MagnifyingGlassOutlined","aria-hidden":"true"}),e.jsx(t.Input,{className:s()}),e.jsx(d.CircularIconButton,{title:u.formatMessage({id:"unity:component:form-field:form-input:clear:title",defaultMessage:"Clear"}),className:o(),icon:"CloseOutlined"})]}),e.jsx("div",{"aria-hidden":"true",className:i()})]})});r.displayName="SearchInput";exports.SearchInput=r;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),b=require("react"),o=require("react-aria-components"),m=require("react-intl"),p=require("tailwind-variants"),a=require("../../icon/Icon.js"),v=p.tv({slots:{base:"uy-flex uy-flex-row uy-gap-100 uy-pt-100 uy-pb-100 uy-pl-150 uy-pr-150 uy-rounded-100 focus-visible:uy-ring-2 focus-visible:uy-ring-utility-focus-ring focus-visible:uy-ring-offset-2 uy-outline-none uy-border",selectValue:"uy-whitespace-nowrap uy-text-ellipsis uy-typography-body uy-flex-grow uy-text-left data-[placeholder]:uy-text-content-neutral-lowest",iconWrapper:"uy-flex uy-gap-50",icon:""},variants:{isDisabled:{true:{base:"uy-border-border-form-disabled uy-bg-surface-form-disabled",selectValue:"uy-text-content-form-disabled"}},isInvalid:{true:{base:"uy-border-border-form-error uy-bg-surface-form-error"}},isReadOnly:{true:{base:"uy-border-border-form-disabled",selectValue:"uy-text-content-form-readonly",icon:"uy-text-content-primary-disabled"}}},compoundVariants:[{isDisabled:!1,isInvalid:!1,isReadOnly:!1,className:{base:"uy-border-border-form-enabled hover:uy-border-border-form-hover uy-bg-surface-form-enabled hover:uy-bg-surface-form-hover active:uy-border-border-form-active",selectValue:"uy-text-content-neutral-enabled hover:uy-text-content-neutral-hover",icon:"uy-text-content-form-enabled hover:uy-text-content-form-hover"}}],defaultVariants:{isDisabled:!1,isInvalid:!1,isReadOnly:!1}}),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),b=require("react"),o=require("react-aria-components"),m=require("react-intl"),p=require("tailwind-variants"),a=require("../../icon/Icon.js"),v=p.tv({slots:{base:"uy-flex uy-flex-row uy-gap-100 uy-pt-100 uy-pb-100 uy-pl-150 uy-pr-150 uy-rounded-100 uy-border-solid focus-visible:uy-ring-2 focus-visible:uy-ring-utility-focus-ring focus-visible:uy-ring-offset-2 uy-outline-none uy-border",selectValue:"uy-whitespace-nowrap uy-text-ellipsis uy-typography-body uy-flex-grow uy-text-left data-[placeholder]:uy-text-content-neutral-lowest",iconWrapper:"uy-flex uy-gap-50",icon:""},variants:{isDisabled:{true:{base:"uy-border-border-form-disabled uy-bg-surface-form-disabled",selectValue:"uy-text-content-form-disabled"}},isInvalid:{true:{base:"uy-border-border-form-error uy-bg-surface-form-error"}},isReadOnly:{true:{base:"uy-border-border-form-disabled",selectValue:"uy-text-content-form-readonly",icon:"uy-text-content-primary-disabled"}}},compoundVariants:[{isDisabled:!1,isInvalid:!1,isReadOnly:!1,className:{base:"uy-border-border-form-enabled hover:uy-border-border-form-hover uy-bg-surface-form-enabled hover:uy-bg-surface-form-hover active:uy-border-border-form-active",selectValue:"uy-text-content-neutral-enabled hover:uy-text-content-neutral-hover",icon:"uy-text-content-form-enabled hover:uy-text-content-form-hover"}}],defaultVariants:{isDisabled:!1,isInvalid:!1,isReadOnly:!1}}),s=b.forwardRef(({isDisabled:r,isInvalid:t,isReadOnly:n,isOpen:u},l)=>{const i=m.useIntl(),{base:c,selectValue:d,iconWrapper:y,icon:f}=v({isDisabled:r,isInvalid:t,isReadOnly:n});return e.jsxs(o.Button,{"data-dd-privacy":"mask",className:c(),ref:l,isDisabled:r,children:[e.jsx(o.SelectValue,{className:d()}),e.jsxs("div",{className:y(),children:[t&&e.jsx(a.Icon,{src:"WarningCircleOutlined",color:"content.form.invalid",alt:i.formatMessage({id:"unity:component:form-field:form-input:error:alt",defaultMessage:"Error"})}),e.jsx(a.Icon,{className:f(),"aria-hidden":"true",src:u?"CaretUpOutlined":"CaretDownOutlined"})]})]})});s.displayName="SelectButton";exports.SelectButton=s;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),i=require("react"),f=require("react-aria-components"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),i=require("react"),f=require("react-aria-components"),p=require("tailwind-variants"),x=require("../../icon/Icon.js"),b=require("./SelectOption.context.js"),m=t=>t&&typeof t=="object"&&"default"in t?t:{default:t},r=m(i),v=p.tv({base:"uy-flex uy-flex-col uy-typography-body uy-rounded-50 uy-pt-100 uy-pb-100 uy-pl-150 uy-pr-150 uy-outline-none",variants:{isFocusVisible:{true:"uy-outline-offset-2 uy-outline-2 uy-outline-utility-focus-ring"},isHovered:{true:"uy-bg-surface-neutral-hover uy-text-content-neutral"},isPressed:{true:"uy-bg-surface-neutral-pressed uy-text-content-neutral-pressed"},isSelected:{true:"uy-bg-surface-neutral-active uy-text-content-neutral-active"},isDisabled:{true:"uy-text-content-neutral-disabled"}},compoundVariants:[{isFocusVisible:!1,isHovered:!1,isPressed:!1,isSelected:!1,isDisabled:!1,class:"uy-bg-surface-neutral-enabled uy-text-content-neutral-enabled"}]}),a=i.forwardRef((t,l)=>{const{children:s,isDisabled:u}=t,o=typeof r.default.Children.toArray(s)[0]=="string"?r.default.Children.toArray(s)[0]:void 0;return e.jsx(f.ListBoxItem,{ref:l,"data-dd-privacy":"mask",...t,textValue:o,className:({isHovered:n,isPressed:c,isFocusVisible:d,isSelected:y})=>v({isHovered:n,isPressed:c,isFocusVisible:d,isSelected:y,isDisabled:u}),children:({isSelected:n})=>e.jsx(b.SelectOptionProvider,{isDisabled:u,children:n?e.jsxs("div",{className:"uy-flex uy-justify-between",children:[e.jsx("div",{className:"uy-flex uy-flex-col",children:e.jsx(e.Fragment,{children:s})}),e.jsx(x.Icon,{src:"CheckOutlined"})]}):e.jsx(e.Fragment,{children:s})})})});a.displayName="SelectOption";exports.SelectOption=a;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),o=require("react"),i=require("tailwind-variants"),l=require("./SelectOption.context.js"),c=i.tv({base:"uy-typography-body",variants:{isDisabled:{true:"uy-text-content-neutral-disabled",false:"uy-text-content-neutral-low"}}}),e=o.forwardRef(({children:t},n)=>{const{isDisabled:s}=l.useSelectOptionContext(),r=c({isDisabled:s});return a.jsx("span",{className:r,ref:n,"data-dd-privacy":"mask",children:t})});e.displayName="SelectOptionHelper";exports.SelectOptionHelper=e;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react"),e=t.createContext(null);exports.SelectableButtonGroupContext=e;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { AriaToggleButtonGroupProps } from 'react-aria';
|
|
2
|
+
import { Key } from 'react-stately';
|
|
3
|
+
import { VariantProps } from 'tailwind-variants';
|
|
4
|
+
export declare const selectableButtonGroup: import('tailwind-variants').TVReturnType<{} | {} | {}, undefined, "uy-flex uy-gap-100", import('tailwind-variants/dist/config').TVConfig<unknown, {} | {}>, {} | {}, undefined, import('tailwind-variants').TVReturnType<unknown, undefined, "uy-flex uy-gap-100", import('tailwind-variants/dist/config').TVConfig<unknown, {} | {}>, unknown, unknown, undefined>>;
|
|
5
|
+
export interface SelectableButtonGroupProps extends VariantProps<typeof selectableButtonGroup>, Omit<AriaToggleButtonGroupProps, 'selectedKeys' | 'defaultSelectedKeys' | 'onSelectionChange' | 'className' | 'style'> {
|
|
6
|
+
/**
|
|
7
|
+
* The SelectableButton components to render within the group.
|
|
8
|
+
* Each child must be a SelectableButton component with a unique value prop.
|
|
9
|
+
*/
|
|
10
|
+
children: React.ReactNode;
|
|
11
|
+
/**
|
|
12
|
+
* The currently selected values in controlled mode.
|
|
13
|
+
* Use this prop along with onChange to control the selection state externally.
|
|
14
|
+
* The values should match the value props of the SelectableButton children.
|
|
15
|
+
*/
|
|
16
|
+
value?: AriaToggleButtonGroupProps['selectedKeys'];
|
|
17
|
+
/**
|
|
18
|
+
* The initially selected values in uncontrolled mode.
|
|
19
|
+
* Use this prop to set default selections without controlling the state.
|
|
20
|
+
* The values should match the value props of the SelectableButton children.
|
|
21
|
+
*/
|
|
22
|
+
defaultValue?: AriaToggleButtonGroupProps['defaultSelectedKeys'];
|
|
23
|
+
/**
|
|
24
|
+
* Callback fired when the selection changes.
|
|
25
|
+
* Receives an array of the currently selected values.
|
|
26
|
+
* Required when using the component in controlled mode.
|
|
27
|
+
*/
|
|
28
|
+
onChange?: (keys: Key[]) => void;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* A group component that manages the selection state of multiple SelectableButton components.
|
|
32
|
+
* Supports both single and multiple selection modes with controlled and uncontrolled usage patterns.
|
|
33
|
+
* @component
|
|
34
|
+
* @param {SelectableButtonGroupProps} props - Props for configuring the group's behavior and selection mode
|
|
35
|
+
* @see {@link SelectableButtonGroupProps} for all available props
|
|
36
|
+
* @example
|
|
37
|
+
* ```tsx
|
|
38
|
+
* import { SelectableButtonGroup, SelectableButton } from '@payfit/unity-components'
|
|
39
|
+
*
|
|
40
|
+
* function Example() {
|
|
41
|
+
* const [selected, setSelected] = useState(['option1'])
|
|
42
|
+
*
|
|
43
|
+
* return (
|
|
44
|
+
* <SelectableButtonGroup
|
|
45
|
+
* selectionMode="multiple"
|
|
46
|
+
* value={selected}
|
|
47
|
+
* onChange={keys => setSelected(keys)}
|
|
48
|
+
* >
|
|
49
|
+
* <SelectableButton value="option1">First Option</SelectableButton>
|
|
50
|
+
* <SelectableButton value="option2">Second Option</SelectableButton>
|
|
51
|
+
* </SelectableButtonGroup>
|
|
52
|
+
* )
|
|
53
|
+
* }
|
|
54
|
+
* ```
|
|
55
|
+
* @remarks
|
|
56
|
+
* [API](https://master--66fe6715241b661107117e47.chromatic.com/?path=/docs/inputs-selectablebuttongroup--docs) • [Design docs](https://www.payfit.design/24f360409/p/944b5d-selectable-button)
|
|
57
|
+
*/
|
|
58
|
+
declare const SelectableButtonGroup: import('react').ForwardRefExoticComponent<SelectableButtonGroupProps & import('react').RefAttributes<HTMLDivElement>>;
|
|
59
|
+
export { SelectableButtonGroup };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("react/jsx-runtime"),l=require("react"),o=require("react-aria"),S=require("react-stately"),b=require("tailwind-variants"),y=require("./SelectableButtonGroup.context.js"),a=b.tv({base:"uy-flex uy-gap-100"}),c=l.forwardRef((e,s)=>{const t=l.useRef(null),r=S.useToggleGroupState({...e,selectedKeys:e.value,defaultSelectedKeys:e.defaultValue,onSelectionChange:g=>{var n;(n=e.onChange)==null||n.call(e,Array.from(g))}}),{groupProps:i}=o.useToggleButtonGroup(e,r,t),d=a(),{ref:f}=o.mergeProps({ref:t},{ref:s});return u.jsx("div",{...i,className:d,ref:f,"data-dd-privacy":"allow",children:u.jsx(y.SelectableButtonGroupContext.Provider,{value:r,children:e.children})})});c.displayName="SelectableButtonGroup";exports.SelectableButtonGroup=c;exports.selectableButtonGroup=a;
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { AriaToggleButtonProps } from 'react-aria';
|
|
2
|
+
import { UnityIcon } from '@payfit/unity-icons/dist/cjs/generated';
|
|
3
|
+
import { ToggleButtonProps } from 'react-aria-components';
|
|
4
|
+
export declare const selectableButton: import('tailwind-variants').TVReturnType<{
|
|
5
|
+
hasIcon: {
|
|
6
|
+
true: {
|
|
7
|
+
base: string;
|
|
8
|
+
};
|
|
9
|
+
false: {
|
|
10
|
+
base: string;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
}, {
|
|
14
|
+
base: string[];
|
|
15
|
+
icon: string[];
|
|
16
|
+
label: string[];
|
|
17
|
+
}, undefined, import('tailwind-variants/dist/config').TVConfig<{
|
|
18
|
+
hasIcon: {
|
|
19
|
+
true: {
|
|
20
|
+
base: string;
|
|
21
|
+
};
|
|
22
|
+
false: {
|
|
23
|
+
base: string;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
}, {
|
|
27
|
+
hasIcon: {
|
|
28
|
+
true: {
|
|
29
|
+
base: string;
|
|
30
|
+
};
|
|
31
|
+
false: {
|
|
32
|
+
base: string;
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
}>, {
|
|
36
|
+
hasIcon: {
|
|
37
|
+
true: {
|
|
38
|
+
base: string;
|
|
39
|
+
};
|
|
40
|
+
false: {
|
|
41
|
+
base: string;
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
}, {
|
|
45
|
+
base: string[];
|
|
46
|
+
icon: string[];
|
|
47
|
+
label: string[];
|
|
48
|
+
}, import('tailwind-variants').TVReturnType<{
|
|
49
|
+
hasIcon: {
|
|
50
|
+
true: {
|
|
51
|
+
base: string;
|
|
52
|
+
};
|
|
53
|
+
false: {
|
|
54
|
+
base: string;
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
}, {
|
|
58
|
+
base: string[];
|
|
59
|
+
icon: string[];
|
|
60
|
+
label: string[];
|
|
61
|
+
}, undefined, import('tailwind-variants/dist/config').TVConfig<{
|
|
62
|
+
hasIcon: {
|
|
63
|
+
true: {
|
|
64
|
+
base: string;
|
|
65
|
+
};
|
|
66
|
+
false: {
|
|
67
|
+
base: string;
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
}, {
|
|
71
|
+
hasIcon: {
|
|
72
|
+
true: {
|
|
73
|
+
base: string;
|
|
74
|
+
};
|
|
75
|
+
false: {
|
|
76
|
+
base: string;
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
}>, unknown, unknown, undefined>>;
|
|
80
|
+
type IconName<T extends string> = T extends `${infer Base}${'Filled' | 'Outlined'}` ? Base : T;
|
|
81
|
+
export interface SelectableButtonProps extends Omit<AriaToggleButtonProps, 'id' | 'className' | 'style'> {
|
|
82
|
+
/**
|
|
83
|
+
* A unique identifier for the button that will be used as its selection value.
|
|
84
|
+
* This value must be unique within the SelectableButtonGroup.
|
|
85
|
+
*/
|
|
86
|
+
value: NonNullable<ToggleButtonProps['id']>;
|
|
87
|
+
/**
|
|
88
|
+
* Optional icon to display before the button's text content.
|
|
89
|
+
* The icon will automatically switch between outlined and filled variants based on selection state.
|
|
90
|
+
* Specify the base name of the icon without the 'Filled' or 'Outlined' suffix.
|
|
91
|
+
*/
|
|
92
|
+
prefixIcon?: IconName<UnityIcon>;
|
|
93
|
+
/**
|
|
94
|
+
* Set to true to show a loading spinner and disable interaction.
|
|
95
|
+
* Use this when the button's action requires asynchronous processing.
|
|
96
|
+
* @default false
|
|
97
|
+
*/
|
|
98
|
+
isLoading?: boolean;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* A toggleable button that works as part of a SelectableButtonGroup to create single or multiple choice selections.
|
|
102
|
+
* Provides visual feedback for selection state and supports icons for enhanced visual hierarchy.
|
|
103
|
+
* @component
|
|
104
|
+
* @param {SelectableButtonProps} props - Props for configuring the button's behavior and appearance
|
|
105
|
+
* @see {@link SelectableButtonProps} for all available props
|
|
106
|
+
* @example
|
|
107
|
+
* ```tsx
|
|
108
|
+
* import { SelectableButtonGroup, SelectableButton } from '@payfit/unity-components'
|
|
109
|
+
*
|
|
110
|
+
* function Example() {
|
|
111
|
+
* return (
|
|
112
|
+
* <SelectableButtonGroup selectionMode="single" defaultValue={['morning']}>
|
|
113
|
+
* <SelectableButton value="morning">
|
|
114
|
+
* Morning
|
|
115
|
+
* </SelectableButton>
|
|
116
|
+
* <SelectableButton value="afternoon" prefixIcon="Sun">
|
|
117
|
+
* Afternoon
|
|
118
|
+
* </SelectableButton>
|
|
119
|
+
* </SelectableButtonGroup>
|
|
120
|
+
* )
|
|
121
|
+
* }
|
|
122
|
+
* ```
|
|
123
|
+
* @remarks
|
|
124
|
+
* [API](mdc:components/selectable-button-group/parts/SelectableButton) • [Design docs](mdc:design/components/selectable-button-group)
|
|
125
|
+
*/
|
|
126
|
+
declare const SelectableButton: import('react').ForwardRefExoticComponent<SelectableButtonProps & import('react').RefAttributes<HTMLButtonElement>>;
|
|
127
|
+
export { SelectableButton };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),o=require("react"),i=require("react-aria"),h=require("tailwind-variants"),S=require("../../icon/Icon.js"),B=require("../../spinner/Spinner.js"),j=require("../SelectableButtonGroup.context.js"),c=h.tv({slots:{base:["uy-group uy-border uy-border-solid uy-rounded-75 uy-py-100 uy-flex uy-gap-50 uy-items-center","uy-border-border-form-enabled uy-bg-surface-form-enabled","hover:uy-bg-surface-form-hover hover:uy-border-border-form-hover","active:uy-bg-surface-form-pressed active:uy-border-border-form-pressed","focus-visible:uy-bg-surface-form-focus focus-visible:uy-border-border-form-focus","focus-visible:uy-outline-2 focus-visible:uy-outline focus-visible:uy-outline-offset-2 focus-visible:uy-outline-utility-focus-ring","data-[pressed=true]:uy-bg-surface-form-pressed data-[pressed=true]:uy-border-border-form-pressed data-[pressed=true]:uy-text-content-form-pressed","data-[selected=true]:uy-bg-surface-form-selected data-[selected=true]:uy-border-border-form-selected data-[selected=true]:uy-text-content-form-selected","disabled:uy-bg-surface-form-disabled disabled:uy-border-border-form-disabled disabled:uy-text-content-form-disabled disabled:uy-cursor-not-allowed","data-[loading=true]:uy-bg-surface-form-disabled data-[loading=true]:uy-border-border-form-disabled data-[loading=true]:uy-text-content-form-disabled data-[loading=true]:uy-cursor-wait"],icon:["uy-p-25","data-[loading=true]:uy-hidden"],label:["uy-typography-action"]},variants:{hasIcon:{true:{base:"uy-pl-100 uy-pr-200"},false:{base:"uy-px-200"}}},defaultVariants:{hasIcon:!1}}),b=o.forwardRef((s,f)=>{const a=o.useRef(null),u=o.useContext(j.SelectableButtonGroupContext);if(!u)throw new Error("SelectableButton must be used within a ToggleButtonGroup component");const{buttonProps:d,isPressed:y,isSelected:l}=i.useToggleButtonGroupItem({id:s.value,...s},u,a),{ref:m}=i.mergeProps({ref:a},{ref:f}),{isDisabled:p=!1,isLoading:r=!1,prefixIcon:t,children:n}=s,{base:g,icon:v,label:x}=c({hasIcon:!!t&&!r});return e.jsxs("button",{"data-dd-privacy":"allow",...d,ref:m,className:g(),disabled:d.disabled||p||r,"data-loading":r?!0:void 0,"data-pressed":y,"data-selected":l,"aria-busy":r,children:[t&&!r&&e.jsx(S.Icon,{src:l?`${t}Filled`:`${t}Outlined`,role:"presentation",className:v(),size:20}),r?e.jsxs(e.Fragment,{children:[e.jsx(B.Spinner,{label:"Loading",size:"small",color:"inherit"}),e.jsx("span",{className:"uy-sr-only",children:n})]}):e.jsx("span",{className:x(),children:n})]})});b.displayName="SelectableButton";exports.SelectableButton=b;exports.selectableButton=c;
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { PropsWithChildren } from 'react';
|
|
2
|
+
import { VariantProps } from 'tailwind-variants';
|
|
3
|
+
export declare const sidePanel: import('tailwind-variants').TVReturnType<{
|
|
4
|
+
[key: string]: {
|
|
5
|
+
[key: string]: import('tailwind-merge').ClassNameValue | {
|
|
6
|
+
content?: import('tailwind-merge').ClassNameValue;
|
|
7
|
+
overlay?: import('tailwind-merge').ClassNameValue;
|
|
8
|
+
wrapper?: import('tailwind-merge').ClassNameValue;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
} | {
|
|
12
|
+
[x: string]: {
|
|
13
|
+
[x: string]: import('tailwind-merge').ClassNameValue | {
|
|
14
|
+
content?: import('tailwind-merge').ClassNameValue;
|
|
15
|
+
overlay?: import('tailwind-merge').ClassNameValue;
|
|
16
|
+
wrapper?: import('tailwind-merge').ClassNameValue;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
} | {}, {
|
|
20
|
+
overlay: string[];
|
|
21
|
+
wrapper: string[];
|
|
22
|
+
content: string[];
|
|
23
|
+
}, undefined, import('tailwind-variants/dist/config').TVConfig<unknown, {
|
|
24
|
+
[key: string]: {
|
|
25
|
+
[key: string]: import('tailwind-merge').ClassNameValue | {
|
|
26
|
+
content?: import('tailwind-merge').ClassNameValue;
|
|
27
|
+
overlay?: import('tailwind-merge').ClassNameValue;
|
|
28
|
+
wrapper?: import('tailwind-merge').ClassNameValue;
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
} | {}>, {
|
|
32
|
+
[key: string]: {
|
|
33
|
+
[key: string]: import('tailwind-merge').ClassNameValue | {
|
|
34
|
+
content?: import('tailwind-merge').ClassNameValue;
|
|
35
|
+
overlay?: import('tailwind-merge').ClassNameValue;
|
|
36
|
+
wrapper?: import('tailwind-merge').ClassNameValue;
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
} | {}, {
|
|
40
|
+
overlay: string[];
|
|
41
|
+
wrapper: string[];
|
|
42
|
+
content: string[];
|
|
43
|
+
}, import('tailwind-variants').TVReturnType<unknown, {
|
|
44
|
+
overlay: string[];
|
|
45
|
+
wrapper: string[];
|
|
46
|
+
content: string[];
|
|
47
|
+
}, undefined, import('tailwind-variants/dist/config').TVConfig<unknown, {
|
|
48
|
+
[key: string]: {
|
|
49
|
+
[key: string]: import('tailwind-merge').ClassNameValue | {
|
|
50
|
+
content?: import('tailwind-merge').ClassNameValue;
|
|
51
|
+
overlay?: import('tailwind-merge').ClassNameValue;
|
|
52
|
+
wrapper?: import('tailwind-merge').ClassNameValue;
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
} | {}>, unknown, unknown, undefined>>;
|
|
56
|
+
export interface SidePanelProps extends PropsWithChildren<VariantProps<typeof sidePanel>> {
|
|
57
|
+
/**
|
|
58
|
+
* Controls whether the panel can be dismissed by clicking outside or using escape key.
|
|
59
|
+
* @default true
|
|
60
|
+
*/
|
|
61
|
+
isDismissable?: boolean;
|
|
62
|
+
/**
|
|
63
|
+
* When true, pressing the Escape key will not close the panel.
|
|
64
|
+
* This is useful when you need to prevent accidental dismissal.
|
|
65
|
+
* @default false
|
|
66
|
+
*/
|
|
67
|
+
isKeyboardDismissDisabled?: boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Controls the open state of the panel in controlled mode.
|
|
70
|
+
* Must be used together with `onOpenChange`.
|
|
71
|
+
*/
|
|
72
|
+
isOpen?: boolean;
|
|
73
|
+
/**
|
|
74
|
+
* Sets the initial open state in uncontrolled mode.
|
|
75
|
+
* @default false
|
|
76
|
+
*/
|
|
77
|
+
defaultOpen?: boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Callback fired when the open state changes.
|
|
80
|
+
* Required when using controlled mode with `isOpen`.
|
|
81
|
+
*/
|
|
82
|
+
onOpenChange?: (isOpen: boolean) => void;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* The SidePanel component provides contextual space for supplementary content without fully
|
|
86
|
+
* interrupting the user's workflow. It slides in from the right on desktop and from the bottom on mobile.
|
|
87
|
+
*
|
|
88
|
+
* You can use SidePanel to display detailed information, forms, or secondary actions while keeping
|
|
89
|
+
* the main interface visible and accessible. It's ideal for multi-step processes, editing items in a list,
|
|
90
|
+
* or displaying contextual details.
|
|
91
|
+
*
|
|
92
|
+
* Control the panel using either uncontrolled mode with `defaultOpen` or controlled mode with
|
|
93
|
+
* `isOpen`/`onOpenChange` props. Customize dismissal behavior with `isDismissable` and
|
|
94
|
+
* `isKeyboardDismissDisabled` props.
|
|
95
|
+
* @param {SidePanelProps} props - The props for the SidePanel component
|
|
96
|
+
* @see {@link SidePanelProps} for all available props
|
|
97
|
+
* @example
|
|
98
|
+
* ```tsx
|
|
99
|
+
* import {
|
|
100
|
+
* SidePanel,
|
|
101
|
+
* SidePanelHeader,
|
|
102
|
+
* SidePanelContent,
|
|
103
|
+
* SidePanelFooter,
|
|
104
|
+
* Button
|
|
105
|
+
* } from '@payfit/unity-components'
|
|
106
|
+
*
|
|
107
|
+
* // Uncontrolled example
|
|
108
|
+
* function BasicExample() {
|
|
109
|
+
* return (
|
|
110
|
+
* <DialogTrigger>
|
|
111
|
+
* <Button>Open panel</Button>
|
|
112
|
+
* <SidePanel>
|
|
113
|
+
* <SidePanelHeader>Panel title</SidePanelHeader>
|
|
114
|
+
* <SidePanelContent>Your content here</SidePanelContent>
|
|
115
|
+
* <SidePanelFooter>
|
|
116
|
+
* <Button variant="secondary">Cancel</Button>
|
|
117
|
+
* <Button variant="primary">Save</Button>
|
|
118
|
+
* </SidePanelFooter>
|
|
119
|
+
* </SidePanel>
|
|
120
|
+
* </DialogTrigger>
|
|
121
|
+
* )
|
|
122
|
+
* }
|
|
123
|
+
*
|
|
124
|
+
* // Controlled example
|
|
125
|
+
* function ControlledExample() {
|
|
126
|
+
* const [isOpen, setIsOpen] = useState(false)
|
|
127
|
+
*
|
|
128
|
+
* return (
|
|
129
|
+
* <>
|
|
130
|
+
* <Button onPress={() => setIsOpen(true)}>Open panel</Button>
|
|
131
|
+
*
|
|
132
|
+
* <SidePanel isOpen={isOpen} onOpenChange={setIsOpen}>
|
|
133
|
+
* <SidePanelHeader>Panel title</SidePanelHeader>
|
|
134
|
+
* <SidePanelContent>Your content here</SidePanelContent>
|
|
135
|
+
* <SidePanelFooter>
|
|
136
|
+
* <Button
|
|
137
|
+
* variant="primary"
|
|
138
|
+
* onPress={() => setIsOpen(false)}
|
|
139
|
+
* >
|
|
140
|
+
* Close
|
|
141
|
+
* </Button>
|
|
142
|
+
* </SidePanelFooter>
|
|
143
|
+
* </SidePanel>
|
|
144
|
+
* </>
|
|
145
|
+
* )
|
|
146
|
+
* }
|
|
147
|
+
* ```
|
|
148
|
+
* @remarks
|
|
149
|
+
* [API Docs](https://unity-components.payfit.io/?path=/docs/feedback-sidepanel--docs) • [Design Docs](https://www.payfit.design/24f360409/p/21bfe4-side-panel)
|
|
150
|
+
*/
|
|
151
|
+
declare const SidePanel: import('react').ForwardRefExoticComponent<SidePanelProps & import('react').RefAttributes<HTMLDivElement>>;
|
|
152
|
+
export { SidePanel };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),g=require("react"),a=require("react-aria-components"),x=require("tailwind-variants"),h=require("./parts/SidePanelDragIndicator.js"),t=x.tv({slots:{overlay:["md:uy-bg-gradient-to-r md:uy-from-grayscale-L12/0 md:uy-to-grayscale-L12/10 md:uy-from-70% md:uy-via-100%","uy-fixed uy-inset-0 uy-isolate","data-[entering]:uy-animate-fade-in data-[exiting]:uy-animate-fade-out"],wrapper:["uy-w-full md:uy-w-[400px]","uy-fixed uy-bottom-0 md:uy-inset-y-200 md:uy-right-200 uy-z-[100]","uy-bg-surface-neutral uy-rounded-t-200 md:uy-rounded-200 uy-shadow-flying","uy-flex uy-flex-col uy-h-[95svh] md:uy-max-h-[calc(100vh-2rem)]","uy-overflow-hidden","data-[entering]:uy-animate-slide-up-fade-in data-[exiting]:uy-animate-slide-down-fade-out md:data-[entering]:uy-animate-slide-right-fade-in md:data-[exiting]:uy-animate-slide-right-fade-out"],content:["uy-flex uy-flex-col uy-h-full uy-overflow-hidden uy-outline-none"]}}),i=g.forwardRef(({children:d,isOpen:n,onOpenChange:u,defaultOpen:r,isDismissable:l=!0,isKeyboardDismissDisabled:o=!1,...y},s)=>{const{overlay:m,wrapper:c,content:f}=t();return e.jsx(a.ModalOverlay,{className:m(),isOpen:n,onOpenChange:u,defaultOpen:r,isDismissable:l,isKeyboardDismissDisabled:o,children:e.jsxs(a.Modal,{"data-dd-privacy":"allow",...y,ref:s,className:c(),"data-unity-side-panel":!0,children:[e.jsx(h.SidePanelDragIndicator,{}),e.jsx(a.Dialog,{className:f(),children:d})]})})});i.displayName="SidePanel";exports.SidePanel=i;exports.sidePanel=t;
|