@wallarm-org/design-system 0.62.0 → 0.63.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.
Files changed (191) hide show
  1. package/dist/components/Breadcrumbs/BreadcrumbsItem.js +1 -0
  2. package/dist/components/BulkBar/BulkBarSummary.d.ts +4 -14
  3. package/dist/components/BulkBar/BulkBarSummary.js +15 -46
  4. package/dist/components/BulkBar/BulkBarSummaryClear.d.ts +7 -0
  5. package/dist/components/BulkBar/BulkBarSummaryClear.js +25 -0
  6. package/dist/components/BulkBar/BulkBarSummaryCount.d.ts +13 -0
  7. package/dist/components/BulkBar/BulkBarSummaryCount.js +18 -0
  8. package/dist/components/BulkBar/BulkBarSummarySelectAll.d.ts +7 -0
  9. package/dist/components/BulkBar/BulkBarSummarySelectAll.js +25 -0
  10. package/dist/components/BulkBar/BulkBarSummarySeparator.d.ts +8 -0
  11. package/dist/components/BulkBar/BulkBarSummarySeparator.js +12 -0
  12. package/dist/components/BulkBar/index.d.ts +5 -0
  13. package/dist/components/BulkBar/index.js +6 -0
  14. package/dist/components/Calendar/CalendarPresetItem.d.ts +9 -3
  15. package/dist/components/Calendar/CalendarPresetItem.js +8 -5
  16. package/dist/components/Calendar/CalendarTrigger.d.ts +12 -3
  17. package/dist/components/Calendar/CalendarTrigger.js +3 -3
  18. package/dist/components/Calendar/index.d.ts +1 -1
  19. package/dist/components/Card/Card.js +2 -0
  20. package/dist/components/CodeSnippet/CodeSnippetCode.js +9 -2
  21. package/dist/components/CodeSnippet/CodeSnippetCopyButton.js +1 -1
  22. package/dist/components/CodeSnippet/CodeSnippetFullscreenButton.js +0 -1
  23. package/dist/components/CodeSnippet/CodeSnippetRoot.d.ts +8 -1
  24. package/dist/components/CodeSnippet/CodeSnippetRoot.js +5 -3
  25. package/dist/components/CodeSnippet/CodeSnippetShowMoreButton.d.ts +12 -0
  26. package/dist/components/CodeSnippet/{internal/ShowMoreButton.js → CodeSnippetShowMoreButton.js} +15 -9
  27. package/dist/components/CodeSnippet/CodeSnippetTab.d.ts +3 -6
  28. package/dist/components/CodeSnippet/CodeSnippetTab.js +5 -7
  29. package/dist/components/CodeSnippet/CodeSnippetWrapButton.js +0 -1
  30. package/dist/components/CodeSnippet/InlineCodeSnippet.d.ts +4 -2
  31. package/dist/components/CodeSnippet/InlineCodeSnippet.js +14 -7
  32. package/dist/components/CodeSnippet/index.d.ts +2 -1
  33. package/dist/components/CodeSnippet/index.js +2 -1
  34. package/dist/components/CodeSnippet/internal/FoldToggle.js +9 -2
  35. package/dist/components/CodeSnippet/lib/foldUtils.d.ts +6 -0
  36. package/dist/components/DateRangeInput/DateRangeEndValue.d.ts +9 -2
  37. package/dist/components/DateRangeInput/DateRangeEndValue.js +3 -2
  38. package/dist/components/DateRangeInput/DateRangeSegmentGroup.d.ts +12 -1
  39. package/dist/components/DateRangeInput/DateRangeSegmentGroup.js +24 -6
  40. package/dist/components/DateRangeInput/DateRangeStartValue.d.ts +11 -4
  41. package/dist/components/DateRangeInput/DateRangeStartValue.js +3 -2
  42. package/dist/components/DateRangeInput/index.d.ts +2 -2
  43. package/dist/components/Drawer/Drawer.d.ts +5 -0
  44. package/dist/components/Drawer/Drawer.js +3 -1
  45. package/dist/components/Drawer/DrawerClose.d.ts +3 -2
  46. package/dist/components/Drawer/DrawerClose.js +6 -3
  47. package/dist/components/Drawer/DrawerHeader.d.ts +1 -1
  48. package/dist/components/Drawer/DrawerHeader.js +4 -1
  49. package/dist/components/Drawer/DrawerResizeHandle.d.ts +7 -2
  50. package/dist/components/Drawer/DrawerResizeHandle.js +31 -6
  51. package/dist/components/Drawer/DrawerRoot.d.ts +3 -0
  52. package/dist/components/Drawer/DrawerRoot.js +3 -1
  53. package/dist/components/Drawer/DrawerTrigger.d.ts +3 -2
  54. package/dist/components/Drawer/DrawerTrigger.js +3 -2
  55. package/dist/components/Drawer/index.d.ts +1 -0
  56. package/dist/components/DropdownMenu/DropdownMenuCheckboxItem.d.ts +2 -1
  57. package/dist/components/DropdownMenu/DropdownMenuCheckboxItem.js +2 -2
  58. package/dist/components/DropdownMenu/DropdownMenuContextTrigger.d.ts +3 -5
  59. package/dist/components/DropdownMenu/DropdownMenuContextTrigger.js +2 -2
  60. package/dist/components/DropdownMenu/DropdownMenuItem.d.ts +2 -1
  61. package/dist/components/DropdownMenu/DropdownMenuItem.js +2 -2
  62. package/dist/components/DropdownMenu/DropdownMenuRadioGroup.d.ts +2 -1
  63. package/dist/components/DropdownMenu/DropdownMenuRadioGroup.js +4 -4
  64. package/dist/components/DropdownMenu/DropdownMenuRadioItem.d.ts +2 -1
  65. package/dist/components/DropdownMenu/DropdownMenuRadioItem.js +2 -2
  66. package/dist/components/DropdownMenu/DropdownMenuTrigger.d.ts +3 -5
  67. package/dist/components/DropdownMenu/DropdownMenuTrigger.js +2 -2
  68. package/dist/components/DropdownMenu/DropdownMenuTriggerItem.d.ts +4 -4
  69. package/dist/components/DropdownMenu/DropdownMenuTriggerItem.js +4 -3
  70. package/dist/components/DropdownMenu/index.d.ts +4 -4
  71. package/dist/components/NavRail/NavRailItem.d.ts +2 -1
  72. package/dist/components/NavRail/NavRailItem.js +6 -4
  73. package/dist/components/Popover/PopoverContent.d.ts +3 -3
  74. package/dist/components/Popover/PopoverContent.js +4 -8
  75. package/dist/components/Popover/PopoverTrigger.d.ts +3 -5
  76. package/dist/components/Popover/PopoverTrigger.js +3 -7
  77. package/dist/components/Popover/index.d.ts +2 -2
  78. package/dist/components/SegmentedControl/SegmentedControlItem.d.ts +6 -4
  79. package/dist/components/SegmentedControl/SegmentedControlItem.js +5 -2
  80. package/dist/components/SegmentedTabs/SegmentedTabsTrigger.d.ts +5 -3
  81. package/dist/components/SegmentedTabs/SegmentedTabsTrigger.js +5 -3
  82. package/dist/components/SegmentedTabs/SegmentedTabsTriggerButton.js +2 -2
  83. package/dist/components/Select/SelectButton.js +2 -2
  84. package/dist/components/Select/SelectClearTrigger.d.ts +2 -1
  85. package/dist/components/Select/SelectClearTrigger.js +2 -2
  86. package/dist/components/Select/SelectInput/SelectInput.d.ts +4 -1
  87. package/dist/components/Select/SelectInput/SelectInput.js +3 -2
  88. package/dist/components/Select/SelectOption.d.ts +2 -1
  89. package/dist/components/Select/SelectOption.js +2 -2
  90. package/dist/components/Select/SelectSearchInput.d.ts +3 -2
  91. package/dist/components/Select/SelectSearchInput.js +3 -2
  92. package/dist/components/Select/index.d.ts +1 -1
  93. package/dist/components/Selection/SelectionBulkBar/SelectionBulkBar.d.ts +1 -1
  94. package/dist/components/Selection/SelectionBulkBar/SelectionBulkBar.js +44 -5
  95. package/dist/components/Selection/index.d.ts +2 -0
  96. package/dist/components/Selection/index.js +2 -1
  97. package/dist/components/Table/Table.js +7 -0
  98. package/dist/components/Table/TableActionBar/TableActionBar.d.ts +7 -1
  99. package/dist/components/Table/TableActionBar/TableActionBar.js +6 -2
  100. package/dist/components/Table/TableActionBar/TableActionBarSelection.d.ts +16 -2
  101. package/dist/components/Table/TableActionBar/TableActionBarSelection.js +52 -10
  102. package/dist/components/Table/TableActionBar/index.d.ts +1 -0
  103. package/dist/components/Table/TableActionBar/index.js +2 -1
  104. package/dist/components/Table/TableColumnMenu/TableColumnMenu.d.ts +37 -0
  105. package/dist/components/Table/TableColumnMenu/TableColumnMenu.js +139 -0
  106. package/dist/components/Table/TableColumnMenu/TableColumnMenuHideItem.d.ts +8 -0
  107. package/dist/components/Table/TableColumnMenu/TableColumnMenuHideItem.js +27 -0
  108. package/dist/components/Table/TableColumnMenu/TableColumnMenuMoveLeftItem.d.ts +8 -0
  109. package/dist/components/Table/TableColumnMenu/TableColumnMenuMoveLeftItem.js +38 -0
  110. package/dist/components/Table/TableColumnMenu/TableColumnMenuMoveRightItem.d.ts +8 -0
  111. package/dist/components/Table/TableColumnMenu/TableColumnMenuMoveRightItem.js +39 -0
  112. package/dist/components/Table/TableColumnMenu/TableColumnMenuPinItem.d.ts +10 -0
  113. package/dist/components/Table/TableColumnMenu/TableColumnMenuPinItem.js +31 -0
  114. package/dist/components/Table/TableColumnMenu/TableColumnMenuSortItem.d.ts +17 -0
  115. package/dist/components/Table/TableColumnMenu/TableColumnMenuSortItem.js +33 -0
  116. package/dist/components/Table/TableColumnMenu/index.d.ts +6 -0
  117. package/dist/components/Table/TableColumnMenu/index.js +7 -0
  118. package/dist/components/Table/TableHeadCell.js +17 -18
  119. package/dist/components/Table/TableInner/TableInner.d.ts +2 -0
  120. package/dist/components/Table/TableInner/TableInner.js +21 -12
  121. package/dist/components/Table/TableInner/TableInnerContainer.d.ts +1 -0
  122. package/dist/components/Table/TableInner/TableInnerContainer.js +5 -3
  123. package/dist/components/Table/TableInner/TableInnerWindow.d.ts +1 -0
  124. package/dist/components/Table/TableInner/TableInnerWindow.js +5 -3
  125. package/dist/components/Table/TableScrollHandler.d.ts +27 -4
  126. package/dist/components/Table/TableScrollHandler.js +99 -68
  127. package/dist/components/Table/TableScrollHandlerContext.d.ts +19 -0
  128. package/dist/components/Table/TableScrollHandlerContext.js +24 -0
  129. package/dist/components/Table/TableScrollHandlerSlot.d.ts +8 -0
  130. package/dist/components/Table/TableScrollHandlerSlot.js +18 -0
  131. package/dist/components/Table/TableSettingsMenu/TableSettingsMenu.d.ts +18 -2
  132. package/dist/components/Table/TableSettingsMenu/TableSettingsMenu.js +105 -95
  133. package/dist/components/Table/TableSettingsMenu/TableSettingsMenuContentContext.d.ts +7 -0
  134. package/dist/components/Table/TableSettingsMenu/TableSettingsMenuContentContext.js +9 -0
  135. package/dist/components/Table/TableSettingsMenu/TableSettingsMenuContext.d.ts +15 -0
  136. package/dist/components/Table/TableSettingsMenu/TableSettingsMenuContext.js +21 -0
  137. package/dist/components/Table/TableSettingsMenu/TableSettingsMenuItem.d.ts +8 -6
  138. package/dist/components/Table/TableSettingsMenu/TableSettingsMenuItem.js +17 -11
  139. package/dist/components/Table/TableSettingsMenu/TableSettingsMenuReset.d.ts +5 -0
  140. package/dist/components/Table/TableSettingsMenu/TableSettingsMenuReset.js +34 -0
  141. package/dist/components/Table/TableSettingsMenu/TableSettingsMenuSearch.d.ts +5 -0
  142. package/dist/components/Table/TableSettingsMenu/TableSettingsMenuSearch.js +17 -0
  143. package/dist/components/Table/TableSettingsMenu/TableSettingsMenuSlot.d.ts +11 -0
  144. package/dist/components/Table/TableSettingsMenu/TableSettingsMenuSlot.js +16 -0
  145. package/dist/components/Table/TableSettingsMenu/index.d.ts +6 -1
  146. package/dist/components/Table/TableSettingsMenu/index.js +6 -1
  147. package/dist/components/Table/TableSortTrigger.d.ts +39 -0
  148. package/dist/components/Table/TableSortTrigger.js +86 -0
  149. package/dist/components/Table/index.d.ts +6 -2
  150. package/dist/components/Table/index.js +7 -3
  151. package/dist/components/Table/lib/collectDirectChildren.d.ts +8 -0
  152. package/dist/components/Table/lib/collectDirectChildren.js +13 -0
  153. package/dist/components/Table/lib/containsDirectChild.d.ts +12 -0
  154. package/dist/components/Table/lib/containsDirectChild.js +12 -0
  155. package/dist/components/Table/lib/index.d.ts +2 -0
  156. package/dist/components/Table/lib/index.js +3 -1
  157. package/dist/components/Tabs/TabsTrigger.d.ts +5 -4
  158. package/dist/components/Tabs/TabsTrigger.js +3 -2
  159. package/dist/components/Tag/Tag.js +2 -1
  160. package/dist/components/Tag/TagClose.d.ts +5 -3
  161. package/dist/components/Tag/TagClose.js +13 -9
  162. package/dist/components/Tag/index.d.ts +1 -1
  163. package/dist/components/Tooltip/Tooltip.js +4 -2
  164. package/dist/components/Tooltip/TooltipContent.d.ts +4 -4
  165. package/dist/components/Tooltip/TooltipContent.js +3 -3
  166. package/dist/components/Tooltip/TooltipTrigger.d.ts +4 -4
  167. package/dist/components/Tooltip/TooltipTrigger.js +2 -2
  168. package/dist/components/Tooltip/index.d.ts +2 -2
  169. package/dist/components/Tour/Tour.d.ts +7 -1
  170. package/dist/components/Tour/Tour.js +8 -2
  171. package/dist/components/Tour/TourClose.d.ts +6 -2
  172. package/dist/components/Tour/TourClose.js +6 -6
  173. package/dist/components/Tour/TourFooter.js +8 -3
  174. package/dist/components/Tour/TourInner.d.ts +7 -1
  175. package/dist/components/Tour/TourInner.js +2 -2
  176. package/dist/components/Tour/index.d.ts +1 -0
  177. package/dist/components/Tour/index.js +2 -1
  178. package/dist/components/Tour/types.d.ts +12 -1
  179. package/dist/hooks/useCopyTooltip.d.ts +1 -3
  180. package/dist/hooks/useCopyTooltip.js +1 -2
  181. package/dist/index.d.ts +2 -2
  182. package/dist/index.js +3 -3
  183. package/dist/metadata/components.json +30183 -16896
  184. package/dist/utils/testId.d.ts +4 -1
  185. package/dist/utils/testId.js +2 -1
  186. package/package.json +1 -1
  187. package/dist/components/CodeSnippet/internal/ShowMoreButton.d.ts +0 -2
  188. package/dist/components/Selection/SelectionBulkBar/SelectionBulkBarSummary.d.ts +0 -2
  189. package/dist/components/Selection/SelectionBulkBar/SelectionBulkBarSummary.js +0 -18
  190. package/dist/components/Table/TableHeadCellMenu.d.ts +0 -9
  191. package/dist/components/Table/TableHeadCellMenu.js +0 -174
