@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/dist/server.cjs CHANGED
@@ -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 "../../utils";
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 \`buttons\` prop. This prop accepts an array of props that are passed to the \`ActionIconButton\` component.
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
- > = ({ includeActions, includeDescription, children, ...props }) => {
966
- return (
967
- <Accordion {...props}>
968
- {Array.from({ length: 3 }).map((_, i) => (
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={i}
971
- title={\`Accordion Item \${i + 1}\`}
983
+ key={n}
984
+ title={\`Accordion Item \${n}\`}
972
985
  subLabel={includeDescription ? "Value" : undefined}
973
- value={\`item-\${i + 1}\`}
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
- };`},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 {
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
- }`},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.
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 "../../utils";
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 "./ActionIconButton";
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
- };`},similarTo:[],figmaUrl:null},Actionable:{id:"core-utilities-actionable",breadcrumb:"Core/Utilities/Actionable",importStatement:`import {
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 "@storybook/addon-docs/blocks";
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/mp3",
2632
+ type: "audio/mpeg",
2571
2633
  },
2572
2634
  ]}
2573
- aria-label="Auido Player"
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 "../../utils";
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:""},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.
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} />;`},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.
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 "../../utils";
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 "../../utils";
4873
+ import { ColorSwatchPicker } from "@baseline-ui/core";
4775
4874
 
4776
4875
  <ColorSwatchPicker
