@elliemae/ds-accessibility 3.1.4-rc.1 → 3.1.5-rc.2
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/dist/cjs/live-region/DSLiveRegion.js +1 -1
- package/dist/cjs/live-region/DSLiveRegion.js.map +2 -2
- package/dist/cjs/live-region/index.js +1 -1
- package/dist/cjs/live-region/index.js.map +2 -2
- package/dist/cjs/live-region/propTypes.js +1 -8
- package/dist/cjs/live-region/propTypes.js.map +2 -2
- package/dist/cjs/live-region/useLiveRegion.js +93 -0
- package/dist/cjs/live-region/useLiveRegion.js.map +7 -0
- package/dist/esm/live-region/DSLiveRegion.js +1 -1
- package/dist/esm/live-region/DSLiveRegion.js.map +2 -2
- package/dist/esm/live-region/index.js +1 -1
- package/dist/esm/live-region/index.js.map +1 -1
- package/dist/esm/live-region/propTypes.js +1 -8
- package/dist/esm/live-region/propTypes.js.map +2 -2
- package/dist/esm/live-region/useLiveRegion.js +71 -0
- package/dist/esm/live-region/useLiveRegion.js.map +7 -0
- package/package.json +3 -3
@@ -31,7 +31,7 @@ var import_ds_utilities = require("@elliemae/ds-utilities");
|
|
31
31
|
var import_styles = require("./styles");
|
32
32
|
var import_propTypes = require("./propTypes");
|
33
33
|
const DSLiveRegion = (0, import_react.memo)((props) => {
|
34
|
-
const [text, setText] = (0, import_react.useState)("");
|
34
|
+
const [text, setText] = (0, import_react.useState)(" ");
|
35
35
|
(0, import_react.useEffect)(() => {
|
36
36
|
if (props.methods && props.methods.current) {
|
37
37
|
props.methods.current.read = setText;
|
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"version": 3,
|
3
3
|
"sources": ["../../../src/live-region/DSLiveRegion.tsx", "../../../../../scripts/build/transpile/react-shim.js"],
|
4
|
-
"sourcesContent": ["import ReactDOM from 'react-dom';\nimport React, { memo, useEffect, useState } from 'react';\nimport { describe } from '@elliemae/ds-utilities';\nimport { StyledContainer } from './styles';\nimport { propTypes } from './propTypes';\nimport type { DSLiveRegionT } from './propTypes';\n\nconst DSLiveRegion = memo((props: DSLiveRegionT.Props): JSX.Element | null => {\n const [text, setText] = useState('');\n\n useEffect(() => {\n if (props.methods && props.methods.current) {\n props.methods.current.read = setText;\n }\n }, [props.methods]);\n\n if (text === '') return null;\n\n return ReactDOM.createPortal(\n <StyledContainer aria-atomic id={props.id} role={props.role} aria-live={props['aria-live'] || 'polite'}>\n {text}\n </StyledContainer>,\n props.portal?.current || document.body,\n );\n});\n\nDSLiveRegion.propTypes = propTypes;\nDSLiveRegion.displayName = 'DSLiveRegion';\nconst DSLiveRegionWithSchema = describe(DSLiveRegion);\nDSLiveRegionWithSchema.propTypes = propTypes;\n\nexport { DSLiveRegion, DSLiveRegionWithSchema };\n", "import * as React from 'react';\nexport { React };\n"],
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB,uBAAqB;AACrB,mBAAiD;AACjD,0BAAyB;AACzB,oBAAgC;AAChC,uBAA0B;AAG1B,MAAM,eAAe,uBAAK,CAAC,UAAmD;AAC5E,QAAM,CAAC,MAAM,WAAW,2BAAS,
|
4
|
+
"sourcesContent": ["import ReactDOM from 'react-dom';\nimport React, { memo, useEffect, useState } from 'react';\nimport { describe } from '@elliemae/ds-utilities';\nimport { StyledContainer } from './styles';\nimport { propTypes } from './propTypes';\nimport type { DSLiveRegionT } from './propTypes';\n\nconst DSLiveRegion = memo((props: DSLiveRegionT.Props): JSX.Element | null => {\n const [text, setText] = useState(' ');\n\n useEffect(() => {\n if (props.methods && props.methods.current) {\n props.methods.current.read = setText;\n }\n }, [props.methods]);\n\n if (text === '') return null;\n\n return ReactDOM.createPortal(\n <StyledContainer aria-atomic id={props.id} role={props.role} aria-live={props['aria-live'] || 'polite'}>\n {text}\n </StyledContainer>,\n props.portal?.current || document.body,\n );\n});\n\nDSLiveRegion.propTypes = propTypes;\nDSLiveRegion.displayName = 'DSLiveRegion';\nconst DSLiveRegionWithSchema = describe(DSLiveRegion);\nDSLiveRegionWithSchema.propTypes = propTypes;\n\nexport { DSLiveRegion, DSLiveRegionWithSchema };\n", "import * as React from 'react';\nexport { React };\n"],
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB,uBAAqB;AACrB,mBAAiD;AACjD,0BAAyB;AACzB,oBAAgC;AAChC,uBAA0B;AAG1B,MAAM,eAAe,uBAAK,CAAC,UAAmD;AAC5E,QAAM,CAAC,MAAM,WAAW,2BAAS,GAAG;AAEpC,8BAAU,MAAM;AACd,QAAI,MAAM,WAAW,MAAM,QAAQ,SAAS;AAC1C,YAAM,QAAQ,QAAQ,OAAO;AAAA,IAC/B;AAAA,EACF,GAAG,CAAC,MAAM,OAAO,CAAC;AAElB,MAAI,SAAS;AAAI,WAAO;AAExB,SAAO,yBAAS,aACd,mDAAC;AAAA,IAAgB,eAAW;AAAA,IAAC,IAAI,MAAM;AAAA,IAAI,MAAM,MAAM;AAAA,IAAM,aAAW,MAAM,gBAAgB;AAAA,KAC3F,IACH,GACA,MAAM,QAAQ,WAAW,SAAS,IACpC;AACF,CAAC;AAED,aAAa,YAAY;AACzB,aAAa,cAAc;AAC3B,MAAM,yBAAyB,kCAAS,YAAY;AACpD,uBAAuB,YAAY;",
|
6
6
|
"names": []
|
7
7
|
}
|
@@ -18,5 +18,5 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
18
18
|
var live_region_exports = {};
|
19
19
|
module.exports = __toCommonJS(live_region_exports);
|
20
20
|
var React = __toESM(require("react"));
|
21
|
-
__reExport(live_region_exports, require("./
|
21
|
+
__reExport(live_region_exports, require("./useLiveRegion"), module.exports);
|
22
22
|
//# sourceMappingURL=index.js.map
|
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"version": 3,
|
3
3
|
"sources": ["../../../src/live-region/index.ts", "../../../../../scripts/build/transpile/react-shim.js"],
|
4
|
-
"sourcesContent": ["export * from './
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;ACAA,YAAuB;ADAvB,gCAAc,
|
4
|
+
"sourcesContent": ["export * from './useLiveRegion';\n", "import * as React from 'react';\nexport { React };\n"],
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;ACAA,YAAuB;ADAvB,gCAAc,4BAAd;",
|
6
6
|
"names": []
|
7
7
|
}
|
@@ -24,12 +24,5 @@ __export(propTypes_exports, {
|
|
24
24
|
});
|
25
25
|
module.exports = __toCommonJS(propTypes_exports);
|
26
26
|
var React = __toESM(require("react"));
|
27
|
-
|
28
|
-
const propTypes = {
|
29
|
-
methods: import_ds_utilities.PropTypes.object.description("Ref Object."),
|
30
|
-
portal: import_ds_utilities.PropTypes.node.description("Sets a custom portal").defaultValue("Body Element."),
|
31
|
-
["aria-live"]: import_ds_utilities.PropTypes.oneOf(["assertive", "polite", "off"]).description("Selects your aria live mode."),
|
32
|
-
role: import_ds_utilities.PropTypes.oneOf(["log", "status", "alert", "progressbar", "marquee", "timer"]).description("Selects your specific role."),
|
33
|
-
id: import_ds_utilities.PropTypes.string.description("Unique id for the Live Region.")
|
34
|
-
};
|
27
|
+
const propTypes = {};
|
35
28
|
//# sourceMappingURL=propTypes.js.map
|
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"version": 3,
|
3
3
|
"sources": ["../../../src/live-region/propTypes.ts", "../../../../../scripts/build/transpile/react-shim.js"],
|
4
|
-
"sourcesContent": ["import
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;
|
4
|
+
"sourcesContent": ["import type React from 'react';\n\nexport declare namespace UseLiveRegionT {\n export interface Props {\n id?: string;\n portal?: React.MutableRefObject<HTMLElement>;\n }\n}\n\nexport const propTypes = {};\n", "import * as React from 'react';\nexport { React };\n"],
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADShB,MAAM,YAAY,CAAC;",
|
6
6
|
"names": []
|
7
7
|
}
|
@@ -0,0 +1,93 @@
|
|
1
|
+
var __create = Object.create;
|
2
|
+
var __defProp = Object.defineProperty;
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
7
|
+
var __export = (target, all) => {
|
8
|
+
for (var name in all)
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
10
|
+
};
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
13
|
+
for (let key of __getOwnPropNames(from))
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
16
|
+
}
|
17
|
+
return to;
|
18
|
+
};
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
|
20
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
21
|
+
var useLiveRegion_exports = {};
|
22
|
+
__export(useLiveRegion_exports, {
|
23
|
+
UseLiveRegionWithSchema: () => UseLiveRegionWithSchema,
|
24
|
+
useLiveRegion: () => useLiveRegion
|
25
|
+
});
|
26
|
+
module.exports = __toCommonJS(useLiveRegion_exports);
|
27
|
+
var React = __toESM(require("react"));
|
28
|
+
var import_react_dom = __toESM(require("react-dom"));
|
29
|
+
var import_react = __toESM(require("react"));
|
30
|
+
var import_ds_utilities = require("@elliemae/ds-utilities");
|
31
|
+
var import_uid = require("uid");
|
32
|
+
var import_styles = require("./styles");
|
33
|
+
var import_propTypes = require("./propTypes");
|
34
|
+
const DSLiveRegion = (0, import_react.memo)((props) => {
|
35
|
+
const [internalMessage, setInternalMessage] = (0, import_react.useState)("");
|
36
|
+
const [unsafe_emulateAssertiveNVDA, setUnsafe_emulateAssertiveNVDA] = (0, import_react.useState)(false);
|
37
|
+
const [role, setRole] = (0, import_react.useState)(void 0);
|
38
|
+
const [ariaLive, setAriaLive] = (0, import_react.useState)("polite");
|
39
|
+
const { id, portal } = props || {};
|
40
|
+
const reset = (0, import_react.useCallback)(() => {
|
41
|
+
setInternalMessage("");
|
42
|
+
setUnsafe_emulateAssertiveNVDA(false);
|
43
|
+
setAriaLive("polite");
|
44
|
+
setRole(void 0);
|
45
|
+
}, []);
|
46
|
+
const configure = (0, import_react.useCallback)((message, options) => {
|
47
|
+
reset();
|
48
|
+
setTimeout(() => {
|
49
|
+
if (options?.unsafe_emulateAssertiveNVDA)
|
50
|
+
setUnsafe_emulateAssertiveNVDA(true);
|
51
|
+
setTimeout(() => {
|
52
|
+
if (options?.assertive || options?.unsafe_emulateAssertiveNVDA)
|
53
|
+
setAriaLive("assertive");
|
54
|
+
if (options?.unsafe_emulateAssertiveNVDA) {
|
55
|
+
setRole("alert");
|
56
|
+
setUnsafe_emulateAssertiveNVDA(false);
|
57
|
+
}
|
58
|
+
setInternalMessage(message);
|
59
|
+
});
|
60
|
+
});
|
61
|
+
}, [reset]);
|
62
|
+
(0, import_react.useEffect)(() => {
|
63
|
+
if (props.methods) {
|
64
|
+
props.methods.current.read = configure;
|
65
|
+
}
|
66
|
+
}, [configure, props.methods]);
|
67
|
+
if (unsafe_emulateAssertiveNVDA)
|
68
|
+
return null;
|
69
|
+
return import_react_dom.default.createPortal(/* @__PURE__ */ import_react.default.createElement(import_styles.StyledContainer, {
|
70
|
+
"aria-atomic": true,
|
71
|
+
id,
|
72
|
+
role,
|
73
|
+
"aria-live": ariaLive
|
74
|
+
}, internalMessage), portal?.current || document.body);
|
75
|
+
});
|
76
|
+
const useLiveRegion = (props) => {
|
77
|
+
const methods = (0, import_react.useRef)({});
|
78
|
+
const { id, portal } = props || {};
|
79
|
+
const instanceUID = (0, import_react.useMemo)(() => `ds-live-region-${(0, import_uid.uid)(5)}`, []);
|
80
|
+
const read = (0, import_react.useCallback)((message, options) => methods.current.read?.(message, options), []);
|
81
|
+
return (0, import_react.useMemo)(() => ({
|
82
|
+
LiveRegion: () => /* @__PURE__ */ import_react.default.createElement(DSLiveRegion, {
|
83
|
+
methods,
|
84
|
+
id: instanceUID || id,
|
85
|
+
portal
|
86
|
+
}),
|
87
|
+
read
|
88
|
+
}), [id, instanceUID, portal, read]);
|
89
|
+
};
|
90
|
+
useLiveRegion.displayName = "useLiveRegion";
|
91
|
+
const UseLiveRegionWithSchema = (0, import_ds_utilities.describe)(useLiveRegion);
|
92
|
+
UseLiveRegionWithSchema.propTypes = import_propTypes.propTypes;
|
93
|
+
//# sourceMappingURL=useLiveRegion.js.map
|
@@ -0,0 +1,7 @@
|
|
1
|
+
{
|
2
|
+
"version": 3,
|
3
|
+
"sources": ["../../../src/live-region/useLiveRegion.tsx", "../../../../../scripts/build/transpile/react-shim.js"],
|
4
|
+
"sourcesContent": ["import ReactDOM from 'react-dom';\nimport React, { memo, useEffect, useState, useCallback, useRef, useMemo } from 'react';\nimport { describe } from '@elliemae/ds-utilities';\nimport { uid } from 'uid';\nimport { StyledContainer } from './styles';\nimport { propTypes } from './propTypes';\nimport type { UseLiveRegionT } from './propTypes';\n\ninterface Options {\n assertive?: boolean;\n unsafe_emulateAssertiveNVDA?: boolean;\n}\ninterface Methods {\n read?: (message: string, options: Options) => void;\n}\nexport interface Props {\n methods?: React.MutableRefObject<Methods>;\n id?: string;\n portal?: React.MutableRefObject<HTMLElement>;\n}\n\nconst DSLiveRegion = memo((props: Props): JSX.Element | null => {\n const [internalMessage, setInternalMessage] = useState<string>('');\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const [unsafe_emulateAssertiveNVDA, setUnsafe_emulateAssertiveNVDA] = useState(false);\n const [role, setRole] = useState<undefined | string>(undefined);\n const [ariaLive, setAriaLive] = useState('polite');\n const { id, portal } = props || {};\n\n const reset = useCallback(() => {\n setInternalMessage('');\n setUnsafe_emulateAssertiveNVDA(false);\n setAriaLive('polite');\n setRole(undefined);\n }, []);\n\n const configure = useCallback(\n (message: string, options: Options) => {\n reset();\n setTimeout(() => {\n if (options?.unsafe_emulateAssertiveNVDA) setUnsafe_emulateAssertiveNVDA(true);\n // eslint-disable-next-line max-nested-callbacks\n setTimeout(() => {\n if (options?.assertive || options?.unsafe_emulateAssertiveNVDA) setAriaLive('assertive');\n if (options?.unsafe_emulateAssertiveNVDA) {\n setRole('alert');\n setUnsafe_emulateAssertiveNVDA(false);\n }\n setInternalMessage(message);\n });\n });\n },\n [reset],\n );\n\n useEffect(() => {\n if (props.methods) {\n props.methods.current.read = configure;\n }\n }, [configure, props.methods]);\n\n if (unsafe_emulateAssertiveNVDA) return null;\n\n return ReactDOM.createPortal(\n <StyledContainer aria-atomic id={id} role={role} aria-live={ariaLive}>\n {internalMessage}\n </StyledContainer>,\n portal?.current || document.body,\n );\n});\n\nconst useLiveRegion = (props: UseLiveRegionT.Props) => {\n const methods = useRef<Methods>({});\n\n const { id, portal } = props || {};\n\n const instanceUID = useMemo(() => `ds-live-region-${uid(5)}`, []);\n\n const read = useCallback((message: string, options: Options) => methods.current.read?.(message, options), []);\n\n return useMemo(\n () => ({\n LiveRegion: () => <DSLiveRegion methods={methods} id={instanceUID || id} portal={portal} />,\n read,\n }),\n [id, instanceUID, portal, read],\n );\n};\n\nuseLiveRegion.displayName = 'useLiveRegion';\nconst UseLiveRegionWithSchema = describe(useLiveRegion);\nUseLiveRegionWithSchema.propTypes = propTypes;\nexport { useLiveRegion, UseLiveRegionWithSchema };\n", "import * as React from 'react';\nexport { React };\n"],
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB,uBAAqB;AACrB,mBAA+E;AAC/E,0BAAyB;AACzB,iBAAoB;AACpB,oBAAgC;AAChC,uBAA0B;AAgB1B,MAAM,eAAe,uBAAK,CAAC,UAAqC;AAC9D,QAAM,CAAC,iBAAiB,sBAAsB,2BAAiB,EAAE;AAEjE,QAAM,CAAC,6BAA6B,kCAAkC,2BAAS,KAAK;AACpF,QAAM,CAAC,MAAM,WAAW,2BAA6B,MAAS;AAC9D,QAAM,CAAC,UAAU,eAAe,2BAAS,QAAQ;AACjD,QAAM,EAAE,IAAI,WAAW,SAAS,CAAC;AAEjC,QAAM,QAAQ,8BAAY,MAAM;AAC9B,uBAAmB,EAAE;AACrB,mCAA+B,KAAK;AACpC,gBAAY,QAAQ;AACpB,YAAQ,MAAS;AAAA,EACnB,GAAG,CAAC,CAAC;AAEL,QAAM,YAAY,8BAChB,CAAC,SAAiB,YAAqB;AACrC,UAAM;AACN,eAAW,MAAM;AACf,UAAI,SAAS;AAA6B,uCAA+B,IAAI;AAE7E,iBAAW,MAAM;AACf,YAAI,SAAS,aAAa,SAAS;AAA6B,sBAAY,WAAW;AACvF,YAAI,SAAS,6BAA6B;AACxC,kBAAQ,OAAO;AACf,yCAA+B,KAAK;AAAA,QACtC;AACA,2BAAmB,OAAO;AAAA,MAC5B,CAAC;AAAA,IACH,CAAC;AAAA,EACH,GACA,CAAC,KAAK,CACR;AAEA,8BAAU,MAAM;AACd,QAAI,MAAM,SAAS;AACjB,YAAM,QAAQ,QAAQ,OAAO;AAAA,IAC/B;AAAA,EACF,GAAG,CAAC,WAAW,MAAM,OAAO,CAAC;AAE7B,MAAI;AAA6B,WAAO;AAExC,SAAO,yBAAS,aACd,mDAAC;AAAA,IAAgB,eAAW;AAAA,IAAC;AAAA,IAAQ;AAAA,IAAY,aAAW;AAAA,KACzD,eACH,GACA,QAAQ,WAAW,SAAS,IAC9B;AACF,CAAC;AAED,MAAM,gBAAgB,CAAC,UAAgC;AACrD,QAAM,UAAU,yBAAgB,CAAC,CAAC;AAElC,QAAM,EAAE,IAAI,WAAW,SAAS,CAAC;AAEjC,QAAM,cAAc,0BAAQ,MAAM,kBAAkB,oBAAI,CAAC,KAAK,CAAC,CAAC;AAEhE,QAAM,OAAO,8BAAY,CAAC,SAAiB,YAAqB,QAAQ,QAAQ,OAAO,SAAS,OAAO,GAAG,CAAC,CAAC;AAE5G,SAAO,0BACL,MAAO;AAAA,IACL,YAAY,MAAM,mDAAC;AAAA,MAAa;AAAA,MAAkB,IAAI,eAAe;AAAA,MAAI;AAAA,KAAgB;AAAA,IACzF;AAAA,EACF,IACA,CAAC,IAAI,aAAa,QAAQ,IAAI,CAChC;AACF;AAEA,cAAc,cAAc;AAC5B,MAAM,0BAA0B,kCAAS,aAAa;AACtD,wBAAwB,YAAY;",
|
6
|
+
"names": []
|
7
|
+
}
|
@@ -5,7 +5,7 @@ import { describe } from "@elliemae/ds-utilities";
|
|
5
5
|
import { StyledContainer } from "./styles";
|
6
6
|
import { propTypes } from "./propTypes";
|
7
7
|
const DSLiveRegion = memo((props) => {
|
8
|
-
const [text, setText] = useState("");
|
8
|
+
const [text, setText] = useState(" ");
|
9
9
|
useEffect(() => {
|
10
10
|
if (props.methods && props.methods.current) {
|
11
11
|
props.methods.current.read = setText;
|
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"version": 3,
|
3
3
|
"sources": ["../../../../../scripts/build/transpile/react-shim.js", "../../../src/live-region/DSLiveRegion.tsx"],
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import ReactDOM from 'react-dom';\nimport React, { memo, useEffect, useState } from 'react';\nimport { describe } from '@elliemae/ds-utilities';\nimport { StyledContainer } from './styles';\nimport { propTypes } from './propTypes';\nimport type { DSLiveRegionT } from './propTypes';\n\nconst DSLiveRegion = memo((props: DSLiveRegionT.Props): JSX.Element | null => {\n const [text, setText] = useState('');\n\n useEffect(() => {\n if (props.methods && props.methods.current) {\n props.methods.current.read = setText;\n }\n }, [props.methods]);\n\n if (text === '') return null;\n\n return ReactDOM.createPortal(\n <StyledContainer aria-atomic id={props.id} role={props.role} aria-live={props['aria-live'] || 'polite'}>\n {text}\n </StyledContainer>,\n props.portal?.current || document.body,\n );\n});\n\nDSLiveRegion.propTypes = propTypes;\nDSLiveRegion.displayName = 'DSLiveRegion';\nconst DSLiveRegionWithSchema = describe(DSLiveRegion);\nDSLiveRegionWithSchema.propTypes = propTypes;\n\nexport { DSLiveRegion, DSLiveRegionWithSchema };\n"],
|
5
|
-
"mappings": "AAAA;ACAA;AACA;AACA;AACA;AACA;AAGA,MAAM,eAAe,KAAK,CAAC,UAAmD;AAC5E,QAAM,CAAC,MAAM,WAAW,SAAS,
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import ReactDOM from 'react-dom';\nimport React, { memo, useEffect, useState } from 'react';\nimport { describe } from '@elliemae/ds-utilities';\nimport { StyledContainer } from './styles';\nimport { propTypes } from './propTypes';\nimport type { DSLiveRegionT } from './propTypes';\n\nconst DSLiveRegion = memo((props: DSLiveRegionT.Props): JSX.Element | null => {\n const [text, setText] = useState(' ');\n\n useEffect(() => {\n if (props.methods && props.methods.current) {\n props.methods.current.read = setText;\n }\n }, [props.methods]);\n\n if (text === '') return null;\n\n return ReactDOM.createPortal(\n <StyledContainer aria-atomic id={props.id} role={props.role} aria-live={props['aria-live'] || 'polite'}>\n {text}\n </StyledContainer>,\n props.portal?.current || document.body,\n );\n});\n\nDSLiveRegion.propTypes = propTypes;\nDSLiveRegion.displayName = 'DSLiveRegion';\nconst DSLiveRegionWithSchema = describe(DSLiveRegion);\nDSLiveRegionWithSchema.propTypes = propTypes;\n\nexport { DSLiveRegion, DSLiveRegionWithSchema };\n"],
|
5
|
+
"mappings": "AAAA;ACAA;AACA;AACA;AACA;AACA;AAGA,MAAM,eAAe,KAAK,CAAC,UAAmD;AAC5E,QAAM,CAAC,MAAM,WAAW,SAAS,GAAG;AAEpC,YAAU,MAAM;AACd,QAAI,MAAM,WAAW,MAAM,QAAQ,SAAS;AAC1C,YAAM,QAAQ,QAAQ,OAAO;AAAA,IAC/B;AAAA,EACF,GAAG,CAAC,MAAM,OAAO,CAAC;AAElB,MAAI,SAAS;AAAI,WAAO;AAExB,SAAO,SAAS,aACd,qCAAC;AAAA,IAAgB,eAAW;AAAA,IAAC,IAAI,MAAM;AAAA,IAAI,MAAM,MAAM;AAAA,IAAM,aAAW,MAAM,gBAAgB;AAAA,KAC3F,IACH,GACA,MAAM,QAAQ,WAAW,SAAS,IACpC;AACF,CAAC;AAED,aAAa,YAAY;AACzB,aAAa,cAAc;AAC3B,MAAM,yBAAyB,SAAS,YAAY;AACpD,uBAAuB,YAAY;",
|
6
6
|
"names": []
|
7
7
|
}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"version": 3,
|
3
3
|
"sources": ["../../../../../scripts/build/transpile/react-shim.js", "../../../src/live-region/index.ts"],
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "export * from './
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "export * from './useLiveRegion';\n"],
|
5
5
|
"mappings": "AAAA;ACAA;",
|
6
6
|
"names": []
|
7
7
|
}
|
@@ -1,12 +1,5 @@
|
|
1
1
|
import * as React from "react";
|
2
|
-
|
3
|
-
const propTypes = {
|
4
|
-
methods: PropTypes.object.description("Ref Object."),
|
5
|
-
portal: PropTypes.node.description("Sets a custom portal").defaultValue("Body Element."),
|
6
|
-
["aria-live"]: PropTypes.oneOf(["assertive", "polite", "off"]).description("Selects your aria live mode."),
|
7
|
-
role: PropTypes.oneOf(["log", "status", "alert", "progressbar", "marquee", "timer"]).description("Selects your specific role."),
|
8
|
-
id: PropTypes.string.description("Unique id for the Live Region.")
|
9
|
-
};
|
2
|
+
const propTypes = {};
|
10
3
|
export {
|
11
4
|
propTypes
|
12
5
|
};
|
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"version": 3,
|
3
3
|
"sources": ["../../../../../scripts/build/transpile/react-shim.js", "../../../src/live-region/propTypes.ts"],
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import
|
5
|
-
"mappings": "AAAA;
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import type React from 'react';\n\nexport declare namespace UseLiveRegionT {\n export interface Props {\n id?: string;\n portal?: React.MutableRefObject<HTMLElement>;\n }\n}\n\nexport const propTypes = {};\n"],
|
5
|
+
"mappings": "AAAA;ACSO,MAAM,YAAY,CAAC;",
|
6
6
|
"names": []
|
7
7
|
}
|
@@ -0,0 +1,71 @@
|
|
1
|
+
import * as React from "react";
|
2
|
+
import ReactDOM from "react-dom";
|
3
|
+
import React2, { memo, useEffect, useState, useCallback, useRef, useMemo } from "react";
|
4
|
+
import { describe } from "@elliemae/ds-utilities";
|
5
|
+
import { uid } from "uid";
|
6
|
+
import { StyledContainer } from "./styles";
|
7
|
+
import { propTypes } from "./propTypes";
|
8
|
+
const DSLiveRegion = memo((props) => {
|
9
|
+
const [internalMessage, setInternalMessage] = useState("");
|
10
|
+
const [unsafe_emulateAssertiveNVDA, setUnsafe_emulateAssertiveNVDA] = useState(false);
|
11
|
+
const [role, setRole] = useState(void 0);
|
12
|
+
const [ariaLive, setAriaLive] = useState("polite");
|
13
|
+
const { id, portal } = props || {};
|
14
|
+
const reset = useCallback(() => {
|
15
|
+
setInternalMessage("");
|
16
|
+
setUnsafe_emulateAssertiveNVDA(false);
|
17
|
+
setAriaLive("polite");
|
18
|
+
setRole(void 0);
|
19
|
+
}, []);
|
20
|
+
const configure = useCallback((message, options) => {
|
21
|
+
reset();
|
22
|
+
setTimeout(() => {
|
23
|
+
if (options?.unsafe_emulateAssertiveNVDA)
|
24
|
+
setUnsafe_emulateAssertiveNVDA(true);
|
25
|
+
setTimeout(() => {
|
26
|
+
if (options?.assertive || options?.unsafe_emulateAssertiveNVDA)
|
27
|
+
setAriaLive("assertive");
|
28
|
+
if (options?.unsafe_emulateAssertiveNVDA) {
|
29
|
+
setRole("alert");
|
30
|
+
setUnsafe_emulateAssertiveNVDA(false);
|
31
|
+
}
|
32
|
+
setInternalMessage(message);
|
33
|
+
});
|
34
|
+
});
|
35
|
+
}, [reset]);
|
36
|
+
useEffect(() => {
|
37
|
+
if (props.methods) {
|
38
|
+
props.methods.current.read = configure;
|
39
|
+
}
|
40
|
+
}, [configure, props.methods]);
|
41
|
+
if (unsafe_emulateAssertiveNVDA)
|
42
|
+
return null;
|
43
|
+
return ReactDOM.createPortal(/* @__PURE__ */ React2.createElement(StyledContainer, {
|
44
|
+
"aria-atomic": true,
|
45
|
+
id,
|
46
|
+
role,
|
47
|
+
"aria-live": ariaLive
|
48
|
+
}, internalMessage), portal?.current || document.body);
|
49
|
+
});
|
50
|
+
const useLiveRegion = (props) => {
|
51
|
+
const methods = useRef({});
|
52
|
+
const { id, portal } = props || {};
|
53
|
+
const instanceUID = useMemo(() => `ds-live-region-${uid(5)}`, []);
|
54
|
+
const read = useCallback((message, options) => methods.current.read?.(message, options), []);
|
55
|
+
return useMemo(() => ({
|
56
|
+
LiveRegion: () => /* @__PURE__ */ React2.createElement(DSLiveRegion, {
|
57
|
+
methods,
|
58
|
+
id: instanceUID || id,
|
59
|
+
portal
|
60
|
+
}),
|
61
|
+
read
|
62
|
+
}), [id, instanceUID, portal, read]);
|
63
|
+
};
|
64
|
+
useLiveRegion.displayName = "useLiveRegion";
|
65
|
+
const UseLiveRegionWithSchema = describe(useLiveRegion);
|
66
|
+
UseLiveRegionWithSchema.propTypes = propTypes;
|
67
|
+
export {
|
68
|
+
UseLiveRegionWithSchema,
|
69
|
+
useLiveRegion
|
70
|
+
};
|
71
|
+
//# sourceMappingURL=useLiveRegion.js.map
|
@@ -0,0 +1,7 @@
|
|
1
|
+
{
|
2
|
+
"version": 3,
|
3
|
+
"sources": ["../../../../../scripts/build/transpile/react-shim.js", "../../../src/live-region/useLiveRegion.tsx"],
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import ReactDOM from 'react-dom';\nimport React, { memo, useEffect, useState, useCallback, useRef, useMemo } from 'react';\nimport { describe } from '@elliemae/ds-utilities';\nimport { uid } from 'uid';\nimport { StyledContainer } from './styles';\nimport { propTypes } from './propTypes';\nimport type { UseLiveRegionT } from './propTypes';\n\ninterface Options {\n assertive?: boolean;\n unsafe_emulateAssertiveNVDA?: boolean;\n}\ninterface Methods {\n read?: (message: string, options: Options) => void;\n}\nexport interface Props {\n methods?: React.MutableRefObject<Methods>;\n id?: string;\n portal?: React.MutableRefObject<HTMLElement>;\n}\n\nconst DSLiveRegion = memo((props: Props): JSX.Element | null => {\n const [internalMessage, setInternalMessage] = useState<string>('');\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const [unsafe_emulateAssertiveNVDA, setUnsafe_emulateAssertiveNVDA] = useState(false);\n const [role, setRole] = useState<undefined | string>(undefined);\n const [ariaLive, setAriaLive] = useState('polite');\n const { id, portal } = props || {};\n\n const reset = useCallback(() => {\n setInternalMessage('');\n setUnsafe_emulateAssertiveNVDA(false);\n setAriaLive('polite');\n setRole(undefined);\n }, []);\n\n const configure = useCallback(\n (message: string, options: Options) => {\n reset();\n setTimeout(() => {\n if (options?.unsafe_emulateAssertiveNVDA) setUnsafe_emulateAssertiveNVDA(true);\n // eslint-disable-next-line max-nested-callbacks\n setTimeout(() => {\n if (options?.assertive || options?.unsafe_emulateAssertiveNVDA) setAriaLive('assertive');\n if (options?.unsafe_emulateAssertiveNVDA) {\n setRole('alert');\n setUnsafe_emulateAssertiveNVDA(false);\n }\n setInternalMessage(message);\n });\n });\n },\n [reset],\n );\n\n useEffect(() => {\n if (props.methods) {\n props.methods.current.read = configure;\n }\n }, [configure, props.methods]);\n\n if (unsafe_emulateAssertiveNVDA) return null;\n\n return ReactDOM.createPortal(\n <StyledContainer aria-atomic id={id} role={role} aria-live={ariaLive}>\n {internalMessage}\n </StyledContainer>,\n portal?.current || document.body,\n );\n});\n\nconst useLiveRegion = (props: UseLiveRegionT.Props) => {\n const methods = useRef<Methods>({});\n\n const { id, portal } = props || {};\n\n const instanceUID = useMemo(() => `ds-live-region-${uid(5)}`, []);\n\n const read = useCallback((message: string, options: Options) => methods.current.read?.(message, options), []);\n\n return useMemo(\n () => ({\n LiveRegion: () => <DSLiveRegion methods={methods} id={instanceUID || id} portal={portal} />,\n read,\n }),\n [id, instanceUID, portal, read],\n );\n};\n\nuseLiveRegion.displayName = 'useLiveRegion';\nconst UseLiveRegionWithSchema = describe(useLiveRegion);\nUseLiveRegionWithSchema.propTypes = propTypes;\nexport { useLiveRegion, UseLiveRegionWithSchema };\n"],
|
5
|
+
"mappings": "AAAA;ACAA;AACA;AACA;AACA;AACA;AACA;AAgBA,MAAM,eAAe,KAAK,CAAC,UAAqC;AAC9D,QAAM,CAAC,iBAAiB,sBAAsB,SAAiB,EAAE;AAEjE,QAAM,CAAC,6BAA6B,kCAAkC,SAAS,KAAK;AACpF,QAAM,CAAC,MAAM,WAAW,SAA6B,MAAS;AAC9D,QAAM,CAAC,UAAU,eAAe,SAAS,QAAQ;AACjD,QAAM,EAAE,IAAI,WAAW,SAAS,CAAC;AAEjC,QAAM,QAAQ,YAAY,MAAM;AAC9B,uBAAmB,EAAE;AACrB,mCAA+B,KAAK;AACpC,gBAAY,QAAQ;AACpB,YAAQ,MAAS;AAAA,EACnB,GAAG,CAAC,CAAC;AAEL,QAAM,YAAY,YAChB,CAAC,SAAiB,YAAqB;AACrC,UAAM;AACN,eAAW,MAAM;AACf,UAAI,SAAS;AAA6B,uCAA+B,IAAI;AAE7E,iBAAW,MAAM;AACf,YAAI,SAAS,aAAa,SAAS;AAA6B,sBAAY,WAAW;AACvF,YAAI,SAAS,6BAA6B;AACxC,kBAAQ,OAAO;AACf,yCAA+B,KAAK;AAAA,QACtC;AACA,2BAAmB,OAAO;AAAA,MAC5B,CAAC;AAAA,IACH,CAAC;AAAA,EACH,GACA,CAAC,KAAK,CACR;AAEA,YAAU,MAAM;AACd,QAAI,MAAM,SAAS;AACjB,YAAM,QAAQ,QAAQ,OAAO;AAAA,IAC/B;AAAA,EACF,GAAG,CAAC,WAAW,MAAM,OAAO,CAAC;AAE7B,MAAI;AAA6B,WAAO;AAExC,SAAO,SAAS,aACd,qCAAC;AAAA,IAAgB,eAAW;AAAA,IAAC;AAAA,IAAQ;AAAA,IAAY,aAAW;AAAA,KACzD,eACH,GACA,QAAQ,WAAW,SAAS,IAC9B;AACF,CAAC;AAED,MAAM,gBAAgB,CAAC,UAAgC;AACrD,QAAM,UAAU,OAAgB,CAAC,CAAC;AAElC,QAAM,EAAE,IAAI,WAAW,SAAS,CAAC;AAEjC,QAAM,cAAc,QAAQ,MAAM,kBAAkB,IAAI,CAAC,KAAK,CAAC,CAAC;AAEhE,QAAM,OAAO,YAAY,CAAC,SAAiB,YAAqB,QAAQ,QAAQ,OAAO,SAAS,OAAO,GAAG,CAAC,CAAC;AAE5G,SAAO,QACL,MAAO;AAAA,IACL,YAAY,MAAM,qCAAC;AAAA,MAAa;AAAA,MAAkB,IAAI,eAAe;AAAA,MAAI;AAAA,KAAgB;AAAA,IACzF;AAAA,EACF,IACA,CAAC,IAAI,aAAa,QAAQ,IAAI,CAChC;AACF;AAEA,cAAc,cAAc;AAC5B,MAAM,0BAA0B,SAAS,aAAa;AACtD,wBAAwB,YAAY;",
|
6
|
+
"names": []
|
7
|
+
}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@elliemae/ds-accessibility",
|
3
|
-
"version": "3.1.
|
3
|
+
"version": "3.1.5-rc.2",
|
4
4
|
"license": "MIT",
|
5
5
|
"description": "ICE MT - Dimsum - Accessibility",
|
6
6
|
"files": [
|
@@ -51,8 +51,8 @@
|
|
51
51
|
"indent": 4
|
52
52
|
},
|
53
53
|
"dependencies": {
|
54
|
-
"@elliemae/ds-system": "3.1.
|
55
|
-
"@elliemae/ds-utilities": "3.1.
|
54
|
+
"@elliemae/ds-system": "3.1.5-rc.2",
|
55
|
+
"@elliemae/ds-utilities": "3.1.5-rc.2"
|
56
56
|
},
|
57
57
|
"devDependencies": {
|
58
58
|
"styled-components": "~5.3.3"
|