reshaped 3.8.4 → 3.9.0-canary.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 (40) hide show
  1. package/dist/bundle.css +1 -1
  2. package/dist/bundle.js +11 -11
  3. package/dist/components/Card/Card.d.ts +1 -1
  4. package/dist/components/Card/tests/Card.stories.d.ts +1 -1
  5. package/dist/components/Divider/Divider.js +3 -3
  6. package/dist/components/Divider/Divider.module.css +1 -1
  7. package/dist/components/Divider/Divider.types.d.ts +6 -0
  8. package/dist/components/Divider/tests/Divider.stories.d.ts +2 -0
  9. package/dist/components/Divider/tests/Divider.stories.js +26 -0
  10. package/dist/components/DropdownMenu/DropdownMenu.types.d.ts +1 -1
  11. package/dist/components/Flyout/Flyout.types.d.ts +2 -0
  12. package/dist/components/Flyout/FlyoutControlled.js +5 -4
  13. package/dist/components/Flyout/tests/Flyout.stories.d.ts +1 -0
  14. package/dist/components/Flyout/tests/Flyout.stories.js +30 -0
  15. package/dist/components/Popover/Popover.types.d.ts +1 -1
  16. package/dist/components/Select/Select.module.css +1 -1
  17. package/dist/components/Select/Select.types.d.ts +16 -11
  18. package/dist/components/Select/SelectCustomControlled.js +27 -10
  19. package/dist/components/Select/SelectGroup.d.ts +4 -0
  20. package/dist/components/Select/SelectGroup.js +10 -0
  21. package/dist/components/Select/SelectTrigger.js +1 -1
  22. package/dist/components/Select/index.d.ts +3 -2
  23. package/dist/components/Select/index.js +3 -2
  24. package/dist/components/Select/tests/Select.stories.d.ts +7 -1
  25. package/dist/components/Select/tests/Select.stories.js +102 -6
  26. package/dist/components/Tabs/TabsContext.d.ts +1 -1
  27. package/dist/components/TextArea/TextArea.module.css +1 -1
  28. package/dist/components/TextArea/TextArea.types.d.ts +1 -1
  29. package/dist/components/TextArea/tests/TextArea.stories.js +4 -0
  30. package/dist/components/TextField/TextField.module.css +1 -1
  31. package/dist/components/TextField/TextField.types.d.ts +1 -1
  32. package/dist/components/TextField/tests/TextField.stories.d.ts +1 -0
  33. package/dist/components/TextField/tests/TextField.stories.js +15 -0
  34. package/dist/components/Tooltip/Tooltip.types.d.ts +1 -1
  35. package/dist/config/postcss.cjs +4 -4
  36. package/dist/config/postcss.d.cts +3 -3
  37. package/dist/config/tailwind.d.ts +1 -1
  38. package/package.json +1 -1
  39. package/dist/components/Select/SelectOptionGroup.d.ts +0 -4
  40. package/dist/components/Select/SelectOptionGroup.js +0 -9
