or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

component-utilities.mdcss-utilities.mddom-utilities.mdindex.mdobject-function-utilities.mdproptype-validators.mdreact-hooks.mdslot-props-utilities.mdstring-utilities.md

css-utilities.mddocs/

0

# CSS Class and Style Utilities

1

2

Utilities for CSS class name generation, composition, and styling management in component libraries. These utilities are essential for theming and consistent styling systems.

3

4

## Capabilities

5

6

### Class Name Generation

7

8

#### generateUtilityClass

9

10

Generates standardized utility CSS class names for component slots.

11

12

```typescript { .api }

13

/**

14

* Generates utility CSS class names

15

* @param componentName - Name of the component

16

* @param slot - Name of the component slot

17

* @param globalStatePrefix - Optional prefix for global state classes

18

* @returns Generated class name string

19

*/

20

function unstable_generateUtilityClass(

21

componentName: string,

22

slot: string,

23

globalStatePrefix?: string

24

): string;

25

26

/**

27

* Checks if a class name represents a global state

28

* @param globalStateClass - Class name to check

29

* @returns True if class represents global state

30

*/

31

function unstable_isGlobalState(globalStateClass: string): boolean;

32

33

/**

34

* Type representing keys of global state classes

35

*/

36

type GlobalStateSlot = keyof typeof globalStateClasses;

37

38

/**

39

* Object mapping global state slot names to their corresponding class names

40

*/

41

const globalStateClasses: {

42

active: 'active';

43

checked: 'checked';

44

completed: 'completed';

45

disabled: 'disabled';

46

error: 'error';

47

expanded: 'expanded';

48

focused: 'focused';

49

focusVisible: 'focusVisible';

50

open: 'open';

51

readOnly: 'readOnly';

52

required: 'required';

53

selected: 'selected';

54

};

55

```

56

57

**Usage Example:**

58

59

```typescript

60

import {

61

unstable_generateUtilityClass as generateUtilityClass,

62

unstable_isGlobalState as isGlobalState,

63

GlobalStateSlot,

64

globalStateClasses

65

} from '@mui/utils';

66

67

// Basic class generation

68

const rootClass = generateUtilityClass('MuiButton', 'root');

69

// Result: 'MuiButton-root'

70

71

const labelClass = generateUtilityClass('MuiButton', 'label');

72

// Result: 'MuiButton-label'

73

74

// Global state classes

75

const disabledClass = generateUtilityClass('MuiButton', 'disabled', 'Mui');

76

// Result: 'Mui-disabled'

77

78

// Check if class is global state

79

const isGlobal = isGlobalState('Mui-disabled'); // true

80

const isNotGlobal = isGlobalState('MuiButton-root'); // false

81

82

// Using global state definitions

83

const activeSlot: GlobalStateSlot = 'active';

84

const activeClassName = globalStateClasses.active; // 'active'

85

```

86

87

#### generateUtilityClasses

88

89

Generates multiple utility classes for a component at once.

90

91

```typescript { .api }

92

/**

93

* Generates multiple utility classes

94

* @param componentName - Name of the component

95

* @param slots - Array of slot names

96

* @param globalStatePrefix - Optional prefix for global state classes

97

* @returns Record mapping slot names to class names

98

*/

99

function unstable_generateUtilityClasses<T extends string>(

100

componentName: string,

101

slots: T[],

102

globalStatePrefix?: string

103

): Record<T, string>;

104

```

105

106

**Usage Example:**

107

108

```typescript

109

import { unstable_generateUtilityClasses as generateUtilityClasses } from '@mui/utils';

110

111

const buttonClasses = generateUtilityClasses('MuiButton', [

112

'root',

113

'label',

114

'disabled',

115

'focusVisible'

116

]);

117

118

// Result:

119

// {

120

// root: 'MuiButton-root',

121

// label: 'MuiButton-label',

122

// disabled: 'MuiButton-disabled',

123

// focusVisible: 'MuiButton-focusVisible'

124

// }

125

```

126

127

### Class Composition

128

129

#### composeClasses

130

131

Composes CSS class names for component slots, merging utility classes with custom classes.

132

133

```typescript { .api }

134

/**

135

* Composes CSS class names for component slots

136

* @param slots - Object mapping slot names to default classes

137

* @param getUtilityClass - Function to get utility class for slot

138

* @param classes - Optional custom classes to merge

139

* @returns Record mapping slot names to composed class names

140

*/

141

function unstable_composeClasses<SlotKey extends string>(

142

slots: Record<SlotKey, string | false | null | undefined>,

143

getUtilityClass: (slot: SlotKey) => string,

144

classes?: Partial<Record<SlotKey, string>>

145

): Record<SlotKey, string>;

146

```

147

148

**Usage Example:**

149

150

```typescript

151

import { unstable_composeClasses as composeClasses } from '@mui/utils';

152

153

const slots = {

154

root: 'base-button',

155

label: 'base-label',

156

disabled: null // Will be excluded

157

};

158

159

const getUtilityClass = (slot) => `MuiButton-${slot}`;

160

161

const customClasses = {

162

root: 'custom-button-root',

163

label: 'custom-label'

164

};

165

166

const composedClasses = composeClasses(slots, getUtilityClass, customClasses);

167

168

// Result:

169

// {

170

// root: 'base-button MuiButton-root custom-button-root',

171

// label: 'base-label MuiButton-label custom-label'

172

// }

173

```

174

175

### Global Class Name Configuration

176

177

#### ClassNameGenerator

178

179

Global configuration for class name generation across the entire application.

180

181

```typescript { .api }

182

/**

183

* Global class name generator configuration

184

*/

185

const unstable_ClassNameGenerator: {

186

/**

187

* Configure custom class name generator

188

* @param generator - Function to generate class names

189

*/

190

configure: (generator: (componentName: string, slot?: string) => string) => void;

191

192

/**

193

* Generate class name using current configuration

194

* @param componentName - Component name

195

* @param slot - Optional slot name

196

* @returns Generated class name

197

*/

198

generate: (componentName: string, slot?: string) => string;

199

200

/**

201

* Reset to default class name generation

202

*/

203

reset: () => void;

204

};

205

```

206

207

**Usage Example:**

208

209

```typescript

210

import { unstable_ClassNameGenerator as ClassNameGenerator } from '@mui/utils';

211

212

// Configure custom class name generation

213

ClassNameGenerator.configure((componentName, slot) => {

214

return slot ? `${componentName}--${slot}` : componentName;

215

});

216

217

// Now all class generation will use the custom format

218

const className = ClassNameGenerator.generate('MyButton', 'root');

219

// Result: 'MyButton--root'

220

221

// Reset to default behavior

222

ClassNameGenerator.reset();

223

```

224

225

### Accessibility Styles

226

227

#### visuallyHidden

228

229

CSS-in-JS styles for content that should be hidden visually but accessible to screen readers.

230

231

```typescript { .api }

232

/**

233

* CSS styles for visually hidden content

234

*/

235

const visuallyHidden: React.CSSProperties;

236

```

237

238

**Usage Example:**

239

240

```typescript

241

import { visuallyHidden } from '@mui/utils';

242

243

function AccessibleButton({ children, ariaLabel }) {

244

return (

245

<button aria-label={ariaLabel}>

246

<span style={visuallyHidden}>{ariaLabel}</span>

247

{children}

248

</button>

249

);

250

}

251

252

// Or with styled components

253

const HiddenText = styled('span')(visuallyHidden);

254

```