4777
- colors={[
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" {...props} items={items} />
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 { CalendarDate, parseDate } from "@internationalized/date";
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 "../../utils";
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 "../../utils";
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 "../../utils";
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 "../../utils";
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
- }> = ({ modalProps, contentProps, dialogProps }) => {
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
- <Text className="PSPDFKit-Title" type="title" elementType="h3">
6962
- Dialog Title
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 "../../utils";\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 {
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-rich-text--default",name:"Default",snippet:`const Default = () => <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 { EditorHandle, EditorProps } from "../Editor.types";
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:""},similarTo:[],figmaUrl:null},FrameProvider:{id:"core-utilities-frameprovider",breadcrumb:"Core/Utilities/FrameProvider",importStatement:`import {
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 "../../utils";
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 "../../utils";
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
- { checkBoxProps, rowProps, isDisabled, gridCellProps, ...rest },
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> = (props) => {
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={gridItems}
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
- props,
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(gridItems.at(-1)?.id ?? "", {
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(gridItems.at(-1)?.id ?? "");
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 "../../utils";\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. |\n\n```\n```',props:`interface GroupProps {
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 "../../utils";
11443
+ import { ImageDropZone } from "@baseline-ui/core";
11039
11444
 
11040
11445
  <ImageDropZone
11041
- buttonLabel="Upload"
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:""},similarTo:[],figmaUrl:null},ImageGallery:{id:"core-collections-imagegallery",breadcrumb:"Core/Collections/ImageGallery",importStatement:`import {
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 "../../utils";
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
- You can enable reordering by setting the \`enableReorder\` prop to \`true\`.
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 "../../utils";
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: BinIcon,
13395
+ icon: TrashIcon,
12960
13396
  "aria-label": "Delete",
12961
13397
  },
12962
13398
  ];
12963
13399
 
12964
13400
  <InlineToolbar items={items}>
12965
- Select the text and scroll to see the inline toolbar in the correct position.
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 "../../utils";\n\n<Link href="https://www.nutrient.io/">Nutrient</Link>;\n```\n\nThe `Link` component comes in three sizes: `small`, `medium`, and `large`.\n\n```jsx\nimport { Link } from "../../utils";\n\n<Link href="https://www.nutrient.io/sdk/" size="small">\n Small link\n</Link>\n<Link href="https://www.nutrient.io/sdk/" size="medium">\n Medium link\n</Link>\n<Link href="https://www.nutrient.io/sdk/" size="large">\n Large link\n</Link>\n```\n\nThe `Link` component comes in two variants: `default` and `inline`.\n\n```jsx\nimport { Link } from "../../utils";\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\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 "../../utils";\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 "../../utils";\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. |\n\n```\n```',props:`interface LinkProps {
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 "@storybook/addon-docs/blocks";
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
- > = ({ label, ...props }) => {
14667
- return <Menu {...props} triggerLabel={label} />;
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 "../../utils";
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 "../../utils";
15976
+ import { NumberFormat } from "@baseline-ui/core";
15503
15977
 
15504
15978
  const MyComponent = () => (
15505
- <NumberFormat value={1000} style: "currency" currency: "USD" />
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 "../../utils";
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 "../../utils";\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 |\n\n```\n```',props:`interface NumberInputProps {
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 "../../utils";
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 "../../utils";
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 "../../utils";
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 "../../utils";
16446
+ import { Pagination } from "@baseline-ui/core";
15973
16447
 
15974
- <Pagination maxValue={10} defaultValue={5} variant="floating" />;
15975
- <Pagination maxValue={10} defaultValue={5} variant="pinned" />;
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 "../../utils";
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 \`showGridLines\` prop in \`PointPickerContent\` can be used to hide the grid lines on the \`PointPickerContent\` component. The default value is \`true\`.
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 showGridLines={false}>
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. It can be configured to be \`floating\` or \`auto\` to the top right corner of the screen. The floating variant moves with the mouse cursor.
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
- <PointPickerDisplay variant="floating" />
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
- The \`scale\` prop in \`PointPickerDisplay\` can be used to customize the scale of the magnifier. The default value is \`1\`.
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
- <PointPickerDisplay scale={2} />
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 "../../utils";
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 \`../../utils\`.
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 { Popover, PopoverTrigger, PopoverContent } from "../../utils";
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" onClick={moveTrigger} />
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 { sprinkles, themeVars } from "@baseline-ui/tokens";
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 "@storybook/addon-docs/blocks";\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 |\n\n```\n```',props:`interface PreviewProps {
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 "../../utils";\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 {
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 "../../utils";\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 "../../utils";\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 "../../utils";\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 "../../utils";\n\n<ProgressSpinner aria-label={"Label"} label={"Label"} />;\n<ProgressSpinner aria-label={"Label"} label={"Label"} size={"sm"} />;\n```',props:`interface ProgressSpinnerProps {
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 "../../utils";
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 "../../utils";
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 "../../utils";
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 "../../utils";
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 \`small\`.
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 "../../utils";
20372
+ import { Reaction } from "@baseline-ui/core";
19815
20373
 
19816
- <Reaction count={10} size="small" aria-label="Label" />;
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 { ScrollControlButton } from "../../utils";
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 { ScrollControlButton } from "../../utils";
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 "../../utils";\n\n<SearchInput aria-label="Label" />;\n```\n\nThe `SearchInput` component has two variants: `primary` and `ghost`.\n\n```jsx\nimport { SearchInput } from "../../utils";\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 "../../utils";\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 "../../utils";\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 {
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-multiselect",breadcrumb:"Core/Forms/Select",importStatement:'import { Select } 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.
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-multiselect--basic",name:"Basic",error:{name:"SyntaxError",message:`Expected story to be a function or variable declaration
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 "../../utils";
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 "../../utils";
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 "../../utils";
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
- > = (props) => <IconSlider icon={TestIcon} {...props} />;`},similarTo:[],figmaUrl:null},StatusCard:{id:"core-content-statuscard",breadcrumb:"Core/Content/StatusCard",importStatement:`import { Actionable, Box, StatusCard, Text, VariantViewer } from "@baseline-ui/core";
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 "../../utils";
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 "../../utils";
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 "../../utils";
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 "../../utils";
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 "../../utils";
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 "../../utils";
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 "../../utils";
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 "../../utils";
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 "../../utils";
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 "../../utils";
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.toSorted((a, b) => {
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 "../../utils";
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 "../../utils";
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 "../../utils";
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 "../../utils";
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 "../../utils";
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 "../../utils";
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
- A tab can be rendered as an action icon button by using a \`TabActionIconButton\` component in a \`Tabs\` component. Clicking this button will trigger an \`onPress\` event.
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 "../../utils";
24805
- import { PlusIcon } from "../Icon";
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("Close"),
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 key="tab1" title="Tab 1">
25569
+ * <TabItem value="tab1" title="Tab 1">
24838
25570
  * <div>Tab 1 content</div>
24839
25571
  * </TabItem>
24840
- * <TabItem key="tab2" title="Tab 2">
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 "../../utils";
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 "../../utils";
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 "../../utils";
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 "../../utils";
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 "../../utils";
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={{ 1: "One", 2: "Two", 4: "Four" }}
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
- This component is a controlled component and requires the \`value\` prop to be controlled. You can use the \`onChange\` prop to update the current page.
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:""},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 "../../utils";\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 {
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 "../../utils";
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 "../../utils";
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 "../../utils";
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:'`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.\n\n* Native HTML `<button>` support\n* Exposed as a toggle button via ARIA\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\n```jsx\nimport { ToggleIconButton } from "../../utils";\nimport { TrashIcon } from "@baseline-ui/icons/20";\n\n<ToggleIconButton size="md" variant="primary" icon={TrashIcon} />;\n```\n\nYou can control the state of the button by passing the `isSelected` prop.\n\n```jsx\n<ToggleButton label={"Label"} isSelected={true} />\n```\n\nYou can set the default selection state of the button by passing the `defaultSelected` prop.\n\n```jsx\n<ToggleButton label={"Label"} defaultSelected={true} />\n```\n\nYou can disable the button by passing the `isDisabled` prop.\n\n```jsx\n<ToggleButton label={"Label"} isDisabled={true} />\n```\n\nYou can set different icons for the selected and unselected states by passing an object to the `icon` prop with `selected` and `unselected` keys.\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| \\[data-selected] | Whether the button is currently selected. |\n\n| Key | Function |\n| ------- | ----------------- |\n| `Space` | Toggle the button |\n| `Enter` | Toggle the button |',props:`interface ToggleIconButtonProps {
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 "../../utils";
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 |`,props:`interface ToolbarProps {
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
- return (
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
- };`},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.
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>Hover over me. This is just a div.</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 React Aria's \`useDragAndDrop\`) to enable drag-and-drop reordering.
30689
+ Pass a \`dragAndDropHooks\` object (created with \`useDragAndDrop\`) to enable drag-and-drop reordering.
29545
30690
 
29546
30691
  \`\`\`jsx
29547
- import { useDragAndDrop } from "react-aria-components";
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
- > = ({ includeActions, includeDescription, children, ...props }) => {
31015
- return (
31016
- <Accordion {...props}>
31017
- {Array.from({ length: 3 }).map((_, i) => (
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={i}
31020
- title={\`Accordion Item \${i + 1}\`}
32174
+ key={n}
32175
+ title={\`Accordion Item \${n}\`}
31021
32176
  subLabel={includeDescription ? "Value" : undefined}
31022
- value={\`item-\${i + 1}\`}
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
- };`},similarTo:[],figmaUrl:null},IconColorInput:{id:"core-forms-colorinput-iconcolorinput",importStatement:'import { Box, IconColorInput } from "@baseline-ui/core";',description:"",documentation:null,props:`interface IconColorInputProps {
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} />;`},similarTo:[],figmaUrl:null},Icon:{id:"core-miscellaneous-icon",importStatement:'import { Icon } from "@baseline-ui/core";',description:"",documentation:null,props:`interface IconProps {
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 { sprinkles, themeVars } from "@baseline-ui/tokens";
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 { sprinkles, themeVars } from "@baseline-ui/tokens";
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
- > = (props) => <IconSlider icon={TestIcon} {...props} />;`},similarTo:[],figmaUrl:null}};var i={gettingStarted:`# Getting started
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 "../../utils";
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 "./utils";
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 { WarningIcon } from "@baseline-ui/icons";
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: <ErrorIcon color={themeVars.color.support.error.strong} size={16} />,
39136
+ error: (
39137
+ <ErrorCircleIcon color={themeVars.color.support.error.strong} size={16} />
39138
+ ),
37794
39139
  success: (
37795
- <CheckIcon color={themeVars.color.support.success.strong} size={16} />
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 I=`# List of available components in Baseline UI design system
39679
+ `;var k=`# List of available components in Baseline UI design system
38332
39680
  | Name | Description | Similar To |
38333
39681
  | --- | --- | --- |
38334
- ${Object.entries(o).toSorted(([n],[e])=>n.localeCompare(e)).map(([n,{description:e,similarTo:t}])=>`|${n}|${e}|${t?.join(", ")||""}|`).join(`
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 mcp_js.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:I}]})),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:zod.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:zod.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:zod.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}
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 mcp_js.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:zod.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:zod.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:zod.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
  exports.createServer=K;