@instructure/ui-text 10.9.1-snapshot-4 → 10.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -53,12 +53,32 @@ class Text extends Component<TextProps> {
53
53
  children: null
54
54
  } as const
55
55
 
56
+ checkProps() {
57
+ const { variant, size, lineHeight, weight, fontStyle } = this.props
58
+ if (variant) {
59
+ if (size) {
60
+ console.warn("[Text]: Don't use 'size' with 'variant' ")
61
+ }
62
+ if (lineHeight) {
63
+ console.warn("[Text]: Don't use 'lineHeight' with 'variant' ")
64
+ }
65
+ if (weight) {
66
+ console.warn("[Text]: Don't use 'weight' with 'variant' ")
67
+ }
68
+ if (fontStyle) {
69
+ console.warn("[Text]: Don't use 'fontStyle' with 'variant' ")
70
+ }
71
+ }
72
+ }
73
+
56
74
  componentDidMount() {
57
75
  this.props.makeStyles?.()
76
+ this.checkProps()
58
77
  }
59
78
 
60
79
  componentDidUpdate() {
61
80
  this.props.makeStyles?.()
81
+ this.checkProps()
62
82
  }
63
83
 
64
84
  render() {
package/src/Text/props.ts CHANGED
@@ -57,10 +57,41 @@ type TextOwnProps = {
57
57
  elementRef?: (element: Element | null) => void
58
58
  fontStyle?: 'italic' | 'normal'
59
59
  letterSpacing?: 'normal' | 'condensed' | 'expanded'
60
- lineHeight?: 'default' | 'fit' | 'condensed' | 'double'
61
- size?: 'x-small' | 'small' | 'medium' | 'large' | 'x-large' | 'xx-large'
60
+ lineHeight?:
61
+ | 'default'
62
+ | 'fit'
63
+ | 'condensed'
64
+ | 'double'
65
+ | 'lineHeight100'
66
+ | 'lineHeight125'
67
+ | 'lineHeight150'
68
+ size?:
69
+ | 'x-small'
70
+ | 'small'
71
+ | 'medium'
72
+ | 'large'
73
+ | 'x-large'
74
+ | 'xx-large'
75
+ | 'descriptionPage'
76
+ | 'descriptionSection'
77
+ | 'content'
78
+ | 'contentSmall'
79
+ | 'legend'
62
80
  transform?: 'none' | 'capitalize' | 'uppercase' | 'lowercase'
63
- weight?: 'normal' | 'light' | 'bold'
81
+ /**
82
+ * Sets multiple props at once. (size, fontStyle, lineHeight, weight)
83
+ * If set, these props are not allowed.
84
+ * NOTE: this is the recommended way of setting these values
85
+ */
86
+ variant?:
87
+ | 'descriptionPage'
88
+ | 'descriptionSection'
89
+ | 'content'
90
+ | 'contentImportant'
91
+ | 'contentQuote'
92
+ | 'contentSmall'
93
+ | 'legend'
94
+ weight?: 'normal' | 'light' | 'bold' | 'weightRegular' | 'weightImportant'
64
95
  wrap?: 'normal' | 'break-word'
65
96
  children?: React.ReactNode
66
97
  }
@@ -91,17 +122,45 @@ const propTypes: PropValidators<PropKeys> = {
91
122
  elementRef: PropTypes.func,
92
123
  fontStyle: PropTypes.oneOf(['italic', 'normal']),
93
124
  letterSpacing: PropTypes.oneOf(['normal', 'condensed', 'expanded']),
94
- lineHeight: PropTypes.oneOf(['default', 'fit', 'condensed', 'double']),
125
+ lineHeight: PropTypes.oneOf([
126
+ 'default',
127
+ 'fit',
128
+ 'condensed',
129
+ 'double',
130
+ 'lineHeight100',
131
+ 'lineHeight125',
132
+ 'lineHeight150'
133
+ ]),
95
134
  size: PropTypes.oneOf([
96
135
  'x-small',
97
136
  'small',
98
137
  'medium',
99
138
  'large',
100
139
  'x-large',
101
- 'xx-large'
140
+ 'xx-large',
141
+ 'descriptionPage',
142
+ 'descriptionSection',
143
+ 'content',
144
+ 'contentSmall',
145
+ 'legend'
102
146
  ]),
103
147
  transform: PropTypes.oneOf(['none', 'capitalize', 'uppercase', 'lowercase']),
104
- weight: PropTypes.oneOf(['normal', 'light', 'bold']),
148
+ variant: PropTypes.oneOf([
149
+ 'descriptionPage',
150
+ 'descriptionSection',
151
+ 'content',
152
+ 'contentImportant',
153
+ 'contentQuote',
154
+ 'contentSmall',
155
+ 'legend'
156
+ ]),
157
+ weight: PropTypes.oneOf([
158
+ 'normal',
159
+ 'light',
160
+ 'bold',
161
+ 'weightRegular',
162
+ 'weightImportant'
163
+ ]),
105
164
  wrap: PropTypes.oneOf(['normal', 'break-word'])
106
165
  }
107
166
 
@@ -115,6 +174,7 @@ const allowedProps: AllowedPropKeys = [
115
174
  'lineHeight',
116
175
  'size',
117
176
  'transform',
177
+ 'variant',
118
178
  'weight',
119
179
  'wrap'
120
180
  ]
@@ -47,9 +47,55 @@ const generateStyle = (
47
47
  transform,
48
48
  lineHeight,
49
49
  letterSpacing,
50
- color
50
+ color,
51
+ variant
51
52
  } = props
52
53
 
54
+ const variants: Record<NonNullable<TextProps['variant']>, object> = {
55
+ descriptionPage: {
56
+ fontStyle: 'normal',
57
+ fontWeight: componentTheme.weightRegular,
58
+ fontSize: componentTheme.descriptionPage,
59
+ lineHeight: componentTheme.lineHeight150
60
+ },
61
+ descriptionSection: {
62
+ fontStyle: 'normal',
63
+ fontWeight: componentTheme.weightRegular,
64
+ fontSize: componentTheme.descriptionSection,
65
+ lineHeight: componentTheme.lineHeight150
66
+ },
67
+ content: {
68
+ fontStyle: 'normal',
69
+ fontWeight: componentTheme.weightRegular,
70
+ fontSize: componentTheme.content,
71
+ lineHeight: componentTheme.lineHeight150
72
+ },
73
+ contentImportant: {
74
+ fontStyle: 'normal',
75
+ fontWeight: componentTheme.weightImportant,
76
+ fontSize: componentTheme.content,
77
+ lineHeight: componentTheme.lineHeight150
78
+ },
79
+ contentQuote: {
80
+ fontStyle: 'italic',
81
+ fontWeight: componentTheme.weightRegular,
82
+ fontSize: componentTheme.content,
83
+ lineHeight: componentTheme.lineHeight150
84
+ },
85
+ contentSmall: {
86
+ fontStyle: 'normal',
87
+ fontWeight: componentTheme.weightRegular,
88
+ fontSize: componentTheme.contentSmall,
89
+ lineHeight: componentTheme.lineHeight150
90
+ },
91
+ legend: {
92
+ fontStyle: 'normal',
93
+ fontWeight: componentTheme.weightRegular,
94
+ fontSize: componentTheme.legend,
95
+ lineHeight: componentTheme.lineHeight150
96
+ }
97
+ }
98
+
53
99
  const colorVariants = {
54
100
  primary: { color: componentTheme.primaryColor },
55
101
  secondary: { color: componentTheme.secondaryColor },
@@ -70,7 +116,9 @@ const generateStyle = (
70
116
  const weightStyle = {
71
117
  normal: { fontWeight: componentTheme.fontWeightNormal },
72
118
  light: { fontWeight: componentTheme.fontWeightLight },
73
- bold: { fontWeight: componentTheme.fontWeightBold }
119
+ bold: { fontWeight: componentTheme.fontWeightBold },
120
+ weightRegular: { fontWeight: componentTheme.weightRegular },
121
+ weightImportant: { fontWeight: componentTheme.weightImportant }
74
122
  }
75
123
 
76
124
  const fontSizeVariants = {
@@ -79,14 +127,22 @@ const generateStyle = (
79
127
  medium: componentTheme.fontSizeMedium,
80
128
  large: componentTheme.fontSizeLarge,
81
129
  'x-large': componentTheme.fontSizeXLarge,
82
- 'xx-large': componentTheme.fontSizeXXLarge
130
+ 'xx-large': componentTheme.fontSizeXXLarge,
131
+ descriptionPage: componentTheme.descriptionPage,
132
+ descriptionSection: componentTheme.descriptionSection,
133
+ content: componentTheme.content,
134
+ contentSmall: componentTheme.contentSmall,
135
+ legend: componentTheme.legend
83
136
  }
84
137
 
85
138
  const lineHeightVariants = {
86
139
  default: { lineHeight: componentTheme.lineHeight },
87
140
  fit: { lineHeight: componentTheme.lineHeightFit },
88
141
  condensed: { lineHeight: componentTheme.lineHeightCondensed },
89
- double: { lineHeight: componentTheme.lineHeightDouble }
142
+ double: { lineHeight: componentTheme.lineHeightDouble },
143
+ lineHeight100: { lineHeight: componentTheme.lineHeight100 },
144
+ lineHeight125: { lineHeight: componentTheme.lineHeight125 },
145
+ lineHeight150: { lineHeight: componentTheme.lineHeight150 }
90
146
  }
91
147
 
92
148
  const letterSpacingVariants = {
@@ -95,18 +151,27 @@ const generateStyle = (
95
151
  expanded: componentTheme.letterSpacingExpanded
96
152
  }
97
153
 
154
+ const calcTextStyles = () => {
155
+ if (variant) {
156
+ return variants[variant]
157
+ }
158
+ return {
159
+ ...(weight ? weightStyle[weight] : {}),
160
+ ...(fontStyle ? { fontStyle: fontStyle } : {}),
161
+ fontSize: fontSizeVariants[size!],
162
+ ...(lineHeight ? lineHeightVariants[lineHeight] : {})
163
+ }
164
+ }
165
+
98
166
  const baseStyles = {
99
167
  '&:focus': {
100
168
  outline: 'none'
101
169
  },
102
170
  ...(color ? colorVariants[color] : {}),
103
171
  ...(wrap === 'break-word' ? wrapStyle : {}),
104
- ...(weight ? weightStyle[weight] : {}),
105
- ...(fontStyle ? { fontStyle: fontStyle } : {}),
106
- fontSize: fontSizeVariants[size!],
107
- ...(lineHeight ? lineHeightVariants[lineHeight] : {}),
108
172
  letterSpacing: letterSpacingVariants[letterSpacing!],
109
- ...(transform ? { textTransform: transform } : {})
173
+ ...(transform ? { textTransform: transform } : {}),
174
+ ...calcTextStyles()
110
175
  }
111
176
 
112
177
  const inputStyles = {