@webiny/admin-ui 6.2.0 → 6.3.0-beta.0
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/Accordion/Accordion.d.ts +1 -1
- package/Accordion/Accordion.mdx +437 -463
- package/Accordion/components/AccordionContent.js.map +1 -1
- package/Alert/Alert.d.ts +1 -1
- package/Alert/Alert.js.map +1 -1
- package/Alert/Alert.mdx +80 -83
- package/AutoComplete/AutoComplete.mdx +63 -55
- package/Avatar/Avatar.d.ts +1 -1
- package/Avatar/Avatar.js.map +1 -1
- package/Avatar/Avatar.mdx +52 -43
- package/Button/Button.d.ts +1 -1
- package/Button/Button.js.map +1 -1
- package/Button/Button.mdx +50 -42
- package/Button/IconButton.d.ts +1 -1
- package/Button/IconButton.js.map +1 -1
- package/Card/components/CardContent.d.ts +1 -1
- package/Card/components/CardTitle.d.ts +1 -1
- package/Checkbox/Checkbox.mdx +51 -49
- package/Checkbox/primitives/CheckboxPrimitive.d.ts +1 -1
- package/CheckboxGroup/CheckboxGroup.mdx +51 -53
- package/CodeEditor/CodeEditor.mdx +44 -43
- package/ColorPicker/ColorPicker.mdx +41 -40
- package/Command/components/Item.d.ts +1 -1
- package/Command/components/Item.js.map +1 -1
- package/DataTable/DataTable.mdx +537 -542
- package/DataTable/components/ColumnSorter.d.ts +1 -1
- package/DataTable/components/ColumnSorter.js.map +1 -1
- package/Dialog/Dialog.js.map +1 -1
- package/Dialog/components/DialogContent.d.ts +1 -1
- package/Dialog/components/DialogContent.js +1 -1
- package/Dialog/components/DialogContent.js.map +1 -1
- package/Dialog/components/DialogFooter.d.ts +1 -1
- package/Dialog/components/DialogFooter.js.map +1 -1
- package/Dialog/components/DialogTitle.d.ts +1 -1
- package/Drawer/Drawer.js.map +1 -1
- package/Drawer/Drawer.mdx +73 -64
- package/Drawer/components/DrawerContent.d.ts +1 -1
- package/Drawer/components/DrawerContent.js.map +1 -1
- package/DropdownMenu/DropdownMenu.js.map +1 -1
- package/DropdownMenu/DropdownMenu.mdx +155 -256
- package/DropdownMenu/components/DropdownMenuCheckboxItem.js.map +1 -1
- package/DropdownMenu/components/DropdownMenuLabel.js.map +1 -1
- package/FilePicker/FilePicker.mdx +69 -69
- package/FilePicker/primitives/FilePickerPrimitive.d.ts +19 -19
- package/FilePicker/primitives/FilePickerPrimitive.js.map +1 -1
- package/FilePicker/primitives/components/Trigger.d.ts +1 -1
- package/FilePicker/primitives/components/previews/TextOnlyPreview/TextOnlyPreview.d.ts +1 -1
- package/FilePicker/primitives/components/previews/variants.d.ts +1 -1
- package/FilePicker/primitives/components/types.js.map +1 -1
- package/FormComponent/Description.d.ts +1 -1
- package/FormComponent/ErrorMessage.d.ts +1 -1
- package/FormComponent/Note.d.ts +1 -1
- package/Grid/Grid.d.ts +2 -2
- package/Grid/Grid.js.map +1 -1
- package/Grid/Grid.mdx +111 -121
- package/HeaderBar/HeaderBar.mdx +98 -99
- package/Heading/Heading.d.ts +1 -1
- package/Heading/Heading.js.map +1 -1
- package/Heading/Heading.mdx +63 -58
- package/Icon/Icon.d.ts +1 -1
- package/Icon/Icon.js.map +1 -1
- package/Icon/Icon.mdx +79 -147
- package/IconPicker/IconPicker.mdx +66 -64
- package/IconPicker/primitives/IconPickerPrimitive.d.ts +1 -1
- package/IconPicker/primitives/components/IconPickerTrigger.d.ts +1 -1
- package/Image/Image.js.map +1 -1
- package/Input/Input.mdx +67 -56
- package/Input/InputPrimitive.d.ts +1 -1
- package/Label/Label.d.ts +1 -1
- package/Label/Label.js.map +1 -1
- package/Label/Label.mdx +42 -42
- package/Label/components/LabelDescription.d.ts +1 -1
- package/Label/components/LabelRequired.d.ts +1 -1
- package/Label/components/LabelValue.d.ts +1 -1
- package/Link/Link.d.ts +1 -1
- package/Link/Link.mdx +129 -116
- package/List/List.d.ts +1 -1
- package/List/List.js.map +1 -1
- package/List/List.mdx +317 -329
- package/List/components/ListItem.d.ts +1 -1
- package/List/components/ListItem.js.map +1 -1
- package/Loader/Loader.d.ts +2 -2
- package/Loader/Loader.js.map +1 -1
- package/Loader/Loader.mdx +96 -91
- package/MultiAutoComplete/MultiAutoComplete.mdx +52 -51
- package/MultiAutoComplete/primitives/components/MultiAutoCompleteInput.d.ts +1 -1
- package/MultiAutoComplete/primitives/presenters/MultiAutoCompleteListOptionsPresenter.js.map +1 -1
- package/MultiAutoComplete/primitives/presenters/MultiAutoCompleteListOptionsPresenterWithUniqueValues.js.map +1 -1
- package/MultiAutoComplete/primitives/presenters/MultiAutoCompleteSelectedOptionsPresenter.js.map +1 -1
- package/MultiAutoComplete/primitives/presenters/MultiAutoCompleteTemporaryOptionPresenter.js.map +1 -1
- package/MultiFilePicker/MultiFilePicker.mdx +84 -80
- package/MultiFilePicker/primitives/MultiFilePickerPrimitive.js.map +1 -1
- package/Popover/Popover.mdx +112 -118
- package/Popover/primitives/components/PopoverArrow.d.ts +1 -1
- package/Popover/primitives/components/PopoverContent.d.ts +1 -1
- package/RadioGroup/RadioGroup.mdx +62 -59
- package/RadioGroup/primitives/RadioGroupPrimitive.js.map +1 -1
- package/RangeSlider/RangeSlider.mdx +48 -47
- package/RangeSlider/primitives/RangeSliderPrimitive.js.map +1 -1
- package/RangeSlider/primitives/components/RangeSliderValue.d.ts +1 -1
- package/RangeSlider/primitives/components/RangeSliderValue.js.map +1 -1
- package/ScrollArea/ScrollArea.js.map +1 -1
- package/SegmentedControl/SegmentedControl.mdx +59 -59
- package/SegmentedControl/primitives/SegmentedControlPrimitive.d.ts +1 -1
- package/SegmentedControl/primitives/SegmentedControlPrimitive.js.map +1 -1
- package/Select/Select.mdx +52 -43
- package/Select/primitives/components/SelectTrigger.d.ts +1 -1
- package/Select/primitives/components/SelectTrigger.js.map +1 -1
- package/Select/primitives/presenters/SelectPresenter.d.ts +1 -1
- package/Separator/Separator.d.ts +1 -1
- package/Separator/Separator.mdx +139 -150
- package/Sidebar/Sidebar.js.map +1 -1
- package/Sidebar/Sidebar.mdx +66 -88
- package/Sidebar/components/items/SidebarMenuSubItemIndentation.d.ts +1 -1
- package/Sidebar/components/items/SidebarMenuSubItemIndentation.js.map +1 -1
- package/Skeleton/Skeleton.d.ts +1 -1
- package/Skeleton/Skeleton.js.map +1 -1
- package/Skeleton/Skeleton.mdx +37 -37
- package/Slider/Slider.mdx +48 -47
- package/Slider/primitives/SliderPrimitive.js.map +1 -1
- package/Slider/primitives/components/SliderSideValue.d.ts +1 -1
- package/Slider/primitives/components/SliderSideValue.js.map +1 -1
- package/Slider/primitives/components/SliderTooltip.d.ts +1 -1
- package/SteppedProgress/components/SteppedProgressIcon.d.ts +1 -1
- package/SteppedProgress/components/SteppedProgressIcon.js.map +1 -1
- package/SteppedProgress/components/SteppedProgressIndicator.d.ts +1 -1
- package/SteppedProgress/components/SteppedProgressIndicator.js.map +1 -1
- package/Switch/Switch.mdx +44 -42
- package/Switch/primitives/SwitchPrimitive.d.ts +1 -1
- package/Table/Table.d.ts +1 -1
- package/Table/Table.js.map +1 -1
- package/Table/components/Direction.d.ts +1 -1
- package/Table/components/Direction.js.map +1 -1
- package/Table/components/Header.d.ts +1 -1
- package/Table/components/Header.js.map +1 -1
- package/Table/components/Resizer.d.ts +1 -1
- package/Table/components/Resizer.js.map +1 -1
- package/Table/components/Row.d.ts +1 -1
- package/Table/components/Row.js.map +1 -1
- package/Tabs/Tabs.mdx +297 -292
- package/Tabs/components/Content.d.ts +1 -1
- package/Tabs/components/List.d.ts +1 -1
- package/Tabs/components/Trigger.d.ts +1 -1
- package/Tag/Tag.d.ts +1 -1
- package/Tag/Tag.js.map +1 -1
- package/Tag/Tag.mdx +68 -64
- package/Tags/primitives/TagsPrimitive.js.map +1 -1
- package/Text/Text.d.ts +1 -1
- package/Text/Text.mdx +54 -48
- package/Textarea/Textarea.mdx +49 -39
- package/Textarea/TextareaPrimitive.d.ts +1 -1
- package/Textarea/TextareaPrimitive.js.map +1 -1
- package/Toast/Toast.mdx +63 -53
- package/Toast/components/ToastRoot.d.ts +1 -1
- package/Tooltip/Tooltip.mdx +197 -198
- package/Tooltip/components/TooltipArrow.d.ts +1 -1
- package/Tooltip/components/TooltipContent.d.ts +1 -1
- package/Tree/components/Item.d.ts +1 -1
- package/Tree/useTree.d.ts +1 -1
- package/Widget/components/WidgetContent.d.ts +1 -1
- package/package.json +15 -15
package/Avatar/Avatar.mdx
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Canvas, Meta, Controls } from
|
|
1
|
+
import { Canvas, Meta, Controls } from "@storybook/addon-docs/blocks";
|
|
2
2
|
|
|
3
|
-
import * as AvatarStories from
|
|
3
|
+
import * as AvatarStories from "./Avatar.stories";
|
|
4
4
|
|
|
5
5
|
<Meta of={AvatarStories} />
|
|
6
6
|
|
|
@@ -15,30 +15,30 @@ import React from "react";
|
|
|
15
15
|
import { Avatar } from "@webiny/admin-ui";
|
|
16
16
|
|
|
17
17
|
const AvatarExample = () => {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
};
|
|
18
|
+
return (
|
|
19
|
+
|
|
20
|
+
<Avatar
|
|
21
|
+
image={<Avatar.Image src="https://i.pravatar.cc/300" alt="User" />}
|
|
22
|
+
fallback={<Avatar.Fallback>JD</Avatar.Fallback>}
|
|
23
|
+
size="md"
|
|
24
|
+
variant="strong"
|
|
25
|
+
/>
|
|
26
|
+
); };
|
|
27
27
|
|
|
28
28
|
export default AvatarExample;
|
|
29
29
|
|
|
30
30
|
` } }
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
31
|
+
additionalActions={[
|
|
32
|
+
{
|
|
33
|
+
title: 'Open in GitHub',
|
|
34
|
+
onClick: () => {
|
|
35
|
+
window.open(
|
|
36
|
+
'https://github.com/webiny/webiny-js/blob/feat/new-admin-ui/packages/admin-ui/src/Avatar/Avatar.tsx',
|
|
37
|
+
'_blank'
|
|
38
|
+
);
|
|
39
|
+
},
|
|
40
|
+
}
|
|
41
|
+
]}
|
|
42
42
|
/>
|
|
43
43
|
|
|
44
44
|
<Controls of={AvatarStories.Documentation} />
|
|
@@ -48,14 +48,14 @@ import React from "react";
|
|
|
48
48
|
import { Avatar } from "@webiny/admin-ui";
|
|
49
49
|
|
|
50
50
|
const AvatarExample = () => {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
51
|
+
return (
|
|
52
|
+
<Avatar
|
|
53
|
+
image={<Avatar.Image src="https://i.pravatar.cc/300" alt="User" />}
|
|
54
|
+
fallback={<Avatar.Fallback>JD</Avatar.Fallback>}
|
|
55
|
+
size="md"
|
|
56
|
+
variant="strong"
|
|
57
|
+
/>
|
|
58
|
+
);
|
|
59
59
|
};
|
|
60
60
|
|
|
61
61
|
export default AvatarExample;
|
|
@@ -71,14 +71,18 @@ import { ReactComponent as StormIcon } from "@webiny/icons/storm.svg";
|
|
|
71
71
|
import { Avatar } from "@webiny/admin-ui";
|
|
72
72
|
|
|
73
73
|
const AvatarExample = () => {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
}
|
|
74
|
+
return (
|
|
75
|
+
|
|
76
|
+
<Avatar
|
|
77
|
+
fallback={
|
|
78
|
+
<Avatar.Fallback>
|
|
79
|
+
<StormIcon />
|
|
80
|
+
</Avatar.Fallback>
|
|
81
|
+
}
|
|
82
|
+
size="md"
|
|
83
|
+
variant="strong"
|
|
84
|
+
/>
|
|
85
|
+
); };
|
|
82
86
|
|
|
83
87
|
export default AvatarExample;
|
|
84
88
|
|
|
@@ -88,18 +92,23 @@ export default AvatarExample;
|
|
|
88
92
|
## Anatomy
|
|
89
93
|
|
|
90
94
|
### Size
|
|
91
|
-
|
|
95
|
+
|
|
96
|
+
<img src="/images/storybook/avatar/size.png" alt="Size" />
|
|
92
97
|
|
|
93
98
|
### Type
|
|
94
|
-
|
|
99
|
+
|
|
100
|
+
<img src="/images/storybook/avatar/type.png" alt="Type" />
|
|
95
101
|
|
|
96
102
|
### Style
|
|
97
|
-
|
|
103
|
+
|
|
104
|
+
<img src="/images/storybook/avatar/style.png" alt="Style" />
|
|
98
105
|
|
|
99
106
|
## Usage
|
|
100
107
|
|
|
101
108
|
### Header
|
|
102
|
-
|
|
109
|
+
|
|
110
|
+
<img src="/images/storybook/avatar/header.png" alt="Header" />
|
|
103
111
|
|
|
104
112
|
### Table
|
|
105
|
-
|
|
113
|
+
|
|
114
|
+
<img src="/images/storybook/avatar/table.png" alt="Table" />
|
package/Button/Button.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ declare const buttonVariants: (props?: ({
|
|
|
4
4
|
variant?: "primary" | "secondary" | "tertiary" | "ghost" | "ghost-negative" | null | undefined;
|
|
5
5
|
size?: "sm" | "md" | "lg" | "xl" | null | undefined;
|
|
6
6
|
contentLayout?: "text" | "icon" | "text-icon-start" | "text-icon-end" | null | undefined;
|
|
7
|
-
} & import("class-variance-authority/
|
|
7
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
8
8
|
interface ButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "children">, VariantProps<typeof buttonVariants> {
|
|
9
9
|
text?: React.ReactNode;
|
|
10
10
|
children?: React.ReactNode;
|
package/Button/Button.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useMemo","Slot","cn","cva","makeDecoratable","buttonWrapperVariants","variants","disabled","true","buttonVariants","variant","primary","secondary","tertiary","ghost","size","sm","md","lg","xl","contentLayout","text","icon","compoundVariants","className","defaultVariants","ButtonBase","asChild","children","iconPosition","containerClassName","rest","Comp","Root","cssClasses","createElement","Object","assign","Slottable","Button"],"sources":["Button.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport { Slot } from \"radix-ui\";\nimport { cn, cva, type VariantProps, makeDecoratable } from \"~/utils.js\";\n\nconst buttonWrapperVariants = cva(\"inline-block\", {\n variants: {\n disabled: {\n true: \"cursor-not-allowed\"\n }\n }\n});\n\nconst buttonVariants = cva(\n [\n \"border-transparent rounded font-sans inline-flex items-center justify-center whitespace-nowrap ring-offset-background transition-colors no-underline! cursor-pointer\",\n \"aria-disabled:pointer-events-none\",\n \"focus-visible:outline-none focus-visible:border-accent-default\"\n ],\n {\n variants: {\n variant: {\n primary: [\n \"bg-primary text-neutral-light fill-neutral-base\",\n \"hover:bg-primary-strong\",\n \"active:bg-primary-xstrong\",\n \"aria-disabled:bg-primary-disabled\",\n \"focus-visible:ring-lg focus-visible:ring-primary-dimmed\"\n ],\n secondary: [\n \"bg-neutral-dimmed text-neutral-strong fill-neutral-xstrong\",\n \"hover:bg-neutral-muted\",\n \"active:bg-neutral-strong\",\n \"aria-disabled:bg-neutral-disabled aria-disabled:text-neutral-disabled aria-disabled:fill-neutral-strong\",\n \"focus-visible:ring-lg focus-visible:ring-primary-dimmed\"\n ],\n tertiary: [\n \"bg-neutral-base text-neutral-strong border-neutral-muted fill-neutral-xstrong\",\n \"hover:bg-neutral-light\",\n \"active:bg-neutral-muted\",\n \"aria-disabled:bg-neutral-disabled aria-disabled:border-neutral-dimmed aria-disabled:text-neutral-disabled aria-disabled:fill-neutral-strong\",\n \"focus-visible:ring-lg focus-visible:ring-primary-dimmed\"\n ],\n ghost: [\n \"bg-transparent text-neutral-strong fill-neutral-xstrong\",\n \"hover:bg-neutral-dimmed\",\n \"active:bg-neutral-muted\",\n \"aria-disabled:text-neutral-disabled aria-disabled:fill-neutral-strong\"\n ],\n \"ghost-negative\": [\n \"bg-transparent text-neutral-light fill-neutral-base\",\n \"hover:bg-neutral-base/20\",\n \"active:bg-neutral-base/30\",\n \"aria-disabled:text-neutral-disabled aria-disabled:fill-neutral-base/50\",\n \"focus-visible:border-neutral-base!\"\n ]\n },\n size: {\n sm: [\n \"text-sm border-sm rounded-sm [&>svg]:size-md\",\n \"py-[calc(var(--padding-xs)-(var(--border-width-sm)))] px-[calc(var(--padding-sm)-(var(--border-width-sm)))]\"\n ],\n md: [\n \"text-md border-sm rounded-md [&>svg]:size-md\",\n \"py-[calc(var(--padding-xs-plus)-(var(--border-width-sm)))] px-[calc(var(--padding-sm-extra)-(var(--border-width-sm)))]\"\n ],\n lg: [\n \"text-md border-sm rounded-md [&>svg]:size-md-plus\",\n \"py-[calc(var(--padding-sm-plus)-(var(--border-width-sm)))] px-[calc(var(--padding-md)-(var(--border-width-sm)))]\"\n ],\n xl: [\n \"text-lg font-semibold border-lg rounded-md [&>svg]:size-lg\",\n \"py-[calc(theme(padding.md-plus)-(var(--border-width-md)))] px-[calc(var(--padding-md)-(var(--border-width-md)))]\"\n ]\n },\n contentLayout: {\n text: \"\",\n icon: \"\",\n \"text-icon-start\": \"\",\n \"text-icon-end\": \"\"\n }\n },\n compoundVariants: [\n {\n size: \"xl\",\n variant: \"ghost\",\n className: \"focus-visible:border-md\"\n },\n {\n size: \"sm\",\n contentLayout: \"icon\",\n className: \"p-[calc(var(--padding-xs)-(var(--border-width-sm)))]\"\n },\n {\n size: \"sm\",\n contentLayout: \"text-icon-start\",\n className: \"pl-[calc(var(--padding-xs)-(var(--border-width-sm)))] [&>svg]:mr-xs\"\n },\n {\n size: \"sm\",\n contentLayout: \"text-icon-end\",\n className: \"pr-[calc(var(--padding-xs)-(var(--border-width-sm)))] [&>svg]:ml-xs\"\n },\n {\n size: \"md\",\n contentLayout: \"icon\",\n className: \"p-[calc(var(--padding-sm)-(var(--border-width-sm)))]\"\n },\n {\n size: \"md\",\n contentLayout: \"text-icon-start\",\n className:\n \"pl-[calc(var(--padding-xs-plus)-(var(--border-width-sm)))] [&>svg]:mr-xs\"\n },\n {\n size: \"md\",\n contentLayout: \"text-icon-end\",\n className:\n \"pr-[calc(var(--padding-xs-plus)-(var(--border-width-sm)))] [&>svg]:ml-xs\"\n },\n {\n size: \"lg\",\n contentLayout: \"icon\",\n className: \"p-[calc(var(--padding-sm-plus)-(var(--border-width-sm)))]\"\n },\n {\n size: \"lg\",\n contentLayout: \"text-icon-start\",\n className:\n \"pl-[calc(var(--padding-sm-extra)-(var(--border-width-sm)))] [&>svg]:mr-xs-plus\"\n },\n {\n size: \"lg\",\n contentLayout: \"text-icon-end\",\n className:\n \"pr-[calc(var(--padding-sm-extra)-(var(--border-width-sm)))] [&>svg]:ml-xs-plus\"\n },\n {\n size: \"xl\",\n contentLayout: \"icon\",\n className: \"p-[calc(var(--padding-md)-(var(--border-width-md)))]\"\n },\n {\n size: \"xl\",\n contentLayout: \"text-icon-start\",\n className:\n \"pl-[calc(var(--padding-sm-extra)-(var(--border-width-md)))] [&>svg]:mr-sm\"\n },\n {\n size: \"xl\",\n contentLayout: \"text-icon-end\",\n className:\n \"pr-[calc(var(--padding-sm-extra)-(var(--border-width-md)))] [&>svg]:ml-sm\"\n }\n ],\n defaultVariants: {\n variant: \"primary\",\n size: \"md\"\n }\n }\n);\n\ninterface ButtonProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"children\">,\n VariantProps<typeof buttonVariants> {\n text?: React.ReactNode;\n children?: React.ReactNode;\n\n icon?: React.ReactNode;\n\n iconPosition?: \"start\" | \"end\";\n\n asChild?: boolean;\n\n containerClassName?: string;\n}\n\ntype ContentLayout = \"text\" | \"icon\" | \"text-icon-start\" | \"text-icon-end\";\n\nconst ButtonBase = ({\n className,\n variant,\n size,\n asChild = false,\n text,\n children,\n icon,\n iconPosition = \"start\",\n disabled,\n containerClassName,\n ...rest\n}: ButtonProps) => {\n const Comp = asChild ? Slot.Root : \"button\";\n\n const contentLayout = useMemo<ContentLayout>(() => {\n if (!text && !children) {\n return \"icon\";\n }\n\n if (!icon) {\n return \"text\";\n }\n\n return `text-icon-${iconPosition}` as ContentLayout;\n }, [text, children, icon, iconPosition]);\n\n const cssClasses = cn(\n buttonVariants({\n variant,\n size,\n contentLayout\n }),\n className\n );\n\n return (\n <span className={cn(buttonWrapperVariants({ disabled }), containerClassName)}>\n <Comp className={cssClasses} disabled={disabled} aria-disabled={disabled} {...rest}>\n {iconPosition !== \"end\" && icon}\n <Slot.Slottable>{text || children || null}</Slot.Slottable>\n {iconPosition === \"end\" && icon}\n </Comp>\n </span>\n );\n};\n\nconst Button = makeDecoratable(\"Button\", ButtonBase);\n\nexport { Button, type ButtonProps, buttonVariants };\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["React","useMemo","Slot","cn","cva","makeDecoratable","buttonWrapperVariants","variants","disabled","true","buttonVariants","variant","primary","secondary","tertiary","ghost","size","sm","md","lg","xl","contentLayout","text","icon","compoundVariants","className","defaultVariants","ButtonBase","asChild","children","iconPosition","containerClassName","rest","Comp","Root","cssClasses","createElement","Object","assign","Slottable","Button"],"sources":["Button.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport { Slot } from \"radix-ui\";\nimport { cn, cva, type VariantProps, makeDecoratable } from \"~/utils.js\";\n\nconst buttonWrapperVariants = cva(\"inline-block\", {\n variants: {\n disabled: {\n true: \"cursor-not-allowed\"\n }\n }\n});\n\nconst buttonVariants = cva(\n [\n \"border-transparent rounded font-sans inline-flex items-center justify-center whitespace-nowrap ring-offset-background transition-colors no-underline! cursor-pointer\",\n \"aria-disabled:pointer-events-none\",\n \"focus-visible:outline-none focus-visible:border-accent-default\"\n ],\n {\n variants: {\n variant: {\n primary: [\n \"bg-primary text-neutral-light fill-neutral-base\",\n \"hover:bg-primary-strong\",\n \"active:bg-primary-xstrong\",\n \"aria-disabled:bg-primary-disabled\",\n \"focus-visible:ring-lg focus-visible:ring-primary-dimmed\"\n ],\n secondary: [\n \"bg-neutral-dimmed text-neutral-strong fill-neutral-xstrong\",\n \"hover:bg-neutral-muted\",\n \"active:bg-neutral-strong\",\n \"aria-disabled:bg-neutral-disabled aria-disabled:text-neutral-disabled aria-disabled:fill-neutral-strong\",\n \"focus-visible:ring-lg focus-visible:ring-primary-dimmed\"\n ],\n tertiary: [\n \"bg-neutral-base text-neutral-strong border-neutral-muted fill-neutral-xstrong\",\n \"hover:bg-neutral-light\",\n \"active:bg-neutral-muted\",\n \"aria-disabled:bg-neutral-disabled aria-disabled:border-neutral-dimmed aria-disabled:text-neutral-disabled aria-disabled:fill-neutral-strong\",\n \"focus-visible:ring-lg focus-visible:ring-primary-dimmed\"\n ],\n ghost: [\n \"bg-transparent text-neutral-strong fill-neutral-xstrong\",\n \"hover:bg-neutral-dimmed\",\n \"active:bg-neutral-muted\",\n \"aria-disabled:text-neutral-disabled aria-disabled:fill-neutral-strong\"\n ],\n \"ghost-negative\": [\n \"bg-transparent text-neutral-light fill-neutral-base\",\n \"hover:bg-neutral-base/20\",\n \"active:bg-neutral-base/30\",\n \"aria-disabled:text-neutral-disabled aria-disabled:fill-neutral-base/50\",\n \"focus-visible:border-neutral-base!\"\n ]\n },\n size: {\n sm: [\n \"text-sm border-sm rounded-sm [&>svg]:size-md\",\n \"py-[calc(var(--padding-xs)-(var(--border-width-sm)))] px-[calc(var(--padding-sm)-(var(--border-width-sm)))]\"\n ],\n md: [\n \"text-md border-sm rounded-md [&>svg]:size-md\",\n \"py-[calc(var(--padding-xs-plus)-(var(--border-width-sm)))] px-[calc(var(--padding-sm-extra)-(var(--border-width-sm)))]\"\n ],\n lg: [\n \"text-md border-sm rounded-md [&>svg]:size-md-plus\",\n \"py-[calc(var(--padding-sm-plus)-(var(--border-width-sm)))] px-[calc(var(--padding-md)-(var(--border-width-sm)))]\"\n ],\n xl: [\n \"text-lg font-semibold border-lg rounded-md [&>svg]:size-lg\",\n \"py-[calc(theme(padding.md-plus)-(var(--border-width-md)))] px-[calc(var(--padding-md)-(var(--border-width-md)))]\"\n ]\n },\n contentLayout: {\n text: \"\",\n icon: \"\",\n \"text-icon-start\": \"\",\n \"text-icon-end\": \"\"\n }\n },\n compoundVariants: [\n {\n size: \"xl\",\n variant: \"ghost\",\n className: \"focus-visible:border-md\"\n },\n {\n size: \"sm\",\n contentLayout: \"icon\",\n className: \"p-[calc(var(--padding-xs)-(var(--border-width-sm)))]\"\n },\n {\n size: \"sm\",\n contentLayout: \"text-icon-start\",\n className: \"pl-[calc(var(--padding-xs)-(var(--border-width-sm)))] [&>svg]:mr-xs\"\n },\n {\n size: \"sm\",\n contentLayout: \"text-icon-end\",\n className: \"pr-[calc(var(--padding-xs)-(var(--border-width-sm)))] [&>svg]:ml-xs\"\n },\n {\n size: \"md\",\n contentLayout: \"icon\",\n className: \"p-[calc(var(--padding-sm)-(var(--border-width-sm)))]\"\n },\n {\n size: \"md\",\n contentLayout: \"text-icon-start\",\n className:\n \"pl-[calc(var(--padding-xs-plus)-(var(--border-width-sm)))] [&>svg]:mr-xs\"\n },\n {\n size: \"md\",\n contentLayout: \"text-icon-end\",\n className:\n \"pr-[calc(var(--padding-xs-plus)-(var(--border-width-sm)))] [&>svg]:ml-xs\"\n },\n {\n size: \"lg\",\n contentLayout: \"icon\",\n className: \"p-[calc(var(--padding-sm-plus)-(var(--border-width-sm)))]\"\n },\n {\n size: \"lg\",\n contentLayout: \"text-icon-start\",\n className:\n \"pl-[calc(var(--padding-sm-extra)-(var(--border-width-sm)))] [&>svg]:mr-xs-plus\"\n },\n {\n size: \"lg\",\n contentLayout: \"text-icon-end\",\n className:\n \"pr-[calc(var(--padding-sm-extra)-(var(--border-width-sm)))] [&>svg]:ml-xs-plus\"\n },\n {\n size: \"xl\",\n contentLayout: \"icon\",\n className: \"p-[calc(var(--padding-md)-(var(--border-width-md)))]\"\n },\n {\n size: \"xl\",\n contentLayout: \"text-icon-start\",\n className:\n \"pl-[calc(var(--padding-sm-extra)-(var(--border-width-md)))] [&>svg]:mr-sm\"\n },\n {\n size: \"xl\",\n contentLayout: \"text-icon-end\",\n className:\n \"pr-[calc(var(--padding-sm-extra)-(var(--border-width-md)))] [&>svg]:ml-sm\"\n }\n ],\n defaultVariants: {\n variant: \"primary\",\n size: \"md\"\n }\n }\n);\n\ninterface ButtonProps\n extends\n Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"children\">,\n VariantProps<typeof buttonVariants> {\n text?: React.ReactNode;\n children?: React.ReactNode;\n\n icon?: React.ReactNode;\n\n iconPosition?: \"start\" | \"end\";\n\n asChild?: boolean;\n\n containerClassName?: string;\n}\n\ntype ContentLayout = \"text\" | \"icon\" | \"text-icon-start\" | \"text-icon-end\";\n\nconst ButtonBase = ({\n className,\n variant,\n size,\n asChild = false,\n text,\n children,\n icon,\n iconPosition = \"start\",\n disabled,\n containerClassName,\n ...rest\n}: ButtonProps) => {\n const Comp = asChild ? Slot.Root : \"button\";\n\n const contentLayout = useMemo<ContentLayout>(() => {\n if (!text && !children) {\n return \"icon\";\n }\n\n if (!icon) {\n return \"text\";\n }\n\n return `text-icon-${iconPosition}` as ContentLayout;\n }, [text, children, icon, iconPosition]);\n\n const cssClasses = cn(\n buttonVariants({\n variant,\n size,\n contentLayout\n }),\n className\n );\n\n return (\n <span className={cn(buttonWrapperVariants({ disabled }), containerClassName)}>\n <Comp className={cssClasses} disabled={disabled} aria-disabled={disabled} {...rest}>\n {iconPosition !== \"end\" && icon}\n <Slot.Slottable>{text || children || null}</Slot.Slottable>\n {iconPosition === \"end\" && icon}\n </Comp>\n </span>\n );\n};\n\nconst Button = makeDecoratable(\"Button\", ButtonBase);\n\nexport { Button, type ButtonProps, buttonVariants };\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,OAAO,QAAQ,OAAO;AACtC,SAASC,IAAI,QAAQ,UAAU;AAC/B,SAASC,EAAE,EAAEC,GAAG,EAAqBC,eAAe;AAEpD,MAAMC,qBAAqB,GAAGF,GAAG,CAAC,cAAc,EAAE;EAC9CG,QAAQ,EAAE;IACNC,QAAQ,EAAE;MACNC,IAAI,EAAE;IACV;EACJ;AACJ,CAAC,CAAC;AAEF,MAAMC,cAAc,GAAGN,GAAG,CACtB,CACI,sKAAsK,EACtK,mCAAmC,EACnC,gEAAgE,CACnE,EACD;EACIG,QAAQ,EAAE;IACNI,OAAO,EAAE;MACLC,OAAO,EAAE,CACL,iDAAiD,EACjD,yBAAyB,EACzB,2BAA2B,EAC3B,mCAAmC,EACnC,yDAAyD,CAC5D;MACDC,SAAS,EAAE,CACP,4DAA4D,EAC5D,wBAAwB,EACxB,0BAA0B,EAC1B,yGAAyG,EACzG,yDAAyD,CAC5D;MACDC,QAAQ,EAAE,CACN,+EAA+E,EAC/E,wBAAwB,EACxB,yBAAyB,EACzB,6IAA6I,EAC7I,yDAAyD,CAC5D;MACDC,KAAK,EAAE,CACH,yDAAyD,EACzD,yBAAyB,EACzB,yBAAyB,EACzB,uEAAuE,CAC1E;MACD,gBAAgB,EAAE,CACd,qDAAqD,EACrD,0BAA0B,EAC1B,2BAA2B,EAC3B,wEAAwE,EACxE,oCAAoC;IAE5C,CAAC;IACDC,IAAI,EAAE;MACFC,EAAE,EAAE,CACA,8CAA8C,EAC9C,6GAA6G,CAChH;MACDC,EAAE,EAAE,CACA,8CAA8C,EAC9C,wHAAwH,CAC3H;MACDC,EAAE,EAAE,CACA,mDAAmD,EACnD,kHAAkH,CACrH;MACDC,EAAE,EAAE,CACA,4DAA4D,EAC5D,kHAAkH;IAE1H,CAAC;IACDC,aAAa,EAAE;MACXC,IAAI,EAAE,EAAE;MACRC,IAAI,EAAE,EAAE;MACR,iBAAiB,EAAE,EAAE;MACrB,eAAe,EAAE;IACrB;EACJ,CAAC;EACDC,gBAAgB,EAAE,CACd;IACIR,IAAI,EAAE,IAAI;IACVL,OAAO,EAAE,OAAO;IAChBc,SAAS,EAAE;EACf,CAAC,EACD;IACIT,IAAI,EAAE,IAAI;IACVK,aAAa,EAAE,MAAM;IACrBI,SAAS,EAAE;EACf,CAAC,EACD;IACIT,IAAI,EAAE,IAAI;IACVK,aAAa,EAAE,iBAAiB;IAChCI,SAAS,EAAE;EACf,CAAC,EACD;IACIT,IAAI,EAAE,IAAI;IACVK,aAAa,EAAE,eAAe;IAC9BI,SAAS,EAAE;EACf,CAAC,EACD;IACIT,IAAI,EAAE,IAAI;IACVK,aAAa,EAAE,MAAM;IACrBI,SAAS,EAAE;EACf,CAAC,EACD;IACIT,IAAI,EAAE,IAAI;IACVK,aAAa,EAAE,iBAAiB;IAChCI,SAAS,EACL;EACR,CAAC,EACD;IACIT,IAAI,EAAE,IAAI;IACVK,aAAa,EAAE,eAAe;IAC9BI,SAAS,EACL;EACR,CAAC,EACD;IACIT,IAAI,EAAE,IAAI;IACVK,aAAa,EAAE,MAAM;IACrBI,SAAS,EAAE;EACf,CAAC,EACD;IACIT,IAAI,EAAE,IAAI;IACVK,aAAa,EAAE,iBAAiB;IAChCI,SAAS,EACL;EACR,CAAC,EACD;IACIT,IAAI,EAAE,IAAI;IACVK,aAAa,EAAE,eAAe;IAC9BI,SAAS,EACL;EACR,CAAC,EACD;IACIT,IAAI,EAAE,IAAI;IACVK,aAAa,EAAE,MAAM;IACrBI,SAAS,EAAE;EACf,CAAC,EACD;IACIT,IAAI,EAAE,IAAI;IACVK,aAAa,EAAE,iBAAiB;IAChCI,SAAS,EACL;EACR,CAAC,EACD;IACIT,IAAI,EAAE,IAAI;IACVK,aAAa,EAAE,eAAe;IAC9BI,SAAS,EACL;EACR,CAAC,CACJ;EACDC,eAAe,EAAE;IACbf,OAAO,EAAE,SAAS;IAClBK,IAAI,EAAE;EACV;AACJ,CACJ,CAAC;AAoBD,MAAMW,UAAU,GAAGA,CAAC;EAChBF,SAAS;EACTd,OAAO;EACPK,IAAI;EACJY,OAAO,GAAG,KAAK;EACfN,IAAI;EACJO,QAAQ;EACRN,IAAI;EACJO,YAAY,GAAG,OAAO;EACtBtB,QAAQ;EACRuB,kBAAkB;EAClB,GAAGC;AACM,CAAC,KAAK;EACf,MAAMC,IAAI,GAAGL,OAAO,GAAG1B,IAAI,CAACgC,IAAI,GAAG,QAAQ;EAE3C,MAAMb,aAAa,GAAGpB,OAAO,CAAgB,MAAM;IAC/C,IAAI,CAACqB,IAAI,IAAI,CAACO,QAAQ,EAAE;MACpB,OAAO,MAAM;IACjB;IAEA,IAAI,CAACN,IAAI,EAAE;MACP,OAAO,MAAM;IACjB;IAEA,OAAO,aAAaO,YAAY,EAAE;EACtC,CAAC,EAAE,CAACR,IAAI,EAAEO,QAAQ,EAAEN,IAAI,EAAEO,YAAY,CAAC,CAAC;EAExC,MAAMK,UAAU,GAAGhC,EAAE,CACjBO,cAAc,CAAC;IACXC,OAAO;IACPK,IAAI;IACJK;EACJ,CAAC,CAAC,EACFI,SACJ,CAAC;EAED,oBACIzB,KAAA,CAAAoC,aAAA;IAAMX,SAAS,EAAEtB,EAAE,CAACG,qBAAqB,CAAC;MAAEE;IAAS,CAAC,CAAC,EAAEuB,kBAAkB;EAAE,gBACzE/B,KAAA,CAAAoC,aAAA,CAACH,IAAI,EAAAI,MAAA,CAAAC,MAAA;IAACb,SAAS,EAAEU,UAAW;IAAC3B,QAAQ,EAAEA,QAAS;IAAC,iBAAeA;EAAS,GAAKwB,IAAI,GAC7EF,YAAY,KAAK,KAAK,IAAIP,IAAI,eAC/BvB,KAAA,CAAAoC,aAAA,CAAClC,IAAI,CAACqC,SAAS,QAAEjB,IAAI,IAAIO,QAAQ,IAAI,IAAqB,CAAC,EAC1DC,YAAY,KAAK,KAAK,IAAIP,IACzB,CACJ,CAAC;AAEf,CAAC;AAED,MAAMiB,MAAM,GAAGnC,eAAe,CAAC,QAAQ,EAAEsB,UAAU,CAAC;AAEpD,SAASa,MAAM,EAAoB9B,cAAc","ignoreList":[]}
|
package/Button/Button.mdx
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Canvas, Meta, Controls } from
|
|
1
|
+
import { Canvas, Meta, Controls } from "@storybook/addon-docs/blocks";
|
|
2
2
|
|
|
3
|
-
import * as ButtonStories from
|
|
3
|
+
import * as ButtonStories from "./Button.stories";
|
|
4
4
|
|
|
5
5
|
<Meta of={ButtonStories} />
|
|
6
6
|
|
|
@@ -17,25 +17,25 @@ The Button component is a key UI element that enables users to trigger actions o
|
|
|
17
17
|
\n <Button variant="primary" text={"Button"}></Button>
|
|
18
18
|
|
|
19
19
|
` } }
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
20
|
+
additionalActions={[
|
|
21
|
+
{
|
|
22
|
+
title: 'Open in GitHub',
|
|
23
|
+
onClick: () => {
|
|
24
|
+
window.open(
|
|
25
|
+
'https://github.com/webiny/webiny-js/blob/feat/new-admin-ui/packages/admin-ui/src/Button/Button.tsx',
|
|
26
|
+
'_blank'
|
|
27
|
+
);
|
|
28
|
+
},
|
|
29
|
+
}
|
|
30
|
+
]}
|
|
31
31
|
/>
|
|
32
32
|
|
|
33
33
|
<Controls of={ButtonStories.Documentation} exclude={"onClick"} />
|
|
34
34
|
|
|
35
35
|
```jsx
|
|
36
|
-
import { Button } from
|
|
36
|
+
import { Button } from "@webiny/admin-ui";
|
|
37
37
|
|
|
38
|
-
<Button variant="primary" text={"Button"}></Button
|
|
38
|
+
<Button variant="primary" text={"Button"}></Button>;
|
|
39
39
|
```
|
|
40
40
|
|
|
41
41
|
## Examples
|
|
@@ -51,7 +51,6 @@ import { Button } from '@webiny/admin-ui';
|
|
|
51
51
|
` } }
|
|
52
52
|
/>
|
|
53
53
|
|
|
54
|
-
|
|
55
54
|
### Secondary
|
|
56
55
|
|
|
57
56
|
<Canvas of={ButtonStories.Secondary}
|
|
@@ -105,11 +104,12 @@ import { Button } from '@webiny/admin-ui';
|
|
|
105
104
|
import { Button } from '@webiny/admin-ui';
|
|
106
105
|
import { ReactComponent as PencilIcon } from "@webiny/icons/edit.svg";
|
|
107
106
|
\n<Button variant="primary" text={"Button"} size="md" icon={<PencilIcon />} iconPosition="start"></Button>
|
|
107
|
+
|
|
108
108
|
` } }
|
|
109
109
|
/>
|
|
110
110
|
|
|
111
|
-
|
|
112
111
|
### As Child
|
|
112
|
+
|
|
113
113
|
The Button component can be used as a wrapper for other elements, allowing flexible composition. This is particularly useful when integrating custom text elements, or any other components inside a button.
|
|
114
114
|
|
|
115
115
|
<Canvas of={ButtonStories.WithAsChild} story={ {inline: false}}
|
|
@@ -125,19 +125,20 @@ The Button component can be used as a wrapper for other elements, allowing flexi
|
|
|
125
125
|
/>
|
|
126
126
|
|
|
127
127
|
### Icon Only Button
|
|
128
|
-
|
|
128
|
+
|
|
129
|
+
import * as IconButtonStories from "./IconButton.stories";
|
|
129
130
|
|
|
130
131
|
**We have a dedicated `IconButton` component for the Icon-only button. Please check the code below for more details.**
|
|
131
132
|
|
|
132
133
|
#### Usage
|
|
133
134
|
|
|
134
135
|
```jsx
|
|
135
|
-
import { IconButton } from
|
|
136
|
+
import { IconButton } from "@webiny/admin-ui";
|
|
136
137
|
```
|
|
137
138
|
|
|
138
139
|
```jsx
|
|
139
|
-
import { ReactComponent as AddIcon } from "@webiny/icons/add.svg"
|
|
140
|
-
<IconButton icon={<AddIcon />} size={"md"}
|
|
140
|
+
import { ReactComponent as AddIcon } from "@webiny/icons/add.svg";
|
|
141
|
+
<IconButton icon={<AddIcon />} size={"md"} />;
|
|
141
142
|
```
|
|
142
143
|
|
|
143
144
|
<Canvas of={IconButtonStories.Documentation}
|
|
@@ -148,17 +149,17 @@ import { ReactComponent as AddIcon } from "@webiny/icons/add.svg"
|
|
|
148
149
|
\n <IconButton icon={<AddIcon />} size={"md"}/>
|
|
149
150
|
|
|
150
151
|
` } }
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
152
|
+
additionalActions={[
|
|
153
|
+
{
|
|
154
|
+
title: 'Open in GitHub',
|
|
155
|
+
onClick: () => {
|
|
156
|
+
window.open(
|
|
157
|
+
'https://github.com/webiny/webiny-js/blob/feat/new-admin-ui/packages/admin-ui/src/Button/Button.tsx',
|
|
158
|
+
'_blank'
|
|
159
|
+
);
|
|
160
|
+
},
|
|
161
|
+
}
|
|
162
|
+
]}
|
|
162
163
|
/>
|
|
163
164
|
|
|
164
165
|
#### Props
|
|
@@ -168,40 +169,47 @@ import { ReactComponent as AddIcon } from "@webiny/icons/add.svg"
|
|
|
168
169
|
## Anatomy
|
|
169
170
|
|
|
170
171
|
### Construction
|
|
171
|
-
|
|
172
|
+
|
|
173
|
+
<img src="/images/storybook/button/contruction.png" alt="Construction" />
|
|
172
174
|
|
|
173
175
|
### Options
|
|
174
|
-
|
|
176
|
+
|
|
177
|
+
<img src="/images/storybook/button/options.png" alt="Options" />
|
|
175
178
|
|
|
176
179
|
### Variants
|
|
177
|
-
|
|
180
|
+
|
|
181
|
+
<img src="/images/storybook/button/type.png" alt="Variants" />
|
|
178
182
|
|
|
179
183
|
### Size
|
|
184
|
+
|
|
180
185
|
Regular buttons come in four different sizes: small, medium, large, and xl. The medium size is the default and most frequently used option. Use the other sizes sparingly; they should be used to create a hierarchy of importance within the page.
|
|
181
186
|
|
|
182
|
-
<img src="/images/storybook/button/size.png" alt="Size"/>
|
|
187
|
+
<img src="/images/storybook/button/size.png" alt="Size" />
|
|
183
188
|
|
|
184
189
|
**Icon-only button** come in six different sizes to accommodate for various component needs.
|
|
185
190
|
|
|
186
|
-
<img src="/images/storybook/button/size-icon-only.png" alt="Size - Icon Only"/>
|
|
187
|
-
|
|
191
|
+
<img src="/images/storybook/button/size-icon-only.png" alt="Size - Icon Only" />
|
|
188
192
|
|
|
189
193
|
### States
|
|
190
|
-
|
|
194
|
+
|
|
195
|
+
<img src="/images/storybook/button/states.png" alt="States" />
|
|
191
196
|
|
|
192
197
|
## Usage
|
|
193
198
|
|
|
194
199
|
### Icon Usage
|
|
200
|
+
|
|
195
201
|
An icon should only be used in a button when it's benefitial and when it has a meaningful association with the label.
|
|
196
202
|
|
|
197
|
-
<img src="/images/storybook/button/icon-usage.png" alt="Icon Usage"/>
|
|
203
|
+
<img src="/images/storybook/button/icon-usage.png" alt="Icon Usage" />
|
|
198
204
|
|
|
199
205
|
### Use primary buttons sparingly
|
|
206
|
+
|
|
200
207
|
Use primary buttons as the desired action for users. Competing primary buttons may leave the user unsure of next steps in their user journey. As a rule of thumb limit primary buttons to 1 in contained UIs and 3 in full page UIs.
|
|
201
208
|
|
|
202
|
-
<img src="/images/storybook/button/primary-button-usage.png" alt="Primary Button Usage"/>
|
|
209
|
+
<img src="/images/storybook/button/primary-button-usage.png" alt="Primary Button Usage" />
|
|
203
210
|
|
|
204
211
|
### Button Group
|
|
212
|
+
|
|
205
213
|
When used in groups, buttons should support only maximum of two type variants, with an exception of third variant being ghost extension button (eg. ellipsis). Avoid using random type and icon options within the button groups. Avoid using different sizes within the same group.
|
|
206
214
|
|
|
207
|
-
<img src="/images/storybook/button/button-group.png" alt="Button Group"/>
|
|
215
|
+
<img src="/images/storybook/button/button-group.png" alt="Button Group" />
|
package/Button/IconButton.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ declare const iconButtonVariants: (props?: ({
|
|
|
4
4
|
variant?: "primary" | "secondary" | "tertiary" | "ghost" | "ghost-negative" | null | undefined;
|
|
5
5
|
size?: "sm" | "md" | "lg" | "xl" | "xs" | "xxs" | null | undefined;
|
|
6
6
|
iconSize?: "lg" | "default" | null | undefined;
|
|
7
|
-
} & import("class-variance-authority/
|
|
7
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
8
8
|
interface IconButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "children">, VariantProps<typeof iconButtonVariants> {
|
|
9
9
|
icon?: React.ReactNode;
|
|
10
10
|
asChild?: boolean;
|
package/Button/IconButton.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Slot","cn","cva","makeDecoratable","iconButtonWrapperVariants","variants","disabled","true","iconButtonVariants","variant","primary","secondary","tertiary","ghost","size","xxs","xs","sm","md","lg","xl","iconSize","default","compoundVariants","className","defaultVariants","DecoratableIconButton","icon","asChild","props","Comp","Root","createElement","Object","assign","IconButton"],"sources":["IconButton.tsx"],"sourcesContent":["import React from \"react\";\nimport { Slot } from \"radix-ui\";\nimport { cn, cva, type VariantProps, makeDecoratable } from \"~/utils.js\";\n\nconst iconButtonWrapperVariants = cva(\"inline-block\", {\n variants: {\n disabled: {\n true: \"cursor-not-allowed\"\n }\n }\n});\n\nconst iconButtonVariants = cva(\n [\n \"border-transparent rounded flex shrink-0 items-center justify-center ring-offset-background transition-colors cursor-pointer\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0\",\n \"[&_img]:pointer-events-none [&_img]:shrink-0\",\n \"aria-disabled:pointer-events-none\",\n \"focus-visible:outline-none focus-visible:border-accent-default\"\n ],\n {\n variants: {\n variant: {\n primary: [\n \"bg-primary fill-neutral-base\",\n \"hover:bg-primary-strong\",\n \"active:bg-primary-xstrong\",\n \"aria-disabled:bg-primary-disabled\",\n \"focus-visible:ring-lg focus-visible:ring-primary-dimmed\"\n ],\n secondary: [\n \"bg-neutral-dimmed fill-neutral-xstrong\",\n \"hover:bg-neutral-muted\",\n \"active:bg-neutral-strong\",\n \"aria-disabled:bg-neutral-disabled aria-disabled:fill-neutral-strong\",\n \"focus-visible:ring-lg focus-visible:ring-primary-dimmed\"\n ],\n tertiary: [\n \"bg-neutral-base border-neutral-muted fill-neutral-xstrong\",\n \"hover:bg-neutral-light\",\n \"active:bg-neutral-muted\",\n \"aria-disabled:bg-neutral-disabled aria-disabled:fill-neutral-strong aria-disabled:border-neutral-dimmed\",\n \"focus-visible:ring-lg focus-visible:ring-primary-dimmed\"\n ],\n ghost: [\n \"bg-transparent fill-neutral-xstrong\",\n \"hover:bg-neutral-dark/5\",\n \"active:bg-neutral-muted\",\n \"aria-disabled:fill-neutral-strong hover:aria-disabled:bg-transparent active:aria-disabled:bg-transparent\"\n ],\n \"ghost-negative\": [\n \"bg-transparent fill-neutral-base\",\n \"hover:bg-neutral-base/20\",\n \"active:bg-neutral-base/30\",\n \"focus-visible:border-neutral-base!\",\n \"aria-disabled:fill-neutral-base aria-disabled:opacity-50 hover:aria-disabled:bg-transparent active:aria-disabled:bg-transparent\"\n ]\n },\n size: {\n xxs: \"border-sm rounded-xs size-sm-extra [&_svg]:size-md [&_img]:size-md\",\n xs: \"border-sm rounded-xs size-md [&_svg]:size-md [&_img]:size-md\",\n sm: \"border-sm rounded-sm\",\n md: \"border-sm rounded-md\",\n lg: \"border-sm rounded-md\",\n xl: \"border-md rounded-lg p-[calc(var(--padding-md)-(var(--border-width-md)))] [&_svg]:size-lg [&_img]:size-lg\"\n },\n iconSize: {\n default: \"\",\n lg: \"\"\n }\n },\n compoundVariants: [\n {\n size: \"xl\",\n variant: \"ghost\",\n className: \"focus-visible:border-md\"\n },\n {\n size: \"sm\",\n iconSize: \"default\",\n className:\n \"p-[calc(var(--padding-xs)-var(--border-width-sm))] [&_svg]:size-md [&_img]:size-md\"\n },\n {\n size: \"sm\",\n iconSize: \"lg\",\n className:\n \"p-[calc(var(--padding-xxs)-var(--border-width-sm))] [&_svg]:size-md-plus [&_img]:size-md-plus\"\n },\n {\n size: \"md\",\n iconSize: \"default\",\n className:\n \"p-[calc(var(--padding-sm)-var(--border-width-sm))] [&_svg]:size-md [&_img]:size-md\"\n },\n {\n size: \"md\",\n iconSize: \"lg\",\n className:\n \"p-[calc(var(--padding-xs)-var(--border-width-sm))] [&_svg]:size-lg [&_img]:size-lg\"\n },\n {\n size: \"lg\",\n iconSize: \"default\",\n className:\n \"p-[calc(var(--padding-sm-plus)-var(--border-width-sm))] [&_svg]:size-md-plus [&_img]:size-md-plus\"\n },\n {\n size: \"lg\",\n iconSize: \"lg\",\n className:\n \"p-[calc(var(--padding-sm)-var(--border-width-sm))] [&_svg]:size-lg [&_img]:size-lg\"\n }\n ],\n defaultVariants: {\n variant: \"primary\",\n size: \"md\",\n iconSize: \"default\"\n }\n }\n);\n\ninterface IconButtonProps\n extends
|
|
1
|
+
{"version":3,"names":["React","Slot","cn","cva","makeDecoratable","iconButtonWrapperVariants","variants","disabled","true","iconButtonVariants","variant","primary","secondary","tertiary","ghost","size","xxs","xs","sm","md","lg","xl","iconSize","default","compoundVariants","className","defaultVariants","DecoratableIconButton","icon","asChild","props","Comp","Root","createElement","Object","assign","IconButton"],"sources":["IconButton.tsx"],"sourcesContent":["import React from \"react\";\nimport { Slot } from \"radix-ui\";\nimport { cn, cva, type VariantProps, makeDecoratable } from \"~/utils.js\";\n\nconst iconButtonWrapperVariants = cva(\"inline-block\", {\n variants: {\n disabled: {\n true: \"cursor-not-allowed\"\n }\n }\n});\n\nconst iconButtonVariants = cva(\n [\n \"border-transparent rounded flex shrink-0 items-center justify-center ring-offset-background transition-colors cursor-pointer\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0\",\n \"[&_img]:pointer-events-none [&_img]:shrink-0\",\n \"aria-disabled:pointer-events-none\",\n \"focus-visible:outline-none focus-visible:border-accent-default\"\n ],\n {\n variants: {\n variant: {\n primary: [\n \"bg-primary fill-neutral-base\",\n \"hover:bg-primary-strong\",\n \"active:bg-primary-xstrong\",\n \"aria-disabled:bg-primary-disabled\",\n \"focus-visible:ring-lg focus-visible:ring-primary-dimmed\"\n ],\n secondary: [\n \"bg-neutral-dimmed fill-neutral-xstrong\",\n \"hover:bg-neutral-muted\",\n \"active:bg-neutral-strong\",\n \"aria-disabled:bg-neutral-disabled aria-disabled:fill-neutral-strong\",\n \"focus-visible:ring-lg focus-visible:ring-primary-dimmed\"\n ],\n tertiary: [\n \"bg-neutral-base border-neutral-muted fill-neutral-xstrong\",\n \"hover:bg-neutral-light\",\n \"active:bg-neutral-muted\",\n \"aria-disabled:bg-neutral-disabled aria-disabled:fill-neutral-strong aria-disabled:border-neutral-dimmed\",\n \"focus-visible:ring-lg focus-visible:ring-primary-dimmed\"\n ],\n ghost: [\n \"bg-transparent fill-neutral-xstrong\",\n \"hover:bg-neutral-dark/5\",\n \"active:bg-neutral-muted\",\n \"aria-disabled:fill-neutral-strong hover:aria-disabled:bg-transparent active:aria-disabled:bg-transparent\"\n ],\n \"ghost-negative\": [\n \"bg-transparent fill-neutral-base\",\n \"hover:bg-neutral-base/20\",\n \"active:bg-neutral-base/30\",\n \"focus-visible:border-neutral-base!\",\n \"aria-disabled:fill-neutral-base aria-disabled:opacity-50 hover:aria-disabled:bg-transparent active:aria-disabled:bg-transparent\"\n ]\n },\n size: {\n xxs: \"border-sm rounded-xs size-sm-extra [&_svg]:size-md [&_img]:size-md\",\n xs: \"border-sm rounded-xs size-md [&_svg]:size-md [&_img]:size-md\",\n sm: \"border-sm rounded-sm\",\n md: \"border-sm rounded-md\",\n lg: \"border-sm rounded-md\",\n xl: \"border-md rounded-lg p-[calc(var(--padding-md)-(var(--border-width-md)))] [&_svg]:size-lg [&_img]:size-lg\"\n },\n iconSize: {\n default: \"\",\n lg: \"\"\n }\n },\n compoundVariants: [\n {\n size: \"xl\",\n variant: \"ghost\",\n className: \"focus-visible:border-md\"\n },\n {\n size: \"sm\",\n iconSize: \"default\",\n className:\n \"p-[calc(var(--padding-xs)-var(--border-width-sm))] [&_svg]:size-md [&_img]:size-md\"\n },\n {\n size: \"sm\",\n iconSize: \"lg\",\n className:\n \"p-[calc(var(--padding-xxs)-var(--border-width-sm))] [&_svg]:size-md-plus [&_img]:size-md-plus\"\n },\n {\n size: \"md\",\n iconSize: \"default\",\n className:\n \"p-[calc(var(--padding-sm)-var(--border-width-sm))] [&_svg]:size-md [&_img]:size-md\"\n },\n {\n size: \"md\",\n iconSize: \"lg\",\n className:\n \"p-[calc(var(--padding-xs)-var(--border-width-sm))] [&_svg]:size-lg [&_img]:size-lg\"\n },\n {\n size: \"lg\",\n iconSize: \"default\",\n className:\n \"p-[calc(var(--padding-sm-plus)-var(--border-width-sm))] [&_svg]:size-md-plus [&_img]:size-md-plus\"\n },\n {\n size: \"lg\",\n iconSize: \"lg\",\n className:\n \"p-[calc(var(--padding-sm)-var(--border-width-sm))] [&_svg]:size-lg [&_img]:size-lg\"\n }\n ],\n defaultVariants: {\n variant: \"primary\",\n size: \"md\",\n iconSize: \"default\"\n }\n }\n);\n\ninterface IconButtonProps\n extends\n Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"children\">,\n VariantProps<typeof iconButtonVariants> {\n icon?: React.ReactNode;\n asChild?: boolean;\n}\n\nconst DecoratableIconButton = ({\n className,\n variant,\n size,\n icon,\n iconSize,\n asChild = false,\n disabled,\n ...props\n}: IconButtonProps) => {\n const Comp = asChild ? Slot.Root : \"button\";\n return (\n <span className={cn(iconButtonWrapperVariants({ disabled }))}>\n <Comp\n {...props}\n className={cn(iconButtonVariants({ variant, size, iconSize }), className)}\n disabled={disabled}\n aria-disabled={disabled}\n >\n {icon}\n </Comp>\n </span>\n );\n};\n\nconst IconButton = makeDecoratable(\"IconButton\", DecoratableIconButton);\n\nexport { IconButton, type IconButtonProps, iconButtonVariants };\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,QAAQ,UAAU;AAC/B,SAASC,EAAE,EAAEC,GAAG,EAAqBC,eAAe;AAEpD,MAAMC,yBAAyB,GAAGF,GAAG,CAAC,cAAc,EAAE;EAClDG,QAAQ,EAAE;IACNC,QAAQ,EAAE;MACNC,IAAI,EAAE;IACV;EACJ;AACJ,CAAC,CAAC;AAEF,MAAMC,kBAAkB,GAAGN,GAAG,CAC1B,CACI,8HAA8H,EAC9H,8CAA8C,EAC9C,8CAA8C,EAC9C,mCAAmC,EACnC,gEAAgE,CACnE,EACD;EACIG,QAAQ,EAAE;IACNI,OAAO,EAAE;MACLC,OAAO,EAAE,CACL,8BAA8B,EAC9B,yBAAyB,EACzB,2BAA2B,EAC3B,mCAAmC,EACnC,yDAAyD,CAC5D;MACDC,SAAS,EAAE,CACP,wCAAwC,EACxC,wBAAwB,EACxB,0BAA0B,EAC1B,qEAAqE,EACrE,yDAAyD,CAC5D;MACDC,QAAQ,EAAE,CACN,2DAA2D,EAC3D,wBAAwB,EACxB,yBAAyB,EACzB,yGAAyG,EACzG,yDAAyD,CAC5D;MACDC,KAAK,EAAE,CACH,qCAAqC,EACrC,yBAAyB,EACzB,yBAAyB,EACzB,0GAA0G,CAC7G;MACD,gBAAgB,EAAE,CACd,kCAAkC,EAClC,0BAA0B,EAC1B,2BAA2B,EAC3B,oCAAoC,EACpC,iIAAiI;IAEzI,CAAC;IACDC,IAAI,EAAE;MACFC,GAAG,EAAE,oEAAoE;MACzEC,EAAE,EAAE,8DAA8D;MAClEC,EAAE,EAAE,sBAAsB;MAC1BC,EAAE,EAAE,sBAAsB;MAC1BC,EAAE,EAAE,sBAAsB;MAC1BC,EAAE,EAAE;IACR,CAAC;IACDC,QAAQ,EAAE;MACNC,OAAO,EAAE,EAAE;MACXH,EAAE,EAAE;IACR;EACJ,CAAC;EACDI,gBAAgB,EAAE,CACd;IACIT,IAAI,EAAE,IAAI;IACVL,OAAO,EAAE,OAAO;IAChBe,SAAS,EAAE;EACf,CAAC,EACD;IACIV,IAAI,EAAE,IAAI;IACVO,QAAQ,EAAE,SAAS;IACnBG,SAAS,EACL;EACR,CAAC,EACD;IACIV,IAAI,EAAE,IAAI;IACVO,QAAQ,EAAE,IAAI;IACdG,SAAS,EACL;EACR,CAAC,EACD;IACIV,IAAI,EAAE,IAAI;IACVO,QAAQ,EAAE,SAAS;IACnBG,SAAS,EACL;EACR,CAAC,EACD;IACIV,IAAI,EAAE,IAAI;IACVO,QAAQ,EAAE,IAAI;IACdG,SAAS,EACL;EACR,CAAC,EACD;IACIV,IAAI,EAAE,IAAI;IACVO,QAAQ,EAAE,SAAS;IACnBG,SAAS,EACL;EACR,CAAC,EACD;IACIV,IAAI,EAAE,IAAI;IACVO,QAAQ,EAAE,IAAI;IACdG,SAAS,EACL;EACR,CAAC,CACJ;EACDC,eAAe,EAAE;IACbhB,OAAO,EAAE,SAAS;IAClBK,IAAI,EAAE,IAAI;IACVO,QAAQ,EAAE;EACd;AACJ,CACJ,CAAC;AAUD,MAAMK,qBAAqB,GAAGA,CAAC;EAC3BF,SAAS;EACTf,OAAO;EACPK,IAAI;EACJa,IAAI;EACJN,QAAQ;EACRO,OAAO,GAAG,KAAK;EACftB,QAAQ;EACR,GAAGuB;AACU,CAAC,KAAK;EACnB,MAAMC,IAAI,GAAGF,OAAO,GAAG5B,IAAI,CAAC+B,IAAI,GAAG,QAAQ;EAC3C,oBACIhC,KAAA,CAAAiC,aAAA;IAAMR,SAAS,EAAEvB,EAAE,CAACG,yBAAyB,CAAC;MAAEE;IAAS,CAAC,CAAC;EAAE,gBACzDP,KAAA,CAAAiC,aAAA,CAACF,IAAI,EAAAG,MAAA,CAAAC,MAAA,KACGL,KAAK;IACTL,SAAS,EAAEvB,EAAE,CAACO,kBAAkB,CAAC;MAAEC,OAAO;MAAEK,IAAI;MAAEO;IAAS,CAAC,CAAC,EAAEG,SAAS,CAAE;IAC1ElB,QAAQ,EAAEA,QAAS;IACnB,iBAAeA;EAAS,IAEvBqB,IACC,CACJ,CAAC;AAEf,CAAC;AAED,MAAMQ,UAAU,GAAGhC,eAAe,CAAC,YAAY,EAAEuB,qBAAqB,CAAC;AAEvE,SAASS,UAAU,EAAwB3B,kBAAkB","ignoreList":[]}
|
|
@@ -4,7 +4,7 @@ declare const cardContentVariants: (props?: ({
|
|
|
4
4
|
cornerSize?: "md" | "lg" | null | undefined;
|
|
5
5
|
variant?: "accent" | "default" | null | undefined;
|
|
6
6
|
elevation?: "none" | "small" | "medium" | "large" | null | undefined;
|
|
7
|
-
} & import("class-variance-authority/
|
|
7
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
8
8
|
export interface CardContentProps extends VariantProps<typeof cardContentVariants> {
|
|
9
9
|
className?: string;
|
|
10
10
|
children: React.ReactNode;
|
|
@@ -4,7 +4,7 @@ declare const cardTitleVariants: (props?: ({
|
|
|
4
4
|
padding?: "sm" | "md" | "lg" | null | undefined;
|
|
5
5
|
size?: "sm" | "md" | null | undefined;
|
|
6
6
|
variant?: "accent" | "default" | null | undefined;
|
|
7
|
-
} & import("class-variance-authority/
|
|
7
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
8
8
|
export type CardTitleProps = React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof cardTitleVariants>;
|
|
9
9
|
export declare const CardTitle: ({ className, padding, size, variant, ...props }: CardTitleProps) => React.JSX.Element;
|
|
10
10
|
export {};
|
package/Checkbox/Checkbox.mdx
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Canvas, Meta, Controls } from
|
|
1
|
+
import { Canvas, Meta, Controls } from "@storybook/addon-docs/blocks";
|
|
2
2
|
|
|
3
|
-
import * as CheckboxStories from
|
|
3
|
+
import * as CheckboxStories from "./Checkbox.stories";
|
|
4
4
|
|
|
5
5
|
<Meta of={CheckboxStories} />
|
|
6
6
|
|
|
@@ -17,8 +17,8 @@ import React, { useState } from "react";
|
|
|
17
17
|
import { Checkbox } from "@webiny/admin-ui";
|
|
18
18
|
|
|
19
19
|
const CheckboxExample = () => {
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
const [isChecked, setIsChecked] = useState(false);
|
|
21
|
+
const [validation, setValidation] = useState({ isValid: true, message: "" });
|
|
22
22
|
|
|
23
23
|
const handleChange = (checked: boolean) => {
|
|
24
24
|
setIsChecked(checked);
|
|
@@ -43,57 +43,58 @@ const CheckboxExample = () => {
|
|
|
43
43
|
/>
|
|
44
44
|
</div>
|
|
45
45
|
);
|
|
46
|
+
|
|
46
47
|
};
|
|
47
48
|
|
|
48
49
|
export default CheckboxExample;
|
|
49
50
|
|
|
50
51
|
` } }
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
52
|
+
additionalActions={[
|
|
53
|
+
{
|
|
54
|
+
title: 'Open in GitHub',
|
|
55
|
+
onClick: () => {
|
|
56
|
+
window.open(
|
|
57
|
+
'https://github.com/webiny/webiny-js/blob/feat/new-admin-ui/packages/admin-ui/src/Checkbox/Checkbox.tsx',
|
|
58
|
+
'_blank'
|
|
59
|
+
);
|
|
60
|
+
},
|
|
61
|
+
}
|
|
62
|
+
]}
|
|
62
63
|
/>
|
|
63
64
|
|
|
64
|
-
<Controls of={CheckboxStories.Documentation} exclude={"onChange"}/>
|
|
65
|
+
<Controls of={CheckboxStories.Documentation} exclude={"onChange"} />
|
|
65
66
|
|
|
66
67
|
```tsx
|
|
67
68
|
import React, { useState } from "react";
|
|
68
69
|
import { Checkbox } from "@webiny/admin-ui";
|
|
69
70
|
|
|
70
71
|
const CheckboxExample = () => {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
72
|
+
const [isChecked, setIsChecked] = useState(false);
|
|
73
|
+
const [validation, setValidation] = useState({ isValid: true, message: "" });
|
|
74
|
+
|
|
75
|
+
const handleChange = (checked: boolean) => {
|
|
76
|
+
setIsChecked(checked);
|
|
77
|
+
|
|
78
|
+
if (!checked) {
|
|
79
|
+
setValidation({ isValid: false, message: "This field is required" });
|
|
80
|
+
} else {
|
|
81
|
+
setValidation({ isValid: true, message: "" });
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
return (
|
|
86
|
+
<div>
|
|
87
|
+
<Checkbox
|
|
88
|
+
label="Any field label"
|
|
89
|
+
description="Provide the required information for processing your request."
|
|
90
|
+
note="Note: Ensure your selection or input is accurate before proceeding."
|
|
91
|
+
checked={isChecked}
|
|
92
|
+
required={true}
|
|
93
|
+
onChange={handleChange}
|
|
94
|
+
validation={validation}
|
|
95
|
+
/>
|
|
96
|
+
</div>
|
|
97
|
+
);
|
|
97
98
|
};
|
|
98
99
|
|
|
99
100
|
export default CheckboxExample;
|
|
@@ -102,24 +103,25 @@ export default CheckboxExample;
|
|
|
102
103
|
## Anatomy
|
|
103
104
|
|
|
104
105
|
### General
|
|
106
|
+
|
|
105
107
|
Checkbox input enable users to select a single or multiple items from a list of offered choices. A checkbox input group organizes related checkbox input options together for better clarity and functionality.
|
|
106
108
|
|
|
107
|
-
<img src="/images/storybook/checkbox/general.png" alt="General"/>
|
|
109
|
+
<img src="/images/storybook/checkbox/general.png" alt="General" />
|
|
108
110
|
|
|
109
111
|
### Checkbox input options
|
|
112
|
+
|
|
110
113
|
Checkbox inputs can exist in two different states: Selected and Not Selected.
|
|
111
114
|
|
|
112
|
-
<img src="/images/storybook/checkbox/checkbox-input-options.png" alt="Checkbox input options"/>
|
|
115
|
+
<img src="/images/storybook/checkbox/checkbox-input-options.png" alt="Checkbox input options" />
|
|
113
116
|
|
|
114
117
|
### States
|
|
115
|
-
|
|
118
|
+
|
|
119
|
+
<img src="/images/storybook/checkbox/states.png" alt="States" />
|
|
116
120
|
|
|
117
121
|
## Usage
|
|
118
122
|
|
|
119
123
|
### Text overflow
|
|
120
|
-
When the checkbox text content is too long for the horizontal space available, the content should wrap to form another line aligning the text and checkbox on top.
|
|
121
|
-
|
|
122
|
-
<img src="/images/storybook/checkbox/text-overflow.png" alt="Text overflow"/>
|
|
123
|
-
|
|
124
124
|
|
|
125
|
+
When the checkbox text content is too long for the horizontal space available, the content should wrap to form another line aligning the text and checkbox on top.
|
|
125
126
|
|
|
127
|
+
<img src="/images/storybook/checkbox/text-overflow.png" alt="Text overflow" />
|
|
@@ -8,7 +8,7 @@ import type { CheckboxItemDto, CheckboxItemFormatted } from "../../Checkbox/inde
|
|
|
8
8
|
declare const checkboxVariants: (props?: ({
|
|
9
9
|
indeterminate?: boolean | null | undefined;
|
|
10
10
|
hasLabel?: boolean | null | undefined;
|
|
11
|
-
} & import("class-variance-authority/
|
|
11
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
12
12
|
type CheckboxPrimitiveProps = Omit<CheckboxPrimitives.CheckboxProps, "defaultChecked" | "onCheckedChange" | "onChange"> & VariantProps<typeof checkboxVariants> & CheckboxItemDto & {
|
|
13
13
|
onChange: (checked: boolean) => void;
|
|
14
14
|
};
|