@@ -9,7 +9,7 @@ declare const Card: React.ForwardRefExoticComponent<{
9
9
  href?: string;
10
10
  as?: keyof React.JSX.IntrinsicElements | undefined;
11
11
  className?: import("../../types/global").ClassName;
12
- attributes?: (import("../..").Attributes<keyof React.JSX.IntrinsicElements> & ((import("../..").Attributes<"button"> & Omit<React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>, "form" | "slot" | "style" | "title" | "disabled" | "key" | "value" | "hidden" | "color" | "content" | "children" | "className" | "ref" | "aria-orientation" | "role" | "suppressHydrationWarning" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "dir" | "name" | "type" | "translate" | "accessKey" | "autoCapitalize" | "autoFocus" | "contentEditable" | "contextMenu" | "draggable" | "enterKeyHint" | "id" | "lang" | "nonce" | "spellCheck" | "tabIndex" | "radioGroup" | "about" | "datatype" | "inlist" | "prefix" | "property" | "rel" | "resource" | "rev" | "typeof" | "vocab" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "popover" | "popoverTargetAction" | "popoverTarget" | "inert" | "inputMode" | "is" | "exportparts" | "part" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-braillelabel" | "aria-brailleroledescription" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colindextext" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-description" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowindextext" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerLeave" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onScrollEnd" | "onScrollEndCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onToggle" | "onBeforeToggle" | "onTransitionCancel" | "onTransitionCancelCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "onTransitionRun" | "onTransitionRunCapture" | "onTransitionStart" | "onTransitionStartCapture"> & {
12
+ attributes?: (import("../..").Attributes<keyof React.JSX.IntrinsicElements> & ((import("../..").Attributes<"button"> & Omit<React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>, "form" | "slot" | "style" | "title" | "disabled" | "key" | "value" | "hidden" | "color" | "content" | "children" | "className" | "ref" | "aria-orientation" | "role" | "translate" | "suppressHydrationWarning" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "dir" | "name" | "type" | "accessKey" | "autoCapitalize" | "autoFocus" | "contentEditable" | "contextMenu" | "draggable" | "enterKeyHint" | "id" | "lang" | "nonce" | "spellCheck" | "tabIndex" | "radioGroup" | "about" | "datatype" | "inlist" | "prefix" | "property" | "rel" | "resource" | "rev" | "typeof" | "vocab" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "popover" | "popoverTargetAction" | "popoverTarget" | "inert" | "inputMode" | "is" | "exportparts" | "part" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-braillelabel" | "aria-brailleroledescription" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colindextext" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-description" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowindextext" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerLeave" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onScrollEnd" | "onScrollEndCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onToggle" | "onBeforeToggle" | "onTransitionCancel" | "onTransitionCancelCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "onTransitionRun" | "onTransitionRunCapture" | "onTransitionStart" | "onTransitionStartCapture"> & {
13
13
  ref?: import("../Actionable/Actionable.types").AttributesRef;
14
14
  }) | undefined)) | undefined;
15
15
  } & Pick<import("../View").ViewProps, "height"> & React.RefAttributes<HTMLElement>>;
@@ -13,7 +13,7 @@ declare const _default: {
13
13
  href?: string;
14
14
  as?: keyof React.JSX.IntrinsicElements | undefined;
15
15
  className?: import("../../../types/global").ClassName;
16
- attributes?: (import("../../../types/global").Attributes<keyof React.JSX.IntrinsicElements> & ((import("../../../types/global").Attributes<"button"> & Omit<React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>, "children" | "ref" | "style" | "form" | "slot" | "title" | "disabled" | "key" | "value" | "hidden" | "color" | "content" | "className" | "aria-orientation" | "role" | "suppressHydrationWarning" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "dir" | "name" | "accessKey" | "autoCapitalize" | "autoFocus" | "contentEditable" | "contextMenu" | "draggable" | "enterKeyHint" | "nonce" | "spellCheck" | "translate" | "radioGroup" | "about" | "datatype" | "inlist" | "prefix" | "property" | "rel" | "resource" | "rev" | "typeof" | "vocab" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "popover" | "popoverTargetAction" | "popoverTarget" | "inert" | "inputMode" | "is" | "exportparts" | "part" | "onToggle" | "type" | "id" | "lang" | "tabIndex" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-braillelabel" | "aria-brailleroledescription" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colindextext" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-description" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowindextext" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerLeave" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onScrollEnd" | "onScrollEndCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onBeforeToggle" | "onTransitionCancel" | "onTransitionCancelCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "onTransitionRun" | "onTransitionRunCapture" | "onTransitionStart" | "onTransitionStartCapture"> & {
16
+ attributes?: (import("../../../types/global").Attributes<keyof React.JSX.IntrinsicElements> & ((import("../../../types/global").Attributes<"button"> & Omit<React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>, "children" | "ref" | "style" | "form" | "slot" | "title" | "disabled" | "key" | "value" | "hidden" | "color" | "content" | "className" | "aria-orientation" | "role" | "translate" | "suppressHydrationWarning" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "dir" | "name" | "accessKey" | "autoCapitalize" | "autoFocus" | "contentEditable" | "contextMenu" | "draggable" | "enterKeyHint" | "nonce" | "spellCheck" | "radioGroup" | "about" | "datatype" | "inlist" | "prefix" | "property" | "rel" | "resource" | "rev" | "typeof" | "vocab" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "popover" | "popoverTargetAction" | "popoverTarget" | "inert" | "inputMode" | "is" | "exportparts" | "part" | "onToggle" | "type" | "id" | "lang" | "tabIndex" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-braillelabel" | "aria-brailleroledescription" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colindextext" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-description" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowindextext" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerLeave" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onScrollEnd" | "onScrollEndCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onBeforeToggle" | "onTransitionCancel" | "onTransitionCancelCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "onTransitionRun" | "onTransitionRunCapture" | "onTransitionStart" | "onTransitionStartCapture"> & {
17
17
  ref?: import("../../Actionable/Actionable.types").AttributesRef;
18
18
  }) | undefined)) | undefined;
19
19
  } & Pick<import("../../View").ViewProps, "height"> & React.RefAttributes<HTMLElement>>;
@@ -3,14 +3,14 @@ import { classNames, responsiveClassNames } from "../../utilities/props.js";
3
3
  import Text from "../Text/index.js";
4
4
  import s from "./Divider.module.css";
5
5
  const Divider = (props) => {
6
- const { vertical, blank, children, contentPosition = "center", className, attributes } = props;
7
- const rootClassNames = classNames(s.root, className, blank && s["--blank"], children ? s[`--content-position-${contentPosition}`] : undefined, ...responsiveClassNames(s, "--vertical", vertical));
6
+ const { vertical, blank, children, contentPosition = "center", color, offset, className, attributes, } = props;
7
+ const rootClassNames = classNames(s.root, className, blank && s["--blank"], color && s[`--color-${color}`], children ? s[`--content-position-${contentPosition}`] : undefined, ...responsiveClassNames(s, "--vertical", vertical));
8
8
  // Only support aria-orientation for non-responsive dividers
9
9
  let ariaOrientation;
10
10
  if (typeof vertical === "boolean" || vertical === undefined) {
11
11
  ariaOrientation = vertical ? "vertical" : "horizontal";
12
12
  }
13
- return (_jsx("div", { ...attributes, role: "separator", "aria-orientation": ariaOrientation, className: rootClassNames, children: children && (_jsx(Text, { color: "neutral-faded", variant: "caption-1", className: s.label, children: children })) }));
13
+ return (_jsx("div", { ...attributes, role: "separator", "aria-orientation": ariaOrientation, className: rootClassNames, style: { ...attributes?.style, "--rs-divider-offset": offset }, children: children && (_jsx(Text, { color: "neutral-faded", variant: "caption-1", className: s.label, children: children })) }));
14
14
  };
15
15
  Divider.displayName = "Divider";
16
16
  export default Divider;
@@ -1 +1 @@
1
- .root{--rs-divider-color:var(--rs-color-border-neutral-faded);align-items:center;display:flex;gap:var(--rs-unit-x2);vertical-align:top;width:100%}.root:after,.root:before{background:var(--rs-divider-color);flex-grow:1;height:1px}.root:before{content:""}.--blank{margin-top:-1px;position:relative}.--vertical{display:inline-flex;flex-direction:column;height:100%;width:auto}.--vertical:after,.--vertical:before{height:auto;width:1px}.--vertical:before{content:""}.--vertical:after{content:none}.--vertical.--blank{margin-top:0;margin-inline-start:-1px}.--vertical .label{display:none}.--content-position-center:after,.--content-position-center:before{content:""}.--content-position-start:before{content:none}.--content-position-start:after{content:""}@media (--rs-viewport-m ){.--vertical-true--m{display:inline-flex;flex-direction:column;height:100%;width:auto}.--vertical-true--m:after,.--vertical-true--m:before{height:auto;width:1px}.--vertical-true--m:before{content:""}.--vertical-true--m:after{content:none}.--vertical-true--m.--blank{margin-top:0;margin-inline-start:-1px}.--vertical-true--m .label{display:none}.--vertical-false--m{display:flex;flex-direction:row;height:auto;width:100%}.--vertical-false--m:after,.--vertical-false--m:before{height:1px;width:auto}.--vertical-false--m.--blank{margin-top:-1px;margin-inline-start:0}}@media (--rs-viewport-l ){.--vertical-true--l{display:inline-flex;flex-direction:column;height:100%;width:auto}.--vertical-true--l:after,.--vertical-true--l:before{height:auto;width:1px}.--vertical-true--l:before{content:""}.--vertical-true--l:after{content:none}.--vertical-true--l.--blank{margin-top:0;margin-inline-start:-1px}.--vertical-true--l .label{display:none}.--vertical-false--l{display:flex;flex-direction:row;height:auto;width:100%}.--vertical-false--l:after,.--vertical-false--l:before{height:1px;width:auto}.--vertical-false--l.--blank{margin-top:-1px;margin-inline-start:0}}@media (--rs-viewport-xl ){.--vertical-true--xl{display:inline-flex;flex-direction:column;height:100%;width:auto}.--vertical-true--xl:after,.--vertical-true--xl:before{height:auto;width:1px}.--vertical-true--xl:before{content:""}.--vertical-true--xl:after{content:none}.--vertical-true--xl.--blank{margin-top:0;margin-inline-start:-1px}.--vertical-true--xl .label{display:none}.--vertical-false--xl{display:flex;flex-direction:row;height:auto;width:100%}.--vertical-false--xl:after,.--vertical-false--xl:before{height:1px;width:auto}.--vertical-false--xl.--blank{margin-top:-1px;margin-inline-start:0}}
1
+ .root{--rs-divider-color:var(--rs-color-border-neutral-faded);--rs-divider-offset:0px;align-items:center;display:flex;gap:var(--rs-unit-x2);padding-block:0;padding-inline:var(--rs-divider-offset);vertical-align:top;width:100%}.root:after,.root:before{background:var(--rs-divider-color);flex-grow:1;height:1px}.root:before{content:""}.--color-neutral{--rs-divider-color:var(--rs-color-border-neutral)}.--blank{margin-top:-1px;position:relative}.--vertical{display:inline-flex;flex-direction:column;min-height:100%;padding-block:var(--rs-divider-offset);padding-inline:0;width:auto}.--vertical:after,.--vertical:before{height:auto;width:1px}.--vertical:before{content:""}.--vertical:after{content:none}.--vertical.--blank{margin-top:0;margin-inline-start:-1px}.--vertical .label{display:none}.--content-position-center:after,.--content-position-center:before{content:""}.--content-position-start:before{content:none}.--content-position-start:after{content:""}@media (--rs-viewport-m ){.--vertical-true--m{display:inline-flex;flex-direction:column;min-height:100%;padding-block:var(--rs-divider-offset);padding-inline:0;width:auto}.--vertical-true--m:after,.--vertical-true--m:before{height:auto;width:1px}.--vertical-true--m:before{content:""}.--vertical-true--m:after{content:none}.--vertical-true--m.--blank{margin-top:0;margin-inline-start:-1px}.--vertical-true--m .label{display:none}.--vertical-false--m{display:flex;flex-direction:row;height:auto;padding-block:0;padding-inline:var(--rs-divider-offset);width:100%}.--vertical-false--m:after,.--vertical-false--m:before{height:1px;width:auto}.--vertical-false--m.--blank{margin-top:-1px;margin-inline-start:0}}@media (--rs-viewport-l ){.--vertical-true--l{display:inline-flex;flex-direction:column;min-height:100%;padding-block:var(--rs-divider-offset);padding-inline:0;width:auto}.--vertical-true--l:after,.--vertical-true--l:before{height:auto;width:1px}.--vertical-true--l:before{content:""}.--vertical-true--l:after{content:none}.--vertical-true--l.--blank{margin-top:0;margin-inline-start:-1px}.--vertical-true--l .label{display:none}.--vertical-false--l{display:flex;flex-direction:row;height:auto;padding-block:0;padding-inline:var(--rs-divider-offset);width:100%}.--vertical-false--l:after,.--vertical-false--l:before{height:1px;width:auto}.--vertical-false--l.--blank{margin-top:-1px;margin-inline-start:0}}@media (--rs-viewport-xl ){.--vertical-true--xl{display:inline-flex;flex-direction:column;min-height:100%;padding-block:var(--rs-divider-offset);padding-inline:0;width:auto}.--vertical-true--xl:after,.--vertical-true--xl:before{height:auto;width:1px}.--vertical-true--xl:before{content:""}.--vertical-true--xl:after{content:none}.--vertical-true--xl.--blank{margin-top:0;margin-inline-start:-1px}.--vertical-true--xl .label{display:none}.--vertical-false--xl{display:flex;flex-direction:row;height:auto;padding-block:0;padding-inline:var(--rs-divider-offset);width:100%}.--vertical-false--xl:after,.--vertical-false--xl:before{height:1px;width:auto}.--vertical-false--xl.--blank{margin-top:-1px;margin-inline-start:0}}
@@ -5,6 +5,12 @@ export type Props = {
5
5
  blank?: boolean;
6
6
  /** Change component to render vertically */
7
7
  vertical?: G.Responsive<boolean>;
8
+ /** Offset the divider from the container bounds */
9
+ offset?: string;
10
+ /** Color of the divider
11
+ * @default "neutral-faded"
12
+ */
13
+ color?: "neutral-faded" | "neutral";
8
14
  /** Position for rendering children */
9
15
  contentPosition?: "start" | "center" | "end";
10
16
  /** Node for inserting text labels or custom components as a part of divider */
@@ -10,7 +10,9 @@ declare const _default: {
10
10
  };
11
11
  export default _default;
12
12
  export declare const rendering: StoryObj;
13
+ export declare const color: StoryObj;
13
14
  export declare const vertical: StoryObj;
15
+ export declare const offset: StoryObj;
14
16
  export declare const label: {
15
17
  name: string;
16
18
  render: () => import("react").JSX.Element;
@@ -28,6 +28,17 @@ export const rendering = {
28
28
  expect(el).toHaveAttribute("aria-orientation", "horizontal");
29
29
  },
30
30
  };
31
+ export const color = {
32
+ name: "color",
33
+ render: () => (<Example>
34
+ <Example.Item title="neutral-faded">
35
+ <Divider color="neutral-faded"/>
36
+ </Example.Item>
37
+ <Example.Item title="neutral">
38
+ <Divider color="neutral"/>
39
+ </Example.Item>
40
+ </Example>),
41
+ };
31
42
  export const vertical = {
32
43
  name: "vertical",
33
44
  render: () => (<Example>
@@ -57,6 +68,21 @@ export const vertical = {
57
68
  expect(elResponsive).not.toHaveAttribute("aria-orientation");
58
69
  },
59
70
  };
71
+ export const offset = {
72
+ name: "offset",
73
+ render: () => (<Example>
74
+ <Example.Item title="offset: 10px">
75
+ <View width="100px" backgroundColor="neutral" paddingBlock={4}>
76
+ <Divider offset="40px"/>
77
+ </View>
78
+ </Example.Item>
79
+ <Example.Item title="offset: 10px, vertical">
80
+ <View height="100px" backgroundColor="neutral" paddingInline={4} width="33px">
81
+ <Divider vertical offset="40px"/>
82
+ </View>
83
+ </Example.Item>
84
+ </Example>),
85
+ };
60
86
  export const label = {
61
87
  name: "children, contentPosition",
62
88
  render: () => {
@@ -3,7 +3,7 @@ import type { PopoverProps, PopoverInstance } from "../Popover";
3
3
  import type { MenuItemProps } from "../MenuItem";
4
4
  import type { FlyoutContentProps } from "../Flyout";
5
5
  export type Instance = PopoverInstance;
6
- export type Props = Pick<PopoverProps, "children" | "position" | "forcePosition" | "fallbackPositions" | "fallbackAdjustLayout" | "fallbackMinWidth" | "fallbackMinHeight" | "triggerType" | "contentGap" | "contentShift" | "onOpen" | "onClose" | "active" | "defaultActive" | "width" | "disableHideAnimation" | "disableCloseOnOutsideClick" | "instanceRef" | "containerRef" | "originCoordinates" | "borderRadius" | "elevation" | "initialFocusRef"> & {
6
+ export type Props = Pick<PopoverProps, "children" | "position" | "forcePosition" | "fallbackPositions" | "fallbackAdjustLayout" | "fallbackMinWidth" | "fallbackMinHeight" | "triggerType" | "contentGap" | "contentShift" | "onOpen" | "onClose" | "active" | "defaultActive" | "width" | "disableHideAnimation" | "disableCloseOnOutsideClick" | "instanceRef" | "containerRef" | "positionRef" | "originCoordinates" | "borderRadius" | "elevation" | "initialFocusRef"> & {
7
7
  /** Change component trap focus keyboard behavior and shortcuts */
8
8
  trapFocusMode?: Extract<PopoverProps["trapFocusMode"], "action-menu" | "selection-menu"> | false;
9
9
  };
@@ -142,6 +142,8 @@ type BaseProps = {
142
142
  * @default document.body
143
143
  */
144
144
  containerRef?: React.RefObject<HTMLElement | null>;
145
+ /** Element used to calculate the position of the content against */
146
+ positionRef?: React.RefObject<HTMLElement | null>;
145
147
  /** Element to focus when the content is opened */
146
148
  initialFocusRef?: React.RefObject<HTMLElement | null>;
147
149
  };
@@ -15,7 +15,7 @@ import cooldown from "./utilities/cooldown.js";
15
15
  import { Provider, useFlyoutTriggerContext, useFlyoutContext, useFlyoutContentContext, } from "./Flyout.context.js";
16
16
  import useHandlerRef from "../../hooks/useHandlerRef.js";
17
17
  const FlyoutControlled = (props) => {
18
- const { triggerType = "click", groupTimeouts, onOpen, onClose, children, disabled, forcePosition, fallbackAdjustLayout, fallbackMinWidth, fallbackMinHeight, trapFocusMode = "dialog", width, disableHideAnimation, disableContentHover, disableCloseOnOutsideClick, autoFocus = true, originCoordinates, contentGap = 2, contentShift, contentClassName, contentAttributes, position: passedPosition, active: passedActive, id: passedId, instanceRef, containerRef, initialFocusRef, } = props;
18
+ const { triggerType = "click", groupTimeouts, onOpen, onClose, children, disabled, forcePosition, fallbackAdjustLayout, fallbackMinWidth, fallbackMinHeight, trapFocusMode = "dialog", width, disableHideAnimation, disableContentHover, disableCloseOnOutsideClick, autoFocus = true, originCoordinates, contentGap = 2, contentShift, contentClassName, contentAttributes, position: passedPosition, active: passedActive, id: passedId, instanceRef, containerRef, initialFocusRef, positionRef, } = props;
19
19
  const fallbackPositions = props.fallbackPositions === false || forcePosition ? [] : props.fallbackPositions;
20
20
  const onOpenRef = useHandlerRef(onOpen);
21
21
  const onCloseRef = useHandlerRef(onClose);
@@ -57,7 +57,7 @@ const FlyoutControlled = (props) => {
57
57
  const hoverTriggeredWithTouchEventRef = React.useRef(false);
58
58
  // eslint-disable-next-line react-hooks/refs
59
59
  const flyout = useFlyout({
60
- triggerElRef,
60
+ triggerElRef: positionRef ?? triggerElRef,
61
61
  flyoutElRef,
62
62
  // eslint-disable-next-line react-hooks/refs
63
63
  triggerBounds: originCoordinates ?? triggerBoundsRef.current,
@@ -162,11 +162,12 @@ const FlyoutControlled = (props) => {
162
162
  }
163
163
  }, [isRendered, handleOpen, handleClose]);
164
164
  const handleTriggerMouseDown = React.useCallback(() => {
165
- const rect = triggerElRef.current?.getBoundingClientRect();
165
+ const triggerEl = positionRef?.current ?? triggerElRef.current;
166
+ const rect = triggerEl?.getBoundingClientRect();
166
167
  if (!rect)
167
168
  return;
168
169
  triggerBoundsRef.current = rect;
169
- }, [triggerElRef]);
170
+ }, [triggerElRef, positionRef]);
170
171
  const handleContentMouseDown = () => {
171
172
  lockedBlurEffects.current = true;
172
173
  hoverTriggeredWithTouchEventRef.current = true;
@@ -67,6 +67,7 @@ export declare const disabled: StoryObj<{
67
67
  handleOpen: ReturnType<typeof fn>;
68
68
  }>;
69
69
  export declare const containerRef: StoryObj;
70
+ export declare const positionRef: StoryObj;
70
71
  export declare const initialFocusRef: StoryObj;
71
72
  export declare const instanceRef: StoryObj<{
72
73
  handleOpen: ReturnType<typeof fn>;
@@ -429,6 +429,36 @@ export const containerRef = {
429
429
  expect(containerEl).toContainElement(contentEl);
430
430
  },
431
431
  };
432
+ export const positionRef = {
433
+ name: "positionRef",
434
+ render: () => {
435
+ const ref = React.useRef(null);
436
+ return (<View gap={10}>
437
+ <View.Item>
438
+ <Flyout position="bottom" positionRef={ref} width="trigger" active>
439
+ <Flyout.Trigger>
440
+ {(attributes) => <Button attributes={attributes}>Trigger</Button>}
441
+ </Flyout.Trigger>
442
+ <Flyout.Content attributes={{
443
+ style: {
444
+ background: "var(--rs-color-background-elevation-overlay)",
445
+ padding: "var(--rs-unit-x4)",
446
+ borderRadius: "var(--rs-radius-medium)",
447
+ border: "1px solid var(--rs-color-border-neutral-faded)",
448
+ boxSizing: "border-box",
449
+ },
450
+ }}>
451
+ Content
452
+ </Flyout.Content>
453
+ </Flyout>
454
+ </View.Item>
455
+
456
+ <Button onClick={() => { }} ref={ref}>
457
+ Trigger 2
458
+ </Button>
459
+ </View>);
460
+ },
461
+ };
432
462
  export const initialFocusRef = {
433
463
  name: "initialFocusRef",
434
464
  render: () => {
@@ -1,7 +1,7 @@
1
1
  import type React from "react";
2
2
  import type { FlyoutProps, FlyoutInstance } from "../Flyout";
3
3
  export type Instance = FlyoutInstance;
4
- export type Props = Pick<FlyoutProps, "id" | "position" | "forcePosition" | "fallbackPositions" | "fallbackAdjustLayout" | "fallbackMinWidth" | "fallbackMinHeight" | "onOpen" | "onClose" | "width" | "trapFocusMode" | "active" | "defaultActive" | "contentGap" | "contentShift" | "instanceRef" | "triggerType" | "disableHideAnimation" | "disableContentHover" | "disableCloseOnOutsideClick" | "autoFocus" | "containerRef" | "initialFocusRef" | "originCoordinates"> & {
4
+ export type Props = Pick<FlyoutProps, "id" | "position" | "forcePosition" | "fallbackPositions" | "fallbackAdjustLayout" | "fallbackMinWidth" | "fallbackMinHeight" | "onOpen" | "onClose" | "width" | "trapFocusMode" | "active" | "defaultActive" | "contentGap" | "contentShift" | "instanceRef" | "triggerType" | "disableHideAnimation" | "disableContentHover" | "disableCloseOnOutsideClick" | "autoFocus" | "containerRef" | "positionRef" | "initialFocusRef" | "originCoordinates"> & {
5
5
  /** Node for inserting children */
6
6
  children?: React.ReactNode;
7
7
  /** Content element padding, unit token multiplier */
@@ -1 +1 @@
1
- .root{background:var(--rs-color-background-elevation-base);display:flex;overflow:hidden;position:relative;z-index:0}.root,.root:after{border-radius:var(--rs-select-radius)}.root:after{box-shadow:0 0 0 1px var(--rs-color-border-neutral) inset;content:"";inset:0;pointer-events:none;position:absolute}[data-rs-keyboard] .root:focus-within:after{box-shadow:0 0 0 2px var(--rs-color-border-primary) inset}.input{align-items:center;-webkit-appearance:none;appearance:none;background:none;border:0;box-sizing:border-box;color:var(--rs-color-foreground-neutral);cursor:pointer;display:flex;flex-grow:1;font-family:var(--rs-font-family-body);font-weight:var(--rs-font-weight-regular);outline:none;padding-inline-end:calc(var(--rs-select-chevron-size) + var(--rs-select-gap) * 2 + var(--rs-unit-x1));padding-inline-start:var(--rs-select-gap);position:relative;text-overflow:ellipsis;width:100%;z-index:1}.input::-ms-expand{display:none}.input.input--placeholder{color:var(--rs-color-foreground-disabled)}.slot{align-items:center;display:flex;flex-shrink:0;padding-inline-start:var(--rs-select-gap);position:relative;z-index:5}.input .slot{padding-inline-end:var(--rs-select-gap);padding-inline-start:0}.arrow{color:var(--rs-color-foreground-neutral-faded);display:flex;inset-block-start:50%;inset-inline-end:var(--rs-select-gap);pointer-events:none;position:absolute;transform:translateY(-50%);z-index:5}.--size-small{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);--rs-select-radius:var(--rs-radius-small)}.--size-small .input{font-size:var(--rs-font-size-body-3);letter-spacing:var(--rs-letter-spacing-body-3);line-height:var(--rs-line-height-body-3);padding-block:var(--rs-unit-x1)}.--size-medium{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);--rs-select-radius:var(--rs-radius-small)}.--size-medium .input{font-size:var(--rs-font-size-body-3);letter-spacing:var(--rs-letter-spacing-body-3);line-height:var(--rs-line-height-body-3);padding-block:var(--rs-unit-x2)}.--size-large{--rs-select-gap:var(--rs-unit-x3);--rs-select-chevron-size:var(--rs-unit-x5);--rs-select-radius:var(--rs-radius-medium)}.--size-large .input{font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2);padding-block:var(--rs-unit-x3)}.--size-xlarge{--rs-select-gap:var(--rs-unit-x4);--rs-select-chevron-size:var(--rs-unit-x5);--rs-select-radius:var(--rs-radius-medium)}.--size-xlarge .input{font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2);padding-block:var(--rs-unit-x4)}.root.--variant-faded{background:var(--rs-color-background-neutral-faded)}.root.--variant-faded:after{box-shadow:none}.root.--variant-faded:focus-within{border-color:var(--rs-color-border-primary)}.root.--variant-headless{background:transparent}.root.--variant-headless:after{box-shadow:none}.root.--variant-headless.--status-error,.root.--variant-headless.--status-error:focus-within,.root.--variant-headless:focus-within{border-color:transparent}.root.--variant-headless.--status-error:after,.root.--variant-headless.--status-error:focus-within:after,.root.--variant-headless:focus-within:after{box-shadow:none}.root.--status-error:after{box-shadow:0 0 0 2px var(--rs-color-border-critical) inset}.root.--disabled{background:var(--rs-color-background-disabled-faded);border-color:var(--rs-color-border-disabled)}.root.--disabled:after{box-shadow:0 0 0 1px var(--rs-color-border-disabled) inset}.root.--disabled .arrow,.root.--disabled .input{color:var(--rs-color-foreground-disabled);cursor:not-allowed}@media (--rs-viewport-s ) and (hover:none){.input{font-size:var(--rs-font-size-body-2)!important}}@media (--rs-viewport-m ){.--size-small--m{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);--rs-select-radius:var(--rs-radius-small)}.--size-small--m .input{font-size:var(--rs-font-size-body-3);letter-spacing:var(--rs-letter-spacing-body-3);line-height:var(--rs-line-height-body-3);padding-block:var(--rs-unit-x1)}.--size-medium--m{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);--rs-select-radius:var(--rs-radius-small)}.--size-medium--m .input{font-size:var(--rs-font-size-body-3);letter-spacing:var(--rs-letter-spacing-body-3);line-height:var(--rs-line-height-body-3);padding-block:var(--rs-unit-x2)}.--size-large--m{--rs-select-gap:var(--rs-unit-x3);--rs-select-chevron-size:var(--rs-unit-x5);--rs-select-radius:var(--rs-radius-medium)}.--size-large--m .input{font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2);padding-block:var(--rs-unit-x3)}.--size-xlarge--m{--rs-select-gap:var(--rs-unit-x4);--rs-select-chevron-size:var(--rs-unit-x5);--rs-select-radius:var(--rs-radius-medium)}.--size-xlarge--m .input{font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2);padding-block:var(--rs-unit-x4)}}@media (--rs-viewport-l ){.--size-small--l{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);--rs-select-radius:var(--rs-radius-small)}.--size-small--l .input{font-size:var(--rs-font-size-body-3);letter-spacing:var(--rs-letter-spacing-body-3);line-height:var(--rs-line-height-body-3);padding-block:var(--rs-unit-x1)}.--size-medium--l{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);--rs-select-radius:var(--rs-radius-small)}.--size-medium--l .input{font-size:var(--rs-font-size-body-3);letter-spacing:var(--rs-letter-spacing-body-3);line-height:var(--rs-line-height-body-3);padding-block:var(--rs-unit-x2)}.--size-large--l{--rs-select-gap:var(--rs-unit-x3);--rs-select-chevron-size:var(--rs-unit-x5);--rs-select-radius:var(--rs-radius-medium)}.--size-large--l .input{font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2);padding-block:var(--rs-unit-x3)}.--size-xlarge--l{--rs-select-gap:var(--rs-unit-x4);--rs-select-chevron-size:var(--rs-unit-x5);--rs-select-radius:var(--rs-radius-medium)}.--size-xlarge--l .input{font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2);padding-block:var(--rs-unit-x4)}}@media (--rs-viewport-xl ){.--size-small--xl{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);--rs-select-radius:var(--rs-radius-small)}.--size-small--xl .input{font-size:var(--rs-font-size-body-3);letter-spacing:var(--rs-letter-spacing-body-3);line-height:var(--rs-line-height-body-3);padding-block:var(--rs-unit-x1)}.--size-medium--xl{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);--rs-select-radius:var(--rs-radius-small)}.--size-medium--xl .input{font-size:var(--rs-font-size-body-3);letter-spacing:var(--rs-letter-spacing-body-3);line-height:var(--rs-line-height-body-3);padding-block:var(--rs-unit-x2)}.--size-large--xl{--rs-select-gap:var(--rs-unit-x3);--rs-select-chevron-size:var(--rs-unit-x5);--rs-select-radius:var(--rs-radius-medium)}.--size-large--xl .input{font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2);padding-block:var(--rs-unit-x3)}.--size-xlarge--xl{--rs-select-gap:var(--rs-unit-x4);--rs-select-chevron-size:var(--rs-unit-x5);--rs-select-radius:var(--rs-radius-medium)}.--size-xlarge--xl .input{font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2);padding-block:var(--rs-unit-x4)}}
1
+ .root{background:var(--rs-color-background-elevation-base);display:flex;overflow:hidden;position:relative;z-index:0}.root,.root:after{border-radius:var(--rs-select-radius)}.root:after{box-shadow:0 0 0 1px var(--rs-color-border-neutral) inset;content:"";inset:0;pointer-events:none;position:absolute}[data-rs-keyboard] .root:focus-within:after{box-shadow:0 0 0 2px var(--rs-color-border-primary) inset}.input{align-items:center;-webkit-appearance:none;appearance:none;background:none;border:0;box-sizing:border-box;color:var(--rs-color-foreground-neutral);cursor:pointer;display:flex;flex-grow:1;font-family:var(--rs-font-family-body);font-weight:var(--rs-font-weight-regular);outline:none;padding-inline-end:calc(var(--rs-select-chevron-size) + var(--rs-select-gap) * 2 + var(--rs-unit-x1));padding-inline-start:var(--rs-select-gap);position:relative;text-overflow:ellipsis;width:100%;z-index:1}.input::-ms-expand{display:none}.input.input--placeholder{color:var(--rs-color-foreground-disabled)}.slot{align-items:center;display:flex;flex-shrink:0;padding-inline-start:var(--rs-select-gap);position:relative;z-index:5}.input .slot{padding-inline-end:var(--rs-select-gap);padding-inline-start:0}.arrow{color:var(--rs-color-foreground-neutral-faded);display:flex;inset-block-start:50%;inset-inline-end:var(--rs-select-gap);pointer-events:none;position:absolute;transform:translateY(-50%);z-index:5}.group{--rs-select-group-padding:calc(var(--rs-unit-x1) - 1px);margin-inline:calc((var(--rs-select-group-padding) * -1));padding-inline:var(--rs-select-group-padding)}.group:not(:first-child){border-top:1px solid var(--rs-color-border-neutral-faded);margin-top:var(--rs-select-group-padding);padding-top:var(--rs-select-group-padding)}.group:not(:first-child) .group-label{padding-top:var(--rs-unit-x3)}.group-label{padding:var(--rs-unit-x2) var(--rs-unit-x3) var(--rs-unit-x1)}.--size-small{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);--rs-select-radius:var(--rs-radius-small)}.--size-small .input{font-size:var(--rs-font-size-body-3);letter-spacing:var(--rs-letter-spacing-body-3);line-height:var(--rs-line-height-body-3);padding-block:var(--rs-unit-x1)}.--size-medium{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);--rs-select-radius:var(--rs-radius-small)}.--size-medium .input{font-size:var(--rs-font-size-body-3);letter-spacing:var(--rs-letter-spacing-body-3);line-height:var(--rs-line-height-body-3);padding-block:var(--rs-unit-x2)}.--size-large{--rs-select-gap:var(--rs-unit-x3);--rs-select-chevron-size:var(--rs-unit-x5);--rs-select-radius:var(--rs-radius-medium)}.--size-large .input{font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2);padding-block:var(--rs-unit-x3)}.--size-xlarge{--rs-select-gap:var(--rs-unit-x4);--rs-select-chevron-size:var(--rs-unit-x5);--rs-select-radius:var(--rs-radius-medium)}.--size-xlarge .input{font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2);padding-block:var(--rs-unit-x4)}.root.--variant-faded{background:var(--rs-color-background-neutral-faded)}.root.--variant-faded:after{box-shadow:none}.root.--variant-faded:focus-within{border-color:var(--rs-color-border-primary)}.root.--variant-ghost,.root.--variant-headless{background:transparent}.root.--variant-ghost:after,.root.--variant-headless:after{box-shadow:none}.root.--variant-ghost.--status-error,.root.--variant-ghost.--status-error:focus-within,.root.--variant-ghost:focus-within,.root.--variant-headless.--status-error,.root.--variant-headless.--status-error:focus-within,.root.--variant-headless:focus-within{border-color:transparent}.root.--variant-headless.--status-error:after,.root.--variant-headless.--status-error:focus-within:after,.root.--variant-headless:focus-within:after{box-shadow:none}.root.--status-error:after{box-shadow:0 0 0 2px var(--rs-color-border-critical) inset}.root.--disabled{background:var(--rs-color-background-disabled-faded);border-color:var(--rs-color-border-disabled)}.root.--disabled:after{box-shadow:0 0 0 1px var(--rs-color-border-disabled) inset}.root.--disabled .arrow,.root.--disabled .input{color:var(--rs-color-foreground-disabled);cursor:not-allowed}@media (--rs-viewport-s ) and (hover:none){.input{font-size:var(--rs-font-size-body-2)!important}}@media (--rs-viewport-m ){.--size-small--m{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);--rs-select-radius:var(--rs-radius-small)}.--size-small--m .input{font-size:var(--rs-font-size-body-3);letter-spacing:var(--rs-letter-spacing-body-3);line-height:var(--rs-line-height-body-3);padding-block:var(--rs-unit-x1)}.--size-medium--m{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);--rs-select-radius:var(--rs-radius-small)}.--size-medium--m .input{font-size:var(--rs-font-size-body-3);letter-spacing:var(--rs-letter-spacing-body-3);line-height:var(--rs-line-height-body-3);padding-block:var(--rs-unit-x2)}.--size-large--m{--rs-select-gap:var(--rs-unit-x3);--rs-select-chevron-size:var(--rs-unit-x5);--rs-select-radius:var(--rs-radius-medium)}.--size-large--m .input{font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2);padding-block:var(--rs-unit-x3)}.--size-xlarge--m{--rs-select-gap:var(--rs-unit-x4);--rs-select-chevron-size:var(--rs-unit-x5);--rs-select-radius:var(--rs-radius-medium)}.--size-xlarge--m .input{font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2);padding-block:var(--rs-unit-x4)}}@media (--rs-viewport-l ){.--size-small--l{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);--rs-select-radius:var(--rs-radius-small)}.--size-small--l .input{font-size:var(--rs-font-size-body-3);letter-spacing:var(--rs-letter-spacing-body-3);line-height:var(--rs-line-height-body-3);padding-block:var(--rs-unit-x1)}.--size-medium--l{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);--rs-select-radius:var(--rs-radius-small)}.--size-medium--l .input{font-size:var(--rs-font-size-body-3);letter-spacing:var(--rs-letter-spacing-body-3);line-height:var(--rs-line-height-body-3);padding-block:var(--rs-unit-x2)}.--size-large--l{--rs-select-gap:var(--rs-unit-x3);--rs-select-chevron-size:var(--rs-unit-x5);--rs-select-radius:var(--rs-radius-medium)}.--size-large--l .input{font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2);padding-block:var(--rs-unit-x3)}.--size-xlarge--l{--rs-select-gap:var(--rs-unit-x4);--rs-select-chevron-size:var(--rs-unit-x5);--rs-select-radius:var(--rs-radius-medium)}.--size-xlarge--l .input{font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2);padding-block:var(--rs-unit-x4)}}@media (--rs-viewport-xl ){.--size-small--xl{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);--rs-select-radius:var(--rs-radius-small)}.--size-small--xl .input{font-size:var(--rs-font-size-body-3);letter-spacing:var(--rs-letter-spacing-body-3);line-height:var(--rs-line-height-body-3);padding-block:var(--rs-unit-x1)}.--size-medium--xl{--rs-select-gap:var(--rs-unit-x2);--rs-select-chevron-size:var(--rs-unit-x4);--rs-select-radius:var(--rs-radius-small)}.--size-medium--xl .input{font-size:var(--rs-font-size-body-3);letter-spacing:var(--rs-letter-spacing-body-3);line-height:var(--rs-line-height-body-3);padding-block:var(--rs-unit-x2)}.--size-large--xl{--rs-select-gap:var(--rs-unit-x3);--rs-select-chevron-size:var(--rs-unit-x5);--rs-select-radius:var(--rs-radius-medium)}.--size-large--xl .input{font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2);padding-block:var(--rs-unit-x3)}.--size-xlarge--xl{--rs-select-gap:var(--rs-unit-x4);--rs-select-chevron-size:var(--rs-unit-x5);--rs-select-radius:var(--rs-radius-medium)}.--size-xlarge--xl .input{font-size:var(--rs-font-size-body-2);letter-spacing:var(--rs-letter-spacing-body-2);line-height:var(--rs-line-height-body-2);padding-block:var(--rs-unit-x4)}}
@@ -5,6 +5,12 @@ import type { ActionableProps } from "../Actionable";
5
5
  import type { MenuItemProps } from "../MenuItem";