@@ -4,9 +4,9 @@ import { Menu } from "@ark-ui/react/menu";
4
4
  import { cn } from "../../utils/cn.js";
5
5
  import { useTestId } from "../../utils/testId.js";
6
6
  import { dropdownMenuItemVariants } from "./classes.js";
7
- const DropdownMenuItem = ({ inset = false, variant = 'default', onSelect, disabled, value, className, ...props })=>{
7
+ const DropdownMenuItem = ({ inset = false, variant = 'default', onSelect, disabled, value, className, 'data-testid': testIdProp, ...props })=>{
8
8
  const autoId = useId();
9
- const testId = useTestId('item');
9
+ const testId = useTestId('item', testIdProp);
10
10
  return /*#__PURE__*/ jsx(Menu.Item, {
11
11
  ...props,
12
12
  value: value ?? autoId,
@@ -1,5 +1,6 @@
1
1
  import { type FC, type HTMLAttributes, type Ref } from 'react';
2
- export interface DropdownMenuRadioGroupProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {
2
+ import { type TestableProps } from '../../utils/testId';
3
+ export interface DropdownMenuRadioGroupProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'>, TestableProps {
3
4
  value?: string;
4
5
  onValueChange?: (details: {
5
6
  value: string;
@@ -2,12 +2,12 @@ import { jsx } from "react/jsx-runtime";
2
2
  import { useId } from "react";
3
3
  import { Menu } from "@ark-ui/react/menu";
4
4
  import { useTestId } from "../../utils/testId.js";
5
- const DropdownMenuRadioGroup = ({ value, onValueChange, ...props })=>{
6
- const id = useId();
7
- const testId = useTestId('radio-group');
5
+ const DropdownMenuRadioGroup = ({ value, onValueChange, id: idProp, 'data-testid': testIdProp, ...props })=>{
6
+ const autoId = useId();
7
+ const testId = useTestId('radio-group', testIdProp);
8
8
  return /*#__PURE__*/ jsx(Menu.RadioItemGroup, {
9
9
  ...props,
10
- id: id,
10
+ id: idProp ?? autoId,
11
11
  value: value,
12
12
  onValueChange: onValueChange,
13
13
  "data-testid": testId
@@ -1,8 +1,9 @@
1
1
  import type { FC, HTMLAttributes, Ref } from 'react';
2
2
  import type { VariantProps } from 'class-variance-authority';
3
+ import { type TestableProps } from '../../utils/testId';
3
4
  import { dropdownMenuItemVariants } from './classes';
4
5
  type DropdownMenuRadioItemVariantsProps = VariantProps<typeof dropdownMenuItemVariants>;
5
- export interface DropdownMenuRadioItemProps extends Omit<HTMLAttributes<HTMLDivElement>, 'id'>, DropdownMenuRadioItemVariantsProps {
6
+ export interface DropdownMenuRadioItemProps extends Omit<HTMLAttributes<HTMLDivElement>, 'id'>, DropdownMenuRadioItemVariantsProps, TestableProps {
6
7
  /** Required — identifies this radio within the group */
7
8
  value: string;
8
9
  disabled?: boolean;
@@ -5,8 +5,8 @@ import { cn } from "../../utils/cn.js";
5
5
  import { useTestId } from "../../utils/testId.js";
6
6
  import { dropdownMenuItemVariants } from "./classes.js";
7
7
  import { DropdownMenuItemIndicator } from "./DropdownMenuItemIndicator.js";
8
- const DropdownMenuRadioItem = ({ children, value, disabled, closeOnSelect, variant = 'default', className, ...props })=>{
9
- const testId = useTestId('radio-item');
8
+ const DropdownMenuRadioItem = ({ children, value, disabled, closeOnSelect, variant = 'default', className, 'data-testid': testIdProp, ...props })=>{
9
+ const testId = useTestId('radio-item', testIdProp);
10
10
  return /*#__PURE__*/ jsxs(Menu.RadioItem, {
11
11
  ...props,
12
12
  value: value,
@@ -1,10 +1,8 @@
1
- import type { FC, HTMLAttributes, ReactNode, Ref } from 'react';
2
- import type { DropdownMenuItemVariantsProps } from './DropdownMenuItem';
3
- interface DropdownMenuTriggerProps extends HTMLAttributes<HTMLButtonElement>, DropdownMenuItemVariantsProps {
1
+ import type { ButtonHTMLAttributes, FC, ReactNode, Ref } from 'react';
2
+ import { type TestableProps } from '../../utils/testId';
3
+ export interface DropdownMenuTriggerProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children' | 'color'>, TestableProps {
4
4
  children: ReactNode;
5
5
  asChild?: boolean;
6
- inset?: boolean;
7
6
  ref?: Ref<HTMLButtonElement>;
8
7
  }
9
8
  export declare const DropdownMenuTrigger: FC<DropdownMenuTriggerProps>;
10
- export {};
@@ -10,8 +10,8 @@ const TriggerStateInjector = ({ children })=>{
10
10
  });
11
11
  return children;
12
12
  };
13
- const DropdownMenuTrigger = ({ variant = 'default', inset = false, asChild, children, ...props })=>{
14
- const testId = useTestId('trigger');
13
+ const DropdownMenuTrigger = ({ asChild, children, 'data-testid': testIdProp, ...props })=>{
14
+ const testId = useTestId('trigger', testIdProp);
15
15
  return /*#__PURE__*/ jsx(Menu.Trigger, {
16
16
  ...props,
17
17
  asChild: asChild,
@@ -1,10 +1,10 @@
1
1
  import type { FC, HTMLAttributes, ReactNode, Ref } from 'react';
2
+ import { type TestableProps } from '../../utils/testId';
2
3
  import type { DropdownMenuItemVariantsProps } from './DropdownMenuItem';
3
- interface DropdownMenuTriggerProps extends HTMLAttributes<HTMLButtonElement>, DropdownMenuItemVariantsProps {
4
+ export interface DropdownMenuTriggerItemProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'>, DropdownMenuItemVariantsProps, TestableProps {
4
5
  children: ReactNode;
5
6
  asChild?: boolean;
6
7
  inset?: boolean;
7
- ref?: Ref<HTMLButtonElement>;
8
+ ref?: Ref<HTMLDivElement>;
8
9
  }
9
- export declare const DropdownMenuTriggerItem: FC<DropdownMenuTriggerProps>;
10
- export {};
10
+ export declare const DropdownMenuTriggerItem: FC<DropdownMenuTriggerItemProps>;
@@ -4,14 +4,15 @@ import { ChevronRight } from "../../icons/index.js";
4
4
  import { cn } from "../../utils/cn.js";
5
5
  import { useTestId } from "../../utils/testId.js";
6
6
  import { dropdownMenuItemVariants } from "./classes.js";
7
- const DropdownMenuTriggerItem = ({ variant = 'default', inset = false, children })=>{
8
- const testId = useTestId('trigger-item');
7
+ const DropdownMenuTriggerItem = ({ variant = 'default', inset = false, children, className, 'data-testid': testIdProp, ...rest })=>{
8
+ const testId = useTestId('trigger-item', testIdProp);
9
9
  return /*#__PURE__*/ jsxs(Menu.TriggerItem, {
10
+ ...rest,
10
11
  "data-testid": testId,
11
12
  className: cn(dropdownMenuItemVariants({
12
13
  variant,
13
14
  inset
14
- })),
15
+ }), className),
15
16
  children: [
16
17
  children,
17
18
  /*#__PURE__*/ jsx("div", {
@@ -2,11 +2,11 @@ export { dropdownMenuClassNames, dropdownMenuItemVariants, dropdownMenuLabelVari
2
2
  export { DropdownMenu } from './DropdownMenu';
3
3
  export { DropdownMenuCheckboxItem, type DropdownMenuCheckboxItemProps, } from './DropdownMenuCheckboxItem';
4
4
  export { DropdownMenuContent } from './DropdownMenuContent';
5
- export { DropdownMenuContextTrigger } from './DropdownMenuContextTrigger';
5
+ export { DropdownMenuContextTrigger, type DropdownMenuContextTriggerProps, } from './DropdownMenuContextTrigger';
6
6
  export { DropdownMenuFooter } from './DropdownMenuFooter';
7
7
  export { DropdownMenuGroup } from './DropdownMenuGroup';
8
8
  export { DropdownMenuInput } from './DropdownMenuInput';
9
- export { DropdownMenuItem } from './DropdownMenuItem';
9
+ export { DropdownMenuItem, type DropdownMenuItemProps } from './DropdownMenuItem';
10
10
  export { DropdownMenuItemContent } from './DropdownMenuItemContent';
11
11
  export { DropdownMenuItemDescription } from './DropdownMenuItemDescription';
12
12
  export { DropdownMenuItemIcon } from './DropdownMenuItemIcon';
@@ -16,5 +16,5 @@ export { DropdownMenuRadioGroup, type DropdownMenuRadioGroupProps, } from './Dro
16
16
  export { DropdownMenuRadioItem, type DropdownMenuRadioItemProps, } from './DropdownMenuRadioItem';
17
17
  export { DropdownMenuSeparator } from './DropdownMenuSeparator';
18
18
  export { DropdownMenuShortcut } from './DropdownMenuShortcut';
19
- export { DropdownMenuTrigger } from './DropdownMenuTrigger';
20
- export { DropdownMenuTriggerItem } from './DropdownMenuTriggerItem';
19
+ export { DropdownMenuTrigger, type DropdownMenuTriggerProps } from './DropdownMenuTrigger';
20
+ export { DropdownMenuTriggerItem, type DropdownMenuTriggerItemProps, } from './DropdownMenuTriggerItem';
@@ -1,6 +1,7 @@
1
1
  import { type AnchorHTMLAttributes, type ComponentType, type FC, type ReactNode, type Ref } from 'react';
2
2
  import type { SvgIconProps } from '../../icons/SvgIcon';
3
- export interface NavRailItemProps extends AnchorHTMLAttributes<HTMLAnchorElement> {
3
+ import { type TestableProps } from '../../utils/testId';
4
+ export interface NavRailItemProps extends AnchorHTMLAttributes<HTMLAnchorElement>, TestableProps {
4
5
  ref?: Ref<HTMLAnchorElement>;
5
6
  asChild?: boolean;
6
7
  icon: ComponentType<SvgIconProps>;
@@ -1,7 +1,7 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { Fragment, useRef } from "react";
3
3
  import { composeRefs } from "@radix-ui/react-compose-refs";
4
- import { Slot } from "@radix-ui/react-slot";
4
+ import { Slot, Slottable } from "@radix-ui/react-slot";
5
5
  import { cn } from "../../utils/cn.js";
6
6
  import { useTestId } from "../../utils/testId.js";
7
7
  import { Kbd } from "../Kbd/index.js";
@@ -11,9 +11,9 @@ import { TooltipTrigger } from "../Tooltip/TooltipTrigger.js";
11
11
  import { navRailItemVariants } from "./classes.js";
12
12
  import { useNavRailContext } from "./NavRailContext.js";
13
13
  import { useShortcut } from "./useShortcut.js";
14
- const NavRailItem = ({ ref, asChild = false, icon: Icon, label, shortcut, active = false, className, children, ...props })=>{
14
+ const NavRailItem = ({ ref, asChild = false, icon: Icon, label, shortcut, active = false, className, children, 'data-testid': testIdProp, ...props })=>{
15
15
  const { collapsed } = useNavRailContext();
16
- const testId = useTestId('item');
16
+ const testId = useTestId('item', testIdProp);
17
17
  const Comp = asChild ? Slot : 'a';
18
18
  const internalRef = useRef(null);
19
19
  useShortcut(shortcut, internalRef);
@@ -37,7 +37,9 @@ const NavRailItem = ({ ref, asChild = false, icon: Icon, label, shortcut, active
37
37
  className: cn('truncate whitespace-nowrap transition-[opacity,width] duration-200 pl-8'),
38
38
  children: label
39
39
  }),
40
- children
40
+ /*#__PURE__*/ jsx(Slottable, {
41
+ children: children
42
+ })
41
43
  ]
42
44
  });
43
45
  return /*#__PURE__*/ jsxs(Tooltip, {
@@ -1,11 +1,11 @@
1
- import { type FC, type ReactNode } from 'react';
1
+ import { type FC, type HTMLAttributes, type ReactNode } from 'react';
2
+ import { type TestableProps } from '../../utils/testId';
2
3
  import type { PopoverSizeDimension } from './types';
3
- export interface PopoverContentProps {
4
+ export interface PopoverContentProps extends Omit<HTMLAttributes<HTMLDivElement>, 'id' | 'style'>, TestableProps {
4
5
  children: ReactNode;
5
6
  minHeight?: PopoverSizeDimension;
6
7
  maxHeight?: PopoverSizeDimension;
7
8
  minWidth?: PopoverSizeDimension;
8
9
  maxWidth?: PopoverSizeDimension;
9
- 'data-testid'?: string;
10
10
  }
11
11
  export declare const PopoverContent: FC<PopoverContentProps>;
@@ -6,9 +6,8 @@ import { cn } from "../../utils/cn.js";
6
6
  import { useTestId } from "../../utils/testId.js";
7
7
  import { ScrollArea, ScrollAreaContent, ScrollAreaScrollbar, ScrollAreaViewport } from "../ScrollArea/index.js";
8
8
  import { POPOVER_MAX_HEIGHT, POPOVER_MAX_WIDTH, POPOVER_MIN_HEIGHT, POPOVER_MIN_WIDTH } from "./constants.js";
9
- const PopoverContent = ({ children, minHeight = POPOVER_MIN_HEIGHT, maxHeight = POPOVER_MAX_HEIGHT, minWidth = POPOVER_MIN_WIDTH, maxWidth = POPOVER_MAX_WIDTH, 'data-testid': testIdProp })=>{
10
- const contextTestId = useTestId('content');
11
- const testId = testIdProp ?? contextTestId;
9
+ const PopoverContent = ({ children, minHeight = POPOVER_MIN_HEIGHT, maxHeight = POPOVER_MAX_HEIGHT, minWidth = POPOVER_MIN_WIDTH, maxWidth = POPOVER_MAX_WIDTH, className, 'data-testid': testIdProp, ...rest })=>{
10
+ const testId = useTestId('content', testIdProp);
12
11
  const { getContentProps } = usePopoverContext();
13
12
  const { id } = getContentProps();
14
13
  const style = useMemo(()=>({
@@ -22,17 +21,14 @@ const PopoverContent = ({ children, minHeight = POPOVER_MIN_HEIGHT, maxHeight =
22
21
  minWidth,
23
22
  maxWidth
24
23
  ]);
25
- const handleClick = (event)=>{
26
- event.stopPropagation();
27
- };
28
24
  return /*#__PURE__*/ jsx(Portal, {
29
25
  children: /*#__PURE__*/ jsx(Popover.Positioner, {
30
26
  children: /*#__PURE__*/ jsx(Popover.Content, {
27
+ ...rest,
31
28
  id: id,
32
29
  "data-testid": testId,
33
30
  style: style,
34
- className: cn('flex flex-col', 'min-w-(--popover-min-width)', 'max-w-[clamp(var(--popover-min-width),var(--available-width),var(--popover-max-width))]', 'min-h-(--popover-min-height)', 'max-h-[clamp(var(--popover-min-height),var(--available-height),var(--popover-max-height))]', 'p-12 bg-bg-surface-2 rounded-12 border border-border-primary-light shadow-md text-text-primary z-50', '[&_[data-part=viewport]]:overscroll-contain', 'animate-in fade-in-0 zoom-in-95 origin-[--radix-tooltip-content-transform-origin]', 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95', 'data-[side=bottom]:slide-in-from-top-2', 'data-[side=left]:slide-in-from-right-2', 'data-[side=right]:slide-in-from-left-2', 'data-[side=top]:slide-in-from-bottom-2'),
35
- onClick: handleClick,
31
+ className: cn('flex flex-col', 'min-w-(--popover-min-width)', 'max-w-[clamp(var(--popover-min-width),var(--available-width),var(--popover-max-width))]', 'min-h-(--popover-min-height)', 'max-h-[clamp(var(--popover-min-height),var(--available-height),var(--popover-max-height))]', 'p-12 bg-bg-surface-2 rounded-12 border border-border-primary-light shadow-md text-text-primary z-50', '[&_[data-part=viewport]]:overscroll-contain', 'animate-in fade-in-0 zoom-in-95 origin-[--radix-tooltip-content-transform-origin]', 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95', 'data-[side=bottom]:slide-in-from-top-2', 'data-[side=left]:slide-in-from-right-2', 'data-[side=right]:slide-in-from-left-2', 'data-[side=top]:slide-in-from-bottom-2', className),
36
32
  asChild: true,
37
33
  children: /*#__PURE__*/ jsxs(ScrollArea, {
38
34
  ids: {
@@ -1,10 +1,8 @@
1
- import type { FC, HTMLAttributes, ReactNode, Ref } from 'react';
2
- type PopoverNativeProps = HTMLAttributes<HTMLButtonElement>;
3
- interface PopoverTriggerBaseProps {
1
+ import type { ButtonHTMLAttributes, FC, ReactNode, Ref } from 'react';
2
+ import { type TestableProps } from '../../utils/testId';
3
+ export interface PopoverTriggerProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children' | 'color'>, TestableProps {
4
4
  children: ReactNode;
5
5
  asChild?: boolean;
6
6
  ref?: Ref<HTMLButtonElement>;
7
7
  }
8
- export type PopoverTriggerProps = PopoverNativeProps & PopoverTriggerBaseProps;
9
8
  export declare const PopoverTrigger: FC<PopoverTriggerProps>;
10
- export {};
@@ -1,16 +1,12 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { Popover } from "@ark-ui/react/popover";
3
3
  import { useTestId } from "../../utils/testId.js";
4
- const PopoverTrigger = ({ asChild = false, ...props })=>{
5
- const testId = useTestId('trigger');
6
- const handleClick = (event)=>{
7
- event.stopPropagation();
8
- };
4
+ const PopoverTrigger = ({ asChild = false, 'data-testid': testIdProp, ...props })=>{
5
+ const testId = useTestId('trigger', testIdProp);
9
6
  return /*#__PURE__*/ jsx(Popover.Trigger, {
10
7
  ...props,
11
8
  asChild: asChild,
12
- "data-testid": testId,
13
- onClick: handleClick
9
+ "data-testid": testId
14
10
  });
15
11
  };
16
12
  PopoverTrigger.displayName = 'PopoverTrigger';
@@ -1,4 +1,4 @@
1
1
  export { Popover } from './Popover';
2
- export { PopoverContent } from './PopoverContent';
3
- export { PopoverTrigger } from './PopoverTrigger';
2
+ export { PopoverContent, type PopoverContentProps } from './PopoverContent';
3
+ export { PopoverTrigger, type PopoverTriggerProps } from './PopoverTrigger';
4
4
  export type { PopoverSizeDimension } from './types';
@@ -1,17 +1,19 @@
1
- import type { FC, PropsWithChildren, Ref } from 'react';
1
+ import type { FC, KeyboardEvent, LabelHTMLAttributes, PropsWithChildren, Ref } from 'react';
2
+ import { type TestableProps } from '../../utils/testId';
3
+ type SegmentedControlItemNativeProps = Omit<LabelHTMLAttributes<HTMLLabelElement>, 'children' | 'onKeyDown'>;
2
4
  /**
3
5
  * Individual item within a SegmentedControl.
4
6
  *
5
7
  * Built on Ark UI's SegmentGroup.Item with radio input behavior and accessibility.
6
8
  * Selection state is managed by the parent SegmentedControl.
7
9
  */
8
- export interface SegmentedControlItemProps {
10
+ export interface SegmentedControlItemProps extends SegmentedControlItemNativeProps, TestableProps {
9
11
  /** Unique value that identifies this item */
10
12
  value: string;
11
13
  /** Whether this item is disabled */
12
14
  disabled?: boolean;
13
- /** Additional CSS class */
14
- className?: string;
15
15
  ref?: Ref<HTMLLabelElement>;
16
+ onKeyDown?: (event: KeyboardEvent<HTMLLabelElement>) => void;
16
17
  }
17
18
  export declare const SegmentedControlItem: FC<PropsWithChildren<SegmentedControlItemProps>>;
19
+ export {};
@@ -3,12 +3,15 @@ import { SegmentGroup } from "@ark-ui/react/segment-group";
3
3
  import { cn } from "../../utils/cn.js";
4
4
  import { useTestId } from "../../utils/testId.js";
5
5
  import { segmentedControlItemClassNamesBase } from "./classes.js";
6
- const SegmentedControlItem = ({ className, value, disabled, children, ref })=>{
7
- const testId = useTestId('item');
6
+ const SegmentedControlItem = ({ className, value, disabled, children, ref, onKeyDown, 'data-testid': testIdProp, ...rest })=>{
7
+ const testId = useTestId('item', testIdProp);
8
8
  const handleKeyDown = (event)=>{
9
+ onKeyDown?.(event);
10
+ if (event.defaultPrevented) return;
9
11
  if ((' ' === event.key || 'Enter' === event.key) && !disabled) event.currentTarget.click();
10
12
  };
11
13
  return /*#__PURE__*/ jsxs(SegmentGroup.Item, {
14
+ ...rest,
12
15
  ref: ref,
13
16
  value: value,
14
17
  disabled: disabled,
@@ -1,10 +1,12 @@
1
- import type { FC, ReactNode } from 'react';
2
- export interface SegmentedTabsTriggerProps {
1
+ import type { ButtonHTMLAttributes, FC, ReactNode } from 'react';
2
+ import { type TestableProps } from '../../utils/testId';
3
+ type SegmentedTabsTriggerNativeProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'value' | 'children'>;
4
+ export interface SegmentedTabsTriggerProps extends SegmentedTabsTriggerNativeProps, TestableProps {
3
5
  children: ReactNode;
4
6
  value: string;
5
- disabled?: boolean;
6
7
  asChild?: boolean;
7
8
  /** Show a small brand-colored dot indicator next to the tab label */
8
9
  indicator?: boolean;
9
10
  }
10
11
  export declare const SegmentedTabsTrigger: FC<SegmentedTabsTriggerProps>;
12
+ export {};
@@ -3,11 +3,12 @@ import { Tabs } from "@ark-ui/react/tabs";
3
3
  import { cn } from "../../utils/cn.js";
4
4
  import { useTestId } from "../../utils/testId.js";
5
5
  import { segmentedControlItemClassNamesBase } from "../SegmentedControl/index.js";
6
- const SegmentedTabsTrigger = ({ children, value, disabled = false, asChild = false, indicator = false })=>{
7
- const testId = useTestId('trigger');
6
+ const SegmentedTabsTrigger = ({ children, value, disabled = false, asChild = false, indicator = false, className, 'data-testid': testIdProp, ...rest })=>{
7
+ const testId = useTestId('trigger', testIdProp);
8
8
  return /*#__PURE__*/ jsxs(Tabs.Trigger, {
9
+ ...rest,
9
10
  "data-testid": testId,
10
- className: cn(segmentedControlItemClassNamesBase, 'group z-1', '[&:has([data-slot=segmented-tabs-trigger-button])]:px-20', '[&:has([data-slot=segmented-tabs-trigger-button])]:overflow-visible', '[&:has([data-slot=segmented-tabs-trigger-button])]:before:absolute', '[&:has([data-slot=segmented-tabs-trigger-button])]:before:right-0', '[&:has([data-slot=segmented-tabs-trigger-button])]:before:w-32', '[&:has([data-slot=segmented-tabs-trigger-button])]:before:h-24', '[&:has([data-slot=segmented-tabs-trigger-button])]:before:rounded-r-8', '[&:has([data-slot=segmented-tabs-trigger-button])]:before:transition-opacity', '[&:has([data-slot=segmented-tabs-trigger-button])]:before:opacity-0', '[&:has([data-slot=segmented-tabs-trigger-button]):hover]:before:opacity-100', '[&:has([data-slot=segmented-tabs-trigger-button]):active]:before:opacity-100', '[&:has([data-slot=segmented-tabs-trigger-button][data-state=open])]:before:opacity-100', '[&:has([data-slot=segmented-tabs-trigger-button])]:before:bg-linear-to-r', '[&:has([data-slot=segmented-tabs-trigger-button])]:before:from-transparent', '[&:has([data-slot=segmented-tabs-trigger-button])]:before:to-20%', '[&:has([data-slot=segmented-tabs-trigger-button])]:before:to-bg-primary', '[[data-selected]:has([data-slot=segmented-tabs-trigger-button])]:before:to-bg-surface-3', '[&:has([data-slot=segmented-tabs-trigger-button][data-state=open])]:before:to-bg-primary', '[[data-selected]:has([data-slot=segmented-tabs-trigger-button][data-state=open])]:before:to-bg-surface-3', '**:data-[slot=segmented-tabs-trigger-button]:absolute', '**:data-[slot=segmented-tabs-trigger-button]:right-2', '**:data-[slot=segmented-tabs-trigger-button]:top-1/2', '**:data-[slot=segmented-tabs-trigger-button]:-translate-y-1/2 ', '**:data-[slot=segmented-tabs-trigger-button]:z-1', '**:data-[slot=segmented-tabs-trigger-button]:overflow-visible', '**:data-[slot=segmented-tabs-trigger-button]:opacity-0', '**:data-[slot=segmented-tabs-trigger-button]:data-[state=open]:opacity-100', 'not-data-disabled:not-data-selected:hover:text-text-primary', 'hover:[&:not([data-disabled])_[data-slot=segmented-tabs-trigger-button]]:opacity-100', 'data-selected:text-text-primary'),
11
+ className: cn(segmentedControlItemClassNamesBase, 'group z-1', '[&:has([data-slot=segmented-tabs-trigger-button])]:px-20', '[&:has([data-slot=segmented-tabs-trigger-button])]:overflow-visible', '[&:has([data-slot=segmented-tabs-trigger-button])]:before:absolute', '[&:has([data-slot=segmented-tabs-trigger-button])]:before:right-0', '[&:has([data-slot=segmented-tabs-trigger-button])]:before:w-32', '[&:has([data-slot=segmented-tabs-trigger-button])]:before:h-24', '[&:has([data-slot=segmented-tabs-trigger-button])]:before:rounded-r-8', '[&:has([data-slot=segmented-tabs-trigger-button])]:before:transition-opacity', '[&:has([data-slot=segmented-tabs-trigger-button])]:before:opacity-0', '[&:has([data-slot=segmented-tabs-trigger-button]):hover]:before:opacity-100', '[&:has([data-slot=segmented-tabs-trigger-button]):active]:before:opacity-100', '[&:has([data-slot=segmented-tabs-trigger-button][data-state=open])]:before:opacity-100', '[&:has([data-slot=segmented-tabs-trigger-button])]:before:bg-linear-to-r', '[&:has([data-slot=segmented-tabs-trigger-button])]:before:from-transparent', '[&:has([data-slot=segmented-tabs-trigger-button])]:before:to-20%', '[&:has([data-slot=segmented-tabs-trigger-button])]:before:to-bg-primary', '[[data-selected]:has([data-slot=segmented-tabs-trigger-button])]:before:to-bg-surface-3', '[&:has([data-slot=segmented-tabs-trigger-button][data-state=open])]:before:to-bg-primary', '[[data-selected]:has([data-slot=segmented-tabs-trigger-button][data-state=open])]:before:to-bg-surface-3', '**:data-[slot=segmented-tabs-trigger-button]:absolute', '**:data-[slot=segmented-tabs-trigger-button]:right-2', '**:data-[slot=segmented-tabs-trigger-button]:top-1/2', '**:data-[slot=segmented-tabs-trigger-button]:-translate-y-1/2 ', '**:data-[slot=segmented-tabs-trigger-button]:z-1', '**:data-[slot=segmented-tabs-trigger-button]:overflow-visible', '**:data-[slot=segmented-tabs-trigger-button]:opacity-0', '**:data-[slot=segmented-tabs-trigger-button]:data-[state=open]:opacity-100', 'not-data-disabled:not-data-selected:hover:text-text-primary', 'hover:[&:not([data-disabled])_[data-slot=segmented-tabs-trigger-button]]:opacity-100', 'data-selected:text-text-primary', className),
11
12
  value: value,
12
13
  disabled: disabled,
13
14
  asChild: asChild,
@@ -21,4 +22,5 @@ const SegmentedTabsTrigger = ({ children, value, disabled = false, asChild = fal
21
22
  ]
22
23
  });
23
24
  };
25
+ SegmentedTabsTrigger.displayName = 'SegmentedTabsTrigger';
24
26
  export { SegmentedTabsTrigger };
@@ -2,8 +2,8 @@ import { jsx } from "react/jsx-runtime";
2
2
  import { Ellipsis } from "../../icons/index.js";
3
3
  import { useTestId } from "../../utils/testId.js";
4
4
  import { Button } from "../Button/index.js";
5
- const SegmentedTabsTriggerButton = (props)=>{
6
- const testId = useTestId('trigger-button');
5
+ const SegmentedTabsTriggerButton = ({ 'data-testid': testIdProp, ...props })=>{
6
+ const testId = useTestId('trigger-button', testIdProp);
7
7
  return /*#__PURE__*/ jsx(Button, {
8
8
  ...props,
9
9
  "data-testid": testId,
@@ -6,8 +6,8 @@ import { SelectArrow } from "./SelectArrow.js";
6
6
  import { useSelectSharedContext } from "./SelectSharedContext/index.js";
7
7
  import { SelectValueIcon } from "./SelectValueIcon.js";
8
8
  import { SelectValueText } from "./SelectValueText.js";
9
- const SelectButton = ({ placeholder = 'Choose...', variant = 'outline', color = 'neutral', ...props })=>{
10
- const testId = useTestId('button');
9
+ const SelectButton = ({ placeholder = 'Choose...', variant = 'outline', color = 'neutral', 'data-testid': testIdProp, ...props })=>{
10
+ const testId = useTestId('button', testIdProp);
11
11
  const { loading } = useSelectSharedContext();
12
12
  const { disabled } = useSelectContext();
13
13
  return /*#__PURE__*/ jsx(Select.Control, {
@@ -1,9 +1,10 @@
1
1
  import type { FC } from 'react';
2
2
  import { Select as ArkUiSelect } from '@ark-ui/react/select';
3
3
  import type { VariantProps } from 'class-variance-authority';
4
+ import { type TestableProps } from '../../utils/testId';
4
5
  import { linkVariants } from '../Link';
5
6
  type SelectClearTriggerNativeProps = Omit<ArkUiSelect.TriggerProps, 'className' | 'type'>;
6
7
  type SelectClearTriggerVariantsProps = VariantProps<typeof linkVariants>;
7
- type SelectClearTriggerProps = SelectClearTriggerNativeProps & SelectClearTriggerVariantsProps;
8
+ type SelectClearTriggerProps = SelectClearTriggerNativeProps & SelectClearTriggerVariantsProps & TestableProps;
8
9
  export declare const SelectClearTrigger: FC<SelectClearTriggerProps>;
9
10
  export {};
@@ -3,8 +3,8 @@ import { Select } from "@ark-ui/react/select";
3
3
  import { cn } from "../../utils/cn.js";
4
4
  import { useTestId } from "../../utils/testId.js";
5
5
  import { linkVariants } from "../Link/index.js";
6
- const SelectClearTrigger = ({ type = 'default', size = 'sm', weight = 'medium', ...props })=>{
7
- const testId = useTestId('clear-trigger');
6
+ const SelectClearTrigger = ({ type = 'default', size = 'sm', weight = 'medium', 'data-testid': testIdProp, ...props })=>{
7
+ const testId = useTestId('clear-trigger', testIdProp);
8
8
  return /*#__PURE__*/ jsx(Select.ClearTrigger, {
9
9
  ...props,
10
10
  "data-testid": testId,
@@ -1,5 +1,8 @@
1
1
  import type { FC } from 'react';
2
2
  import { type SelectValueTextProps } from '../SelectValueText';
3
- type SelectInputProps = Pick<SelectValueTextProps, 'placeholder'>;
3
+ interface SelectInputBaseProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children' | 'color'> {
4
+ 'data-testid'?: string;
5
+ }
6
+ type SelectInputProps = SelectInputBaseProps & Pick<SelectValueTextProps, 'placeholder'>;
4
7
  export declare const SelectInput: FC<SelectInputProps>;
5
8
  export {};
@@ -50,7 +50,7 @@ const selectInputVariants = cva([
50
50
  }
51
51
  ]
52
52
  });
53
- const SelectInput = ({ placeholder = 'Choose...' })=>{
53
+ const SelectInput = ({ placeholder = 'Choose...', className, ...rest })=>{
54
54
  const { selectedItems, disabled, multiple } = useSelectContext();
55
55
  const isEmpty = selectedItems.length <= 0;
56
56
  return /*#__PURE__*/ jsx(Select.Control, {
@@ -58,10 +58,11 @@ const SelectInput = ({ placeholder = 'Choose...' })=>{
58
58
  children: /*#__PURE__*/ jsx(Select.Trigger, {
59
59
  asChild: true,
60
60
  children: /*#__PURE__*/ jsxs("div", {
61
+ ...rest,
61
62
  className: cn(selectInputVariants({
62
63
  empty: isEmpty,
63
64
  multiple
64
- }), 'w-full max-w-full gap-8'),
65
+ }), 'w-full max-w-full gap-8', className),
65
66
  tabIndex: disabled ? -1 : 0,
66
67
  children: [
67
68
  multiple && !isEmpty ? /*#__PURE__*/ jsx(OverflowList, {
@@ -1,12 +1,13 @@
1
1
  import type { FC } from 'react';
2
2
  import { Select as ArkUiSelect, type CollectionItem } from '@ark-ui/react/select';
3
3
  import type { VariantProps } from 'class-variance-authority';
4
+ import { type TestableProps } from '../../utils/testId';
4
5
  import { dropdownMenuItemVariants } from '../DropdownMenu';
5
6
  type SelectOptionNativeProps = Omit<ArkUiSelect.ItemProps, 'className'>;
6
7
  type SelectOptionVariantsProps = VariantProps<typeof dropdownMenuItemVariants>;
7
8
  export interface SelectOptionBaseProps {
8
9
  item: CollectionItem;
9
10
  }
10
- type SelectOptionProps = SelectOptionNativeProps & SelectOptionVariantsProps & SelectOptionBaseProps;
11
+ type SelectOptionProps = SelectOptionNativeProps & SelectOptionVariantsProps & SelectOptionBaseProps & TestableProps;
11
12
  export declare const SelectOption: FC<SelectOptionProps>;
12
13
  export {};
@@ -3,8 +3,8 @@ import { Select } from "@ark-ui/react/select";
3
3
  import { cn } from "../../utils/cn.js";
4
4
  import { useTestId } from "../../utils/testId.js";
5
5
  import { dropdownMenuItemVariants } from "../DropdownMenu/index.js";
6
- const SelectOption = ({ variant = 'default', ...props })=>{
7
- const testId = useTestId('option');
6
+ const SelectOption = ({ variant = 'default', 'data-testid': testIdProp, ...props })=>{
7
+ const testId = useTestId('option', testIdProp);
8
8
  return /*#__PURE__*/ jsx(Select.Item, {
9
9
  ...props,
10
10
  "data-testid": testId,
@@ -1,5 +1,6 @@
1
- import type { FC } from 'react';
2
- export interface SelectSearchInputProps {
1
+ import type { FC, HTMLAttributes } from 'react';
2
+ import { type TestableProps } from '../../utils/testId';
3
+ export interface SelectSearchInputProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'onChange' | 'color'>, TestableProps {
3
4
  value: string;
4
5
  onChange: (value: string) => void;
5
6
  }
@@ -3,12 +3,13 @@ import { Search } from "../../icons/index.js";
3
3
  import { useTestId } from "../../utils/testId.js";
4
4
  import { Input } from "../Input/index.js";
5
5
  import { InputGroup, InputGroupAddon } from "../InputGroup/index.js";
6
- const SelectSearchInput = ({ value, onChange })=>{
7
- const testId = useTestId('search-input');
6
+ const SelectSearchInput = ({ value, onChange, 'data-testid': testIdProp, ...rest })=>{
7
+ const testId = useTestId('search-input', testIdProp);
8
8
  const handleChange = (event)=>{
9
9
  onChange(event.target.value);
10
10
  };
11
11
  return /*#__PURE__*/ jsxs(InputGroup, {
12
+ ...rest,
12
13
  "data-testid": testId,
13
14
  children: [
14
15
  /*#__PURE__*/ jsx(InputGroupAddon, {
@@ -14,6 +14,6 @@ export { SelectOptionDescription } from './SelectOptionDescription';
14
14
  export { SelectOptionIndicator } from './SelectOptionIndicator';
15
15
  export { SelectOptionText } from './SelectOptionText';
16
16
  export { SelectPositioner } from './SelectPositioner';
17
- export { SelectSearchInput } from './SelectSearchInput';
17
+ export { SelectSearchInput, type SelectSearchInputProps } from './SelectSearchInput';
18
18
  export { SelectSeparator, type SelectSeparatorProps } from './SelectSeparator';
19
19
  export type { SelectDataItem } from './types';
@@ -1,4 +1,4 @@
1
- import type { FC, ReactNode } from 'react';
1
+ import { type FC, type ReactNode } from 'react';
2
2
  export type SelectionBulkBarPlacement = 'floating' | 'absolute';
3
3
  export interface SelectionBulkBarProps {
4
4
  /** Override the toolbar accessible name. Defaults to "Bulk actions". */
@@ -1,17 +1,56 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { Children, isValidElement } from "react";
2
3
  import { Portal } from "@ark-ui/react/portal";
3
4
  import { Presence } from "@ark-ui/react/presence";
4
5
  import { useTestId } from "../../../utils/testId.js";
6
+ import { BulkBarSummary, BulkBarSummaryClear, BulkBarSummaryCount, BulkBarSummarySelectAll, BulkBarSummarySeparator } from "../../BulkBar/index.js";
5
7
  import { HStack } from "../../Stack/index.js";
6
8
  import { selectionBulkBarVariants } from "../classes.js";
7
9
  import { useSelectionContext } from "../useSelectionContext.js";
8
- import { SelectionBulkBarSummary } from "./SelectionBulkBarSummary.js";
9
10
  const TEST_ID_SLOT = 'bulk-bar';
10
11
  const DEFAULT_ARIA_LABEL = 'Bulk actions';
12
+ const partitionChildren = (children)=>{
13
+ let summary;
14
+ const actions = [];
15
+ for (const child of Children.toArray(children)){
16
+ if (/*#__PURE__*/ isValidElement(child) && child.type === BulkBarSummary && !summary) {
17
+ summary = child;
18
+ continue;
19
+ }
20
+ actions.push(child);
21
+ }
22
+ return {
23
+ summary,
24
+ actions
25
+ };
26
+ };
27
+ const DefaultSummary = ()=>{
28
+ const { selectedIds, isAllSelected, selectAll, clear } = useSelectionContext();
29
+ return /*#__PURE__*/ jsxs(BulkBarSummary, {
30
+ children: [
31
+ /*#__PURE__*/ jsx(BulkBarSummaryCount, {
32
+ count: selectedIds.size
33
+ }),
34
+ /*#__PURE__*/ jsxs(HStack, {
35
+ gap: 6,
36
+ children: [
37
+ /*#__PURE__*/ jsx(BulkBarSummarySelectAll, {
38
+ onClick: selectAll,
39
+ disabled: isAllSelected
40
+ }),
41
+ /*#__PURE__*/ jsx(BulkBarSummarySeparator, {}),
42
+ /*#__PURE__*/ jsx(BulkBarSummaryClear, {
43
+ onClick: clear
44
+ })
45
+ ]
46
+ })
47
+ ]
48
+ });
49
+ };
11
50
  const SelectionBulkBar = ({ 'aria-label': ariaLabel = DEFAULT_ARIA_LABEL, 'data-testid': testIdProp, placement = 'floating', children })=>{
12
51
  const { selectedIds } = useSelectionContext();
13
- const fallbackTestId = useTestId(TEST_ID_SLOT);
14
- const testId = testIdProp ?? fallbackTestId;
52
+ const testId = useTestId(TEST_ID_SLOT, testIdProp);
53
+ const { summary, actions } = partitionChildren(children);
15
54
  const bar = /*#__PURE__*/ jsx(Presence, {
16
55
  present: selectedIds.size > 0,
17
56
  asChild: true,
@@ -24,11 +63,11 @@ const SelectionBulkBar = ({ 'aria-label': ariaLabel = DEFAULT_ARIA_LABEL, 'data-
24
63
  placement
25
64
  }),
26
65
  children: [
27
- /*#__PURE__*/ jsx(SelectionBulkBarSummary, {}),
66
+ summary ?? /*#__PURE__*/ jsx(DefaultSummary, {}),
28
67
  /*#__PURE__*/ jsx(HStack, {
29
68
  gap: 8,
30
69
  align: "center",
31
- children: children
70
+ children: actions
32
71
  })
33
72
  ]
34
73
  })