{"version":3,"sources":["../src/menu-option-group.tsx"],"sourcesContent":["import type { ComponentArgs } from \"@yamada-ui/core\"\nimport type { ForwardedRef, ReactElement, RefAttributes } from \"react\"\nimport type { MenuGroupProps } from \"./menu-group\"\nimport { useControllableState } from \"@yamada-ui/use-controllable-state\"\nimport { cx, getValidChildren, isArray, isString } from \"@yamada-ui/utils\"\nimport { cloneElement, forwardRef, useCallback } from \"react\"\nimport { MenuGroup } from \"./menu-group\"\nimport { MenuOptionItem } from \"./menu-item\"\n\ninterface MenuOptionGroupOptions<Y extends string | string[] = string> {\n  /**\n   * The type of the menu option group.\n   *\n   * @default 'checkbox'\n   */\n  type?: \"checkbox\" | \"radio\"\n  /**\n   * The initial value of the menu item group.\n   */\n  defaultValue?: Y\n  /**\n   * The value of the menu item group.\n   */\n  value?: Y\n  /**\n   * The callback fired when any children checkbox is checked or unchecked.\n   */\n  onChange?: (value: Y) => void\n}\n\nexport interface MenuOptionGroupProps<Y extends string | string[] = string>\n  extends Omit<MenuGroupProps, keyof MenuOptionGroupOptions>,\n    MenuOptionGroupOptions<Y> {}\n\nexport const MenuOptionGroup = forwardRef(\n  <Y extends string | string[] = string>(\n    {\n      type,\n      className,\n      children,\n      defaultValue,\n      value: valueProp,\n      onChange: onChangeProp,\n      ...rest\n    }: MenuOptionGroupProps<Y>,\n    ref: ForwardedRef<HTMLDivElement>,\n  ) => {\n    const radio = type === \"radio\"\n\n    defaultValue ??= (radio ? \"\" : []) as Y\n\n    const [value, setValue] = useControllableState({\n      defaultValue,\n      value: valueProp,\n      onChange: onChangeProp,\n    })\n\n    const onChange = useCallback(\n      (selectedValue: string) => {\n        if (radio && isString(value)) setValue(selectedValue as Y)\n\n        if (!radio && isArray(value)) {\n          const nextValue = value.includes(selectedValue)\n            ? value.filter((item) => item !== selectedValue)\n            : value.concat(selectedValue)\n\n          setValue(nextValue as Y)\n        }\n      },\n      [radio, value, setValue],\n    )\n\n    const validChildren = getValidChildren(children)\n\n    const cloneChildren = validChildren.map((child) => {\n      if (child.type !== MenuOptionItem) return child\n\n      const onClick = (ev: MouseEvent) => {\n        onChange(child.props.value)\n        child.props.onClick?.(ev)\n      }\n\n      const checked =\n        !radio && isArray(value)\n          ? value.includes(child.props.value)\n          : child.props.value === value\n\n      return cloneElement(child, { type, checked, onClick })\n    })\n\n    return (\n      <MenuGroup\n        ref={ref}\n        className={cx(\"ui-menu__item--group--option\", className)}\n        {...rest}\n      >\n        {cloneChildren}\n      </MenuGroup>\n    )\n  },\n) as {\n  <Y extends string | string[] = string>(\n    props: MenuOptionGroupProps<Y> & RefAttributes<HTMLDivElement>,\n  ): ReactElement\n} & ComponentArgs\n\nMenuOptionGroup.displayName = \"MenuOptionGroup\"\nMenuOptionGroup.__ui__ = \"MenuOptionGroup\"\n"],"mappings":";;;;;;;;;AAGA,SAAS,4BAA4B;AACrC,SAAS,IAAI,kBAAkB,SAAS,gBAAgB;AACxD,SAAS,cAAc,YAAY,mBAAmB;AAsFhD;AAzDC,IAAM,kBAAkB;AAAA,EAC7B,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP,UAAU;AAAA,IACV,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,QAAQ,SAAS;AAEvB,yDAAkB,QAAQ,KAAK,CAAC;AAEhC,UAAM,CAAC,OAAO,QAAQ,IAAI,qBAAqB;AAAA,MAC7C;AAAA,MACA,OAAO;AAAA,MACP,UAAU;AAAA,IACZ,CAAC;AAED,UAAM,WAAW;AAAA,MACf,CAAC,kBAA0B;AACzB,YAAI,SAAS,SAAS,KAAK,EAAG,UAAS,aAAkB;AAEzD,YAAI,CAAC,SAAS,QAAQ,KAAK,GAAG;AAC5B,gBAAM,YAAY,MAAM,SAAS,aAAa,IAC1C,MAAM,OAAO,CAAC,SAAS,SAAS,aAAa,IAC7C,MAAM,OAAO,aAAa;AAE9B,mBAAS,SAAc;AAAA,QACzB;AAAA,MACF;AAAA,MACA,CAAC,OAAO,OAAO,QAAQ;AAAA,IACzB;AAEA,UAAM,gBAAgB,iBAAiB,QAAQ;AAE/C,UAAM,gBAAgB,cAAc,IAAI,CAAC,UAAU;AACjD,UAAI,MAAM,SAAS,eAAgB,QAAO;AAE1C,YAAM,UAAU,CAAC,OAAmB;AA7E1C;AA8EQ,iBAAS,MAAM,MAAM,KAAK;AAC1B,0BAAM,OAAM,YAAZ,4BAAsB;AAAA,MACxB;AAEA,YAAM,UACJ,CAAC,SAAS,QAAQ,KAAK,IACnB,MAAM,SAAS,MAAM,MAAM,KAAK,IAChC,MAAM,MAAM,UAAU;AAE5B,aAAO,aAAa,OAAO,EAAE,MAAM,SAAS,QAAQ,CAAC;AAAA,IACvD,CAAC;AAED,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,WAAW,GAAG,gCAAgC,SAAS;AAAA,QACtD,GAAG;AAAA,QAEH;AAAA;AAAA,IACH;AAAA,EAEJ;AACF;AAMA,gBAAgB,cAAc;AAC9B,gBAAgB,SAAS;","names":[]}