@primer/react 38.29.1-rc.4254fa28f → 38.30.0-rc.4d4be073a
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.
- package/CHANGELOG.md +33 -1
- package/dist/ButtonGroup/ButtonGroup-be1c1123.css +2 -0
- package/dist/ButtonGroup/ButtonGroup-be1c1123.css.map +1 -0
- package/dist/ButtonGroup/ButtonGroup.d.ts.map +1 -1
- package/dist/ButtonGroup/ButtonGroup.js +1 -0
- package/dist/ButtonGroup/ButtonGroup.module.css.js +2 -2
- package/dist/Checkbox/Checkbox-7476a7ba.css +2 -0
- package/dist/Checkbox/Checkbox-7476a7ba.css.map +1 -0
- package/dist/Checkbox/Checkbox.module.css.js +1 -1
- package/dist/DataTable/Pagination-aebe86e8.css +2 -0
- package/dist/DataTable/Pagination-aebe86e8.css.map +1 -0
- package/dist/DataTable/Pagination.module.css.js +1 -1
- package/dist/NavList/NavList-b50d982b.css +2 -0
- package/dist/NavList/NavList-b50d982b.css.map +1 -0
- package/dist/NavList/NavList.d.ts +13 -4
- package/dist/NavList/NavList.d.ts.map +1 -1
- package/dist/NavList/NavList.js +238 -70
- package/dist/NavList/NavList.module.css.js +2 -2
- package/dist/Radio/Radio.d.ts.map +1 -1
- package/dist/Radio/Radio.js +2 -1
- package/dist/RadioGroup/RadioGroup.js +1 -0
- package/dist/RelativeTime/RelativeTime.js +1 -0
- package/dist/ScrollableRegion/ScrollableRegion.d.ts.map +1 -1
- package/dist/ScrollableRegion/ScrollableRegion.js +1 -0
- package/dist/SegmentedControl/SegmentedControl.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControl.js +1 -0
- package/dist/SegmentedControl/SegmentedControlButton.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlButton.js +1 -0
- package/dist/SegmentedControl/SegmentedControlIconButton.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlIconButton.js +1 -0
- package/dist/Select/Select.d.ts.map +1 -1
- package/dist/Select/Select.js +6 -2
- package/dist/SelectPanel/SelectPanel.d.ts +2 -2
- package/dist/SelectPanel/SelectPanel.d.ts.map +1 -1
- package/dist/SelectPanel/SelectPanel.js +4 -1
- package/dist/SideNav.d.ts.map +1 -1
- package/dist/SideNav.js +2 -0
- package/dist/Skeleton/SkeletonBox.d.ts +1 -0
- package/dist/Skeleton/SkeletonBox.d.ts.map +1 -1
- package/dist/Skeleton/SkeletonBox.js +54 -47
- package/dist/SkeletonText/SkeletonText.d.ts.map +1 -1
- package/dist/SkeletonText/SkeletonText.js +2 -2
- package/dist/Spinner/Spinner.js +1 -0
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TextInput/TextInput.js +27 -68
- package/dist/Textarea/Textarea.d.ts.map +1 -1
- package/dist/Textarea/Textarea.js +158 -186
- package/dist/_VisuallyHidden.js +2 -2
- package/dist/_VisuallyHidden.module.css.js +2 -2
- package/dist/live-region/Announce.d.ts.map +1 -1
- package/dist/live-region/Announce.js +51 -36
- package/dist/utils/character-counter.d.ts +16 -21
- package/dist/utils/character-counter.d.ts.map +1 -1
- package/dist/utils/character-counter.js +23 -59
- package/generated/components.json +42 -3
- package/package.json +2 -2
- package/dist/ButtonGroup/ButtonGroup-54ba293b.css +0 -2
- package/dist/ButtonGroup/ButtonGroup-54ba293b.css.map +0 -1
- package/dist/Checkbox/Checkbox-edc5dc3e.css +0 -2
- package/dist/Checkbox/Checkbox-edc5dc3e.css.map +0 -1
- package/dist/DataTable/Pagination-b6f8418c.css +0 -2
- package/dist/DataTable/Pagination-b6f8418c.css.map +0 -1
- package/dist/NavList/NavList-5dc067e3.css +0 -2
- package/dist/NavList/NavList-5dc067e3.css.map +0 -1
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { c } from 'react-compiler-runtime';
|
|
2
|
-
import React, {
|
|
2
|
+
import React, { useId, useState } from 'react';
|
|
3
3
|
import { TextInputBaseWrapper } from '../internal/components/TextInputWrapper.js';
|
|
4
4
|
import classes from './TextArea.module.css.js';
|
|
5
5
|
import { AlertFillIcon } from '@primer/octicons-react';
|
|
6
|
-
import {
|
|
6
|
+
import { SCREEN_READER_DELAY, getCharacterCountState } from '../utils/character-counter.js';
|
|
7
7
|
import VisuallyHidden from '../_VisuallyHidden.js';
|
|
8
|
+
import visuallyHiddenClasses from '../_VisuallyHidden.module.css.js';
|
|
8
9
|
import { clsx } from 'clsx';
|
|
9
10
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
11
|
+
import { AriaStatus } from '../live-region/AriaStatus.js';
|
|
10
12
|
import Text from '../Text/Text.js';
|
|
11
13
|
|
|
12
14
|
const DEFAULT_TEXTAREA_ROWS = 7;
|
|
@@ -17,7 +19,7 @@ const DEFAULT_TEXTAREA_RESIZE = 'both';
|
|
|
17
19
|
* This component accepts all native HTML <textarea> attributes as props.
|
|
18
20
|
*/
|
|
19
21
|
const Textarea = /*#__PURE__*/React.forwardRef((t0, ref) => {
|
|
20
|
-
const $ = c(
|
|
22
|
+
const $ = c(76);
|
|
21
23
|
let block;
|
|
22
24
|
let characterLimit;
|
|
23
25
|
let className;
|
|
@@ -95,200 +97,170 @@ const Textarea = /*#__PURE__*/React.forwardRef((t0, ref) => {
|
|
|
95
97
|
const rows = t1 === undefined ? DEFAULT_TEXTAREA_ROWS : t1;
|
|
96
98
|
const cols = t2 === undefined ? DEFAULT_TEXTAREA_COLS : t2;
|
|
97
99
|
const resize = t3 === undefined ? DEFAULT_TEXTAREA_RESIZE : t3;
|
|
98
|
-
const [characterCount, setCharacterCount] = React.useState("");
|
|
99
|
-
const [isOverLimit, setIsOverLimit] = React.useState(false);
|
|
100
|
-
const [screenReaderMessage, setScreenReaderMessage] = React.useState("");
|
|
101
|
-
const characterCounterRef = useRef(null);
|
|
102
100
|
const characterCountId = useId();
|
|
103
101
|
const characterCountStaticMessageId = useId();
|
|
102
|
+
const isControlled = value !== undefined;
|
|
104
103
|
let t4;
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
if (characterLimit) {
|
|
109
|
-
characterCounterRef.current = new CharacterCounter({
|
|
110
|
-
onCountUpdate: (count, overLimit, message) => {
|
|
111
|
-
setCharacterCount(message);
|
|
112
|
-
setIsOverLimit(overLimit);
|
|
113
|
-
},
|
|
114
|
-
onScreenReaderAnnounce: message_0 => {
|
|
115
|
-
setScreenReaderMessage(message_0);
|
|
116
|
-
}
|
|
117
|
-
});
|
|
118
|
-
return () => {
|
|
119
|
-
var _characterCounterRef$;
|
|
120
|
-
(_characterCounterRef$ = characterCounterRef.current) === null || _characterCounterRef$ === void 0 ? void 0 : _characterCounterRef$.cleanup();
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
};
|
|
124
|
-
t5 = [characterLimit];
|
|
125
|
-
$[18] = characterLimit;
|
|
104
|
+
if ($[18] !== defaultValue) {
|
|
105
|
+
t4 = () => defaultValue !== undefined ? String(defaultValue).length : 0;
|
|
106
|
+
$[18] = defaultValue;
|
|
126
107
|
$[19] = t4;
|
|
127
|
-
$[20] = t5;
|
|
128
108
|
} else {
|
|
129
109
|
t4 = $[19];
|
|
130
|
-
t5 = $[20];
|
|
131
|
-
}
|
|
132
|
-
useEffect(t4, t5);
|
|
133
|
-
let t6;
|
|
134
|
-
let t7;
|
|
135
|
-
if ($[21] !== characterLimit || $[22] !== defaultValue || $[23] !== value) {
|
|
136
|
-
t6 = () => {
|
|
137
|
-
if (characterLimit && characterCounterRef.current) {
|
|
138
|
-
const currentValue = value !== undefined ? String(value) : defaultValue !== undefined ? String(defaultValue) : "";
|
|
139
|
-
characterCounterRef.current.updateCharacterCount(currentValue.length, characterLimit);
|
|
140
|
-
}
|
|
141
|
-
};
|
|
142
|
-
t7 = [value, defaultValue, characterLimit];
|
|
143
|
-
$[21] = characterLimit;
|
|
144
|
-
$[22] = defaultValue;
|
|
145
|
-
$[23] = value;
|
|
146
|
-
$[24] = t6;
|
|
147
|
-
$[25] = t7;
|
|
148
|
-
} else {
|
|
149
|
-
t6 = $[24];
|
|
150
|
-
t7 = $[25];
|
|
151
|
-
}
|
|
152
|
-
useEffect(t6, t7);
|
|
153
|
-
let t8;
|
|
154
|
-
if ($[26] !== characterLimit || $[27] !== onChange) {
|
|
155
|
-
t8 = e => {
|
|
156
|
-
var _onChange;
|
|
157
|
-
if (characterLimit && characterCounterRef.current) {
|
|
158
|
-
characterCounterRef.current.updateCharacterCount(e.target.value.length, characterLimit);
|
|
159
|
-
}
|
|
160
|
-
(_onChange = onChange) === null || _onChange === void 0 ? void 0 : _onChange(e);
|
|
161
|
-
};
|
|
162
|
-
$[26] = characterLimit;
|
|
163
|
-
$[27] = onChange;
|
|
164
|
-
$[28] = t8;
|
|
165
|
-
} else {
|
|
166
|
-
t8 = $[28];
|
|
167
|
-
}
|
|
168
|
-
const handleTextareaChange = t8;
|
|
169
|
-
const isValid = isOverLimit ? "error" : validationStatus;
|
|
170
|
-
const t9 = isValid === "error" ? "true" : "false";
|
|
171
|
-
let t10;
|
|
172
|
-
if ($[29] !== maxHeight || $[30] !== minHeight || $[31] !== style) {
|
|
173
|
-
t10 = {
|
|
174
|
-
minHeight,
|
|
175
|
-
maxHeight,
|
|
176
|
-
...style
|
|
177
|
-
};
|
|
178
|
-
$[29] = maxHeight;
|
|
179
|
-
$[30] = minHeight;
|
|
180
|
-
$[31] = style;
|
|
181
|
-
$[32] = t10;
|
|
182
|
-
} else {
|
|
183
|
-
t10 = $[32];
|
|
184
|
-
}
|
|
185
|
-
let t11;
|
|
186
|
-
if ($[33] !== characterCountStaticMessageId || $[34] !== characterLimit || $[35] !== rest) {
|
|
187
|
-
t11 = characterLimit ? [characterCountStaticMessageId, rest["aria-describedby"]].filter(Boolean).join(" ") || undefined : rest["aria-describedby"];
|
|
188
|
-
$[33] = characterCountStaticMessageId;
|
|
189
|
-
$[34] = characterLimit;
|
|
190
|
-
$[35] = rest;
|
|
191
|
-
$[36] = t11;
|
|
192
|
-
} else {
|
|
193
|
-
t11 = $[36];
|
|
194
110
|
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
$[
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
$[57]
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
"aria-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
111
|
+
const [uncontrolledLength, setUncontrolledLength] = useState(t4);
|
|
112
|
+
const currentLength = isControlled ? String(value).length : uncontrolledLength;
|
|
113
|
+
let t5;
|
|
114
|
+
if ($[20] !== block || $[21] !== characterCountId || $[22] !== characterCountStaticMessageId || $[23] !== characterLimit || $[24] !== className || $[25] !== cols || $[26] !== contrast || $[27] !== currentLength || $[28] !== defaultValue || $[29] !== disabled || $[30] !== isControlled || $[31] !== maxHeight || $[32] !== minHeight || $[33] !== onChange || $[34] !== ref || $[35] !== required || $[36] !== resize || $[37] !== rest || $[38] !== rows || $[39] !== style || $[40] !== validationStatus || $[41] !== value) {
|
|
115
|
+
var _counter$isOverLimit;
|
|
116
|
+
const counter = characterLimit ? getCharacterCountState(currentLength, characterLimit) : undefined;
|
|
117
|
+
const isOverLimit = (_counter$isOverLimit = counter === null || counter === void 0 ? void 0 : counter.isOverLimit) !== null && _counter$isOverLimit !== void 0 ? _counter$isOverLimit : false;
|
|
118
|
+
let t6;
|
|
119
|
+
if ($[43] !== characterLimit || $[44] !== isControlled || $[45] !== onChange) {
|
|
120
|
+
t6 = e => {
|
|
121
|
+
var _onChange;
|
|
122
|
+
if (characterLimit && !isControlled) {
|
|
123
|
+
setUncontrolledLength(e.target.value.length);
|
|
124
|
+
}
|
|
125
|
+
(_onChange = onChange) === null || _onChange === void 0 ? void 0 : _onChange(e);
|
|
126
|
+
};
|
|
127
|
+
$[43] = characterLimit;
|
|
128
|
+
$[44] = isControlled;
|
|
129
|
+
$[45] = onChange;
|
|
130
|
+
$[46] = t6;
|
|
131
|
+
} else {
|
|
132
|
+
t6 = $[46];
|
|
133
|
+
}
|
|
134
|
+
const handleTextareaChange = t6;
|
|
135
|
+
const isValid = isOverLimit ? "error" : validationStatus;
|
|
136
|
+
const t7 = isValid === "error" ? "true" : "false";
|
|
137
|
+
let t8;
|
|
138
|
+
if ($[47] !== maxHeight || $[48] !== minHeight || $[49] !== style) {
|
|
139
|
+
t8 = {
|
|
140
|
+
minHeight,
|
|
141
|
+
maxHeight,
|
|
142
|
+
...style
|
|
143
|
+
};
|
|
144
|
+
$[47] = maxHeight;
|
|
145
|
+
$[48] = minHeight;
|
|
146
|
+
$[49] = style;
|
|
147
|
+
$[50] = t8;
|
|
148
|
+
} else {
|
|
149
|
+
t8 = $[50];
|
|
150
|
+
}
|
|
151
|
+
let t9;
|
|
152
|
+
if ($[51] !== characterCountStaticMessageId || $[52] !== characterLimit || $[53] !== rest) {
|
|
153
|
+
t9 = characterLimit ? [characterCountStaticMessageId, rest["aria-describedby"]].filter(Boolean).join(" ") || undefined : rest["aria-describedby"];
|
|
154
|
+
$[51] = characterCountStaticMessageId;
|
|
155
|
+
$[52] = characterLimit;
|
|
156
|
+
$[53] = rest;
|
|
157
|
+
$[54] = t9;
|
|
158
|
+
} else {
|
|
159
|
+
t9 = $[54];
|
|
160
|
+
}
|
|
161
|
+
let t10;
|
|
162
|
+
if ($[55] !== cols || $[56] !== defaultValue || $[57] !== disabled || $[58] !== handleTextareaChange || $[59] !== ref || $[60] !== required || $[61] !== resize || $[62] !== rest || $[63] !== rows || $[64] !== t7 || $[65] !== t8 || $[66] !== t9 || $[67] !== value) {
|
|
163
|
+
t10 = /*#__PURE__*/jsx("textarea", {
|
|
164
|
+
value: value,
|
|
165
|
+
defaultValue: defaultValue,
|
|
166
|
+
"data-resize": resize,
|
|
167
|
+
"aria-required": required,
|
|
168
|
+
"aria-invalid": t7,
|
|
169
|
+
ref: ref,
|
|
170
|
+
disabled: disabled,
|
|
171
|
+
rows: rows,
|
|
172
|
+
cols: cols,
|
|
173
|
+
className: classes.TextArea,
|
|
174
|
+
onChange: handleTextareaChange,
|
|
175
|
+
style: t8,
|
|
176
|
+
...rest,
|
|
177
|
+
"aria-describedby": t9
|
|
178
|
+
});
|
|
179
|
+
$[55] = cols;
|
|
180
|
+
$[56] = defaultValue;
|
|
181
|
+
$[57] = disabled;
|
|
182
|
+
$[58] = handleTextareaChange;
|
|
183
|
+
$[59] = ref;
|
|
184
|
+
$[60] = required;
|
|
185
|
+
$[61] = resize;
|
|
186
|
+
$[62] = rest;
|
|
187
|
+
$[63] = rows;
|
|
188
|
+
$[64] = t7;
|
|
189
|
+
$[65] = t8;
|
|
190
|
+
$[66] = t9;
|
|
191
|
+
$[67] = value;
|
|
192
|
+
$[68] = t10;
|
|
193
|
+
} else {
|
|
194
|
+
t10 = $[68];
|
|
195
|
+
}
|
|
196
|
+
let t11;
|
|
197
|
+
if ($[69] !== block || $[70] !== className || $[71] !== contrast || $[72] !== disabled || $[73] !== isValid || $[74] !== t10) {
|
|
198
|
+
t11 = /*#__PURE__*/jsx(TextInputBaseWrapper, {
|
|
199
|
+
validationStatus: isValid,
|
|
200
|
+
disabled: disabled,
|
|
201
|
+
block: block,
|
|
202
|
+
contrast: contrast,
|
|
203
|
+
className: className,
|
|
204
|
+
children: t10
|
|
205
|
+
});
|
|
206
|
+
$[69] = block;
|
|
207
|
+
$[70] = className;
|
|
208
|
+
$[71] = contrast;
|
|
209
|
+
$[72] = disabled;
|
|
210
|
+
$[73] = isValid;
|
|
211
|
+
$[74] = t10;
|
|
212
|
+
$[75] = t11;
|
|
213
|
+
} else {
|
|
214
|
+
t11 = $[75];
|
|
215
|
+
}
|
|
216
|
+
t5 = /*#__PURE__*/jsxs(Fragment, {
|
|
217
|
+
children: [t11, characterLimit && /*#__PURE__*/jsxs(Fragment, {
|
|
218
|
+
children: [/*#__PURE__*/jsx(AriaStatus, {
|
|
219
|
+
announceOnShow: false,
|
|
220
|
+
delayMs: SCREEN_READER_DELAY,
|
|
221
|
+
className: visuallyHiddenClasses.InternalVisuallyHidden,
|
|
222
|
+
children: counter === null || counter === void 0 ? void 0 : counter.message
|
|
223
|
+
}), /*#__PURE__*/jsxs(VisuallyHidden, {
|
|
224
|
+
id: characterCountStaticMessageId,
|
|
225
|
+
children: ["You can enter up to ", characterLimit, " ", characterLimit === 1 ? "character" : "characters"]
|
|
226
|
+
}), /*#__PURE__*/jsxs(Text, {
|
|
227
|
+
"aria-hidden": "true",
|
|
228
|
+
id: characterCountId,
|
|
229
|
+
size: "small",
|
|
230
|
+
className: clsx(classes.CharacterCounter, isOverLimit && classes["CharacterCounter--error"]),
|
|
231
|
+
children: [isOverLimit && /*#__PURE__*/jsx(AlertFillIcon, {
|
|
232
|
+
size: 16
|
|
233
|
+
}), counter === null || counter === void 0 ? void 0 : counter.message]
|
|
234
|
+
})]
|
|
268
235
|
})]
|
|
269
236
|
});
|
|
270
|
-
$[
|
|
271
|
-
$[
|
|
272
|
-
$[
|
|
273
|
-
$[
|
|
274
|
-
$[
|
|
275
|
-
$[
|
|
276
|
-
$[
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
$[
|
|
286
|
-
$[
|
|
287
|
-
$[
|
|
237
|
+
$[20] = block;
|
|
238
|
+
$[21] = characterCountId;
|
|
239
|
+
$[22] = characterCountStaticMessageId;
|
|
240
|
+
$[23] = characterLimit;
|
|
241
|
+
$[24] = className;
|
|
242
|
+
$[25] = cols;
|
|
243
|
+
$[26] = contrast;
|
|
244
|
+
$[27] = currentLength;
|
|
245
|
+
$[28] = defaultValue;
|
|
246
|
+
$[29] = disabled;
|
|
247
|
+
$[30] = isControlled;
|
|
248
|
+
$[31] = maxHeight;
|
|
249
|
+
$[32] = minHeight;
|
|
250
|
+
$[33] = onChange;
|
|
251
|
+
$[34] = ref;
|
|
252
|
+
$[35] = required;
|
|
253
|
+
$[36] = resize;
|
|
254
|
+
$[37] = rest;
|
|
255
|
+
$[38] = rows;
|
|
256
|
+
$[39] = style;
|
|
257
|
+
$[40] = validationStatus;
|
|
258
|
+
$[41] = value;
|
|
259
|
+
$[42] = t5;
|
|
288
260
|
} else {
|
|
289
|
-
|
|
261
|
+
t5 = $[42];
|
|
290
262
|
}
|
|
291
|
-
return
|
|
263
|
+
return t5;
|
|
292
264
|
});
|
|
293
265
|
Textarea.displayName = 'Textarea';
|
|
294
266
|
Textarea.__SLOT__ = Symbol('Textarea');
|
package/dist/_VisuallyHidden.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { c } from 'react-compiler-runtime';
|
|
2
|
-
import
|
|
2
|
+
import visuallyHiddenClasses from './_VisuallyHidden.module.css.js';
|
|
3
3
|
import { clsx } from 'clsx';
|
|
4
4
|
import { jsx } from 'react/jsx-runtime';
|
|
5
5
|
|
|
@@ -36,7 +36,7 @@ function VisuallyHidden(t0) {
|
|
|
36
36
|
let t2;
|
|
37
37
|
if ($[6] !== className || $[7] !== t1) {
|
|
38
38
|
t2 = clsx(className, {
|
|
39
|
-
[
|
|
39
|
+
[visuallyHiddenClasses.InternalVisuallyHidden]: t1
|
|
40
40
|
});
|
|
41
41
|
$[6] = className;
|
|
42
42
|
$[7] = t1;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import './_VisuallyHidden-1f156b61.css';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var visuallyHiddenClasses = {"InternalVisuallyHidden":"prc-src-InternalVisuallyHidden-2YaI6"};
|
|
4
4
|
|
|
5
|
-
export {
|
|
5
|
+
export { visuallyHiddenClasses as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Announce.d.ts","sourceRoot":"","sources":["../../src/live-region/Announce.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,6BAA6B,CAAA;AAEjE,MAAM,MAAM,aAAa,CAAC,EAAE,SAAS,KAAK,CAAC,WAAW,IAAI,gBAAgB,CACxE,EAAE,EACF,KAAK,EACL;IACE;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IAExB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAEhB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB;;;OAGG;IACH,UAAU,CAAC,EAAE,WAAW,GAAG,QAAQ,CAAA;CACpC,CACF,CAAA;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,EAAE,SAAS,KAAK,CAAC,WAAW,GAAG,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"Announce.d.ts","sourceRoot":"","sources":["../../src/live-region/Announce.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,6BAA6B,CAAA;AAEjE,MAAM,MAAM,aAAa,CAAC,EAAE,SAAS,KAAK,CAAC,WAAW,IAAI,gBAAgB,CACxE,EAAE,EACF,KAAK,EACL;IACE;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IAExB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAEhB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB;;;OAGG;IACH,UAAU,CAAC,EAAE,WAAW,GAAG,QAAQ,CAAA;CACpC,CACF,CAAA;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,EAAE,SAAS,KAAK,CAAC,WAAW,GAAG,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,EAAE,CAAC,qBAsGtF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { c } from 'react-compiler-runtime';
|
|
2
2
|
import { announceFromElement } from '@primer/live-region-element';
|
|
3
|
-
import { useRef,
|
|
3
|
+
import { useRef, useEffect } from 'react';
|
|
4
4
|
import { useEffectOnce } from '../internal/hooks/useEffectOnce.js';
|
|
5
5
|
import { useEffectCallback } from '../internal/hooks/useEffectCallback.js';
|
|
6
6
|
import { jsx } from 'react/jsx-runtime';
|
|
@@ -11,7 +11,7 @@ import { jsx } from 'react/jsx-runtime';
|
|
|
11
11
|
* will also announce any changes to the text content of `children`
|
|
12
12
|
*/
|
|
13
13
|
function Announce(props) {
|
|
14
|
-
const $ = c(
|
|
14
|
+
const $ = c(24);
|
|
15
15
|
let children;
|
|
16
16
|
let delayMs;
|
|
17
17
|
let rest;
|
|
@@ -51,10 +51,10 @@ function Announce(props) {
|
|
|
51
51
|
const hidden = t2 === undefined ? false : t2;
|
|
52
52
|
const politeness = t3 === undefined ? "polite" : t3;
|
|
53
53
|
const ref = useRef(null);
|
|
54
|
-
const
|
|
54
|
+
const previousAnnouncementText = useRef(null);
|
|
55
55
|
const savedAnnouncement = useRef(null);
|
|
56
56
|
let t4;
|
|
57
|
-
if ($[8] !== delayMs || $[9] !== hidden || $[10] !== politeness
|
|
57
|
+
if ($[8] !== delayMs || $[9] !== hidden || $[10] !== politeness) {
|
|
58
58
|
t4 = () => {
|
|
59
59
|
var _savedAnnouncement$cu;
|
|
60
60
|
const {
|
|
@@ -70,14 +70,10 @@ function Announce(props) {
|
|
|
70
70
|
if (!textContent) {
|
|
71
71
|
return;
|
|
72
72
|
}
|
|
73
|
-
if (textContent === previousAnnouncementText) {
|
|
73
|
+
if (textContent === previousAnnouncementText.current) {
|
|
74
74
|
return;
|
|
75
75
|
}
|
|
76
|
-
|
|
77
|
-
if (style.display === "none") {
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
if (style.visibility === "hidden") {
|
|
76
|
+
if (!isVisible(element)) {
|
|
81
77
|
return;
|
|
82
78
|
}
|
|
83
79
|
(_savedAnnouncement$cu = savedAnnouncement.current) === null || _savedAnnouncement$cu === void 0 ? void 0 : _savedAnnouncement$cu.cancel();
|
|
@@ -87,34 +83,33 @@ function Announce(props) {
|
|
|
87
83
|
politeness,
|
|
88
84
|
delayMs
|
|
89
85
|
});
|
|
90
|
-
|
|
86
|
+
previousAnnouncementText.current = textContent;
|
|
91
87
|
};
|
|
92
88
|
$[8] = delayMs;
|
|
93
89
|
$[9] = hidden;
|
|
94
90
|
$[10] = politeness;
|
|
95
|
-
$[11] =
|
|
96
|
-
$[12] = t4;
|
|
91
|
+
$[11] = t4;
|
|
97
92
|
} else {
|
|
98
|
-
t4 = $[
|
|
93
|
+
t4 = $[11];
|
|
99
94
|
}
|
|
100
95
|
const announce = useEffectCallback(t4);
|
|
101
96
|
let t5;
|
|
102
|
-
if ($[
|
|
97
|
+
if ($[12] !== announce || $[13] !== announceOnShow) {
|
|
103
98
|
t5 = () => {
|
|
104
99
|
if (announceOnShow) {
|
|
105
100
|
announce();
|
|
106
101
|
}
|
|
107
102
|
};
|
|
108
|
-
$[
|
|
109
|
-
$[
|
|
110
|
-
$[
|
|
103
|
+
$[12] = announce;
|
|
104
|
+
$[13] = announceOnShow;
|
|
105
|
+
$[14] = t5;
|
|
111
106
|
} else {
|
|
112
|
-
t5 = $[
|
|
107
|
+
t5 = $[14];
|
|
113
108
|
}
|
|
114
109
|
useEffectOnce(t5);
|
|
115
110
|
let t6;
|
|
116
111
|
let t7;
|
|
117
|
-
if ($[
|
|
112
|
+
if ($[15] !== announce) {
|
|
118
113
|
t6 = () => {
|
|
119
114
|
const {
|
|
120
115
|
current: container
|
|
@@ -135,17 +130,17 @@ function Announce(props) {
|
|
|
135
130
|
};
|
|
136
131
|
};
|
|
137
132
|
t7 = [announce];
|
|
138
|
-
$[
|
|
139
|
-
$[
|
|
140
|
-
$[
|
|
133
|
+
$[15] = announce;
|
|
134
|
+
$[16] = t6;
|
|
135
|
+
$[17] = t7;
|
|
141
136
|
} else {
|
|
142
|
-
t6 = $[
|
|
143
|
-
t7 = $[
|
|
137
|
+
t6 = $[16];
|
|
138
|
+
t7 = $[17];
|
|
144
139
|
}
|
|
145
140
|
useEffect(t6, t7);
|
|
146
141
|
let t8;
|
|
147
142
|
let t9;
|
|
148
|
-
if ($[
|
|
143
|
+
if ($[18] === Symbol.for("react.memo_cache_sentinel")) {
|
|
149
144
|
t8 = () => () => {
|
|
150
145
|
if (savedAnnouncement.current !== null) {
|
|
151
146
|
savedAnnouncement.current.cancel();
|
|
@@ -153,26 +148,26 @@ function Announce(props) {
|
|
|
153
148
|
}
|
|
154
149
|
};
|
|
155
150
|
t9 = [];
|
|
156
|
-
$[
|
|
157
|
-
$[
|
|
151
|
+
$[18] = t8;
|
|
152
|
+
$[19] = t9;
|
|
158
153
|
} else {
|
|
159
|
-
t8 = $[
|
|
160
|
-
t9 = $[
|
|
154
|
+
t8 = $[18];
|
|
155
|
+
t9 = $[19];
|
|
161
156
|
}
|
|
162
157
|
useEffect(t8, t9);
|
|
163
158
|
let t10;
|
|
164
|
-
if ($[
|
|
159
|
+
if ($[20] !== BaseComponent || $[21] !== children || $[22] !== rest) {
|
|
165
160
|
t10 = /*#__PURE__*/jsx(BaseComponent, {
|
|
166
161
|
...rest,
|
|
167
162
|
ref: ref,
|
|
168
163
|
children: children
|
|
169
164
|
});
|
|
170
|
-
$[
|
|
171
|
-
$[
|
|
172
|
-
$[
|
|
173
|
-
$[
|
|
165
|
+
$[20] = BaseComponent;
|
|
166
|
+
$[21] = children;
|
|
167
|
+
$[22] = rest;
|
|
168
|
+
$[23] = t10;
|
|
174
169
|
} else {
|
|
175
|
-
t10 = $[
|
|
170
|
+
t10 = $[23];
|
|
176
171
|
}
|
|
177
172
|
return t10;
|
|
178
173
|
}
|
|
@@ -186,4 +181,24 @@ function getTextContent(element) {
|
|
|
186
181
|
return value ? value.trim() : '';
|
|
187
182
|
}
|
|
188
183
|
|
|
184
|
+
/**
|
|
185
|
+
* Determine if an element is visible (not hidden via `display: none` or
|
|
186
|
+
* `visibility: hidden`). Prefers the native `checkVisibility()` API when
|
|
187
|
+
* available and falls back to `getComputedStyle` for older browsers.
|
|
188
|
+
*/
|
|
189
|
+
function isVisible(element) {
|
|
190
|
+
if (typeof element.checkVisibility === 'function') {
|
|
191
|
+
return element.checkVisibility({
|
|
192
|
+
// `visibilityProperty` is the standard option name (Chrome 116+, Firefox
|
|
193
|
+
// 125+, Safari 17.4+); `checkVisibilityCSS` is the legacy Chromium name
|
|
194
|
+
// (Chrome 105+). Unknown options are ignored, so passing both ensures
|
|
195
|
+
// `visibility: hidden` is treated as not visible across all engines.
|
|
196
|
+
visibilityProperty: true,
|
|
197
|
+
checkVisibilityCSS: true
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
const style = window.getComputedStyle(element);
|
|
201
|
+
return style.display !== 'none' && style.visibility !== 'hidden';
|
|
202
|
+
}
|
|
203
|
+
|
|
189
204
|
export { Announce };
|
|
@@ -1,27 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Shared character counting
|
|
3
|
-
*
|
|
2
|
+
* Shared character counting helpers for text inputs with character limits.
|
|
3
|
+
* Provides the pure derivation used to render the counter and validation state.
|
|
4
4
|
*/
|
|
5
|
-
export
|
|
6
|
-
|
|
7
|
-
onScreenReaderAnnounce: (message: string) => void;
|
|
8
|
-
}
|
|
9
|
-
export declare class CharacterCounter {
|
|
10
|
-
private announceTimeout;
|
|
11
|
-
private callbacks;
|
|
12
|
-
private isInitialLoad;
|
|
13
|
-
constructor(callbacks: CharacterCounterCallbacks);
|
|
14
|
-
/**
|
|
15
|
-
* Update the character count based on current input value
|
|
16
|
-
*/
|
|
17
|
-
updateCharacterCount(currentLength: number, maxLength: number): void;
|
|
5
|
+
export declare const SCREEN_READER_DELAY = 500;
|
|
6
|
+
export interface CharacterCountState {
|
|
18
7
|
/**
|
|
19
|
-
*
|
|
8
|
+
* Number of characters remaining before the limit is reached, or the number of
|
|
9
|
+
* characters over the limit when it has been exceeded.
|
|
20
10
|
*/
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
11
|
+
count: number;
|
|
12
|
+
/** Whether the current length exceeds the limit. */
|
|
13
|
+
isOverLimit: boolean;
|
|
14
|
+
/** Human readable description of the remaining or over count. */
|
|
15
|
+
message: string;
|
|
26
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Compute the character count state for a given length and limit. This is a pure
|
|
19
|
+
* function so the counter can be derived during render without component state.
|
|
20
|
+
*/
|
|
21
|
+
export declare function getCharacterCountState(currentLength: number, maxLength: number): CharacterCountState;
|
|
27
22
|
//# sourceMappingURL=character-counter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"character-counter.d.ts","sourceRoot":"","sources":["../../src/utils/character-counter.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"character-counter.d.ts","sourceRoot":"","sources":["../../src/utils/character-counter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,mBAAmB,MAAM,CAAA;AAEtC,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAA;IACb,oDAAoD;IACpD,WAAW,EAAE,OAAO,CAAA;IACpB,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,mBAAmB,CAmBpG"}
|