Private
Public Access
1
0
Files

62 lines
2.3 KiB
JavaScript

'use client';
import { makeResetStyles, makeStyles, mergeClasses } from '@griffel/react';
import { tokens } from '@fluentui/react-theme';
import { createCustomFocusIndicatorStyle } from '@fluentui/react-tabster';
import { treeItemLevelToken } from '../../utils/tokens';
import { treeItemLayoutClassNames } from '../TreeItemLayout/useTreeItemLayoutStyles.styles';
import { treeItemPersonaLayoutClassNames } from '../TreeItemPersonaLayout/useTreeItemPersonaLayoutStyles.styles';
export const treeItemClassNames = {
root: 'fui-TreeItem'
};
const useBaseStyles = makeResetStyles({
position: 'relative',
cursor: 'pointer',
display: 'flex',
flexDirection: 'column',
boxSizing: 'border-box',
backgroundColor: tokens.colorSubtleBackground,
color: tokens.colorNeutralForeground2,
paddingRight: tokens.spacingHorizontalNone,
// if using createCustomFocusIndicatorStyle then we need to remove default outline styles provided by the browser
':focus': {
outlineStyle: 'none'
},
':focus-visible': {
outlineStyle: 'none'
},
// This adds the focus outline for the TreeItemLayout element
...createCustomFocusIndicatorStyle({
borderRadius: tokens.borderRadiusMedium,
outlineColor: tokens.colorStrokeFocus2,
outlineRadius: tokens.borderRadiusMedium,
// FIXME: tokens.strokeWidthThick causes some weird bugs
outlineWidth: '2px',
outlineStyle: 'solid'
}, {
customizeSelector: (selector)=>`${selector} > .${treeItemLayoutClassNames.root}, ${selector} > .${treeItemPersonaLayoutClassNames.root}`
})
});
const useStyles = makeStyles({
...Object.fromEntries(Array.from({
length: 10
}, (_, index)=>[
`level${index + 1}`,
{
[treeItemLevelToken]: index + 1
}
]))
});
/**
* Apply styling to the TreeItem slots based on the state
*/ export const useTreeItemStyles_unstable = (state)=>{
'use no memo';
const baseStyles = useBaseStyles();
const styles = useStyles();
const { level } = state;
state.root.className = mergeClasses(treeItemClassNames.root, baseStyles, isStaticallyDefinedLevel(level) && styles[`level${level}`], state.root.className);
return state;
};
function isStaticallyDefinedLevel(level) {
return level >= 1 && level <= 10;
}