{"mappings":";;;;;;;;;;AAAA;;;;;;;;;;CAUC;;AA8BM,SAAS,0CAAqB,KAAiC,EAAE,KAAuB,EAAE,GAAkC;IACjI,IAAI,cAAC,UAAU,EAAC,GAAG;IACnB,IAAI,gBAAC,YAAY,EAAC,GAAG,CAAA,GAAA,oCAAS,EAAE,OAAO;IAEvC,OAAO;QACL,YAAY;YACV,GAAG,YAAY;YACf,MAAM,MAAM,aAAa,KAAK,WAAW,eAAe,aAAa,IAAI;YACzE,iBAAiB;QACnB;IACF;AACF;AAoBO,SAAS,0CAAyB,KAAoD,EAAE,KAAuB,EAAE,GAAmB;IACzI,IAAI,cAA2B;QAC7B,YAAY,MAAM,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE;QAC3C,iBAAiB;QACjB,aAAY,UAAU;YACpB,MAAM,WAAW,CAAC,MAAM,EAAE,EAAE;QAC9B;QACA;YACE,MAAM,SAAS,CAAC,MAAM,EAAE;QAC1B;IACF;IAEA,IAAI,aAAC,SAAS,cAAE,UAAU,cAAE,UAAU,eAAE,WAAW,EAAC,GAAG,CAAA,GAAA,yCAAc,EAAE;QACrE,GAAG,KAAK;QACR,IAAI;QACJ,YAAY,MAAM,UAAU,IAAI,MAAM,UAAU;IAClD,GAAG,aAAa;IAChB,IAAI,MAAM,aAAa,KAAK,UAAU;QACpC,YAAY,IAAI,GAAG;QACnB,WAAW,CAAC,eAAe,GAAG,YAAY,UAAU;QACpD,OAAO,WAAW,CAAC,eAAe;IACpC;IAEA,OAAO;mBACL;oBACA;oBACA;qBACA;IACF;AACF","sources":["packages/react-aria/src/button/useToggleButtonGroup.ts"],"sourcesContent":["/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {\n  AnchorHTMLAttributes,\n  ButtonHTMLAttributes,\n  ElementType,\n  HTMLAttributes,\n  InputHTMLAttributes\n} from 'react';\nimport {AriaLabelingProps, DOMAttributes, Key, Orientation, RefObject} from '@react-types/shared';\nimport {AriaToggleButtonProps, ToggleButtonAria, useToggleButton} from './useToggleButton';\nimport {ToggleGroupProps, ToggleGroupState} from 'react-stately/useToggleGroupState';\nimport {ToggleState} from 'react-stately/useToggleState';\nimport {useToolbar} from '../toolbar/useToolbar';\n\nexport interface AriaToggleButtonGroupProps extends ToggleGroupProps, AriaLabelingProps {\n  /**\n   * The orientation of the the toggle button group.\n   * @default 'horizontal'\n   */\n  orientation?: Orientation\n}\n\nexport interface ToggleButtonGroupAria {\n  /**\n   * Props for the toggle button group container.\n   */\n  groupProps: DOMAttributes\n}\n\nexport function useToggleButtonGroup(props: AriaToggleButtonGroupProps, state: ToggleGroupState, ref: RefObject<HTMLElement | null>): ToggleButtonGroupAria {\n  let {isDisabled} = props;\n  let {toolbarProps} = useToolbar(props, ref);\n\n  return {\n    groupProps: {\n      ...toolbarProps,\n      role: state.selectionMode === 'single' ? 'radiogroup' : toolbarProps.role,\n      'aria-disabled': isDisabled\n    }\n  };\n}\n\nexport interface AriaToggleButtonGroupItemProps<E extends ElementType = 'button'> extends Omit<AriaToggleButtonProps<E>, 'id' | 'isSelected' | 'defaultSelected' | 'onChange'> {\n  /** An identifier for the item in the `selectedKeys` of a ToggleButtonGroup. */\n  id: Key\n}\n\nexport interface AriaToggleButtonGroupItemOptions<E extends ElementType> extends Omit<AriaToggleButtonGroupItemProps<E>, 'children'> {}\n\n// Order with overrides is important: 'button' should be default\nexport function useToggleButtonGroupItem(props: AriaToggleButtonGroupItemOptions<'button'>, state: ToggleGroupState, ref: RefObject<HTMLButtonElement | null>): ToggleButtonAria<ButtonHTMLAttributes<HTMLButtonElement>>;\nexport function useToggleButtonGroupItem(props: AriaToggleButtonGroupItemOptions<'a'>, state: ToggleGroupState, ref: RefObject<HTMLAnchorElement | null>): ToggleButtonAria<AnchorHTMLAttributes<HTMLAnchorElement>>;\nexport function useToggleButtonGroupItem(props: AriaToggleButtonGroupItemOptions<'div'>, state: ToggleGroupState, ref: RefObject<HTMLDivElement | null>): ToggleButtonAria<HTMLAttributes<HTMLDivElement>>;\nexport function useToggleButtonGroupItem(props: AriaToggleButtonGroupItemOptions<'input'>, state: ToggleGroupState, ref: RefObject<HTMLInputElement | null>): ToggleButtonAria<InputHTMLAttributes<HTMLInputElement>>;\nexport function useToggleButtonGroupItem(props: AriaToggleButtonGroupItemOptions<'span'>, state: ToggleGroupState, ref: RefObject<HTMLSpanElement | null>): ToggleButtonAria<HTMLAttributes<HTMLSpanElement>>;\nexport function useToggleButtonGroupItem(props: AriaToggleButtonGroupItemOptions<ElementType>, state: ToggleGroupState, ref: RefObject<Element | null>): ToggleButtonAria<DOMAttributes>;\n/**\n * Provides the behavior and accessibility implementation for a toggle button component.\n * ToggleButtons allow users to toggle a selection on or off, for example switching between two states or modes.\n */\nexport function useToggleButtonGroupItem(props: AriaToggleButtonGroupItemOptions<ElementType>, state: ToggleGroupState, ref: RefObject<any>): ToggleButtonAria<HTMLAttributes<any>> {\n  let toggleState: ToggleState = {\n    isSelected: state.selectedKeys.has(props.id),\n    defaultSelected: false,\n    setSelected(isSelected) {\n      state.setSelected(props.id, isSelected);\n    },\n    toggle() {\n      state.toggleKey(props.id);\n    }\n  };\n\n  let {isPressed, isSelected, isDisabled, buttonProps} = useToggleButton({\n    ...props,\n    id: undefined,\n    isDisabled: props.isDisabled || state.isDisabled\n  }, toggleState, ref);\n  if (state.selectionMode === 'single') {\n    buttonProps.role = 'radio';\n    buttonProps['aria-checked'] = toggleState.isSelected;\n    delete buttonProps['aria-pressed'];\n  }\n\n  return {\n    isPressed,\n    isSelected,\n    isDisabled,\n    buttonProps\n  };\n}\n"],"names":[],"version":3,"file":"useToggleButtonGroup.cjs.map"}