6
6
  import { DropdownMenuProps } from "../DropdownMenu";
7
7
  type Size = G.Responsive<"small" | "medium" | "large" | "xlarge">;
8
+ type RenderSingleValue = (args: {
9
+ value: string;
10
+ }) => React.ReactNode;
11
+ type RenderMultipleValues = (args: {
12
+ value: string[];
13
+ }) => React.ReactNode;
8
14
  type NativeOption = {
9
15
  /** Option text label */
10
16
  label: string;
@@ -16,8 +22,8 @@ type NativeOption = {
16
22
  export type OptionProps = Pick<MenuItemProps, "attributes" | "children" | "className" | "disabled" | "endSlot" | "startSlot" | "icon" | "onClick"> & {
17
23
  value: string;
18
24
  };
19
- export type OptionGroupProps = {
20
- label: string;
25
+ export type GroupProps = {
26
+ label?: string;
21
27
  children: React.ReactNode;
22
28
  };
23
29
  type BaseFragment = {
@@ -27,7 +33,7 @@ type BaseFragment = {
27
33
  /** Component size */
28
34
  size?: Size;
29
35
  /** Component render variant */
30
- variant?: "outline" | "faded" | "headless";
36
+ variant?: "outline" | "faded" | "ghost" | "headless";
31
37
  /** Disable the select user interaction and form submission */
32
38
  disabled?: boolean;
33
39
  /** Placeholder text when there is no value selected */
@@ -56,7 +62,7 @@ export type CustomFragment = {
56
62
  onBlur?: (e: React.FocusEvent<HTMLButtonElement>) => void;
57
63
  /** Additional attributes for the trigger element */
58
64
  inputAttributes?: ActionableProps["attributes"];
59
- } & Pick<DropdownMenuProps, "position" | "width" | "fallbackPositions">;
65
+ } & Pick<DropdownMenuProps, "position" | "width" | "fallbackPositions" | "positionRef">;
60
66
  export type NativeFragment = {
61
67
  /** Options for the select */
62
68
  /** @deprecated Use <option /> children instead */
@@ -71,39 +77,39 @@ export type NativeFragment = {
71
77
  export type NativeControlledFragment = {
72
78
  value: string;
73
79
  defaultValue?: never;
74
- /** Callback when the input value changes */
80
+ renderValue?: never;
75
81
  onChange?: G.ChangeHandler<string, React.ChangeEvent<HTMLSelectElement>>;
76
82
  };
77
83
  export type NativeUncontrolledFragment = {
78
84
  value?: never;
79
85
  defaultValue?: string;
80
- /** Callback when the input value changes */
86
+ renderValue?: never;
81
87
  onChange?: G.ChangeHandler<string, React.ChangeEvent<HTMLSelectElement>>;
82
88
  };
83
89
  export type CustomControlledFragment = {
84
90
  multiple?: false;
85
91
  value: string;
86
92
  defaultValue?: never;
87
- /** Callback when the input value changes */
93
+ renderValue?: RenderSingleValue;
88
94
  onChange?: G.ChangeHandler<string>;
89
95
  } | {
90
96
  multiple: true;
91
97
  value: string[];
92
98
  defaultValue?: never[];
93
- /** Callback when the input value changes */
99
+ renderValue?: RenderMultipleValues;
94
100
  onChange?: G.ChangeHandler<string[]>;
95
101
  };
96
102
  export type CustomUncontrolledFragment = {
97
103
  multiple?: false;
98
104
  value?: never;
99
105
  defaultValue?: string;
100
- /** Callback when the input value changes */
106
+ renderValue?: RenderSingleValue;
101
107
  onChange?: G.ChangeHandler<string>;
102
108
  } | {
103
109
  multiple: true;
104
110
  value?: never[];
105
111
  defaultValue?: string[];
106
- /** Callback when the input value changes */
112
+ renderValue?: RenderMultipleValues;
107
113
  onChange?: G.ChangeHandler<string[]>;
108
114
  };
109
115
  export type NativeControlledProps = BaseFragment & NativeFragment & NativeControlledFragment;
@@ -119,5 +125,4 @@ export type TriggerProps = Pick<CustomControlledProps, "disabled" | "onClick" |
119
125
  export type RootProps = Omit<Props, "children"> & {
120
126
  children: (props: Omit<Props, "children">) => React.ReactNode;
121
127
  };
122
- export type SelectContextProps = CustomControlledProps;
123
128
  export {};
@@ -8,9 +8,10 @@ import { responsivePropDependency } from "../../utilities/props.js";
8
8
  import SelectRoot from "./SelectRoot.js";
9
9
  import SelectTrigger from "./SelectTrigger.js";
10
10
  import SelectOption from "./SelectOption.js";
11
- import SelectOptionGroup from "./SelectOptionGroup.js";
11
+ import SelectGroup from "./SelectGroup.js";
12
+ import View from "../View/index.js";
12
13
  const SelectCustomControlled = (props) => {
13
- const { children, value, name, placeholder, size, multiple, width = "trigger", position, fallbackPositions, } = props;
14
+ const { children, value, name, placeholder, size, multiple, width = "trigger", position, fallbackPositions, positionRef, renderValue: passedRenderValue, } = props;
14
15
  const initialFocusRef = React.useRef(null);
15
16
  const searchStringRef = React.useRef("");
16
17
  const searchTimeoutRef = React.useRef(null);
@@ -47,22 +48,24 @@ const SelectCustomControlled = (props) => {
47
48
  props.onChange?.({ value: option.value, name });
48
49
  }
49
50
  },
50
- startSlot: option?.startSlot || (hasValue && _jsx(Icon, { svg: selected ? CheckmarkIcon : null })),
51
+ startSlot: option?.startSlot !== undefined
52
+ ? option.startSlot
53
+ : hasValue && _jsx(Icon, { svg: selected ? CheckmarkIcon : null }),
51
54
  attributes: {
52
55
  ...component.props.attributes,
53
56
  ref: selected ? initialFocusRef : undefined,
54
57
  },
55
58
  });
56
59
  }
57
- if (child.type === SelectOptionGroup) {
60
+ if (child.type === SelectGroup) {
58
61
  const component = child;
59
- const optionGroup = component.props;
62
+ const group = component.props;
60
63
  return React.cloneElement(component, {
61
- key: optionGroup.label,
62
- children: traverseOptionList(optionGroup.children),
64
+ key: group.label ?? index,
65
+ children: traverseOptionList(group.children),
63
66
  });
64
67
  }
65
- return null;
68
+ return child;
66
69
  });
67
70
  };
68
71
  // eslint-disable-next-line react-hooks/refs
@@ -84,8 +87,22 @@ const SelectCustomControlled = (props) => {
84
87
  searchStringRef.current = "";
85
88
  }, 1000);
