@baseline-ui/mcp 3.4.0 → 3.5.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/CHANGELOG.md +8 -0
- package/dist/{chunk-KU5KEP2T.js → chunk-IMFQXPWD.js} +1590 -242
- package/dist/index.js +1 -1
- package/dist/server.cjs +1590 -242
- package/dist/server.js +1 -1
- package/package.json +4 -1
- package/sbom.json +6 -6
|
@@ -700,7 +700,7 @@ export function ArabicLocaleLtrOverridePieChart() {
|
|
|
700
700
|
* It supports adding buttons to the header
|
|
701
701
|
|
|
702
702
|
\`\`\`jsx
|
|
703
|
-
import { Accordion, AccordionItem } from "
|
|
703
|
+
import { Accordion, AccordionItem } from "@baseline-ui/core";
|
|
704
704
|
|
|
705
705
|
<Accordion>
|
|
706
706
|
<AccordionItem title="Item 1" value="item-1">
|
|
@@ -779,16 +779,19 @@ You can disable items using the \`disabledKeys\` prop. This prop accepts a set o
|
|
|
779
779
|
</Accordion>
|
|
780
780
|
\`\`\`
|
|
781
781
|
|
|
782
|
-
You can add buttons to the header of the \`AccordionItem\` component using the \`
|
|
782
|
+
You can add buttons to the header of the \`AccordionItem\` component using the \`actions\` prop. This prop accepts an array of props that are passed to the \`ActionIconButton\` component.
|
|
783
783
|
|
|
784
784
|
\`\`\`jsx
|
|
785
|
+
import { Accordion, AccordionItem } from "@baseline-ui/core";
|
|
786
|
+
import { EllipseIcon } from "@baseline-ui/icons/16";
|
|
787
|
+
|
|
785
788
|
const actions = [
|
|
786
789
|
{
|
|
787
790
|
icon: EllipseIcon,
|
|
788
791
|
"aria-label": "Edit",
|
|
789
792
|
onPress: () => alert("Edit"),
|
|
790
793
|
},
|
|
791
|
-
{ icon: EllipseIcon, label: "Delete", onPress: () => alert("Delete") },
|
|
794
|
+
{ icon: EllipseIcon, "aria-label": "Delete", onPress: () => alert("Delete") },
|
|
792
795
|
];
|
|
793
796
|
|
|
794
797
|
<Accordion style={{ width: 240 }}>
|
|
@@ -837,15 +840,15 @@ Keeping content mounted has costs:
|
|
|
837
840
|
* Can be navigated using the keyboard
|
|
838
841
|
|
|
839
842
|
| Key | Function |
|
|
840
|
-
| ------- |
|
|
843
|
+
| ------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
841
844
|
| \`Space\` | Expands or collapses the item. |
|
|
842
845
|
| \`Enter\` | Expands or collapses the item. |
|
|
843
846
|
| \`Up\` | Moves focus to the previous item. |
|
|
844
847
|
| \`Down\` | Moves focus to the next item. |
|
|
845
848
|
| \`Home\` | Moves focus to the first item. |
|
|
846
849
|
| \`End\` | Moves focus to the last item. |
|
|
847
|
-
| \`Right\` | If focus is on an item header and it contains action buttons, moves focus to the next action button. |
|
|
848
|
-
| \`Left\` | If focus is on an item header and it contains action buttons, moves focus to the previous action button. |`,props:`interface AccordionProps {
|
|
850
|
+
| \`Right\` | If focus is on an item header and it contains action buttons, moves focus to the next action button (the previous one in a right-to-left locale). |
|
|
851
|
+
| \`Left\` | If focus is on an item header and it contains action buttons, moves focus to the previous action button (the next one in a right-to-left locale). |`,props:`interface AccordionProps {
|
|
849
852
|
/**
|
|
850
853
|
* @deprecated Do not use in new components. This is a legacy block
|
|
851
854
|
* identifier; new components should exclude it via
|
|
@@ -914,6 +917,9 @@ disabledKeys?: Set<Key>
|
|
|
914
917
|
import { themeVars } from "@baseline-ui/tokens";
|
|
915
918
|
import React from "react";
|
|
916
919
|
|
|
920
|
+
import { Dialog } from "../../Dialog";
|
|
921
|
+
import { Modal, ModalContent } from "../../Modal";
|
|
922
|
+
import { TextInput } from "../../TextInput";
|
|
917
923
|
import { Accordion } from "../Accordion";
|
|
918
924
|
import { AccordionItem } from "../AccordionItem";
|
|
919
925
|
|
|
@@ -961,16 +967,23 @@ export const AccordionItemExample: React.FC<
|
|
|
961
967
|
includeDescription?: boolean;
|
|
962
968
|
showActionsOnTriggerOnly?: boolean;
|
|
963
969
|
children?: React.ReactNode;
|
|
970
|
+
itemNumbers?: number[];
|
|
971
|
+
includeFalseChild?: boolean;
|
|
964
972
|
}
|
|
965
|
-
> = ({
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
973
|
+
> = ({
|
|
974
|
+
includeActions,
|
|
975
|
+
includeDescription,
|
|
976
|
+
children,
|
|
977
|
+
itemNumbers = [1, 2, 3],
|
|
978
|
+
includeFalseChild,
|
|
979
|
+
...props
|
|
980
|
+
}) => {
|
|
981
|
+
const items = itemNumbers.map((n) => (
|
|
969
982
|
<AccordionItem
|
|
970
|
-
key={
|
|
971
|
-
title={\`Accordion Item \${
|
|
983
|
+
key={n}
|
|
984
|
+
title={\`Accordion Item \${n}\`}
|
|
972
985
|
subLabel={includeDescription ? "Value" : undefined}
|
|
973
|
-
value={\`item-\${
|
|
986
|
+
value={\`item-\${n}\`}
|
|
974
987
|
style={contentStyle}
|
|
975
988
|
actions={
|
|
976
989
|
includeActions
|
|
@@ -988,10 +1001,13 @@ export const AccordionItemExample: React.FC<
|
|
|
988
1001
|
}
|
|
989
1002
|
showActionsOnTriggerOnly={props.showActionsOnTriggerOnly}
|
|
990
1003
|
>
|
|
991
|
-
{children ||
|
|
992
|
-
\`lorem ipsum dolor sit amet consectetur adipisicing elit\`}
|
|
1004
|
+
{children || \`lorem ipsum dolor sit amet consectetur adipisicing elit\`}
|
|
993
1005
|
</AccordionItem>
|
|
994
|
-
))
|
|
1006
|
+
));
|
|
1007
|
+
|
|
1008
|
+
return (
|
|
1009
|
+
<Accordion {...props}>
|
|
1010
|
+
{includeFalseChild ? [items[0], false, ...items.slice(1), null] : items}
|
|
995
1011
|
</Accordion>
|
|
996
1012
|
);
|
|
997
1013
|
};
|
|
@@ -1068,7 +1084,32 @@ export const ControlledAccordionExample: React.FC<{
|
|
|
1068
1084
|
}}
|
|
1069
1085
|
/>
|
|
1070
1086
|
);
|
|
1071
|
-
}
|
|
1087
|
+
};
|
|
1088
|
+
|
|
1089
|
+
export const AccordionInModalExample: React.FC<{
|
|
1090
|
+
onKeyDown?: React.KeyboardEventHandler;
|
|
1091
|
+
}> = ({ onKeyDown }) => (
|
|
1092
|
+
<Modal defaultOpen={true}>
|
|
1093
|
+
<ModalContent>
|
|
1094
|
+
<Dialog aria-label="Accordion dialog">
|
|
1095
|
+
<div onKeyDown={onKeyDown}>
|
|
1096
|
+
<Accordion defaultExpandedKeys={new Set(["item-1"])}>
|
|
1097
|
+
{Array.from({ length: 2 }).map((_, i) => (
|
|
1098
|
+
<AccordionItem
|
|
1099
|
+
key={i}
|
|
1100
|
+
title={\`Accordion Item \${i + 1}\`}
|
|
1101
|
+
value={\`item-\${i + 1}\`}
|
|
1102
|
+
actions={[{ "aria-label": "Edit", icon: EllipseIcon }]}
|
|
1103
|
+
>
|
|
1104
|
+
{i === 0 ? <TextInput aria-label="Name" /> : "Second panel"}
|
|
1105
|
+
</AccordionItem>
|
|
1106
|
+
))}
|
|
1107
|
+
</Accordion>
|
|
1108
|
+
</div>
|
|
1109
|
+
</Dialog>
|
|
1110
|
+
</ModalContent>
|
|
1111
|
+
</Modal>
|
|
1112
|
+
);`},similarTo:[],figmaUrl:null},ActionButton:{id:"core-buttons-actionbutton",breadcrumb:"Core/Buttons/ActionButton",importStatement:'import { ActionButton, Menu, VariantViewer } from "@baseline-ui/core";',description:"`ActionButton` is a labeled button that triggers an action when activated by mouse, touch, or keyboard. Use it for primary user actions such as submitting a form, confirming a choice, or invoking a command.",documentation:'`ActionButton` is a labeled button that triggers an action when activated by mouse, touch, or keyboard. Use it for primary user actions such as submitting a form, confirming a choice, or invoking a command.\n\n* Mouse and touch event handling, and press state management\n* Keyboard focus management and cross browser normalization\n* Keyboard event support for Space and Enter keys\n\nYou can import the ActionButton component like so:\n\n```jsx\nimport { ActionButton } from "@baseline-ui/core";\n\nexport default function App() {\n return <ActionButton label="Click Me" />;\n}\n```\n\nIf you want to use a button that can be toggled on and off, you can use the `ToggleButton` component.\n\nThe button has six neutral variants: `primary`, `secondary`, `tertiary`, `popover`, `toolbar` and `ghost`. The default variant is `primary`. You can change the variant by passing the `variant` prop.\n\n```jsx\n<ActionButton label="Primary" />\n<ActionButton label="Secondary" variant="secondary" />\n<ActionButton label="Tertiary" variant="tertiary" />\n<ActionButton label={"Toolbar"} variant={"toolbar"} />\n<ActionButton label="Ghost" variant="ghost" />\n<ActionButton label="Popover" variant="popover" />\n```\n\n`success`, `warning` and `error` carry a support colour for actions whose outcome matters \u2014 confirming, acknowledging a risk, or deleting. Each comes in the same three emphasis levels as the neutral variants, so a support-coloured button can sit at whatever weight the surrounding layout calls for:\n\n* `{name}` \u2014 filled, for the primary action in its context\n* `{name}-secondary` \u2014 tinted fill, for a lower-emphasis action\n* `{name}-tertiary` \u2014 outline that fills with the support colour on hover and on keyboard focus\n\nWhen disabled, all three levels drop the support colour and render in the neutral disabled treatment.\n\n```jsx\n<ActionButton label="Success" variant="success" />\n<ActionButton label="Success" variant="success-secondary" />\n<ActionButton label="Success" variant="success-tertiary" />\n<ActionButton label="Warning" variant="warning" />\n<ActionButton label="Warning" variant="warning-secondary" />\n<ActionButton label="Warning" variant="warning-tertiary" />\n<ActionButton label="Error" variant="error" />\n<ActionButton label="Error" variant="error-secondary" />\n<ActionButton label="Error" variant="error-tertiary" />\n```\n\nActionButton supports three sizes: `sm` (default), `md`, and `lg`. You can change the size by passing the `size` prop.\n\n```jsx\n<ActionButton label="Small (default)" size="sm" />\n<ActionButton label="Medium" size="md" />\n<ActionButton label="Large" size="lg" />\n```\n\nYou can disable a button by passing the `isDisabled` prop. This will disable all mouse, touch, and keyboard interactions. The `-secondary` and `-tertiary` support variants are omitted below because they render identically to disabled `secondary` and `tertiary`.\n\n```jsx\n<ActionButton label="Primary" isDisabled />\n<ActionButton label="Secondary" variant="secondary" isDisabled />\n<ActionButton label="Tertiary" variant="tertiary" isDisabled />\n<ActionButton label="Ghost" variant="ghost" isDisabled />\n<ActionButton label="Toolbar" variant="toolbar" isDisabled />\n<ActionButton label="Popover" variant="popover" isDisabled />\n<ActionButton label="Success" variant="success" isDisabled />\n<ActionButton label="Warning" variant="warning" isDisabled />\n<ActionButton label="Error" variant="error" isDisabled />\n```\n\nYou can place an icon before or after the label by passing the `iconStart` or `iconEnd` props. Choose the icon entrypoint that matches your button size: `@baseline-ui/icons/16` for `sm`, `@baseline-ui/icons/20` for `md`, and `@baseline-ui/icons/24` for `lg`.\n\n```jsx\nimport { EllipseIcon } from "@baseline-ui/icons/16";\n\n<ActionButton label="Label" iconStart={EllipseIcon} />\n<ActionButton label="Label" iconEnd={EllipseIcon} />\n```\n\nYou can listen for events by passing the `onPress` prop. The `onPress` prop will fire when the button is activated by mouse, touch, or keyboard interactions.\n\n```jsx\n<ActionButton label="Click Me" onPress={() => alert("Hello World")} />\n```\n\n| Selector | Description |\n| -------------------- | -------------------------------------------------------------- |\n| \\[data-disabled] | Whether the button is disabled. |\n| \\[data-focused] | Whether the button is focused, either via a mouse or keyboard. |\n| \\[data-hovered] | Whether the button is currently hovered with a mouse. |\n| \\[data-focus-visible] | Whether the button is keyboard focused. |\n| \\[data-pressed] | Whether the button is currently pressed. |\n\n| Key | Function |\n| ------- | --------------------- |\n| `Space` | Activates the button. |\n| `Enter` | Activates the button. |',props:`interface ActionButtonProps {
|
|
1072
1113
|
/**
|
|
1073
1114
|
* The button's class name.
|
|
1074
1115
|
*/
|
|
@@ -1428,6 +1469,7 @@ size?: "sm" | "md" | "lg"
|
|
|
1428
1469
|
);`}],implementation:`import { TrashIcon } from "@baseline-ui/icons/24";
|
|
1429
1470
|
import React from "react";
|
|
1430
1471
|
|
|
1472
|
+
import { NativeButton } from "../../shared/__tests__/elementTypes";
|
|
1431
1473
|
import { ActionButton } from "../ActionButton";
|
|
1432
1474
|
|
|
1433
1475
|
import type { ActionButtonProps } from "../ActionButton.types";
|
|
@@ -1469,7 +1511,11 @@ export function ButtonWithStyleFn(props: Omit<ActionButtonProps, "style">) {
|
|
|
1469
1511
|
})}
|
|
1470
1512
|
/>
|
|
1471
1513
|
);
|
|
1472
|
-
}
|
|
1514
|
+
}
|
|
1515
|
+
|
|
1516
|
+
export const NativeButtonActionButton: React.FC<ActionButtonProps> = (
|
|
1517
|
+
props,
|
|
1518
|
+
) => <ActionButton elementType={NativeButton} {...props} />;`},similarTo:["Button"],figmaUrl:"https://www.figma.com/design/7Ft0mFZCq8fTVnTkXjTSZR/Baseline-UI?node-id=4135-79442&m=dev"},ActionGroup:{id:"core-buttons-actiongroup",breadcrumb:"Core/Buttons/ActionGroup",importStatement:'import { ActionGroup, ActionGroupCustomRendererExample } from "@baseline-ui/core";',description:"`ActionGroup` is a horizontally arranged cluster of related icon-button actions with shared spacing, tooltips, and optional single or multiple selection. Use it for sets of closely related controls, such as text alignment or formatting choices, that benefit from being presented as one unit.",documentation:`\`ActionGroup\` is a horizontally arranged cluster of related icon-button actions with shared spacing, tooltips, and optional single or multiple selection. Use it for sets of closely related controls, such as text alignment or formatting choices, that benefit from being presented as one unit.
|
|
1473
1519
|
|
|
1474
1520
|
* Groups related action buttons with consistent spacing and layout.
|
|
1475
1521
|
* Supports arrow key navigation between actions.
|
|
@@ -1776,14 +1822,14 @@ export const ActionGroupWithIconExample: React.FC<
|
|
|
1776
1822
|
* Keyboard event support for Space and Enter keys
|
|
1777
1823
|
|
|
1778
1824
|
\`\`\`jsx
|
|
1779
|
-
import { ActionIconButton } from "
|
|
1825
|
+
import { ActionIconButton } from "@baseline-ui/core";
|
|
1780
1826
|
import { EllipseIcon } from "@baseline-ui/icons/16";
|
|
1781
1827
|
|
|
1782
1828
|
<ActionIconButton icon={EllipseIcon} />;
|
|
1783
1829
|
\`\`\`
|
|
1784
1830
|
|
|
1785
1831
|
\`\`\`jsx
|
|
1786
|
-
import { ActionIconButton } from "
|
|
1832
|
+
import { ActionIconButton } from "@baseline-ui/core";
|
|
1787
1833
|
import { EllipseIcon as EllipseIcon8 } from "@baseline-ui/icons/8";
|
|
1788
1834
|
import { EllipseIcon as EllipseIcon12 } from "@baseline-ui/icons/12";
|
|
1789
1835
|
import { EllipseIcon as EllipseIcon20 } from "@baseline-ui/icons/20";
|
|
@@ -2016,6 +2062,7 @@ isExcludedFromRovingFocus?: boolean
|
|
|
2016
2062
|
);`}],implementation:`import { TrashIcon } from "@baseline-ui/icons/24";
|
|
2017
2063
|
import React from "react";
|
|
2018
2064
|
|
|
2065
|
+
import { NativeButton } from "../../shared/__tests__/elementTypes";
|
|
2019
2066
|
import { ActionIconButton } from "../ActionIconButton";
|
|
2020
2067
|
|
|
2021
2068
|
import type { ActionIconButtonProps } from "../ActionIconButton.types";
|
|
@@ -2024,7 +2071,11 @@ export const IconButtonExample: React.FC<
|
|
|
2024
2071
|
Omit<ActionIconButtonProps, "icon">
|
|
2025
2072
|
> = (props) => {
|
|
2026
2073
|
return <ActionIconButton icon={TrashIcon} {...props} />;
|
|
2027
|
-
}
|
|
2074
|
+
};
|
|
2075
|
+
|
|
2076
|
+
export const NativeButtonIconButtonExample: React.FC<
|
|
2077
|
+
Omit<ActionIconButtonProps, "icon">
|
|
2078
|
+
> = (props) => <IconButtonExample elementType={NativeButton} {...props} />;`},similarTo:[],figmaUrl:null},Actionable:{id:"core-utilities-actionable",breadcrumb:"Core/Utilities/Actionable",importStatement:`import {
|
|
2028
2079
|
Actionable,
|
|
2029
2080
|
ActionableWithComplexContent,
|
|
2030
2081
|
ActionableWithDiv,
|
|
@@ -2065,6 +2116,7 @@ import React from "react";
|
|
|
2065
2116
|
|
|
2066
2117
|
import { Box } from "../../Box";
|
|
2067
2118
|
import { Code } from "../../Code";
|
|
2119
|
+
import { NativeButton } from "../../shared/__tests__/elementTypes";
|
|
2068
2120
|
import { Text } from "../../Text";
|
|
2069
2121
|
import { Actionable } from "../Actionable";
|
|
2070
2122
|
|
|
@@ -2241,6 +2293,16 @@ export const ActionableWithComplexContent: React.FC<
|
|
|
2241
2293
|
</Box>
|
|
2242
2294
|
</Actionable>
|
|
2243
2295
|
);
|
|
2296
|
+
};
|
|
2297
|
+
|
|
2298
|
+
export const ActionableWithNativeButton: React.FC<
|
|
2299
|
+
Omit<ActionableProps, "children">
|
|
2300
|
+
> = (args) => {
|
|
2301
|
+
return (
|
|
2302
|
+
<Actionable elementType={NativeButton} {...args}>
|
|
2303
|
+
<Code>{\`{ "name": "Baseline UI" }\`}</Code>
|
|
2304
|
+
</Actionable>
|
|
2305
|
+
);
|
|
2244
2306
|
};`},similarTo:[],figmaUrl:null},AlertDialog:{id:"core-overlays-alertdialog",breadcrumb:"Core/Overlays/AlertDialog",importStatement:'import { AlertDialog, AlertDialogExample } from "@baseline-ui/core";',description:"`AlertDialog` is a modal dialog that interrupts the user's workflow with critical information and requires an explicit response via its action buttons. Use it to confirm destructive or irreversible actions, or to surface important messages that the user must acknowledge before continuing.",documentation:`\`AlertDialog\` is a modal dialog that interrupts the user's workflow with critical information and requires an explicit response via its action buttons. Use it to confirm destructive or irreversible actions, or to surface important messages that the user must acknowledge before continuing.
|
|
2245
2307
|
|
|
2246
2308
|
<a href="?path=/story/core-overlays-alertdialog--basic">View story</a>
|
|
@@ -2559,7 +2621,7 @@ export const AlertDialogWithIconExample: React.FC<
|
|
|
2559
2621
|
* Supports mouse, keyboard, and touch interactions
|
|
2560
2622
|
|
|
2561
2623
|
\`\`\`jsx
|
|
2562
|
-
import { AudioPlayer } from "@
|
|
2624
|
+
import { AudioPlayer } from "@baseline-ui/core";
|
|
2563
2625
|
|
|
2564
2626
|
function App() {
|
|
2565
2627
|
return (
|
|
@@ -2567,16 +2629,13 @@ function App() {
|
|
|
2567
2629
|
sources={[
|
|
2568
2630
|
{
|
|
2569
2631
|
url: "sound.mp3",
|
|
2570
|
-
type: "audio/
|
|
2632
|
+
type: "audio/mpeg",
|
|
2571
2633
|
},
|
|
2572
2634
|
]}
|
|
2573
|
-
aria-label="
|
|
2635
|
+
aria-label="Audio Player"
|
|
2574
2636
|
/>
|
|
2575
2637
|
);
|
|
2576
2638
|
}
|
|
2577
|
-
\`\`\`
|
|
2578
|
-
|
|
2579
|
-
\`\`\`
|
|
2580
2639
|
\`\`\``,props:`interface AudioPlayerProps {
|
|
2581
2640
|
/**
|
|
2582
2641
|
* @deprecated Do not use in new components. This is a legacy block
|
|
@@ -2698,7 +2757,7 @@ export function SwitchableSourcePlayer() {
|
|
|
2698
2757
|
}`},similarTo:[],figmaUrl:null},Avatar:{id:"core-content-avatar",breadcrumb:"Core/Content/Avatar",importStatement:'import { Avatar, VariantViewer } from "@baseline-ui/core";',description:"`Avatar` is a small visual representation of a user, showing either a profile image or initials derived from the user's name. Use it to identify people in lists, comments, mentions, or anywhere a user needs to be visually attributed.",documentation:`\`Avatar\` is a small visual representation of a user, showing either a profile image or initials derived from the user's name. Use it to identify people in lists, comments, mentions, or anywhere a user needs to be visually attributed.
|
|
2699
2758
|
|
|
2700
2759
|
\`\`\`jsx
|
|
2701
|
-
import { Avatar } from "
|
|
2760
|
+
import { Avatar } from "@baseline-ui/core";
|
|
2702
2761
|
|
|
2703
2762
|
<Avatar name="John Doe" />;
|
|
2704
2763
|
\`\`\`
|
|
@@ -2868,7 +2927,27 @@ hasNotifications?: boolean
|
|
|
2868
2927
|
}}
|
|
2869
2928
|
defaultProps={args}
|
|
2870
2929
|
/>
|
|
2871
|
-
);`},{id:"core-content-avatar--with-image",name:"With Image",snippet:'const WithImage = () => <Avatar name="John Doe" imgSrc="/avatar.png" />;'},{id:"core-content-avatar--with-initials",name:"With Initials",snippet:'const WithInitials = () => <Avatar name="John Doe" showInitials />;'},{id:"core-content-avatar--disabled",name:"Disabled",snippet:'const Disabled = () => <Avatar name="John Doe" isDisabled />;'},{id:"core-content-avatar--with-notification",name:"With Notification",snippet:'const WithNotification = () => <Avatar name="John Doe" hasNotifications />;'}],implementation
|
|
2930
|
+
);`},{id:"core-content-avatar--with-image",name:"With Image",snippet:'const WithImage = () => <Avatar name="John Doe" imgSrc="/avatar.png" />;'},{id:"core-content-avatar--with-initials",name:"With Initials",snippet:'const WithInitials = () => <Avatar name="John Doe" showInitials />;'},{id:"core-content-avatar--disabled",name:"Disabled",snippet:'const Disabled = () => <Avatar name="John Doe" isDisabled />;'},{id:"core-content-avatar--with-notification",name:"With Notification",snippet:'const WithNotification = () => <Avatar name="John Doe" hasNotifications />;'}],implementation:`import React, { useState } from "react";
|
|
2931
|
+
|
|
2932
|
+
import { ActionButton } from "../../ActionButton";
|
|
2933
|
+
import { Avatar } from "../Avatar";
|
|
2934
|
+
|
|
2935
|
+
export const AvatarSourcesExample: React.FC<{ sources: string[] }> = ({
|
|
2936
|
+
sources,
|
|
2937
|
+
}) => {
|
|
2938
|
+
const [index, setIndex] = useState(0);
|
|
2939
|
+
return (
|
|
2940
|
+
<>
|
|
2941
|
+
<Avatar name="John Doe" showInitials={true} imgSrc={sources[index]} />
|
|
2942
|
+
<ActionButton
|
|
2943
|
+
label="Next source"
|
|
2944
|
+
onPress={() => {
|
|
2945
|
+
setIndex((i) => (i + 1) % sources.length);
|
|
2946
|
+
}}
|
|
2947
|
+
/>
|
|
2948
|
+
</>
|
|
2949
|
+
);
|
|
2950
|
+
};`},similarTo:[],figmaUrl:null},Box:{id:"core-utilities-box",breadcrumb:"Core/Utilities/Box",importStatement:'import { Box } from "@baseline-ui/core";',description:"`Box` is a polymorphic container that exposes layout, spacing, and color design tokens as props, with responsive array values for breakpoints. Use it as the foundational building block for composing theme-aware layouts without writing custom CSS.",documentation:`\`Box\` is a polymorphic container that exposes layout, spacing, and color design tokens as props, with responsive array values for breakpoints. Use it as the foundational building block for composing theme-aware layouts without writing custom CSS.
|
|
2872
2951
|
|
|
2873
2952
|
* Consistent API for layout, spacing, and styling via sprinkle props
|
|
2874
2953
|
* Theme-aware \u2014 automatically applies correct styling based on the active theme
|
|
@@ -4435,8 +4514,10 @@ import React, { useState } from "react";
|
|
|
4435
4514
|
import { ActionButton } from "../../ActionButton";
|
|
4436
4515
|
import { ActionIconButton } from "../../ActionIconButton";
|
|
4437
4516
|
import { Box } from "../../Box";
|
|
4517
|
+
import { Div, NativeButton } from "../../shared/__tests__/elementTypes";
|
|
4438
4518
|
import { Text } from "../../Text";
|
|
4439
4519
|
import { ColorInput } from "../ColorInput";
|
|
4520
|
+
import { IconColorInputButton } from "../ColorInputButton";
|
|
4440
4521
|
import { IconColorInput } from "../IconColorInput";
|
|
4441
4522
|
import { presets } from "./data";
|
|
4442
4523
|
|
|
@@ -4557,7 +4638,25 @@ export const StoredCustomColorsExample: React.FC<{ storageKey: string }> = ({
|
|
|
4557
4638
|
|
|
4558
4639
|
export const IconColorInputExample: React.FC<
|
|
4559
4640
|
Omit<IconColorInputProps, "icon">
|
|
4560
|
-
> = (props) => <IconColorInput icon={BorderColorIcon} {...props}
|
|
4641
|
+
> = (props) => <IconColorInput icon={BorderColorIcon} {...props} />;
|
|
4642
|
+
|
|
4643
|
+
type IconColorInputButtonProps = React.ComponentProps<
|
|
4644
|
+
typeof IconColorInputButton
|
|
4645
|
+
>;
|
|
4646
|
+
|
|
4647
|
+
export const IconColorInputButtonExample: React.FC<
|
|
4648
|
+
Omit<IconColorInputButtonProps, "icon">
|
|
4649
|
+
> = (props) => <IconColorInputButton icon={BorderColorIcon} {...props} />;
|
|
4650
|
+
|
|
4651
|
+
export const DivIconColorInputButtonExample: React.FC<
|
|
4652
|
+
Omit<IconColorInputButtonProps, "icon">
|
|
4653
|
+
> = (props) => <IconColorInputButtonExample elementType={Div} {...props} />;
|
|
4654
|
+
|
|
4655
|
+
export const NativeButtonIconColorInputButtonExample: React.FC<
|
|
4656
|
+
Omit<IconColorInputButtonProps, "icon">
|
|
4657
|
+
> = (props) => (
|
|
4658
|
+
<IconColorInputButtonExample elementType={NativeButton} {...props} />
|
|
4659
|
+
);`},similarTo:[],figmaUrl:null},ColorSwatch:{id:"core-content-colorswatch",breadcrumb:"Core/Content/ColorSwatch",importStatement:'import { Box, ColorSwatch, VariantViewer } from "@baseline-ui/core";',description:'`ColorSwatch` is a small tile that visually represents a single color value, with built-in handling for transparency, "none", and indeterminate states. Use it to preview a color inside pickers, lists, or anywhere a color value needs to be shown next to its label.',documentation:`\`ColorSwatch\` is a small tile that visually represents a single color value, with built-in handling for transparency, "none", and indeterminate states. Use it to preview a color inside pickers, lists, or anywhere a color value needs to be shown next to its label.
|
|
4561
4660
|
|
|
4562
4661
|
* Accessible color representation with screen reader support via aria-label
|
|
4563
4662
|
* Support for transparent colors with a checkered background pattern
|
|
@@ -4567,7 +4666,7 @@ export const IconColorInputExample: React.FC<
|
|
|
4567
4666
|
* Support for indeterminate state with customizable icon
|
|
4568
4667
|
|
|
4569
4668
|
\`\`\`jsx
|
|
4570
|
-
import { ColorSwatch } from "
|
|
4669
|
+
import { ColorSwatch } from "@baseline-ui/core";
|
|
4571
4670
|
|
|
4572
4671
|
<ColorSwatch color="#ff0000" />;
|
|
4573
4672
|
\`\`\`
|
|
@@ -4771,10 +4870,10 @@ noneLabel?: string
|
|
|
4771
4870
|
* Supports keyboard navigation.
|
|
4772
4871
|
|
|
4773
4872
|
\`\`\`jsx
|
|
4774
|
-
import { ColorSwatchPicker } from "
|
|
4873
|
+
import { ColorSwatchPicker } from "@baseline-ui/core";
|
|
4775
4874
|
|
|
4776
4875
|
<ColorSwatchPicker
|
|
4777
|
-
|
|
4876
|
+
items={[
|
|
4778
4877
|
{ color: "#ff0000", label: "Red" },
|
|
4779
4878
|
{ color: "#00ff00", label: "Green" },
|
|
4780
4879
|
{ color: "#0000ff", label: "Blue" },
|
|
@@ -4787,10 +4886,7 @@ import { ColorSwatchPicker } from "../../utils";
|
|
|
4787
4886
|
| Up Arrow | Move focus to the previous item in the list |
|
|
4788
4887
|
| Down Arrow | Move focus to the next item in the list |
|
|
4789
4888
|
| Left Arrow | Move focus to the previous item in the list |
|
|
4790
|
-
| Right Arrow | Move focus to the next item in the list
|
|
4791
|
-
|
|
4792
|
-
\`\`\`
|
|
4793
|
-
\`\`\``,props:`interface ColorSwatchPickerProps {
|
|
4889
|
+
| Right Arrow | Move focus to the next item in the list |`,props:`interface ColorSwatchPickerProps {
|
|
4794
4890
|
/**
|
|
4795
4891
|
* @deprecated Do not use in new components. This is a legacy block
|
|
4796
4892
|
* identifier; new components should exclude it via
|
|
@@ -4844,7 +4940,8 @@ items: ColorPreset[]
|
|
|
4844
4940
|
icon?: React.FC<IconProps>
|
|
4845
4941
|
/**
|
|
4846
4942
|
* The value of the selected item. This is useful if you want to control the
|
|
4847
|
-
* value of the picker.
|
|
4943
|
+
* value of the picker. It selects the item with the same colour however
|
|
4944
|
+
* either is written, so \`"#FF0000"\` or \`"red"\` selects a \`"#ff0000"\` item.
|
|
4848
4945
|
*/
|
|
4849
4946
|
value?: string
|
|
4850
4947
|
/**
|
|
@@ -4852,7 +4949,7 @@ value?: string
|
|
|
4852
4949
|
*/
|
|
4853
4950
|
onChange?: (value?: string) => void
|
|
4854
4951
|
/**
|
|
4855
|
-
* The default value of the picker.
|
|
4952
|
+
* The default value of the picker. Matched to an item like \`value\`.
|
|
4856
4953
|
*/
|
|
4857
4954
|
defaultValue?: string
|
|
4858
4955
|
/**
|
|
@@ -4927,9 +5024,12 @@ const items = colorItems.map((item) => ({
|
|
|
4927
5024
|
}));
|
|
4928
5025
|
|
|
4929
5026
|
export const ColorSwatchPickerExample: React.FC<
|
|
4930
|
-
Omit<ColorSwatchPickerProps, "items">
|
|
5027
|
+
Omit<ColorSwatchPickerProps, "items"> & {
|
|
5028
|
+
/** Defaults to black, white and red, each written as hex. */
|
|
5029
|
+
items?: ColorSwatchPickerProps["items"];
|
|
5030
|
+
}
|
|
4931
5031
|
> = (props) => (
|
|
4932
|
-
<ColorSwatchPicker aria-label="Colors"
|
|
5032
|
+
<ColorSwatchPicker aria-label="Colors" items={items} {...props} />
|
|
4933
5033
|
);
|
|
4934
5034
|
|
|
4935
5035
|
export const ControlledColorSwatchPickerExample: React.FC = () => {
|
|
@@ -6473,12 +6573,18 @@ openCalendarLabel?: string
|
|
|
6473
6573
|
granularity="day"
|
|
6474
6574
|
pickerType="calendar"
|
|
6475
6575
|
validationState="error"
|
|
6476
|
-
errorMessage="Invalid date" />;`}],implementation:`import {
|
|
6576
|
+
errorMessage="Invalid date" />;`}],implementation:`import {
|
|
6577
|
+
CalendarDate,
|
|
6578
|
+
CalendarDateTime,
|
|
6579
|
+
parseDate,
|
|
6580
|
+
parseZonedDateTime,
|
|
6581
|
+
} from "@internationalized/date";
|
|
6477
6582
|
import React from "react";
|
|
6478
6583
|
|
|
6479
6584
|
import { DateField } from "../DateField";
|
|
6480
6585
|
|
|
6481
6586
|
import type { DateFieldProps } from "../DateField.types";
|
|
6587
|
+
import type { DateValue } from "react-aria";
|
|
6482
6588
|
|
|
6483
6589
|
export const DateFieldExample: React.FC<
|
|
6484
6590
|
Omit<DateFieldProps, "defaultValue" | "value" | "createCalendar"> & {
|
|
@@ -6508,6 +6614,66 @@ export const MinMaxDateFieldExample: React.FC<
|
|
|
6508
6614
|
maxValue={new CalendarDate(2022, 6, 30)}
|
|
6509
6615
|
/>
|
|
6510
6616
|
);
|
|
6617
|
+
};
|
|
6618
|
+
|
|
6619
|
+
const placeholders = {
|
|
6620
|
+
dateTime: new CalendarDateTime(2022, 11, 7, 9, 30),
|
|
6621
|
+
zonedDateTime: parseZonedDateTime("2022-11-07T09:30[America/Los_Angeles]"),
|
|
6622
|
+
};
|
|
6623
|
+
|
|
6624
|
+
export const ControlledDateTimeFieldExample: React.FC<{
|
|
6625
|
+
placeholder?: keyof typeof placeholders;
|
|
6626
|
+
initialValue?: keyof typeof placeholders;
|
|
6627
|
+
}> = ({ placeholder, initialValue }) => {
|
|
6628
|
+
const [value, setValue] = React.useState<DateValue | null>(
|
|
6629
|
+
initialValue ? placeholders[initialValue] : null,
|
|
6630
|
+
);
|
|
6631
|
+
return (
|
|
6632
|
+
<>
|
|
6633
|
+
<button
|
|
6634
|
+
onClick={() => {
|
|
6635
|
+
setValue(null);
|
|
6636
|
+
}}
|
|
6637
|
+
>
|
|
6638
|
+
Clear
|
|
6639
|
+
</button>
|
|
6640
|
+
<button
|
|
6641
|
+
onClick={() => {
|
|
6642
|
+
setValue(placeholders.zonedDateTime);
|
|
6643
|
+
}}
|
|
6644
|
+
>
|
|
6645
|
+
Set zoned value
|
|
6646
|
+
</button>
|
|
6647
|
+
<DateField
|
|
6648
|
+
label="Label"
|
|
6649
|
+
granularity="minute"
|
|
6650
|
+
pickerType="calendar"
|
|
6651
|
+
placeholderValue={placeholder ? placeholders[placeholder] : undefined}
|
|
6652
|
+
value={value}
|
|
6653
|
+
onChange={setValue}
|
|
6654
|
+
/>
|
|
6655
|
+
<output data-testid="value">{value?.toString() ?? ""}</output>
|
|
6656
|
+
</>
|
|
6657
|
+
);
|
|
6658
|
+
};
|
|
6659
|
+
|
|
6660
|
+
export const UnavailableDateFieldExample: React.FC = () => {
|
|
6661
|
+
const [value, setValue] = React.useState<DateValue | null>(
|
|
6662
|
+
new CalendarDate(2022, 11, 7),
|
|
6663
|
+
);
|
|
6664
|
+
return (
|
|
6665
|
+
<>
|
|
6666
|
+
<DateField
|
|
6667
|
+
label="Label"
|
|
6668
|
+
granularity="day"
|
|
6669
|
+
pickerType="calendar"
|
|
6670
|
+
value={value}
|
|
6671
|
+
onChange={setValue}
|
|
6672
|
+
isDateUnavailable={(date) => date.day === 15}
|
|
6673
|
+
/>
|
|
6674
|
+
<output data-testid="value">{value?.toString() ?? ""}</output>
|
|
6675
|
+
</>
|
|
6676
|
+
);
|
|
6511
6677
|
};`},similarTo:[],figmaUrl:null},DateFormat:{id:"core-utilities-dateformat",breadcrumb:"Core/Utilities/DateFormat",importStatement:'import { DateFormat } from "@baseline-ui/core";',description:"`DateFormat` is a component that formats a `Date` into a localized string. It is built on top of [Intl.DateTimeFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat).",documentation:`\`DateFormat\` is a component that formats a \`Date\` into a localized string. It is built on top of [Intl.DateTimeFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat).
|
|
6512
6678
|
|
|
6513
6679
|
\`\`\`jsx
|
|
@@ -6604,22 +6770,17 @@ automatically applies the correct breakpoints to sprinkles.`,documentation:`The
|
|
|
6604
6770
|
automatically applies the correct breakpoints to sprinkles.
|
|
6605
6771
|
|
|
6606
6772
|
\`\`\`jsx
|
|
6607
|
-
import { DeviceProvider } from "
|
|
6608
|
-
import { YourApp } from "./YourApp";
|
|
6773
|
+
import { DeviceProvider } from "@baseline-ui/core";
|
|
6609
6774
|
|
|
6610
6775
|
function App() {
|
|
6611
|
-
return
|
|
6612
|
-
<DeviceProvider>
|
|
6613
|
-
<YourApp />
|
|
6614
|
-
</DeviceProvider>
|
|
6615
|
-
);
|
|
6776
|
+
return <DeviceProvider>{/* Your app */}</DeviceProvider>;
|
|
6616
6777
|
}
|
|
6617
6778
|
\`\`\`
|
|
6618
6779
|
|
|
6619
6780
|
You can access the device information in your components using the \`useDevice\` hook:
|
|
6620
6781
|
|
|
6621
6782
|
\`\`\`jsx
|
|
6622
|
-
import { useDevice } from "
|
|
6783
|
+
import { useDevice } from "@baseline-ui/core";
|
|
6623
6784
|
|
|
6624
6785
|
function ResponsiveComponent() {
|
|
6625
6786
|
const device = useDevice();
|
|
@@ -6638,7 +6799,7 @@ function ResponsiveComponent() {
|
|
|
6638
6799
|
You can customize the breakpoints used to determine device types by passing a \`breakpoints\` prop to the \`DeviceProvider\`. These breakpoints represent the minimum width values for each device category.
|
|
6639
6800
|
|
|
6640
6801
|
\`\`\`jsx
|
|
6641
|
-
import { DeviceProvider } from "
|
|
6802
|
+
import { DeviceProvider } from "@baseline-ui/core";
|
|
6642
6803
|
|
|
6643
6804
|
function App() {
|
|
6644
6805
|
return (
|
|
@@ -6823,13 +6984,14 @@ export const TestComponent = ({
|
|
|
6823
6984
|
|
|
6824
6985
|
\`\`\`jsx
|
|
6825
6986
|
import {
|
|
6987
|
+
ActionButton,
|
|
6826
6988
|
Dialog,
|
|
6827
6989
|
Modal,
|
|
6828
6990
|
ModalTrigger,
|
|
6829
6991
|
ModalContent,
|
|
6830
6992
|
ModalClose,
|
|
6831
6993
|
DialogTitle,
|
|
6832
|
-
} from "
|
|
6994
|
+
} from "@baseline-ui/core";
|
|
6833
6995
|
|
|
6834
6996
|
<Modal>
|
|
6835
6997
|
<ModalTrigger>
|
|
@@ -6939,11 +7101,37 @@ import { DialogTitle } from "../DialogTitle";
|
|
|
6939
7101
|
import type { ModalContentProps, ModalProps } from "../../Modal";
|
|
6940
7102
|
import type { DialogProps } from "../Dialog.types";
|
|
6941
7103
|
|
|
7104
|
+
const TITLE_IMAGE =
|
|
7105
|
+
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==";
|
|
7106
|
+
|
|
7107
|
+
const RefDroppingTitle = (props: React.ComponentProps<"h3">) => (
|
|
7108
|
+
<h3 {...props} ref={null} />
|
|
7109
|
+
);
|
|
7110
|
+
|
|
7111
|
+
const IdDroppingTitle = (props: React.ComponentProps<"h3">) => (
|
|
7112
|
+
<h3 {...props} id={undefined} />
|
|
7113
|
+
);
|
|
7114
|
+
|
|
6942
7115
|
export const DialogExample: React.FC<{
|
|
6943
7116
|
modalProps?: Omit<ModalProps, "children">;
|
|
6944
7117
|
contentProps?: Omit<ModalContentProps, "children">;
|
|
6945
7118
|
dialogProps?: Omit<React.ComponentProps<typeof Dialog>, "children">;
|
|
6946
|
-
|
|
7119
|
+
renamedTitle?: string;
|
|
7120
|
+
titleDrops?: "ref" | "id";
|
|
7121
|
+
imageOnlyTitle?: boolean;
|
|
7122
|
+
titleStyle?: React.CSSProperties;
|
|
7123
|
+
remountTitleOnRename?: boolean;
|
|
7124
|
+
}> = ({
|
|
7125
|
+
modalProps,
|
|
7126
|
+
contentProps,
|
|
7127
|
+
dialogProps,
|
|
7128
|
+
renamedTitle,
|
|
7129
|
+
titleDrops,
|
|
7130
|
+
titleStyle,
|
|
7131
|
+
remountTitleOnRename,
|
|
7132
|
+
imageOnlyTitle,
|
|
7133
|
+
}) => {
|
|
7134
|
+
const [title, setTitle] = useState("Dialog Title");
|
|
6947
7135
|
return (
|
|
6948
7136
|
<Modal {...modalProps}>
|
|
6949
7137
|
<ModalTrigger>
|
|
@@ -6957,12 +7145,36 @@ export const DialogExample: React.FC<{
|
|
|
6957
7145
|
"PSPDFKit-Dialog",
|
|
6958
7146
|
)}
|
|
6959
7147
|
>
|
|
6960
|
-
<DialogTitle style={{ marginBottom: 10 }}>
|
|
6961
|
-
|
|
6962
|
-
|
|
7148
|
+
<DialogTitle style={{ marginBottom: 10, ...titleStyle }}>
|
|
7149
|
+
{imageOnlyTitle ? (
|
|
7150
|
+
<h3>
|
|
7151
|
+
<img alt="Settings" src={TITLE_IMAGE} />
|
|
7152
|
+
</h3>
|
|
7153
|
+
) : titleDrops === "ref" ? (
|
|
7154
|
+
<RefDroppingTitle>{title}</RefDroppingTitle>
|
|
7155
|
+
) : titleDrops === "id" ? (
|
|
7156
|
+
<IdDroppingTitle>{title}</IdDroppingTitle>
|
|
7157
|
+
) : (
|
|
7158
|
+
<Text
|
|
7159
|
+
key={remountTitleOnRename ? title : undefined}
|
|
7160
|
+
className="PSPDFKit-Title"
|
|
7161
|
+
type="title"
|
|
7162
|
+
elementType="h3"
|
|
7163
|
+
>
|
|
7164
|
+
{title}
|
|
6963
7165
|
</Text>
|
|
7166
|
+
)}
|
|
6964
7167
|
</DialogTitle>
|
|
6965
7168
|
|
|
7169
|
+
{renamedTitle ? (
|
|
7170
|
+
<ActionButton
|
|
7171
|
+
label="Rename title"
|
|
7172
|
+
onPress={() => {
|
|
7173
|
+
setTitle(renamedTitle);
|
|
7174
|
+
}}
|
|
7175
|
+
/>
|
|
7176
|
+
) : null}
|
|
7177
|
+
|
|
6966
7178
|
<TextInput
|
|
6967
7179
|
className="PSPDFKit-Input"
|
|
6968
7180
|
label="Label"
|
|
@@ -7625,7 +7837,7 @@ export const TruncatedTitleDisclosure: React.FC = () => {
|
|
|
7625
7837
|
</Disclosure>
|
|
7626
7838
|
</div>
|
|
7627
7839
|
);
|
|
7628
|
-
};`},similarTo:[],figmaUrl:null},Drawer:{id:"core-overlays-drawer",breadcrumb:"Core/Overlays/Drawer",importStatement:'import { Drawer } from "@baseline-ui/core";',description:"`Drawer` is a modal panel that slides in from the edge of the screen to host secondary content or actions. Use it for tasks like editing details, viewing settings, or filtering, where the user should stay anchored to the main view.",documentation:'`Drawer` is a modal panel that slides in from the edge of the screen to host secondary content or actions. Use it for tasks like editing details, viewing settings, or filtering, where the user should stay anchored to the main view.\n\n* Exposed to assistive technologies as a `dialog` using ARIA `role="dialog"`. The content outside the dialog is hidden from assistive technologies to prevent it from being read while the dialog is open.\n* Focus is moved into the dialog on mount, and restored to the trigger element on unmount. While open, focus is contained within the dialog, preventing the user from tabbing outside.\n\n```jsx\nimport { Drawer } from "
|
|
7840
|
+
};`},similarTo:[],figmaUrl:null},Drawer:{id:"core-overlays-drawer",breadcrumb:"Core/Overlays/Drawer",importStatement:'import { Drawer } from "@baseline-ui/core";',description:"`Drawer` is a modal panel that slides in from the edge of the screen to host secondary content or actions. Use it for tasks like editing details, viewing settings, or filtering, where the user should stay anchored to the main view.",documentation:'`Drawer` is a modal panel that slides in from the edge of the screen to host secondary content or actions. Use it for tasks like editing details, viewing settings, or filtering, where the user should stay anchored to the main view.\n\n* Exposed to assistive technologies as a `dialog` using ARIA `role="dialog"`. The content outside the dialog is hidden from assistive technologies to prevent it from being read while the dialog is open.\n* Focus is moved into the dialog on mount, and restored to the trigger element on unmount. While open, focus is contained within the dialog, preventing the user from tabbing outside.\n\n```jsx\nimport { Drawer } from "@baseline-ui/core";\n\n<Drawer title="Drawer Title" onCloseRequest={() => {}}>\n <div>Drawer Content</div>\n</Drawer>;\n```\n\nThis component has two background variants: `medium` and `subtle`. The `medium` variant is used for the default background, and the `subtle` variant is used for the background.\n\nThe `Drawer` component can have an additional action button that is displayed at the top of the drawer. This button is used to perform an action, such as saving or submitting the content in the drawer.\n\nThe `Drawer` component can have different types of dialogs, such as `dialog` and `alertdialog`. The `dialog` type is used for dialogs that require user input, and the `alertdialog` type is used for dialogs that require user attention. The default\ntype is `dialog`.\n\n```jsx\n<Drawer title="Drawer Title" type="alertdialog" onCloseRequest={() => {}}>\n <div>Dialog Content</div>\n</Drawer>\n```',props:`interface DrawerProps {
|
|
7629
7841
|
/**
|
|
7630
7842
|
* @deprecated Do not use in new components. This is a legacy block
|
|
7631
7843
|
* identifier; new components should exclude it via
|
|
@@ -7717,7 +7929,7 @@ export const DrawerWithActionExample: React.FC<{
|
|
|
7717
7929
|
Drawer Content
|
|
7718
7930
|
</Drawer>
|
|
7719
7931
|
);
|
|
7720
|
-
};`},similarTo:[],figmaUrl:null},Editor:{id:"core-miscellaneous-editor-rich-text",breadcrumb:"Core/Miscellaneous/Editor",importStatement:'import { Box, Editor, EditorAutoFocusOnMount, Separator } from "@baseline-ui/core";',description:"`Editor` is a text input area that supports either plain text or rich text with formatting, links, and @-mentions. Use it for comments, notes, descriptions, or any free-form content where users need more than a single-line input.",documentation:'`Editor` is a text input area that supports either plain text or rich text with formatting, links, and @-mentions. Use it for comments, notes, descriptions, or any free-form content where users need more than a single-line input.\n\n* supports rich text editing, including bold, italic and underline formatting.\n* supports font color and background color formatting\n* supports link creation, editing and removal\n* supports plain text editing\n* supports mouse, keyboard and touch interactions.\n* Exposed to the screen-readers and other assistive technologies using ARIA.\n* Mention support with user search and keyboard navigation\n* Keyboard shortcuts for common actions (submit, toolbar focus, help)\n* Imperative handle API (`editorHandle`) for programmatic focus and caret positioning\n* Custom footer buttons (action and toggle types)\n* Clear on save/cancel behavior\n* Auto-focus with configurable caret position\n\nYou can import the Editor component like so:\n\n```jsx\nimport { Editor } from "@baseline-ui/core";\n\nexport default function App() {\n return (\n <Editor\n aria-label="Comment"\n placeholder="Write a comment..."\n onSave={(value) => {\n console.log(value);\n }}\n />\n );\n}\n```\n\nIf you only need a single-line plain text input, use the `TextInput` component instead.\n\nThe `Editor` component has multiple variants that can be used to customize the appearance and behavior of the component.\n\n* `default` - the default variant\n* `minimal` - a minimal variant that removes the toolbar and only allows plain text editing.\n\n```jsx\n<Editor\n aria-label="Editor"\n variant="minimal"\n avatarName="John Doe"\n spellCheck={false}\n placeholder="Type something..."\n defaultValue="This is a minimal editor"\n/>\n```\n\nIn the example above, the `variant` prop is used to set the variant to `minimal`. This removes the toolbar and only allows plain text editing.\nThe first editor passes `isInline={false}`; the second one keeps the default inline rendering, which shows the avatar (set via `avatarName`) next to the input.\n\nYou can enable rich text editing by setting the `enableRichText` prop to `true`. This will enable the rich text toolbar and allow users to format the text. The default value is `false`.\n\n```jsx\n<Editor\n aria-label="Editor"\n placeholder="Placeholder"\n enableRichText\n defaultValue="<p>This is a rich editor. It supports <b>bold</b>, <i>italic</i>, and <u>underline</u>. <a href=\'https://example.com\'>Links</a> are also supported.</p><br/><p>You can set both <span style=\'color: #ac0000; background-color: #ffffff;\'>font color</span> and <span style=\'background-color: #ffff00; color: #000000;\'>background color</span>.</p>"\n/>\n```\n\nYou can set a placeholder for the editor by using the `placeholder` prop. This will display a placeholder when the editor is empty.\n\nThe `Editor` component can be controlled by using the `value` and `onChange` props together. This allows you to control the value of the editor from the parent component, in both plain text and rich text mode.\n\nFor uncontrolled usage, set the initial content with `defaultValue` and read edits via `onChange` or `onSave` \u2014 the editor manages its own state afterwards.\n\nFor backwards compatibility, passing `value` without `onChange` in rich text mode sets the initial content only (it behaves like `defaultValue`), matching the behavior of earlier versions.\n\nThe same pattern works in rich text mode \u2014 controlled rich text requires both `value` and `onChange`:\n\n```jsx\nfunction ControlledRichTextEditor() {\n const [value, setValue] = React.useState(\n "<p>This is a <b>controlled</b> rich text editor</p>",\n );\n\n return (\n <Editor\n aria-label="Editor"\n enableRichText\n placeholder="Type something..."\n value={value}\n onChange={(newValue) => {\n setValue(newValue);\n }}\n />\n );\n}\n```\n\nThe `Editor` component can be disabled by using the `isDisabled` prop. This will disable the editor and prevent users from editing the content.\n\nThe `Editor` component supports mentions. You can enable mentions by passing the `mentionableUsers` prop, an array of `MentionableUser` objects with required `id`, `name`, and `displayName` properties, plus optional `avatar` and `description`. The `id` should be unique for each user, `name` is the username matched while typing, and `displayName` is the label rendered for the mention.\nThe mentions feature only works when `enableRichText` is set to `true`. Users can start a mention by typing `@` in the editor or by pressing the mention (@) button in the footer.\nPasted or dropped mentions are checked against `mentionableUsers`: a mention of a listed user takes that user\'s label, and any other mention, including every mention while `mentionableUsers` is undefined, becomes plain `@Name` text. This also applies when users cut and paste or drag a mention within the editor.\n\n```jsx\n<Editor\n aria-label="Editor"\n placeholder="Placeholder"\n enableRichText\n defaultValue="Mentioning <span data-user-id=\'john-doe\'>John Doe</span>."\n mentionableUsers={[\n {\n id: "1",\n name: "john.doe",\n displayName: "John Doe",\n description: "john@gmail.com",\n },\n {\n id: "2",\n name: "jane.doe",\n displayName: "Jane Doe",\n description: "jane@gmail.com",\n },\n ]}\n/>\n```\n\nYou can add custom buttons to the footer by using the `footerButtons` prop. This prop is an array of objects of the shape `{ type: "action" | "toggle", props: {...} }`, where `props` accepts the `ActionIconButton` props (for `type: "action"`) or the `ToggleIconButton` props (for `type: "toggle"`), except `size` and `variant`, which are set by the editor.\n\n```jsx\nimport { AnonymousIcon } from "@baseline-ui/icons/16";\n\n<Editor\n aria-label="Editor"\n enableRichText\n footerButtons={[\n {\n type: "toggle",\n props: {\n "aria-label": "Save",\n icon: AnonymousIcon,\n onPress: () => {\n alert("Save");\n },\n },\n },\n ]}\n/>;\n```\n\n| Key | Function |\n| ------------------------------ | -------------------------------------------------------- |\n| `Ctrl+B` / `Cmd+B` | Toggle bold (rich text mode) |\n| `Ctrl+I` / `Cmd+I` | Toggle italic (rich text mode) |\n| `Ctrl+U` / `Cmd+U` | Toggle underline (rich text mode) |\n| `Ctrl+Z` / `Cmd+Z` | Undo (rich text mode) |\n| `Ctrl+Shift+Z` / `Cmd+Shift+Z` | Redo (rich text mode) |\n| `Ctrl+Y` | Redo (rich text mode) |\n| `@` | Start a mention (rich text mode with `mentionableUsers`) |\n| `Alt+F10` | Focus toolbar (rich text mode) |\n| `Ctrl+Enter` / `Cmd+Enter` | Submit (always) |\n| `Enter` | Submit (when `saveOnEnter` is true) |\n| `Shift+Enter` | New line |\n| `Ctrl+Shift+H` / `Cmd+Shift+H` | Open help dialog (rich text mode) |\n| `Escape` | Close mention input / help dialog |\n| `Tab` | Focus next |\n| `Shift+Tab` | Focus previous |\n\nWhen `saveOnEnter` is set to `true`, pressing the `Enter` key will submit the editor instead of creating a new line. This is useful for single-line text inputs or quick note-taking scenarios.\n\nThe `clearOnSave` and `clearOnCancel` props clear the editor content after the respective action completes. These are useful for resetting the editor after submission or cancellation.\n\nThe `autoFocus` prop allows you to focus the editor on mount with optional caret positioning:\n\n* `true` - Focus on mount, caret at default position\n* `"start"` - Focus on mount, caret at position 0\n* `"end"` - Focus on mount, caret at end of text\n\nThe `editorHandle` ref provides imperative methods for programmatic control:\n\n* `focus()` - Focus the editor\n* `setCaretPosition(index)` - Position the caret at a specific index\n\nThe `isSaveDisabled` prop disables only the save button while keeping the editor content functional. This is different from `isDisabled`, which disables both the editor and buttons.\n\nThe `maxMentionableUsersSuggestions` prop controls how many mention suggestions are displayed when the user types `@`. This is useful for large user lists where you want to limit the visible suggestions.\n\nThe `spellCheck` prop enables or disables browser spell checking in the editor.\n\nIn rich text mode, the editor includes a built-in help dialog that lists all available keyboard shortcuts (formatting, clipboard, undo/redo, submit). It opens as a modal overlay when the user presses `Ctrl+Shift+H` / `Cmd+Shift+H` while the editor has focus, and closes with `Escape` or the close button.\n\nUse the headless editor APIs when you need the rich-text engine without the default `Editor` chrome. This is useful for custom toolbars, inline editors embedded in other components, or experiences that need to render their own controls while reusing Baseline UI\'s rich-text model, keyboard shortcuts, selection handling, undo/redo, and HTML serialization.\n\n```jsx\nimport {\n EditorProvider,\n useEditable,\n useEditor,\n useEditorContext,\n} from "@baseline-ui/core";\n\nfunction FormattingToolbar() {\n const editor = useEditorContext();\n\n return (\n <button\n aria-pressed={editor.isMarkActive("bold")}\n onClick={() => editor.toggleMark("bold")}\n type="button"\n >\n Bold\n </button>\n );\n}\n\nfunction CustomRichTextEditor() {\n const editor = useEditor({\n defaultValue: "<p>Hello <b>world</b></p>",\n onChange: (html) => {\n console.log(html);\n },\n });\n const { editableProps } = useEditable(editor);\n\n return (\n <EditorProvider editor={editor}>\n <FormattingToolbar />\n <div {...editableProps} style={{ whiteSpace: "pre-wrap" }} />\n </EditorProvider>\n );\n}\n```\n\nThe headless API is split into these parts:\n\n| API | Purpose |\n| ------------------ | ------------------------------------------------------------------------ |\n| `useEditor` | Creates one rich-text editor instance and returns the `EditorState` API. |\n| `useEditable` | Attaches an `EditorState` to a `contenteditable` element. |\n| `EditorProvider` | Provides an editor instance to nested toolbar controls. |\n| `useEditorContext` | Reads the nearest provided editor instance. |\n| `EditorCore` | Framework-free engine escape hatch for advanced integrations. |\n\n`EditorState` exposes reactive state (`value`, `isEmpty`, `selectionState`, `canUndo`, `canRedo`, `isDisabled`) and imperative methods (`focus`, `setValue`, `getValue`, `undo`, `redo`, `exec`, `toggleMark`, `setMark`). For custom keyboard behavior, pass `onKeyDown` to `useEditable`; return `true` when you handled the event to skip the built-in shortcuts.\n\nStyle the editable element with `white-space: pre-wrap` (the built-in `Editor` does this internally). This preserves significant whitespace \u2014 leading, trailing, and consecutive spaces \u2014 which would otherwise collapse when the editor re-renders from its model, making a trailing space appear not to be inserted.\n\n| Selector | Description |\n| ------------------------------------------- | ----------------------------------------- |\n| `.BaselineUI-Editor` | Root container element |\n| `.BaselineUI-Editor-Save` | Save/submit button |\n| `.BaselineUI-Editor-Cancel` | Cancel button |\n| `.BaselineUI-Editor-Footer` | Footer toolbar containing action buttons |\n| `.BaselineUI-Editor-Mention` | Mention (@) button in footer |\n| `.BaselineUI-Editor-RichEditorToolbar` | Rich text formatting toolbar |\n| `.BaselineUI-Editor-RichEditorEditingArea` | Rich text contenteditable area |\n| `.BaselineUI-Editor-RichEditorPlaceholder` | Rich text empty-state placeholder overlay |\n| `.BaselineUI-Editor-PlainEditorEditingArea` | Plain text textarea element |\n\n`@baseline-ui/test-utils` ships a Playwright tester for the Editor so component and E2E specs don\'t have to relearn its markup. Build one from a frame and use its locators instead of hand-rolled selectors or translated labels:\n\n```ts\nimport { testers } from "@baseline-ui/test-utils";\n\nconst editor = testers(frame).editor();\n\nawait editor.textbox.fill("Hello");\nawait editor.boldButton.click();\nawait editor.openLinkDialog();\nawait editor.linkInput.fill("https://example.com");\nawait editor.linkAddButton.click();\nawait editor.startMention();\nawait editor.mentionOption("John Doe").click();\n```\n\nThe tester works in both modes \u2014 `textbox` resolves to the rich text contenteditable or the plain-mode `<textarea>` (both expose `role="textbox"`), and the rich-text-only surface (toolbar, link dialog, mention dropdown, help dialog) simply won\'t match when `enableRichText` is off. Pass a `root` locator when more than one Editor is mounted in the same frame:\n\n```ts\nconst editor = testers(frame).editor({\n root: frame.locator(".BaselineUI-Editor").first(),\n});\n```\n\nLocators are backed by stable `data-testid`s on the component (e.g. `editor-bold-button`, `editor-link-input`, `editor-help-dialog-close-button`) rather than accessible names, so they stay reliable across translations. The disclosure helpers (`openFontColorPicker`, `openBackgroundColorPicker`, `openLinkDialog`, `openHelpDialog`, `startMention`) are idempotent and no-op when the target surface is already open.',props:`interface EditorProps {
|
|
7932
|
+
};`},similarTo:[],figmaUrl:null},Editor:{id:"core-miscellaneous-editor",breadcrumb:"Core/Miscellaneous/Editor",importStatement:'import { Editor, HeadlessCustomEditor } from "@baseline-ui/core";',description:"`Editor` is a text input area that supports either plain text or rich text with formatting, links, and @-mentions. Use it for comments, notes, descriptions, or any free-form content where users need more than a single-line input.",documentation:'`Editor` is a text input area that supports either plain text or rich text with formatting, links, and @-mentions. Use it for comments, notes, descriptions, or any free-form content where users need more than a single-line input.\n\n* supports rich text editing, including bold, italic and underline formatting.\n* supports font color and background color formatting\n* supports link creation, editing and removal\n* supports plain text editing\n* supports mouse, keyboard and touch interactions.\n* Exposed to the screen-readers and other assistive technologies using ARIA.\n* Mention support with user search and keyboard navigation\n* Keyboard shortcuts for common actions (submit, toolbar focus, help)\n* Imperative handle API (`editorHandle`) for programmatic focus and caret positioning\n* Custom footer buttons (action and toggle types)\n* Clear on save/cancel behavior\n* Auto-focus with configurable caret position\n\nYou can import the Editor component like so:\n\n```jsx\nimport { Editor } from "@baseline-ui/core";\n\nexport default function App() {\n return (\n <Editor\n aria-label="Comment"\n placeholder="Write a comment..."\n onSave={(value) => {\n console.log(value);\n }}\n />\n );\n}\n```\n\nIf you only need a single-line plain text input, use the `TextInput` component instead.\n\nThe `Editor` component has multiple variants that can be used to customize the appearance and behavior of the component.\n\n* `default` - the default variant\n* `minimal` - a minimal variant that removes the toolbar and only allows plain text editing.\n\n```jsx\n<Editor\n aria-label="Editor"\n variant="minimal"\n avatarName="John Doe"\n spellCheck={false}\n placeholder="Type something..."\n defaultValue="This is a minimal editor"\n/>\n```\n\nIn the example above, the `variant` prop is used to set the variant to `minimal`. This removes the toolbar and only allows plain text editing.\nThe first editor passes `isInline={false}`; the second one keeps the default inline rendering, which shows the avatar (set via `avatarName`) next to the input.\n\nYou can enable rich text editing by setting the `enableRichText` prop to `true`. This will enable the rich text toolbar and allow users to format the text. The default value is `false`.\n\n```jsx\n<Editor\n aria-label="Editor"\n placeholder="Placeholder"\n enableRichText\n defaultValue="<p>This is a rich editor. It supports <b>bold</b>, <i>italic</i>, and <u>underline</u>. <a href=\'https://example.com\'>Links</a> are also supported.</p><br/><p>You can set both <span style=\'color: #ac0000; background-color: #ffffff;\'>font color</span> and <span style=\'background-color: #ffff00; color: #000000;\'>background color</span>.</p>"\n/>\n```\n\nYou can set a placeholder for the editor by using the `placeholder` prop. This will display a placeholder when the editor is empty.\n\nThe `Editor` component can be controlled by using the `value` and `onChange` props together. This allows you to control the value of the editor from the parent component, in both plain text and rich text mode.\n\nFor uncontrolled usage, set the initial content with `defaultValue` and read edits via `onChange` or `onSave` \u2014 the editor manages its own state afterwards.\n\nFor backwards compatibility, passing `value` without `onChange` in rich text mode sets the initial content only (it behaves like `defaultValue`), matching the behavior of earlier versions.\n\nThe same pattern works in rich text mode \u2014 controlled rich text requires both `value` and `onChange`:\n\n```jsx\nfunction ControlledRichTextEditor() {\n const [value, setValue] = React.useState(\n "<p>This is a <b>controlled</b> rich text editor</p>",\n );\n\n return (\n <Editor\n aria-label="Editor"\n enableRichText\n placeholder="Type something..."\n value={value}\n onChange={(newValue) => {\n setValue(newValue);\n }}\n />\n );\n}\n```\n\nThe `Editor` component can be disabled by using the `isDisabled` prop. This will disable the editor and prevent users from editing the content.\n\nThe `Editor` component supports mentions. You can enable mentions by passing the `mentionableUsers` prop, an array of `MentionableUser` objects with required `id`, `name`, and `displayName` properties, plus optional `avatar` and `description`. The `id` should be unique for each user, `name` is the username matched while typing, and `displayName` is the label rendered for the mention.\nThe mentions feature only works when `enableRichText` is set to `true`. Users can start a mention by typing `@` in the editor or by pressing the mention (@) button in the footer.\nPasted or dropped mentions are checked against `mentionableUsers`: a mention of a listed user takes that user\'s label, and any other mention, including every mention while `mentionableUsers` is undefined, becomes plain `@Name` text. This also applies when users cut and paste or drag a mention within the editor.\n\n```jsx\n<Editor\n aria-label="Editor"\n placeholder="Placeholder"\n enableRichText\n defaultValue="Mentioning <span data-user-id=\'john-doe\'>John Doe</span>."\n mentionableUsers={[\n {\n id: "1",\n name: "john.doe",\n displayName: "John Doe",\n description: "john@gmail.com",\n },\n {\n id: "2",\n name: "jane.doe",\n displayName: "Jane Doe",\n description: "jane@gmail.com",\n },\n ]}\n/>\n```\n\nYou can add custom buttons to the footer by using the `footerButtons` prop. This prop is an array of objects of the shape `{ type: "action" | "toggle", props: {...} }`, where `props` accepts the `ActionIconButton` props (for `type: "action"`) or the `ToggleIconButton` props (for `type: "toggle"`), except `size` and `variant`, which are set by the editor.\n\n```jsx\nimport { AnonymousIcon } from "@baseline-ui/icons/16";\n\n<Editor\n aria-label="Editor"\n enableRichText\n footerButtons={[\n {\n type: "toggle",\n props: {\n "aria-label": "Save",\n icon: AnonymousIcon,\n onPress: () => {\n alert("Save");\n },\n },\n },\n ]}\n/>;\n```\n\n| Key | Function |\n| ------------------------------ | -------------------------------------------------------- |\n| `Ctrl+B` / `Cmd+B` | Toggle bold (rich text mode) |\n| `Ctrl+I` / `Cmd+I` | Toggle italic (rich text mode) |\n| `Ctrl+U` / `Cmd+U` | Toggle underline (rich text mode) |\n| `Ctrl+Z` / `Cmd+Z` | Undo (rich text mode) |\n| `Ctrl+Shift+Z` / `Cmd+Shift+Z` | Redo (rich text mode) |\n| `Ctrl+Y` | Redo (rich text mode) |\n| `@` | Start a mention (rich text mode with `mentionableUsers`) |\n| `Alt+F10` | Focus toolbar (rich text mode) |\n| `Ctrl+Enter` / `Cmd+Enter` | Submit (always) |\n| `Enter` | Submit (when `saveOnEnter` is true) |\n| `Shift+Enter` | New line |\n| `Ctrl+Shift+H` / `Cmd+Shift+H` | Open help dialog (rich text mode) |\n| `Escape` | Close mention input / help dialog |\n| `Tab` | Focus next |\n| `Shift+Tab` | Focus previous |\n\nWhen `saveOnEnter` is set to `true`, pressing the `Enter` key will submit the editor instead of creating a new line. This is useful for single-line text inputs or quick note-taking scenarios.\n\nThe `clearOnSave` and `clearOnCancel` props clear the editor content after the respective action completes. These are useful for resetting the editor after submission or cancellation.\n\nThe `autoFocus` prop allows you to focus the editor on mount with optional caret positioning:\n\n* `true` - Focus on mount, caret at default position\n* `"start"` - Focus on mount, caret at position 0\n* `"end"` - Focus on mount, caret at end of text\n\nThe `editorHandle` ref provides imperative methods for programmatic control:\n\n* `focus()` - Focus the editor\n* `setCaretPosition(index)` - Position the caret at a specific index\n\nThe `isSaveDisabled` prop disables only the save button while keeping the editor content functional. This is different from `isDisabled`, which disables both the editor and buttons.\n\nThe `maxMentionableUsersSuggestions` prop controls how many mention suggestions are displayed when the user types `@`. This is useful for large user lists where you want to limit the visible suggestions.\n\nThe `spellCheck` prop enables or disables browser spell checking in the editor.\n\nIn rich text mode, the editor includes a built-in help dialog that lists all available keyboard shortcuts (formatting, clipboard, undo/redo, submit). It opens as a modal overlay when the user presses `Ctrl+Shift+H` / `Cmd+Shift+H` while the editor has focus, and closes with `Escape` or the close button.\n\nUse the headless editor APIs when you need the rich-text engine without the default `Editor` chrome. This is useful for custom toolbars, inline editors embedded in other components, or experiences that need to render their own controls while reusing Baseline UI\'s rich-text model, keyboard shortcuts, selection handling, undo/redo, and HTML serialization.\n\n```jsx\nimport {\n EditorProvider,\n useEditable,\n useEditor,\n useEditorContext,\n} from "@baseline-ui/core";\n\nfunction FormattingToolbar() {\n const editor = useEditorContext();\n\n return (\n <button\n aria-pressed={editor.isMarkActive("bold")}\n onClick={() => editor.toggleMark("bold")}\n type="button"\n >\n Bold\n </button>\n );\n}\n\nfunction CustomRichTextEditor() {\n const editor = useEditor({\n defaultValue: "<p>Hello <b>world</b></p>",\n onChange: (html) => {\n console.log(html);\n },\n });\n const { editableProps } = useEditable(editor);\n\n return (\n <EditorProvider editor={editor}>\n <FormattingToolbar />\n <div {...editableProps} style={{ whiteSpace: "pre-wrap" }} />\n </EditorProvider>\n );\n}\n```\n\nThe headless API is split into these parts:\n\n| API | Purpose |\n| ------------------ | ------------------------------------------------------------------------ |\n| `useEditor` | Creates one rich-text editor instance and returns the `EditorState` API. |\n| `useEditable` | Attaches an `EditorState` to a `contenteditable` element. |\n| `EditorProvider` | Provides an editor instance to nested toolbar controls. |\n| `useEditorContext` | Reads the nearest provided editor instance. |\n| `EditorCore` | Framework-free engine escape hatch for advanced integrations. |\n\n`EditorState` exposes reactive state (`value`, `isEmpty`, `selectionState`, `canUndo`, `canRedo`, `isDisabled`) and imperative methods (`focus`, `setValue`, `getValue`, `undo`, `redo`, `exec`, `toggleMark`, `setMark`). For custom keyboard behavior, pass `onKeyDown` to `useEditable`; return `true` when you handled the event to skip the built-in shortcuts.\n\nStyle the editable element with `white-space: pre-wrap` (the built-in `Editor` does this internally). This preserves significant whitespace \u2014 leading, trailing, and consecutive spaces \u2014 which would otherwise collapse when the editor re-renders from its model, making a trailing space appear not to be inserted.\n\n| Selector | Description |\n| ------------------------------------------- | ----------------------------------------- |\n| `.BaselineUI-Editor` | Root container element |\n| `.BaselineUI-Editor-Save` | Save/submit button |\n| `.BaselineUI-Editor-Cancel` | Cancel button |\n| `.BaselineUI-Editor-Footer` | Footer toolbar containing action buttons |\n| `.BaselineUI-Editor-Mention` | Mention (@) button in footer |\n| `.BaselineUI-Editor-RichEditorToolbar` | Rich text formatting toolbar |\n| `.BaselineUI-Editor-RichEditorEditingArea` | Rich text contenteditable area |\n| `.BaselineUI-Editor-RichEditorPlaceholder` | Rich text empty-state placeholder overlay |\n| `.BaselineUI-Editor-PlainEditorEditingArea` | Plain text textarea element |\n\n`@baseline-ui/test-utils` ships a Playwright tester for the Editor so component and E2E specs don\'t have to relearn its markup. Build one from a frame and use its locators instead of hand-rolled selectors or translated labels:\n\n```ts\nimport { testers } from "@baseline-ui/test-utils";\n\nconst editor = testers(frame).editor();\n\nawait editor.textbox.fill("Hello");\nawait editor.boldButton.click();\nawait editor.openLinkDialog();\nawait editor.linkInput.fill("https://example.com");\nawait editor.linkAddButton.click();\nawait editor.startMention();\nawait editor.mentionOption("John Doe").click();\n```\n\nThe tester works in both modes \u2014 `textbox` resolves to the rich text contenteditable or the plain-mode `<textarea>` (both expose `role="textbox"`), and the rich-text-only surface (toolbar, link dialog, mention dropdown, help dialog) simply won\'t match when `enableRichText` is off. Pass a `root` locator when more than one Editor is mounted in the same frame:\n\n```ts\nconst editor = testers(frame).editor({\n root: frame.locator(".BaselineUI-Editor").first(),\n});\n```\n\nLocators are backed by stable `data-testid`s on the component (e.g. `editor-bold-button`, `editor-link-input`, `editor-help-dialog-close-button`) rather than accessible names, so they stay reliable across translations. The disclosure helpers (`openFontColorPicker`, `openBackgroundColorPicker`, `openLinkDialog`, `openHelpDialog`, `startMention`) are idempotent and no-op when the target surface is already open.',props:`interface EditorProps {
|
|
7721
7933
|
/**
|
|
7722
7934
|
* @deprecated Do not use in new components. This is a legacy block
|
|
7723
7935
|
* identifier; new components should exclude it via
|
|
@@ -8104,7 +8316,118 @@ linkCancelLabel?: string
|
|
|
8104
8316
|
* Message id: \`bui.editor.save\`. Defaults to \`"Save"\`.
|
|
8105
8317
|
*/
|
|
8106
8318
|
linkSaveLabel?: string
|
|
8107
|
-
}`,stories:{usage:[{id:"core-miscellaneous-editor-
|
|
8319
|
+
}`,stories:{usage:[{id:"core-miscellaneous-editor--basic",name:"Basic",snippet:'const Basic = () => <Editor placeholder="Placeholder" aria-label="Editor" />;'},{id:"core-miscellaneous-editor--headless-custom",name:"Headless Custom Editor",snippet:"const HeadlessCustom = () => <HeadlessCustomEditor />;"},{id:"core-miscellaneous-editor-plain--controlled",name:"Controlled",snippet:`const Controlled = () => {
|
|
8320
|
+
const [value, setValue] = React.useState(args.value);
|
|
8321
|
+
|
|
8322
|
+
return (
|
|
8323
|
+
<Editor
|
|
8324
|
+
placeholder="Type something..."
|
|
8325
|
+
aria-label="Editor"
|
|
8326
|
+
enableRichText={false}
|
|
8327
|
+
spellCheck={false}
|
|
8328
|
+
value={value}
|
|
8329
|
+
onChange={(newValue) => {
|
|
8330
|
+
setValue(newValue);
|
|
8331
|
+
}} />
|
|
8332
|
+
);
|
|
8333
|
+
};`},{id:"core-miscellaneous-editor-plain--minimal",name:"Minimal",snippet:`const Minimal = () => <Box display="flex" gap="3xl" flexDirection="column">
|
|
8334
|
+
<div style={{ width: 260 }}>
|
|
8335
|
+
<Editor
|
|
8336
|
+
placeholder="Type something..."
|
|
8337
|
+
aria-label="Editor"
|
|
8338
|
+
enableRichText={false}
|
|
8339
|
+
variant="minimal"
|
|
8340
|
+
avatarName="John Doe"
|
|
8341
|
+
spellCheck={false}
|
|
8342
|
+
defaultValue="This is a minimal editor"
|
|
8343
|
+
isInline={false} />
|
|
8344
|
+
</div>
|
|
8345
|
+
<Separator />
|
|
8346
|
+
<div style={{ width: 260 }}>
|
|
8347
|
+
<Editor
|
|
8348
|
+
placeholder="Type something..."
|
|
8349
|
+
aria-label="Editor"
|
|
8350
|
+
enableRichText={false}
|
|
8351
|
+
variant="minimal"
|
|
8352
|
+
avatarName="John Doe"
|
|
8353
|
+
spellCheck={false}
|
|
8354
|
+
defaultValue="This is a minimal editor" />
|
|
8355
|
+
</div>
|
|
8356
|
+
</Box>;`},{id:"core-miscellaneous-editor-plain--minimal-multiline",name:"Minimal Multiline",snippet:`const MinimalMultiline = () => <Editor
|
|
8357
|
+
placeholder="Placeholder"
|
|
8358
|
+
aria-label="Editor"
|
|
8359
|
+
defaultValue="This is a minimal editor\\nwith multiple lines of text \\n\\nSome more text." />;`},{id:"core-miscellaneous-editor-plain--minimal-disabled",name:"Minimal Disabled",snippet:'const MinimalDisabled = () => <Editor placeholder="Placeholder" aria-label="Editor" isDisabled />;'},{id:"core-miscellaneous-editor-plain--minimal-save-disabled",name:"Minimal Save Disabled",snippet:'const MinimalSaveDisabled = () => <Editor placeholder="Placeholder" aria-label="Editor" isSaveDisabled />;'},{id:"core-miscellaneous-editor-plain--variants",name:"Variants",snippet:'const Variants = () => <Editor placeholder="Placeholder" aria-label="Editor" variant={undefined} />;'},{id:"core-miscellaneous-editor-plain--disabled",name:"Disabled",snippet:'const Disabled = () => <Editor placeholder="Placeholder" aria-label="Editor" isDisabled />;'},{id:"core-miscellaneous-editor-plain--auto-focus",name:"Auto Focus",snippet:'const AutoFocus = () => <EditorAutoFocusOnMount placeholder="Placeholder" aria-label="Editor" autoFocus />;'},{id:"core-miscellaneous-editor-plain--auto-focus-at-start",name:"Auto Focus At Start",snippet:`const AutoFocusAtStart = () => <Editor
|
|
8360
|
+
placeholder="Placeholder"
|
|
8361
|
+
aria-label="Editor"
|
|
8362
|
+
autoFocus="start"
|
|
8363
|
+
defaultValue="Caret will be at the start"
|
|
8364
|
+
enableRichText={false} />;`},{id:"core-miscellaneous-editor-plain--auto-focus-at-end",name:"Auto Focus At End",snippet:`const AutoFocusAtEnd = () => <Editor
|
|
8365
|
+
placeholder="Placeholder"
|
|
8366
|
+
aria-label="Editor"
|
|
8367
|
+
autoFocus="end"
|
|
8368
|
+
defaultValue="Caret will be at the end"
|
|
8369
|
+
enableRichText={false} />;`},{id:"core-miscellaneous-editor-plain--with-dynamic-caret-position",name:"With Dynamic Caret Position",snippet:`const WithDynamicCaretPosition = () => {
|
|
8370
|
+
const editorHandleRef = React.useRef<EditorHandle>(null);
|
|
8371
|
+
|
|
8372
|
+
const [value, setValue] = React.useState(2);
|
|
8373
|
+
|
|
8374
|
+
return (
|
|
8375
|
+
<>
|
|
8376
|
+
<Box display="flex" gap="md" paddingBlockEnd="md">
|
|
8377
|
+
<NumberInput
|
|
8378
|
+
label="Caret position"
|
|
8379
|
+
minValue={0}
|
|
8380
|
+
maxValue={args.value?.length ?? 0}
|
|
8381
|
+
value={value}
|
|
8382
|
+
onChange={setValue} />
|
|
8383
|
+
<Box display="flex" alignItems="flex-end">
|
|
8384
|
+
<ActionButton
|
|
8385
|
+
label="Set caret"
|
|
8386
|
+
onPress={() => {
|
|
8387
|
+
editorHandleRef.current?.setCaretPosition(value);
|
|
8388
|
+
}} />
|
|
8389
|
+
</Box>
|
|
8390
|
+
</Box>
|
|
8391
|
+
<Editor
|
|
8392
|
+
editorHandle={editorHandleRef}
|
|
8393
|
+
placeholder="Type something..."
|
|
8394
|
+
aria-label="Editor"
|
|
8395
|
+
enableRichText={false}
|
|
8396
|
+
spellCheck={false}
|
|
8397
|
+
value="This is a some text" />
|
|
8398
|
+
</>
|
|
8399
|
+
);
|
|
8400
|
+
};`},{id:"core-miscellaneous-editor-plain--custom-submit-icon",name:"Custom Submit Icon",snippet:`const CustomSubmitIcon = () => <Editor
|
|
8401
|
+
placeholder="Placeholder"
|
|
8402
|
+
aria-label="Editor"
|
|
8403
|
+
defaultValue="Editor with a custom submit icon"
|
|
8404
|
+
submitButtonIcon={CheckCircleFilledIcon}
|
|
8405
|
+
submitButtonAriaLabel="Send" />;`},{id:"core-miscellaneous-editor-plain--with-cancel",name:"With Cancel",snippet:`const WithCancel = () => <Editor
|
|
8406
|
+
placeholder="Placeholder"
|
|
8407
|
+
aria-label="Editor"
|
|
8408
|
+
onCancel={() => {}}
|
|
8409
|
+
defaultValue="Some text to cancel" />;`},{id:"core-miscellaneous-editor-plain--clear-on-save",name:"Clear On Save",snippet:`const ClearOnSave = () => <Editor
|
|
8410
|
+
placeholder="Placeholder"
|
|
8411
|
+
aria-label="Editor"
|
|
8412
|
+
clearOnSave
|
|
8413
|
+
defaultValue="Text that clears on save" />;`},{id:"core-miscellaneous-editor-plain--clear-on-cancel",name:"Clear On Cancel",snippet:`const ClearOnCancel = () => <Editor
|
|
8414
|
+
placeholder="Placeholder"
|
|
8415
|
+
aria-label="Editor"
|
|
8416
|
+
clearOnCancel
|
|
8417
|
+
onCancel={() => {}}
|
|
8418
|
+
defaultValue="Text that clears on cancel" />;`},{id:"core-miscellaneous-editor-plain--save-on-enter",name:"Save On Enter",snippet:`const SaveOnEnter = () => <Editor
|
|
8419
|
+
placeholder="Placeholder"
|
|
8420
|
+
aria-label="Editor"
|
|
8421
|
+
saveOnEnter
|
|
8422
|
+
defaultValue="Press Enter to save" />;`},{id:"core-miscellaneous-editor-plain--not-inline",name:"Not Inline",snippet:`const NotInline = () => <Editor
|
|
8423
|
+
placeholder="Placeholder"
|
|
8424
|
+
aria-label="Editor"
|
|
8425
|
+
isInline={false}
|
|
8426
|
+
defaultValue="Non-inline plain text editor" />;`},{id:"core-miscellaneous-editor-plain--default-save-disabled",name:"Default Save Disabled",snippet:`const DefaultSaveDisabled = () => <Editor
|
|
8427
|
+
placeholder="Placeholder"
|
|
8428
|
+
aria-label="Editor"
|
|
8429
|
+
isSaveDisabled
|
|
8430
|
+
defaultValue="Save is disabled" />;`},{id:"core-miscellaneous-editor-rich-text--default",name:"Default",snippet:`const Default = () => <Editor
|
|
8108
8431
|
placeholder="Placeholder"
|
|
8109
8432
|
aria-label="Editor"
|
|
8110
8433
|
enableRichText
|
|
@@ -8215,6 +8538,8 @@ import React from "react";
|
|
|
8215
8538
|
import { ActionButton } from "../../ActionButton";
|
|
8216
8539
|
import { Box } from "../../Box";
|
|
8217
8540
|
import { ColorInput } from "../../ColorInput";
|
|
8541
|
+
import { Dialog } from "../../Dialog";
|
|
8542
|
+
import { Modal, ModalContent } from "../../Modal";
|
|
8218
8543
|
import { Text } from "../../Text";
|
|
8219
8544
|
import { ToggleIconButton } from "../../ToggleIconButton";
|
|
8220
8545
|
import { Editor } from "../Editor";
|
|
@@ -8229,7 +8554,11 @@ import type { ActionIconButtonProps } from "../../ActionIconButton";
|
|
|
8229
8554
|
import type { ColorPreset } from "../../ColorInput";
|
|
8230
8555
|
import type { ToggleIconButtonProps } from "../../ToggleIconButton";
|
|
8231
8556
|
import type { MarkName } from "../core/commands";
|
|
8232
|
-
import type {
|
|
8557
|
+
import type {
|
|
8558
|
+
EditorHandle,
|
|
8559
|
+
EditorProps,
|
|
8560
|
+
MentionableUser,
|
|
8561
|
+
} from "../Editor.types";
|
|
8233
8562
|
|
|
8234
8563
|
export const EditorWithSetCaretButton = ({
|
|
8235
8564
|
caretIndex,
|
|
@@ -8586,6 +8915,19 @@ export const HeadlessEditorNoShortcuts: React.FC = () => {
|
|
|
8586
8915
|
);
|
|
8587
8916
|
};
|
|
8588
8917
|
|
|
8918
|
+
const mentionExampleUsers: MentionableUser[] = [
|
|
8919
|
+
{ id: "john_1", name: "john", displayName: "John Doe" },
|
|
8920
|
+
{ id: "sara_2", name: "sara", displayName: "\u05E9\u05E8\u05D4 \u05DB\u05D4\u05DF" },
|
|
8921
|
+
];
|
|
8922
|
+
|
|
8923
|
+
export const EditorMentionExample = (props: Partial<EditorProps>) => (
|
|
8924
|
+
<Editor
|
|
8925
|
+
enableRichText={true}
|
|
8926
|
+
mentionableUsers={mentionExampleUsers}
|
|
8927
|
+
{...props}
|
|
8928
|
+
/>
|
|
8929
|
+
);
|
|
8930
|
+
|
|
8589
8931
|
export const EditorWithAutoFocusAndCaretAtEnd = ({
|
|
8590
8932
|
initialText,
|
|
8591
8933
|
onChange,
|
|
@@ -8671,6 +9013,29 @@ export const EditorWithFooterButtonsExample: React.FC<
|
|
|
8671
9013
|
},
|
|
8672
9014
|
)}
|
|
8673
9015
|
/>
|
|
9016
|
+
);
|
|
9017
|
+
|
|
9018
|
+
const modalMentionableUsers: MentionableUser[] = [
|
|
9019
|
+
{ id: "john_1", name: "john", displayName: "John Doe" },
|
|
9020
|
+
{ id: "jane_2", name: "jane", displayName: "Jane Roe" },
|
|
9021
|
+
];
|
|
9022
|
+
|
|
9023
|
+
export const EditorInModalExample = ({
|
|
9024
|
+
withMentions,
|
|
9025
|
+
...props
|
|
9026
|
+
}: EditorProps & { withMentions?: boolean }) => (
|
|
9027
|
+
<Modal defaultOpen={true}>
|
|
9028
|
+
<ModalContent>
|
|
9029
|
+
<Dialog aria-label="Editor dialog">
|
|
9030
|
+
<Editor
|
|
9031
|
+
enableRichText={true}
|
|
9032
|
+
aria-label="Comment"
|
|
9033
|
+
mentionableUsers={withMentions ? modalMentionableUsers : undefined}
|
|
9034
|
+
{...props}
|
|
9035
|
+
/>
|
|
9036
|
+
</Dialog>
|
|
9037
|
+
</ModalContent>
|
|
9038
|
+
</Modal>
|
|
8674
9039
|
);`},similarTo:[],figmaUrl:null},FileInput:{id:"core-forms-fileinput",breadcrumb:"Core/Forms/FileInput",importStatement:'import { FileInput, VariantViewer } from "@baseline-ui/core";',description:"`FileInput` is a form control for selecting one or more files from the user's device. It pairs a primary button with a read-only display of the chosen file name and supports labels, helper text, validation states, and accessibility hooks consistent with `TextInput`.",documentation:'`FileInput` is a form control for selecting one or more files from the user\'s device. It pairs a primary button with a read-only display of the chosen file name and supports labels, helper text, validation states, and accessibility hooks consistent with `TextInput`.\n\n* Built on top of [React Aria\'s `FileTrigger`](https://react-spectrum.adobe.com/react-aria/FileTrigger.html), so it works with mouse, touch, and keyboard.\n* Only the button is interactive \u2014 the label, file name, and helper text are visual and wired into the button via `aria-describedby` for assistive technology.\n* Accepts an array of MIME types or file extensions via `acceptedFileTypes`, and an `allowsMultiple` flag for selecting more than one file.\n* Supports directory selection ([`acceptDirectory`](https://react-spectrum.adobe.com/react-aria/FileTrigger.html#directory-selection)) and mobile capture ([`defaultCamera`](https://react-spectrum.adobe.com/react-aria/FileTrigger.html#media-capture)) via the underlying `FileTrigger`.\n* Renders helper, warning, and error messages with the same precedence rules as the rest of the form components: error > warning > description.\n\n```jsx\nimport { FileInput } from "@baseline-ui/core";\n\n<FileInput\n label="Attachment"\n description="Supports .mov and .mp4"\n acceptedFileTypes={[".mov", ".mp4"]}\n onValueChange={(files) => console.log(files)}\n/>;\n```\n\nIf you need a drag-and-drop drop zone instead of a button trigger, use [`ImageDropZone`](/story/core-forms-imagedropzone--basic) or [`FileUploader`](/story/core-forms-fileuploader--default).\n\nPass a visible `label` for sighted users; the label is wired into the button\'s accessible description so it is announced on focus.\n\n```jsx\n<FileInput label="Attachment" description="Supports .mov and .mp4" />\n```\n\nBy default the label sits above the field. Pass `labelPosition="start"` to align it inline.\n\n```jsx\n<FileInput label="Attachment" labelPosition="start" />\n```\n\nIf the field is described by surrounding context, omit `label`. The button\'s intrinsic name (`buttonLabel`, "Choose file" by default) is still announced.\n\n```jsx\n<FileInput aria-label="Upload a file" />\n```\n\nSet `allowsMultiple` to allow more than one file. The display switches to an aggregate `"N files"` count once more than one file is selected.\n\n```jsx\n<FileInput label="Attachments" allowsMultiple onValueChange={setFiles} />\n```\n\nPass an array of MIME types or file extensions to `acceptedFileTypes`.\n\n```jsx\n<FileInput\n label="Avatar"\n acceptedFileTypes={["image/png", "image/jpeg"]}\n onValueChange={setAvatar}\n/>\n```\n\nSet `acceptDirectory` to let users pick a folder. The browser forwards every file inside the chosen directory to `onValueChange`.\n\n```jsx\n<FileInput label="Upload folder" acceptDirectory onValueChange={setFiles} />\n```\n\nSet `defaultCamera="user"` (front-facing) or `"environment"` (rear-facing) to hint that the picker should open the device\'s camera on mobile.\n\n```jsx\n<FileInput\n label="Take a photo"\n acceptedFileTypes={["image/*"]}\n defaultCamera="environment"\n/>\n```\n\nSet `autoFocus` to focus the button on mount \u2014 useful in dialogs or multi-step flows.\n\n```jsx\n<FileInput label="Attachment" autoFocus />\n```\n\nOverride `buttonLabel` and `placeholder` for non-English copy or domain-specific wording.\n\n```jsx\n<FileInput\n label="Avatar"\n buttonLabel="Browse..."\n placeholder="Drop an image here"\n/>\n```\n\nPass `validationState="warning"` and a `warningMessage` to show a non-blocking advisory.\n\n```jsx\n<FileInput\n label="Attachment"\n validationState="warning"\n warningMessage="This file format is uncommon \u2014 make sure it is supported."\n/>\n```\n\nSetting `errorMessage` flips the field into the error state and replaces the helper text. The error message takes precedence over both `description` and `warningMessage`.\n\n```jsx\n<FileInput label="Attachment" errorMessage="Please choose a supported file." />\n```\n\nDisable the field with `isDisabled`. The button cannot be activated and the displayed file name uses the disabled text color.\n\n```jsx\n<FileInput label="Attachment" isDisabled />\n```\n\n`FileInput` exposes a single callback for handling the selection:\n\n| Prop | Signature | When to use |\n| --------------- | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| `onValueChange` | `(files: File[]) => void` | Receives the parsed file list directly. When `allowsMultiple` is not set, the array has at most one entry. An empty array means the user opened and dismissed the file picker. |\n\n`FileInput` sets the following data attributes on the field wrapper. Use them to scope your custom styles.\n\n| Selector | Description |\n| ----------------------------------- | ---------------------------------------------------- |\n| `[data-disabled]` | Present when `isDisabled` is true. |\n| `[data-validation-state="error"]` | Present when an error message or error state is set. |\n| `[data-validation-state="warning"]` | Present when `validationState="warning"`. |\n| `.BaselineUI-FileInput` | Root element of the component. |\n\nTo style the button itself, target `.BaselineUI-FileInput button` or pass a class via `buttonClassName` / inline styles via `buttonStyle`.\n\n* Only the button is interactive; the label, file name, and helper text are visual elements wired into the button via `aria-describedby`.\n* The button keeps its own accessible name (`"Choose file"` by default), so screen readers announce the action on focus.\n* The visible `label`, the selected file name, and any helper/warning/error message are all referenced from the button\'s `aria-describedby`, so they are announced after the action label.\n* An externally supplied `aria-describedby` is merged with the internal IDs rather than replacing them.\n\n| Key | Action |\n| ----------------- | ----------------------------- |\n| `Tab` | Moves focus to the button. |\n| `Shift + Tab` | Moves focus out of the field. |\n| `Space` / `Enter` | Opens the system file picker. |',props:`interface FileInputProps {
|
|
8675
9040
|
/**
|
|
8676
9041
|
* The description to display below the input.
|
|
@@ -9346,7 +9711,31 @@ dropzoneLabel?: string
|
|
|
9346
9711
|
isDisabled />
|
|
9347
9712
|
</Box>;`},{id:"core-forms-fileuploader--no-label",name:"No Label",snippet:`const NoLabel = () => <Box style={{ width: 240 }}>
|
|
9348
9713
|
<UploaderWithFileList label={undefined} description={undefined} onAdd={fn()} />
|
|
9349
|
-
</Box>;`}],implementation
|
|
9714
|
+
</Box>;`}],implementation:`import React from "react";
|
|
9715
|
+
|
|
9716
|
+
import { FileUploader } from "../FileUploader";
|
|
9717
|
+
|
|
9718
|
+
import type { FileUploaderProps } from "../FileUploader.types";
|
|
9719
|
+
|
|
9720
|
+
export const ToggleDisabledFileUploaderExample: React.FC<FileUploaderProps> = (
|
|
9721
|
+
props,
|
|
9722
|
+
) => {
|
|
9723
|
+
const [isDisabled, setIsDisabled] = React.useState(false);
|
|
9724
|
+
|
|
9725
|
+
return (
|
|
9726
|
+
<>
|
|
9727
|
+
<button
|
|
9728
|
+
type="button"
|
|
9729
|
+
onClick={() => {
|
|
9730
|
+
setIsDisabled((value) => !value);
|
|
9731
|
+
}}
|
|
9732
|
+
>
|
|
9733
|
+
Toggle disabled
|
|
9734
|
+
</button>
|
|
9735
|
+
<FileUploader label="Upload" isDisabled={isDisabled} {...props} />
|
|
9736
|
+
</>
|
|
9737
|
+
);
|
|
9738
|
+
};`},similarTo:[],figmaUrl:null},FrameProvider:{id:"core-utilities-frameprovider",breadcrumb:"Core/Utilities/FrameProvider",importStatement:`import {
|
|
9350
9739
|
Box,
|
|
9351
9740
|
FrameProvider,
|
|
9352
9741
|
NestedTestFrameProvider,
|
|
@@ -9367,7 +9756,7 @@ dropzoneLabel?: string
|
|
|
9367
9756
|
* Exposes container dimensions via \`useFrameDimensions\` hook
|
|
9368
9757
|
|
|
9369
9758
|
\`\`\`tsx
|
|
9370
|
-
import { FrameProvider } from "
|
|
9759
|
+
import { FrameProvider } from "@baseline-ui/core";
|
|
9371
9760
|
|
|
9372
9761
|
<FrameProvider>
|
|
9373
9762
|
<YourContent />
|
|
@@ -10353,7 +10742,7 @@ export const TrackedControlledFreehandCanvas = ({
|
|
|
10353
10742
|
* **Accessibility**: ARIA grid pattern and selection announcements via ARIA live region.
|
|
10354
10743
|
|
|
10355
10744
|
\`\`\`jsx
|
|
10356
|
-
import { GridList, Checkbox, Text } from "
|
|
10745
|
+
import { GridList, Checkbox, Text, useFocusRing } from "@baseline-ui/core";
|
|
10357
10746
|
|
|
10358
10747
|
const GridListItem = (
|
|
10359
10748
|
{ textValue },
|
|
@@ -10469,8 +10858,15 @@ import type { DroppableCollectionReorderEvent } from "@react-types/shared";
|
|
|
10469
10858
|
import type { AriaButtonProps, GridListItemAria } from "react-aria";
|
|
10470
10859
|
|
|
10471
10860
|
export const GridListItemRenderer: GridListProps["renderGridItem"] = (
|
|
10472
|
-
{ textValue },
|
|
10473
|
-
{
|
|
10861
|
+
{ textValue, value },
|
|
10862
|
+
{
|
|
10863
|
+
checkBoxProps,
|
|
10864
|
+
rowProps,
|
|
10865
|
+
isDisabled,
|
|
10866
|
+
gridCellProps,
|
|
10867
|
+
descriptionProps,
|
|
10868
|
+
...rest
|
|
10869
|
+
},
|
|
10474
10870
|
ref,
|
|
10475
10871
|
) => {
|
|
10476
10872
|
return (
|
|
@@ -10478,6 +10874,7 @@ export const GridListItemRenderer: GridListProps["renderGridItem"] = (
|
|
|
10478
10874
|
ref={ref}
|
|
10479
10875
|
rowProps={rowProps}
|
|
10480
10876
|
gridCellProps={gridCellProps}
|
|
10877
|
+
descriptionProps={descriptionProps}
|
|
10481
10878
|
isDisabled={isDisabled}
|
|
10482
10879
|
{...rest}
|
|
10483
10880
|
>
|
|
@@ -10494,6 +10891,9 @@ export const GridListItemRenderer: GridListProps["renderGridItem"] = (
|
|
|
10494
10891
|
<Text type="label" size="sm">
|
|
10495
10892
|
{textValue}
|
|
10496
10893
|
</Text>
|
|
10894
|
+
{value?.description ? (
|
|
10895
|
+
<span {...descriptionProps}>{value.description}</span>
|
|
10896
|
+
) : null}
|
|
10497
10897
|
<ActionIconButton
|
|
10498
10898
|
icon={EllipseIcon}
|
|
10499
10899
|
variant="secondary"
|
|
@@ -10547,13 +10947,17 @@ GridListContainer.displayName = "GridListContainer";
|
|
|
10547
10947
|
type GridListExampleProps = Omit<
|
|
10548
10948
|
GridListProps,
|
|
10549
10949
|
"renderGridItem" | "items" | "data-block-id"
|
|
10550
|
-
|
|
10950
|
+
> &
|
|
10951
|
+
Partial<Pick<GridListProps, "items">>;
|
|
10551
10952
|
|
|
10552
|
-
export const GridListExample: React.FC<GridListExampleProps> = (
|
|
10953
|
+
export const GridListExample: React.FC<GridListExampleProps> = ({
|
|
10954
|
+
items = gridItems,
|
|
10955
|
+
...props
|
|
10956
|
+
}) => {
|
|
10553
10957
|
return (
|
|
10554
10958
|
<GridList
|
|
10555
10959
|
renderGridItem={GridListItemRenderer}
|
|
10556
|
-
items={
|
|
10960
|
+
items={items}
|
|
10557
10961
|
data-block-id="grid-list"
|
|
10558
10962
|
{...props}
|
|
10559
10963
|
/>
|
|
@@ -10576,9 +10980,10 @@ export const GridListFocusOnEntryExample: React.FC<GridListExampleProps> = (
|
|
|
10576
10980
|
);
|
|
10577
10981
|
};
|
|
10578
10982
|
|
|
10579
|
-
export const GridListControlledExample: React.FC<GridListExampleProps> = (
|
|
10580
|
-
|
|
10581
|
-
|
|
10983
|
+
export const GridListControlledExample: React.FC<GridListExampleProps> = ({
|
|
10984
|
+
items = gridItems,
|
|
10985
|
+
...props
|
|
10986
|
+
}) => {
|
|
10582
10987
|
const handleRef = useRef<ListHandle>(null);
|
|
10583
10988
|
|
|
10584
10989
|
return (
|
|
@@ -10586,7 +10991,7 @@ export const GridListControlledExample: React.FC<GridListExampleProps> = (
|
|
|
10586
10991
|
<ActionButton
|
|
10587
10992
|
label="Scroll to bottom"
|
|
10588
10993
|
onPress={() => {
|
|
10589
|
-
handleRef.current?.scrollIntoView(
|
|
10994
|
+
handleRef.current?.scrollIntoView(items.at(-1)?.id ?? "", {
|
|
10590
10995
|
behavior: "smooth",
|
|
10591
10996
|
block: "end",
|
|
10592
10997
|
});
|
|
@@ -10596,7 +11001,7 @@ export const GridListControlledExample: React.FC<GridListExampleProps> = (
|
|
|
10596
11001
|
<ActionButton
|
|
10597
11002
|
label="Focus Last Item"
|
|
10598
11003
|
onPress={() => {
|
|
10599
|
-
handleRef.current?.setFocusedKey(
|
|
11004
|
+
handleRef.current?.setFocusedKey(items.at(-1)?.id ?? "");
|
|
10600
11005
|
}}
|
|
10601
11006
|
preventFocusOnPress={true}
|
|
10602
11007
|
/>
|
|
@@ -10607,7 +11012,7 @@ export const GridListControlledExample: React.FC<GridListExampleProps> = (
|
|
|
10607
11012
|
padding: 10,
|
|
10608
11013
|
}}
|
|
10609
11014
|
>
|
|
10610
|
-
<GridListExample {...props} gridListHandle={handleRef} />
|
|
11015
|
+
<GridListExample {...props} items={items} gridListHandle={handleRef} />
|
|
10611
11016
|
</div>
|
|
10612
11017
|
</Box>
|
|
10613
11018
|
);
|
|
@@ -10810,7 +11215,7 @@ export const EditableGridListExample: React.FC<GridListExampleProps> = (
|
|
|
10810
11215
|
</button>
|
|
10811
11216
|
</>
|
|
10812
11217
|
);
|
|
10813
|
-
};`},similarTo:[],figmaUrl:null},Group:{id:"core-utilities-group",breadcrumb:"Core/Utilities/Group",importStatement:'import { ActionButton, Group } from "@baseline-ui/core";',description:"`Group` is a container that exposes a set of related UI controls as a single labelled unit to assistive technology. Use it to associate adjacent controls like toolbars or button clusters under a shared accessible label.",documentation:'`Group` is a container that exposes a set of related UI controls as a single labelled unit to assistive technology. Use it to associate adjacent controls like toolbars or button clusters under a shared accessible label.\n\n```jsx\nimport { Group, ActionButton } from "
|
|
11218
|
+
};`},similarTo:[],figmaUrl:null},Group:{id:"core-utilities-group",breadcrumb:"Core/Utilities/Group",importStatement:'import { ActionButton, Group } from "@baseline-ui/core";',description:"`Group` is a container that exposes a set of related UI controls as a single labelled unit to assistive technology. Use it to associate adjacent controls like toolbars or button clusters under a shared accessible label.",documentation:'`Group` is a container that exposes a set of related UI controls as a single labelled unit to assistive technology. Use it to associate adjacent controls like toolbars or button clusters under a shared accessible label.\n\n```jsx\nimport { Group, ActionButton } from "@baseline-ui/core";\n\n<Group>\n <ActionButton label="Label 1" />\n <ActionButton label="Label 2" />\n <ActionButton label="Label 3" />\n</Group>;\n```\n\nThe Group component in the given file path accepts the `aria-label` and `aria-labelledby` attributes to provide an accessible label to the group as a whole. These attributes are read by assistive technology when navigating into the group from outside. It is recommended to use an additional label for the group when the labels of each child element do not provide sufficient context on their own.\n\n```jsx\n<span id="label-id">Label</span>\n<Group aria-labelledby="label-id">\n {/* ... */}\n</Group>\n```\n\nBy default, `Group` uses the `group` ARIA role. If the contents of the group is important enough to be included in the page table of contents, use `role="region"` instead, and ensure that an aria-label or `aria-labelledby` prop is assigned.\n\n```jsx\n<Group role="region" aria-label="Object details">\n {/* ... */}\n</Group>\n```\n\n| Selector | Description |\n| --------------- | ---------------------------------------------------- |\n| \\[data-disabled] | Whether the group is disabled. |\n| \\[data-hovered] | Whether the group is currently hovered with a mouse. |',props:`interface GroupProps {
|
|
10814
11219
|
/**
|
|
10815
11220
|
* @deprecated Do not use in new components. This is a legacy block
|
|
10816
11221
|
* identifier; new components should exclude it via
|
|
@@ -11035,10 +11440,10 @@ export const OverridePrecedenceExample: React.FC = () => (
|
|
|
11035
11440
|
* Ability to paste a copied image into the drop zone
|
|
11036
11441
|
|
|
11037
11442
|
\`\`\`jsx
|
|
11038
|
-
import { ImageDropZone } from "
|
|
11443
|
+
import { ImageDropZone } from "@baseline-ui/core";
|
|
11039
11444
|
|
|
11040
11445
|
<ImageDropZone
|
|
11041
|
-
|
|
11446
|
+
pickerButtonLabel="Upload"
|
|
11042
11447
|
onValueChange={(files) => {
|
|
11043
11448
|
console.log(files);
|
|
11044
11449
|
}}
|
|
@@ -11070,7 +11475,7 @@ If you pass this, the \`ImageDropZone\` component will render the image in the d
|
|
|
11070
11475
|
/>
|
|
11071
11476
|
\`\`\`
|
|
11072
11477
|
|
|
11073
|
-
The \`ImageDropZone\` component can be disabled by setting the \`isDisabled\` prop to \`true\`. In this state, the component will not be able to receive focus or be interacted with.
|
|
11478
|
+
The \`ImageDropZone\` component can be disabled by setting the \`isDisabled\` prop to \`true\`. In this state, the component will not be able to receive focus or be interacted with. A disabled drop zone is also not a drop target: it ignores dragged files and is skipped during keyboard drags.
|
|
11074
11479
|
|
|
11075
11480
|
\`\`\`jsx
|
|
11076
11481
|
<ImageDropZone
|
|
@@ -11334,7 +11739,35 @@ onFileTypeError?: (file: File) => void
|
|
|
11334
11739
|
accept="image/png"
|
|
11335
11740
|
onFileTypeError={(file: File) => {
|
|
11336
11741
|
alert(\`File "\${file.name}" (\${file.type}) is not an accepted PNG image.\`);
|
|
11337
|
-
}} />;`}],implementation
|
|
11742
|
+
}} />;`}],implementation:`import React from "react";
|
|
11743
|
+
import { useDrag } from "react-aria/useDrag";
|
|
11744
|
+
|
|
11745
|
+
import { ImageDropZone } from "../ImageDropZone";
|
|
11746
|
+
|
|
11747
|
+
import type { ImageDropZoneProps } from "../ImageDropZone.types";
|
|
11748
|
+
import type { DragOptions } from "react-aria/useDrag";
|
|
11749
|
+
|
|
11750
|
+
const Draggable = ({ onDragEnd }: Pick<DragOptions, "onDragEnd">) => {
|
|
11751
|
+
const { dragProps } = useDrag({
|
|
11752
|
+
getItems: () => [{ "text/plain": "hello" }],
|
|
11753
|
+
onDragEnd,
|
|
11754
|
+
});
|
|
11755
|
+
|
|
11756
|
+
return (
|
|
11757
|
+
<div {...dragProps} role="button" tabIndex={0}>
|
|
11758
|
+
Draggable
|
|
11759
|
+
</div>
|
|
11760
|
+
);
|
|
11761
|
+
};
|
|
11762
|
+
|
|
11763
|
+
export const KeyboardDragImageDropZoneExample: React.FC<
|
|
11764
|
+
ImageDropZoneProps & Pick<DragOptions, "onDragEnd">
|
|
11765
|
+
> = ({ onDragEnd, ...props }) => (
|
|
11766
|
+
<>
|
|
11767
|
+
<Draggable onDragEnd={onDragEnd} />
|
|
11768
|
+
<ImageDropZone pickerButtonLabel="Upload" aria-label="Image" {...props} />
|
|
11769
|
+
</>
|
|
11770
|
+
);`},similarTo:[],figmaUrl:null},ImageGallery:{id:"core-collections-imagegallery",breadcrumb:"Core/Collections/ImageGallery",importStatement:`import {
|
|
11338
11771
|
Box,
|
|
11339
11772
|
ControlledImageGalleryExample,
|
|
11340
11773
|
CustomSizeImageGalleryExample,
|
|
@@ -11353,7 +11786,7 @@ onFileTypeError?: (file: File) => void
|
|
|
11353
11786
|
* Single and multiple selection modes for images
|
|
11354
11787
|
|
|
11355
11788
|
\`\`\`jsx
|
|
11356
|
-
import { ImageGallery } from "
|
|
11789
|
+
import { ImageGallery } from "@baseline-ui/core";
|
|
11357
11790
|
|
|
11358
11791
|
export const items = Array.from({ length: 10 }, (_, i) => {
|
|
11359
11792
|
const index = i + 1;
|
|
@@ -11371,7 +11804,7 @@ export const items = Array.from({ length: 10 }, (_, i) => {
|
|
|
11371
11804
|
|
|
11372
11805
|
The ImageGallery supports drag and drop operations for rearranging images. This is especially useful in scenarios where the order of images matters, like in a photo editing workflow or when creating a custom photo album. You can select an image by clicking on it, touch (on touch-enabled devices), or via keyboard (Enter key) and then move it to a new position as needed.
|
|
11373
11806
|
|
|
11374
|
-
|
|
11807
|
+
Reordering is enabled when you pass an \`onReorder\` handler.
|
|
11375
11808
|
|
|
11376
11809
|
Depending on the context, you might want to allow your users to select multiple images at once (like when bulk deleting images or adding them to a cart). Alternatively, you might only want them to select one image at a time (like choosing a profile picture). ImageGallery supports both single and multiple selection modes, providing flexibility to suit varied use cases. The Space key can be used for selecting images.
|
|
11377
11810
|
|
|
@@ -12946,8 +13379,11 @@ elementProps?: {
|
|
|
12946
13379
|
* Supports keyboard navigation
|
|
12947
13380
|
* The toolbar is exposed to screen readers as a toolbar
|
|
12948
13381
|
|
|
13382
|
+
This example does not compile until \`InlineToolbar\` is exported from \`@baseline-ui/core\`.
|
|
13383
|
+
|
|
12949
13384
|
\`\`\`jsx
|
|
12950
|
-
import { InlineToolbar } from "
|
|
13385
|
+
import { InlineToolbar, Text } from "@baseline-ui/core";
|
|
13386
|
+
import { TrashIcon } from "@baseline-ui/icons/24";
|
|
12951
13387
|
|
|
12952
13388
|
const items = [
|
|
12953
13389
|
{
|
|
@@ -12956,13 +13392,16 @@ const items = [
|
|
|
12956
13392
|
},
|
|
12957
13393
|
{
|
|
12958
13394
|
id: "delete",
|
|
12959
|
-
icon:
|
|
13395
|
+
icon: TrashIcon,
|
|
12960
13396
|
"aria-label": "Delete",
|
|
12961
13397
|
},
|
|
12962
13398
|
];
|
|
12963
13399
|
|
|
12964
13400
|
<InlineToolbar items={items}>
|
|
12965
|
-
|
|
13401
|
+
<Text>
|
|
13402
|
+
Select the text and scroll to see the inline toolbar in the correct
|
|
13403
|
+
position.
|
|
13404
|
+
</Text>
|
|
12966
13405
|
</InlineToolbar>;
|
|
12967
13406
|
\`\`\``,props:`interface InlineToolbarProps {
|
|
12968
13407
|
/**
|
|
@@ -13232,7 +13671,7 @@ shouldUseSymbol?: boolean
|
|
|
13232
13671
|
<Kbd>Ctrl+Alt+Shift+Enter</Kbd>
|
|
13233
13672
|
</Box>
|
|
13234
13673
|
</Box>
|
|
13235
|
-
);`}],implementation:""},similarTo:[],figmaUrl:null},Link:{id:"core-navigation-link",breadcrumb:"Core/Navigation/Link",importStatement:'import { Link, VariantViewer } from "@baseline-ui/core";',description:"`Link` is a styled anchor for navigating between pages, sections, or external destinations. Use it for inline or standalone navigation targets that should look and behave like hyperlinks.",documentation:'`Link` is a styled anchor for navigating between pages, sections, or external destinations. Use it for inline or standalone navigation targets that should look and behave like hyperlinks.\n\n```jsx\nimport { Link } from "
|
|
13674
|
+
);`}],implementation:""},similarTo:[],figmaUrl:null},Link:{id:"core-navigation-link",breadcrumb:"Core/Navigation/Link",importStatement:'import { Link, VariantViewer } from "@baseline-ui/core";',description:"`Link` is a styled anchor for navigating between pages, sections, or external destinations. Use it for inline or standalone navigation targets that should look and behave like hyperlinks.",documentation:'`Link` is a styled anchor for navigating between pages, sections, or external destinations. Use it for inline or standalone navigation targets that should look and behave like hyperlinks.\n\n```jsx\nimport { Link } from "@baseline-ui/core";\n\n<Link href="https://www.nutrient.io/">Nutrient</Link>;\n```\n\nThe `Link` component comes in three sizes: `sm`, `md`, and `lg`.\n\n```jsx\nimport { Link } from "@baseline-ui/core";\n\n<>\n <Link href="https://www.nutrient.io/sdk/" size="sm">\n Small link\n </Link>\n <Link href="https://www.nutrient.io/sdk/" size="md">\n Medium link\n </Link>\n <Link href="https://www.nutrient.io/sdk/" size="lg">\n Large link\n </Link>\n</>;\n```\n\nThe `Link` component comes in two variants: `default` and `inline`.\n\n```jsx\nimport { Link } from "@baseline-ui/core";\n\n<>\n <Link href="https://www.nutrient.io/sdk/">Default link</Link>\n <Link href="https://www.nutrient.io/sdk/" variant="inline">\n Inline link\n </Link>\n</>;\n```\n\nThe `Link` component can be disabled by setting the `isDisabled` prop to `true`. This will disable the link and prevent it from being clicked but will still allow keyboard navigation.\n\n```jsx\nimport { Link } from "@baseline-ui/core";\n\n<Link href="https://www.nutrient.io/sdk/" isDisabled>\n Disabled link\n</Link>;\n```\n\nYou can also use press handlers to handle client-side actions. For example, you can use the `onPress` handler to handle a click event. In the example below, we use the `onPress` handler to create an alert. We use the `span` element instead of the `a` element to prevent the page from navigating. Proper ARIA attributes are added to the `span` element to make it accessible.\n\n```jsx\nimport { Link } from "@baseline-ui/core";\n\n<Link onPress={() => alert("Link clicked")} elementType="span">\n Click me to see an alert\n</Link>;\n```\n\nThe `Link` component is rendered as an `<a>` element, so it\u2019s accessible by default. However, you can also use the `onPress` handler to handle client-side actions.\n\nSome of the accessibility features of the `Link` component are that it supports:\n\n* Mouse, keyboard, and touch interactions\n* Navigation links using `<a>` elements or client-side actions using custom handlers\n* The disabled state\n\n| Key | Function |\n| ----- | ------------------- |\n| Enter | Activates the link. |',props:`interface LinkProps {
|
|
13236
13675
|
/**
|
|
13237
13676
|
* Indicates whether this element represents the current item within a container or set of related
|
|
13238
13677
|
* elements.
|
|
@@ -14032,10 +14471,29 @@ export const DynamicListBoxExample: React.FC<
|
|
|
14032
14471
|
) : null}
|
|
14033
14472
|
</Box>
|
|
14034
14473
|
);
|
|
14474
|
+
};
|
|
14475
|
+
|
|
14476
|
+
export const ListBoxFocusLastItemExample: React.FC<{ items: ListItem[] }> = ({
|
|
14477
|
+
items,
|
|
14478
|
+
}) => {
|
|
14479
|
+
const handle = React.useRef<ListHandle>(null);
|
|
14480
|
+
|
|
14481
|
+
return (
|
|
14482
|
+
<Box display="flex" flexDirection="column" gap="md">
|
|
14483
|
+
<ActionButton
|
|
14484
|
+
label="Focus Last Item"
|
|
14485
|
+
preventFocusOnPress={true}
|
|
14486
|
+
onPress={() => {
|
|
14487
|
+
handle.current?.setFocusedKey(items.at(-1)?.id ?? "");
|
|
14488
|
+
}}
|
|
14489
|
+
/>
|
|
14490
|
+
<ListBox aria-label="List box" items={items} listBoxHandle={handle} />
|
|
14491
|
+
</Box>
|
|
14492
|
+
);
|
|
14035
14493
|
};`},similarTo:[],figmaUrl:null},Markdown:{id:"core-content-markdown",breadcrumb:"Core/Content/Markdown",importStatement:'import { Markdown } from "@baseline-ui/core";',description:"`Markdown` renders a Markdown string as styled HTML with support for [GitHub Flavored Markdown](https://github.github.com/gfm/). Use it to display authored content such as release notes, help text, or user-supplied prose.",documentation:`\`Markdown\` renders a Markdown string as styled HTML with support for [GitHub Flavored Markdown](https://github.github.com/gfm/). Use it to display authored content such as release notes, help text, or user-supplied prose.
|
|
14036
14494
|
|
|
14037
14495
|
\`\`\`jsx
|
|
14038
|
-
import { Markdown } from "@
|
|
14496
|
+
import { Markdown } from "@baseline-ui/core";
|
|
14039
14497
|
|
|
14040
14498
|
export const MyComponent = () => {
|
|
14041
14499
|
const markdown = \`
|
|
@@ -14662,9 +15120,24 @@ import type { Selection } from "react-stately";
|
|
|
14662
15120
|
export const MenuExample: React.FC<
|
|
14663
15121
|
MenuProps & {
|
|
14664
15122
|
label: string;
|
|
15123
|
+
wrapTrigger?: boolean;
|
|
15124
|
+
}
|
|
15125
|
+
> = ({ label, wrapTrigger = false, ...props }) => {
|
|
15126
|
+
return (
|
|
15127
|
+
<Menu
|
|
15128
|
+
renderTrigger={
|
|
15129
|
+
wrapTrigger
|
|
15130
|
+
? ({ buttonProps, ref }) => (
|
|
15131
|
+
<div data-testid="menu-trigger-wrapper">
|
|
15132
|
+
<ActionButton {...buttonProps} ref={ref} />
|
|
15133
|
+
</div>
|
|
15134
|
+
)
|
|
15135
|
+
: undefined
|
|
14665
15136
|
}
|
|
14666
|
-
|
|
14667
|
-
|
|
15137
|
+
{...props}
|
|
15138
|
+
triggerLabel={label}
|
|
15139
|
+
/>
|
|
15140
|
+
);
|
|
14668
15141
|
};
|
|
14669
15142
|
|
|
14670
15143
|
// Renders the (key, value) pair react-aria now passes to \`onAction\` so a spec
|
|
@@ -14977,13 +15450,14 @@ Combine this with \`UNSAFE_enableInert\` to ensure that background elements behi
|
|
|
14977
15450
|
|
|
14978
15451
|
\`\`\`jsx
|
|
14979
15452
|
import {
|
|
15453
|
+
ActionButton,
|
|
14980
15454
|
Dialog,
|
|
14981
15455
|
Modal,
|
|
14982
15456
|
ModalTrigger,
|
|
14983
15457
|
ModalContent,
|
|
14984
15458
|
ModalClose,
|
|
14985
15459
|
DialogTitle,
|
|
14986
|
-
} from "
|
|
15460
|
+
} from "@baseline-ui/core";
|
|
14987
15461
|
|
|
14988
15462
|
<Modal>
|
|
14989
15463
|
<ModalTrigger>
|
|
@@ -15499,10 +15973,10 @@ export const ModalLateBodyContainerExample: React.FC<
|
|
|
15499
15973
|
It is a wrapper around the [Intl.NumberFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat) API.
|
|
15500
15974
|
|
|
15501
15975
|
\`\`\`jsx
|
|
15502
|
-
import { NumberFormat } from "
|
|
15976
|
+
import { NumberFormat } from "@baseline-ui/core";
|
|
15503
15977
|
|
|
15504
15978
|
const MyComponent = () => (
|
|
15505
|
-
<NumberFormat value={1000} style
|
|
15979
|
+
<NumberFormat value={1000} style="currency" currency="USD" />
|
|
15506
15980
|
);
|
|
15507
15981
|
\`\`\`
|
|
15508
15982
|
|
|
@@ -15511,7 +15985,7 @@ The above example will render the number in the US locale:
|
|
|
15511
15985
|
You can also use \`I18nProvider\` to override the current locale:
|
|
15512
15986
|
|
|
15513
15987
|
\`\`\`jsx
|
|
15514
|
-
import { I18nProvider } from "
|
|
15988
|
+
import { I18nProvider, NumberFormat } from "@baseline-ui/core";
|
|
15515
15989
|
|
|
15516
15990
|
const MyComponent = () => (
|
|
15517
15991
|
<I18nProvider locale="fr">
|
|
@@ -15588,7 +16062,7 @@ value: number
|
|
|
15588
16062
|
<strong>Formatted number</strong>: <NumberFormat value={0.35} style="percent" minimumFractionDigits={2} />
|
|
15589
16063
|
</div>
|
|
15590
16064
|
);
|
|
15591
|
-
};`}],implementation:""},similarTo:[],figmaUrl:null},NumberInput:{id:"core-forms-numberinput",breadcrumb:"Core/Forms/NumberInput",importStatement:'import { NumberInput, VariantViewer } from "@baseline-ui/core";',description:"`NumberInput` is a text field for entering numeric values, with stepper buttons, min/max clamping, and locale-aware formatting. Use it when collecting a single number such as a quantity, price, or measurement.",documentation:'`NumberInput` is a text field for entering numeric values, with stepper buttons, min/max clamping, and locale-aware formatting. Use it when collecting a single number such as a quantity, price, or measurement.\n\n* Formatting and parsing of internationalised numbers, such as decimals, percentages, currency values, and units\n* Automatically finds the numbering system being used and can parse numbers that are not in the default numbering system for the locale.\n* Checks the user\'s keystrokes as they type to make sure they are valid numbers according to the locale and numbering system.\n* Chooses an appropriate software keyboard for mobile based on the current platform and allowed values.\n* Supports rounding to a configurable number of fraction digits. Supports clamping the value between a configurable minimum and maximum and snapping to a step value.\n* Allows you to keep going up or down by pressing and holding the stepper buttons. - Allows you to go up or down by using the scroll wheel.\n* Exposed to assistive technology as a text field with a custom, locally-tailored role description using ARIA\n* Follows the [spinbutton](https://www.w3.org/WAI/ARIA/apg/patterns/spinbutton/) ARIA pattern. Gets around bugs in VoiceOver with the spinbutton role.\n* Uses an ARIA live region to make sure that value changes are announced.\n* Supports description and error message help text linked to the input via ARIA.\n\n```jsx\nimport { NumberInput } from "
|
|
16065
|
+
};`}],implementation:""},similarTo:[],figmaUrl:null},NumberInput:{id:"core-forms-numberinput",breadcrumb:"Core/Forms/NumberInput",importStatement:'import { NumberInput, VariantViewer } from "@baseline-ui/core";',description:"`NumberInput` is a text field for entering numeric values, with stepper buttons, min/max clamping, and locale-aware formatting. Use it when collecting a single number such as a quantity, price, or measurement.",documentation:'`NumberInput` is a text field for entering numeric values, with stepper buttons, min/max clamping, and locale-aware formatting. Use it when collecting a single number such as a quantity, price, or measurement.\n\n* Formatting and parsing of internationalised numbers, such as decimals, percentages, currency values, and units\n* Automatically finds the numbering system being used and can parse numbers that are not in the default numbering system for the locale.\n* Checks the user\'s keystrokes as they type to make sure they are valid numbers according to the locale and numbering system.\n* Chooses an appropriate software keyboard for mobile based on the current platform and allowed values.\n* Supports rounding to a configurable number of fraction digits. Supports clamping the value between a configurable minimum and maximum and snapping to a step value.\n* Allows you to keep going up or down by pressing and holding the stepper buttons. - Allows you to go up or down by using the scroll wheel.\n* Exposed to assistive technology as a text field with a custom, locally-tailored role description using ARIA\n* Follows the [spinbutton](https://www.w3.org/WAI/ARIA/apg/patterns/spinbutton/) ARIA pattern. Gets around bugs in VoiceOver with the spinbutton role.\n* Uses an ARIA live region to make sure that value changes are announced.\n* Supports description and error message help text linked to the input via ARIA.\n\n```jsx\nimport { NumberInput } from "@baseline-ui/core";\n\n<NumberInput placeholder="Placeholder" />;\n```\n\nThe `NumberInput` component supports the following variants: `primary` and `ghost`.\n\n```jsx\n<NumberInput placeholder="Placeholder" variant="primary" />\n<NumberInput placeholder="Placeholder" variant="ghost" />\n```\n\nThe `NumberInput` component supports the `isReadOnly` prop to make the input read-only.\n\n```jsx\n<NumberInput placeholder="Placeholder" isReadOnly value={5} />\n```\n\nThe `NumberInput` component supports the `isDisabled` prop to disable the input.\n\n```jsx\n<NumberInput placeholder="Placeholder" isDisabled value={5} />\n```\n\nThe `NumberInput` component supports the `value` prop to control the value of the input. The `onChange` event is triggered when the value changes. This happens when the user types a value and blurs the input, or when incrementing or decrementing the value. It does not happen as the user types because partial input may not be parseable to a valid number.\n\n```jsx\n<NumberInput placeholder="Placeholder" value={5} onChange={console.log} />\n```\n\nTo clamp the value between a minimum and maximum value, the `minValue` and `maxValue` props are supported by the `NumberInput` component. If you provide either `maxValue` or `minValue` instead of both, you can make ranges open ended.\n\nIt is a good idea to give NumberField the valid range in advance so that it can optimise the experience. For example, on iOS, you can use a numeric keyboard instead of a full text keyboard (which requires you to enter a minus sign) when the minimum value is greater than or equal to zero.\n\n```jsx\n<NumberInput placeholder="Placeholder" minValue={0} maxValue={10} />\n```\n\nYou can use the `step` prop to snap the value to certain steps. If a `minValue` is set, the steps are worked out starting from the lowest value. For example, if `minValue` is set to 2 and step is set to 3, the valid step values are 2, 5, 8, 11, etc. If no `minValue` is set, the steps are calculated from zero in both directions if there is no `minValue`. To put it another way, so that the values are evenly divided by the step. If no step is set, any decimal value can be typed, but incrementing or decrementing the value changes it to a whole number.\n\nIf the user types a value that is between two steps and then blurs the input, the value will be snapped to the nearest step. When you increase or decrease a value, it jumps to the next step that is either higher or lower. When starting with an empty field and going up or down, the value starts at the `minValue` or `maxValue`, if they are set. If not, the number starts at 0.\n\n```jsx\n<NumberInput\n placeholder="Placeholder"\n step={3}\n defaultValue={2}\n minValue={2}\n formatOptions={{ style: "decimal", maximumFractionDigits: 1 }}\n/>\n```\n\nThe `NumberInput` component supports the `errorMessage` prop to display an error message below the input. The `isInvalid` prop can be used to indicate that the input is invalid. If the `isInvalid` prop is set to `true`, the input will be styled with an error state.\n\n```jsx\n<NumberInput placeholder="Placeholder" errorMessage="Error Message" isInvalid />\n```\n\n`NumberInput` automatically takes care of many parts of internationalisation, such as formatting and parsing numbers based on the current locale and numbering system. Also, the "increment" and "decrement" buttons have ARIA labels that are localised for each language.\n\n| Selector | Description |\n| -------------------- | ----------------------------------------------------------------- |\n| \\[data-disabled] | Whether the component is disabled. |\n| \\[data-focused] | Whether the component is focused, either via a mouse or keyboard. |\n| \\[data-hovered] | Whether the component is currently hovered with a mouse. |\n| \\[data-focus-visible] | Whether the component is keyboard focused. |\n| \\[data-invalid] | Whether the component is invalid. |\n\n| Key | Function |\n| --------------- | ------------------------------------- |\n| <kbd>Up</kbd> | Increment the value by the step value |\n| <kbd>Down</kbd> | Decrement the value by the step value |',props:`interface NumberInputProps {
|
|
15592
16066
|
/**
|
|
15593
16067
|
* @deprecated Do not use in new components. This is a legacy block
|
|
15594
16068
|
* identifier; new components should exclude it via
|
|
@@ -15943,36 +16417,46 @@ errorMessage?: string
|
|
|
15943
16417
|
* Support for description and error message help text linked to the input via ARIA
|
|
15944
16418
|
|
|
15945
16419
|
\`\`\`jsx
|
|
15946
|
-
import { Pagination } from "
|
|
16420
|
+
import { Pagination } from "@baseline-ui/core";
|
|
15947
16421
|
|
|
15948
|
-
<Pagination maxValue={10} />;
|
|
16422
|
+
<Pagination aria-label="Pagination" maxValue={10} />;
|
|
15949
16423
|
\`\`\`
|
|
15950
16424
|
|
|
15951
16425
|
The \`Pagination\` component can be used uncontrolled by omitting the \`value\` prop. You can
|
|
15952
16426
|
provide an initial value with the \`defaultValue\` prop.
|
|
15953
16427
|
|
|
15954
16428
|
\`\`\`jsx
|
|
15955
|
-
import { Pagination } from "
|
|
16429
|
+
import { Pagination } from "@baseline-ui/core";
|
|
15956
16430
|
|
|
15957
|
-
<Pagination maxValue={10} defaultValue={5} />;
|
|
16431
|
+
<Pagination aria-label="Pagination" maxValue={10} defaultValue={5} />;
|
|
15958
16432
|
\`\`\`
|
|
15959
16433
|
|
|
15960
16434
|
The \`Pagination\` component can be used controlled by providing a \`value\` prop.
|
|
15961
16435
|
|
|
15962
16436
|
\`\`\`jsx
|
|
15963
|
-
import { Pagination } from "
|
|
16437
|
+
import { Pagination } from "@baseline-ui/core";
|
|
15964
16438
|
|
|
15965
|
-
<Pagination maxValue={10} value={5} />;
|
|
16439
|
+
<Pagination aria-label="Pagination" maxValue={10} value={5} />;
|
|
15966
16440
|
\`\`\`
|
|
15967
16441
|
|
|
15968
16442
|
The \`Pagination\` component supports two variants: \`floating\` and \`pinned\`. The
|
|
15969
16443
|
\`floating\` variant is the default.
|
|
15970
16444
|
|
|
15971
16445
|
\`\`\`jsx
|
|
15972
|
-
import { Pagination } from "
|
|
16446
|
+
import { Pagination } from "@baseline-ui/core";
|
|
15973
16447
|
|
|
15974
|
-
<Pagination
|
|
15975
|
-
|
|
16448
|
+
<Pagination
|
|
16449
|
+
aria-label="Pagination"
|
|
16450
|
+
maxValue={10}
|
|
16451
|
+
defaultValue={5}
|
|
16452
|
+
variant="floating"
|
|
16453
|
+
/>;
|
|
16454
|
+
<Pagination
|
|
16455
|
+
aria-label="Pagination"
|
|
16456
|
+
maxValue={10}
|
|
16457
|
+
defaultValue={5}
|
|
16458
|
+
variant="pinned"
|
|
16459
|
+
/>;
|
|
15976
16460
|
\`\`\`
|
|
15977
16461
|
|
|
15978
16462
|
The \`Pagination\` component can be set to read-only by setting the \`isReadOnly\` prop.
|
|
@@ -15983,12 +16467,12 @@ The \`Pagination\` component supports four sizes: \`xs\`, \`sm\`, \`md\`, and \`
|
|
|
15983
16467
|
\`md\` size is the default.
|
|
15984
16468
|
|
|
15985
16469
|
\`\`\`jsx
|
|
15986
|
-
import { Pagination } from "
|
|
16470
|
+
import { Pagination } from "@baseline-ui/core";
|
|
15987
16471
|
|
|
15988
|
-
<Pagination maxValue={10} defaultValue={5} size="xs" />;
|
|
15989
|
-
<Pagination maxValue={10} defaultValue={5} size="sm" />;
|
|
15990
|
-
<Pagination maxValue={10} defaultValue={5} />;
|
|
15991
|
-
<Pagination maxValue={10} defaultValue={5} size="lg" />;
|
|
16472
|
+
<Pagination aria-label="Pagination" maxValue={10} defaultValue={5} size="xs" />;
|
|
16473
|
+
<Pagination aria-label="Pagination" maxValue={10} defaultValue={5} size="sm" />;
|
|
16474
|
+
<Pagination aria-label="Pagination" maxValue={10} defaultValue={5} />;
|
|
16475
|
+
<Pagination aria-label="Pagination" maxValue={10} defaultValue={5} size="lg" />;
|
|
15992
16476
|
\`\`\`
|
|
15993
16477
|
|
|
15994
16478
|
The \`Pagination\` component supports localization of the input value. Change the
|
|
@@ -16008,11 +16492,11 @@ locale in the toolbar to see the input value change.
|
|
|
16008
16492
|
The following strings are used by the \`Pagination\` component and can be overridden via \`I18nProvider\`:
|
|
16009
16493
|
|
|
16010
16494
|
| Key | Default (en) |
|
|
16011
|
-
| ------------------------- |
|
|
16495
|
+
| ------------------------- | ----------------------- |
|
|
16012
16496
|
| \`bui.pagination.nextPage\` | Next Page |
|
|
16013
16497
|
| \`bui.pagination.prevPage\` | Previous Page |
|
|
16014
16498
|
| \`bui.pagination.goToPage\` | Go to Page |
|
|
16015
|
-
| \`bui.pagination.pageXofY\` | Page {arg0} of {arg1} |
|
|
16499
|
+
| \`bui.pagination.pageXofY\` | \`Page {arg0} of {arg1}\` |
|
|
16016
16500
|
|
|
16017
16501
|
\`\`\`jsx
|
|
16018
16502
|
import { I18nProvider, Pagination } from "@baseline-ui/core";
|
|
@@ -16908,11 +17392,11 @@ case is same as not having \`PointPicker\` component in the first place.
|
|
|
16908
17392
|
|
|
16909
17393
|
The demo can be found [here](/story/core-content-pointpicker--disabled)
|
|
16910
17394
|
|
|
16911
|
-
The \`
|
|
17395
|
+
The \`gridLines\` prop in \`PointPickerContent\` can be used to hide the grid lines on the \`PointPickerContent\` component. The default value is \`true\`.
|
|
16912
17396
|
|
|
16913
17397
|
\`\`\`tsx
|
|
16914
17398
|
<PointPicker>
|
|
16915
|
-
<PointPickerContent
|
|
17399
|
+
<PointPickerContent gridLines={false}>
|
|
16916
17400
|
<YourContent />
|
|
16917
17401
|
</PointPickerContent>
|
|
16918
17402
|
<PointPickerDisplay />
|
|
@@ -16921,23 +17405,27 @@ The \`showGridLines\` prop in \`PointPickerContent\` can be used to hide the gri
|
|
|
16921
17405
|
|
|
16922
17406
|
The demo can be found [here](/story/core-content-pointpicker-pointpickercontent--without-grid-lines)
|
|
16923
17407
|
|
|
16924
|
-
The \`PointPickerDisplay\` component is used to show the magnifier and the selected point.
|
|
17408
|
+
The \`PointPickerDisplay\` component is used to show the magnifier and the selected point. By default the display renders where you place it. Set \`floating\` to render it in a popover that follows the cursor.
|
|
16925
17409
|
|
|
16926
17410
|
\`\`\`tsx
|
|
16927
17411
|
<PointPicker>
|
|
16928
|
-
<PointPickerContent
|
|
16929
|
-
<
|
|
17412
|
+
<PointPickerContent>
|
|
17413
|
+
<YourContent />
|
|
17414
|
+
</PointPickerContent>
|
|
17415
|
+
<PointPickerDisplay floating />
|
|
16930
17416
|
</PointPicker>
|
|
16931
17417
|
\`\`\`
|
|
16932
17418
|
|
|
16933
17419
|
The demo can be found [here](/story/core-content-pointpicker-pointpickerdisplay--with-floating-display)
|
|
16934
17420
|
|
|
16935
|
-
|
|
17421
|
+
Pass \`magnifier={{ scale }}\` to \`PointPickerDisplay\` to customize the magnifier scale. The default scale is \`2\`.
|
|
16936
17422
|
|
|
16937
17423
|
\`\`\`tsx
|
|
16938
17424
|
<PointPicker>
|
|
16939
|
-
<PointPickerContent
|
|
16940
|
-
<
|
|
17425
|
+
<PointPickerContent>
|
|
17426
|
+
<YourContent />
|
|
17427
|
+
</PointPickerContent>
|
|
17428
|
+
<PointPickerDisplay magnifier={{ scale: 4 }} />
|
|
16941
17429
|
</PointPicker>
|
|
16942
17430
|
\`\`\`
|
|
16943
17431
|
|
|
@@ -16998,8 +17486,10 @@ import { resolvePublicUrl } from "../../../utils/resolvePublicUrl";
|
|
|
16998
17486
|
import { ActionButton } from "../../ActionButton";
|
|
16999
17487
|
import { Box } from "../../Box";
|
|
17000
17488
|
import { Checkbox } from "../../Checkbox";
|
|
17489
|
+
import { Dialog } from "../../Dialog";
|
|
17001
17490
|
import { Link } from "../../Link";
|
|
17002
17491
|
import { Markdown } from "../../Markdown";
|
|
17492
|
+
import { Modal, ModalContent } from "../../Modal";
|
|
17003
17493
|
import { NumberInput } from "../../NumberInput";
|
|
17004
17494
|
import { PointPicker, PointPickerContent } from "../../PointPicker";
|
|
17005
17495
|
import { Select } from "../../Select";
|
|
@@ -17368,8 +17858,11 @@ export const DynamicDescriptionExample = ({ scale }: { scale?: number }) => (
|
|
|
17368
17858
|
|
|
17369
17859
|
export const PointsProximityExample = ({
|
|
17370
17860
|
type = "nearest",
|
|
17861
|
+
points,
|
|
17371
17862
|
}: {
|
|
17372
17863
|
type?: "nearest" | "within";
|
|
17864
|
+
/** Fixed snap points, in place of random ones. */
|
|
17865
|
+
points?: { x: number; y: number }[];
|
|
17373
17866
|
}) => {
|
|
17374
17867
|
const [snapPoints, setSnapPoints] = useState<number>(10_000);
|
|
17375
17868
|
const [snapRadius, setSnapRadius] = useState<number>(20);
|
|
@@ -17382,6 +17875,8 @@ export const PointsProximityExample = ({
|
|
|
17382
17875
|
const ref = useRef<HTMLDivElement>(null);
|
|
17383
17876
|
|
|
17384
17877
|
const _snapPoints = useMemo(() => {
|
|
17878
|
+
if (points) return points;
|
|
17879
|
+
|
|
17385
17880
|
const contentBounds = content?.getBoundingClientRect();
|
|
17386
17881
|
|
|
17387
17882
|
if (!contentBounds) return [];
|
|
@@ -17390,7 +17885,7 @@ export const PointsProximityExample = ({
|
|
|
17390
17885
|
x: Math.random() * contentBounds.width,
|
|
17391
17886
|
y: Math.random() * contentBounds.height,
|
|
17392
17887
|
}));
|
|
17393
|
-
}, [snapPoints, content]);
|
|
17888
|
+
}, [snapPoints, content, points]);
|
|
17394
17889
|
|
|
17395
17890
|
return (
|
|
17396
17891
|
<Box display="flex" flexDirection="column" gap="xl" ref={ref}>
|
|
@@ -17558,6 +18053,31 @@ export const RenderCursorExample: React.FC<{
|
|
|
17558
18053
|
<div style={{ width: 200, height: 200 }}>Test content</div>
|
|
17559
18054
|
</PointPickerContent>
|
|
17560
18055
|
</PointPicker>
|
|
18056
|
+
);
|
|
18057
|
+
|
|
18058
|
+
export const PointPickerInModalExample: React.FC<{
|
|
18059
|
+
preventEscape?: boolean;
|
|
18060
|
+
}> = ({ preventEscape }) => (
|
|
18061
|
+
<Modal defaultOpen={true}>
|
|
18062
|
+
<ModalContent>
|
|
18063
|
+
<Dialog aria-label="Point picker dialog">
|
|
18064
|
+
<PointPicker>
|
|
18065
|
+
<PointPickerDisplay />
|
|
18066
|
+
<PointPickerContent
|
|
18067
|
+
onKeyDown={
|
|
18068
|
+
preventEscape
|
|
18069
|
+
? (e) => {
|
|
18070
|
+
if (e.key === "Escape") e.preventDefault();
|
|
18071
|
+
}
|
|
18072
|
+
: undefined
|
|
18073
|
+
}
|
|
18074
|
+
>
|
|
18075
|
+
<RichContentBlock />
|
|
18076
|
+
</PointPickerContent>
|
|
18077
|
+
</PointPicker>
|
|
18078
|
+
</Dialog>
|
|
18079
|
+
</ModalContent>
|
|
18080
|
+
</Modal>
|
|
17561
18081
|
);`},similarTo:[],figmaUrl:null},Popover:{id:"core-overlays-popover",breadcrumb:"Core/Overlays/Popover",importStatement:`import {
|
|
17562
18082
|
ActionButton,
|
|
17563
18083
|
Box,
|
|
@@ -17581,7 +18101,7 @@ export const RenderCursorExample: React.FC<{
|
|
|
17581
18101
|
* It supports mouse, keyboard, and touch interactions.
|
|
17582
18102
|
|
|
17583
18103
|
\`\`\`jsx
|
|
17584
|
-
import { Popover, PopoverTrigger, PopoverContent } from "
|
|
18104
|
+
import { Popover, PopoverTrigger, PopoverContent } from "@baseline-ui/core";
|
|
17585
18105
|
|
|
17586
18106
|
<Popover type="listbox">
|
|
17587
18107
|
<PopoverTrigger>{/* Trigger component goes here */}</PopoverTrigger>
|
|
@@ -17591,7 +18111,9 @@ import { Popover, PopoverTrigger, PopoverContent } from "../../utils";
|
|
|
17591
18111
|
</Popover>;
|
|
17592
18112
|
\`\`\`
|
|
17593
18113
|
|
|
17594
|
-
The \`PopoverTrigger\` component is used to wrap the element that will trigger the popover to open. It can any one of the button components from
|
|
18114
|
+
The \`PopoverTrigger\` component is used to wrap the element that will trigger the popover to open. It can be any one of the button components from \`@baseline-ui/core\`.
|
|
18115
|
+
|
|
18116
|
+
A button placed directly inside \`PopoverTrigger\` keeps its own \`onPress\`, which runs each time the button is pressed, before the popover toggles. Its own \`aria-haspopup\` and \`aria-controls\` apply only where the popover sets none: \`aria-controls\` points at the popover content while it is open. The popover always sets \`aria-expanded\`.
|
|
17595
18117
|
|
|
17596
18118
|
It can also be replaced with specific coordinates and dimensions using the \`anchorRect\` prop; those coordinates will be used as anchor reference for positioning the popover content.
|
|
17597
18119
|
|
|
@@ -17644,7 +18166,12 @@ For advanced use cases where the trigger element's position changes dynamically
|
|
|
17644
18166
|
|
|
17645
18167
|
\`\`\`jsx
|
|
17646
18168
|
import { useRef } from "react";
|
|
17647
|
-
import {
|
|
18169
|
+
import {
|
|
18170
|
+
ActionButton,
|
|
18171
|
+
Popover,
|
|
18172
|
+
PopoverTrigger,
|
|
18173
|
+
PopoverContent,
|
|
18174
|
+
} from "@baseline-ui/core";
|
|
17648
18175
|
|
|
17649
18176
|
function MyComponent() {
|
|
17650
18177
|
const popoverHandleRef = useRef(null);
|
|
@@ -17657,7 +18184,7 @@ function MyComponent() {
|
|
|
17657
18184
|
return (
|
|
17658
18185
|
<Popover type="listbox">
|
|
17659
18186
|
<PopoverTrigger>
|
|
17660
|
-
<ActionButton label="Open"
|
|
18187
|
+
<ActionButton label="Open" onPress={moveTrigger} />
|
|
17661
18188
|
</PopoverTrigger>
|
|
17662
18189
|
<PopoverContent elementHandle={popoverHandleRef}>
|
|
17663
18190
|
{/* Content */}
|
|
@@ -17779,7 +18306,8 @@ children: React.ReactNode
|
|
|
17779
18306
|
placement: "bottom start",
|
|
17780
18307
|
}}
|
|
17781
18308
|
/>
|
|
17782
|
-
);`},{id:"core-overlays-popover--with-boundary-element",name:"With Boundary Element",snippet:"const WithBoundaryElement = (args) => <PopoverBoundaryElementExample popoverProps={args} />;"},{id:"core-overlays-popover--with-no-boundary",name:"With No Boundary",snippet:"const WithNoBoundary = () => <PopoverNoBoundaryExample />;"},{id:"core-overlays-popover--with-dynamic-trigger-width",name:"With Dynamic Trigger Width",snippet:"const WithDynamicTriggerWidth = (args) => <PopoverTriggerWidthExample popoverProps={args} />;"}],implementation:`import {
|
|
18309
|
+
);`},{id:"core-overlays-popover--with-boundary-element",name:"With Boundary Element",snippet:"const WithBoundaryElement = (args) => <PopoverBoundaryElementExample popoverProps={args} />;"},{id:"core-overlays-popover--with-no-boundary",name:"With No Boundary",snippet:"const WithNoBoundary = () => <PopoverNoBoundaryExample />;"},{id:"core-overlays-popover--with-dynamic-trigger-width",name:"With Dynamic Trigger Width",snippet:"const WithDynamicTriggerWidth = (args) => <PopoverTriggerWidthExample popoverProps={args} />;"}],implementation:`import { EllipseIcon } from "@baseline-ui/icons/20";
|
|
18310
|
+
import { sprinkles, themeVars } from "@baseline-ui/tokens";
|
|
17783
18311
|
import { ScrollBox } from "@pw/utils/components";
|
|
17784
18312
|
import { getOwnerDocument, mergeRefs } from "@react-aria/utils";
|
|
17785
18313
|
import React, { useEffect, useRef, useState } from "react";
|
|
@@ -17787,6 +18315,7 @@ import { useButton, useInteractOutside } from "react-aria";
|
|
|
17787
18315
|
import { flushSync } from "react-dom";
|
|
17788
18316
|
|
|
17789
18317
|
import { ActionButton } from "../../ActionButton";
|
|
18318
|
+
import { ActionIconButton } from "../../ActionIconButton";
|
|
17790
18319
|
import { Box } from "../../Box";
|
|
17791
18320
|
import { Dialog } from "../../Dialog";
|
|
17792
18321
|
import { ListBoxExample, items } from "../../ListBox/__tests__/testComponents";
|
|
@@ -17796,6 +18325,8 @@ import { popoverContentCn } from "../../Select/Select.css";
|
|
|
17796
18325
|
import { Switch } from "../../Switch";
|
|
17797
18326
|
import { Text } from "../../Text";
|
|
17798
18327
|
import { TextInput } from "../../TextInput";
|
|
18328
|
+
import { ToggleButton } from "../../ToggleButton";
|
|
18329
|
+
import { ToggleIconButton } from "../../ToggleIconButton";
|
|
17799
18330
|
import { Popover } from "../Popover";
|
|
17800
18331
|
import { PopoverContent } from "../PopoverContent";
|
|
17801
18332
|
import { PopoverTrigger } from "../PopoverTrigger";
|
|
@@ -18998,6 +19529,33 @@ export const PopoverLateBodyContainerExample: React.FC<{
|
|
|
18998
19529
|
)}
|
|
18999
19530
|
</Box>
|
|
19000
19531
|
);
|
|
19532
|
+
};
|
|
19533
|
+
|
|
19534
|
+
export const PopoverTriggerButtonExample: React.FC<{
|
|
19535
|
+
button:
|
|
19536
|
+
| "ActionButton"
|
|
19537
|
+
| "ActionIconButton"
|
|
19538
|
+
| "ToggleButton"
|
|
19539
|
+
| "ToggleIconButton";
|
|
19540
|
+
type?: PopoverProps["type"];
|
|
19541
|
+
onPress?: () => void;
|
|
19542
|
+
"aria-haspopup"?: "dialog";
|
|
19543
|
+
"aria-controls"?: string;
|
|
19544
|
+
}> = ({ button, type = "listbox", ...props }) => {
|
|
19545
|
+
const buttons = {
|
|
19546
|
+
ActionButton: <ActionButton label="Open" {...props} />,
|
|
19547
|
+
ActionIconButton: (
|
|
19548
|
+
<ActionIconButton icon={EllipseIcon} aria-label="Open" {...props} />
|
|
19549
|
+
),
|
|
19550
|
+
ToggleButton: <ToggleButton label="Open" {...props} />,
|
|
19551
|
+
ToggleIconButton: (
|
|
19552
|
+
<ToggleIconButton icon={EllipseIcon} aria-label="Open" {...props} />
|
|
19553
|
+
),
|
|
19554
|
+
};
|
|
19555
|
+
|
|
19556
|
+
return (
|
|
19557
|
+
<PopoverExample popoverProps={{ type }}>{buttons[button]}</PopoverExample>
|
|
19558
|
+
);
|
|
19001
19559
|
};`},similarTo:[],figmaUrl:null},Portal:{id:"core-utilities-portal",breadcrumb:"Core/Utilities/Portal",importStatement:'import { Portal } from "@baseline-ui/core";',description:"`Portal` renders its children into an overlay portal outside the normal React DOM hierarchy. It integrates with `ThemeProvider` so that the portal content inherits the current theme and virtual keyboard handling configuration.",documentation:'`Portal` renders its children into an overlay portal outside the normal React DOM hierarchy. It integrates with `ThemeProvider` so that the portal content inherits the current theme and virtual keyboard handling configuration.\n\n* Renders children into an overlay container managed by React Aria\n* Automatically wraps children in a `ThemeProvider` to propagate the active theme into the portal\n* Respects a custom `portalContainer` provided via prop or the nearest `PortalContainerProvider` in context\n* Supports all standard `StylingProps` (`className`, `style`, `data-block-id`, `data-block-class`)\n\n```jsx\nimport { Portal } from "@baseline-ui/core";\n\nexport default function App() {\n return (\n <Portal>\n <div>I am rendered in a portal</div>\n </Portal>\n );\n}\n```\n\nPass a `portalContainer` element to render the portal inside a specific DOM node instead of the default overlay container. This is useful when rendering inside Shadow DOM or other isolated subtrees.\n\n```jsx\nimport { Portal } from "@baseline-ui/core";\n\nconst shadowRoot = document.querySelector("#shadow-host").shadowRoot;\nconst container = shadowRoot.querySelector(".portal-root");\n\nexport default function App() {\n return (\n <Portal portalContainer={container}>\n <div>Rendered inside shadow DOM</div>\n </Portal>\n );\n}\n```',props:`interface PortalProps {
|
|
19002
19560
|
/**
|
|
19003
19561
|
* The container element in which the overlay portal will be placed.
|
|
@@ -19057,7 +19615,7 @@ className?: string
|
|
|
19057
19615
|
* The style applied to the root element of the component.
|
|
19058
19616
|
*/
|
|
19059
19617
|
style?: React.CSSProperties
|
|
19060
|
-
}`,stories:{usage:[{id:"core-utilities-portal--basic",name:"Basic",snippet:"const Basic = () => <Portal>I am in a portal</Portal>;"}],implementation:""},similarTo:[],figmaUrl:null},Preview:{id:"core-content-preview",breadcrumb:"Core/Content/Preview",importStatement:'import { InkSvg, Preview, VariantViewer } from "@baseline-ui/core";',description:"`Preview` renders a thumbnail of an image, SVG, or text snippet with optional action buttons overlaid on it. Use it to surface a visual sample of an asset that the user can inspect or act on without opening the full item.",documentation:'`Preview` renders a thumbnail of an image, SVG, or text snippet with optional action buttons overlaid on it. Use it to surface a visual sample of an asset that the user can inspect or act on without opening the full item.\n\n* Supports SVG, images and text\n* Supports custom action buttons to interact with the preview\n* Exposed to assistive technologies using ARIA attributes\n* Supports keyboard, mouse and touch interactions\n\n```jsx\nimport { Preview } from "@
|
|
19618
|
+
}`,stories:{usage:[{id:"core-utilities-portal--basic",name:"Basic",snippet:"const Basic = () => <Portal>I am in a portal</Portal>;"}],implementation:""},similarTo:[],figmaUrl:null},Preview:{id:"core-content-preview",breadcrumb:"Core/Content/Preview",importStatement:'import { InkSvg, Preview, VariantViewer } from "@baseline-ui/core";',description:"`Preview` renders a thumbnail of an image, SVG, or text snippet with optional action buttons overlaid on it. Use it to surface a visual sample of an asset that the user can inspect or act on without opening the full item.",documentation:'`Preview` renders a thumbnail of an image, SVG, or text snippet with optional action buttons overlaid on it. Use it to surface a visual sample of an asset that the user can inspect or act on without opening the full item.\n\n* Supports SVG, images and text\n* Supports custom action buttons to interact with the preview\n* Exposed to assistive technologies using ARIA attributes\n* Supports keyboard, mouse and touch interactions\n\n```jsx\nimport { Preview } from "@baseline-ui/core";\n\n<Preview imageSrc="/portrait.png" />;\n```\n\n`svgSrc` accepts a React element or an SVG string. A string is sanitized before it is rendered: scripts, event handlers and `javascript:` URLs are removed, along with elements such as `use`, `animate`, `set` and `foreignObject`. Sprite icons that reference a symbol with `<use href="#id">` therefore render blank; pass a React element to render them. A string SVG is rendered after the component mounts, so server-rendered HTML contains an empty preview that fills in on the client.\n\nThe `Preview` component has two variants. The two variants only differ in styling. It can be controlled using the `isInline` prop.\n\nThe `Preview` component can be disabled. When disabled, the preview is not interactive and the action buttons are not rendered.\n\n| Selector | Description |\n| -------------------- | ----------------------------------------------------------------- |\n| \\[data-disabled] | Whether the component is disabled. |\n| \\[data-focused] | Whether the component is focused, either via a mouse or keyboard. |\n| \\[data-hovered] | Whether the component is currently hovered with a mouse. |\n| \\[data-focus-visible] | Whether the component is keyboard focused. |\n\n| Key | Function |\n| ------------ | -------------------------------- |\n| `Tab` | Focus the preview |\n| `ArrowLeft` | Focus the previous action button |\n| `ArrowRight` | Focus the next action button |',props:`interface PreviewProps {
|
|
19061
19619
|
/**
|
|
19062
19620
|
* @deprecated Do not use in new components. This is a legacy block
|
|
19063
19621
|
* identifier; new components should exclude it via
|
|
@@ -19260,7 +19818,7 @@ accent?: "theme" | "positive"
|
|
|
19260
19818
|
deleteAriaLabel="Delete"
|
|
19261
19819
|
addAriaLabel="Add"
|
|
19262
19820
|
isDisabled
|
|
19263
|
-
svgSrc={svgComponent} />;`}],implementation:""},similarTo:[],figmaUrl:null},ProgressBar:{id:"core-status-progressbar",breadcrumb:"Core/Status/ProgressBar",importStatement:'import { ProgressBar, VariantViewer } from "@baseline-ui/core";',description:"`ProgressBar` is a horizontal indicator that fills to reflect how much of a determinate task has completed. Use it for operations with measurable progress such as file uploads, downloads, or installations.",documentation:'`ProgressBar` is a horizontal indicator that fills to reflect how much of a determinate task has completed. Use it for operations with measurable progress such as file uploads, downloads, or installations.\n\n* The component is exposed to the assistive technology as a progress bar.\n* It includes labels that improve accessibility and provide a visual indication of the progress.\n* It supports international number formatting of numbers.\n\n```jsx\nimport { ProgressBar } from "
|
|
19821
|
+
svgSrc={svgComponent} />;`}],implementation:""},similarTo:[],figmaUrl:null},ProgressBar:{id:"core-status-progressbar",breadcrumb:"Core/Status/ProgressBar",importStatement:'import { ProgressBar, VariantViewer } from "@baseline-ui/core";',description:"`ProgressBar` is a horizontal indicator that fills to reflect how much of a determinate task has completed. Use it for operations with measurable progress such as file uploads, downloads, or installations.",documentation:'`ProgressBar` is a horizontal indicator that fills to reflect how much of a determinate task has completed. Use it for operations with measurable progress such as file uploads, downloads, or installations.\n\n* The component is exposed to the assistive technology as a progress bar.\n* It includes labels that improve accessibility and provide a visual indication of the progress.\n* It supports international number formatting of numbers.\n\n```jsx\nimport { ProgressBar } from "@baseline-ui/core";\n\n<ProgressBar aria-label="Progress" value={50} />;\n```\n\nThe progress bar component has three variants: `active`, `success`, and `error`. The `active` variant is the default.\n\n```jsx\n<ProgressBar label="Label" value={50} />\n<ProgressBar label="Label" value={50} variant="success" />\n<ProgressBar label="Label" value={50} variant="error" />\n```\n\nYou can customize the scale of the progress bar by passing the `minValue` and `maxValue` props.\n\nYou can customize the number formatter by passing the `formatOptions` prop. In the example below, we are formatting the number as currency (USD).\n\nYou can customize the value label by passing the `valueLabel` prop. In the example below, we are using a custom value label that displays the value as "50 out of 100".',props:`interface ProgressBarProps {
|
|
19264
19822
|
/**
|
|
19265
19823
|
* @deprecated Do not use in new components. This is a legacy block
|
|
19266
19824
|
* identifier; new components should exclude it via
|
|
@@ -19407,7 +19965,7 @@ export const ProgressBarWithExternalHint: React.FC<ProgressBarProps> = (
|
|
|
19407
19965
|
<ProgressBar aria-describedby="external-hint" {...props} />
|
|
19408
19966
|
</>
|
|
19409
19967
|
);
|
|
19410
|
-
};`},similarTo:[],figmaUrl:null},ProgressSpinner:{id:"core-status-progressspinner",breadcrumb:"Core/Status/ProgressSpinner",importStatement:'import { ProgressSpinner, VariantViewer } from "@baseline-ui/core";',description:"`ProgressSpinner` is an animated indicator that signals an ongoing operation of indeterminate duration. Use it when the user is waiting on a task and you can't report a meaningful percentage of completion.",documentation:'`ProgressSpinner` is an animated indicator that signals an ongoing operation of indeterminate duration. Use it when the user is waiting on a task and you can\'t report a meaningful percentage of completion.\n\n```jsx\nimport { ProgressSpinner } from "
|
|
19968
|
+
};`},similarTo:[],figmaUrl:null},ProgressSpinner:{id:"core-status-progressspinner",breadcrumb:"Core/Status/ProgressSpinner",importStatement:'import { ProgressSpinner, VariantViewer } from "@baseline-ui/core";',description:"`ProgressSpinner` is an animated indicator that signals an ongoing operation of indeterminate duration. Use it when the user is waiting on a task and you can't report a meaningful percentage of completion.",documentation:'`ProgressSpinner` is an animated indicator that signals an ongoing operation of indeterminate duration. Use it when the user is waiting on a task and you can\'t report a meaningful percentage of completion.\n\n```jsx\nimport { ProgressSpinner } from "@baseline-ui/core";\n\n<ProgressSpinner aria-label={"Label"} />;\n```\n\nThe `ProgressSpinner` component comes in four variants: `active`, `inactive`, `success` and `error`. The default variant is `active`.\n\n```jsx\nimport { ProgressSpinner } from "@baseline-ui/core";\n\n<ProgressSpinner aria-label={"Label"} />\n<ProgressSpinner aria-label={"Label"} variant={"inactive"} />\n<ProgressSpinner aria-label={"Label"} variant={"success"} />\n<ProgressSpinner aria-label={"Label"} variant={"error"} />\n```\n\nThe `ProgressSpinner` component comes in two sizes: `sm` and `md`. The default size is `md`.\n\n```jsx\nimport { ProgressSpinner } from "@baseline-ui/core";\n\n<ProgressSpinner aria-label={"Label"} size={"sm"} />\n<ProgressSpinner aria-label={"Label"} size={"md"} />\n```\n\nYou can provide a label to the `ProgressSpinner` component using the `label` prop.\n\n```jsx\nimport { ProgressSpinner } from "@baseline-ui/core";\n\n<ProgressSpinner aria-label={"Label"} label={"Label"} />;\n<ProgressSpinner aria-label={"Label"} label={"Label"} size={"sm"} />;\n```',props:`interface ProgressSpinnerProps {
|
|
19411
19969
|
/**
|
|
19412
19970
|
* @deprecated Do not use in new components. This is a legacy block
|
|
19413
19971
|
* identifier; new components should exclude it via
|
|
@@ -19777,7 +20335,7 @@ export const RadioGroupWithNextFocusable: React.FC<
|
|
|
19777
20335
|
You can use the \`Reaction\` component like this:
|
|
19778
20336
|
|
|
19779
20337
|
\`\`\`jsx
|
|
19780
|
-
import { Reaction } from "
|
|
20338
|
+
import { Reaction } from "@baseline-ui/core";
|
|
19781
20339
|
|
|
19782
20340
|
<Reaction count={10} aria-label="Label" />;
|
|
19783
20341
|
\`\`\`
|
|
@@ -19785,7 +20343,7 @@ import { Reaction } from "../../utils";
|
|
|
19785
20343
|
You can set the \`isSelected\` prop to \`true\` to indicate that the reaction is selected.
|
|
19786
20344
|
|
|
19787
20345
|
\`\`\`jsx
|
|
19788
|
-
import { Reaction } from "
|
|
20346
|
+
import { Reaction } from "@baseline-ui/core";
|
|
19789
20347
|
|
|
19790
20348
|
<Reaction count={10} isSelected aria-label="Label" />;
|
|
19791
20349
|
\`\`\`
|
|
@@ -19793,7 +20351,7 @@ import { Reaction } from "../../utils";
|
|
|
19793
20351
|
You can set the \`isReadOnly\` prop to \`true\` to indicate that the reaction is read only.
|
|
19794
20352
|
|
|
19795
20353
|
\`\`\`jsx
|
|
19796
|
-
import { Reaction } from "
|
|
20354
|
+
import { Reaction } from "@baseline-ui/core";
|
|
19797
20355
|
|
|
19798
20356
|
<Reaction count={10} isReadOnly aria-label="Label" />;
|
|
19799
20357
|
<Reaction count={10} isReadOnly isSelected aria-label="Label" />;
|
|
@@ -19802,18 +20360,18 @@ import { Reaction } from "../../utils";
|
|
|
19802
20360
|
You can set the \`isDisabled\` prop to \`true\` to indicate that the reaction is disabled.
|
|
19803
20361
|
|
|
19804
20362
|
\`\`\`jsx
|
|
19805
|
-
import { Reaction } from "
|
|
20363
|
+
import { Reaction } from "@baseline-ui/core";
|
|
19806
20364
|
|
|
19807
20365
|
<Reaction count={10} isDisabled aria-label="Label" />;
|
|
19808
20366
|
<Reaction count={10} isDisabled isSelected aria-label="Label" />;
|
|
19809
20367
|
\`\`\`
|
|
19810
20368
|
|
|
19811
|
-
You have the option to set the size of the reaction. The default size is \`
|
|
20369
|
+
You have the option to set the size of the reaction. The default size is \`md\`.
|
|
19812
20370
|
|
|
19813
20371
|
\`\`\`jsx
|
|
19814
|
-
import { Reaction } from "
|
|
20372
|
+
import { Reaction } from "@baseline-ui/core";
|
|
19815
20373
|
|
|
19816
|
-
<Reaction count={10} size="
|
|
20374
|
+
<Reaction count={10} size="sm" aria-label="Label" />;
|
|
19817
20375
|
<Reaction count={10} aria-label="Label" />;
|
|
19818
20376
|
\`\`\`
|
|
19819
20377
|
|
|
@@ -19912,7 +20470,8 @@ icon?: React.FC<IconProps>
|
|
|
19912
20470
|
* Can be hidden when the user is using a keyboard
|
|
19913
20471
|
|
|
19914
20472
|
\`\`\`jsx
|
|
19915
|
-
import {
|
|
20473
|
+
import { useRef } from "react";
|
|
20474
|
+
import { ScrollControlButton } from "@baseline-ui/core";
|
|
19916
20475
|
|
|
19917
20476
|
function MyComponent() {
|
|
19918
20477
|
const ref = useRef(null);
|
|
@@ -19941,7 +20500,8 @@ function MyComponent() {
|
|
|
19941
20500
|
In certain occasions, it might be useful to use \`flex-direction: column-reverse\` on a container to start with initially scrolled to the bottom. This is how that would look:
|
|
19942
20501
|
|
|
19943
20502
|
\`\`\`jsx
|
|
19944
|
-
import {
|
|
20503
|
+
import { useRef } from "react";
|
|
20504
|
+
import { ScrollControlButton } from "@baseline-ui/core";
|
|
19945
20505
|
|
|
19946
20506
|
function MyComponent() {
|
|
19947
20507
|
const ref = useRef(null);
|
|
@@ -20201,7 +20761,7 @@ export const ScrollControlButtonReversedExample: React.FC<
|
|
|
20201
20761
|
</div>
|
|
20202
20762
|
</>
|
|
20203
20763
|
);
|
|
20204
|
-
};`},similarTo:[],figmaUrl:null},SearchInput:{id:"core-forms-searchinput",breadcrumb:"Core/Forms/SearchInput",importStatement:'import { SearchInput, VariantViewer } from "@baseline-ui/core";',description:"`SearchInput` is a single-line text field with a search icon and clear button for entering and submitting queries. Use it when users need to filter a list or search for content within a page.",documentation:'`SearchInput` is a single-line text field with a search icon and clear button for entering and submitting queries. Use it when users need to filter a list or search for content within a page.\n\n* Built with a native `<input type="search">` element\n* Visual and ARIA labeling support\n* Custom clear button support with internationalized label for accessibility\n* Support for description and error message help text linked to the input via ARIA\n\n```jsx\nimport { SearchInput } from "
|
|
20764
|
+
};`},similarTo:[],figmaUrl:null},SearchInput:{id:"core-forms-searchinput",breadcrumb:"Core/Forms/SearchInput",importStatement:'import { SearchInput, VariantViewer } from "@baseline-ui/core";',description:"`SearchInput` is a single-line text field with a search icon and clear button for entering and submitting queries. Use it when users need to filter a list or search for content within a page.",documentation:'`SearchInput` is a single-line text field with a search icon and clear button for entering and submitting queries. Use it when users need to filter a list or search for content within a page.\n\n* Built with a native `<input type="search">` element\n* Visual and ARIA labeling support\n* Custom clear button support with internationalized label for accessibility\n* Support for description and error message help text linked to the input via ARIA\n\n```jsx\nimport { SearchInput } from "@baseline-ui/core";\n\n<SearchInput aria-label="Label" />;\n```\n\nThe `SearchInput` component has two variants: `primary` and `ghost`.\n\n```jsx\nimport { SearchInput } from "@baseline-ui/core";\n\n<SearchInput aria-label="Label" placeholder="Search" variant="primary" />\n<SearchInput aria-label="Label" placeholder="Search" variant="ghost" />\n```\n\nThe `SearchInput` component has three sizes: `sm`, `md`, and `lg`. The default size is `md`.\n\n```jsx\nimport { SearchInput } from "@baseline-ui/core";\n\n<SearchInput aria-label="Label" placeholder="Search" size="sm" />\n<SearchInput aria-label="Label" placeholder="Search" size="md" />\n<SearchInput aria-label="Label" placeholder="Search" size="lg" />\n```\n\nThe `SearchInput` component can be disabled by setting the `isDisabled` prop to `true`.\n\n```jsx\nimport { SearchInput } from "@baseline-ui/core";\n\n<SearchInput aria-label="Label" placeholder="Search" isDisabled />;\n```\n\n| Selector | Description |\n| -------------------- | ----------------------------------------------------------------- |\n| \\[data-disabled] | Whether the component is disabled. |\n| \\[data-focused] | Whether the component is focused, either via a mouse or keyboard. |\n| \\[data-focus-visible] | Whether the component is keyboard focused. |\n\n| Key | Function |\n| ------- | ------------------------ |\n| `Enter` | Submits the search query |\n| `Esc` | Clears the search query |',props:`interface SearchInputProps {
|
|
20205
20765
|
/**
|
|
20206
20766
|
* @deprecated Do not use in new components. This is a legacy block
|
|
20207
20767
|
* identifier; new components should exclude it via
|
|
@@ -20289,7 +20849,13 @@ isClearFocusable?: boolean
|
|
|
20289
20849
|
placeholder="Search"
|
|
20290
20850
|
aria-label="Search"
|
|
20291
20851
|
isClearFocusable
|
|
20292
|
-
defaultValue="Search text" />;`}],implementation:""},similarTo:[],figmaUrl:null},Select:{id:"core-forms-select
|
|
20852
|
+
defaultValue="Search text" />;`}],implementation:""},similarTo:[],figmaUrl:null},Select:{id:"core-forms-select",breadcrumb:"Core/Forms/Select",importStatement:`import {
|
|
20853
|
+
Select,
|
|
20854
|
+
SelectCustomTriggerExample,
|
|
20855
|
+
SelectWithSectionHeadersExample,
|
|
20856
|
+
SelectWithVirtualizeAutocompleteExample,
|
|
20857
|
+
VirtualSelectWithSectionHeadersExample,
|
|
20858
|
+
} from "@baseline-ui/core";`,description:"`Select` is a trigger button that opens a popover listbox for picking one or more values from a predefined set of options. Use it when users need to choose from a fixed list that is too long for radio buttons or checkboxes.",documentation:`\`Select\` is a trigger button that opens a popover listbox for picking one or more values from a predefined set of options. Use it when users need to choose from a fixed list that is too long for radio buttons or checkboxes.
|
|
20293
20859
|
|
|
20294
20860
|
* Exposed to assistive technology as a button with a listbox popup using ARIA (combined with useListBox)
|
|
20295
20861
|
* Support for selecting a single option or multiple options
|
|
@@ -20470,13 +21036,13 @@ The autocomplete feature is particularly useful for large lists of options, and
|
|
|
20470
21036
|
<a href="?path=/story/core-forms-select--with-autocomplete">View story</a>
|
|
20471
21037
|
|
|
20472
21038
|
\`\`\`jsx
|
|
20473
|
-
import { useListData } from "react-stately";
|
|
20474
|
-
import { useFilter } from "react-aria";
|
|
20475
21039
|
import {
|
|
20476
21040
|
Autocomplete,
|
|
20477
21041
|
Virtualizer,
|
|
20478
21042
|
VIRTUALIZER_LAYOUT_DEFAULT_OPTIONS,
|
|
20479
21043
|
Select,
|
|
21044
|
+
useFilter,
|
|
21045
|
+
useListData,
|
|
20480
21046
|
} from "@baseline-ui/core";
|
|
20481
21047
|
|
|
20482
21048
|
function SelectWithAutocomplete() {
|
|
@@ -20539,13 +21105,13 @@ function VirtualizedSelect() {
|
|
|
20539
21105
|
Virtualization works seamlessly with autocomplete. This combination is recommended for large, searchable lists:
|
|
20540
21106
|
|
|
20541
21107
|
\`\`\`jsx
|
|
20542
|
-
import { useListData } from "react-stately";
|
|
20543
|
-
import { useFilter } from "react-aria";
|
|
20544
21108
|
import {
|
|
20545
21109
|
Virtualizer,
|
|
20546
21110
|
Autocomplete,
|
|
20547
21111
|
VIRTUALIZER_LAYOUT_DEFAULT_OPTIONS,
|
|
20548
21112
|
Select,
|
|
21113
|
+
useFilter,
|
|
21114
|
+
useListData,
|
|
20549
21115
|
} from "@baseline-ui/core";
|
|
20550
21116
|
|
|
20551
21117
|
function VirtualizedSelectWithAutocomplete() {
|
|
@@ -20828,7 +21394,149 @@ selectAllLabel?: string
|
|
|
20828
21394
|
* receives \`{ count }\` and its return value is used verbatim.
|
|
20829
21395
|
*/
|
|
20830
21396
|
moreLabel?: string | ((values: { count: number }) => string)
|
|
20831
|
-
}`,stories:{usage:[{id:"core-forms-select
|
|
21397
|
+
}`,stories:{usage:[{id:"core-forms-select--basic",name:"Basic",snippet:`const Basic = () => <Select
|
|
21398
|
+
aria-label="Choose Stroke Style"
|
|
21399
|
+
items={items}
|
|
21400
|
+
placeholder="Choose an item" />;`},{id:"core-forms-select--with-label",name:"With Label",snippet:`const WithLabel = () => <Select
|
|
21401
|
+
aria-label="Choose Stroke Style"
|
|
21402
|
+
items={items}
|
|
21403
|
+
placeholder="Choose Stroke Style"
|
|
21404
|
+
label="Label" />;`},{id:"core-forms-select--with-description",name:"With Description",snippet:`const WithDescription = () => <Select
|
|
21405
|
+
aria-label="Choose Stroke Style"
|
|
21406
|
+
items={items}
|
|
21407
|
+
placeholder="Choose Stroke Style"
|
|
21408
|
+
label="Label"
|
|
21409
|
+
description="Description" />;`},{id:"core-forms-select--with-error",name:"With Error",snippet:`const WithError = () => <Select
|
|
21410
|
+
aria-label="Choose Stroke Style"
|
|
21411
|
+
items={items}
|
|
21412
|
+
placeholder="Choose Stroke Style"
|
|
21413
|
+
label="Label"
|
|
21414
|
+
validationState="error" />;`},{id:"core-forms-select--with-error-and-error-message",name:"With Error And Error Message",snippet:`const WithErrorAndErrorMessage = () => <Select
|
|
21415
|
+
aria-label="Choose Stroke Style"
|
|
21416
|
+
items={items}
|
|
21417
|
+
placeholder="Choose Stroke Style"
|
|
21418
|
+
label="Label"
|
|
21419
|
+
validationState="error"
|
|
21420
|
+
errorMessage="Error message" />;`},{id:"core-forms-select--with-warning",name:"With Warning",snippet:`const WithWarning = () => <Select
|
|
21421
|
+
aria-label="Choose Stroke Style"
|
|
21422
|
+
items={items}
|
|
21423
|
+
placeholder="Choose Stroke Style"
|
|
21424
|
+
label="Label"
|
|
21425
|
+
validationState="warning" />;`},{id:"core-forms-select--with-warning-and-warning-message",name:"With Warning And Warning Message",snippet:`const WithWarningAndWarningMessage = () => <Select
|
|
21426
|
+
aria-label="Choose Stroke Style"
|
|
21427
|
+
items={items}
|
|
21428
|
+
placeholder="Choose Stroke Style"
|
|
21429
|
+
label="Label"
|
|
21430
|
+
validationState="warning"
|
|
21431
|
+
warningMessage="Warning message" />;`},{id:"core-forms-select--ghost",name:"Ghost",snippet:`const Ghost = () => <Select
|
|
21432
|
+
aria-label="Choose Stroke Style"
|
|
21433
|
+
items={items}
|
|
21434
|
+
placeholder="Choose Stroke Style"
|
|
21435
|
+
label="Label"
|
|
21436
|
+
variant="ghost" />;`},{id:"core-forms-select--read-only",name:"Read Only",snippet:`const ReadOnly = () => <Select
|
|
21437
|
+
aria-label="Choose Stroke Style"
|
|
21438
|
+
items={items}
|
|
21439
|
+
placeholder="Choose Stroke Style"
|
|
21440
|
+
label="Label"
|
|
21441
|
+
isReadOnly
|
|
21442
|
+
value="square" />;`},{id:"core-forms-select--with-disabled",name:"With Disabled",snippet:`const WithDisabled = () => <Select
|
|
21443
|
+
aria-label="Choose Stroke Style"
|
|
21444
|
+
items={items}
|
|
21445
|
+
placeholder="Choose Stroke Style"
|
|
21446
|
+
label="Label"
|
|
21447
|
+
isDisabled
|
|
21448
|
+
description="Description" />;`},{id:"core-forms-select--with-disabled-items",name:"With Disabled Items",snippet:`const WithDisabledItems = () => <Select
|
|
21449
|
+
aria-label="Choose Stroke Style"
|
|
21450
|
+
items={items}
|
|
21451
|
+
placeholder="Choose Stroke Style"
|
|
21452
|
+
label="Label"
|
|
21453
|
+
disabledKeys={["square"]} />;`},{id:"core-forms-select--with-default-selected-item",name:"With Default Selected Item",snippet:`const WithDefaultSelectedItem = () => <Select
|
|
21454
|
+
aria-label="Choose Stroke Style"
|
|
21455
|
+
items={items}
|
|
21456
|
+
placeholder="Choose Stroke Style"
|
|
21457
|
+
label="Label"
|
|
21458
|
+
defaultValue="square" />;`},{id:"core-forms-select--controlled",name:"Controlled",snippet:`const Controlled = () => <Select
|
|
21459
|
+
aria-label="Choose Stroke Style"
|
|
21460
|
+
items={items}
|
|
21461
|
+
placeholder="Choose Stroke Style"
|
|
21462
|
+
label="Label"
|
|
21463
|
+
value="square" />;`},{id:"core-forms-select--with-sections",name:"With Sections",snippet:`const WithSections = () => <Select
|
|
21464
|
+
aria-label="Choose Stroke Style"
|
|
21465
|
+
items={itemsWithSections}
|
|
21466
|
+
placeholder="Choose Stroke Style"
|
|
21467
|
+
label="Label" />;`},{id:"core-forms-select--with-section-headers",name:"With Section Headers",snippet:"const WithSectionHeaders = () => <SelectWithSectionHeadersExample />;"},{id:"core-forms-select--with-virtualized-section-headers",name:"With Virtualized Section Headers",snippet:"const WithVirtualizedSectionHeaders = () => <VirtualSelectWithSectionHeadersExample />;"},{id:"core-forms-select--with-default-open",name:"With Default Open",snippet:`const WithDefaultOpen = () => <Select
|
|
21468
|
+
aria-label="Choose Stroke Style"
|
|
21469
|
+
items={items}
|
|
21470
|
+
placeholder="Choose Stroke Style"
|
|
21471
|
+
label="Label"
|
|
21472
|
+
defaultOpen />;`},{id:"core-forms-select--with-controlled-open",name:"With Controlled Open",snippet:`const WithControlledOpen = () => <Select
|
|
21473
|
+
aria-label="Choose Stroke Style"
|
|
21474
|
+
items={items}
|
|
21475
|
+
placeholder="Choose Stroke Style"
|
|
21476
|
+
label="Label" />;`},{id:"core-forms-select--with-label-at-start",name:"With Label At Start",snippet:`const WithLabelAtStart = () => <Select
|
|
21477
|
+
aria-label="Choose Stroke Style"
|
|
21478
|
+
items={items}
|
|
21479
|
+
placeholder="Choose Stroke Style"
|
|
21480
|
+
label="Label"
|
|
21481
|
+
labelPosition="start"
|
|
21482
|
+
description="Description"
|
|
21483
|
+
placement="bottom end" />;`},{id:"core-forms-select--scrollable",name:"Scrollable",snippet:`const Scrollable = () => {
|
|
21484
|
+
const ref = React.useRef<HTMLDivElement>(null);
|
|
21485
|
+
|
|
21486
|
+
return (
|
|
21487
|
+
<div
|
|
21488
|
+
style={{
|
|
21489
|
+
height: 400,
|
|
21490
|
+
width: 400,
|
|
21491
|
+
overflow: "auto",
|
|
21492
|
+
border: \`1px solid gray\`,
|
|
21493
|
+
}}
|
|
21494
|
+
ref={ref}>
|
|
21495
|
+
<div style={{ height: 800, padding: 100 }}>
|
|
21496
|
+
<Select
|
|
21497
|
+
aria-label="Choose Stroke Style"
|
|
21498
|
+
items={items}
|
|
21499
|
+
placeholder="Choose Stroke Style"
|
|
21500
|
+
label="Label"
|
|
21501
|
+
placement="bottom start"
|
|
21502
|
+
scrollRef={ref} />
|
|
21503
|
+
</div>
|
|
21504
|
+
</div>
|
|
21505
|
+
);
|
|
21506
|
+
};`},{id:"core-forms-select--long-list",name:"Long List",snippet:`const LongList = () => <Select
|
|
21507
|
+
aria-label="Choose Stroke Style"
|
|
21508
|
+
items={longListItems}
|
|
21509
|
+
placeholder="Choose Stroke Style"
|
|
21510
|
+
label="Label"
|
|
21511
|
+
defaultOpen />;`},{id:"core-forms-select--with-custom-trigger",name:"With Custom Trigger",snippet:`const WithCustomTrigger = () => <SelectCustomTriggerExample
|
|
21512
|
+
aria-label="Choose Stroke Style"
|
|
21513
|
+
items={items}
|
|
21514
|
+
placeholder="Choose Stroke Style"
|
|
21515
|
+
label="Label" />;`},{id:"core-forms-select--with-autocomplete",name:"With Autocomplete",snippet:`const WithAutocomplete = () => <Select
|
|
21516
|
+
aria-label="Choose Stroke Style"
|
|
21517
|
+
items={items}
|
|
21518
|
+
placeholder="Choose Stroke Style"
|
|
21519
|
+
defaultOpen />;`},{id:"core-forms-select--empty-items",name:"Empty Items",snippet:`const EmptyItems = () => <Select
|
|
21520
|
+
aria-label="Choose Stroke Style"
|
|
21521
|
+
items={[]}
|
|
21522
|
+
placeholder="No items available"
|
|
21523
|
+
label="Label" />;`},{id:"core-forms-select--long-labels",name:"Long Labels",snippet:`const LongLabels = () => <Select
|
|
21524
|
+
aria-label="Choose Stroke Style"
|
|
21525
|
+
items={[
|
|
21526
|
+
{
|
|
21527
|
+
id: "long1",
|
|
21528
|
+
label:
|
|
21529
|
+
"This is a very long label that should demonstrate text overflow behavior in the select trigger",
|
|
21530
|
+
},
|
|
21531
|
+
{
|
|
21532
|
+
id: "long2",
|
|
21533
|
+
label:
|
|
21534
|
+
"Another extremely long option label to test how the dropdown handles items with lots of text",
|
|
21535
|
+
},
|
|
21536
|
+
{ id: "short", label: "Short" },
|
|
21537
|
+
]}
|
|
21538
|
+
placeholder="Choose Stroke Style"
|
|
21539
|
+
label="Label" />;`},{id:"core-forms-select-multiselect--basic",name:"Basic",error:{name:"SyntaxError",message:`Expected story to be a function or variable declaration
|
|
20832
21540
|
32 | type Story = StoryObj<typeof meta>;
|
|
20833
21541
|
33 |
|
|
20834
21542
|
> 34 | export {
|
|
@@ -21315,7 +22023,7 @@ export const CountingSelectExample: React.FC = () => {
|
|
|
21315
22023
|
};`},similarTo:[],figmaUrl:null},Separator:{id:"core-content-separator",breadcrumb:"Core/Content/Separator",importStatement:'import { Separator } from "@baseline-ui/core";',description:"`Separator` is a thin horizontal or vertical rule that divides adjacent content. Use it to create a visual break between sections, groups of controls, or items in a list.",documentation:`\`Separator\` is a thin horizontal or vertical rule that divides adjacent content. Use it to create a visual break between sections, groups of controls, or items in a list.
|
|
21316
22024
|
|
|
21317
22025
|
\`\`\`jsx
|
|
21318
|
-
import { Separator } from "
|
|
22026
|
+
import { Separator } from "@baseline-ui/core";
|
|
21319
22027
|
|
|
21320
22028
|
<Separator />;
|
|
21321
22029
|
\`\`\`
|
|
@@ -21323,7 +22031,7 @@ import { Separator } from "../../utils";
|
|
|
21323
22031
|
By default, the separator is horizontal.
|
|
21324
22032
|
|
|
21325
22033
|
\`\`\`jsx
|
|
21326
|
-
import { Separator } from "
|
|
22034
|
+
import { Separator } from "@baseline-ui/core";
|
|
21327
22035
|
|
|
21328
22036
|
<div>
|
|
21329
22037
|
Section 1
|
|
@@ -21335,7 +22043,7 @@ import { Separator } from "../../utils";
|
|
|
21335
22043
|
The \`orientation\` prop can be used to change the orientation of the separator.
|
|
21336
22044
|
|
|
21337
22045
|
\`\`\`jsx
|
|
21338
|
-
import { Separator } from "
|
|
22046
|
+
import { Separator } from "@baseline-ui/core";
|
|
21339
22047
|
|
|
21340
22048
|
<div>
|
|
21341
22049
|
Section 1
|
|
@@ -21603,7 +22311,7 @@ style?: React.CSSProperties
|
|
|
21603
22311
|
</Box>
|
|
21604
22312
|
</Box>
|
|
21605
22313
|
</Box>
|
|
21606
|
-
);`}],implementation:""},similarTo:[],figmaUrl:null},Slider:{id:"core-forms-slider",breadcrumb:"Core/Forms/Slider",importStatement:'import { Slider } from "@baseline-ui/core";',description:"`Slider` is a draggable thumb on a track that lets users pick a numeric value between a minimum and maximum. Use it for continuous or stepped settings such as volume, opacity, or zoom level where approximate selection is acceptable.",documentation:'`Slider` is a draggable thumb on a track that lets users pick a numeric value between a minimum and maximum. Use it for continuous or stepped settings such as volume, opacity, or zoom level where approximate selection is acceptable.\n\n* Supports keyboard, mouse, and touch interactions.\n* Pressing on the track will move the thumb to that position.\n* Supports a number input that allows users to enter a value directly.\n* Supports a read only state.\n* Supports a disabled state.\n* Supports using the arrow keys, as well as page up/down, home, and end keys\n* Supports using the shift key to increment/decrement by ~10% of the range (page step).\n* Support for custom min, max, and step values with handling for rounding errors\n* Prevents text selection while dragging\n* Exposed to assistive technology as a group of slider elements via ARIA\n* Slider thumbs use hidden native input elements to support touch screen readers\n* Support for labeling the slider\n* Internationalized number formatting as a percentage or value\n\nYou can use the Slider component in your code like this:\n\n```jsx\nimport { Slider } from "@baseline-ui/core";\n\n<Slider\n aria-label="Opacity"\n value={50}\n minValue={0}\n maxValue={100}\n onChange={(value) => console.log(value)}\n/>;\n```\n\nYou can set the `step` prop to control the increment/decrement amount when using the keyboard to change the value. The default value is `1`. The below example shows how to set the `step` prop to `10`.\n\nYou can set the `minValue` and `maxValue` props to control the minimum and maximum allowed values. The default values are `0` and `100` respectively. The below example shows how to set `minValue` to `-100` and `maxValue` to `100`.\n\nYou can include a number input by setting the `includeNumberInput` prop to `true`. This will render a number input next to the slider that will allow users to enter a value directly.\n\nThe `Slider` component can be used in a read only state by setting the `isReadOnly` prop to `true`.\n\nIf you include a number input, the read-only state is applied to that input as well.\n\nThe `Slider` component can be used in a disabled state by setting the `isDisabled` prop to `true`.\n\nThe `value` prop can be used to control the value of the `Slider` component from outside of the component.\n\n```jsx\nimport React, { useState } from "react";\nimport { Slider } from "@baseline-ui/core";\n\nfunction App() {\n const [value, setValue] = useState(50);\n\n return (\n <Slider\n aria-label="Opacity"\n value={value}\n minValue={0}\n maxValue={100}\n onChange={(value) => setValue(value)}\n />\n );\n}\n```\n\nYou can also use `onChangeEnd` to only update state when the user finishes interacting (e.g., on mouse-up), which is useful for expensive state updates.\n\nThe Slider component is built with accessibility in mind. It supports keyboard interactions and is fully accessible to screen readers.\nIt follows the [WAI-ARIA Slider Pattern](https://www.w3.org/WAI/ARIA/apg/patterns/slider/).\n\n| Keyboard Shortcuts | Description |\n| --------------------- | ----------------------------------------------- |\n| `Left Arrow` | Decrease value by `step` amount |\n| `Right Arrow` | Increase value by `step` amount |\n| `Up Arrow` | Increase value by `step` amount |\n| `Down Arrow` | Decrease value by `step` amount |\n| `Shift + Left Arrow` | Decrease value by ~10% of the range (page step) |\n| `Shift + Right Arrow` | Increase value by ~10% of the range (page step) |\n| `Shift + Up Arrow` | Increase value by ~10% of the range (page step) |\n| `Shift + Down Arrow` | Decrease value by ~10% of the range (page step) |\n| `Home` | Set value to the minimum allowed value |\n| `End` | Set value to the maximum allowed value |\n\nThe following data attributes are available on the thumb handle element (`.BaselineUI-Slider-ThumbHandle`):\n\n| Selector | Description |\n| ---------------------- | ---------------------------------------- |\n| `[data-disabled]` | Whether the slider is disabled. |\n| `[data-readonly]` | Whether the slider is read-only. |\n| `[data-hovered]` | Whether the thumb is currently hovered. |\n| `[data-focused]` | Whether the thumb is focused. |\n| `[data-focus-visible]` | Whether the thumb has keyboard focus. |\n| `[data-dragging]` | Whether the thumb is currently dragging. |\n\nThe `IconSlider` component displays an icon and a value button. Clicking the button opens a popover containing a `Slider` for adjusting the value.\n\n```jsx\nimport { LineWidthIcon } from "@baseline-ui/icons/24";\nimport { IconSlider } from "@baseline-ui/core";\n\n<IconSlider\n aria-label="Line width"\n value={50}\n minValue={0}\n maxValue={100}\n onChange={(value) => console.log(value)}\n icon={LineWidthIcon}\n/>;\n```\n\nYou can disable the trigger tooltip and icon tooltip by setting `tooltip={false}` and `iconTooltip={false}`.\n\n`IconSlider` passes `includeNumberInput` through to the inner `Slider`, which lets users adjust the value with either the slider thumb or a numeric field inside the popover.',props:`interface SliderProps {
|
|
22314
|
+
);`}],implementation:""},similarTo:[],figmaUrl:null},Slider:{id:"core-forms-slider",breadcrumb:"Core/Forms/Slider",importStatement:'import { Slider } from "@baseline-ui/core";',description:"`Slider` is a draggable thumb on a track that lets users pick a numeric value between a minimum and maximum. Use it for continuous or stepped settings such as volume, opacity, or zoom level where approximate selection is acceptable.",documentation:'`Slider` is a draggable thumb on a track that lets users pick a numeric value between a minimum and maximum. Use it for continuous or stepped settings such as volume, opacity, or zoom level where approximate selection is acceptable.\n\n* Supports keyboard, mouse, and touch interactions.\n* Pressing on the track will move the thumb to that position.\n* Supports a number input that allows users to enter a value directly.\n* Supports a read only state.\n* Supports a disabled state.\n* Supports using the arrow keys, as well as page up/down, home, and end keys\n* Supports using the shift key to increment/decrement by ~10% of the range (page step).\n* Support for custom min, max, and step values with handling for rounding errors\n* Prevents text selection while dragging\n* Exposed to assistive technology as a group of slider elements via ARIA\n* Slider thumbs use hidden native input elements to support touch screen readers\n* Support for labeling the slider\n* Internationalized number formatting as a percentage or value\n\nYou can use the Slider component in your code like this:\n\n```jsx\nimport { Slider } from "@baseline-ui/core";\n\n<Slider\n aria-label="Opacity"\n value={50}\n minValue={0}\n maxValue={100}\n onChange={(value) => console.log(value)}\n/>;\n```\n\nYou can set the `step` prop to control the increment/decrement amount when using the keyboard to change the value. The default value is `1`. The below example shows how to set the `step` prop to `10`.\n\nYou can set the `minValue` and `maxValue` props to control the minimum and maximum allowed values. The default values are `0` and `100` respectively. The below example shows how to set `minValue` to `-100` and `maxValue` to `100`.\n\nYou can include a number input by setting the `includeNumberInput` prop to `true`. This will render a number input next to the slider that will allow users to enter a value directly.\n\nUse the `description` prop to show helper text below the slider. It is announced as the slider\'s accessible description.\n\nThe `Slider` component can be used in a read only state by setting the `isReadOnly` prop to `true`.\n\nIf you include a number input, the read-only state is applied to that input as well.\n\nThe `Slider` component can be used in a disabled state by setting the `isDisabled` prop to `true`.\n\nThe `value` prop can be used to control the value of the `Slider` component from outside of the component.\n\n```jsx\nimport React, { useState } from "react";\nimport { Slider } from "@baseline-ui/core";\n\nfunction App() {\n const [value, setValue] = useState(50);\n\n return (\n <Slider\n aria-label="Opacity"\n value={value}\n minValue={0}\n maxValue={100}\n onChange={(value) => setValue(value)}\n />\n );\n}\n```\n\nYou can also use `onChangeEnd` to only update state when the user finishes interacting (e.g., on mouse-up), which is useful for expensive state updates.\n\nThe Slider component is built with accessibility in mind. It supports keyboard interactions and is fully accessible to screen readers.\nIt follows the [WAI-ARIA Slider Pattern](https://www.w3.org/WAI/ARIA/apg/patterns/slider/).\n\n| Keyboard Shortcuts | Description |\n| --------------------- | ----------------------------------------------- |\n| `Left Arrow` | Decrease value by `step` amount |\n| `Right Arrow` | Increase value by `step` amount |\n| `Up Arrow` | Increase value by `step` amount |\n| `Down Arrow` | Decrease value by `step` amount |\n| `Shift + Left Arrow` | Decrease value by ~10% of the range (page step) |\n| `Shift + Right Arrow` | Increase value by ~10% of the range (page step) |\n| `Shift + Up Arrow` | Increase value by ~10% of the range (page step) |\n| `Shift + Down Arrow` | Decrease value by ~10% of the range (page step) |\n| `Home` | Set value to the minimum allowed value |\n| `End` | Set value to the maximum allowed value |\n\nThe following data attributes are available on the thumb handle element (`.BaselineUI-Slider-ThumbHandle`):\n\n| Selector | Description |\n| ---------------------- | ---------------------------------------- |\n| `[data-disabled]` | Whether the slider is disabled. |\n| `[data-readonly]` | Whether the slider is read-only. |\n| `[data-hovered]` | Whether the thumb is currently hovered. |\n| `[data-focused]` | Whether the thumb is focused. |\n| `[data-focus-visible]` | Whether the thumb has keyboard focus. |\n| `[data-dragging]` | Whether the thumb is currently dragging. |\n\nThe `IconSlider` component displays an icon and a value button. Clicking the button opens a popover containing a `Slider` for adjusting the value.\n\n```jsx\nimport { LineWidthIcon } from "@baseline-ui/icons/24";\nimport { IconSlider } from "@baseline-ui/core";\n\n<IconSlider\n aria-label="Line width"\n value={50}\n minValue={0}\n maxValue={100}\n onChange={(value) => console.log(value)}\n icon={LineWidthIcon}\n/>;\n```\n\nYou can disable the trigger tooltip and icon tooltip by setting `tooltip={false}` and `iconTooltip={false}`.\n\n`IconSlider` passes `includeNumberInput` through to the inner `Slider`, which lets users adjust the value with either the slider thumb or a numeric field inside the popover.',props:`interface SliderProps {
|
|
21607
22315
|
/**
|
|
21608
22316
|
* @deprecated Do not use in new components. This is a legacy block
|
|
21609
22317
|
* identifier; new components should exclude it via
|
|
@@ -21651,6 +22359,10 @@ numberFormatOptions?: Intl.NumberFormatOptions & { numberingSystem?: string }
|
|
|
21651
22359
|
* The label for the slider.
|
|
21652
22360
|
*/
|
|
21653
22361
|
label?: React.ReactNode
|
|
22362
|
+
/**
|
|
22363
|
+
* The description of the slider.
|
|
22364
|
+
*/
|
|
22365
|
+
description?: string
|
|
21654
22366
|
/**
|
|
21655
22367
|
* Whether to include a number input for the slider.
|
|
21656
22368
|
*
|
|
@@ -21683,17 +22395,35 @@ numberInputStyle?: NumberInputProps["style"]
|
|
|
21683
22395
|
label="Slider label"
|
|
21684
22396
|
numberFormatOptions={{
|
|
21685
22397
|
style: "percent",
|
|
21686
|
-
}} />;`},{id:"core-forms-slider--with-label-and-number-input",name:"With Label And Number Input",snippet:"const WithLabelAndNumberInput = () => <Slider includeNumberInput />;"}],implementation:`import React from "react";
|
|
22398
|
+
}} />;`},{id:"core-forms-slider--with-label-and-number-input",name:"With Label And Number Input",snippet:"const WithLabelAndNumberInput = () => <Slider includeNumberInput />;"},{id:"core-forms-slider--with-description",name:"With Description",snippet:'const WithDescription = () => <Slider label="Opacity" description="Controls how transparent the layer is." />;'}],implementation:`import React from "react";
|
|
21687
22399
|
|
|
21688
22400
|
import { IconSlider } from "../IconSlider";
|
|
22401
|
+
import { Slider } from "../Slider";
|
|
21689
22402
|
|
|
21690
22403
|
import type { IconSliderProps } from "../Slider.types";
|
|
21691
22404
|
|
|
21692
22405
|
const TestIcon = () => <div>Icon</div>;
|
|
21693
22406
|
|
|
21694
22407
|
export const IconSliderWithIconExample: React.FC<
|
|
21695
|
-
Omit<IconSliderProps, "icon">
|
|
21696
|
-
|
|
22408
|
+
Omit<IconSliderProps, "icon"> & {
|
|
22409
|
+
onAncestorKeyDown?: React.KeyboardEventHandler;
|
|
22410
|
+
}
|
|
22411
|
+
> = ({ onAncestorKeyDown, ...props }) => (
|
|
22412
|
+
<div onKeyDown={onAncestorKeyDown}>
|
|
22413
|
+
<IconSlider icon={TestIcon} {...props} />
|
|
22414
|
+
</div>
|
|
22415
|
+
);
|
|
22416
|
+
|
|
22417
|
+
export const SliderWithExternalDescriptionExample: React.FC = () => (
|
|
22418
|
+
<>
|
|
22419
|
+
<p id="external-hint">Applies to the whole layer</p>
|
|
22420
|
+
<Slider
|
|
22421
|
+
label="Opacity"
|
|
22422
|
+
description="Controls transparency"
|
|
22423
|
+
aria-describedby="external-hint"
|
|
22424
|
+
/>
|
|
22425
|
+
</>
|
|
22426
|
+
);`},similarTo:[],figmaUrl:null},StatusCard:{id:"core-content-statuscard",breadcrumb:"Core/Content/StatusCard",importStatement:`import { Actionable, Box, StatusCard, Text, VariantViewer } from "@baseline-ui/core";
|
|
21697
22427
|
import { CaretUpIcon } from "@baseline-ui/icons/12";`,description:"`StatusCard` is a compact card that pairs a status icon with a title and description to communicate the state of a process or item. Use it to surface health, progress, or outcome signals such as active, success, warning, error, or denied conditions.",documentation:`\`StatusCard\` is a compact card that pairs a status icon with a title and description to communicate the state of a process or item. Use it to surface health, progress, or outcome signals such as active, success, warning, error, or denied conditions.
|
|
21698
22428
|
|
|
21699
22429
|
* Supports multiple status variants: \`active\`, \`warning\`, \`error\`, \`denied\`, and \`success\`
|
|
@@ -22579,7 +23309,7 @@ export function CheckoutWizard({
|
|
|
22579
23309
|
* Exposed as a switch to assistive technology via ARIA
|
|
22580
23310
|
|
|
22581
23311
|
\`\`\`jsx
|
|
22582
|
-
import { Switch } from "
|
|
23312
|
+
import { Switch } from "@baseline-ui/core";
|
|
22583
23313
|
|
|
22584
23314
|
<Switch />;
|
|
22585
23315
|
\`\`\`
|
|
@@ -22587,7 +23317,7 @@ import { Switch } from "../../utils";
|
|
|
22587
23317
|
The Switch is enabled by default. To disable the Switch, pass the \`isDisabled\` prop.
|
|
22588
23318
|
|
|
22589
23319
|
\`\`\`jsx
|
|
22590
|
-
import { Switch } from "
|
|
23320
|
+
import { Switch } from "@baseline-ui/core";
|
|
22591
23321
|
|
|
22592
23322
|
<Switch />;
|
|
22593
23323
|
\`\`\`
|
|
@@ -22595,7 +23325,7 @@ import { Switch } from "../../utils";
|
|
|
22595
23325
|
The Switch is unselected by default and is in uncontrolled mode. You can pass the \`defaultSelected\` prop to set the initial state of the Switch.
|
|
22596
23326
|
|
|
22597
23327
|
\`\`\`jsx
|
|
22598
|
-
import { Switch } from "
|
|
23328
|
+
import { Switch } from "@baseline-ui/core";
|
|
22599
23329
|
|
|
22600
23330
|
<Switch defaultSelected />;
|
|
22601
23331
|
\`\`\`
|
|
@@ -22603,7 +23333,7 @@ import { Switch } from "../../utils";
|
|
|
22603
23333
|
If you want to control the state of the Switch, pass the \`isSelected\` prop and handle the \`onChange\` event.
|
|
22604
23334
|
|
|
22605
23335
|
\`\`\`jsx
|
|
22606
|
-
import { Switch } from "
|
|
23336
|
+
import { Switch } from "@baseline-ui/core";
|
|
22607
23337
|
|
|
22608
23338
|
<Switch isSelected />;
|
|
22609
23339
|
\`\`\`
|
|
@@ -22612,7 +23342,7 @@ You can pass the \`isReadOnly\` prop to prevent the user from changing the state
|
|
|
22612
23342
|
This is useful when you want screen readers to be able to read the state of the Switch, but you don't want the user to be able to change it.
|
|
22613
23343
|
|
|
22614
23344
|
\`\`\`jsx
|
|
22615
|
-
import { Switch } from "
|
|
23345
|
+
import { Switch } from "@baseline-ui/core";
|
|
22616
23346
|
|
|
22617
23347
|
<Switch isReadOnly />;
|
|
22618
23348
|
\`\`\`
|
|
@@ -22620,7 +23350,7 @@ import { Switch } from "../../utils";
|
|
|
22620
23350
|
You can pass the \`isDisabled\` prop to prevent the user from changing the state of the Switch. In this mode the Switch is not focusable, and the user cannot change the state.
|
|
22621
23351
|
|
|
22622
23352
|
\`\`\`jsx
|
|
22623
|
-
import { Switch } from "
|
|
23353
|
+
import { Switch } from "@baseline-ui/core";
|
|
22624
23354
|
|
|
22625
23355
|
<Switch isDisabled />;
|
|
22626
23356
|
\`\`\`
|
|
@@ -22628,7 +23358,7 @@ import { Switch } from "../../utils";
|
|
|
22628
23358
|
The \`Switch\` supports \`name\`, \`value\`, and \`onChange\` props to support HTML forms.
|
|
22629
23359
|
|
|
22630
23360
|
\`\`\`jsx
|
|
22631
|
-
import { Switch } from "
|
|
23361
|
+
import { Switch } from "@baseline-ui/core";
|
|
22632
23362
|
|
|
22633
23363
|
<Switch
|
|
22634
23364
|
name="switch"
|
|
@@ -22640,7 +23370,7 @@ import { Switch } from "../../utils";
|
|
|
22640
23370
|
You can pass the \`label\` prop to add a label to the Switch. In this case, you don't need to pass the \`aria-label\` or \`aria-labelledby\` props.
|
|
22641
23371
|
|
|
22642
23372
|
\`\`\`jsx
|
|
22643
|
-
import { Switch } from "
|
|
23373
|
+
import { Switch } from "@baseline-ui/core";
|
|
22644
23374
|
|
|
22645
23375
|
<Switch label="Label" />;
|
|
22646
23376
|
\`\`\`
|
|
@@ -22648,7 +23378,7 @@ import { Switch } from "../../utils";
|
|
|
22648
23378
|
You can also position the label to the left of the Switch by passing the \`labelPosition\` prop.
|
|
22649
23379
|
|
|
22650
23380
|
\`\`\`jsx
|
|
22651
|
-
import { Switch } from "
|
|
23381
|
+
import { Switch } from "@baseline-ui/core";
|
|
22652
23382
|
|
|
22653
23383
|
<div style={{ width: 200 }}>
|
|
22654
23384
|
<Switch label="Label" labelPosition="left" />
|
|
@@ -22658,7 +23388,7 @@ import { Switch } from "../../utils";
|
|
|
22658
23388
|
You can also pass an additional \`statusLabel\` prop to add the meaning of the different states of the Switch. This is useful when the label is not enough to convey the meaning of the Switch.
|
|
22659
23389
|
|
|
22660
23390
|
\`\`\`jsx
|
|
22661
|
-
import { Switch, Separator } from "
|
|
23391
|
+
import { Switch, Separator } from "@baseline-ui/core";
|
|
22662
23392
|
|
|
22663
23393
|
<Switch label="Label" statusLabel={{ on: "On", off: "Off" }} />;
|
|
22664
23394
|
<Separator style={{ margin: "10px 0" }} />
|
|
@@ -22685,10 +23415,7 @@ The status labels can improve the accessibility of the Switch. However, they are
|
|
|
22685
23415
|
|
|
22686
23416
|
| Key | Function |
|
|
22687
23417
|
| ------- | ------------------------------- |
|
|
22688
|
-
| \`Space\` | Toggle the state of the switch.
|
|
22689
|
-
|
|
22690
|
-
\`\`\`
|
|
22691
|
-
\`\`\``,props:`interface SwitchProps {
|
|
23418
|
+
| \`Space\` | Toggle the state of the switch. |`,props:`interface SwitchProps {
|
|
22692
23419
|
/**
|
|
22693
23420
|
* @deprecated Do not use in new components. This is a legacy block
|
|
22694
23421
|
* identifier; new components should exclude it via
|
|
@@ -23653,6 +24380,7 @@ import { useTableDragAndDrop } from "../hooks/useTableDragAndDrop";
|
|
|
23653
24380
|
import { Cell, Column, Row, Table, TableBody, TableHeader } from "../Table";
|
|
23654
24381
|
|
|
23655
24382
|
import type { TagVariant } from "../../Tag";
|
|
24383
|
+
import type { TableProps } from "../Table.types";
|
|
23656
24384
|
import type { DroppableCollectionReorderEvent } from "@react-types/shared";
|
|
23657
24385
|
import type { Selection, SortDescriptor } from "react-aria-components";
|
|
23658
24386
|
|
|
@@ -23893,15 +24621,17 @@ export const MultipleSelectionTableExample: React.FC<
|
|
|
23893
24621
|
|
|
23894
24622
|
interface SortableTableExampleProps {
|
|
23895
24623
|
onSortChange?: (sortDescriptor: SortDescriptor) => void;
|
|
24624
|
+
defaultSortDescriptor?: SortDescriptor;
|
|
23896
24625
|
}
|
|
23897
24626
|
|
|
23898
24627
|
/** Sortable columns with sort descriptor and client-side sorting. */
|
|
23899
24628
|
export const SortableTableExample: React.FC<SortableTableExampleProps> = ({
|
|
23900
24629
|
onSortChange,
|
|
24630
|
+
defaultSortDescriptor,
|
|
23901
24631
|
}) => {
|
|
23902
24632
|
const [sortDescriptor, setSortDescriptor] = useState<
|
|
23903
24633
|
SortDescriptor | undefined
|
|
23904
|
-
>();
|
|
24634
|
+
>(defaultSortDescriptor);
|
|
23905
24635
|
const [sortedRows, setSortedRows] = useState(rows);
|
|
23906
24636
|
|
|
23907
24637
|
const handleSortChange = useCallback(
|
|
@@ -23909,7 +24639,7 @@ export const SortableTableExample: React.FC<SortableTableExampleProps> = ({
|
|
|
23909
24639
|
setSortDescriptor(descriptor);
|
|
23910
24640
|
onSortChange?.(descriptor);
|
|
23911
24641
|
|
|
23912
|
-
const sorted = rows.
|
|
24642
|
+
const sorted = [...rows].sort((a, b) => {
|
|
23913
24643
|
const colKey = String(descriptor.column) as keyof RowItem;
|
|
23914
24644
|
return descriptor.direction === "ascending"
|
|
23915
24645
|
? String(a[colKey]).localeCompare(String(b[colKey]))
|
|
@@ -24215,13 +24945,15 @@ export const EmptyTableExample: React.FC = () => {
|
|
|
24215
24945
|
|
|
24216
24946
|
interface OnRowActionTableExampleProps {
|
|
24217
24947
|
onRowAction?: (key: React.Key) => void;
|
|
24948
|
+
selectionMode?: TableProps["selectionMode"];
|
|
24949
|
+
selectionBehavior?: TableProps["selectionBehavior"];
|
|
24218
24950
|
}
|
|
24219
24951
|
|
|
24220
24952
|
/** Table with onRowAction callback. */
|
|
24221
24953
|
export const OnRowActionTableExample: React.FC<
|
|
24222
24954
|
OnRowActionTableExampleProps
|
|
24223
|
-
> = ({ onRowAction }) => (
|
|
24224
|
-
<Table aria-label="Files" onRowAction={onRowAction}>
|
|
24955
|
+
> = ({ onRowAction, ...props }) => (
|
|
24956
|
+
<Table aria-label="Files" onRowAction={onRowAction} {...props}>
|
|
24225
24957
|
<TableHeader>
|
|
24226
24958
|
<Column id="name" isRowHeader={true}>
|
|
24227
24959
|
Name
|
|
@@ -24708,7 +25440,7 @@ export const TagAndMenuTableExample: React.FC = () => (
|
|
|
24708
25440
|
* Supports focus management for tab panels without any focusable children
|
|
24709
25441
|
|
|
24710
25442
|
\`\`\`jsx
|
|
24711
|
-
import { Tabs, TabItem } from "
|
|
25443
|
+
import { Tabs, TabItem } from "@baseline-ui/core";
|
|
24712
25444
|
|
|
24713
25445
|
<Tabs aria-label="Example">
|
|
24714
25446
|
<TabItem value="tab-1" title="Tab 1">
|
|
@@ -24724,7 +25456,7 @@ If you pass an \`onRemove\` prop to the \`Tabs\` component, a close icon will be
|
|
|
24724
25456
|
pass an \`onRemove\` prop, the close icon won\u2019t be rendered.
|
|
24725
25457
|
|
|
24726
25458
|
\`\`\`jsx
|
|
24727
|
-
import { Tabs, TabItem } from "
|
|
25459
|
+
import { Tabs, TabItem } from "@baseline-ui/core";
|
|
24728
25460
|
|
|
24729
25461
|
<Tabs aria-label="Danish Composers" onRemove={() => alert("Delete")}>
|
|
24730
25462
|
<TabItem value="tab-1" title="Maria Ahlefeldt">
|
|
@@ -24739,7 +25471,7 @@ A default selected tab can be specified by passing the \`defaultSelectedValue\`
|
|
|
24739
25471
|
the first \`TabItem\` will be selected by default.
|
|
24740
25472
|
|
|
24741
25473
|
\`\`\`jsx
|
|
24742
|
-
import { Tabs, TabItem } from "
|
|
25474
|
+
import { Tabs, TabItem } from "@baseline-ui/core";
|
|
24743
25475
|
|
|
24744
25476
|
<Tabs aria-label="Danish Composers" defaultSelectedValue="tab-2">
|
|
24745
25477
|
<TabItem value="tab-1" title="Maria Ahlefeldt">
|
|
@@ -24759,7 +25491,7 @@ import { Tabs, TabItem } from "../../utils";
|
|
|
24759
25491
|
A tab can be disabled by passing the \`isDisabled\` prop to the \`Tabs\` component. Disabled tabs cannot be selected.
|
|
24760
25492
|
|
|
24761
25493
|
\`\`\`jsx
|
|
24762
|
-
import { Tabs, TabItem } from "
|
|
25494
|
+
import { Tabs, TabItem } from "@baseline-ui/core";
|
|
24763
25495
|
|
|
24764
25496
|
<Tabs aria-label="Danish Composers" isDisabled>
|
|
24765
25497
|
<TabItem value="tab-1" title="Maria Ahlefeldt">
|
|
@@ -24773,7 +25505,7 @@ import { Tabs, TabItem } from "../../utils";
|
|
|
24773
25505
|
Individual tab items can be disabled by passing the \`disabledValues\` prop to the \`Tabs\` component. The value should be an array of \`value\`s of the \`TabItem\`s that should be disabled.
|
|
24774
25506
|
|
|
24775
25507
|
\`\`\`jsx
|
|
24776
|
-
import { Tabs, TabItem } from "
|
|
25508
|
+
import { Tabs, TabItem } from "@baseline-ui/core";
|
|
24777
25509
|
|
|
24778
25510
|
<Tabs aria-label="Danish Composers" disabledValues={new Set(["tab-2"])}>
|
|
24779
25511
|
<TabItem value="tab-1" title="Maria Ahlefeldt">
|
|
@@ -24787,7 +25519,7 @@ import { Tabs, TabItem } from "../../utils";
|
|
|
24787
25519
|
The entire tab panel is given a \`tabIndex=0\` when the tab panel doesn\u2019t have any focusable content so that the content can be accessed with the keyboard. The \`tabIndex\` is omitted when the tab panel includes focusable content, like an input element, because the content can be focused independently.
|
|
24788
25520
|
|
|
24789
25521
|
\`\`\`jsx
|
|
24790
|
-
import { Tabs, TabItem, Checkbox } from "
|
|
25522
|
+
import { Tabs, TabItem, Checkbox } from "@baseline-ui/core";
|
|
24791
25523
|
|
|
24792
25524
|
<Tabs aria-label="Danish Composers">
|
|
24793
25525
|
<TabItem value="tab-1" title="Maria Ahlefeldt">
|
|
@@ -24798,11 +25530,11 @@ import { Tabs, TabItem, Checkbox } from "../../utils";
|
|
|
24798
25530
|
</Tabs>;
|
|
24799
25531
|
\`\`\`
|
|
24800
25532
|
|
|
24801
|
-
|
|
25533
|
+
Pass an \`actions\` array to \`Tabs\` to render action icon buttons beside the tab items; each entry takes the \`ActionIconButton\` props except \`variant\` and \`size\`. Pressing a button calls its \`onPress\`.
|
|
24802
25534
|
|
|
24803
25535
|
\`\`\`jsx
|
|
24804
|
-
import { Tabs } from "
|
|
24805
|
-
import { PlusIcon } from "
|
|
25536
|
+
import { Tabs, TabItem } from "@baseline-ui/core";
|
|
25537
|
+
import { PlusIcon } from "@baseline-ui/icons/16";
|
|
24806
25538
|
|
|
24807
25539
|
<Tabs
|
|
24808
25540
|
aria-label="Danish Composers"
|
|
@@ -24810,7 +25542,7 @@ import { PlusIcon } from "../Icon";
|
|
|
24810
25542
|
actions={[
|
|
24811
25543
|
{
|
|
24812
25544
|
icon: PlusIcon,
|
|
24813
|
-
onPress: () => alert("
|
|
25545
|
+
onPress: () => alert("Add"),
|
|
24814
25546
|
"aria-label": "Add",
|
|
24815
25547
|
},
|
|
24816
25548
|
]}
|
|
@@ -24834,10 +25566,10 @@ import { PlusIcon } from "../Icon";
|
|
|
24834
25566
|
*
|
|
24835
25567
|
* \`\`\`jsx
|
|
24836
25568
|
* <Tabs>
|
|
24837
|
-
* <TabItem
|
|
25569
|
+
* <TabItem value="tab1" title="Tab 1">
|
|
24838
25570
|
* <div>Tab 1 content</div>
|
|
24839
25571
|
* </TabItem>
|
|
24840
|
-
* <TabItem
|
|
25572
|
+
* <TabItem value="tab2" title="Tab 2">
|
|
24841
25573
|
* <div>Tab 2 content</div>
|
|
24842
25574
|
* </TabItem>
|
|
24843
25575
|
* </Tabs>;
|
|
@@ -25083,6 +25815,13 @@ isSelected?: boolean
|
|
|
25083
25815
|
* is rendered.
|
|
25084
25816
|
*/
|
|
25085
25817
|
onRemove?: () => void
|
|
25818
|
+
/**
|
|
25819
|
+
* Overrides the accessible label of the remove button. Ignored inside a
|
|
25820
|
+
* \`TagGroup\`, which labels its own remove buttons.
|
|
25821
|
+
*
|
|
25822
|
+
* Message id: \`bui.tag.remove\`. Defaults to \`"Remove"\`.
|
|
25823
|
+
*/
|
|
25824
|
+
removeLabel?: string
|
|
25086
25825
|
}`,stories:{usage:[{id:"core-content-tag--basic",name:"Basic",snippet:"const Basic = () => <Tag>Tag</Tag>;"},{id:"core-content-tag--with-icon",name:"With Icon",snippet:"const WithIcon = () => <Tag icon={EllipseIcon}>Tag</Tag>;"},{id:"core-content-tag--removable",name:"Removable",snippet:"const Removable = () => <Tag onRemove={fn()}>Tag</Tag>;"},{id:"core-content-tag--selected",name:"Selected",snippet:"const Selected = () => <Tag isSelected>Tag</Tag>;"},{id:"core-content-tag--selected-with-icon",name:"Selected With Icon",snippet:"const SelectedWithIcon = () => <Tag isSelected icon={EllipseIcon}>Tag</Tag>;"},{id:"core-content-tag--disabled",name:"Disabled",snippet:"const Disabled = () => <Tag isDisabled>Tag</Tag>;"},{id:"core-content-tag--disabled-removable",name:"Disabled Removable",snippet:"const DisabledRemovable = () => <Tag isDisabled onRemove={fn()}>Tag</Tag>;"},{id:"core-content-tag--small",name:"Small",snippet:'const Small = () => <Tag size="sm">Tag</Tag>;'},{id:"core-content-tag--small-with-icon",name:"Small With Icon",snippet:'const SmallWithIcon = () => <Tag size="sm" icon={EllipseIcon12}>Tag</Tag>;'},{id:"core-content-tag--long-text",name:"Long Text",snippet:"const LongText = () => <Tag>This is a very long tag label that might overflow or cause layout issues</Tag>;"}],implementation:`import { EllipseIcon } from "@baseline-ui/icons/16";
|
|
25087
25826
|
import React from "react";
|
|
25088
25827
|
|
|
@@ -25102,7 +25841,7 @@ export const TagWithIconExample: React.FC<Omit<TagProps, "icon">> = (props) => (
|
|
|
25102
25841
|
* Supports keyboard, mouse and touch interactions
|
|
25103
25842
|
|
|
25104
25843
|
\`\`\`jsx
|
|
25105
|
-
import { TagGroup } from "
|
|
25844
|
+
import { TagGroup } from "@baseline-ui/core";
|
|
25106
25845
|
|
|
25107
25846
|
<TagGroup items={[{ id: "tag", label: "Tag" }]} />;
|
|
25108
25847
|
\`\`\`
|
|
@@ -25110,7 +25849,7 @@ import { TagGroup } from "../../utils";
|
|
|
25110
25849
|
The \`TagGroup\` component has four variants: \`neutral\`, \`red\`, \`green\`, \`blue\` and \`high-constrast\`. You can set the variant of whole group or individual tags.
|
|
25111
25850
|
|
|
25112
25851
|
\`\`\`jsx
|
|
25113
|
-
import { TagGroup } from "
|
|
25852
|
+
import { TagGroup } from "@baseline-ui/core";
|
|
25114
25853
|
|
|
25115
25854
|
const items = [{ id: "tag", label: "Tag" }];
|
|
25116
25855
|
|
|
@@ -25124,7 +25863,7 @@ const items = [{ id: "tag", label: "Tag" }];
|
|
|
25124
25863
|
You can set the individual variant of each tag by passing the \`variant\` prop to the \`items\` array.
|
|
25125
25864
|
|
|
25126
25865
|
\`\`\`jsx
|
|
25127
|
-
import { TagGroup } from "
|
|
25866
|
+
import { TagGroup } from "@baseline-ui/core";
|
|
25128
25867
|
|
|
25129
25868
|
const items = [
|
|
25130
25869
|
{ id: "tag", label: "Tag" },
|
|
@@ -25142,7 +25881,7 @@ The \`TagGroup\` component can be set to allow tags to be removed by passing the
|
|
|
25142
25881
|
The \`TagGroup\` component can be set to allow tags to be selected by passing the \`selectionMode\` prop.
|
|
25143
25882
|
|
|
25144
25883
|
\`\`\`jsx
|
|
25145
|
-
import { TagGroup } from "
|
|
25884
|
+
import { TagGroup } from "@baseline-ui/core";
|
|
25146
25885
|
|
|
25147
25886
|
const items = [
|
|
25148
25887
|
{ id: "tag", label: "Tag" },
|
|
@@ -25158,7 +25897,7 @@ const items = [
|
|
|
25158
25897
|
The \`TagGroup\` component can be set to disabled by passing the \`disabledKeys\` prop. Disabled items are not focusable, selectable, or keyboard navigable.
|
|
25159
25898
|
|
|
25160
25899
|
\`\`\`jsx
|
|
25161
|
-
import { TagGroup } from "
|
|
25900
|
+
import { TagGroup } from "@baseline-ui/core";
|
|
25162
25901
|
|
|
25163
25902
|
const items = [
|
|
25164
25903
|
{ id: "tag", label: "Tag" },
|
|
@@ -25396,7 +26135,13 @@ export const TagGroupExample: React.FC<
|
|
|
25396
26135
|
import { TaggedPagination } from "@baseline-ui/core";
|
|
25397
26136
|
|
|
25398
26137
|
<TaggedPagination
|
|
25399
|
-
valueToLabelMap={
|
|
26138
|
+
valueToLabelMap={
|
|
26139
|
+
new Map([
|
|
26140
|
+
[1, "One"],
|
|
26141
|
+
[2, "Two"],
|
|
26142
|
+
[4, "Four"],
|
|
26143
|
+
])
|
|
26144
|
+
}
|
|
25400
26145
|
label="Page"
|
|
25401
26146
|
decrementAriaLabel="Decrement"
|
|
25402
26147
|
incrementAriaLabel="Increment"
|
|
@@ -25405,7 +26150,7 @@ import { TaggedPagination } from "@baseline-ui/core";
|
|
|
25405
26150
|
/>;
|
|
25406
26151
|
\`\`\`
|
|
25407
26152
|
|
|
25408
|
-
|
|
26153
|
+
Pass \`defaultValue\` to set the starting page, or control it with \`value\` and update it from \`onChangeSuccess\`, which receives each committed page number. Without either, the page starts at 1.
|
|
25409
26154
|
|
|
25410
26155
|
| Key | Function |
|
|
25411
26156
|
| ----------- | ---------------------------------------------------------------- |
|
|
@@ -25786,7 +26531,7 @@ export function TextOptOutOfSlotContext() {
|
|
|
25786
26531
|
</Text>
|
|
25787
26532
|
</TextContext.Provider>
|
|
25788
26533
|
);
|
|
25789
|
-
}`},similarTo:[],figmaUrl:null},TextInput:{id:"core-forms-textinput",breadcrumb:"Core/Forms/TextInput",importStatement:'import { TextInput, VariantViewer } from "@baseline-ui/core";',description:"`TextInput` is a field for capturing free-form text \u2014 a single-line `<input>` by default, or a resizable multi-line `<textarea>` when `isMultiLine` is set. Use it for values such as names, emails, or longer notes.",documentation:'`TextInput` is a field for capturing free-form text \u2014 a single-line `<input>` by default, or a resizable multi-line `<textarea>` when `isMultiLine` is set. Use it for values such as names, emails, or longer notes.\n\n* This component is built on top of the `input` element (or `textarea` in multi-line mode).\n* It provides visual and ARIA labels to the input element to make it more accessible.\n* It supports events for change, clipboard, composition, focus, and keyboard.\n* It exposes invalid states to assistive technology via ARIA.\n* It supports description and other state messages which are linked to the input element via ARIA.\n\n```jsx\nimport { TextInput } from "@baseline-ui/core";\n\n<TextInput placeholder="Enter Text" />;\n```\n\nFor numeric entry use `NumberInput`, for search fields use `SearchInput`, and for color values use `ColorInput`.\n\n`TextInput` supports two variants: `primary` (default) and `ghost`. Set the variant with the `variant` prop.\n\n```jsx\n<TextInput placeholder="Placeholder" variant="primary" />\n<TextInput placeholder="Placeholder" variant="ghost" />\n```\n\nYou can add a label to the `TextInput` by passing a `label` prop.\n\n```jsx\n<TextInput label="Label" placeholder="Placeholder" />\n```\n\nBy default, the label is positioned above the `TextInput`. You can change the\nposition of the label by passing a `labelPosition` prop.\n\n```jsx\n<TextInput\n label="Label"\n labelPosition="start"\n description="Description"\n placeholder="Placeholder"\n/>\n```\n\nYou can add a description to the `TextInput` by passing a `description` prop. A\ndescription is used to provide additional information about the `TextInput`.\n\n```jsx\n<TextInput label="Label" description="Description" placeholder="Placeholder" />\n```\n\nYou can put the `TextInput` into an error state by setting `validationState` to\n`"error"`. You can also pass `errorMessage` to provide additional information\nabout the error; passing `errorMessage` on its own is enough to render the error\nstate. When `description` is also present, it takes precedence and the error\nmessage is not shown.\n\n```jsx\n<TextInput\n label="Label"\n validationState="error"\n errorMessage="Error message"\n placeholder="Placeholder"\n/>\n```\n\nYou can put the `TextInput` into a warning state by setting `validationState` to\n`"warning"`. You can also pass `warningMessage` to provide additional\ninformation about the warning.\n\n```jsx\n<TextInput\n label="Label"\n validationState="warning"\n warningMessage="Warning message"\n placeholder="Placeholder"\n/>\n```\n\nYou can make the `TextInput` read only by passing an `isReadOnly` prop.\n\n```jsx\n<TextInput label="Label" isReadOnly defaultValue="Read-only value" />\n```\n\nYou can disable the `TextInput` by passing an `isDisabled` prop.\n\n```jsx\n<TextInput\n label="Label"\n isDisabled\n defaultValue="Disabled value"\n description="Description"\n placeholder="Placeholder"\n/>\n```\n\nYou can control the `TextInput` by passing a `value` prop together with an\n`onChange` prop. `onChange` is called with the new string value (not a DOM\nevent).\n\n```jsx\nconst [value, setValue] = useState("Controlled value");\n\n<TextInput\n label="Label"\n value={value}\n onChange={(value) => setValue(value)}\n placeholder="Placeholder"\n/>;\n```\n\nSet `isMultiLine` to render the field as a resizable `<textarea>` instead of a\nsingle-line `<input>`. The field starts at a minimum height and can be dragged\nto resize in both directions, except when it is read only or disabled. All\nstates (error, warning, disabled, read only, ghost) are supported, just like the\nsingle-line input.\n\n```jsx\n<TextInput\n label="Label"\n isMultiLine\n defaultValue="Lorem ipsum"\n description="Helper text"\n/>\n```\n\nUse the `rows` prop to set the initial number of visible text rows.\n\n```jsx\n<TextInput label="Label" isMultiLine rows={5} placeholder="Placeholder" />\n```\n\nYou can use the `TextInput` in a HTML form by passing a `name` prop. In addition, attributes such as `type`, `pattern`, `inputMode`, and others are passed through to the underlying input element.\n\n```jsx\n<form>\n <TextInput\n name="text-input"\n type="text"\n placeholder="Placeholder"\n description="Description"\n />\n</form>\n```\n\nThese selectors are applied to the underlying `<input>` / `<textarea>` element. The root wrapper is also exposed via the `BaselineUI-TextInput` class and the field element via the `BaselineUI-TextInput-Input` class.\n\n| Selector | Description |\n| ------------------------- | ------------------------------------------------------------------- |\n| `[data-readonly]` | Whether the input is read only. |\n| `[data-disabled]` | Whether the input is disabled. |\n| `[data-validation-state]` | The validation state of the input (`error`, `warning`, or `valid`). |\n| `[data-focused]` | Whether the input is focused, either via a mouse or keyboard. |\n| `[data-focus-visible]` | Whether the input is keyboard focused. |\n\n| Key | Function |\n| ---------------- | ---------------------------------------------------------------------------- |\n| <kbd>Enter</kbd> | Submits the form in single-line mode; inserts a new line in multi-line mode. |',props:`interface TextInputProps {
|
|
26534
|
+
}`},similarTo:[],figmaUrl:null},TextInput:{id:"core-forms-textinput",breadcrumb:"Core/Forms/TextInput",importStatement:'import { TextInput, TextInputFocusExample, VariantViewer } from "@baseline-ui/core";',description:"`TextInput` is a field for capturing free-form text \u2014 a single-line `<input>` by default, or a resizable multi-line `<textarea>` when `isMultiLine` is set. Use it for values such as names, emails, or longer notes.",documentation:'`TextInput` is a field for capturing free-form text \u2014 a single-line `<input>` by default, or a resizable multi-line `<textarea>` when `isMultiLine` is set. Use it for values such as names, emails, or longer notes.\n\n* This component is built on top of the `input` element (or `textarea` in multi-line mode).\n* It provides visual and ARIA labels to the input element to make it more accessible.\n* It supports events for change, clipboard, composition, focus, and keyboard.\n* It exposes invalid states to assistive technology via ARIA.\n* It supports description and other state messages which are linked to the input element via ARIA.\n\n```jsx\nimport { TextInput } from "@baseline-ui/core";\n\n<TextInput placeholder="Enter Text" />;\n```\n\nFor numeric entry use `NumberInput`, for search fields use `SearchInput`, and for color values use `ColorInput`.\n\n`TextInput` supports two variants: `primary` (default) and `ghost`. Set the variant with the `variant` prop.\n\n```jsx\n<TextInput placeholder="Placeholder" variant="primary" />\n<TextInput placeholder="Placeholder" variant="ghost" />\n```\n\nYou can add a label to the `TextInput` by passing a `label` prop.\n\n```jsx\n<TextInput label="Label" placeholder="Placeholder" />\n```\n\nBy default, the label is positioned above the `TextInput`. You can change the\nposition of the label by passing a `labelPosition` prop.\n\n```jsx\n<TextInput\n label="Label"\n labelPosition="start"\n description="Description"\n placeholder="Placeholder"\n/>\n```\n\nYou can add a description to the `TextInput` by passing a `description` prop. A\ndescription is used to provide additional information about the `TextInput`.\n\n```jsx\n<TextInput label="Label" description="Description" placeholder="Placeholder" />\n```\n\nYou can put the `TextInput` into an error state by setting `validationState` to\n`"error"`. You can also pass `errorMessage` to provide additional information\nabout the error; passing `errorMessage` on its own is enough to render the error\nstate. When `description` is also present, it takes precedence and the error\nmessage is not shown.\n\n```jsx\n<TextInput\n label="Label"\n validationState="error"\n errorMessage="Error message"\n placeholder="Placeholder"\n/>\n```\n\nYou can put the `TextInput` into a warning state by setting `validationState` to\n`"warning"`. You can also pass `warningMessage` to provide additional\ninformation about the warning.\n\n```jsx\n<TextInput\n label="Label"\n validationState="warning"\n warningMessage="Warning message"\n placeholder="Placeholder"\n/>\n```\n\nYou can make the `TextInput` read only by passing an `isReadOnly` prop.\n\n```jsx\n<TextInput label="Label" isReadOnly defaultValue="Read-only value" />\n```\n\nYou can disable the `TextInput` by passing an `isDisabled` prop.\n\n```jsx\n<TextInput\n label="Label"\n isDisabled\n defaultValue="Disabled value"\n description="Description"\n placeholder="Placeholder"\n/>\n```\n\nYou can control the `TextInput` by passing a `value` prop together with an\n`onChange` prop. `onChange` is called with the new string value (not a DOM\nevent).\n\n```jsx\nconst [value, setValue] = useState("Controlled value");\n\n<TextInput\n label="Label"\n value={value}\n onChange={(value) => setValue(value)}\n placeholder="Placeholder"\n/>;\n```\n\nSet `isMultiLine` to render the field as a resizable `<textarea>` instead of a\nsingle-line `<input>`. The field starts at a minimum height and can be dragged\nto resize in both directions, except when it is read only or disabled. All\nstates (error, warning, disabled, read only, ghost) are supported, just like the\nsingle-line input.\n\n```jsx\n<TextInput\n label="Label"\n isMultiLine\n defaultValue="Lorem ipsum"\n description="Helper text"\n/>\n```\n\nUse the `rows` prop to set the initial number of visible text rows.\n\n```jsx\n<TextInput label="Label" isMultiLine rows={5} placeholder="Placeholder" />\n```\n\n`ref` points at the wrapping `<div>`, not the native field. To call `focus()`,\n`select()` or other methods on the `<input>` (or the `<textarea>` with\n`isMultiLine`), pass an object ref from `useRef` or `createRef` as `inputRef`.\n\n```jsx\nconst inputRef = useRef(null);\n\n<>\n <TextInput label="Name" inputRef={inputRef} />\n <ActionButton\n label="Focus the input"\n onPress={() => inputRef.current?.focus()}\n />\n</>;\n```\n\nYou can use the `TextInput` in a HTML form by passing a `name` prop. In addition, attributes such as `type`, `pattern`, `inputMode`, and others are passed through to the underlying input element.\n\n```jsx\n<form>\n <TextInput\n name="text-input"\n type="text"\n placeholder="Placeholder"\n description="Description"\n />\n</form>\n```\n\nThese selectors are applied to the underlying `<input>` / `<textarea>` element. The root wrapper is also exposed via the `BaselineUI-TextInput` class and the field element via the `BaselineUI-TextInput-Input` class.\n\n| Selector | Description |\n| ------------------------- | ------------------------------------------------------------------- |\n| `[data-readonly]` | Whether the input is read only. |\n| `[data-disabled]` | Whether the input is disabled. |\n| `[data-validation-state]` | The validation state of the input (`error`, `warning`, or `valid`). |\n| `[data-focused]` | Whether the input is focused, either via a mouse or keyboard. |\n| `[data-focus-visible]` | Whether the input is keyboard focused. |\n\n| Key | Function |\n| ---------------- | ---------------------------------------------------------------------------- |\n| <kbd>Enter</kbd> | Submits the form in single-line mode; inserts a new line in multi-line mode. |',props:`interface TextInputProps {
|
|
25790
26535
|
variant?: any
|
|
25791
26536
|
labelPosition?: any
|
|
25792
26537
|
isMultiLine?: any
|
|
@@ -26051,7 +26796,7 @@ isMultiLine?: any
|
|
|
26051
26796
|
label="Label"
|
|
26052
26797
|
name="text-input"
|
|
26053
26798
|
placeholder="Placeholder"
|
|
26054
|
-
description="Description" />;`},{id:"core-forms-textinput--multiline",name:"Multiline",snippet:`const Multiline = () => <TextInput
|
|
26799
|
+
description="Description" />;`},{id:"core-forms-textinput--focusing-the-input",name:"Focusing The Input",snippet:'const FocusingTheInput = () => <TextInputFocusExample placeholder="Placeholder" isMultiLine={false} />;'},{id:"core-forms-textinput--multiline",name:"Multiline",snippet:`const Multiline = () => <TextInput
|
|
26055
26800
|
label="Label"
|
|
26056
26801
|
isMultiLine
|
|
26057
26802
|
defaultValue="Lorem ipsum"
|
|
@@ -26380,7 +27125,81 @@ isMultiLine?: any
|
|
|
26380
27125
|
}}
|
|
26381
27126
|
defaultProps={args}
|
|
26382
27127
|
/>
|
|
26383
|
-
);`}],implementation
|
|
27128
|
+
);`}],implementation:`import React from "react";
|
|
27129
|
+
|
|
27130
|
+
import { ActionButton } from "../../ActionButton/ActionButton";
|
|
27131
|
+
import { Box } from "../../Box/Box";
|
|
27132
|
+
import { TextInput } from "../TextInput";
|
|
27133
|
+
|
|
27134
|
+
import type { SingleLineTextInputProps } from "../TextInput.types";
|
|
27135
|
+
|
|
27136
|
+
export function TextInputRefsExample({
|
|
27137
|
+
isMultiLine,
|
|
27138
|
+
...props
|
|
27139
|
+
}: Pick<
|
|
27140
|
+
SingleLineTextInputProps,
|
|
27141
|
+
| "isDisabled"
|
|
27142
|
+
| "isReadOnly"
|
|
27143
|
+
| "value"
|
|
27144
|
+
| "defaultValue"
|
|
27145
|
+
| "placeholder"
|
|
27146
|
+
| "description"
|
|
27147
|
+
> & {
|
|
27148
|
+
isMultiLine?: boolean;
|
|
27149
|
+
}) {
|
|
27150
|
+
const ref = React.useRef<HTMLInputElement>(null);
|
|
27151
|
+
const inputRef = React.useRef<HTMLInputElement>(null);
|
|
27152
|
+
const textareaRef = React.useRef<HTMLTextAreaElement>(null);
|
|
27153
|
+
const [result, setResult] = React.useState("");
|
|
27154
|
+
|
|
27155
|
+
return (
|
|
27156
|
+
<>
|
|
27157
|
+
{isMultiLine ? (
|
|
27158
|
+
<TextInput
|
|
27159
|
+
label="Name"
|
|
27160
|
+
ref={ref}
|
|
27161
|
+
isMultiLine={true}
|
|
27162
|
+
inputRef={textareaRef}
|
|
27163
|
+
{...props}
|
|
27164
|
+
/>
|
|
27165
|
+
) : (
|
|
27166
|
+
<TextInput label="Name" ref={ref} inputRef={inputRef} {...props} />
|
|
27167
|
+
)}
|
|
27168
|
+
<button
|
|
27169
|
+
type="button"
|
|
27170
|
+
onClick={() => {
|
|
27171
|
+
const target = isMultiLine ? textareaRef.current : inputRef.current;
|
|
27172
|
+
target?.focus();
|
|
27173
|
+
const isRoot = ref.current?.classList.contains(
|
|
27174
|
+
"BaselineUI-TextInput",
|
|
27175
|
+
);
|
|
27176
|
+
setResult(
|
|
27177
|
+
\`ref:\${ref.current?.tagName}:\${isRoot ? "root" : "other"} inputRef:\${target?.tagName}\`,
|
|
27178
|
+
);
|
|
27179
|
+
}}
|
|
27180
|
+
>
|
|
27181
|
+
Inspect refs
|
|
27182
|
+
</button>
|
|
27183
|
+
<output>{result}</output>
|
|
27184
|
+
</>
|
|
27185
|
+
);
|
|
27186
|
+
}
|
|
27187
|
+
|
|
27188
|
+
export function TextInputFocusExample(
|
|
27189
|
+
props: Omit<SingleLineTextInputProps, "inputRef">,
|
|
27190
|
+
) {
|
|
27191
|
+
const inputRef = React.useRef<HTMLInputElement>(null);
|
|
27192
|
+
|
|
27193
|
+
return (
|
|
27194
|
+
<Box display="flex" flexDirection="column" gap="md">
|
|
27195
|
+
<TextInput label="Name" inputRef={inputRef} {...props} />
|
|
27196
|
+
<ActionButton
|
|
27197
|
+
label="Focus the input"
|
|
27198
|
+
onPress={() => inputRef.current?.focus()}
|
|
27199
|
+
/>
|
|
27200
|
+
</Box>
|
|
27201
|
+
);
|
|
27202
|
+
}`},similarTo:[],figmaUrl:null},ThemeProvider:{id:"core-utilities-themeprovider",breadcrumb:"Core/Utilities/ThemeProvider",importStatement:'import { ThemeProvider, ThemeProviderExample } from "@baseline-ui/core";',description:"`ThemeProvider` is a context provider that applies a Baseline UI theme \u2014 colors, typography, and spacing \u2014 to its descendants. Use it at the root of your application, or around a subtree, to switch between light, dark, or branded themes.",documentation:'`ThemeProvider` is a context provider that applies a Baseline UI theme \u2014 colors, typography, and spacing \u2014 to its descendants. Use it at the root of your application, or around a subtree, to switch between light, dark, or branded themes.\n\n```tsx\nimport { ThemeProvider, ActionButton } from "@baseline-ui/core";\nimport { themes } from "@baseline-ui/tokens";\n\n<ThemeProvider theme={themes.base.light}>\n <ActionButton label="Click me" />\n</ThemeProvider>;\n```\n\nThe `theme` prop accepts a `Theme` object. The `Theme` type has the following structure:',props:`interface ThemeProviderProps {
|
|
26384
27203
|
/**
|
|
26385
27204
|
* @deprecated Do not use in new components. This is a legacy block
|
|
26386
27205
|
* identifier; new components should exclude it via
|
|
@@ -26565,7 +27384,7 @@ export const ThemeChangeTestComponent: React.FC = () => {
|
|
|
26565
27384
|
* Time segments are editable using an easy to use numeric keypad, and all interactions are accessible using touch-based screen readers.
|
|
26566
27385
|
|
|
26567
27386
|
\`\`\`jsx
|
|
26568
|
-
import { TimeField } from "
|
|
27387
|
+
import { TimeField } from "@baseline-ui/core";
|
|
26569
27388
|
|
|
26570
27389
|
<TimeField label="Event Time" />;
|
|
26571
27390
|
\`\`\`
|
|
@@ -26955,7 +27774,7 @@ export const TimeFieldExample: React.FC<
|
|
|
26955
27774
|
|
|
26956
27775
|
\`\`\`tsx
|
|
26957
27776
|
import { useMemo } from "react";
|
|
26958
|
-
import { GlobalToastRegion, ToastQueue, ActionButton } from "
|
|
27777
|
+
import { GlobalToastRegion, ToastQueue, ActionButton } from "@baseline-ui/core";
|
|
26959
27778
|
|
|
26960
27779
|
function ToastExample() {
|
|
26961
27780
|
const toastQueue = useMemo(
|
|
@@ -27348,7 +28167,7 @@ export const VariantsExample = ({
|
|
|
27348
28167
|
* Keyboard event support for \`Space\` and \`Enter\` keys
|
|
27349
28168
|
|
|
27350
28169
|
\`\`\`jsx
|
|
27351
|
-
import { ToggleButton } from "
|
|
28170
|
+
import { ToggleButton } from "@baseline-ui/core";
|
|
27352
28171
|
|
|
27353
28172
|
<ToggleButton label={"Label"} />;
|
|
27354
28173
|
\`\`\`
|
|
@@ -27438,7 +28257,59 @@ elementType?: any
|
|
|
27438
28257
|
);`},{id:"core-buttons-togglebutton--default-selected",name:"Default Selected",snippet:'const DefaultSelected = () => <ToggleButton label="Toggle me" defaultSelected />;'},{id:"core-buttons-togglebutton--controlled",name:"Controlled",snippet:'const Controlled = () => <ToggleButton label="Toggle me" isSelected />;'},{id:"core-buttons-togglebutton--with-icon",name:"With Icon",snippet:'const WithIcon = () => <ToggleButton label="Toggle me" iconStart={EllipseIcon} />;'},{id:"core-buttons-togglebutton--disabled",name:"Disabled",snippet:`const Disabled = () => <Box display="flex" flexDirection="column" gap="xl">
|
|
27439
28258
|
<ToggleButton label="Toggle me" isDisabled />
|
|
27440
28259
|
<ToggleButton label="Toggle me" isDisabled defaultSelected={true} />
|
|
27441
|
-
</Box>;`}],implementation:""},similarTo:[],figmaUrl:null},ToggleIconButton:{id:"core-buttons-toggleiconbutton",breadcrumb:"Core/Buttons/ToggleIconButton",importStatement:'import { ToggleIconButton, VariantViewer } from "@baseline-ui/core";',description:"`ToggleIconButton` is an icon-only button that maintains a selected or unselected state, with optional state-specific icons. Use it for compact on/off controls in toolbars and dense UI where an icon communicates the action more efficiently than a text label.",documentation
|
|
28260
|
+
</Box>;`}],implementation:""},similarTo:[],figmaUrl:null},ToggleIconButton:{id:"core-buttons-toggleiconbutton",breadcrumb:"Core/Buttons/ToggleIconButton",importStatement:'import { ToggleIconButton, VariantViewer } from "@baseline-ui/core";',description:"`ToggleIconButton` is an icon-only button that maintains a selected or unselected state, with optional state-specific icons. Use it for compact on/off controls in toolbars and dense UI where an icon communicates the action more efficiently than a text label.",documentation:`\`ToggleIconButton\` is an icon-only button that maintains a selected or unselected state, with optional state-specific icons. Use it for compact on/off controls in toolbars and dense UI where an icon communicates the action more efficiently than a text label.
|
|
28261
|
+
|
|
28262
|
+
* Native HTML \`<button>\` support
|
|
28263
|
+
* Exposed as a toggle button via ARIA
|
|
28264
|
+
* Mouse and touch event handling, and press state management
|
|
28265
|
+
* Keyboard focus management and cross browser normalization
|
|
28266
|
+
* Keyboard event support for \`Space\` and \`Enter\` keys
|
|
28267
|
+
|
|
28268
|
+
\`\`\`jsx
|
|
28269
|
+
import { ToggleIconButton } from "@baseline-ui/core";
|
|
28270
|
+
import { TrashIcon } from "@baseline-ui/icons/20";
|
|
28271
|
+
|
|
28272
|
+
<ToggleIconButton
|
|
28273
|
+
size="md"
|
|
28274
|
+
variant="primary"
|
|
28275
|
+
icon={TrashIcon}
|
|
28276
|
+
aria-label="Delete"
|
|
28277
|
+
/>;
|
|
28278
|
+
\`\`\`
|
|
28279
|
+
|
|
28280
|
+
You can control the state of the button by passing the \`isSelected\` prop.
|
|
28281
|
+
|
|
28282
|
+
\`\`\`jsx
|
|
28283
|
+
<ToggleIconButton icon={TrashIcon} aria-label="Delete" isSelected />
|
|
28284
|
+
\`\`\`
|
|
28285
|
+
|
|
28286
|
+
You can set the default selection state of the button by passing the \`defaultSelected\` prop.
|
|
28287
|
+
|
|
28288
|
+
\`\`\`jsx
|
|
28289
|
+
<ToggleIconButton icon={TrashIcon} aria-label="Delete" defaultSelected />
|
|
28290
|
+
\`\`\`
|
|
28291
|
+
|
|
28292
|
+
You can disable the button by passing the \`isDisabled\` prop.
|
|
28293
|
+
|
|
28294
|
+
\`\`\`jsx
|
|
28295
|
+
<ToggleIconButton icon={TrashIcon} aria-label="Delete" isDisabled />
|
|
28296
|
+
\`\`\`
|
|
28297
|
+
|
|
28298
|
+
You can set different icons for the selected and unselected states by passing an object to the \`icon\` prop with \`selected\` and \`unselected\` keys.
|
|
28299
|
+
|
|
28300
|
+
| Selector | Description |
|
|
28301
|
+
| -------------------- | -------------------------------------------------------------- |
|
|
28302
|
+
| \\[data-disabled] | Whether the button is disabled. |
|
|
28303
|
+
| \\[data-focused] | Whether the button is focused, either via a mouse or keyboard. |
|
|
28304
|
+
| \\[data-hovered] | Whether the button is currently hovered with a mouse. |
|
|
28305
|
+
| \\[data-focus-visible] | Whether the button is keyboard focused. |
|
|
28306
|
+
| \\[data-pressed] | Whether the button is currently pressed. |
|
|
28307
|
+
| \\[data-selected] | Whether the button is currently selected. |
|
|
28308
|
+
|
|
28309
|
+
| Key | Function |
|
|
28310
|
+
| ------- | ----------------- |
|
|
28311
|
+
| \`Space\` | Toggle the button |
|
|
28312
|
+
| \`Enter\` | Toggle the button |`,props:`interface ToggleIconButtonProps {
|
|
27442
28313
|
/**
|
|
27443
28314
|
* The button's class name.
|
|
27444
28315
|
*/
|
|
@@ -27753,6 +28624,7 @@ preventFocusOnPress?: boolean
|
|
|
27753
28624
|
}} />;`},{id:"core-buttons-toggleiconbutton--with-tooltip",name:"With Tooltip",snippet:'const WithTooltip = () => <ToggleIconButton aria-label="Label" icon={E20} tooltip />;'}],implementation:`import { CheckmarkIcon, EllipseIcon, XIcon } from "@baseline-ui/icons/20";
|
|
27754
28625
|
import React from "react";
|
|
27755
28626
|
|
|
28627
|
+
import { Div, NativeButton } from "../../shared/__tests__/elementTypes";
|
|
27756
28628
|
import { ToggleIconButton } from "../ToggleIconButton";
|
|
27757
28629
|
|
|
27758
28630
|
import type { ToggleIconButtonProps } from "../ToggleIconButton.types";
|
|
@@ -27761,6 +28633,23 @@ export const ToggleIconButtonExample: React.FC<
|
|
|
27761
28633
|
Omit<ToggleIconButtonProps, "icon">
|
|
27762
28634
|
> = (props) => <ToggleIconButton icon={EllipseIcon} {...props} />;
|
|
27763
28635
|
|
|
28636
|
+
export const DivElementTypeExample: React.FC<
|
|
28637
|
+
Omit<ToggleIconButtonProps, "icon">
|
|
28638
|
+
> = (props) => <ToggleIconButtonExample elementType={Div} {...props} />;
|
|
28639
|
+
|
|
28640
|
+
export const NativeButtonElementTypeExample: React.FC<
|
|
28641
|
+
Omit<ToggleIconButtonProps, "icon">
|
|
28642
|
+
> = (props) => (
|
|
28643
|
+
<ToggleIconButtonExample elementType={NativeButton} {...props} />
|
|
28644
|
+
);
|
|
28645
|
+
|
|
28646
|
+
export const PlainTagElementTypeExample: React.FC<
|
|
28647
|
+
Omit<ToggleIconButtonProps, "icon" | "elementType">
|
|
28648
|
+
> = (props) => (
|
|
28649
|
+
// @ts-expect-error -- the type admits only "button" or a component
|
|
28650
|
+
<ToggleIconButtonExample elementType="div" {...props} />
|
|
28651
|
+
);
|
|
28652
|
+
|
|
27764
28653
|
export const StateSpecificIcon: React.FC<
|
|
27765
28654
|
Omit<ToggleIconButtonProps, "icon">
|
|
27766
28655
|
> = (props) => (
|
|
@@ -27795,7 +28684,8 @@ export const LabelledByTooltip: React.FC = () => (
|
|
|
27795
28684
|
* Collapsible toolbar support
|
|
27796
28685
|
|
|
27797
28686
|
\`\`\`jsx
|
|
27798
|
-
import { Toolbar, Link, ActionIconButton } from "
|
|
28687
|
+
import { Toolbar, Link, ActionIconButton } from "@baseline-ui/core";
|
|
28688
|
+
import { EllipseIcon } from "@baseline-ui/icons/24";
|
|
27799
28689
|
|
|
27800
28690
|
<Toolbar>
|
|
27801
28691
|
<ActionIconButton icon={EllipseIcon} aria-label="Button" />
|
|
@@ -27819,7 +28709,33 @@ In case of Popover, when the popover trigger has moved to the menu:
|
|
|
27819
28709
|
| Left | Focus the previous interactive child |
|
|
27820
28710
|
| Right | Focus the next interactive child |
|
|
27821
28711
|
| Tab | Focus the next interactive child outside the toolbar |
|
|
27822
|
-
| Tab without \`isSingleTabStop\` | Focus the next interactive child within the toolbar
|
|
28712
|
+
| Tab without \`isSingleTabStop\` | Focus the next interactive child within the toolbar |
|
|
28713
|
+
|
|
28714
|
+
A text field in the toolbar keeps the keys it needs for editing:
|
|
28715
|
+
|
|
28716
|
+
* Arrow keys move the caret. Left and Right, or Up and Down in a vertical toolbar, move focus to the neighbouring child only when the caret is already at that edge of the field, following the field's own text direction.
|
|
28717
|
+
* Arrow keys stay in the field while text is selected, while an input method is composing, and when Shift, Alt, Control or Meta is held.
|
|
28718
|
+
* In a vertical toolbar, a field with suggestions (a \`list\` attribute or \`role="combobox"\`) keeps Up and Down, and a number field uses them to step its value.
|
|
28719
|
+
* Tab leaves the toolbar from a field, and Shift+Tab back into the toolbar returns to that field. Calling \`preventDefault\` for Tab in the toolbar's \`onKeyDown\` keeps focus in the field.
|
|
28720
|
+
|
|
28721
|
+
A \`TextInput\` given its own \`onKeyDown\` stops every key there by default. Tab from that field then moves to the next child inside the toolbar instead of leaving it, and in a vertical toolbar Up and Down stay in the field even at its edges. Call \`e.continuePropagation()\` for the keys the handler does not use:
|
|
28722
|
+
|
|
28723
|
+
\`\`\`jsx
|
|
28724
|
+
import { TextInput, Toolbar } from "@baseline-ui/core";
|
|
28725
|
+
|
|
28726
|
+
<Toolbar>
|
|
28727
|
+
<TextInput
|
|
28728
|
+
aria-label="Search"
|
|
28729
|
+
onKeyDown={(e) => {
|
|
28730
|
+
if (e.key === "Enter") {
|
|
28731
|
+
search();
|
|
28732
|
+
} else {
|
|
28733
|
+
e.continuePropagation();
|
|
28734
|
+
}
|
|
28735
|
+
}}
|
|
28736
|
+
/>
|
|
28737
|
+
</Toolbar>;
|
|
28738
|
+
\`\`\``,props:`interface ToolbarProps {
|
|
27823
28739
|
/**
|
|
27824
28740
|
* @deprecated Do not use in new components. This is a legacy block
|
|
27825
28741
|
* identifier; new components should exclude it via
|
|
@@ -27885,7 +28801,9 @@ collapsibleMenuProps?: Omit<
|
|
|
27885
28801
|
*/
|
|
27886
28802
|
renderSpacer?: boolean
|
|
27887
28803
|
/**
|
|
27888
|
-
* The callback to call when any key is pressed.
|
|
28804
|
+
* The callback to call when any key is pressed. It runs before the toolbar
|
|
28805
|
+
* moves focus, so calling \`preventDefault\` for Tab keeps focus in a text
|
|
28806
|
+
* field.
|
|
27889
28807
|
*/
|
|
27890
28808
|
onKeyDown?: KeyboardProps["onKeyDown"]
|
|
27891
28809
|
/**
|
|
@@ -28131,8 +29049,13 @@ export const CollapsibleChildren: React.FC<{
|
|
|
28131
29049
|
);
|
|
28132
29050
|
};
|
|
28133
29051
|
|
|
28134
|
-
export const WithInput = (
|
|
28135
|
-
|
|
29052
|
+
export const WithInput = ({
|
|
29053
|
+
withOutsideButtons,
|
|
29054
|
+
...props
|
|
29055
|
+
}: Partial<React.ComponentProps<typeof Toolbar>> & {
|
|
29056
|
+
withOutsideButtons?: boolean;
|
|
29057
|
+
}) => {
|
|
29058
|
+
const toolbar = (
|
|
28136
29059
|
<Toolbar
|
|
28137
29060
|
className={sprinkles({
|
|
28138
29061
|
display: "flex",
|
|
@@ -28140,6 +29063,7 @@ export const WithInput = () => {
|
|
|
28140
29063
|
flexDirection: "row",
|
|
28141
29064
|
padding: "xs",
|
|
28142
29065
|
})}
|
|
29066
|
+
{...props}
|
|
28143
29067
|
>
|
|
28144
29068
|
<ActionButton label="First" />
|
|
28145
29069
|
<TextInput defaultValue="Hello" aria-label="TextInput" />
|
|
@@ -28158,7 +29082,109 @@ export const WithInput = () => {
|
|
|
28158
29082
|
<ActionButton label="Last" />
|
|
28159
29083
|
</Toolbar>
|
|
28160
29084
|
);
|
|
28161
|
-
|
|
29085
|
+
|
|
29086
|
+
return withOutsideButtons ? (
|
|
29087
|
+
<>
|
|
29088
|
+
<button>Before</button>
|
|
29089
|
+
{toolbar}
|
|
29090
|
+
<button>After</button>
|
|
29091
|
+
</>
|
|
29092
|
+
) : (
|
|
29093
|
+
toolbar
|
|
29094
|
+
);
|
|
29095
|
+
};
|
|
29096
|
+
|
|
29097
|
+
export const WithTextFields = ({
|
|
29098
|
+
textDir,
|
|
29099
|
+
preventToolbarTab,
|
|
29100
|
+
textKeyDown,
|
|
29101
|
+
...props
|
|
29102
|
+
}: Partial<React.ComponentProps<typeof Toolbar>> & {
|
|
29103
|
+
textDir?: "ltr" | "rtl";
|
|
29104
|
+
preventToolbarTab?: boolean;
|
|
29105
|
+
/** Gives the "Text" field its own \`onKeyDown\` that stops or continues propagation. */
|
|
29106
|
+
textKeyDown?: "stop" | "continue";
|
|
29107
|
+
}) => (
|
|
29108
|
+
<>
|
|
29109
|
+
<button>Before</button>
|
|
29110
|
+
<Toolbar
|
|
29111
|
+
onKeyDown={
|
|
29112
|
+
preventToolbarTab
|
|
29113
|
+
? (e) => {
|
|
29114
|
+
if (e.key === "Tab") {
|
|
29115
|
+
e.preventDefault();
|
|
29116
|
+
}
|
|
29117
|
+
}
|
|
29118
|
+
: undefined
|
|
29119
|
+
}
|
|
29120
|
+
{...props}
|
|
29121
|
+
>
|
|
29122
|
+
<ActionButton label="First" />
|
|
29123
|
+
<div dir={textDir}>
|
|
29124
|
+
<TextInput
|
|
29125
|
+
defaultValue="Hello"
|
|
29126
|
+
aria-label="Text"
|
|
29127
|
+
onKeyDown={
|
|
29128
|
+
textKeyDown
|
|
29129
|
+
? (e) => {
|
|
29130
|
+
if (textKeyDown === "continue") {
|
|
29131
|
+
e.continuePropagation();
|
|
29132
|
+
}
|
|
29133
|
+
}
|
|
29134
|
+
: undefined
|
|
29135
|
+
}
|
|
29136
|
+
/>
|
|
29137
|
+
</div>
|
|
29138
|
+
<TextInput isMultiLine={true} aria-label="Notes" />
|
|
29139
|
+
<ActionButton label="Last" />
|
|
29140
|
+
</Toolbar>
|
|
29141
|
+
<button>After</button>
|
|
29142
|
+
</>
|
|
29143
|
+
);
|
|
29144
|
+
|
|
29145
|
+
export const WithSuggestionFields = (
|
|
29146
|
+
props: Partial<React.ComponentProps<typeof Toolbar>>,
|
|
29147
|
+
) => (
|
|
29148
|
+
<Toolbar orientation="vertical" {...props}>
|
|
29149
|
+
<ActionButton label="First" />
|
|
29150
|
+
<input aria-label="Fruit" list="toolbar-fruits" defaultValue="Apple" />
|
|
29151
|
+
<datalist id="toolbar-fruits">
|
|
29152
|
+
<option value="Apple" />
|
|
29153
|
+
<option value="Banana" />
|
|
29154
|
+
</datalist>
|
|
29155
|
+
<input
|
|
29156
|
+
role="combobox"
|
|
29157
|
+
aria-label="Custom"
|
|
29158
|
+
aria-expanded={false}
|
|
29159
|
+
defaultValue="Hi"
|
|
29160
|
+
/>
|
|
29161
|
+
<ActionButton label="Last" />
|
|
29162
|
+
</Toolbar>
|
|
29163
|
+
);
|
|
29164
|
+
|
|
29165
|
+
// A field inside its own shadow root, so key events reach the toolbar retargeted
|
|
29166
|
+
// to the host element.
|
|
29167
|
+
export const WithShadowField = (
|
|
29168
|
+
props: Partial<React.ComponentProps<typeof Toolbar>>,
|
|
29169
|
+
) => (
|
|
29170
|
+
<>
|
|
29171
|
+
<Toolbar {...props}>
|
|
29172
|
+
<ActionButton label="First" />
|
|
29173
|
+
<span
|
|
29174
|
+
ref={(host) => {
|
|
29175
|
+
if (host && !host.shadowRoot) {
|
|
29176
|
+
const input = host.ownerDocument.createElement("input");
|
|
29177
|
+
input.setAttribute("aria-label", "Shadow");
|
|
29178
|
+
input.value = "Hello";
|
|
29179
|
+
host.attachShadow({ mode: "open" }).append(input);
|
|
29180
|
+
}
|
|
29181
|
+
}}
|
|
29182
|
+
/>
|
|
29183
|
+
<ActionButton label="Last" />
|
|
29184
|
+
</Toolbar>
|
|
29185
|
+
<button>After</button>
|
|
29186
|
+
</>
|
|
29187
|
+
);`},similarTo:[],figmaUrl:null},Tooltip:{id:"core-overlays-tooltip",breadcrumb:"Core/Overlays/Tooltip",importStatement:'import { ActionButton, ActionIconButton, Focusable, Text, Tooltip, VariantViewer } from "@baseline-ui/core";',description:"`Tooltip` is a small pop-up that reveals a short, descriptive label for an element when the user hovers or focuses it. Use it to clarify the purpose of icon-only controls or to expose secondary context that doesn't warrant permanent space in the UI.",documentation:`\`Tooltip\` is a small pop-up that reveals a short, descriptive label for an element when the user hovers or focuses it. Use it to clarify the purpose of icon-only controls or to expose secondary context that doesn't warrant permanent space in the UI.
|
|
28162
29188
|
|
|
28163
29189
|
* Automatic handling of Keyboard focus management and cross browser normalization
|
|
28164
29190
|
* Automatic Hover management and cross browser normalization
|
|
@@ -28248,10 +29274,12 @@ import { Tooltip, ActionButton } from "@baseline-ui/core";
|
|
|
28248
29274
|
The \`Focusable\` component can be used to attach the tooltip to arbitrary elements.
|
|
28249
29275
|
|
|
28250
29276
|
\`\`\`jsx
|
|
28251
|
-
import { Tooltip, Focusable } from "@baseline-ui/core";
|
|
29277
|
+
import { Tooltip, Focusable, Text } from "@baseline-ui/core";
|
|
28252
29278
|
|
|
28253
29279
|
<Tooltip text="Tooltip content">
|
|
28254
|
-
<Focusable>
|
|
29280
|
+
<Focusable>
|
|
29281
|
+
<Text>Hover over me. This is just text.</Text>
|
|
29282
|
+
</Focusable>
|
|
28255
29283
|
</Tooltip>;
|
|
28256
29284
|
\`\`\`
|
|
28257
29285
|
|
|
@@ -28461,9 +29489,17 @@ placement?: any
|
|
|
28461
29489
|
<Text>Tooltip is: {isOpen ? "open" : "closed"}</Text>
|
|
28462
29490
|
</div>
|
|
28463
29491
|
);
|
|
28464
|
-
};`}],implementation:`import React, { useState } from "react";
|
|
29492
|
+
};`}],implementation:`import React, { useCallback, useRef, useState } from "react";
|
|
28465
29493
|
|
|
28466
29494
|
import { ActionButton } from "../../ActionButton";
|
|
29495
|
+
import { Box } from "../../Box";
|
|
29496
|
+
import { Dialog } from "../../Dialog";
|
|
29497
|
+
import { Modal } from "../../Modal/Modal";
|
|
29498
|
+
import { ModalContent } from "../../Modal/ModalContent";
|
|
29499
|
+
import { ModalTrigger } from "../../Modal/ModalTrigger";
|
|
29500
|
+
import { Popover } from "../../Popover/Popover";
|
|
29501
|
+
import { PopoverContent } from "../../Popover/PopoverContent";
|
|
29502
|
+
import { PopoverTrigger } from "../../Popover/PopoverTrigger";
|
|
28467
29503
|
import { Tooltip } from "../Tooltip";
|
|
28468
29504
|
|
|
28469
29505
|
export const CustomElementTooltip = () => (
|
|
@@ -28497,6 +29533,113 @@ export const TooltipGetTargetRectExample = () => {
|
|
|
28497
29533
|
{called ? <span data-testid="tooltip-target-rect-called" /> : null}
|
|
28498
29534
|
</>
|
|
28499
29535
|
);
|
|
29536
|
+
};
|
|
29537
|
+
|
|
29538
|
+
const tooltipDialog = (
|
|
29539
|
+
<Dialog aria-label="Dialog with tooltip">
|
|
29540
|
+
<Tooltip text="Tooltip content" delay={0}>
|
|
29541
|
+
<ActionButton label="Tooltip trigger" />
|
|
29542
|
+
</Tooltip>
|
|
29543
|
+
</Dialog>
|
|
29544
|
+
);
|
|
29545
|
+
|
|
29546
|
+
export const TooltipInModalExample = ({
|
|
29547
|
+
enableInert,
|
|
29548
|
+
}: {
|
|
29549
|
+
enableInert?: boolean;
|
|
29550
|
+
}) => (
|
|
29551
|
+
<Modal>
|
|
29552
|
+
<ModalTrigger>
|
|
29553
|
+
<ActionButton label="Open" />
|
|
29554
|
+
</ModalTrigger>
|
|
29555
|
+
<ModalContent UNSAFE_enableInert={enableInert}>
|
|
29556
|
+
{tooltipDialog}
|
|
29557
|
+
</ModalContent>
|
|
29558
|
+
</Modal>
|
|
29559
|
+
);
|
|
29560
|
+
|
|
29561
|
+
export const TooltipInModalPopoverExample = () => (
|
|
29562
|
+
<Popover type="dialog">
|
|
29563
|
+
<PopoverTrigger>
|
|
29564
|
+
<ActionButton label="Open" />
|
|
29565
|
+
</PopoverTrigger>
|
|
29566
|
+
<PopoverContent>{tooltipDialog}</PopoverContent>
|
|
29567
|
+
</Popover>
|
|
29568
|
+
);
|
|
29569
|
+
|
|
29570
|
+
export const TooltipBehindModalExample = ({
|
|
29571
|
+
enableInert,
|
|
29572
|
+
}: {
|
|
29573
|
+
enableInert?: boolean;
|
|
29574
|
+
}) => {
|
|
29575
|
+
const [isTooltipOpen, setIsTooltipOpen] = useState(false);
|
|
29576
|
+
|
|
29577
|
+
return (
|
|
29578
|
+
<>
|
|
29579
|
+
<Tooltip text="Background tooltip" isOpen={isTooltipOpen}>
|
|
29580
|
+
<ActionButton label="Background trigger" />
|
|
29581
|
+
</Tooltip>
|
|
29582
|
+
<Modal>
|
|
29583
|
+
<ModalTrigger>
|
|
29584
|
+
<ActionButton label="Open" />
|
|
29585
|
+
</ModalTrigger>
|
|
29586
|
+
<ModalContent UNSAFE_enableInert={enableInert}>
|
|
29587
|
+
<Dialog aria-label="Dialog">
|
|
29588
|
+
<ActionButton
|
|
29589
|
+
label="Show background tooltip"
|
|
29590
|
+
onPress={() => {
|
|
29591
|
+
setIsTooltipOpen(true);
|
|
29592
|
+
}}
|
|
29593
|
+
/>
|
|
29594
|
+
</Dialog>
|
|
29595
|
+
</ModalContent>
|
|
29596
|
+
</Modal>
|
|
29597
|
+
</>
|
|
29598
|
+
);
|
|
29599
|
+
};
|
|
29600
|
+
|
|
29601
|
+
/** Reports the inline transform the tooltip mounts with, on every open. */
|
|
29602
|
+
export const TooltipReopenExample = ({
|
|
29603
|
+
placement,
|
|
29604
|
+
onMountTransform,
|
|
29605
|
+
}: {
|
|
29606
|
+
placement: "top" | "left";
|
|
29607
|
+
onMountTransform?: (transform: string) => void;
|
|
29608
|
+
}) => {
|
|
29609
|
+
const [isOpen, setIsOpen] = useState(true);
|
|
29610
|
+
const onMountTransformRef = useRef(onMountTransform);
|
|
29611
|
+
onMountTransformRef.current = onMountTransform;
|
|
29612
|
+
const recordMount = useCallback((element: HTMLDivElement | null) => {
|
|
29613
|
+
if (element) {
|
|
29614
|
+
onMountTransformRef.current?.(element.style.transform);
|
|
29615
|
+
}
|
|
29616
|
+
}, []);
|
|
29617
|
+
|
|
29618
|
+
return (
|
|
29619
|
+
<Box
|
|
29620
|
+
padding="9xl"
|
|
29621
|
+
display="flex"
|
|
29622
|
+
flexDirection="column"
|
|
29623
|
+
alignItems="flex-end"
|
|
29624
|
+
gap="4xl"
|
|
29625
|
+
>
|
|
29626
|
+
<Tooltip
|
|
29627
|
+
text="Tip"
|
|
29628
|
+
placement={placement}
|
|
29629
|
+
shouldFlip={false}
|
|
29630
|
+
isOpen={isOpen}
|
|
29631
|
+
ref={recordMount}
|
|
29632
|
+
>
|
|
29633
|
+
<ActionButton label="Trigger" />
|
|
29634
|
+
</Tooltip>
|
|
29635
|
+
<ActionButton
|
|
29636
|
+
label="Toggle tooltip"
|
|
29637
|
+
onPress={() => {
|
|
29638
|
+
setIsOpen((open) => !open);
|
|
29639
|
+
}}
|
|
29640
|
+
/>
|
|
29641
|
+
</Box>
|
|
29642
|
+
);
|
|
28500
29643
|
};`},similarTo:[],figmaUrl:null},TreeView:{id:"core-collections-treeview",breadcrumb:"Core/Collections/TreeView",importStatement:`import {
|
|
28501
29644
|
ActionIconButton,
|
|
28502
29645
|
Box,
|
|
@@ -28510,7 +29653,7 @@ export const TooltipGetTargetRectExample = () => {
|
|
|
28510
29653
|
VirtualizedTreeViewWithDescriptionsExample,
|
|
28511
29654
|
VirtualizedTreeViewWithExpandControlExample,
|
|
28512
29655
|
VirtualizedTreeViewWithRenameExample,
|
|
28513
|
-
} from "@baseline-ui/core";`,description:"`TreeView` displays hierarchical data as expandable, selectable, and renameable rows with optional per-item actions. Use it for file browsers, folder structures, outlines, or any nested dataset users need to navigate.",documentation:'`TreeView` displays hierarchical data as expandable, selectable, and renameable rows with optional per-item actions. Use it for file browsers, folder structures, outlines, or any nested dataset users need to navigate.\n\n* Support for mouse, touch, and keyboard interaction\n* Accessible via React Aria with full keyboard navigation\n* Support for primary and secondary action buttons on items\n* Support for inline renaming of item labels (double-click or F2)\n* Icons and descriptions on individual items\n* Controlled and uncontrolled expansion state\n* Custom item title rendering via `renderItemTitle`\n* Drag and drop to reorder items or move them into other items, with mouse and keyboard\n* Fully custom rows via `renderItem`\n* Virtualization support for large datasets (10,000+ items)\n\n```tsx\nimport { TreeView } from "@baseline-ui/core";\nconst treeItems = {\n id: "root",\n label: "Root item",\n children: [\n {\n id: "documents",\n label: "Documents",\n children: [\n {\n id: "work",\n label: "Work",\n },\n ],\n },\n ],\n};\n\n<TreeView items={treeItems} aria-label="File browser" />;\n```\n\n> **Note:** The top-level `items` object acts as a virtual root and is not rendered. Only its `children` appear in the tree.\n\nEach item can have an `icon` property that renders an icon next to the label.\n\nItems can include a `description` string, rendered below the label.\n\nA tree with no nested children \u2014 all chevrons are hidden.\n\nTrees with deep nesting (4+ levels) indent items based on depth.\n\nDemonstrates how the component handles lengthy item labels and descriptions.\n\nControl the expansion state with `expandedKeys` and `onExpandedChange`.\n\nUse `defaultExpandedKeys` for the initial expansion state. You can still expand and collapse items via interaction.\n\nUse `selectedKeys` to highlight specific items. The tree uses multi-selection mode.\n\nAdd primary and secondary action buttons to each row using `primaryActionIcon`/`secondaryActionIcon` and `onPrimaryAction`/`onSecondaryAction`. You can set the `actionsPosition` prop to `"start"` (default) or `"end"` to control their placement.\n\nPass a function to `primaryActionIcon` or `secondaryActionIcon` to render different icons per item: `(key: Key) => IconComponent`.\n\nSimilarly, `primaryActionAriaLabel` and `secondaryActionAriaLabel` accept `string | ((key: Key) => string)` for per-item labels.\n\nPass the `dragAndDropHooks` returned by `useDragAndDrop` to let users reorder items or move them into other items within the tree. Each row shows a drag handle. Drag the row from anywhere with the mouse, or focus a row, press <kbd>ArrowRight</kbd> to reach its handle (on a collapsed row with children, the first press expands it) and <kbd>Enter</kbd> to start a keyboard drag, then use the arrow keys to choose a position and press <kbd>Enter</kbd> to drop or <kbd>Escape</kbd> to cancel.\n\n`TreeView` does not change your data. Apply the move to your own `items` in the `onMove` callback, where `target.key` is the item dropped relative to and `target.dropPosition` is `"before"`, `"after"` or `"on"` (move into). `target.key` can be one of the dragged `keys` when an item is dropped back next to itself; treat that as no move rather than removing the item first. Any other option of the hook, such as `getAllowedDropOperations`, can be passed alongside `onMove`. Keep passing `dragAndDropHooks` for the tree\'s lifetime; to turn dragging off, pass `isDisabled` to `useDragAndDrop` instead of removing the prop. Items are offered as `"on"` targets even when they have no children, so a file dropped onto a file would become a folder; pass a `shouldAcceptItemDrop` that looks the target up in your own items, such as `(target) => !!findItem(items, target.key)?.children`, to accept drops only on items that already have children. To read tree fields such as `children` in your own `getItems`, pass the item type: `useDragAndDrop<TreeListItem>({ getItems })`.\n\n```tsx\nimport { TreeView, useDragAndDrop } from "@baseline-ui/core";\n\nconst { dragAndDropHooks } = useDragAndDrop({\n onMove({ keys, target }) {\n setItems((items) =>\n moveItems(items, keys, target.key, target.dropPosition),\n );\n },\n});\n\n<TreeView\n items={items}\n dragAndDropHooks={dragAndDropHooks}\n aria-label="File browser"\n/>;\n```\n\nTo start mouse and touch drags only from the handle, pass `pointerDragSource: "handle"` to `useDragAndDrop`. Users can then select text in the rename input or press other controls in the row without starting a drag. Keyboard dragging is unchanged.\n\nIt works the same in a virtualized tree.\n\nCustom rows from `renderItem` get the same drag handle, placed before your content. Style the row being dropped onto from `isDropTarget`, and the row being dragged from `isDragging`. The insertion line spans the full row; to indent it, style `.BaselineUI-DropIndicator` inside the tree.\n\nWhen rows contain text fields or other controls that handle keys themselves, pass `keyboardNavigationBehavior="tab"`. <kbd>Tab</kbd> then moves into a row\'s controls, and keys pressed in them, such as arrows and space in a text field, stay there instead of moving focus through the tree. <kbd>ArrowRight</kbd> and <kbd>ArrowLeft</kbd> on a focused row still expand and collapse it.\n\nEnable inline renaming by passing an `onRename` callback. Users can rename by double-clicking the label or pressing <kbd>F2</kbd>. Press <kbd>Enter</kbd> to confirm or <kbd>Escape</kbd> to cancel. Blurring the input (e.g., clicking outside) also confirms the rename.\n\nWith `dragAndDropHooks`, the whole row is draggable by default, so dragging the mouse across the rename input drags the row instead of selecting text. Pass `pointerDragSource: "handle"` to `useDragAndDrop` to keep text selection in the input.\n\nUse `renderItemTitle` to customize how item titles are rendered. The function receives the full `TreeListItem` and returns a `ReactNode`.\n\nUse `renderItem` to take over the whole row. It receives the `TreeListItem` and a state object (`level`, `isExpanded`, `hasChildItems`, `isSelected`, `isFocusVisible`, `isHovered`, and `toggleExpanded`) and returns the row\'s content. The tree keeps keyboard navigation, selection, focus, and expansion behavior.\n\n```tsx\nimport { ActionIconButton, TreeView } from "@baseline-ui/core";\nimport { ChevronRightIcon } from "@baseline-ui/icons/8";\n\nimport type { TreeItemRenderState, TreeListItem } from "@baseline-ui/core";\n\nconst renderItem = (\n item: TreeListItem,\n { level, isExpanded, hasChildItems, toggleExpanded }: TreeItemRenderState,\n) => (\n <div style={{ paddingInlineStart: (level - 1) * 16 }}>\n {hasChildItems ? (\n <ActionIconButton\n icon={ChevronRightIcon}\n size="xxs"\n aria-label={`${isExpanded ? "Collapse" : "Expand"} ${item.label}`}\n excludeFromTabOrder={true}\n onPress={toggleExpanded}\n />\n ) : null}\n {item.label}\n </div>\n);\n\n<TreeView items={items} renderItem={renderItem} />;\n```\n\nInstead of wiring `toggleExpanded` yourself, you can give a Baseline button `slot="chevron"`: it expands and collapses the row, stays out of the tab order, and gets a localized "Expand" or "Collapse" label. `expandLabel` and `collapseLabel` don\'t apply to it.\n\nThe custom content replaces the chevron, indentation, icon, title, description, and action buttons, as well as the row\'s padding, hover, selected, and focus styling, so draw those from the state you receive. Always draw a focus indicator from `isFocusVisible`; without one, keyboard users can\'t see which row has focus. To style the row with CSS instead, target `.BaselineUI-TreeView-Row` and its `data-focus-visible`, `data-selected`, `data-expanded`, and `data-level` attributes.\n\nThe item `label` is the row\'s only accessible name: other text you draw in the row, such as metadata or tags, isn\'t announced, so put anything screen reader users need into `label`. While `renderItem` is set, `onPrimaryAction`, `onSecondaryAction`, the action icon and label props, `actionsPosition`, `onRename`, `renameLabel`, `renderItemTitle`, `expandLabel`, and `collapseLabel` have no effect.\n\nDefine `renderItem` outside the render, or memoize it: every row re-renders whenever its identity changes. Use Baseline buttons, such as `ActionIconButton`, for controls inside the row. They handle the press without selecting the row. When virtualizing custom rows, set the layout\'s `rowHeight` to the height of your row.\n\nPass `onAction` to handle activation of tree items. The callback receives the item\'s `key` and fires when an item is activated (typically via Enter or double-click).\n\n| Selector | Description |\n| -------------------------------------- | ---------------------------------------------- |\n| `.BaselineUI-TreeView` | The root tree container |\n| `.BaselineUI-TreeView-Row` | An individual tree row |\n| `.BaselineUI-TreeView-ExpansionToggle` | The expand/collapse chevron button |\n| `.BaselineUI-TreeView-DragHandle` | The drag handle, shown with `dragAndDropHooks` |\n| `.BaselineUI-TreeView-Title` | The item label text |\n| `.BaselineUI-TreeView-Description` | The item description text |\n| `.BaselineUI-TreeView-RenameInput` | The inline rename text input |\n\n| Key | Action |\n| ---------------------- | ----------------------------------------------------------------------------- |\n| <kbd>Arrow Down</kbd> | Focus the next item |\n| <kbd>Arrow Up</kbd> | Focus the previous item |\n| <kbd>Arrow Right</kbd> | Expand the focused item, or move focus to the first child if already expanded |\n| <kbd>Arrow Left</kbd> | Collapse the focused item, or move focus to the parent if already collapsed |\n| <kbd>Enter</kbd> | Activate the focused item |\n| <kbd>Space</kbd> | Toggle selection of the focused item |\n| <kbd>Home</kbd> | Focus the first item |\n| <kbd>End</kbd> | Focus the last item |\n| <kbd>F2</kbd> | Start renaming the focused item (requires `onRename` prop) |\n| <kbd>Escape</kbd> | Cancel renaming |\n\n* **ListBox** \u2014 for flat, non-hierarchical lists\n* **Menu** \u2014 for action menus and dropdowns\n\nFor large trees with thousands of items, use virtualization to improve performance and reduce memory usage.\n\nConsider virtualization when:\n\n* Trees have 500+ total items (including nested children)\n* Trees are deeply nested (5+ levels) with many items per level\n* You need responsive scrolling on mobile devices\n* Memory usage is a concern\n\nWrap TreeView with the Virtualizer component:\n\n```tsx\nimport {\n TreeView,\n Virtualizer,\n VIRTUALIZER_LAYOUT_DEFAULT_OPTIONS,\n} from "@baseline-ui/core";\n\n<Virtualizer {...VIRTUALIZER_LAYOUT_DEFAULT_OPTIONS.TREE_VIEW}>\n <TreeView\n items={largeTree}\n aria-label="Large file system"\n style={{ height: 600, overflow: "auto" }}\n />\n</Virtualizer>;\n```\n\n**Important:** You must specify an explicit height on the TreeView container.\n\nThe `VIRTUALIZER_LAYOUT_DEFAULT_OPTIONS.TREE_VIEW` preset uses a `rowHeight` of 44px. To customize row heights (e.g., for items with descriptions), pass `layout` and `layoutOptions` directly:\n\n```tsx\nimport { ListLayout, TreeView, Virtualizer } from "@baseline-ui/core";\n\n// Items without descriptions (default)\n<Virtualizer layout={ListLayout} layoutOptions={{ rowHeight: 44 }}>\n <TreeView items={tree} style={{ height: 600, overflow: "auto" }} />\n</Virtualizer>\n\n// Items with descriptions (variable heights)\n<Virtualizer layout={ListLayout} layoutOptions={{ estimatedRowHeight: 60 }}>\n <TreeView\n items={treeWithDescriptions}\n style={{ height: 600, overflow: "auto" }}\n />\n</Virtualizer>\n```\n\nWith virtualization:\n\n* Only ~20-30 visible items rendered at once (regardless of total tree size)\n* Smooth scrolling up to 100,000+ items\n* Constant memory usage\n* Expand/collapse remains responsive\n\nWithout virtualization:\n\n* All expanded items render to DOM\n* Performance degrades beyond ~500 items\n* Memory usage grows with tree size',props:`interface TreeViewProps {
|
|
29656
|
+
} from "@baseline-ui/core";`,description:"`TreeView` displays hierarchical data as expandable, selectable, and renameable rows with optional per-item actions. Use it for file browsers, folder structures, outlines, or any nested dataset users need to navigate.",documentation:'`TreeView` displays hierarchical data as expandable, selectable, and renameable rows with optional per-item actions. Use it for file browsers, folder structures, outlines, or any nested dataset users need to navigate.\n\n* Support for mouse, touch, and keyboard interaction\n* Accessible via React Aria with full keyboard navigation\n* Support for primary and secondary action buttons on items\n* Support for inline renaming of item labels (double-click or F2)\n* Icons and descriptions on individual items\n* Controlled and uncontrolled expansion state\n* Custom item title rendering via `renderItemTitle`\n* Drag and drop to reorder items or move them into other items, with mouse and keyboard\n* Fully custom rows via `renderItem`\n* Virtualization support for large datasets (10,000+ items)\n\n```tsx\nimport { TreeView } from "@baseline-ui/core";\nconst treeItems = {\n id: "root",\n label: "Root item",\n children: [\n {\n id: "documents",\n label: "Documents",\n children: [\n {\n id: "work",\n label: "Work",\n },\n ],\n },\n ],\n};\n\n<TreeView items={treeItems} aria-label="File browser" />;\n```\n\n> **Note:** The top-level `items` object acts as a virtual root and is not rendered. Only its `children` appear in the tree.\n\nEach item can have an `icon` property that renders an icon next to the label.\n\nItems can include a `description` string, rendered below the label.\n\nA tree with no nested children \u2014 all chevrons are hidden.\n\nTrees with deep nesting (4+ levels) indent items based on depth.\n\nDemonstrates how the component handles lengthy item labels and descriptions.\n\nControl the expansion state with `expandedKeys` and `onExpandedChange`.\n\nUse `defaultExpandedKeys` for the initial expansion state. You can still expand and collapse items via interaction.\n\nUse `selectedKeys` to highlight specific items. The tree uses multi-selection mode.\n\nAdd primary and secondary action buttons to each row using `primaryActionIcon`/`secondaryActionIcon` and `onPrimaryAction`/`onSecondaryAction`. You can set the `actionsPosition` prop to `"start"` (default) or `"end"` to control their placement.\n\nPass a function to `primaryActionIcon` or `secondaryActionIcon` to render different icons per item: `(key: Key) => IconComponent`.\n\nSimilarly, `primaryActionAriaLabel` and `secondaryActionAriaLabel` accept `string | ((key: Key) => string)` for per-item labels.\n\nPass the `dragAndDropHooks` returned by `useDragAndDrop` to let users reorder items or move them into other items within the tree. Each row shows a drag handle. Drag the row from anywhere with the mouse, or focus a row, press <kbd>ArrowRight</kbd> to reach its handle (on a collapsed row with children, the first press expands it) and <kbd>Enter</kbd> to start a keyboard drag, then use the arrow keys to choose a position and press <kbd>Enter</kbd> to drop or <kbd>Escape</kbd> to cancel.\n\n`TreeView` does not change your data. Apply the move to your own `items` in the `onMove` callback, where `target.key` is the item dropped relative to and `target.dropPosition` is `"before"`, `"after"` or `"on"` (move into). `target.key` can be one of the dragged `keys` when an item is dropped back next to itself; treat that as no move rather than removing the item first. Any other option of the hook, such as `getAllowedDropOperations`, can be passed alongside `onMove`. Keep passing `dragAndDropHooks` for the tree\'s lifetime; to turn dragging off, pass `isDisabled` to `useDragAndDrop` instead of removing the prop. Items are offered as `"on"` targets even when they have no children, so a file dropped onto a file would become a folder; pass a `shouldAcceptItemDrop` that looks the target up in your own items, such as `(target) => !!findItem(items, target.key)?.children`, to accept drops only on items that already have children. To read tree fields such as `children` in your own `getItems`, pass the item type: `useDragAndDrop<TreeListItem>({ getItems })`.\n\n```tsx\nimport { TreeView, useDragAndDrop } from "@baseline-ui/core";\n\nconst { dragAndDropHooks } = useDragAndDrop({\n onMove({ keys, target }) {\n setItems((items) =>\n moveItems(items, keys, target.key, target.dropPosition),\n );\n },\n});\n\n<TreeView\n items={items}\n dragAndDropHooks={dragAndDropHooks}\n aria-label="File browser"\n/>;\n```\n\nTo start mouse and touch drags only from the handle, pass `pointerDragSource: "handle"` to `useDragAndDrop`. Users can then select text in the rename input or press other controls in the row without starting a drag. Keyboard dragging is unchanged.\n\nIt works the same in a virtualized tree.\n\nCustom rows from `renderItem` get the same drag handle, placed before your content. Style the row being dropped onto from `isDropTarget`, and the row being dragged from `isDragging`. The insertion line spans the full row; to indent it, style `.BaselineUI-DropIndicator` inside the tree.\n\nWhen rows contain text fields or other controls that handle keys themselves, pass `keyboardNavigationBehavior="tab"`. <kbd>Tab</kbd> then moves into a row\'s controls, and keys pressed in them, such as arrows and space in a text field, stay there instead of moving focus through the tree. <kbd>ArrowRight</kbd> and <kbd>ArrowLeft</kbd> on a focused row still expand and collapse it.\n\nEnable inline renaming by passing an `onRename` callback. Users can rename by double-clicking the label or pressing <kbd>F2</kbd>. Press <kbd>Enter</kbd> to confirm or <kbd>Escape</kbd> to cancel. Blurring the input (e.g., clicking outside) also confirms the rename.\n\nWith `dragAndDropHooks`, the whole row is draggable by default, so dragging the mouse across the rename input drags the row instead of selecting text. Pass `pointerDragSource: "handle"` to `useDragAndDrop` to keep text selection in the input.\n\nUse `renderItemTitle` to customize how item titles are rendered. The function receives the full `TreeListItem` and returns a `ReactNode`.\n\nUse `renderItem` to take over the whole row. It receives the `TreeListItem` and a state object (`level`, `isExpanded`, `hasChildItems`, `isSelected`, `isFocusVisible`, `isFocusVisibleWithin`, `isHovered`, `isPressed`, `isDropTarget`, `isDragging`, and `toggleExpanded`) and returns the row\'s content. The tree keeps keyboard navigation, selection, focus, and expansion behavior.\n\n```tsx\nimport { ActionIconButton, TreeView } from "@baseline-ui/core";\nimport { ChevronRightIcon } from "@baseline-ui/icons/8";\n\nimport type { TreeItemRenderState, TreeListItem } from "@baseline-ui/core";\n\nconst renderItem = (\n item: TreeListItem,\n { level, isExpanded, hasChildItems, toggleExpanded }: TreeItemRenderState,\n) => (\n <div style={{ paddingInlineStart: (level - 1) * 16 }}>\n {hasChildItems ? (\n <ActionIconButton\n icon={ChevronRightIcon}\n size="xxs"\n aria-label={`${isExpanded ? "Collapse" : "Expand"} ${item.label}`}\n excludeFromTabOrder={true}\n onPress={toggleExpanded}\n />\n ) : null}\n {item.label}\n </div>\n);\n\n<TreeView items={items} renderItem={renderItem} />;\n```\n\nInstead of wiring `toggleExpanded` yourself, you can give a Baseline button `slot="chevron"`: it expands and collapses the row, stays out of the tab order, and gets a localized "Expand" or "Collapse" label. `expandLabel` and `collapseLabel` don\'t apply to it.\n\nThe custom content replaces the chevron, indentation, icon, title, description, and action buttons, as well as the row\'s padding, hover, selected, and focus styling, so draw those from the state you receive. Always draw a focus indicator from `isFocusVisible`; without one, keyboard users can\'t see which row has focus. `isFocusVisibleWithin` is also true while a control inside the row has keyboard focus, so use it to keep the row highlighted while the user works inside it. `isPressed` is true while the row is held down with a pointer, <kbd>Enter</kbd>, or <kbd>Space</kbd>, but not while a Baseline button inside the row is pressed. To style the row with CSS instead, target `.BaselineUI-TreeView-Row` and its `data-focus-visible`, `data-selected`, `data-expanded`, and `data-level` attributes.\n\nThe item `label` is the row\'s only accessible name: other text you draw in the row, such as metadata or tags, isn\'t announced, so put anything screen reader users need into `label`. While `renderItem` is set, `onPrimaryAction`, `onSecondaryAction`, the action icon and label props, `actionsPosition`, `onRename`, `renameLabel`, `renderItemTitle`, `expandLabel`, and `collapseLabel` have no effect.\n\nDefine `renderItem` outside the render, or memoize it: every row re-renders whenever its identity changes. Use Baseline buttons, such as `ActionIconButton`, for controls inside the row. They handle the press without selecting the row. When virtualizing custom rows, set the layout\'s `rowHeight` to the height of your row.\n\nPass `onAction` to handle activation of tree items. The callback receives the item\'s `key` and fires when an item is activated (typically via Enter or double-click).\n\n| Selector | Description |\n| -------------------------------------- | ---------------------------------------------- |\n| `.BaselineUI-TreeView` | The root tree container |\n| `.BaselineUI-TreeView-Row` | An individual tree row |\n| `.BaselineUI-TreeView-ExpansionToggle` | The expand/collapse chevron button |\n| `.BaselineUI-TreeView-DragHandle` | The drag handle, shown with `dragAndDropHooks` |\n| `.BaselineUI-TreeView-Title` | The item label text |\n| `.BaselineUI-TreeView-Description` | The item description text |\n| `.BaselineUI-TreeView-RenameInput` | The inline rename text input |\n\n| Key | Action |\n| ---------------------- | ----------------------------------------------------------------------------- |\n| <kbd>Arrow Down</kbd> | Focus the next item |\n| <kbd>Arrow Up</kbd> | Focus the previous item |\n| <kbd>Arrow Right</kbd> | Expand the focused item, or move focus to the first child if already expanded |\n| <kbd>Arrow Left</kbd> | Collapse the focused item, or move focus to the parent if already collapsed |\n| <kbd>Enter</kbd> | Activate the focused item |\n| <kbd>Space</kbd> | Toggle selection of the focused item |\n| <kbd>Home</kbd> | Focus the first item |\n| <kbd>End</kbd> | Focus the last item |\n| <kbd>F2</kbd> | Start renaming the focused item (requires `onRename` prop) |\n| <kbd>Escape</kbd> | Cancel renaming |\n\n* **ListBox** \u2014 for flat, non-hierarchical lists\n* **Menu** \u2014 for action menus and dropdowns\n\nFor large trees with thousands of items, use virtualization to improve performance and reduce memory usage.\n\nConsider virtualization when:\n\n* Trees have 500+ total items (including nested children)\n* Trees are deeply nested (5+ levels) with many items per level\n* You need responsive scrolling on mobile devices\n* Memory usage is a concern\n\nWrap TreeView with the Virtualizer component:\n\n```tsx\nimport {\n TreeView,\n Virtualizer,\n VIRTUALIZER_LAYOUT_DEFAULT_OPTIONS,\n} from "@baseline-ui/core";\n\n<Virtualizer {...VIRTUALIZER_LAYOUT_DEFAULT_OPTIONS.TREE_VIEW}>\n <TreeView\n items={largeTree}\n aria-label="Large file system"\n style={{ height: 600, overflow: "auto" }}\n />\n</Virtualizer>;\n```\n\n**Important:** You must specify an explicit height on the TreeView container.\n\nThe `VIRTUALIZER_LAYOUT_DEFAULT_OPTIONS.TREE_VIEW` preset uses a `rowHeight` of 44px. To customize row heights (e.g., for items with descriptions), pass `layout` and `layoutOptions` directly:\n\n```tsx\nimport { ListLayout, TreeView, Virtualizer } from "@baseline-ui/core";\n\n// Items without descriptions (default)\n<Virtualizer layout={ListLayout} layoutOptions={{ rowHeight: 44 }}>\n <TreeView items={tree} style={{ height: 600, overflow: "auto" }} />\n</Virtualizer>\n\n// Items with descriptions (variable heights)\n<Virtualizer layout={ListLayout} layoutOptions={{ estimatedRowHeight: 60 }}>\n <TreeView\n items={treeWithDescriptions}\n style={{ height: 600, overflow: "auto" }}\n />\n</Virtualizer>\n```\n\nWith virtualization:\n\n* Only ~20-30 visible items rendered at once (regardless of total tree size)\n* Smooth scrolling up to 100,000+ items\n* Constant memory usage\n* Expand/collapse remains responsive\n\nWithout virtualization:\n\n* All expanded items render to DOM\n* Performance degrades beyond ~500 items\n* Memory usage grows with tree size',props:`interface TreeViewProps {
|
|
28514
29657
|
/**
|
|
28515
29658
|
* @deprecated Do not use in new components. This is a legacy block
|
|
28516
29659
|
* identifier; new components should exclude it via
|
|
@@ -28988,6 +30131,8 @@ function CustomRow({
|
|
|
28988
30131
|
{state.isExpanded ? <span>expanded</span> : null}
|
|
28989
30132
|
{state.isSelected ? <span>selected</span> : null}
|
|
28990
30133
|
{state.isFocusVisible ? <span>focus visible</span> : null}
|
|
30134
|
+
{state.isFocusVisibleWithin ? <span>focus within</span> : null}
|
|
30135
|
+
{state.isPressed ? <span>pressed</span> : null}
|
|
28991
30136
|
{state.isDropTarget ? <span>drop target</span> : null}
|
|
28992
30137
|
{state.isDragging ? <span>dragging</span> : null}
|
|
28993
30138
|
</div>
|
|
@@ -29541,14 +30686,13 @@ const optionStyle = useCallback(
|
|
|
29541
30686
|
/>
|
|
29542
30687
|
\`\`\`
|
|
29543
30688
|
|
|
29544
|
-
Pass a \`dragAndDropHooks\` object (created with
|
|
30689
|
+
Pass a \`dragAndDropHooks\` object (created with \`useDragAndDrop\`) to enable drag-and-drop reordering.
|
|
29545
30690
|
|
|
29546
30691
|
\`\`\`jsx
|
|
29547
|
-
import { useDragAndDrop } from "
|
|
30692
|
+
import { UNSAFE_ListBox, useDragAndDrop } from "@baseline-ui/core";
|
|
29548
30693
|
|
|
29549
30694
|
function DraggableList() {
|
|
29550
30695
|
const { dragAndDropHooks } = useDragAndDrop({
|
|
29551
|
-
getItems: (keys) => [...keys].map((key) => ({ "text/plain": String(key) })),
|
|
29552
30696
|
onReorder(e) {
|
|
29553
30697
|
// handle reorder
|
|
29554
30698
|
},
|
|
@@ -30895,10 +32039,11 @@ title: string
|
|
|
30895
32039
|
* @example
|
|
30896
32040
|
* \`\`\`jsx
|
|
30897
32041
|
* <AccordionItem
|
|
32042
|
+
* value="item-1"
|
|
30898
32043
|
* title="Accordion Item"
|
|
30899
32044
|
* actions={[{
|
|
30900
32045
|
* icon: EditIcon,
|
|
30901
|
-
* label: "Edit",
|
|
32046
|
+
* "aria-label": "Edit",
|
|
30902
32047
|
* onPress: () => alert("Edit"),
|
|
30903
32048
|
* }]}>Content</AccordionItem>
|
|
30904
32049
|
* \`\`\`;
|
|
@@ -30963,6 +32108,9 @@ index?: number
|
|
|
30963
32108
|
import { themeVars } from "@baseline-ui/tokens";
|
|
30964
32109
|
import React from "react";
|
|
30965
32110
|
|
|
32111
|
+
import { Dialog } from "../../Dialog";
|
|
32112
|
+
import { Modal, ModalContent } from "../../Modal";
|
|
32113
|
+
import { TextInput } from "../../TextInput";
|
|
30966
32114
|
import { Accordion } from "../Accordion";
|
|
30967
32115
|
import { AccordionItem } from "../AccordionItem";
|
|
30968
32116
|
|
|
@@ -31010,16 +32158,23 @@ export const AccordionItemExample: React.FC<
|
|
|
31010
32158
|
includeDescription?: boolean;
|
|
31011
32159
|
showActionsOnTriggerOnly?: boolean;
|
|
31012
32160
|
children?: React.ReactNode;
|
|
32161
|
+
itemNumbers?: number[];
|
|
32162
|
+
includeFalseChild?: boolean;
|
|
31013
32163
|
}
|
|
31014
|
-
> = ({
|
|
31015
|
-
|
|
31016
|
-
|
|
31017
|
-
|
|
32164
|
+
> = ({
|
|
32165
|
+
includeActions,
|
|
32166
|
+
includeDescription,
|
|
32167
|
+
children,
|
|
32168
|
+
itemNumbers = [1, 2, 3],
|
|
32169
|
+
includeFalseChild,
|
|
32170
|
+
...props
|
|
32171
|
+
}) => {
|
|
32172
|
+
const items = itemNumbers.map((n) => (
|
|
31018
32173
|
<AccordionItem
|
|
31019
|
-
key={
|
|
31020
|
-
title={\`Accordion Item \${
|
|
32174
|
+
key={n}
|
|
32175
|
+
title={\`Accordion Item \${n}\`}
|
|
31021
32176
|
subLabel={includeDescription ? "Value" : undefined}
|
|
31022
|
-
value={\`item-\${
|
|
32177
|
+
value={\`item-\${n}\`}
|
|
31023
32178
|
style={contentStyle}
|
|
31024
32179
|
actions={
|
|
31025
32180
|
includeActions
|
|
@@ -31037,10 +32192,13 @@ export const AccordionItemExample: React.FC<
|
|
|
31037
32192
|
}
|
|
31038
32193
|
showActionsOnTriggerOnly={props.showActionsOnTriggerOnly}
|
|
31039
32194
|
>
|
|
31040
|
-
{children ||
|
|
31041
|
-
\`lorem ipsum dolor sit amet consectetur adipisicing elit\`}
|
|
32195
|
+
{children || \`lorem ipsum dolor sit amet consectetur adipisicing elit\`}
|
|
31042
32196
|
</AccordionItem>
|
|
31043
|
-
))
|
|
32197
|
+
));
|
|
32198
|
+
|
|
32199
|
+
return (
|
|
32200
|
+
<Accordion {...props}>
|
|
32201
|
+
{includeFalseChild ? [items[0], false, ...items.slice(1), null] : items}
|
|
31044
32202
|
</Accordion>
|
|
31045
32203
|
);
|
|
31046
32204
|
};
|
|
@@ -31117,7 +32275,32 @@ export const ControlledAccordionExample: React.FC<{
|
|
|
31117
32275
|
}}
|
|
31118
32276
|
/>
|
|
31119
32277
|
);
|
|
31120
|
-
}
|
|
32278
|
+
};
|
|
32279
|
+
|
|
32280
|
+
export const AccordionInModalExample: React.FC<{
|
|
32281
|
+
onKeyDown?: React.KeyboardEventHandler;
|
|
32282
|
+
}> = ({ onKeyDown }) => (
|
|
32283
|
+
<Modal defaultOpen={true}>
|
|
32284
|
+
<ModalContent>
|
|
32285
|
+
<Dialog aria-label="Accordion dialog">
|
|
32286
|
+
<div onKeyDown={onKeyDown}>
|
|
32287
|
+
<Accordion defaultExpandedKeys={new Set(["item-1"])}>
|
|
32288
|
+
{Array.from({ length: 2 }).map((_, i) => (
|
|
32289
|
+
<AccordionItem
|
|
32290
|
+
key={i}
|
|
32291
|
+
title={\`Accordion Item \${i + 1}\`}
|
|
32292
|
+
value={\`item-\${i + 1}\`}
|
|
32293
|
+
actions={[{ "aria-label": "Edit", icon: EllipseIcon }]}
|
|
32294
|
+
>
|
|
32295
|
+
{i === 0 ? <TextInput aria-label="Name" /> : "Second panel"}
|
|
32296
|
+
</AccordionItem>
|
|
32297
|
+
))}
|
|
32298
|
+
</Accordion>
|
|
32299
|
+
</div>
|
|
32300
|
+
</Dialog>
|
|
32301
|
+
</ModalContent>
|
|
32302
|
+
</Modal>
|
|
32303
|
+
);`},similarTo:[],figmaUrl:null},IconColorInput:{id:"core-forms-colorinput-iconcolorinput",importStatement:'import { Box, IconColorInput } from "@baseline-ui/core";',description:"",documentation:null,props:`interface IconColorInputProps {
|
|
31121
32304
|
/**
|
|
31122
32305
|
* @deprecated Do not use in new components. This is a legacy block
|
|
31123
32306
|
* identifier; new components should exclude it via
|
|
@@ -31202,8 +32385,10 @@ import React, { useState } from "react";
|
|
|
31202
32385
|
import { ActionButton } from "../../ActionButton";
|
|
31203
32386
|
import { ActionIconButton } from "../../ActionIconButton";
|
|
31204
32387
|
import { Box } from "../../Box";
|
|
32388
|
+
import { Div, NativeButton } from "../../shared/__tests__/elementTypes";
|
|
31205
32389
|
import { Text } from "../../Text";
|
|
31206
32390
|
import { ColorInput } from "../ColorInput";
|
|
32391
|
+
import { IconColorInputButton } from "../ColorInputButton";
|
|
31207
32392
|
import { IconColorInput } from "../IconColorInput";
|
|
31208
32393
|
import { presets } from "./data";
|
|
31209
32394
|
|
|
@@ -31324,7 +32509,25 @@ export const StoredCustomColorsExample: React.FC<{ storageKey: string }> = ({
|
|
|
31324
32509
|
|
|
31325
32510
|
export const IconColorInputExample: React.FC<
|
|
31326
32511
|
Omit<IconColorInputProps, "icon">
|
|
31327
|
-
> = (props) => <IconColorInput icon={BorderColorIcon} {...props}
|
|
32512
|
+
> = (props) => <IconColorInput icon={BorderColorIcon} {...props} />;
|
|
32513
|
+
|
|
32514
|
+
type IconColorInputButtonProps = React.ComponentProps<
|
|
32515
|
+
typeof IconColorInputButton
|
|
32516
|
+
>;
|
|
32517
|
+
|
|
32518
|
+
export const IconColorInputButtonExample: React.FC<
|
|
32519
|
+
Omit<IconColorInputButtonProps, "icon">
|
|
32520
|
+
> = (props) => <IconColorInputButton icon={BorderColorIcon} {...props} />;
|
|
32521
|
+
|
|
32522
|
+
export const DivIconColorInputButtonExample: React.FC<
|
|
32523
|
+
Omit<IconColorInputButtonProps, "icon">
|
|
32524
|
+
> = (props) => <IconColorInputButtonExample elementType={Div} {...props} />;
|
|
32525
|
+
|
|
32526
|
+
export const NativeButtonIconColorInputButtonExample: React.FC<
|
|
32527
|
+
Omit<IconColorInputButtonProps, "icon">
|
|
32528
|
+
> = (props) => (
|
|
32529
|
+
<IconColorInputButtonExample elementType={NativeButton} {...props} />
|
|
32530
|
+
);`},similarTo:[],figmaUrl:null},Icon:{id:"core-miscellaneous-icon",importStatement:'import { Icon } from "@baseline-ui/core";',description:"",documentation:null,props:`interface IconProps {
|
|
31328
32531
|
/**
|
|
31329
32532
|
* The \`className\` property assigned to the SVG element of the component.
|
|
31330
32533
|
*/
|
|
@@ -32044,10 +33247,6 @@ elementHandle?: React.RefObject<{
|
|
|
32044
33247
|
* @param options - The options for the move event.
|
|
32045
33248
|
* @param options.coordinates - The coordinates of the cursor.
|
|
32046
33249
|
* @param options.boundingRect - The bounding rectangle of the element.
|
|
32047
|
-
* @param options.activePoint - The active point of the element. This point is
|
|
32048
|
-
* the point which is snapped to the snap points if any or the coordinates
|
|
32049
|
-
* of the cursor if no snap points are provided or the cursor is not near a
|
|
32050
|
-
* snap point.
|
|
32051
33250
|
*/
|
|
32052
33251
|
onMove?: (options: Options) => void
|
|
32053
33252
|
/**
|
|
@@ -32140,8 +33339,10 @@ import { resolvePublicUrl } from "../../../utils/resolvePublicUrl";
|
|
|
32140
33339
|
import { ActionButton } from "../../ActionButton";
|
|
32141
33340
|
import { Box } from "../../Box";
|
|
32142
33341
|
import { Checkbox } from "../../Checkbox";
|
|
33342
|
+
import { Dialog } from "../../Dialog";
|
|
32143
33343
|
import { Link } from "../../Link";
|
|
32144
33344
|
import { Markdown } from "../../Markdown";
|
|
33345
|
+
import { Modal, ModalContent } from "../../Modal";
|
|
32145
33346
|
import { NumberInput } from "../../NumberInput";
|
|
32146
33347
|
import { PointPicker, PointPickerContent } from "../../PointPicker";
|
|
32147
33348
|
import { Select } from "../../Select";
|
|
@@ -32510,8 +33711,11 @@ export const DynamicDescriptionExample = ({ scale }: { scale?: number }) => (
|
|
|
32510
33711
|
|
|
32511
33712
|
export const PointsProximityExample = ({
|
|
32512
33713
|
type = "nearest",
|
|
33714
|
+
points,
|
|
32513
33715
|
}: {
|
|
32514
33716
|
type?: "nearest" | "within";
|
|
33717
|
+
/** Fixed snap points, in place of random ones. */
|
|
33718
|
+
points?: { x: number; y: number }[];
|
|
32515
33719
|
}) => {
|
|
32516
33720
|
const [snapPoints, setSnapPoints] = useState<number>(10_000);
|
|
32517
33721
|
const [snapRadius, setSnapRadius] = useState<number>(20);
|
|
@@ -32524,6 +33728,8 @@ export const PointsProximityExample = ({
|
|
|
32524
33728
|
const ref = useRef<HTMLDivElement>(null);
|
|
32525
33729
|
|
|
32526
33730
|
const _snapPoints = useMemo(() => {
|
|
33731
|
+
if (points) return points;
|
|
33732
|
+
|
|
32527
33733
|
const contentBounds = content?.getBoundingClientRect();
|
|
32528
33734
|
|
|
32529
33735
|
if (!contentBounds) return [];
|
|
@@ -32532,7 +33738,7 @@ export const PointsProximityExample = ({
|
|
|
32532
33738
|
x: Math.random() * contentBounds.width,
|
|
32533
33739
|
y: Math.random() * contentBounds.height,
|
|
32534
33740
|
}));
|
|
32535
|
-
}, [snapPoints, content]);
|
|
33741
|
+
}, [snapPoints, content, points]);
|
|
32536
33742
|
|
|
32537
33743
|
return (
|
|
32538
33744
|
<Box display="flex" flexDirection="column" gap="xl" ref={ref}>
|
|
@@ -32700,6 +33906,31 @@ export const RenderCursorExample: React.FC<{
|
|
|
32700
33906
|
<div style={{ width: 200, height: 200 }}>Test content</div>
|
|
32701
33907
|
</PointPickerContent>
|
|
32702
33908
|
</PointPicker>
|
|
33909
|
+
);
|
|
33910
|
+
|
|
33911
|
+
export const PointPickerInModalExample: React.FC<{
|
|
33912
|
+
preventEscape?: boolean;
|
|
33913
|
+
}> = ({ preventEscape }) => (
|
|
33914
|
+
<Modal defaultOpen={true}>
|
|
33915
|
+
<ModalContent>
|
|
33916
|
+
<Dialog aria-label="Point picker dialog">
|
|
33917
|
+
<PointPicker>
|
|
33918
|
+
<PointPickerDisplay />
|
|
33919
|
+
<PointPickerContent
|
|
33920
|
+
onKeyDown={
|
|
33921
|
+
preventEscape
|
|
33922
|
+
? (e) => {
|
|
33923
|
+
if (e.key === "Escape") e.preventDefault();
|
|
33924
|
+
}
|
|
33925
|
+
: undefined
|
|
33926
|
+
}
|
|
33927
|
+
>
|
|
33928
|
+
<RichContentBlock />
|
|
33929
|
+
</PointPickerContent>
|
|
33930
|
+
</PointPicker>
|
|
33931
|
+
</Dialog>
|
|
33932
|
+
</ModalContent>
|
|
33933
|
+
</Modal>
|
|
32703
33934
|
);`},similarTo:[],figmaUrl:null},PointPickerDisplay:{id:"core-content-pointpicker-pointpickerdisplay",importStatement:'import { Box, PointPickerDisplay, RichContentExample } from "@baseline-ui/core";',description:"",documentation:null,props:`interface PointPickerDisplayProps {
|
|
32704
33935
|
/**
|
|
32705
33936
|
* @deprecated Do not use in new components. This is a legacy block
|
|
@@ -32740,10 +33971,6 @@ style?: React.CSSProperties
|
|
|
32740
33971
|
* @param options - The options for the description.
|
|
32741
33972
|
* @param options.coordinates - The coordinates of the cursor.
|
|
32742
33973
|
* @param options.boundingRect - The bounding rectangle of the element.
|
|
32743
|
-
* @param options.activePoint - The active point of the element. This point is
|
|
32744
|
-
* the point which is snapped to the snap points if any or the coordinates
|
|
32745
|
-
* of the cursor if no snap points are provided or the cursor is not near a
|
|
32746
|
-
* snap point.
|
|
32747
33974
|
*/
|
|
32748
33975
|
description?: Description[] | ((options: Options) => Description[])
|
|
32749
33976
|
/**
|
|
@@ -32803,8 +34030,10 @@ import { resolvePublicUrl } from "../../../utils/resolvePublicUrl";
|
|
|
32803
34030
|
import { ActionButton } from "../../ActionButton";
|
|
32804
34031
|
import { Box } from "../../Box";
|
|
32805
34032
|
import { Checkbox } from "../../Checkbox";
|
|
34033
|
+
import { Dialog } from "../../Dialog";
|
|
32806
34034
|
import { Link } from "../../Link";
|
|
32807
34035
|
import { Markdown } from "../../Markdown";
|
|
34036
|
+
import { Modal, ModalContent } from "../../Modal";
|
|
32808
34037
|
import { NumberInput } from "../../NumberInput";
|
|
32809
34038
|
import { PointPicker, PointPickerContent } from "../../PointPicker";
|
|
32810
34039
|
import { Select } from "../../Select";
|
|
@@ -33173,8 +34402,11 @@ export const DynamicDescriptionExample = ({ scale }: { scale?: number }) => (
|
|
|
33173
34402
|
|
|
33174
34403
|
export const PointsProximityExample = ({
|
|
33175
34404
|
type = "nearest",
|
|
34405
|
+
points,
|
|
33176
34406
|
}: {
|
|
33177
34407
|
type?: "nearest" | "within";
|
|
34408
|
+
/** Fixed snap points, in place of random ones. */
|
|
34409
|
+
points?: { x: number; y: number }[];
|
|
33178
34410
|
}) => {
|
|
33179
34411
|
const [snapPoints, setSnapPoints] = useState<number>(10_000);
|
|
33180
34412
|
const [snapRadius, setSnapRadius] = useState<number>(20);
|
|
@@ -33187,6 +34419,8 @@ export const PointsProximityExample = ({
|
|
|
33187
34419
|
const ref = useRef<HTMLDivElement>(null);
|
|
33188
34420
|
|
|
33189
34421
|
const _snapPoints = useMemo(() => {
|
|
34422
|
+
if (points) return points;
|
|
34423
|
+
|
|
33190
34424
|
const contentBounds = content?.getBoundingClientRect();
|
|
33191
34425
|
|
|
33192
34426
|
if (!contentBounds) return [];
|
|
@@ -33195,7 +34429,7 @@ export const PointsProximityExample = ({
|
|
|
33195
34429
|
x: Math.random() * contentBounds.width,
|
|
33196
34430
|
y: Math.random() * contentBounds.height,
|
|
33197
34431
|
}));
|
|
33198
|
-
}, [snapPoints, content]);
|
|
34432
|
+
}, [snapPoints, content, points]);
|
|
33199
34433
|
|
|
33200
34434
|
return (
|
|
33201
34435
|
<Box display="flex" flexDirection="column" gap="xl" ref={ref}>
|
|
@@ -33363,6 +34597,31 @@ export const RenderCursorExample: React.FC<{
|
|
|
33363
34597
|
<div style={{ width: 200, height: 200 }}>Test content</div>
|
|
33364
34598
|
</PointPickerContent>
|
|
33365
34599
|
</PointPicker>
|
|
34600
|
+
);
|
|
34601
|
+
|
|
34602
|
+
export const PointPickerInModalExample: React.FC<{
|
|
34603
|
+
preventEscape?: boolean;
|
|
34604
|
+
}> = ({ preventEscape }) => (
|
|
34605
|
+
<Modal defaultOpen={true}>
|
|
34606
|
+
<ModalContent>
|
|
34607
|
+
<Dialog aria-label="Point picker dialog">
|
|
34608
|
+
<PointPicker>
|
|
34609
|
+
<PointPickerDisplay />
|
|
34610
|
+
<PointPickerContent
|
|
34611
|
+
onKeyDown={
|
|
34612
|
+
preventEscape
|
|
34613
|
+
? (e) => {
|
|
34614
|
+
if (e.key === "Escape") e.preventDefault();
|
|
34615
|
+
}
|
|
34616
|
+
: undefined
|
|
34617
|
+
}
|
|
34618
|
+
>
|
|
34619
|
+
<RichContentBlock />
|
|
34620
|
+
</PointPickerContent>
|
|
34621
|
+
</PointPicker>
|
|
34622
|
+
</Dialog>
|
|
34623
|
+
</ModalContent>
|
|
34624
|
+
</Modal>
|
|
33366
34625
|
);`},similarTo:[],figmaUrl:null},PopoverContent:{id:"core-overlays-popover-popovercontent",importStatement:`import {
|
|
33367
34626
|
PopoverBoundaryAxisDemo,
|
|
33368
34627
|
PopoverContainedFocusExample,
|
|
@@ -33542,7 +34801,8 @@ horizontalBoundaryBehavior?: "shift" | "anchor"
|
|
|
33542
34801
|
defaultHorizontalBoundaryBehavior="anchor"
|
|
33543
34802
|
placement="bottom left"
|
|
33544
34803
|
boundaryWidth={360}
|
|
33545
|
-
boundaryHeight={300} />;`}],implementation:`import {
|
|
34804
|
+
boundaryHeight={300} />;`}],implementation:`import { EllipseIcon } from "@baseline-ui/icons/20";
|
|
34805
|
+
import { sprinkles, themeVars } from "@baseline-ui/tokens";
|
|
33546
34806
|
import { ScrollBox } from "@pw/utils/components";
|
|
33547
34807
|
import { getOwnerDocument, mergeRefs } from "@react-aria/utils";
|
|
33548
34808
|
import React, { useEffect, useRef, useState } from "react";
|
|
@@ -33550,6 +34810,7 @@ import { useButton, useInteractOutside } from "react-aria";
|
|
|
33550
34810
|
import { flushSync } from "react-dom";
|
|
33551
34811
|
|
|
33552
34812
|
import { ActionButton } from "../../ActionButton";
|
|
34813
|
+
import { ActionIconButton } from "../../ActionIconButton";
|
|
33553
34814
|
import { Box } from "../../Box";
|
|
33554
34815
|
import { Dialog } from "../../Dialog";
|
|
33555
34816
|
import { ListBoxExample, items } from "../../ListBox/__tests__/testComponents";
|
|
@@ -33559,6 +34820,8 @@ import { popoverContentCn } from "../../Select/Select.css";
|
|
|
33559
34820
|
import { Switch } from "../../Switch";
|
|
33560
34821
|
import { Text } from "../../Text";
|
|
33561
34822
|
import { TextInput } from "../../TextInput";
|
|
34823
|
+
import { ToggleButton } from "../../ToggleButton";
|
|
34824
|
+
import { ToggleIconButton } from "../../ToggleIconButton";
|
|
33562
34825
|
import { Popover } from "../Popover";
|
|
33563
34826
|
import { PopoverContent } from "../PopoverContent";
|
|
33564
34827
|
import { PopoverTrigger } from "../PopoverTrigger";
|
|
@@ -34761,6 +36024,33 @@ export const PopoverLateBodyContainerExample: React.FC<{
|
|
|
34761
36024
|
)}
|
|
34762
36025
|
</Box>
|
|
34763
36026
|
);
|
|
36027
|
+
};
|
|
36028
|
+
|
|
36029
|
+
export const PopoverTriggerButtonExample: React.FC<{
|
|
36030
|
+
button:
|
|
36031
|
+
| "ActionButton"
|
|
36032
|
+
| "ActionIconButton"
|
|
36033
|
+
| "ToggleButton"
|
|
36034
|
+
| "ToggleIconButton";
|
|
36035
|
+
type?: PopoverProps["type"];
|
|
36036
|
+
onPress?: () => void;
|
|
36037
|
+
"aria-haspopup"?: "dialog";
|
|
36038
|
+
"aria-controls"?: string;
|
|
36039
|
+
}> = ({ button, type = "listbox", ...props }) => {
|
|
36040
|
+
const buttons = {
|
|
36041
|
+
ActionButton: <ActionButton label="Open" {...props} />,
|
|
36042
|
+
ActionIconButton: (
|
|
36043
|
+
<ActionIconButton icon={EllipseIcon} aria-label="Open" {...props} />
|
|
36044
|
+
),
|
|
36045
|
+
ToggleButton: <ToggleButton label="Open" {...props} />,
|
|
36046
|
+
ToggleIconButton: (
|
|
36047
|
+
<ToggleIconButton icon={EllipseIcon} aria-label="Open" {...props} />
|
|
36048
|
+
),
|
|
36049
|
+
};
|
|
36050
|
+
|
|
36051
|
+
return (
|
|
36052
|
+
<PopoverExample popoverProps={{ type }}>{buttons[button]}</PopoverExample>
|
|
36053
|
+
);
|
|
34764
36054
|
};`},similarTo:[],figmaUrl:null},PopoverTrigger:{id:"core-overlays-popover-popovertrigger",importStatement:`import {
|
|
34765
36055
|
ActionButton,
|
|
34766
36056
|
PopoverFunctionChildrenExample,
|
|
@@ -34790,7 +36080,8 @@ anchorRect?: Rect
|
|
|
34790
36080
|
<PopoverTriggerExample>{children}</PopoverTriggerExample>
|
|
34791
36081
|
);`},{id:"core-overlays-popover-popovertrigger--with-updated-position",name:"With Updated Position",snippet:`const WithUpdatedPosition = ({ anchorRect }) => (
|
|
34792
36082
|
<PopoverWithCustomPositionExample anchorRect={anchorRect} />
|
|
34793
|
-
);`},{id:"core-overlays-popover-popovertrigger--function-children",name:"Function Children",snippet:"const FunctionChildren = () => <PopoverFunctionChildrenExample />;"}],implementation:`import {
|
|
36083
|
+
);`},{id:"core-overlays-popover-popovertrigger--function-children",name:"Function Children",snippet:"const FunctionChildren = () => <PopoverFunctionChildrenExample />;"}],implementation:`import { EllipseIcon } from "@baseline-ui/icons/20";
|
|
36084
|
+
import { sprinkles, themeVars } from "@baseline-ui/tokens";
|
|
34794
36085
|
import { ScrollBox } from "@pw/utils/components";
|
|
34795
36086
|
import { getOwnerDocument, mergeRefs } from "@react-aria/utils";
|
|
34796
36087
|
import React, { useEffect, useRef, useState } from "react";
|
|
@@ -34798,6 +36089,7 @@ import { useButton, useInteractOutside } from "react-aria";
|
|
|
34798
36089
|
import { flushSync } from "react-dom";
|
|
34799
36090
|
|
|
34800
36091
|
import { ActionButton } from "../../ActionButton";
|
|
36092
|
+
import { ActionIconButton } from "../../ActionIconButton";
|
|
34801
36093
|
import { Box } from "../../Box";
|
|
34802
36094
|
import { Dialog } from "../../Dialog";
|
|
34803
36095
|
import { ListBoxExample, items } from "../../ListBox/__tests__/testComponents";
|
|
@@ -34807,6 +36099,8 @@ import { popoverContentCn } from "../../Select/Select.css";
|
|
|
34807
36099
|
import { Switch } from "../../Switch";
|
|
34808
36100
|
import { Text } from "../../Text";
|
|
34809
36101
|
import { TextInput } from "../../TextInput";
|
|
36102
|
+
import { ToggleButton } from "../../ToggleButton";
|
|
36103
|
+
import { ToggleIconButton } from "../../ToggleIconButton";
|
|
34810
36104
|
import { Popover } from "../Popover";
|
|
34811
36105
|
import { PopoverContent } from "../PopoverContent";
|
|
34812
36106
|
import { PopoverTrigger } from "../PopoverTrigger";
|
|
@@ -36009,6 +37303,33 @@ export const PopoverLateBodyContainerExample: React.FC<{
|
|
|
36009
37303
|
)}
|
|
36010
37304
|
</Box>
|
|
36011
37305
|
);
|
|
37306
|
+
};
|
|
37307
|
+
|
|
37308
|
+
export const PopoverTriggerButtonExample: React.FC<{
|
|
37309
|
+
button:
|
|
37310
|
+
| "ActionButton"
|
|
37311
|
+
| "ActionIconButton"
|
|
37312
|
+
| "ToggleButton"
|
|
37313
|
+
| "ToggleIconButton";
|
|
37314
|
+
type?: PopoverProps["type"];
|
|
37315
|
+
onPress?: () => void;
|
|
37316
|
+
"aria-haspopup"?: "dialog";
|
|
37317
|
+
"aria-controls"?: string;
|
|
37318
|
+
}> = ({ button, type = "listbox", ...props }) => {
|
|
37319
|
+
const buttons = {
|
|
37320
|
+
ActionButton: <ActionButton label="Open" {...props} />,
|
|
37321
|
+
ActionIconButton: (
|
|
37322
|
+
<ActionIconButton icon={EllipseIcon} aria-label="Open" {...props} />
|
|
37323
|
+
),
|
|
37324
|
+
ToggleButton: <ToggleButton label="Open" {...props} />,
|
|
37325
|
+
ToggleIconButton: (
|
|
37326
|
+
<ToggleIconButton icon={EllipseIcon} aria-label="Open" {...props} />
|
|
37327
|
+
),
|
|
37328
|
+
};
|
|
37329
|
+
|
|
37330
|
+
return (
|
|
37331
|
+
<PopoverExample popoverProps={{ type }}>{buttons[button]}</PopoverExample>
|
|
37332
|
+
);
|
|
36012
37333
|
};`},similarTo:[],figmaUrl:null},IconSelect:{id:"core-forms-select-iconselect",importStatement:'import { IconSelect } from "@baseline-ui/core";',description:"",documentation:null,props:`interface IconSelectProps {
|
|
36013
37334
|
/**
|
|
36014
37335
|
* The icon to show at the start of the color input.
|
|
@@ -36435,14 +37756,32 @@ popoverContentProps?: Omit<PopoverContentProps, "children">
|
|
|
36435
37756
|
isDisabled />;`}],implementation:`import React from "react";
|
|
36436
37757
|
|
|
36437
37758
|
import { IconSlider } from "../IconSlider";
|
|
37759
|
+
import { Slider } from "../Slider";
|
|
36438
37760
|
|
|
36439
37761
|
import type { IconSliderProps } from "../Slider.types";
|
|
36440
37762
|
|
|
36441
37763
|
const TestIcon = () => <div>Icon</div>;
|
|
36442
37764
|
|
|
36443
37765
|
export const IconSliderWithIconExample: React.FC<
|
|
36444
|
-
Omit<IconSliderProps, "icon">
|
|
36445
|
-
|
|
37766
|
+
Omit<IconSliderProps, "icon"> & {
|
|
37767
|
+
onAncestorKeyDown?: React.KeyboardEventHandler;
|
|
37768
|
+
}
|
|
37769
|
+
> = ({ onAncestorKeyDown, ...props }) => (
|
|
37770
|
+
<div onKeyDown={onAncestorKeyDown}>
|
|
37771
|
+
<IconSlider icon={TestIcon} {...props} />
|
|
37772
|
+
</div>
|
|
37773
|
+
);
|
|
37774
|
+
|
|
37775
|
+
export const SliderWithExternalDescriptionExample: React.FC = () => (
|
|
37776
|
+
<>
|
|
37777
|
+
<p id="external-hint">Applies to the whole layer</p>
|
|
37778
|
+
<Slider
|
|
37779
|
+
label="Opacity"
|
|
37780
|
+
description="Controls transparency"
|
|
37781
|
+
aria-describedby="external-hint"
|
|
37782
|
+
/>
|
|
37783
|
+
</>
|
|
37784
|
+
);`},similarTo:[],figmaUrl:null}};var i={gettingStarted:`# Getting started
|
|
36446
37785
|
|
|
36447
37786
|
Install the packages required for using Baseline UI with the following command:
|
|
36448
37787
|
|
|
@@ -36612,7 +37951,7 @@ Baseline UI provides a comprehensive theming system based on CSS variables that
|
|
|
36612
37951
|
The theme system is built around the \`ThemeProvider\` component, which applies theme tokens as CSS variables throughout your application:
|
|
36613
37952
|
|
|
36614
37953
|
\`\`\`jsx live
|
|
36615
|
-
import { ThemeProvider } from "
|
|
37954
|
+
import { ThemeProvider } from "@baseline-ui/core";
|
|
36616
37955
|
import { themes } from "@baseline-ui/tokens";
|
|
36617
37956
|
|
|
36618
37957
|
function App() {
|
|
@@ -37313,7 +38652,7 @@ You can combine sprinkles with other className utilities:
|
|
|
37313
38652
|
|
|
37314
38653
|
\`\`\`tsx
|
|
37315
38654
|
import { sprinkles } from "@baseline-ui/tokens";
|
|
37316
|
-
import { classNames } from "
|
|
38655
|
+
import { classNames } from "@baseline-ui/core";
|
|
37317
38656
|
|
|
37318
38657
|
<div
|
|
37319
38658
|
className={classNames(
|
|
@@ -37784,15 +39123,24 @@ ThemeVars can be used to pass color or sizing values to components, such as icon
|
|
|
37784
39123
|
|
|
37785
39124
|
\`\`\`tsx
|
|
37786
39125
|
import { themeVars } from "@baseline-ui/tokens";
|
|
37787
|
-
import {
|
|
39126
|
+
import {
|
|
39127
|
+
CheckmarkCircleIcon,
|
|
39128
|
+
ErrorCircleIcon,
|
|
39129
|
+
WarningIcon,
|
|
39130
|
+
} from "@baseline-ui/icons/16";
|
|
37788
39131
|
|
|
37789
39132
|
const statusIcons = {
|
|
37790
39133
|
warning: (
|
|
37791
39134
|
<WarningIcon color={themeVars.color.support.warning.strong} size={16} />
|
|
37792
39135
|
),
|
|
37793
|
-
error:
|
|
39136
|
+
error: (
|
|
39137
|
+
<ErrorCircleIcon color={themeVars.color.support.error.strong} size={16} />
|
|
39138
|
+
),
|
|
37794
39139
|
success: (
|
|
37795
|
-
<
|
|
39140
|
+
<CheckmarkCircleIcon
|
|
39141
|
+
color={themeVars.color.support.success.strong}
|
|
39142
|
+
size={16}
|
|
39143
|
+
/>
|
|
37796
39144
|
),
|
|
37797
39145
|
};
|
|
37798
39146
|
\`\`\`
|
|
@@ -38173,7 +39521,7 @@ padding={[null, "lg", "xl"]}
|
|
|
38173
39521
|
|
|
38174
39522
|
* [vanilla-extract sprinkles documentation](https://vanilla-extract.style/documentation/packages/sprinkles/) - Learn about the underlying sprinkles framework
|
|
38175
39523
|
* [Box component documentation](/docs/core-utilities-box--docs) - Detailed information about the Box component
|
|
38176
|
-
* [Theme documentation](/docs/theming--docs) - Learn about Baseline UI's theming system`};var m={"8":["CaretDownIcon","CaretLeftIcon","CaretRightIcon","CaretUpIcon","ChevronRightFilledIcon","ChevronRightIcon","EllipseIcon","MinusIcon","PlusIcon","XIcon"],"12":["CaretDownIcon","CaretLeftIcon","CaretRightIcon","CaretUpIcon","CheckmarkIcon","DragIndicatorIcon","DragIndicatorVerticalIcon","EditIcon","EllipseIcon","EnterKeyIcon","LockFilledIcon","LockIcon","MinusIcon","MoreVIcon","MoreIcon","PlaceholderIcon","PlusIcon","SearchIcon","SizeIcon","TrashIcon","XIcon","ZoomIcon"],"16":["AlignBottomIcon","AlignMiddleIcon","AlignTopIcon","AnonymousIcon","ArrowDiagonalTopLeftBottomRightIcon","ArrowDownCircleFilledIcon","ArrowDownIcon","ArrowIcon","ArrowLeftRightIcon","ArrowRightIcon","ArrowUpArrowDownIcon","ArrowUpIcon","AtIcon","AttachmentsIcon","AvatarIcon","BoldIcon","BookmarkFilledIcon","BookmarkIcon","BulletListIcon","CalendarIcon","CaretLeftIcon","CaretRightIcon","CheckmarkCircleFilledIcon","CheckmarkCircleIcon","CheckmarkIcon","CircleFilledIcon","ClockIcon","CopyIcon","CustomizeIcon","DocumentEditIcon","DownloadIcon","DuplicateIcon","EditIcon","ElipseAreaIcon","EllipseCloudyIcon","EllipseDashedIcon","EllipseIcon","EmbedIcon","EmojiSmileIcon","ErrorAltCircleFilledIcon","ErrorCircleFilledIcon","ErrorCircleIcon","ExpandIcon","FilterAltIcon","FolderIcon","FormButtonIcon","FormChoiceIcon","FormComboboxIcon","FormDateIcon","FormListboxIcon","FormRadioButtonIcon","FormSignatureIcon","FormTextFieldIcon","FullScreenIcon","HelpCircleIcon","HelpIcon","HereIcon","HideIcon","HighlightTextAltIcon","HighlightTextIcon","HorizontalScrollIcon","ImageIcon","InfoCircleFilledIcon","InsertIcon","ItalicIcon","LightBulbIcon","LineIcon","LinkIcon","ListIcon","LockIcon","MagicIcon","MeasureIcon","MinusIcon","MoreIcon","MoreVerticalIcon","NoteArrowRightIcon","NoteCheckIcon","NoteCircleIcon","NoteCloudIcon","NoteCrossIcon","NoteHelpIcon","NoteInsetIcon","NoteKeyIcon","NoteNewParagraphAltIcon","NoteNewParagraphIcon","NoteNoteIcon","NotePointerRightIcon","NoteSpeechBubbleIcon","NoteStarIcon","NumberedListIcon","OpenIcon","PageFittingFillIcon","PageFittingFitIcon","PageHorizontalScrollIcon","PageLayoutDoubleIcon","PageLayoutSingleIcon","PageVerticalScrollIcon","PauseIcon","PenHighlighterIcon","PenIcon","PerimeterIcon","PlaceholderIcon","PlayIcon","PlusIcon","PolygonAreaIcon","PolygonCloudyIcon","PolygonDashedIcon","PolygonIcon","PolylineIcon","ReadOnlyIcon","RectangleAreaIcon","RectangleCloudyIcon","RectangleDashedIcon","RectangleIcon","RedoIcon","RemoveFormattingIcon","ReorderIcon","RotateClockwiseIcon","RotateCounterClockwiseIcon","RulerIcon","SearchIcon","SettingsIcon","ShowIcon","SlashCommandsIcon","SoundRecordIcon","StampIcon","StarFilledIcon","StarIcon","StrikeoutTextAltIcon","TableCellIcon","TableColumnIcon","TableHeaderIcon","TableIcon","TableRowIcon","TextAlignCenterIcon","TextAlignJustifyIcon","TextAlignLeftIcon","TextAlignRightIcon","TextCalloutIcon","TextDecreaseIndentIcon","TextIcon","TextIncreaseIndentIcon","TextMarkIcon","ThumbnailsIcon","ThumbsDownIcon","ThumbsUpIcon","TrashIcon","TypeTextIcon","UnderlineIcon","UndoIcon","UnlockIcon","VerticalScrollIcon","VideoIcon","WarningFilledIcon","WarningIcon","WindowedIcon","WorkflowIcon","XCircleFilledIcon","XIcon"],"20":["AddPageIcon","AnonymousIcon","ArrowLeftIcon","ArrowRightIcon","ArrowUpCircleFilledIcon","AtIcon","AvatarFilledIcon","BoldIcon","CalloutIcon","CaretDownIcon","CaretLeftIcon","CaretRightIcon","CaretUpIcon","CheckCircleFilledIcon","CheckmarkCircleIcon","CheckmarkIcon","ClockIcon","CollapseIcon","CommentIcon","CopyIcon","CutIcon","DistanceIcon","DownloadIcon","DuplicateIcon","EditIcon","EllipseIcon","EmojiSmileIcon","ErrorAltCircleFilledIcon","ErrorAlternativeCircleIcon","ErrorCircleFilledIcon","ErrorCircleIcon","ExpandIcon","FormDateIcon","FormSignatureIcon","FormTextFieldIcon","HelpCircleIcon","HighlightTextIcon","HomeIcon","ImageIcon","InfoCircleFilledIcon","InfoCircleIcon","ItalicIcon","LinkIcon","ListIcon","LockIcon","MagicIcon","MinusIcon","MoreIcon","MoreVerticalIcon","MoveIcon","NoteArrowRightIcon","NoteCheckIcon","NoteCircleIcon","NoteCrossIcon","NoteHelpIcon","NoteInsetIcon","NoteKeyIcon","NoteNewParagraphAltIcon","NoteNewParagraphIcon","NoteNoteIcon","NotePointerRightIcon","NoteSpeechBubbleIcon","NoteStarIcon","OpenIcon","PageMoveLeftIcon","PageMoveRightIcon","PagesInsertIcon","PasteIcon","PipetteIcon","PlusIcon","PrintIcon","RotateClockwiseIcon","SearchIcon","SettingsIcon","ShapeIcon","ShareIcon","SoundIcon","SoundRecordIcon","StarFilledIcon","StarIcon","StyleIcon","TextAlignCenterIcon","TextAlignJustifyIcon","TextAlignLeftIcon","TextAlignRightIcon","TextIcon","ThumbnailsIcon","ThumbsDownIcon","ThumbsUpIcon","TrashIcon","TypeTextIcon","UnderlineIcon","UploadIcon","WarningFilledIcon","WarningIcon","XCircleFilledIcon","XCircleIcon","XIcon"],"24":["AddNoteCloudIcon","AddNoteIcon","AddTextSerifIcon","AiIcon","AirplaneIcon","AlignBottomIcon","AlignHorizontalCenterIcon","AlignMiddleIcon","AlignTopIcon","AnonymousIcon","ArrowDownIcon","ArrowIcon","ArrowLeftIcon","ArrowRightIcon","ArrowUpIcon","AtIcon","AttachmentIcon","AvatarFilledIcon","AvatarIcon","BlendModeIcon","BoldIcon","BookmarkFilledIcon","BookmarkIcon","BorderColorIcon","BottomBorderIcon","BulletListIcon","CalibrateIcon","CaptureAddIcon","CaretDownIcon","CaretIcon","CaretLeftIcon","CaretRightIcon","CaretUpIcon","CheckmarkCircleFilledIcon","CheckmarkCircleIcon","CheckmarkIcon","ChevronListIcon","ClockIcon","CloudyBorderIcon","CollapseIcon","ColorPaletteIcon","ColorSwatchIcon","CommentIcon","CommentInSidebarIcon","CommentOnPageIcon","CompareDocumentsIcon","CopyIcon","CopyPageIcon","CropIcon","CustomizeIcon","CutIcon","DateModifiedIcon","DatePlusIcon","DebugIcon","DocumentArrowDownCircleIcon","DocumentArrowDownIcon","DocumentArrowRightIcon","DocumentFilledIcon","DocumentLockIcon","DocumentPdfIcon","DownloadIcon","DragIndicatorIcon","DragIndicatorVerticalIcon","DuplicateIcon","EditAnnotationsIcon","EditContentIcon","EditDocumentIcon","EditIcon","EditThumbnailsIcon","EllipseAreaIcon","EllipseCloudyIcon","EllipseDashedIcon","EllipseIcon","EmbedIcon","EmojiSmileIcon","EndCapArrowFilledIcon","EndCapArrowIcon","EndCapChevronFilledIcon","EndCapChevronIcon","EndCapCircleIcon","EndCapDiamondIcon","EndCapNoneIcon","EndCapSlantedIcon","EndCapSquareIcon","EndCapStraightIcon","EraserIcon","ErrorAltCircleFilledIcon","ErrorAltIcon","ErrorCircleFilledIcon","ErrorCircleIcon","ExpandIcon","ExpandVerticalIcon","FillColorIcon","FilterIcon","FitToHeightIcon","FivePagesHorizontalFilledIcon","FivePagesVerticalFilledIcon","FolderAddIcon","FolderIcon","FontListIcon","FontSizeIcon","FormButtonIcon","FormChoiceIcon","FormComboboxIcon","FormDateIcon","FormListboxIcon","FormPageIcon","FormRadioButtonIcon","FormSignatureIcon","FormTextFieldIcon","FormTwoRadioButtonsIcon","FourPagesGridFilledIcon","FourPagesHorizontalFilledIcon","FourPagesStackedFilledIcon","FourPagesVerticalFilledIcon","GroupIcon","HamburgerMenuIcon","HandIcon","HeartIcon","HideIcon","HideRevealIcon","HighlightTextIcon","HomeIcon","HorizontalScollIcon","ImageIcon","InfoCircleFilledIcon","InfoCircleIcon","InitialsIcon","InnerHorizontalBorderIcon","InnerVerticalBorderIcon","InsertIcon","ItalicIcon","LayerBottomIcon","LayerDownIcon","LayerTopIcon","LayerUpIcon","LayersIcon","LeftBindingIcon","LeftBorderIcon","LineCapsIcon","LineIcon","LineSpacingIcon","LineStyleCloudyIcon","LineStyleDashedDoubleDashIcon","LineStyleDashedDoubleGapIcon","LineStyleDashedQuadrupleDashIcon","LineStyleDashedSingleGapIcon","LineStyleIcon","LineStyleSolidIcon","LineWidthIcon","LinkIcon","LockFilledIcon","LockIcon","MagicIcon","MagicPenIcon","MailIcon","MarkupIcon","MarqueeZoomIcon","MeasureIcon","MergeIcon","MessageCloudIcon","MinusIcon","MoonIcon","MoreCircleIcon","MoreIcon","MoreVerticalIcon","MoveAllDirectionsIcon","MoveLeftIcon","MoveLeftRightIcon","MoveRightIcon","MultiplePagesIcon","NonEditableIcon","NoteArrowRightIcon","NoteCheckIcon","NoteCircleIcon","NoteCloudIcon","NoteCrossIcon","NoteHelpIcon","NoteIcon","NoteInsetIcon","NoteKeyIcon","NoteNewParagraphAltIcon","NoteNewParagraphIcon","NoteNoteIcon","NotePointerRightIcon","NoteSpeechBubbleIcon","NoteStarIcon","OcrIcon","OpacityIcon","PageAddIcon","PageCurlIcon","PageDuplicateIcon","PageFittingFillIcon","PageFittingFitIcon","PageHorizontalScrollIcon","PageLandscapeIcon","PageLayoutDoubleIcon","PageLayoutSingleIcon","PageMoveLeftIcon","PageMoveRightIcon","PageNumberCircleIcon","PageNumberIcon","PagePortraitIcon","PageRemoveIcon","PageVerticalScrollIcon","PagesInsertAltIcon","PagesInsertIcon","PagesNewFromSelectionAltIcon","PagesNewFromSelectionIcon","PagesSelectAllIcon","PagesSelectNoneIcon","PasteBoardIcon","PastePageIcon","PauseIcon","PenHighlighterIcon","PenIcon","PerimeterIcon","PinDropFilledIcon","PinDropIcon","PipetteIcon","PlayIcon","PlusCircleFilledIcon","PlusCircleIcon","PlusIcon","PointerIcon","PolygonAreaIcon","PolygonCloudyIcon","PolygonDashedIcon","PolygonIcon","PolylineIcon","PrecisionIcon","PrintIcon","PrivateModeIcon","PushPinIcon","QuestionmarkCircleIcon","ReaderViewIcon","RectangleAreaIcon","RectangleCloudyIcon","RectangleDashedIcon","RectangleIcon","RedactIcon","RedactRectangleIcon","RedactTextHighlighterIcon","RedactionTextRepeatingIcon","RedactionTextSingleIcon","RedoAllIcon","RedoIcon","RegexIcon","ReplaceIcon","RightBindingIcon","RightBorderIcon","RotateClockwiseIcon","RotateCounterClockwiseIcon","RotateObjectClockwiseIcon","RotateObjectCounterClockwiseIcon","RulerIcon","ScaleIcon","SearchCircleIcon","SearchIcon","SearchSelectionIcon","SelectAllIcon","SelectionToolIcon","SettingsIcon","ShapesIcon","ShareAltIcon","ShareIcon","ShieldAddIcon","ShieldCheckmarkIcon","ShieldWarningIcon","ShieldXIcon","ShowIcon","SidebarIcon","SignOutIcon","SignatureDigitalIcon","SignatureIcon","SinglePageFilledIcon","SoundIcon","SquigglyTextIcon","StampAddIcon","StampIcon","StarFilledIcon","StarIcon","StartCapArrowFilledIcon","StartCapArrowIcon","StartCapChevronFilledIcon","StartCapChevronIcon","StartCapCircleIcon","StartCapDiamondIcon","StartCapNoneIcon","StartCapSlantedIcon","StartCapSquareIcon","StartCapStraightIcon","StrikeoutTextIcon","StyleFilledIcon","StyleIcon","StylusFilledIcon","StylusIcon","SunIcon","TableCellIcon","TextAlignCenterIcon","TextAlignJustifyIcon","TextAlignLeftIcon","TextAlignRightIcon","TextCalloutIcon","TextColorIcon","TextIcon","TextPropertiesHideIcon","TextPropertiesShowIcon","TextSerifIcon","TextSmallerIcon","ThreePagesHorizontalFilledIcon","ThreePagesStackedFilledIcon","ThreePagesVerticalFilledIcon","ThumbnailsIcon","ThumbsDownIcon","ThumbsUpIcon","TopBorderIcon","TrashIcon","TwoPagesHorizontalFilledIcon","TwoPagesVerticalFilledIcon","TypeTextIcon","UnderlineIcon","UnderlineTextIcon","UndoAllIcon","UndoIcon","UndoRedoIcon","UngroupIcon","UnlockIcon","UploadIcon","UserIcon","VerticalScrollIcon","VideoIcon","WarningFilledIcon","WarningIcon","WidgetIcon","WorkflowIcon","XCircleFilledIcon","XCircleIcon","XIcon","ZoomInIcon","ZoomOutIcon"],"36":["ArrowRight","Check","Circle","Cross","Help","Inset","Key","NewParagraphAlt","NewParagraph","Note","PointerRight","SpeechBubble","Star"]};var r=["charts-barchart--basic","charts-barchart--custom-colors","charts-barchart--formatted","charts-barchart--hidden-axes","charts-barchart--many-series","charts-barchart--mixed-stacking","charts-barchart--single-series","charts-barchart--stacked","charts-barchart--stacked-with-three-series","charts-barchart--thicker-bars","charts-barchart--with-legend","charts-linechart--basic","charts-linechart--custom-colors","charts-linechart--formatted","charts-linechart--hidden-axes","charts-linechart--linear-curve","charts-linechart--many-lines","charts-linechart--single-line","charts-linechart--sparkline","charts-linechart--with-dots","charts-linechart--with-legend","charts-piechart--basic","charts-piechart--custom-colors","charts-piechart--donut","charts-piechart--long-legend-names","charts-piechart--many-slices","charts-piechart--no-labels","charts-piechart--no-legend","charts-piechart--no-tooltip","charts-piechart--small-slices-below-five-percent","core-buttons-actionbutton--as-div","core-buttons-actionbutton--basic","core-buttons-actionbutton--disabled","core-buttons-actionbutton--variants","core-buttons-actionbutton--with-both-icons","core-buttons-actionbutton--with-icon","core-buttons-actionbutton--with-popover","core-buttons-actiongroup--basic","core-buttons-actiongroup--default-selected","core-buttons-actiongroup--disabled","core-buttons-actiongroup--disabled-items","core-buttons-actiongroup--disabled-items-multi-select","core-buttons-actiongroup--disabled-with-selection","core-buttons-actiongroup--multi-select","core-buttons-actiongroup--multiple-default-selected","core-buttons-actiongroup--multiple-selected-items","core-buttons-actiongroup--single-item","core-buttons-actiongroup--single-select","core-buttons-actiongroup--with-custom-action-item","core-buttons-actiongroup--with-icon","core-buttons-actiongroup--with-icon-disabled","core-buttons-actiongroup--with-icon-multi-select","core-buttons-actiongroup--without-tooltip","core-buttons-actioniconbutton--basic","core-buttons-actioniconbutton--disabled","core-buttons-actioniconbutton--variants","core-buttons-actioniconbutton--with-popover","core-buttons-actioniconbutton--with-tooltip","core-buttons-reaction--basic","core-buttons-reaction--disabled","core-buttons-reaction--read-only","core-buttons-reaction--selected","core-buttons-reaction--variants","core-buttons-scrollcontrolbutton--basic","core-buttons-scrollcontrolbutton--hide-for-keyboard","core-buttons-scrollcontrolbutton--with-custom-delay","core-buttons-scrollcontrolbutton--with-reversed-items","core-buttons-scrollcontrolbutton--without-smooth-scroll","core-buttons-togglebutton--basic","core-buttons-togglebutton--controlled","core-buttons-togglebutton--default-selected","core-buttons-togglebutton--disabled","core-buttons-togglebutton--variants","core-buttons-togglebutton--with-icon","core-buttons-toggleiconbutton--basic","core-buttons-toggleiconbutton--primary-variants","core-buttons-toggleiconbutton--secondary-variants","core-buttons-toggleiconbutton--state-specific-icons","core-buttons-toggleiconbutton--teritary-variants","core-buttons-toggleiconbutton--toolbar-variants","core-buttons-toggleiconbutton--with-tooltip","core-collections-filelist--basic","core-collections-filelist--disabled","core-collections-filelist--disabled-items","core-collections-filelist--loading","core-collections-filelist--long-filename","core-collections-filelist--many-items","core-collections-filelist--mixed-states","core-collections-filelist--with-error","core-collections-gridlist--basic","core-collections-gridlist--default-selected-keys","core-collections-gridlist--disabled","core-collections-gridlist--disabled-rows","core-collections-gridlist--disallow-empty-selection","core-collections-gridlist--with-drag-and-drop","core-collections-gridlist--with-multiple-selection","core-collections-gridlist--with-single-selection","core-collections-imagegallery--basic","core-collections-imagegallery--more-items","core-collections-imagegallery--rtl-with-virtualization","core-collections-imagegallery--scrollable","core-collections-imagegallery--with-controlled-list","core-collections-imagegallery--with-custom-aspect-ratio","core-collections-imagegallery--with-custom-fit","core-collections-imagegallery--with-custom-image-dimensions","core-collections-imagegallery--with-custom-image-renderer","core-collections-imagegallery--with-custom-size","core-collections-imagegallery--with-deletion","core-collections-imagegallery--with-dynamic-list","core-collections-imagegallery--with-long-labels","core-collections-imagegallery--with-medium-size","core-collections-imagegallery--with-multiple-selection","core-collections-imagegallery--with-reordering","core-collections-imagegallery--with-single-selection","core-collections-imagegallery--with-single-selection-and-deletion","core-collections-imagegallery--with-virtualization","core-collections-listbox--basic","core-collections-listbox--controlled-auto-scroll","core-collections-listbox--drag-and-drop-custom-preview","core-collections-listbox--drag-and-drop-grid","core-collections-listbox--drag-and-drop-horizontal","core-collections-listbox--drag-and-drop-multiple","core-collections-listbox--drag-and-drop-single","core-collections-listbox--dynamic-items","core-collections-listbox--with-custom-option-style","core-collections-listbox--with-customized-section-titles","core-collections-listbox--with-default-selected","core-collections-listbox--with-disabled-items","core-collections-listbox--with-focus-loop","core-collections-listbox--with-padded-section-titles","core-collections-listbox--with-section-titles","core-collections-listbox--with-sections","core-collections-listbox--with-selected","core-collections-menu--basic","core-collections-menu--controlled-open","core-collections-menu--disabled","core-collections-menu--long-menu","core-collections-menu--multiple-selection","core-collections-menu--section-level-selection","core-collections-menu--single-selection","core-collections-menu--with-custom-options","core-collections-menu--with-custom-trigger","core-collections-menu--with-disabled-keys","core-collections-menu--with-disabled-submenu","core-collections-menu--with-icons","core-collections-menu--with-long-labels","core-collections-menu--with-sections","core-collections-menu--with-selected-keys-controlled","core-collections-menu--with-submenu","core-collections-table--async-loading","core-collections-table--default","core-collections-table--disabled-rows","core-collections-table--drag-and-drop","core-collections-table--empty","core-collections-table--long-text-content","core-collections-table--multiple-selection","core-collections-table--row-action","core-collections-table--selection-with-row-action","core-collections-table--single-selection","core-collections-table--sorting","core-collections-table--virtualized","core-collections-table--with-tag-and-menu","core-collections-table--with-toolbar","core-collections-taggroup--basic","core-collections-taggroup--disabled","core-collections-taggroup--disabled-items","core-collections-taggroup--group-variants","core-collections-taggroup--multi-select","core-collections-taggroup--removable","core-collections-taggroup--single-select","core-collections-taggroup--small-variants","core-collections-taggroup--variants","core-collections-treeview--basic","core-collections-treeview--custom-row","core-collections-treeview--custom-row-drag-and-drop","core-collections-treeview--deeply-nested","core-collections-treeview--drag-and-drop","core-collections-treeview--empty-tree","core-collections-treeview--flat-tree","core-collections-treeview--handle-only-drag-and-drop","core-collections-treeview--interactive-fields-drag-and-drop","core-collections-treeview--long-labels","core-collections-treeview--single-item","core-collections-treeview--virtualized-drag-and-drop","core-collections-treeview--virtualized-with-actions","core-collections-treeview--virtualized-with-descriptions","core-collections-treeview--virtualized-with-expand-control","core-collections-treeview--virtualized-with-rename","core-collections-treeview--with-actions-at-end","core-collections-treeview--with-controlled-expanded-keys","core-collections-treeview--with-custom-render-icons","core-collections-treeview--with-custom-render-item-title","core-collections-treeview--with-default-expanded-keys","core-collections-treeview--with-description","core-collections-treeview--with-icons","core-collections-treeview--with-primary-action","core-collections-treeview--with-primary-and-secondary-action","core-collections-treeview--with-primary-secondary-and-description-action","core-collections-treeview--with-rename","core-collections-treeview--with-selected-items","core-collections-treeview--with-virtualization","core-collections-unsafe-listbox--basic","core-collections-unsafe-listbox--controlled-auto-scroll","core-collections-unsafe-listbox--drag-and-drop-custom-preview","core-collections-unsafe-listbox--drag-and-drop-grid","core-collections-unsafe-listbox--drag-and-drop-horizontal","core-collections-unsafe-listbox--drag-and-drop-multiple","core-collections-unsafe-listbox--drag-and-drop-single","core-collections-unsafe-listbox--dynamic-items","core-collections-unsafe-listbox--virtualized-horizontal","core-collections-unsafe-listbox--virtualized-scroll-into-view","core-collections-unsafe-listbox--virtualized-vertical","core-collections-unsafe-listbox--virtualized-with-section-separators","core-collections-unsafe-listbox--virtualized-with-sections","core-collections-unsafe-listbox--with-custom-option-style","core-collections-unsafe-listbox--with-customized-section-titles","core-collections-unsafe-listbox--with-default-selected","core-collections-unsafe-listbox--with-disabled-items","core-collections-unsafe-listbox--with-focus-loop","core-collections-unsafe-listbox--with-padded-section-titles","core-collections-unsafe-listbox--with-section-titles","core-collections-unsafe-listbox--with-sections","core-collections-unsafe-listbox--with-selected","core-collections-virtualizer--grid-layout-example","core-collections-virtualizer--list-layout-example","core-collections-virtualizer--rtl-image-gallery-preset-example","core-collections-virtualizer--tree-view-preset-example","core-content-avatar--basic","core-content-avatar--disabled","core-content-avatar--variants","core-content-avatar--with-image","core-content-avatar--with-initials","core-content-avatar--with-notification","core-content-code--basic","core-content-code--with-scroll","core-content-colorswatch--basic","core-content-colorswatch--disabled","core-content-colorswatch--full-transparency","core-content-colorswatch--indeterminate","core-content-colorswatch--interactive","core-content-colorswatch--none","core-content-colorswatch--variants","core-content-colorswatch--with-custom-label","core-content-colorswatch--with-tooltip","core-content-colorswatch--with-transparency","core-content-kbd--common-shortcuts","core-content-kbd--complex-shortcut","core-content-kbd--key-combination","core-content-kbd--key-combination-with-symbols","core-content-kbd--modifier-key","core-content-kbd--single-key","core-content-kbd--symbols-showcase","core-content-markdown--basic","core-content-markdown--with-caret","core-content-pointpicker--basic","core-content-pointpicker--disabled","core-content-pointpicker-pointpickercontent--custom-cursor","core-content-pointpicker-pointpickercontent--custom-cursor-without-default","core-content-pointpicker-pointpickercontent--default","core-content-pointpicker-pointpickercontent--multiple-point-pickers","core-content-pointpicker-pointpickercontent--points-within-radius","core-content-pointpicker-pointpickercontent--programmatic-focus","core-content-pointpicker-pointpickercontent--snap-to-point","core-content-pointpicker-pointpickercontent--trailing-element","core-content-pointpicker-pointpickercontent--without-grid-lines","core-content-pointpicker-pointpickerdisplay--with-custom-scale","core-content-pointpicker-pointpickerdisplay--with-description","core-content-pointpicker-pointpickerdisplay--with-floating-display","core-content-preview--disabled","core-content-preview--image-preview","core-content-preview--svg-preview","core-content-preview--text-preview","core-content-preview--variants","core-content-preview--without-delete-button","core-content-separator--basic","core-content-separator--secondary","core-content-separator--secondary-vertical","core-content-separator--vertical","core-content-statuscard--basic","core-content-statuscard--interactive","core-content-statuscard--long-content","core-content-statuscard--truncated-title","core-content-statuscard--variants","core-content-statuscard--with-custom-icon","core-content-statuscard--with-trailing-element","core-content-statuscard--without-description","core-content-tag--basic","core-content-tag--disabled","core-content-tag--disabled-removable","core-content-tag--long-text","core-content-tag--removable","core-content-tag--selected","core-content-tag--selected-with-icon","core-content-tag--small","core-content-tag--small-with-icon","core-content-tag--with-icon","core-content-text--basic","core-content-text--slots","core-content-text--variants","core-feedback-skeleton--circle","core-feedback-skeleton--composed-example","core-feedback-skeleton--custom-shape","core-feedback-skeleton--document-view-area","core-feedback-skeleton--rectangle","core-feedback-skeleton--text-line","core-forms-buttonselect--basic","core-forms-buttonselect--controlled","core-forms-buttonselect--controlled-button-selection","core-forms-buttonselect--default-button-selected-value","core-forms-buttonselect--default-select-selected-value","core-forms-buttonselect--disabled","core-forms-buttonselect--exclude-from-tab-order","core-forms-buttonselect--items-without-icons","core-forms-buttonselect--long-text-labels","core-forms-buttonselect--many-items","core-forms-buttonselect--variants","core-forms-buttonselect--with-action-behaviour","core-forms-buttonselect--with-button-disabled-key","core-forms-buttonselect--with-callbacks","core-forms-buttonselect--with-default-open","core-forms-buttonselect--with-disabled-keys","core-forms-buttonselect--with-disabled-keys-and-default-selected","core-forms-buttonselect--with-hidden-label","core-forms-buttonselect--with-individual-button-behaviour","core-forms-buttonselect--with-multiple-disabled-keys","core-forms-buttonselect--with-validation-error","core-forms-buttonselect--without-tooltip","core-forms-calendar--default","core-forms-calendar--disabled","core-forms-calendar--extra-small","core-forms-calendar--extra-small-no-title","core-forms-calendar--fixed-weeks","core-forms-calendar--international-calendar","core-forms-calendar--read-only","core-forms-calendar--select-month","core-forms-calendar--select-month-and-year","core-forms-calendar--select-month-and-year-extra-small","core-forms-calendar--select-month-and-year-with-title","core-forms-calendar--select-month-extra-small","core-forms-calendar--select-month-with-title","core-forms-calendar--unavailable-dates","core-forms-calendar--with-default-value","core-forms-calendar--with-min-max","core-forms-calendar--with-title","core-forms-checkbox--checked","core-forms-checkbox--indeterminate","core-forms-checkbox--primary","core-forms-checkbox--with-error","core-forms-checkbox--with-label-at-end","core-forms-checkbox--with-label-at-start","core-forms-colorinput--basic","core-forms-colorinput--color-presets-only","core-forms-colorinput--controlled","core-forms-colorinput--disabled","core-forms-colorinput--indeterminate","core-forms-colorinput--lazy-picker","core-forms-colorinput--lazy-picker-mobile","core-forms-colorinput--with-alpha","core-forms-colorinput--with-controlled-open","core-forms-colorinput--with-custom-trigger","core-forms-colorinput--with-default-open","core-forms-colorinput--with-default-value","core-forms-colorinput--with-label","core-forms-colorinput--with-label-at-start","core-forms-colorinput--with-removal","core-forms-colorinput--without-alpha","core-forms-colorinput--without-color-label","core-forms-colorinput--without-color-presets","core-forms-colorinput-iconcolorinput--compact","core-forms-colorinput-iconcolorinput--compact-disabled","core-forms-colorinput-iconcolorinput--compact-indeterminate","core-forms-colorinput-iconcolorinput--disabled","core-forms-colorinput-iconcolorinput--indeterminate","core-forms-colorinput-iconcolorinput--standard","core-forms-colorinput-iconcolorinput--without-tooltip","core-forms-colorswatchpicker--basic","core-forms-colorswatchpicker--controlled","core-forms-colorswatchpicker--default-value","core-forms-colorswatchpicker--disabled","core-forms-colorswatchpicker--with-icon","core-forms-colorswatchpicker--with-label","core-forms-colorswatchpicker--with-label-at-start","core-forms-combobox--basic","core-forms-combobox--disabled","core-forms-combobox--dynamic-collections","core-forms-combobox--ghost-variant","core-forms-combobox--items-with-icon","core-forms-combobox--read-only","core-forms-combobox--variants","core-forms-combobox--with-custom-filter","core-forms-combobox--with-custom-number-value","core-forms-combobox--with-custom-value","core-forms-combobox--with-description","core-forms-combobox--with-error-message","core-forms-combobox--with-focus-menu-trigger","core-forms-combobox--with-label-at-start","core-forms-combobox--with-manual-menu-trigger","core-forms-combobox--with-min-max-value","core-forms-combobox--with-render-option","core-forms-combobox--with-tooltip","core-forms-combobox--with-warning-message","core-forms-datefield--basic","core-forms-datefield--controlled","core-forms-datefield--default-value","core-forms-datefield--different-granularity","core-forms-datefield--disabled","core-forms-datefield--ghost-variant","core-forms-datefield--html-forms","core-forms-datefield--placeholder-value","core-forms-datefield--read-only","core-forms-datefield--variants","core-forms-datefield--with-calendar-icon","core-forms-datefield--with-calendar-picker","core-forms-datefield--with-calendar-picker-and-default-value","core-forms-datefield--with-calendar-picker-and-min-max","core-forms-datefield--with-calendar-picker-disabled","core-forms-datefield--with-calendar-picker-error","core-forms-datefield--with-calendar-picker-ghost","core-forms-datefield--with-calendar-picker-read-only","core-forms-datefield--with-error-message","core-forms-datefield--with-error-message-only","core-forms-datefield--with-label","core-forms-datefield--with-label-at-start","core-forms-datefield--with-min-and-max-value","core-forms-datefield--with-warning-message","core-forms-fileinput--basic","core-forms-fileinput--custom-labels","core-forms-fileinput--directory","core-forms-fileinput--disabled","core-forms-fileinput--label-position-start","core-forms-fileinput--multiple","core-forms-fileinput--variants","core-forms-fileinput--with-error","core-forms-fileinput--with-warning","core-forms-fileinput--without-label","core-forms-fileuploader--button-variant","core-forms-fileuploader--default","core-forms-fileuploader--disabled","core-forms-fileuploader--error-dropzone","core-forms-fileuploader--inline","core-forms-fileuploader--no-label","core-forms-fileuploader--variants","core-forms-imagedropzone--basic","core-forms-imagedropzone--controlled","core-forms-imagedropzone--disabled","core-forms-imagedropzone--variants","core-forms-imagedropzone--with-default-image","core-forms-imagedropzone--with-file-size-limit","core-forms-imagedropzone--with-file-type-restriction","core-forms-numberinput--basic","core-forms-numberinput--controlled","core-forms-numberinput--disabled","core-forms-numberinput--ghost-variant","core-forms-numberinput--read-only","core-forms-numberinput--variants","core-forms-numberinput--with-custom-step","core-forms-numberinput--with-description","core-forms-numberinput--with-error","core-forms-numberinput--with-error-and-error-message","core-forms-numberinput--with-label","core-forms-numberinput--with-label-at-start","core-forms-numberinput--with-min-and-max","core-forms-numberinput--without-stepper","core-forms-pagination--controlled","core-forms-pagination--disabled","core-forms-pagination--primary","core-forms-pagination--read-only","core-forms-pagination--variants","core-forms-pagination--with-custom-messages","core-forms-pagination--with-default-value","core-forms-pagination--with-large-numbers","core-forms-pagination--with-step","core-forms-pagination--without-actions","core-forms-radiogroup--basic","core-forms-radiogroup--controlled","core-forms-radiogroup--custom-render-option","core-forms-radiogroup--default-value","core-forms-radiogroup--disabled","core-forms-radiogroup--disabled-values","core-forms-radiogroup--horizontal","core-forms-radiogroup--read-only","core-forms-radiogroup--with-group-label","core-forms-radiogroup--with-group-label-at-start","core-forms-radiogroup--with-option-description","core-forms-radiogroup--with-option-label-at-start","core-forms-rangecalendar--default","core-forms-rangecalendar--disabled","core-forms-rangecalendar--extra-small","core-forms-rangecalendar--extra-small-no-title","core-forms-rangecalendar--fixed-weeks","core-forms-rangecalendar--international-calendar","core-forms-rangecalendar--read-only","core-forms-rangecalendar--select-month","core-forms-rangecalendar--select-month-and-year","core-forms-rangecalendar--select-month-and-year-with-title","core-forms-rangecalendar--select-month-with-title","core-forms-rangecalendar--unavailable-dates","core-forms-rangecalendar--with-default-value","core-forms-rangecalendar--with-min-max","core-forms-rangecalendar--with-title","core-forms-searchinput--basic","core-forms-searchinput--clear-button-focusable","core-forms-searchinput--disabled","core-forms-searchinput--variants","core-forms-select--basic","core-forms-select--controlled","core-forms-select--empty-items","core-forms-select--ghost","core-forms-select--long-labels","core-forms-select--long-list","core-forms-select--read-only","core-forms-select--scrollable","core-forms-select--with-autocomplete","core-forms-select--with-controlled-open","core-forms-select--with-custom-trigger","core-forms-select--with-default-open","core-forms-select--with-default-selected-item","core-forms-select--with-description","core-forms-select--with-disabled","core-forms-select--with-disabled-items","core-forms-select--with-error","core-forms-select--with-error-and-error-message","core-forms-select--with-label","core-forms-select--with-label-at-start","core-forms-select--with-section-headers","core-forms-select--with-sections","core-forms-select--with-virtualized-section-headers","core-forms-select--with-warning","core-forms-select--with-warning-and-warning-message","core-forms-select-iconselect--basic","core-forms-select-iconselect--disabled","core-forms-select-iconselect--read-only","core-forms-select-iconselect--with-default-open","core-forms-select-iconselect--with-error","core-forms-select-iconselect--with-warning","core-forms-select-iconselect--without-icon","core-forms-select-iconselect--without-tooltip","core-forms-select-multiselect--basic","core-forms-select-multiselect--controlled","core-forms-select-multiselect--ghost","core-forms-select-multiselect--hide-clear","core-forms-select-multiselect--hide-select-all","core-forms-select-multiselect--hide-select-all-and-clear","core-forms-select-multiselect--long-labels-as-tags","core-forms-select-multiselect--long-list","core-forms-select-multiselect--max-count-1","core-forms-select-multiselect--max-count-3","core-forms-select-multiselect--read-only","core-forms-select-multiselect--read-only-with-tags-open","core-forms-select-multiselect--scrollable","core-forms-select-multiselect--with-autocomplete","core-forms-select-multiselect--with-controlled-open","core-forms-select-multiselect--with-custom-trigger","core-forms-select-multiselect--with-default-open","core-forms-select-multiselect--with-default-selected-item","core-forms-select-multiselect--with-description","core-forms-select-multiselect--with-disabled","core-forms-select-multiselect--with-disabled-items","core-forms-select-multiselect--with-error","core-forms-select-multiselect--with-error-and-error-message","core-forms-select-multiselect--with-error-and-tags","core-forms-select-multiselect--with-label","core-forms-select-multiselect--with-label-at-start","core-forms-select-multiselect--with-sections","core-forms-select-multiselect--with-warning","core-forms-select-multiselect--with-warning-and-warning-message","core-forms-slider--basic","core-forms-slider--controlled","core-forms-slider--disabled","core-forms-slider--read-only","core-forms-slider--read-only-with-number-input","core-forms-slider--with-label","core-forms-slider--with-label-and-number-input","core-forms-slider--with-min-and-max","core-forms-slider--with-number-input","core-forms-slider--with-step","core-forms-slider-iconslider--basic","core-forms-slider-iconslider--disabled","core-forms-slider-iconslider--with-number-input","core-forms-slider-iconslider--without-tooltip","core-forms-switch--basic","core-forms-switch--disabled","core-forms-switch--selected","core-forms-switch--selected-disabled","core-forms-switch--with-label","core-forms-switch--with-label-and-status","core-forms-switch--with-label-in-left-and-status","core-forms-taggedpagination--basic","core-forms-taggedpagination--disabled","core-forms-taggedpagination--read-only","core-forms-taggedpagination--variant","core-forms-taggedpagination--with-page-label","core-forms-textinput--basic","core-forms-textinput--controlled","core-forms-textinput--disabled","core-forms-textinput--ghost-variant","core-forms-textinput--html-forms","core-forms-textinput--multiline","core-forms-textinput--multiline-variants","core-forms-textinput--multiline-with-rows","core-forms-textinput--read-only","core-forms-textinput--variants","core-forms-textinput--with-description","core-forms-textinput--with-error-message","core-forms-textinput--with-label","core-forms-textinput--with-label-at-start","core-forms-textinput--with-warning-message","core-forms-timefield--basic","core-forms-timefield--controlled","core-forms-timefield--default-value","core-forms-timefield--disabled","core-forms-timefield--ghost-variant","core-forms-timefield--html-forms","core-forms-timefield--placeholder-value","core-forms-timefield--read-only","core-forms-timefield--variants","core-forms-timefield--with-error-message","core-forms-timefield--with-error-message-only","core-forms-timefield--with-label","core-forms-timefield--with-label-at-start","core-forms-timefield--with-min-and-max-value","core-forms-timefield--with-warning-message","core-media-audioplayer--basic","core-media-audioplayer--small","core-miscellaneous-editor--basic","core-miscellaneous-editor--headless-custom","core-miscellaneous-editor-plain--auto-focus","core-miscellaneous-editor-plain--auto-focus-at-end","core-miscellaneous-editor-plain--auto-focus-at-start","core-miscellaneous-editor-plain--clear-on-cancel","core-miscellaneous-editor-plain--clear-on-save","core-miscellaneous-editor-plain--controlled","core-miscellaneous-editor-plain--custom-submit-icon","core-miscellaneous-editor-plain--default-save-disabled","core-miscellaneous-editor-plain--disabled","core-miscellaneous-editor-plain--minimal","core-miscellaneous-editor-plain--minimal-disabled","core-miscellaneous-editor-plain--minimal-multiline","core-miscellaneous-editor-plain--minimal-save-disabled","core-miscellaneous-editor-plain--not-inline","core-miscellaneous-editor-plain--save-on-enter","core-miscellaneous-editor-plain--variants","core-miscellaneous-editor-plain--with-cancel","core-miscellaneous-editor-plain--with-dynamic-caret-position","core-miscellaneous-editor-rich-text--auto-focus","core-miscellaneous-editor-rich-text--auto-focus-at-end","core-miscellaneous-editor-rich-text--clear-on-cancel","core-miscellaneous-editor-rich-text--clear-on-save","core-miscellaneous-editor-rich-text--controlled","core-miscellaneous-editor-rich-text--default","core-miscellaneous-editor-rich-text--disabled","core-miscellaneous-editor-rich-text--long-content","core-miscellaneous-editor-rich-text--mentions","core-miscellaneous-editor-rich-text--mentions-max-suggestions","core-miscellaneous-editor-rich-text--not-inline","core-miscellaneous-editor-rich-text--save-disabled","core-miscellaneous-editor-rich-text--save-on-enter","core-miscellaneous-editor-rich-text--variants","core-miscellaneous-editor-rich-text--with-cancel","core-miscellaneous-editor-rich-text--with-custom-footer-buttons","core-miscellaneous-editor-rich-text--with-placeholder","core-miscellaneous-freehandcanvas--basic","core-miscellaneous-freehandcanvas--clear-button","core-miscellaneous-freehandcanvas--controlled","core-miscellaneous-freehandcanvas--default-value","core-miscellaneous-freehandcanvas--disabled","core-miscellaneous-freehandcanvas--history-enabled","core-miscellaneous-freehandcanvas--label","core-miscellaneous-freehandcanvas--streamlining","core-miscellaneous-icon--basic","core-miscellaneous-toolbar--basic","core-miscellaneous-toolbar--collapsible","core-miscellaneous-toolbar--vertical","core-miscellaneous-toolbar--with-inputs","core-miscellaneous-toolbar--with-over-flow","core-miscellaneous-toolbar--with-tabbing-within","core-miscellaneous-toolbar--with-tooltip","core-navigation-accordion--basic","core-navigation-accordion--controlled","core-navigation-accordion--default-expanded-keys","core-navigation-accordion--disabled","core-navigation-accordion--single-expansion","core-navigation-accordion-accordionitem--force-mount","core-navigation-accordion-accordionitem--show-actions-on-trigger-only","core-navigation-accordion-accordionitem--with-buttons","core-navigation-accordion-accordionitem--with-sub-labels","core-navigation-accordion-accordionitem--with-tabbable-content","core-navigation-disclosure--basic","core-navigation-disclosure--controlled","core-navigation-disclosure--truncated-title","core-navigation-disclosure--variants","core-navigation-disclosure--with-custom-icon","core-navigation-disclosure--with-interactive-content","core-navigation-disclosure--with-long-content","core-navigation-disclosure--without-description","core-navigation-link--basic","core-navigation-link--client-side-action","core-navigation-link--variants","core-navigation-stepper--all-complete","core-navigation-stepper--all-states","core-navigation-stepper--condensed","core-navigation-stepper--controlled","core-navigation-stepper--default","core-navigation-stepper--expanded-without-descriptions","core-navigation-stepper--frontier-ahead-of-selection","core-navigation-stepper--indicator-only","core-navigation-stepper--indicator-only-expanded","core-navigation-stepper--is-disabled","core-navigation-stepper--long-title-and-description","core-navigation-stepper--mixed-indicator-and-titled-items","core-navigation-stepper--per-item-aria-label-overrides-title","core-navigation-stepper--single-item","core-navigation-stepper--size-small-condensed","core-navigation-stepper--size-small-expanded","core-navigation-stepper--two-steps","core-navigation-stepper--with-disabled-step","core-navigation-tabs--basic","core-navigation-tabs--controlled","core-navigation-tabs--ghost","core-navigation-tabs--with-action-button","core-navigation-tabs--with-close-button","core-navigation-tabs--with-default-selected","core-navigation-tabs--with-disabled","core-navigation-tabs--with-focusable-content","core-navigation-tabs--with-specific-disabled","core-navigation-tabs-tabitem--with-icon","core-overlays-alertdialog--auto-focus-cancel-button","core-overlays-alertdialog--basic","core-overlays-alertdialog--custom-focused-button","core-overlays-alertdialog--default-open","core-overlays-alertdialog--long-content","core-overlays-alertdialog--only-cancel-button","core-overlays-alertdialog--only-primary-action","core-overlays-alertdialog--primary-action-disabled","core-overlays-alertdialog--separate-close-handler","core-overlays-alertdialog--with-text-input","core-overlays-alertdialog--with-title-only","core-overlays-alertdialog--without-close-button","core-overlays-alertdialog--without-icon","core-overlays-alertdialog--without-message-and-actions","core-overlays-dialog--basic","core-overlays-dialog--default-open","core-overlays-dialog--different-sizes","core-overlays-dialog--ghost","core-overlays-drawer--basic","core-overlays-drawer--with-action","core-overlays-inlinetoolbar--basic","core-overlays-inlinetoolbar--controlled","core-overlays-inlinetoolbar--disabled","core-overlays-inlinetoolbar--disabled-keys","core-overlays-inlinetoolbar--with-interactive-element","core-overlays-inlinetoolbar--with-scroll","core-overlays-modal--basic","core-overlays-modal--controlled","core-overlays-modal--default-open","core-overlays-modal-modalcontent--disabled-animation","core-overlays-modal-modalcontent--drawer-mobile","core-overlays-modal-modalcontent--drawer-mobile-with-nested-popover","core-overlays-modal-modalcontent--form-controls","core-overlays-modal-modalcontent--long-content","core-overlays-modal-modalcontent--not-dismissable","core-overlays-modal-modalcontent--uncontrolled-interaction-outside","core-overlays-modal-modalcontent--with-disabled-focus-management","core-overlays-modal-modalcontent--with-inert","core-overlays-popover--basic","core-overlays-popover--event-leak-fix","core-overlays-popover--with-arrow","core-overlays-popover--with-boundary-element","core-overlays-popover--with-custom-target","core-overlays-popover--with-dynamic-trigger-width","core-overlays-popover--with-no-boundary","core-overlays-popover--with-scrollable-content","core-overlays-popover--with-scrollable-content-non-modal","core-overlays-popover--with-scrollable-viewport","core-overlays-popover--with-tooltip","core-overlays-popover-popovercontent--basic","core-overlays-popover-popovercontent--contained-focus","core-overlays-popover-popovercontent--default-open-with-arrow","core-overlays-popover-popovercontent--disable-animation","core-overlays-popover-popovercontent--manual-repositioning","core-overlays-popover-popovercontent--nested-scrollable-containers","core-overlays-popover-popovercontent--scroll-repositioning","core-overlays-popover-popovercontent--with-boundary-axis","core-overlays-popover-popovercontent--with-horizontal-boundary-behavior","core-overlays-popover-popovertrigger--basic","core-overlays-popover-popovertrigger--function-children","core-overlays-popover-popovertrigger--with-updated-position","core-overlays-tooltip--basic","core-overlays-tooltip--controlled-open","core-overlays-tooltip--disabled","core-overlays-tooltip--focus-trigger","core-overlays-tooltip--no-text","core-overlays-tooltip--placement","core-overlays-tooltip--variants","core-overlays-tooltip--variants-size","core-overlays-tooltip--with-cross-offset","core-overlays-tooltip--with-focusable","core-overlays-tooltip--with-offset","core-overlays-tooltip--with-on-open-change","core-status-inlinealert--basic","core-status-inlinealert--compact","core-status-inlinealert--compact-with-action","core-status-inlinealert--compact-with-action-and-close","core-status-inlinealert--multi-line","core-status-inlinealert--multi-line-with-action","core-status-inlinealert--multi-line-with-action-and-close","core-status-inlinealert--sizes","core-status-inlinealert--variants","core-status-inlinealert--with-action","core-status-inlinealert--with-action-and-close","core-status-progressbar--basic","core-status-progressbar--variants","core-status-progressbar--with-custom-number-formatter","core-status-progressbar--with-custom-value-label","core-status-progressbar--with-error","core-status-progressbar--with-max-value","core-status-progressbar--with-min-and-max-value","core-status-progressbar--with-min-value","core-status-progressbar--with-no-description","core-status-progressbar--with-no-label","core-status-progressbar--with-show-value","core-status-progressspinner--error","core-status-progressspinner--primary","core-status-progressspinner--success","core-status-progressspinner--variants","core-status-progressspinner--without-label","core-status-toast--basic","core-status-toast--timeout","core-status-toast--variants-with-action","core-status-toast--variants-without-action","core-status-toast--with-action","core-utilities-actionable--basic","core-utilities-actionable--disabled","core-utilities-actionable--with-complex-content","core-utilities-actionable--with-div","core-utilities-actionable--with-dynamic-button-styling","core-utilities-actionable--with-dynamic-child-styling","core-utilities-box--basic","core-utilities-box--element-type","core-utilities-box--flex-layout","core-utilities-box--media-queries","core-utilities-box--nested-boxes","core-utilities-dateformat--basic","core-utilities-dateformat--time-only","core-utilities-dateformat--time-only-with-time-zone","core-utilities-dateformat--time-zone-24-hour","core-utilities-dateformat--with-date-and-time","core-utilities-deviceprovider--always-desktop","core-utilities-deviceprovider--always-mobile","core-utilities-deviceprovider--basic","core-utilities-deviceprovider--custom-breakpoints","core-utilities-frameprovider--always-contained","core-utilities-frameprovider--basic","core-utilities-frameprovider--custom-portal-container","core-utilities-frameprovider--inside-shadow-root","core-utilities-frameprovider--nested-containers","core-utilities-frameprovider--never-contained","core-utilities-frameprovider--popover-with-frame-boundary","core-utilities-frameprovider--portal-container-outside-container","core-utilities-frameprovider--with-interactive-elements-outside-of-container","core-utilities-group--basic","core-utilities-i18nprovider--string-format","core-utilities-messageformat--basic","core-utilities-numberformat--basic","core-utilities-numberformat--currency","core-utilities-numberformat--currency-with-fraction-digits","core-utilities-numberformat--currency-with-fraction-digits-and-currency-display","core-utilities-numberformat--percent","core-utilities-numberformat--percent-with-fraction-digits","core-utilities-panel--basic","core-utilities-panel--collapsible","core-utilities-panel--conditional","core-utilities-panel--controlled","core-utilities-panel--disabled-handle","core-utilities-panel--max-size","core-utilities-panel--multiple","core-utilities-panel--nested","core-utilities-panel--persistent","core-utilities-panel--vertical","core-utilities-portal--basic","core-utilities-themeprovider--basic","json-render-examples--dashboard","json-render-examples--data-table","json-render-examples--login-form","json-render-examples--settings-panel"];var h={version:"3.4.0"};var b=`
|
|
39524
|
+
* [Theme documentation](/docs/theming--docs) - Learn about Baseline UI's theming system`};var m={"8":["CaretDownIcon","CaretLeftIcon","CaretRightIcon","CaretUpIcon","ChevronRightFilledIcon","ChevronRightIcon","EllipseIcon","MinusIcon","PlusIcon","XIcon"],"12":["CaretDownIcon","CaretLeftIcon","CaretRightIcon","CaretUpIcon","CheckmarkIcon","DragIndicatorIcon","DragIndicatorVerticalIcon","EditIcon","EllipseIcon","EnterKeyIcon","LockFilledIcon","LockIcon","MinusIcon","MoreVIcon","MoreIcon","PlaceholderIcon","PlusIcon","SearchIcon","SizeIcon","TrashIcon","XIcon","ZoomIcon"],"16":["AlignBottomIcon","AlignMiddleIcon","AlignTopIcon","AnonymousIcon","ArrowDiagonalTopLeftBottomRightIcon","ArrowDownCircleFilledIcon","ArrowDownIcon","ArrowIcon","ArrowLeftRightIcon","ArrowRightIcon","ArrowUpArrowDownIcon","ArrowUpIcon","AtIcon","AttachmentsIcon","AvatarIcon","BoldIcon","BookmarkFilledIcon","BookmarkIcon","BulletListIcon","CalendarIcon","CaretLeftIcon","CaretRightIcon","CheckmarkCircleFilledIcon","CheckmarkCircleIcon","CheckmarkIcon","CircleFilledIcon","ClockIcon","CopyIcon","CustomizeIcon","DocumentEditIcon","DownloadIcon","DuplicateIcon","EditIcon","ElipseAreaIcon","EllipseCloudyIcon","EllipseDashedIcon","EllipseIcon","EmbedIcon","EmojiSmileIcon","ErrorAltCircleFilledIcon","ErrorCircleFilledIcon","ErrorCircleIcon","ExpandIcon","FilterAltIcon","FolderIcon","FormButtonIcon","FormChoiceIcon","FormComboboxIcon","FormDateIcon","FormListboxIcon","FormRadioButtonIcon","FormSignatureIcon","FormTextFieldIcon","FullScreenIcon","HelpCircleIcon","HelpIcon","HereIcon","HideIcon","HighlightTextAltIcon","HighlightTextIcon","HorizontalScrollIcon","ImageIcon","InfoCircleFilledIcon","InsertIcon","ItalicIcon","LightBulbIcon","LineIcon","LinkIcon","ListIcon","LockIcon","MagicIcon","MeasureIcon","MinusIcon","MoreIcon","MoreVerticalIcon","NoteArrowRightIcon","NoteCheckIcon","NoteCircleIcon","NoteCloudIcon","NoteCrossIcon","NoteHelpIcon","NoteInsetIcon","NoteKeyIcon","NoteNewParagraphAltIcon","NoteNewParagraphIcon","NoteNoteIcon","NotePointerRightIcon","NoteSpeechBubbleIcon","NoteStarIcon","NumberedListIcon","OpenIcon","PageFittingFillIcon","PageFittingFitIcon","PageHorizontalScrollIcon","PageLayoutDoubleIcon","PageLayoutSingleIcon","PageVerticalScrollIcon","PauseIcon","PenHighlighterIcon","PenIcon","PerimeterIcon","PlaceholderIcon","PlayIcon","PlusIcon","PolygonAreaIcon","PolygonCloudyIcon","PolygonDashedIcon","PolygonIcon","PolylineIcon","ReadOnlyIcon","RectangleAreaIcon","RectangleCloudyIcon","RectangleDashedIcon","RectangleIcon","RedoIcon","RemoveFormattingIcon","ReorderIcon","RotateClockwiseIcon","RotateCounterClockwiseIcon","RulerIcon","SearchIcon","SettingsIcon","ShowIcon","SlashCommandsIcon","SoundRecordIcon","StampIcon","StarFilledIcon","StarIcon","StrikeoutTextAltIcon","TableCellIcon","TableColumnIcon","TableHeaderIcon","TableIcon","TableRowIcon","TextAlignCenterIcon","TextAlignJustifyIcon","TextAlignLeftIcon","TextAlignRightIcon","TextCalloutIcon","TextDecreaseIndentIcon","TextIcon","TextIncreaseIndentIcon","TextMarkIcon","ThumbnailsIcon","ThumbsDownIcon","ThumbsUpIcon","TrashIcon","TypeTextIcon","UnderlineIcon","UndoIcon","UnlockIcon","VerticalScrollIcon","VideoIcon","WarningFilledIcon","WarningIcon","WindowedIcon","WorkflowIcon","XCircleFilledIcon","XIcon"],"20":["AddPageIcon","AnonymousIcon","ArrowLeftIcon","ArrowRightIcon","ArrowUpCircleFilledIcon","AtIcon","AvatarFilledIcon","BoldIcon","CalloutIcon","CaretDownIcon","CaretLeftIcon","CaretRightIcon","CaretUpIcon","CheckCircleFilledIcon","CheckmarkCircleIcon","CheckmarkIcon","ClockIcon","CollapseIcon","CommentIcon","CopyIcon","CutIcon","DistanceIcon","DownloadIcon","DuplicateIcon","EditIcon","EllipseIcon","EmojiSmileIcon","ErrorAltCircleFilledIcon","ErrorAlternativeCircleIcon","ErrorCircleFilledIcon","ErrorCircleIcon","ExpandIcon","FormDateIcon","FormSignatureIcon","FormTextFieldIcon","HelpCircleIcon","HighlightTextIcon","HomeIcon","ImageIcon","InfoCircleFilledIcon","InfoCircleIcon","ItalicIcon","LinkIcon","ListIcon","LockIcon","MagicIcon","MinusIcon","MoreIcon","MoreVerticalIcon","MoveIcon","NoteArrowRightIcon","NoteCheckIcon","NoteCircleIcon","NoteCrossIcon","NoteHelpIcon","NoteInsetIcon","NoteKeyIcon","NoteNewParagraphAltIcon","NoteNewParagraphIcon","NoteNoteIcon","NotePointerRightIcon","NoteSpeechBubbleIcon","NoteStarIcon","OpenIcon","PageMoveLeftIcon","PageMoveRightIcon","PagesInsertIcon","PasteIcon","PipetteIcon","PlusIcon","PrintIcon","RotateClockwiseIcon","SearchIcon","SettingsIcon","ShapeIcon","ShareIcon","SoundIcon","SoundRecordIcon","StarFilledIcon","StarIcon","StyleIcon","TextAlignCenterIcon","TextAlignJustifyIcon","TextAlignLeftIcon","TextAlignRightIcon","TextIcon","ThumbnailsIcon","ThumbsDownIcon","ThumbsUpIcon","TrashIcon","TypeTextIcon","UnderlineIcon","UploadIcon","WarningFilledIcon","WarningIcon","XCircleFilledIcon","XCircleIcon","XIcon"],"24":["AddNoteCloudIcon","AddNoteIcon","AddTextSerifIcon","AiIcon","AirplaneIcon","AlignBottomIcon","AlignHorizontalCenterIcon","AlignMiddleIcon","AlignTopIcon","AnonymousIcon","ArrowDownIcon","ArrowIcon","ArrowLeftIcon","ArrowRightIcon","ArrowUpIcon","AtIcon","AttachmentIcon","AvatarFilledIcon","AvatarIcon","BlendModeIcon","BoldIcon","BookmarkFilledIcon","BookmarkIcon","BorderColorIcon","BottomBorderIcon","BulletListIcon","CalibrateIcon","CaptureAddIcon","CaretDownIcon","CaretIcon","CaretLeftIcon","CaretRightIcon","CaretUpIcon","CheckmarkCircleFilledIcon","CheckmarkCircleIcon","CheckmarkIcon","ChevronListIcon","ClockIcon","CloudyBorderIcon","CollapseIcon","ColorPaletteIcon","ColorSwatchIcon","CommentIcon","CommentInSidebarIcon","CommentOnPageIcon","CompareDocumentsIcon","CopyIcon","CopyPageIcon","CropIcon","CustomizeIcon","CutIcon","DateModifiedIcon","DatePlusIcon","DebugIcon","DocumentArrowDownCircleIcon","DocumentArrowDownIcon","DocumentArrowRightIcon","DocumentFilledIcon","DocumentLockIcon","DocumentPdfIcon","DownloadIcon","DragIndicatorIcon","DragIndicatorVerticalIcon","DuplicateIcon","EditAnnotationsIcon","EditContentIcon","EditDocumentIcon","EditIcon","EditThumbnailsIcon","EllipseAreaIcon","EllipseCloudyIcon","EllipseDashedIcon","EllipseIcon","EmbedIcon","EmojiSmileIcon","EndCapArrowFilledIcon","EndCapArrowIcon","EndCapChevronFilledIcon","EndCapChevronIcon","EndCapCircleIcon","EndCapDiamondIcon","EndCapNoneIcon","EndCapSlantedIcon","EndCapSquareIcon","EndCapStraightIcon","EraserIcon","ErrorAltCircleFilledIcon","ErrorAltIcon","ErrorCircleFilledIcon","ErrorCircleIcon","ExpandIcon","ExpandVerticalIcon","FillColorIcon","FilterIcon","FitToHeightIcon","FivePagesHorizontalFilledIcon","FivePagesVerticalFilledIcon","FolderAddIcon","FolderIcon","FontListIcon","FontSizeIcon","FormButtonIcon","FormChoiceIcon","FormComboboxIcon","FormDateIcon","FormListboxIcon","FormPageIcon","FormRadioButtonIcon","FormSignatureIcon","FormTextFieldIcon","FormTwoRadioButtonsIcon","FourPagesGridFilledIcon","FourPagesHorizontalFilledIcon","FourPagesStackedFilledIcon","FourPagesVerticalFilledIcon","GroupIcon","HamburgerMenuIcon","HandIcon","HeartIcon","HideIcon","HideRevealIcon","HighlightTextIcon","HomeIcon","HorizontalScollIcon","ImageIcon","InfoCircleFilledIcon","InfoCircleIcon","InitialsIcon","InnerHorizontalBorderIcon","InnerVerticalBorderIcon","InsertIcon","ItalicIcon","LayerBottomIcon","LayerDownIcon","LayerTopIcon","LayerUpIcon","LayersIcon","LeftBindingIcon","LeftBorderIcon","LineCapsIcon","LineIcon","LineSpacingIcon","LineStyleCloudyIcon","LineStyleDashedDoubleDashIcon","LineStyleDashedDoubleGapIcon","LineStyleDashedQuadrupleDashIcon","LineStyleDashedSingleGapIcon","LineStyleIcon","LineStyleSolidIcon","LineWidthIcon","LinkIcon","LockFilledIcon","LockIcon","MagicIcon","MagicPenIcon","MailIcon","MarkupIcon","MarqueeZoomIcon","MeasureIcon","MergeIcon","MessageCloudIcon","MinusIcon","MoonIcon","MoreCircleIcon","MoreIcon","MoreVerticalIcon","MoveAllDirectionsIcon","MoveLeftIcon","MoveLeftRightIcon","MoveRightIcon","MultiplePagesIcon","NonEditableIcon","NoteArrowRightIcon","NoteCheckIcon","NoteCircleIcon","NoteCloudIcon","NoteCrossIcon","NoteHelpIcon","NoteIcon","NoteInsetIcon","NoteKeyIcon","NoteNewParagraphAltIcon","NoteNewParagraphIcon","NoteNoteIcon","NotePointerRightIcon","NoteSpeechBubbleIcon","NoteStarIcon","OcrIcon","OpacityIcon","PageAddIcon","PageCurlIcon","PageDuplicateIcon","PageFittingFillIcon","PageFittingFitIcon","PageHorizontalScrollIcon","PageLandscapeIcon","PageLayoutDoubleIcon","PageLayoutSingleIcon","PageMoveLeftIcon","PageMoveRightIcon","PageNumberCircleIcon","PageNumberIcon","PagePortraitIcon","PageRemoveIcon","PageVerticalScrollIcon","PagesInsertAltIcon","PagesInsertIcon","PagesNewFromSelectionAltIcon","PagesNewFromSelectionIcon","PagesSelectAllIcon","PagesSelectNoneIcon","PasteBoardIcon","PastePageIcon","PauseIcon","PenHighlighterIcon","PenIcon","PerimeterIcon","PinDropFilledIcon","PinDropIcon","PipetteIcon","PlayIcon","PlusCircleFilledIcon","PlusCircleIcon","PlusIcon","PointerIcon","PolygonAreaIcon","PolygonCloudyIcon","PolygonDashedIcon","PolygonIcon","PolylineIcon","PrecisionIcon","PrintIcon","PrivateModeIcon","PushPinIcon","QuestionmarkCircleIcon","ReaderViewIcon","RectangleAreaIcon","RectangleCloudyIcon","RectangleDashedIcon","RectangleIcon","RedactIcon","RedactRectangleIcon","RedactTextHighlighterIcon","RedactionTextRepeatingIcon","RedactionTextSingleIcon","RedoAllIcon","RedoIcon","RegexIcon","ReplaceIcon","RightBindingIcon","RightBorderIcon","RotateClockwiseIcon","RotateCounterClockwiseIcon","RotateObjectClockwiseIcon","RotateObjectCounterClockwiseIcon","RulerIcon","ScaleIcon","SearchCircleIcon","SearchIcon","SearchSelectionIcon","SelectAllIcon","SelectionToolIcon","SettingsIcon","ShapesIcon","ShareAltIcon","ShareIcon","ShieldAddIcon","ShieldCheckmarkIcon","ShieldWarningIcon","ShieldXIcon","ShowIcon","SidebarIcon","SignOutIcon","SignatureDigitalIcon","SignatureIcon","SinglePageFilledIcon","SoundIcon","SquigglyTextIcon","StampAddIcon","StampIcon","StarFilledIcon","StarIcon","StartCapArrowFilledIcon","StartCapArrowIcon","StartCapChevronFilledIcon","StartCapChevronIcon","StartCapCircleIcon","StartCapDiamondIcon","StartCapNoneIcon","StartCapSlantedIcon","StartCapSquareIcon","StartCapStraightIcon","StrikeoutTextIcon","StyleFilledIcon","StyleIcon","StylusFilledIcon","StylusIcon","SunIcon","TableCellIcon","TextAlignCenterIcon","TextAlignJustifyIcon","TextAlignLeftIcon","TextAlignRightIcon","TextCalloutIcon","TextColorIcon","TextIcon","TextPropertiesHideIcon","TextPropertiesShowIcon","TextSerifIcon","TextSmallerIcon","ThreePagesHorizontalFilledIcon","ThreePagesStackedFilledIcon","ThreePagesVerticalFilledIcon","ThumbnailsIcon","ThumbsDownIcon","ThumbsUpIcon","TopBorderIcon","TrashIcon","TwoPagesHorizontalFilledIcon","TwoPagesVerticalFilledIcon","TypeTextIcon","UnderlineIcon","UnderlineTextIcon","UndoAllIcon","UndoIcon","UndoRedoIcon","UngroupIcon","UnlockIcon","UploadIcon","UserIcon","VerticalScrollIcon","VideoIcon","WarningFilledIcon","WarningIcon","WidgetIcon","WorkflowIcon","XCircleFilledIcon","XCircleIcon","XIcon","ZoomInIcon","ZoomOutIcon"],"36":["ArrowRight","Check","Circle","Cross","Help","Inset","Key","NewParagraphAlt","NewParagraph","Note","PointerRight","SpeechBubble","Star"]};var r=["charts-barchart--basic","charts-barchart--custom-colors","charts-barchart--formatted","charts-barchart--hidden-axes","charts-barchart--many-series","charts-barchart--mixed-stacking","charts-barchart--single-series","charts-barchart--stacked","charts-barchart--stacked-with-three-series","charts-barchart--thicker-bars","charts-barchart--with-legend","charts-linechart--basic","charts-linechart--custom-colors","charts-linechart--formatted","charts-linechart--hidden-axes","charts-linechart--linear-curve","charts-linechart--many-lines","charts-linechart--single-line","charts-linechart--sparkline","charts-linechart--with-dots","charts-linechart--with-legend","charts-piechart--basic","charts-piechart--custom-colors","charts-piechart--donut","charts-piechart--long-legend-names","charts-piechart--many-slices","charts-piechart--no-labels","charts-piechart--no-legend","charts-piechart--no-tooltip","charts-piechart--small-slices-below-five-percent","core-buttons-actionbutton--as-div","core-buttons-actionbutton--basic","core-buttons-actionbutton--disabled","core-buttons-actionbutton--variants","core-buttons-actionbutton--with-both-icons","core-buttons-actionbutton--with-icon","core-buttons-actionbutton--with-popover","core-buttons-actiongroup--basic","core-buttons-actiongroup--default-selected","core-buttons-actiongroup--disabled","core-buttons-actiongroup--disabled-items","core-buttons-actiongroup--disabled-items-multi-select","core-buttons-actiongroup--disabled-with-selection","core-buttons-actiongroup--multi-select","core-buttons-actiongroup--multiple-default-selected","core-buttons-actiongroup--multiple-selected-items","core-buttons-actiongroup--single-item","core-buttons-actiongroup--single-select","core-buttons-actiongroup--with-custom-action-item","core-buttons-actiongroup--with-icon","core-buttons-actiongroup--with-icon-disabled","core-buttons-actiongroup--with-icon-multi-select","core-buttons-actiongroup--without-tooltip","core-buttons-actioniconbutton--basic","core-buttons-actioniconbutton--disabled","core-buttons-actioniconbutton--variants","core-buttons-actioniconbutton--with-popover","core-buttons-actioniconbutton--with-tooltip","core-buttons-reaction--basic","core-buttons-reaction--disabled","core-buttons-reaction--read-only","core-buttons-reaction--selected","core-buttons-reaction--variants","core-buttons-scrollcontrolbutton--basic","core-buttons-scrollcontrolbutton--hide-for-keyboard","core-buttons-scrollcontrolbutton--with-custom-delay","core-buttons-scrollcontrolbutton--with-reversed-items","core-buttons-scrollcontrolbutton--without-smooth-scroll","core-buttons-togglebutton--basic","core-buttons-togglebutton--controlled","core-buttons-togglebutton--default-selected","core-buttons-togglebutton--disabled","core-buttons-togglebutton--variants","core-buttons-togglebutton--with-icon","core-buttons-toggleiconbutton--basic","core-buttons-toggleiconbutton--primary-variants","core-buttons-toggleiconbutton--secondary-variants","core-buttons-toggleiconbutton--state-specific-icons","core-buttons-toggleiconbutton--teritary-variants","core-buttons-toggleiconbutton--toolbar-variants","core-buttons-toggleiconbutton--with-tooltip","core-collections-filelist--basic","core-collections-filelist--disabled","core-collections-filelist--disabled-items","core-collections-filelist--loading","core-collections-filelist--long-filename","core-collections-filelist--many-items","core-collections-filelist--mixed-states","core-collections-filelist--with-error","core-collections-gridlist--basic","core-collections-gridlist--default-selected-keys","core-collections-gridlist--disabled","core-collections-gridlist--disabled-rows","core-collections-gridlist--disallow-empty-selection","core-collections-gridlist--with-drag-and-drop","core-collections-gridlist--with-multiple-selection","core-collections-gridlist--with-single-selection","core-collections-imagegallery--basic","core-collections-imagegallery--more-items","core-collections-imagegallery--rtl-with-virtualization","core-collections-imagegallery--scrollable","core-collections-imagegallery--with-controlled-list","core-collections-imagegallery--with-custom-aspect-ratio","core-collections-imagegallery--with-custom-fit","core-collections-imagegallery--with-custom-image-dimensions","core-collections-imagegallery--with-custom-image-renderer","core-collections-imagegallery--with-custom-size","core-collections-imagegallery--with-deletion","core-collections-imagegallery--with-dynamic-list","core-collections-imagegallery--with-long-labels","core-collections-imagegallery--with-medium-size","core-collections-imagegallery--with-multiple-selection","core-collections-imagegallery--with-reordering","core-collections-imagegallery--with-single-selection","core-collections-imagegallery--with-single-selection-and-deletion","core-collections-imagegallery--with-virtualization","core-collections-listbox--basic","core-collections-listbox--controlled-auto-scroll","core-collections-listbox--drag-and-drop-custom-preview","core-collections-listbox--drag-and-drop-grid","core-collections-listbox--drag-and-drop-horizontal","core-collections-listbox--drag-and-drop-multiple","core-collections-listbox--drag-and-drop-single","core-collections-listbox--dynamic-items","core-collections-listbox--with-custom-option-style","core-collections-listbox--with-customized-section-titles","core-collections-listbox--with-default-selected","core-collections-listbox--with-disabled-items","core-collections-listbox--with-focus-loop","core-collections-listbox--with-padded-section-titles","core-collections-listbox--with-section-titles","core-collections-listbox--with-sections","core-collections-listbox--with-selected","core-collections-menu--basic","core-collections-menu--controlled-open","core-collections-menu--disabled","core-collections-menu--long-menu","core-collections-menu--multiple-selection","core-collections-menu--section-level-selection","core-collections-menu--single-selection","core-collections-menu--with-custom-options","core-collections-menu--with-custom-trigger","core-collections-menu--with-disabled-keys","core-collections-menu--with-disabled-submenu","core-collections-menu--with-icons","core-collections-menu--with-long-labels","core-collections-menu--with-sections","core-collections-menu--with-selected-keys-controlled","core-collections-menu--with-submenu","core-collections-table--async-loading","core-collections-table--default","core-collections-table--disabled-rows","core-collections-table--drag-and-drop","core-collections-table--empty","core-collections-table--long-text-content","core-collections-table--multiple-selection","core-collections-table--row-action","core-collections-table--selection-with-row-action","core-collections-table--single-selection","core-collections-table--sorting","core-collections-table--virtualized","core-collections-table--with-tag-and-menu","core-collections-table--with-toolbar","core-collections-taggroup--basic","core-collections-taggroup--disabled","core-collections-taggroup--disabled-items","core-collections-taggroup--group-variants","core-collections-taggroup--multi-select","core-collections-taggroup--removable","core-collections-taggroup--single-select","core-collections-taggroup--small-variants","core-collections-taggroup--variants","core-collections-treeview--basic","core-collections-treeview--custom-row","core-collections-treeview--custom-row-drag-and-drop","core-collections-treeview--deeply-nested","core-collections-treeview--drag-and-drop","core-collections-treeview--empty-tree","core-collections-treeview--flat-tree","core-collections-treeview--handle-only-drag-and-drop","core-collections-treeview--interactive-fields-drag-and-drop","core-collections-treeview--long-labels","core-collections-treeview--single-item","core-collections-treeview--virtualized-drag-and-drop","core-collections-treeview--virtualized-with-actions","core-collections-treeview--virtualized-with-descriptions","core-collections-treeview--virtualized-with-expand-control","core-collections-treeview--virtualized-with-rename","core-collections-treeview--with-actions-at-end","core-collections-treeview--with-controlled-expanded-keys","core-collections-treeview--with-custom-render-icons","core-collections-treeview--with-custom-render-item-title","core-collections-treeview--with-default-expanded-keys","core-collections-treeview--with-description","core-collections-treeview--with-icons","core-collections-treeview--with-primary-action","core-collections-treeview--with-primary-and-secondary-action","core-collections-treeview--with-primary-secondary-and-description-action","core-collections-treeview--with-rename","core-collections-treeview--with-selected-items","core-collections-treeview--with-virtualization","core-collections-unsafe-listbox--basic","core-collections-unsafe-listbox--controlled-auto-scroll","core-collections-unsafe-listbox--drag-and-drop-custom-preview","core-collections-unsafe-listbox--drag-and-drop-grid","core-collections-unsafe-listbox--drag-and-drop-horizontal","core-collections-unsafe-listbox--drag-and-drop-multiple","core-collections-unsafe-listbox--drag-and-drop-single","core-collections-unsafe-listbox--dynamic-items","core-collections-unsafe-listbox--virtualized-horizontal","core-collections-unsafe-listbox--virtualized-scroll-into-view","core-collections-unsafe-listbox--virtualized-vertical","core-collections-unsafe-listbox--virtualized-with-section-separators","core-collections-unsafe-listbox--virtualized-with-sections","core-collections-unsafe-listbox--with-custom-option-style","core-collections-unsafe-listbox--with-customized-section-titles","core-collections-unsafe-listbox--with-default-selected","core-collections-unsafe-listbox--with-disabled-items","core-collections-unsafe-listbox--with-focus-loop","core-collections-unsafe-listbox--with-padded-section-titles","core-collections-unsafe-listbox--with-section-titles","core-collections-unsafe-listbox--with-sections","core-collections-unsafe-listbox--with-selected","core-collections-virtualizer--grid-layout-example","core-collections-virtualizer--list-layout-example","core-collections-virtualizer--rtl-image-gallery-preset-example","core-collections-virtualizer--tree-view-preset-example","core-content-avatar--basic","core-content-avatar--disabled","core-content-avatar--variants","core-content-avatar--with-image","core-content-avatar--with-initials","core-content-avatar--with-notification","core-content-code--basic","core-content-code--with-scroll","core-content-colorswatch--basic","core-content-colorswatch--disabled","core-content-colorswatch--full-transparency","core-content-colorswatch--indeterminate","core-content-colorswatch--interactive","core-content-colorswatch--none","core-content-colorswatch--variants","core-content-colorswatch--with-custom-label","core-content-colorswatch--with-tooltip","core-content-colorswatch--with-transparency","core-content-kbd--common-shortcuts","core-content-kbd--complex-shortcut","core-content-kbd--key-combination","core-content-kbd--key-combination-with-symbols","core-content-kbd--modifier-key","core-content-kbd--single-key","core-content-kbd--symbols-showcase","core-content-markdown--basic","core-content-markdown--with-caret","core-content-pointpicker--basic","core-content-pointpicker--disabled","core-content-pointpicker-pointpickercontent--custom-cursor","core-content-pointpicker-pointpickercontent--custom-cursor-without-default","core-content-pointpicker-pointpickercontent--default","core-content-pointpicker-pointpickercontent--multiple-point-pickers","core-content-pointpicker-pointpickercontent--points-within-radius","core-content-pointpicker-pointpickercontent--programmatic-focus","core-content-pointpicker-pointpickercontent--snap-to-point","core-content-pointpicker-pointpickercontent--trailing-element","core-content-pointpicker-pointpickercontent--without-grid-lines","core-content-pointpicker-pointpickerdisplay--with-custom-scale","core-content-pointpicker-pointpickerdisplay--with-description","core-content-pointpicker-pointpickerdisplay--with-floating-display","core-content-preview--disabled","core-content-preview--image-preview","core-content-preview--svg-preview","core-content-preview--text-preview","core-content-preview--variants","core-content-preview--without-delete-button","core-content-separator--basic","core-content-separator--secondary","core-content-separator--secondary-vertical","core-content-separator--vertical","core-content-statuscard--basic","core-content-statuscard--interactive","core-content-statuscard--long-content","core-content-statuscard--truncated-title","core-content-statuscard--variants","core-content-statuscard--with-custom-icon","core-content-statuscard--with-trailing-element","core-content-statuscard--without-description","core-content-tag--basic","core-content-tag--disabled","core-content-tag--disabled-removable","core-content-tag--long-text","core-content-tag--removable","core-content-tag--selected","core-content-tag--selected-with-icon","core-content-tag--small","core-content-tag--small-with-icon","core-content-tag--with-icon","core-content-text--basic","core-content-text--slots","core-content-text--variants","core-feedback-skeleton--circle","core-feedback-skeleton--composed-example","core-feedback-skeleton--custom-shape","core-feedback-skeleton--document-view-area","core-feedback-skeleton--rectangle","core-feedback-skeleton--text-line","core-forms-buttonselect--basic","core-forms-buttonselect--controlled","core-forms-buttonselect--controlled-button-selection","core-forms-buttonselect--default-button-selected-value","core-forms-buttonselect--default-select-selected-value","core-forms-buttonselect--disabled","core-forms-buttonselect--exclude-from-tab-order","core-forms-buttonselect--items-without-icons","core-forms-buttonselect--long-text-labels","core-forms-buttonselect--many-items","core-forms-buttonselect--variants","core-forms-buttonselect--with-action-behaviour","core-forms-buttonselect--with-button-disabled-key","core-forms-buttonselect--with-callbacks","core-forms-buttonselect--with-default-open","core-forms-buttonselect--with-disabled-keys","core-forms-buttonselect--with-disabled-keys-and-default-selected","core-forms-buttonselect--with-hidden-label","core-forms-buttonselect--with-individual-button-behaviour","core-forms-buttonselect--with-multiple-disabled-keys","core-forms-buttonselect--with-validation-error","core-forms-buttonselect--without-tooltip","core-forms-calendar--default","core-forms-calendar--disabled","core-forms-calendar--extra-small","core-forms-calendar--extra-small-no-title","core-forms-calendar--fixed-weeks","core-forms-calendar--international-calendar","core-forms-calendar--read-only","core-forms-calendar--select-month","core-forms-calendar--select-month-and-year","core-forms-calendar--select-month-and-year-extra-small","core-forms-calendar--select-month-and-year-with-title","core-forms-calendar--select-month-extra-small","core-forms-calendar--select-month-with-title","core-forms-calendar--unavailable-dates","core-forms-calendar--with-default-value","core-forms-calendar--with-min-max","core-forms-calendar--with-title","core-forms-checkbox--checked","core-forms-checkbox--indeterminate","core-forms-checkbox--primary","core-forms-checkbox--with-error","core-forms-checkbox--with-label-at-end","core-forms-checkbox--with-label-at-start","core-forms-colorinput--basic","core-forms-colorinput--color-presets-only","core-forms-colorinput--controlled","core-forms-colorinput--disabled","core-forms-colorinput--indeterminate","core-forms-colorinput--lazy-picker","core-forms-colorinput--lazy-picker-mobile","core-forms-colorinput--with-alpha","core-forms-colorinput--with-controlled-open","core-forms-colorinput--with-custom-trigger","core-forms-colorinput--with-default-open","core-forms-colorinput--with-default-value","core-forms-colorinput--with-label","core-forms-colorinput--with-label-at-start","core-forms-colorinput--with-removal","core-forms-colorinput--without-alpha","core-forms-colorinput--without-color-label","core-forms-colorinput--without-color-presets","core-forms-colorinput-iconcolorinput--compact","core-forms-colorinput-iconcolorinput--compact-disabled","core-forms-colorinput-iconcolorinput--compact-indeterminate","core-forms-colorinput-iconcolorinput--disabled","core-forms-colorinput-iconcolorinput--indeterminate","core-forms-colorinput-iconcolorinput--standard","core-forms-colorinput-iconcolorinput--without-tooltip","core-forms-colorswatchpicker--basic","core-forms-colorswatchpicker--controlled","core-forms-colorswatchpicker--default-value","core-forms-colorswatchpicker--disabled","core-forms-colorswatchpicker--with-icon","core-forms-colorswatchpicker--with-label","core-forms-colorswatchpicker--with-label-at-start","core-forms-combobox--basic","core-forms-combobox--disabled","core-forms-combobox--dynamic-collections","core-forms-combobox--ghost-variant","core-forms-combobox--items-with-icon","core-forms-combobox--read-only","core-forms-combobox--variants","core-forms-combobox--with-custom-filter","core-forms-combobox--with-custom-number-value","core-forms-combobox--with-custom-value","core-forms-combobox--with-description","core-forms-combobox--with-error-message","core-forms-combobox--with-focus-menu-trigger","core-forms-combobox--with-label-at-start","core-forms-combobox--with-manual-menu-trigger","core-forms-combobox--with-min-max-value","core-forms-combobox--with-render-option","core-forms-combobox--with-tooltip","core-forms-combobox--with-warning-message","core-forms-datefield--basic","core-forms-datefield--controlled","core-forms-datefield--default-value","core-forms-datefield--different-granularity","core-forms-datefield--disabled","core-forms-datefield--ghost-variant","core-forms-datefield--html-forms","core-forms-datefield--placeholder-value","core-forms-datefield--read-only","core-forms-datefield--variants","core-forms-datefield--with-calendar-icon","core-forms-datefield--with-calendar-picker","core-forms-datefield--with-calendar-picker-and-default-value","core-forms-datefield--with-calendar-picker-and-min-max","core-forms-datefield--with-calendar-picker-disabled","core-forms-datefield--with-calendar-picker-error","core-forms-datefield--with-calendar-picker-ghost","core-forms-datefield--with-calendar-picker-read-only","core-forms-datefield--with-error-message","core-forms-datefield--with-error-message-only","core-forms-datefield--with-label","core-forms-datefield--with-label-at-start","core-forms-datefield--with-min-and-max-value","core-forms-datefield--with-warning-message","core-forms-fileinput--basic","core-forms-fileinput--custom-labels","core-forms-fileinput--directory","core-forms-fileinput--disabled","core-forms-fileinput--label-position-start","core-forms-fileinput--multiple","core-forms-fileinput--variants","core-forms-fileinput--with-error","core-forms-fileinput--with-warning","core-forms-fileinput--without-label","core-forms-fileuploader--button-variant","core-forms-fileuploader--default","core-forms-fileuploader--disabled","core-forms-fileuploader--error-dropzone","core-forms-fileuploader--inline","core-forms-fileuploader--no-label","core-forms-fileuploader--variants","core-forms-imagedropzone--basic","core-forms-imagedropzone--controlled","core-forms-imagedropzone--disabled","core-forms-imagedropzone--variants","core-forms-imagedropzone--with-default-image","core-forms-imagedropzone--with-file-size-limit","core-forms-imagedropzone--with-file-type-restriction","core-forms-numberinput--basic","core-forms-numberinput--controlled","core-forms-numberinput--disabled","core-forms-numberinput--ghost-variant","core-forms-numberinput--read-only","core-forms-numberinput--variants","core-forms-numberinput--with-custom-step","core-forms-numberinput--with-description","core-forms-numberinput--with-error","core-forms-numberinput--with-error-and-error-message","core-forms-numberinput--with-label","core-forms-numberinput--with-label-at-start","core-forms-numberinput--with-min-and-max","core-forms-numberinput--without-stepper","core-forms-pagination--controlled","core-forms-pagination--disabled","core-forms-pagination--primary","core-forms-pagination--read-only","core-forms-pagination--variants","core-forms-pagination--with-custom-messages","core-forms-pagination--with-default-value","core-forms-pagination--with-large-numbers","core-forms-pagination--with-step","core-forms-pagination--without-actions","core-forms-radiogroup--basic","core-forms-radiogroup--controlled","core-forms-radiogroup--custom-render-option","core-forms-radiogroup--default-value","core-forms-radiogroup--disabled","core-forms-radiogroup--disabled-values","core-forms-radiogroup--horizontal","core-forms-radiogroup--read-only","core-forms-radiogroup--with-group-label","core-forms-radiogroup--with-group-label-at-start","core-forms-radiogroup--with-option-description","core-forms-radiogroup--with-option-label-at-start","core-forms-rangecalendar--default","core-forms-rangecalendar--disabled","core-forms-rangecalendar--extra-small","core-forms-rangecalendar--extra-small-no-title","core-forms-rangecalendar--fixed-weeks","core-forms-rangecalendar--international-calendar","core-forms-rangecalendar--read-only","core-forms-rangecalendar--select-month","core-forms-rangecalendar--select-month-and-year","core-forms-rangecalendar--select-month-and-year-with-title","core-forms-rangecalendar--select-month-with-title","core-forms-rangecalendar--unavailable-dates","core-forms-rangecalendar--with-default-value","core-forms-rangecalendar--with-min-max","core-forms-rangecalendar--with-title","core-forms-searchinput--basic","core-forms-searchinput--clear-button-focusable","core-forms-searchinput--disabled","core-forms-searchinput--variants","core-forms-select--basic","core-forms-select--controlled","core-forms-select--empty-items","core-forms-select--ghost","core-forms-select--long-labels","core-forms-select--long-list","core-forms-select--read-only","core-forms-select--scrollable","core-forms-select--with-autocomplete","core-forms-select--with-controlled-open","core-forms-select--with-custom-trigger","core-forms-select--with-default-open","core-forms-select--with-default-selected-item","core-forms-select--with-description","core-forms-select--with-disabled","core-forms-select--with-disabled-items","core-forms-select--with-error","core-forms-select--with-error-and-error-message","core-forms-select--with-label","core-forms-select--with-label-at-start","core-forms-select--with-section-headers","core-forms-select--with-sections","core-forms-select--with-virtualized-section-headers","core-forms-select--with-warning","core-forms-select--with-warning-and-warning-message","core-forms-select-iconselect--basic","core-forms-select-iconselect--disabled","core-forms-select-iconselect--read-only","core-forms-select-iconselect--with-default-open","core-forms-select-iconselect--with-error","core-forms-select-iconselect--with-warning","core-forms-select-iconselect--without-icon","core-forms-select-iconselect--without-tooltip","core-forms-select-multiselect--basic","core-forms-select-multiselect--controlled","core-forms-select-multiselect--ghost","core-forms-select-multiselect--hide-clear","core-forms-select-multiselect--hide-select-all","core-forms-select-multiselect--hide-select-all-and-clear","core-forms-select-multiselect--long-labels-as-tags","core-forms-select-multiselect--long-list","core-forms-select-multiselect--max-count-1","core-forms-select-multiselect--max-count-3","core-forms-select-multiselect--read-only","core-forms-select-multiselect--read-only-with-tags-open","core-forms-select-multiselect--scrollable","core-forms-select-multiselect--with-autocomplete","core-forms-select-multiselect--with-controlled-open","core-forms-select-multiselect--with-custom-trigger","core-forms-select-multiselect--with-default-open","core-forms-select-multiselect--with-default-selected-item","core-forms-select-multiselect--with-description","core-forms-select-multiselect--with-disabled","core-forms-select-multiselect--with-disabled-items","core-forms-select-multiselect--with-error","core-forms-select-multiselect--with-error-and-error-message","core-forms-select-multiselect--with-error-and-tags","core-forms-select-multiselect--with-label","core-forms-select-multiselect--with-label-at-start","core-forms-select-multiselect--with-sections","core-forms-select-multiselect--with-warning","core-forms-select-multiselect--with-warning-and-warning-message","core-forms-slider--basic","core-forms-slider--controlled","core-forms-slider--disabled","core-forms-slider--read-only","core-forms-slider--read-only-with-number-input","core-forms-slider--with-description","core-forms-slider--with-label","core-forms-slider--with-label-and-number-input","core-forms-slider--with-min-and-max","core-forms-slider--with-number-input","core-forms-slider--with-step","core-forms-slider-iconslider--basic","core-forms-slider-iconslider--disabled","core-forms-slider-iconslider--with-number-input","core-forms-slider-iconslider--without-tooltip","core-forms-switch--basic","core-forms-switch--disabled","core-forms-switch--selected","core-forms-switch--selected-disabled","core-forms-switch--with-label","core-forms-switch--with-label-and-status","core-forms-switch--with-label-in-left-and-status","core-forms-taggedpagination--basic","core-forms-taggedpagination--disabled","core-forms-taggedpagination--read-only","core-forms-taggedpagination--variant","core-forms-taggedpagination--with-page-label","core-forms-textinput--basic","core-forms-textinput--controlled","core-forms-textinput--disabled","core-forms-textinput--focusing-the-input","core-forms-textinput--ghost-variant","core-forms-textinput--html-forms","core-forms-textinput--multiline","core-forms-textinput--multiline-variants","core-forms-textinput--multiline-with-rows","core-forms-textinput--read-only","core-forms-textinput--variants","core-forms-textinput--with-description","core-forms-textinput--with-error-message","core-forms-textinput--with-label","core-forms-textinput--with-label-at-start","core-forms-textinput--with-warning-message","core-forms-timefield--basic","core-forms-timefield--controlled","core-forms-timefield--default-value","core-forms-timefield--disabled","core-forms-timefield--ghost-variant","core-forms-timefield--html-forms","core-forms-timefield--placeholder-value","core-forms-timefield--read-only","core-forms-timefield--variants","core-forms-timefield--with-error-message","core-forms-timefield--with-error-message-only","core-forms-timefield--with-label","core-forms-timefield--with-label-at-start","core-forms-timefield--with-min-and-max-value","core-forms-timefield--with-warning-message","core-media-audioplayer--basic","core-media-audioplayer--small","core-miscellaneous-editor--basic","core-miscellaneous-editor--headless-custom","core-miscellaneous-editor-plain--auto-focus","core-miscellaneous-editor-plain--auto-focus-at-end","core-miscellaneous-editor-plain--auto-focus-at-start","core-miscellaneous-editor-plain--clear-on-cancel","core-miscellaneous-editor-plain--clear-on-save","core-miscellaneous-editor-plain--controlled","core-miscellaneous-editor-plain--custom-submit-icon","core-miscellaneous-editor-plain--default-save-disabled","core-miscellaneous-editor-plain--disabled","core-miscellaneous-editor-plain--minimal","core-miscellaneous-editor-plain--minimal-disabled","core-miscellaneous-editor-plain--minimal-multiline","core-miscellaneous-editor-plain--minimal-save-disabled","core-miscellaneous-editor-plain--not-inline","core-miscellaneous-editor-plain--save-on-enter","core-miscellaneous-editor-plain--variants","core-miscellaneous-editor-plain--with-cancel","core-miscellaneous-editor-plain--with-dynamic-caret-position","core-miscellaneous-editor-rich-text--auto-focus","core-miscellaneous-editor-rich-text--auto-focus-at-end","core-miscellaneous-editor-rich-text--clear-on-cancel","core-miscellaneous-editor-rich-text--clear-on-save","core-miscellaneous-editor-rich-text--controlled","core-miscellaneous-editor-rich-text--default","core-miscellaneous-editor-rich-text--disabled","core-miscellaneous-editor-rich-text--long-content","core-miscellaneous-editor-rich-text--mentions","core-miscellaneous-editor-rich-text--mentions-max-suggestions","core-miscellaneous-editor-rich-text--not-inline","core-miscellaneous-editor-rich-text--save-disabled","core-miscellaneous-editor-rich-text--save-on-enter","core-miscellaneous-editor-rich-text--variants","core-miscellaneous-editor-rich-text--with-cancel","core-miscellaneous-editor-rich-text--with-custom-footer-buttons","core-miscellaneous-editor-rich-text--with-placeholder","core-miscellaneous-freehandcanvas--basic","core-miscellaneous-freehandcanvas--clear-button","core-miscellaneous-freehandcanvas--controlled","core-miscellaneous-freehandcanvas--default-value","core-miscellaneous-freehandcanvas--disabled","core-miscellaneous-freehandcanvas--history-enabled","core-miscellaneous-freehandcanvas--label","core-miscellaneous-freehandcanvas--streamlining","core-miscellaneous-icon--basic","core-miscellaneous-toolbar--basic","core-miscellaneous-toolbar--collapsible","core-miscellaneous-toolbar--vertical","core-miscellaneous-toolbar--with-inputs","core-miscellaneous-toolbar--with-over-flow","core-miscellaneous-toolbar--with-tabbing-within","core-miscellaneous-toolbar--with-tooltip","core-navigation-accordion--basic","core-navigation-accordion--controlled","core-navigation-accordion--default-expanded-keys","core-navigation-accordion--disabled","core-navigation-accordion--single-expansion","core-navigation-accordion-accordionitem--force-mount","core-navigation-accordion-accordionitem--show-actions-on-trigger-only","core-navigation-accordion-accordionitem--with-buttons","core-navigation-accordion-accordionitem--with-sub-labels","core-navigation-accordion-accordionitem--with-tabbable-content","core-navigation-disclosure--basic","core-navigation-disclosure--controlled","core-navigation-disclosure--truncated-title","core-navigation-disclosure--variants","core-navigation-disclosure--with-custom-icon","core-navigation-disclosure--with-interactive-content","core-navigation-disclosure--with-long-content","core-navigation-disclosure--without-description","core-navigation-link--basic","core-navigation-link--client-side-action","core-navigation-link--variants","core-navigation-stepper--all-complete","core-navigation-stepper--all-states","core-navigation-stepper--condensed","core-navigation-stepper--controlled","core-navigation-stepper--default","core-navigation-stepper--expanded-without-descriptions","core-navigation-stepper--frontier-ahead-of-selection","core-navigation-stepper--indicator-only","core-navigation-stepper--indicator-only-expanded","core-navigation-stepper--is-disabled","core-navigation-stepper--long-title-and-description","core-navigation-stepper--mixed-indicator-and-titled-items","core-navigation-stepper--per-item-aria-label-overrides-title","core-navigation-stepper--single-item","core-navigation-stepper--size-small-condensed","core-navigation-stepper--size-small-expanded","core-navigation-stepper--two-steps","core-navigation-stepper--with-disabled-step","core-navigation-tabs--basic","core-navigation-tabs--controlled","core-navigation-tabs--ghost","core-navigation-tabs--with-action-button","core-navigation-tabs--with-close-button","core-navigation-tabs--with-default-selected","core-navigation-tabs--with-disabled","core-navigation-tabs--with-focusable-content","core-navigation-tabs--with-specific-disabled","core-navigation-tabs-tabitem--with-icon","core-overlays-alertdialog--auto-focus-cancel-button","core-overlays-alertdialog--basic","core-overlays-alertdialog--custom-focused-button","core-overlays-alertdialog--default-open","core-overlays-alertdialog--long-content","core-overlays-alertdialog--only-cancel-button","core-overlays-alertdialog--only-primary-action","core-overlays-alertdialog--primary-action-disabled","core-overlays-alertdialog--separate-close-handler","core-overlays-alertdialog--with-text-input","core-overlays-alertdialog--with-title-only","core-overlays-alertdialog--without-close-button","core-overlays-alertdialog--without-icon","core-overlays-alertdialog--without-message-and-actions","core-overlays-dialog--basic","core-overlays-dialog--default-open","core-overlays-dialog--different-sizes","core-overlays-dialog--ghost","core-overlays-drawer--basic","core-overlays-drawer--with-action","core-overlays-inlinetoolbar--basic","core-overlays-inlinetoolbar--controlled","core-overlays-inlinetoolbar--disabled","core-overlays-inlinetoolbar--disabled-keys","core-overlays-inlinetoolbar--with-interactive-element","core-overlays-inlinetoolbar--with-scroll","core-overlays-modal--basic","core-overlays-modal--controlled","core-overlays-modal--default-open","core-overlays-modal-modalcontent--disabled-animation","core-overlays-modal-modalcontent--drawer-mobile","core-overlays-modal-modalcontent--drawer-mobile-with-nested-popover","core-overlays-modal-modalcontent--form-controls","core-overlays-modal-modalcontent--long-content","core-overlays-modal-modalcontent--not-dismissable","core-overlays-modal-modalcontent--uncontrolled-interaction-outside","core-overlays-modal-modalcontent--with-disabled-focus-management","core-overlays-modal-modalcontent--with-inert","core-overlays-popover--basic","core-overlays-popover--event-leak-fix","core-overlays-popover--with-arrow","core-overlays-popover--with-boundary-element","core-overlays-popover--with-custom-target","core-overlays-popover--with-dynamic-trigger-width","core-overlays-popover--with-no-boundary","core-overlays-popover--with-scrollable-content","core-overlays-popover--with-scrollable-content-non-modal","core-overlays-popover--with-scrollable-viewport","core-overlays-popover--with-tooltip","core-overlays-popover-popovercontent--basic","core-overlays-popover-popovercontent--contained-focus","core-overlays-popover-popovercontent--default-open-with-arrow","core-overlays-popover-popovercontent--disable-animation","core-overlays-popover-popovercontent--manual-repositioning","core-overlays-popover-popovercontent--nested-scrollable-containers","core-overlays-popover-popovercontent--scroll-repositioning","core-overlays-popover-popovercontent--with-boundary-axis","core-overlays-popover-popovercontent--with-horizontal-boundary-behavior","core-overlays-popover-popovertrigger--basic","core-overlays-popover-popovertrigger--function-children","core-overlays-popover-popovertrigger--with-updated-position","core-overlays-tooltip--basic","core-overlays-tooltip--controlled-open","core-overlays-tooltip--disabled","core-overlays-tooltip--focus-trigger","core-overlays-tooltip--no-text","core-overlays-tooltip--placement","core-overlays-tooltip--variants","core-overlays-tooltip--variants-size","core-overlays-tooltip--with-cross-offset","core-overlays-tooltip--with-focusable","core-overlays-tooltip--with-offset","core-overlays-tooltip--with-on-open-change","core-status-inlinealert--basic","core-status-inlinealert--compact","core-status-inlinealert--compact-with-action","core-status-inlinealert--compact-with-action-and-close","core-status-inlinealert--multi-line","core-status-inlinealert--multi-line-with-action","core-status-inlinealert--multi-line-with-action-and-close","core-status-inlinealert--sizes","core-status-inlinealert--variants","core-status-inlinealert--with-action","core-status-inlinealert--with-action-and-close","core-status-progressbar--basic","core-status-progressbar--variants","core-status-progressbar--with-custom-number-formatter","core-status-progressbar--with-custom-value-label","core-status-progressbar--with-error","core-status-progressbar--with-max-value","core-status-progressbar--with-min-and-max-value","core-status-progressbar--with-min-value","core-status-progressbar--with-no-description","core-status-progressbar--with-no-label","core-status-progressbar--with-show-value","core-status-progressspinner--error","core-status-progressspinner--primary","core-status-progressspinner--success","core-status-progressspinner--variants","core-status-progressspinner--without-label","core-status-toast--basic","core-status-toast--timeout","core-status-toast--variants-with-action","core-status-toast--variants-without-action","core-status-toast--with-action","core-utilities-actionable--basic","core-utilities-actionable--disabled","core-utilities-actionable--with-complex-content","core-utilities-actionable--with-div","core-utilities-actionable--with-dynamic-button-styling","core-utilities-actionable--with-dynamic-child-styling","core-utilities-box--basic","core-utilities-box--element-type","core-utilities-box--flex-layout","core-utilities-box--media-queries","core-utilities-box--nested-boxes","core-utilities-dateformat--basic","core-utilities-dateformat--time-only","core-utilities-dateformat--time-only-with-time-zone","core-utilities-dateformat--time-zone-24-hour","core-utilities-dateformat--with-date-and-time","core-utilities-deviceprovider--always-desktop","core-utilities-deviceprovider--always-mobile","core-utilities-deviceprovider--basic","core-utilities-deviceprovider--custom-breakpoints","core-utilities-frameprovider--always-contained","core-utilities-frameprovider--basic","core-utilities-frameprovider--custom-portal-container","core-utilities-frameprovider--inside-shadow-root","core-utilities-frameprovider--nested-containers","core-utilities-frameprovider--never-contained","core-utilities-frameprovider--popover-with-frame-boundary","core-utilities-frameprovider--portal-container-outside-container","core-utilities-frameprovider--with-interactive-elements-outside-of-container","core-utilities-group--basic","core-utilities-i18nprovider--string-format","core-utilities-messageformat--basic","core-utilities-numberformat--basic","core-utilities-numberformat--currency","core-utilities-numberformat--currency-with-fraction-digits","core-utilities-numberformat--currency-with-fraction-digits-and-currency-display","core-utilities-numberformat--percent","core-utilities-numberformat--percent-with-fraction-digits","core-utilities-panel--basic","core-utilities-panel--collapsible","core-utilities-panel--conditional","core-utilities-panel--controlled","core-utilities-panel--disabled-handle","core-utilities-panel--max-size","core-utilities-panel--multiple","core-utilities-panel--nested","core-utilities-panel--persistent","core-utilities-panel--vertical","core-utilities-portal--basic","core-utilities-themeprovider--basic","json-render-examples--dashboard","json-render-examples--data-table","json-render-examples--login-form","json-render-examples--settings-panel"];var h={version:"3.5.0"};var b=`
|
|
38177
39525
|
# Baseline UI MCP Server Guidelines
|
|
38178
39526
|
|
|
38179
39527
|
This MCP server provides AI assistants with structured access to Baseline UI's comprehensive component documentation, icon library, theming resources, and design guidelines.
|
|
@@ -38328,15 +39676,15 @@ Use this tool to:
|
|
|
38328
39676
|
- Consult **list_components** to find the right component for your needs
|
|
38329
39677
|
- Reference **theming** for custom design systems
|
|
38330
39678
|
- Check **styling** for CSS and design token guidance
|
|
38331
|
-
`;var
|
|
39679
|
+
`;var k=`# List of available components in Baseline UI design system
|
|
38332
39680
|
| Name | Description | Similar To |
|
|
38333
39681
|
| --- | --- | --- |
|
|
38334
|
-
${Object.entries(o).
|
|
39682
|
+
${Object.entries(o).sort(([n],[e])=>n.localeCompare(e)).map(([n,{description:e,similarTo:t}])=>`|${n}|${e}|${t?.join(", ")||""}|`).join(`
|
|
38335
39683
|
`)}
|
|
38336
39684
|
`,P=Object.entries(m).map(([n,e])=>`## ${n}
|
|
38337
39685
|
|
|
38338
39686
|
${e.map(t=>"- "+t).join(`
|
|
38339
39687
|
`)}`).join(`
|
|
38340
39688
|
|
|
38341
|
-
`),D=new Set(r);function B(n){let e=n.toLowerCase();if(!e)return [];let t=r.filter(s=>s.includes(e));if(t.length>0)return t.slice(0,5);let a=e.split("--")[0];return a?r.filter(s=>s.includes(a)).slice(0,5):[]}function K(){let n=new McpServer({name:"baseline-ui",version:h.version});return n.registerResource("list_components","resource://baseline-ui/list_components.md",{description:l,mimeType:"text/markdown"},e=>({contents:[{uri:e.href,mimeType:"text/markdown",text:
|
|
39689
|
+
`),D=new Set(r);function B(n){let e=n.toLowerCase();if(!e)return [];let t=r.filter(s=>s.includes(e));if(t.length>0)return t.slice(0,5);let a=e.split("--")[0];return a?r.filter(s=>s.includes(a)).slice(0,5):[]}function K(){let n=new McpServer({name:"baseline-ui",version:h.version});return n.registerResource("list_components","resource://baseline-ui/list_components.md",{description:l,mimeType:"text/markdown"},e=>({contents:[{uri:e.href,mimeType:"text/markdown",text:k}]})),n.registerResource("list_icons","resource://baseline-ui/list_icons.md",{description:c,mimeType:"text/markdown"},e=>({contents:[{uri:e.href,mimeType:"text/markdown",text:P}]})),n.registerResource("getting_started","resource://baseline-ui/getting_started.md",{description:"Quick start guide for integrating Baseline UI into new projects",mimeType:"text/markdown"},e=>({contents:[{uri:e.href,mimeType:"text/markdown",text:i.gettingStarted}]})),n.registerResource("nutrient_web_viewer_theming","resource://baseline-ui/nutrient_web_viewer_theming.md",{description:"Specialized theming guide for customizing Baseline UI in Nutrient Web Viewer. This is not applicable if you are not theming the Nutrient Web Viewer SDK.",mimeType:"text/markdown"},e=>({contents:[{uri:e.href,mimeType:"text/markdown",text:i.nutrientWebViewerTheming}]})),n.registerResource("theming","resource://baseline-ui/theming.md",{description:"Comprehensive guide for implementing custom themes and color schemes in Baseline UI",mimeType:"text/markdown"},e=>({contents:[{uri:e.href,mimeType:"text/markdown",text:i.theming}]})),n.registerResource("internationalization","resource://baseline-ui/internationalization.md",{description:"Guide for implementing multi-language support and localization in Baseline UI",mimeType:"text/markdown"},e=>({contents:[{uri:e.href,mimeType:"text/markdown",text:i.internationalization}]})),n.registerResource("styling","resource://baseline-ui/styling.md",{description:p,mimeType:"text/markdown"},e=>({contents:[{uri:e.href,mimeType:"text/markdown",text:i.styling}]})),n.registerResource("guidelines","resource://baseline-ui/guidelines.md",{description:d,mimeType:"text/markdown"},e=>({contents:[{uri:e.href,mimeType:"text/markdown",text:b}]})),n.registerTool("get_component_info",{title:"Get component info",description:g,inputSchema:{componentName:z.enum(Object.keys(o))}},({componentName:e})=>({content:[{type:"text",text:JSON.stringify(Object.fromEntries(Object.entries(o[e]).filter(([t])=>!["description","similarTo","figmaUrl"].includes(t))),null,2)}]})),n.registerTool("get_story_url",{title:"Get story demo URL",description:f,inputSchema:{storyId:z.string()}},({storyId:e})=>{let t=e.toLowerCase();if(!D.has(t)){let a=B(e);return {isError:true,content:[{type:"text",text:`Unknown story id "${e}".`+(a.length>0?` Did you mean: ${a.join(", ")}?`:"")+" Story ids come from the Storybook index; get_component_info lists them under `stories.usage[].id`."}]}}return {content:[{type:"text",text:`https://nutrient.io/baseline-ui/iframe.html?id=${t}`}]}}),n.registerTool("get_figma_url",{title:"Get Figma URL",description:y,inputSchema:{componentName:z.enum(Object.keys(o))}},({componentName:e})=>{let{figmaUrl:t}=o[e];return t?{content:[{type:"text",text:t}]}:{isError:true,content:[{type:"text",text:`No Figma URL is available for ${e}.`}]}}),n.registerTool("list_available_resources",{title:"List Available Resources",description:v,inputSchema:{}},()=>({content:[{type:"text",text:JSON.stringify([{name:"list_components",uri:"resource://baseline-ui/list_components.md",description:l,mimeType:"text/markdown"},{name:"list_icons",uri:"resource://baseline-ui/list_icons.md",description:c,mimeType:"text/markdown"},{name:"getting_started",uri:"resource://baseline-ui/getting_started.md",description:"Quick start guide for integrating Baseline UI into new projects",mimeType:"text/markdown"},{name:"nutrient_web_viewer_theming",uri:"resource://baseline-ui/nutrient_web_viewer_theming.md",description:"Specialized theming guide for customizing Baseline UI in Nutrient Web Viewer. This is not applicable if you are not theming the Nutrient Web Viewer SDK.",mimeType:"text/markdown"},{name:"theming",uri:"resource://baseline-ui/theming.md",description:"Comprehensive guide for implementing custom themes and color schemes in Baseline UI",mimeType:"text/markdown"},{name:"internationalization",uri:"resource://baseline-ui/internationalization.md",description:"Guide for implementing multi-language support and localization in Baseline UI",mimeType:"text/markdown"},{name:"styling",uri:"resource://baseline-ui/styling.md",description:p,mimeType:"text/markdown"},{name:"guidelines",uri:"resource://baseline-ui/guidelines.md",description:d,mimeType:"text/markdown"}],null,2)}]})),n}
|
|
38342
39690
|
export{K as a};
|