// react: import { // react: default as React, } from 'react' // reusable-ui core: import { // a set of React node utility functions: flattenChildren, // a semantic management system for react web components: Role, } from '@reusable-ui/core' // a set of reusable-ui packages which are responsible for building any component // reusable-ui components: import type { // react components: ListItemProps, ListProps, } from '@reusable-ui/list' // represents a series of content // utilities: export const calculateSemanticRole = (props: ListProps, defaultActionCtrl: boolean|undefined): Role|null => { if (props.role) return null; // pre defined role => no need to determine the role automatically const listItems = props.children; if (flattenChildren(listItems).some((listItem) => { if (!React.isValidElement>(listItem)) { return !(defaultActionCtrl ?? false); // if the default is not an actionCtrl => not a menu item => role='dialog' } else { return !(listItem.props.actionCtrl ?? defaultActionCtrl ?? false); // if is not an actionCtrl => not a menu item => role='dialog' } // if })) return 'dialog'; // one/some s are [actionCtrl=false] => role='dialog' return 'menu'; // all s are [actionCtrl=true] => role='menu' };