86
89
  };
90
+ const renderValue = () => {
91
+ if (passedRenderValue) {
92
+ // Returning the same call for correct type inference
93
+ if (multiple)
94
+ return passedRenderValue({ value });
95
+ return passedRenderValue({ value });
96
+ }
97
+ if (selectedOptions.length === 1)
98
+ return selectedOptions[0].children;
99
+ if (selectedOptions.length > 1) {
100
+ return (_jsx(View, { direction: "row", gap: 4, children: selectedOptions.map((option) => (_jsx(View.Item, { children: option.children }, option.value))) }));
101
+ }
102
+ return null;
103
+ };
87
104
  return (_jsx(SelectRoot, { ...props, children: (props) => {
88
- return (_jsxs(DropdownMenu, { width: width, disableHideAnimation: true, position: position ?? "bottom", fallbackPositions: fallbackPositions ?? (position ? undefined : ["bottom", "top"]), fallbackAdjustLayout: true, fallbackMinHeight: "150px", borderRadius: responsivePropDependency(size, (size) => size === "large" || size === "xlarge" ? "medium" : "small"), initialFocusRef: initialFocusRef, children: [_jsx(DropdownMenu.Trigger, { children: (attributes) => {
105
+ return (_jsxs(DropdownMenu, { width: width, disableHideAnimation: true, position: position ?? "bottom", fallbackPositions: fallbackPositions ?? (position ? undefined : ["bottom", "top"]), fallbackAdjustLayout: true, fallbackMinHeight: "220px", borderRadius: responsivePropDependency(size, (size) => size === "large" || size === "xlarge" ? "medium" : "small"), initialFocusRef: initialFocusRef, positionRef: positionRef, children: [_jsx(DropdownMenu.Trigger, { children: (attributes) => {
89
106
  const triggerProps = {
90
107
  ...props,
91
108
  inputAttributes: {
@@ -93,7 +110,7 @@ const SelectCustomControlled = (props) => {
93
110
  ...attributes,
94
111
  },
95
112
  };
96
- return (_jsx(SelectTrigger, { ...triggerProps, value: value, children: selectedOptions?.map((option) => option.children).join(", ") }));
113
+ return (_jsx(SelectTrigger, { ...triggerProps, value: value, children: renderValue() }));
97
114
  } }), _jsx(DropdownMenu.Content, { attributes: {
98
115
  ref: dropdownRef,
99
116
  onKeyDown: handleKeyDown,
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ import type * as T from "./Select.types";
3
+ declare const SelectGroup: React.FC<T.GroupProps>;
4
+ export default SelectGroup;
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import View from "../View/index.js";
3
+ import Text from "../Text/index.js";
4
+ import s from "./Select.module.css";
5
+ const SelectGroup = (props) => {
6
+ const { label, children } = props;
7
+ return (_jsxs(View, { attributes: { role: "group" }, gap: 1, className: s.group, children: [label && (_jsx("div", { className: s["group-label"], children: _jsx(Text, { variant: "caption-1", color: "neutral-faded", children: label }) })), _jsx(View.Item, { children: children })] }));
8
+ };
9
+ SelectGroup.displayName = "Select.Group";
10
+ export default SelectGroup;
@@ -11,6 +11,6 @@ const SelectTrigger = (props) => {
11
11
  onFocus: onFocus || inputAttributes?.onFocus,
12
12
  onBlur: onBlur || inputAttributes?.onBlur,
13
13
  ...inputAttributes,
14
- }, children: [_jsx(SelectStartContent, { startSlot: startSlot, icon: icon, size: size }), children ? _jsx(Text, { maxLines: 1, children: children }) : null, placeholder && !children ? _jsx(Text, { color: "disabled", children: placeholder }) : null, _jsx(SelectEndContent, { disabled: disabled, size: size })] }), _jsx("input", { type: "hidden", value: typeof value === "string" ? value : JSON.stringify(value), name: name, id: id })] }));
14
+ }, children: [_jsx(SelectStartContent, { startSlot: startSlot, icon: icon, size: size }), children ? (_jsx(Text, { maxLines: typeof children === "string" ? 1 : undefined, children: children })) : null, placeholder && !children ? _jsx(Text, { color: "disabled", children: placeholder }) : null, _jsx(SelectEndContent, { disabled: disabled, size: size })] }), _jsx("input", { type: "hidden", value: typeof value === "string" ? value : JSON.stringify(value), name: name, id: id })] }));
15
15
  };
16
16
  export default SelectTrigger;
@@ -1,11 +1,12 @@
1
1
  import Select from "./Select";
2
2
  import SelectCustom from "./SelectCustom";
3
3
  import SelectOption from "./SelectOption";
4
- import SelectOptionGroup from "./SelectOptionGroup";
4
+ import SelectGroup from "./SelectGroup";
5
5
  declare const SelectRoot: typeof Select & {
6
6
  Custom: typeof SelectCustom;
7
7
  Option: typeof SelectOption;
8
- OptionGroup: typeof SelectOptionGroup;
8
+ Group: typeof SelectGroup;
9
+ OptionGroup: typeof SelectGroup;
9
10
  };
10
11
  export default SelectRoot;
11
12
  export type { Props as SelectProps } from "./Select.types";
@@ -1,9 +1,10 @@
1
1
  import Select from "./Select.js";
2
2
  import SelectCustom from "./SelectCustom.js";
3
3
  import SelectOption from "./SelectOption.js";
4
- import SelectOptionGroup from "./SelectOptionGroup.js";
4
+ import SelectGroup from "./SelectGroup.js";
5
5
  const SelectRoot = Select;
6
6
  SelectRoot.Custom = SelectCustom;
7
7
  SelectRoot.Option = SelectOption;
8
- SelectRoot.OptionGroup = SelectOptionGroup;
8
+ SelectRoot.Group = SelectGroup;
9
+ SelectRoot.OptionGroup = SelectGroup;
9
10
  export default SelectRoot;
@@ -6,7 +6,8 @@ declare const _default: {
6
6
  component: React.FC<import("../Select.types").NativeProps> & {
7
7
  Custom: React.FC<import("../Select.types").CustomProps>;
8
8
  Option: React.FC<import("../Select.types").OptionProps>;
9
- OptionGroup: React.FC<import("../Select.types").OptionGroupProps>;
9
+ Group: React.FC<import("../Select.types").GroupProps>;
10
+ OptionGroup: React.FC<import("../Select.types").GroupProps>;
10
11
  };
11
12
  parameters: {
12
13
  iframe: {
@@ -40,8 +41,13 @@ export declare const multiple: StoryObj<{
40
41
  export declare const variant: StoryObj;
41
42
  export declare const size: StoryObj;
42
43
  export declare const startSlot: StoryObj;
44
+ export declare const renderValue: {
45
+ name: string;
46
+ render: () => React.JSX.Element;
47
+ };
43
48
  export declare const error: StoryObj;
44
49
  export declare const disabled: StoryObj;
45
50
  export declare const className: StoryObj;
46
51
  export declare const fallback: StoryObj;
47
52
  export declare const formControl: StoryObj;
53
+ export declare const testComposition: StoryObj;