@awsui/components-react
Version:
On July 19th, 2022, we launched [Cloudscape Design System](https://cloudscape.design). Cloudscape is an evolution of AWS-UI. It consists of user interface guidelines, front-end components, design resources, and development tools for building intuitive, en
49 lines • 2.23 kB
JavaScript
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
'use client';
import React from 'react';
import { getAnalyticsMetadataAttribute } from '@awsui/component-toolkit/internal/analytics-metadata';
import { getBaseProps } from '../internal/base-component';
import useBaseComponent from '../internal/hooks/use-base-component';
import { applyDisplayName } from '../internal/utils/apply-display-name';
import { getExternalProps } from '../internal/utils/external-props';
import InternalButtonGroup from './internal';
const ButtonGroup = React.forwardRef(({ variant, dropdownExpandToViewport = false, style, ...rest }, ref) => {
const baseProps = getBaseProps(rest);
const itemCounts = getItemCounts(rest.items);
const baseComponentProps = useBaseComponent('ButtonGroup', {
props: {
variant,
dropdownExpandToViewport,
},
metadata: {
iconButtonsCount: itemCounts['icon-button'],
iconToggleButtonsCount: itemCounts['icon-toggle-button'],
iconFileInputsCount: itemCounts['icon-file-input'],
menuDropdownsCount: itemCounts['menu-dropdown'],
groupsCount: itemCounts.group,
},
});
const externalProps = getExternalProps(rest);
const componentMetadata = {
name: 'awsui.ButtonGroup',
label: { root: 'self' },
};
return (React.createElement(InternalButtonGroup, { ...baseProps, ...baseComponentProps, ...externalProps, ref: ref, variant: variant, dropdownExpandToViewport: dropdownExpandToViewport, style: style, ...getAnalyticsMetadataAttribute({ component: componentMetadata }) }));
});
function getItemCounts(allItems = []) {
const counters = { 'icon-button': 0, 'icon-toggle-button': 0, 'icon-file-input': 0, 'menu-dropdown': 0, group: 0 };
function count(items) {
for (const item of items) {
counters[item.type] += 1;
if (item.type === 'group') {
count(item.items);
}
}
}
count(allItems);
return counters;
}
applyDisplayName(ButtonGroup, 'ButtonGroup');
export default ButtonGroup;
//# sourceMappingURL=internal-do-not-use-core.js.map