/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
import React from 'react';
import Button, { ButtonProps } from 'src/components/Button';
import { STYLES, SIZES } from 'src/components/Button/Button.stories';
import ButtonGroup from './index';

export default {
  title: 'ButtonGroup',
  component: ButtonGroup,
};

export const InteractiveButtonGroup = (args: ButtonProps) => (
  <>
    <ButtonGroup css={{ marginBottom: 40 }}>
      <Button {...args}>Button 1</Button>
    </ButtonGroup>
    <ButtonGroup css={{ marginBottom: 40 }}>
      <Button {...args}>Button 1</Button>
      <Button {...args}>Button 2</Button>
    </ButtonGroup>
    <ButtonGroup>
      <Button {...args}>Button 1</Button>
      <Button {...args}>Button 2</Button>
      <Button {...args}>Button 3</Button>
    </ButtonGroup>
  </>
);
InteractiveButtonGroup.args = {
  buttonStyle: 'tertiary',
  buttonSize: 'default',
};

InteractiveButtonGroup.argTypes = {
  buttonStyle: {
    name: STYLES.label,
    control: { type: 'select', options: STYLES.options },
  },
  buttonSize: {
    name: SIZES.label,
    control: { type: 'select', options: SIZES.options },
  },
};

InteractiveButtonGroup.story = {
  parameters: {
    actions: {
      disable: true,
    },
    knobs: {
      disable: true,
    },
  },
};
