@pega/cosmos-react-core 3.0.0-dev.8.0 → 3.0.0-dev.9.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.
- package/lib/components/AppShell/AppShell.d.ts.map +1 -1
- package/lib/components/AppShell/AppShell.js +3 -3
- package/lib/components/AppShell/AppShell.js.map +1 -1
- package/lib/components/Badges/Keyboard.d.ts +9 -0
- package/lib/components/Badges/Keyboard.d.ts.map +1 -0
- package/lib/components/Badges/Keyboard.js +51 -0
- package/lib/components/Badges/Keyboard.js.map +1 -0
- package/lib/components/Badges/index.d.ts +2 -0
- package/lib/components/Badges/index.d.ts.map +1 -1
- package/lib/components/Badges/index.js +1 -0
- package/lib/components/Badges/index.js.map +1 -1
- package/lib/components/CreditCard/CreditCard.types.d.ts +43 -0
- package/lib/components/CreditCard/CreditCard.types.d.ts.map +1 -1
- package/lib/components/CreditCard/CreditCard.types.js.map +1 -1
- package/lib/components/CreditCard/CreditCardInput.d.ts +6 -0
- package/lib/components/CreditCard/CreditCardInput.d.ts.map +1 -0
- package/lib/components/CreditCard/CreditCardInput.js +39 -0
- package/lib/components/CreditCard/CreditCardInput.js.map +1 -0
- package/lib/components/CreditCard/index.d.ts +3 -1
- package/lib/components/CreditCard/index.d.ts.map +1 -1
- package/lib/components/CreditCard/index.js +2 -0
- package/lib/components/CreditCard/index.js.map +1 -1
- package/lib/components/CreditCard/utils.d.ts +11 -0
- package/lib/components/CreditCard/utils.d.ts.map +1 -1
- package/lib/components/CreditCard/utils.js +20 -2
- package/lib/components/CreditCard/utils.js.map +1 -1
- package/lib/components/Currency/CurrencyInput.d.ts.map +1 -1
- package/lib/components/Currency/CurrencyInput.js +13 -12
- package/lib/components/Currency/CurrencyInput.js.map +1 -1
- package/lib/components/DateTime/Input/DateTime.styles.js +1 -1
- package/lib/components/DateTime/Input/DateTime.styles.js.map +1 -1
- package/lib/components/HTML/HTML.d.ts.map +1 -1
- package/lib/components/HTML/HTML.js +5 -1
- package/lib/components/HTML/HTML.js.map +1 -1
- package/lib/components/Modal/DockedModals.d.ts.map +1 -1
- package/lib/components/Modal/DockedModals.js +1 -2
- package/lib/components/Modal/DockedModals.js.map +1 -1
- package/lib/components/Modal/MinimizedModal.d.ts.map +1 -1
- package/lib/components/Modal/MinimizedModal.js +1 -0
- package/lib/components/Modal/MinimizedModal.js.map +1 -1
- package/lib/components/Modal/Modal.styles.d.ts.map +1 -1
- package/lib/components/Modal/Modal.styles.js +1 -0
- package/lib/components/Modal/Modal.styles.js.map +1 -1
- package/lib/components/Number/NumberInput.d.ts.map +1 -1
- package/lib/components/Number/NumberInput.js +40 -35
- package/lib/components/Number/NumberInput.js.map +1 -1
- package/lib/components/Number/NumberInput.types.d.ts +3 -1
- package/lib/components/Number/NumberInput.types.d.ts.map +1 -1
- package/lib/components/Number/NumberInput.types.js.map +1 -1
- package/lib/components/Number/utils.d.ts +1 -1
- package/lib/components/Number/utils.d.ts.map +1 -1
- package/lib/components/Number/utils.js +18 -32
- package/lib/components/Number/utils.js.map +1 -1
- package/lib/components/Phone/PhoneInput.d.ts +1 -1
- package/lib/components/Phone/PhoneInput.d.ts.map +1 -1
- package/lib/components/Phone/PhoneInput.js +19 -36
- package/lib/components/Phone/PhoneInput.js.map +1 -1
- package/lib/components/Phone/utils.d.ts +1 -2
- package/lib/components/Phone/utils.d.ts.map +1 -1
- package/lib/components/Phone/utils.js +3 -26
- package/lib/components/Phone/utils.js.map +1 -1
- package/lib/components/Tabs/Tabs.d.ts.map +1 -1
- package/lib/components/Tabs/Tabs.js +1 -1
- package/lib/components/Tabs/Tabs.js.map +1 -1
- package/lib/hooks/index.d.ts +2 -0
- package/lib/hooks/index.d.ts.map +1 -1
- package/lib/hooks/index.js +2 -0
- package/lib/hooks/index.js.map +1 -1
- package/lib/hooks/useActiveDescendant.d.ts.map +1 -1
- package/lib/hooks/useActiveDescendant.js +6 -1
- package/lib/hooks/useActiveDescendant.js.map +1 -1
- package/lib/hooks/useInputFormatter.d.ts +12 -0
- package/lib/hooks/useInputFormatter.d.ts.map +1 -0
- package/lib/hooks/useInputFormatter.js +84 -0
- package/lib/hooks/useInputFormatter.js.map +1 -0
- package/lib/hooks/useOS.d.ts +7 -0
- package/lib/hooks/useOS.d.ts.map +1 -0
- package/lib/hooks/useOS.js +28 -0
- package/lib/hooks/useOS.js.map +1 -0
- package/lib/styles/gradients.d.ts +4 -1
- package/lib/styles/gradients.d.ts.map +1 -1
- package/lib/styles/gradients.js +46 -3
- package/lib/styles/gradients.js.map +1 -1
- package/lib/theme/theme.d.ts +18 -0
- package/lib/theme/theme.d.ts.map +1 -1
- package/lib/theme/themeDefinition.json +10 -0
- package/lib/theme/themes/darkTheme.json +6 -0
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppShell.d.ts","sourceRoot":"","sources":["../../../src/components/AppShell/AppShell.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EAWjB,EAAE,EAIH,MAAM,OAAO,CAAC;AAiBf,OAAO,KAAK,EAAE,YAAY,EAAc,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"AppShell.d.ts","sourceRoot":"","sources":["../../../src/components/AppShell/AppShell.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EAWjB,EAAE,EAIH,MAAM,OAAO,CAAC;AAiBf,OAAO,KAAK,EAAE,YAAY,EAAc,MAAM,aAAa,CAAC;AAgD5D,OAAO,EACL,aAAa,EAQb,UAAU,EACX,MAAM,kBAAkB,CAAC;AA8V1B,eAAO,MAAM,KAAK,EAAE,EAAE,CAAC,UAAU,CAmGhC,CAAC;AAEF,QAAA,MAAM,QAAQ,EAAE,iBAAiB,CAAC,aAAa,GAAG,YAAY,CAgR7D,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|
|
@@ -16,7 +16,7 @@ import * as caretRightIcon from '../Icon/icons/caret-right.icon';
|
|
|
16
16
|
import Text from '../Text';
|
|
17
17
|
import Image from '../Image';
|
|
18
18
|
import ExpandCollapse from '../ExpandCollapse';
|
|
19
|
-
import { useFocusWithin, useI18n, useBreakpoint, useConsolidatedRef, useDirection, useTheme, useElement, useTransitionState, useArrows, useUID } from '../../hooks';
|
|
19
|
+
import { useFocusWithin, useI18n, useBreakpoint, useConsolidatedRef, useDirection, useTheme, useElement, useTransitionState, useArrows, useUID, useAfterInitialEffect } from '../../hooks';
|
|
20
20
|
import { openCloseStates } from '../../hooks/useTransitionState';
|
|
21
21
|
import Grid from '../Grid';
|
|
22
22
|
import Button from '../Button';
|
|
@@ -256,7 +256,7 @@ export const Utils = ({ operator, items, appHeader }) => {
|
|
|
256
256
|
if (item)
|
|
257
257
|
setDrawerOpen(true);
|
|
258
258
|
}, [item]);
|
|
259
|
-
|
|
259
|
+
useAfterInitialEffect(() => {
|
|
260
260
|
if (!drawerOpen) {
|
|
261
261
|
setActiveUtilItem('');
|
|
262
262
|
focusedImperatively.current = true;
|
|
@@ -339,7 +339,7 @@ const AppShell = forwardRef((props, ref) => {
|
|
|
339
339
|
else {
|
|
340
340
|
closeNav();
|
|
341
341
|
}
|
|
342
|
-
}, [isXlOrAbove]);
|
|
342
|
+
}, [isXlOrAbove, openNav, closeNav]);
|
|
343
343
|
useEffect(() => {
|
|
344
344
|
if (navState === 'closed' || navState === 'closing')
|
|
345
345
|
setDrawerOpen(false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppShell.js","sourceRoot":"","sources":["../../../src/components/AppShell/AppShell.tsx"],"names":[],"mappings":";;AAAA,OAAO,EAEL,UAAU,EAGV,QAAQ,EACR,WAAW,EACX,SAAS,EACT,OAAO,EAEP,UAAU,EACV,MAAM,EAIN,eAAe,EAChB,MAAM,OAAO,CAAC;AAEf,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,KAAK,MAAM,iBAAiB,CAAC;AACpC,OAAO,UAAU,MAAM,sBAAsB,CAAC;AAC9C,OAAO,WAAW,MAAM,gBAAgB,CAAC;AACzC,OAAO,IAAI,EAAE,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,SAAS,MAAM,0BAA0B,CAAC;AACtD,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AACpD,OAAO,KAAK,aAAa,MAAM,+BAA+B,CAAC;AAC/D,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AACpD,OAAO,KAAK,aAAa,MAAM,+BAA+B,CAAC;AAC/D,OAAO,KAAK,cAAc,MAAM,gCAAgC,CAAC;AACjE,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,KAAK,MAAM,UAAU,CAAC;AAC7B,OAAO,cAAc,MAAM,mBAAmB,CAAC;AAE/C,OAAO,EACL,cAAc,EACd,OAAO,EACP,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,kBAAkB,EAClB,SAAS,EACT,MAAM,EACP,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,MAAM,MAAM,WAAW,CAAC;AAC/B,OAAO,MAAM,MAAM,WAAW,CAAC;AAE/B,OAAO,QAAQ,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,cAAc,MAAM,UAAU,CAAC;AACtC,OAAO,gBAAgB,MAAM,YAAY,CAAC;AAC1C,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EACL,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,EACvB,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,eAAe,EAChB,MAAM,mBAAmB,CAAC;AAa3B,YAAY,CAAC,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;AAE1F,MAAM,aAAa,GAIf;IACF,IAAI,CAAC,KAAmB;QACtB,MAAM,EAAE,KAAK,GAAG,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC;QACxD,IAAI,SAAS,GAAgB,aAAa,CAAC;QAC3C,IAAI,aAA0B,CAAC;QAE/B,IAAI,QAAQ,GAMR;YACF,SAAS,EAAE,CAAC,CAAC,SAAS;SACvB,CAAC;QAEF,MAAM,EACJ,IAAI,EAAE,EAAE,SAAS,EAAE,EACpB,GAAG,QAAQ,EAAE,CAAC;QAEf,IAAI,UAAU,EAAE;YACd,QAAQ,GAAG;gBACT,EAAE,EAAE,cAAc;gBAClB,WAAW,EAAE,IAAI;gBACjB,iBAAiB,EAAE,IAAI;gBACvB,eAAe,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,YAAY,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK;gBACtF,GAAG,QAAQ;aACZ,CAAC;YAEF,SAAS,GAAG,mBAAmB,CAAC;SACjC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAC5C,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC;SACpC;aAAM;YACL,aAAa,GAAG,aAAa,CAAC,QAAQ,CAAC;SACxC;QAED,OAAO,CACL,KAAC,SAAS,OAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAM,QAAQ,YAClE,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE;gBACjB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;oBACvC,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC;iBACpC;qBAAM;oBACL,aAAa,GAAG,aAAa,CAAC,QAAQ,CAAC;iBACxC;gBACD,OAAO,KAAC,aAAa,IAA+B,UAAU,EAAE,UAAU,KAAM,IAAI,IAAzD,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,OAAO,CAAsC,CAAC;YAC3F,CAAC,CAAC,GACQ,CACb,CAAC;IACJ,CAAC;IACD,QAAQ,CAAC,KAAuB;QAC9B,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;QAChD,MAAM,EACJ,MAAM,EACN,OAAO,EACP,SAAS,EACT,IAAI,EACJ,OAAO,EACP,KAAK,EACL,WAAW,GAAG,KAAK,EACnB,SAAS,EACT,MAAM,EACN,OAAO,EACP,YAAY,EACZ,UAAU,EACV,GAAG,SAAS,EACb,GAAG,KAAK,CAAC;QAEV,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;QAEpB,MAAM,SAAS,GAMX;YACF,OAAO;YACP,IAAI;SACL,CAAC;QAEF,IAAI,SAAsB,CAAC;QAE3B,IAAI,OAAO,EAAE;YACX,SAAS,GAAG,gBAAgB,CAAC;YAC7B,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC;YAC5B,SAAS,CAAC,EAAE,GAAG,uBAAuB,CAAC;YACvC,SAAS,CAAC,OAAO,GAAG;gBAClB,SAAS,EAAE,WAAW;gBACtB,SAAS,EAAE;oBACT;wBACE,IAAI,EAAE,QAAQ;wBACd,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE;qBAChC;oBACD;wBACE,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE;4BACP,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;4BACzD,kBAAkB,EAAE,CAAC,SAAS,CAAC;yBAChC;qBACF;iBACF;aACF,CAAC;SACH;aAAM,IAAI,IAAI,EAAE;YACf,SAAS,GAAG,IAAI,CAAC;SAClB;aAAM,IAAI,OAAO,EAAE;YAClB,SAAS,GAAG,UAAU,CAAC;SACxB;aAAM;YACL,SAAS,GAAG,KAAK,CAAC;SACnB;QAED,MAAM,OAAO,GAAG,kBAAkB,CAAC,YAAY,CAAC,CAAC;QAEjD,SAAS,CAAC,GAAG,EAAE;YACb,IAAI,CAAC,OAAO,IAAI,OAAO,EAAE;gBACvB,MAAM,IAAI,GAAG,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtD,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;gBACtD,UAAU,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC9C,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;aAChC;YACD,IAAI,OAAO,IAAI,UAAU,IAAI,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,cAAc,CAAC;gBAClF,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;QAC7B,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QAEd,MAAM,EAAE,GAAG,EAAE,GAAG,YAAY,EAAE,CAAC;QAE/B,OAAO,CACL,eAAC,iBAAiB,OAAK,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,mBAAmB;YAEjE,MAAC,SAAS,OACJ,SAAS,EACb,GAAG,EAAE,OAAc,KACf,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAEhF,MAAM,EACN,SAAS,CAAC,CAAC,CAAC,CACX,MAAC,IAAI,IAAC,SAAS,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,aAC3D,yBAAO,OAAO,GAAQ,EACtB,KAAC,IAAI,IAAC,OAAO,EAAC,WAAW,YAAE,SAAS,GAAQ,IACvC,CACR,CAAC,CAAC,CAAC,CACF,yBAAO,OAAO,GAAQ,CACvB,EACA,OAAO,IAAI,KAAC,IAAI,IAAC,IAAI,EAAE,SAAS,GAAG,EAAE,EAAE,EAAE,EAAE,qBAAqB,GAAI,IAC3D;YACX,WAAW,IAAI,CACd,KAAC,MAAM,IACL,IAAI,QACJ,OAAO,EAAC,QAAQ,EAChB,EAAE,EAAE,eAAe,EACnB,OAAO,EAAE,SAAS,gBACN,CAAC,CAAC,cAAc,CAAC,YAE7B,KAAC,IAAI,IAAC,IAAI,EAAC,OAAO,GAAG,GACd,CACV,CACiB,CACrB,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,KAAmB;QACtB,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;QAChD,MAAM,EACJ,MAAM,EACN,OAAO,EACP,SAAS,EACT,IAAI,EACJ,OAAO,EACP,KAAK,EACL,SAAS,EACT,MAAM,EACN,OAAO,EACP,YAAY,EACZ,GAAG,SAAS,EACb,GAAG,KAAK,CAAC;QAEV,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;QAErB,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEjD,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;YACvC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC,EAAE,EAAE,CAAC,CAAC;QAEP,MAAM,OAAO,GAAG,kBAAkB,CAAC,YAAY,CAAC,CAAC;QAEjD,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,EAAE,GAAG,EAAiB,EAAE,EAAE;YACvD,IAAI,GAAG,KAAK,QAAQ,EAAE;gBACpB,YAAY,CAAC,IAAI,CAAC,CAAC;gBACnB,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;aAC1B;QACH,CAAC,EAAE,EAAE,CAAC,CAAC;QAEP,MAAM,OAAO,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAC;QAE5C,SAAS,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,mBAAmB,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAEnE,cAAc,CACZ,CAAC,OAAO,CAAC,EACT,WAAW,CAAC,SAAS,CAAC,EAAE;YACtB,IAAI,CAAC,SAAS;gBAAE,YAAY,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC,EAAE,EAAE,CAAC,CACP,CAAC;QAEF,MAAM,EAAE,GAAG,EAAE,GAAG,YAAY,EAAE,CAAC;QAE/B,OAAO,CACL,eAAC,iBAAiB,OACZ,SAAS,EACb,GAAG,EAAE,OAAO,EACZ,mBAAmB,EAAE,SAAS,EAC9B,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,OAAO;YAEZ,MAAC,UAAU,IACT,EAAE,EAAE,GAAG,EACP,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,mBACb,CAAC,SAAS,mBACV,GAAG,GAAG,OAAO,gBAChB,OAAO,EACnB,OAAO,EAAE,eAAe,aAEvB,MAAM,EACN,SAAS,CAAC,CAAC,CAAC,CACX,MAAC,IAAI,IAAC,SAAS,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,aAC3D,yBAAO,OAAO,GAAQ,EACtB,KAAC,IAAI,IAAC,OAAO,EAAC,WAAW,YAAE,SAAS,GAAQ,IACvC,CACR,CAAC,CAAC,CAAC,CACF,yBAAO,OAAO,GAAQ,CACvB,EACD,KAAC,IAAI,IAAC,IAAI,EAAE,SAAS,GAAG,EAAE,EAAE,EAAE,EAAE,qBAAqB,GAAI,IAC9C;YACb,KAAC,aAAa,CAAC,IAAI,IACjB,EAAE,EAAE,GAAG,GAAG,OAAO,EACjB,UAAU,QACV,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,CAAC,OAAO,IAAI,SAAS,GAChC,CACgB,CACrB,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,MAAM,SAAS,GAAsD,CAAC,EACpE,SAAS,EAGV,EAAE,EAAE;IACH,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;IAEpB,MAAM,oBAAoB,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;QACpD,OAAO;YACL,GAAG,QAAQ;YACX,OAAO,EAAE,QAAQ,CAAC,IAAI;SACvB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CACZ,GAAG,EAAE,CAAC,CACJ,KAAC,eAAe,cACd,KAAC,aAAa,CAAC,IAAI,IACjB,KAAK,EAAE;gBACL;oBACE,OAAO,EAAE,CAAC,CAAC,kBAAkB,CAAC;oBAC9B,MAAM,EAAE,KAAC,IAAI,IAAC,IAAI,EAAC,MAAM,EAAC,EAAE,EAAE,qBAAqB,GAAI;oBACvD,KAAK,EAAE,oBAAoB;iBAC5B;aACF,GACD,GACc,CACnB,EACD,CAAC,SAAS,CAAC,CACZ,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,KAAK,GAA8C,CAAC,KAA6B,EAAE,EAAE;IACzF,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IACxB,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAqB,EAAE,CAAC,CAAC;IAEjF,6DAA6D;IAC7D,MAAM,cAAc,GAAG,CAAC,KAAkB,EAAsB,EAAE;QAChE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAe,EAAE,EAAE;YACnC,OAAO;gBACL,GAAG,IAAI;gBACP,OAAO,EAAE,IAAI,CAAC,IAAI;gBAClB,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;gBAC3C,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,qBAAqB,GAAI,CAAC,CAAC,CAAC,IAAI;gBAC/E,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO;gBAC9C,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;aAC3D,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,mBAAmB,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7C,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,OAAO,CACL,wBACE,KAAC,aAAa,CAAC,IAAI,IAAC,KAAK,EAAE,gBAAgB,GAAI,GAC3C,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,KAAK,GAA8C,CAAC,KAA6B,EAAE,EAAE;IACzF,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAExB,MAAM,UAAU,GAAG,CAAC,KAAkB,EAAsB,EAAE;QAC5D,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAe,EAAE,EAAE;YACnC,MAAM,EACJ,EAAE,EACF,OAAO,EACP,SAAS,EACT,MAAM,GAAG,KAAC,IAAI,IAAC,IAAI,EAAC,YAAY,EAAC,EAAE,EAAE,qBAAqB,GAAI,EAC9D,MAAM,EACN,OAAO,EACP,SAAS,EACV,GAAG,IAAI,CAAC;YACT,OAAO;gBACL,EAAE;gBACF,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;gBAC3C,OAAO;gBACP,SAAS;gBACT,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,WAAW,EAAE,IAAI;gBACjB,OAAO;gBACP,SAAS;gBACT,MAAM;aACP,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,OAAO,CACL,KAAC,kBAAkB,cACjB,KAAC,aAAa,CAAC,IAAI,IAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,GAAI,GAC7B,CACtB,CAAC;AACJ,CAAC,CAAC;AAEF,qDAAqD;AACrD,MAAM,CAAC,MAAM,KAAK,GAAmB,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE;IACtE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,mBAAmB,EAAE,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;IACvF,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAqB,EAAE,CAAC,CAAC;IACjF,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,EAAiB,CAAC;IAClD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACzD,MAAM,cAAc,GAEhB,MAAM,CAAC,IAAI,CAAC,CAAC;IAEjB,MAAM,YAAY,GAAuB,OAAO,CAC9C,GAAG,EAAE,CACH,SAAS;QACP,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC;YACE;gBACE,OAAO,EAAE,QAAQ,CAAC,IAAI;gBACtB,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,OAAO,EAAE,QAAQ,CAAC,OAAO;aAC1B;SACF,EACP,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,CAC9D,CAAC;IAEF,6DAA6D;IAC7D,MAAM,eAAe,GAAG,CAAC,WAA4B,EAAsB,EAAE;QAC3E,OAAO,WAAW,EAAE,GAAG,CAAC,CAAC,UAAyB,EAAE,EAAE;YACpD,OAAO;gBACL,OAAO,EAAE,CAAC,CAAC,EAAE;oBACX,cAAc,CAAC,OAAO,GAAG,CAAC,CAAC,aAAa,CAAC;oBACzC,IAAI,UAAU,CAAC,UAAU,EAAE;wBACzB,OAAO,CAAC,UAAU,CAAC,CAAC;wBACpB,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;qBACpC;gBACH,CAAC;gBACD,GAAG,UAAU;gBACb,OAAO,EAAE,UAAU,CAAC,IAAI;gBACxB,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CACzB,MAAC,mBAAmB,eACjB,UAAU,CAAC,MAAM,EAClB,KAAC,KAAK,IAAC,EAAE,EAAE,eAAe,EAAE,OAAO,EAAC,QAAQ,YACzC,UAAU,CAAC,KAAK,GACX,IACY,CACvB,CAAC,CAAC,CAAC,CACF,UAAU,CAAC,MAAM,CAClB;aACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,KAAK,EAAE;YACT,mBAAmB,CAAC,CAAC,GAAG,eAAe,CAAC,KAAK,CAAE,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC;SACpE;aAAM;YACL,mBAAmB,CAAC,YAAY,CAAC,CAAC;SACnC;IACH,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;IAE1B,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE;YACrB,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE;gBACjC,OAAO,CAAC,KAAK,CAAC,CAAC;aAChB;QACH,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,IAAI;YAAE,aAAa,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,UAAU,EAAE;YACf,iBAAiB,CAAC,EAAE,CAAC,CAAC;YACtB,mBAAmB,CAAC,OAAO,GAAG,IAAI,CAAC;YACnC,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;SAClC;IACH,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,OAAO,CACL,8BACE,KAAC,WAAW,cACV,KAAC,aAAa,CAAC,IAAI;gBACjB,4EAA4E;;oBAA5E,4EAA4E;oBAC5E,KAAK,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,GAC/E,GACU,EACb,IAAI,IAAI,CACP,KAAC,cAAc,IACb,OAAO,EAAE,IAAI,CAAC,UAAU,EACxB,MAAM,EAAE,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,EACtC,aAAa,EAAE,GAAG,EAAE;oBAClB,OAAO,CAAC,SAAS,CAAC,CAAC;oBACnB,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;gBACzB,CAAC,EACD,YAAY,EAAE,IAAI,CAAC,YAAY,GAC/B,CACH,IACA,CACJ,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAoD,UAAU,CAC1E,CAAC,KAAqC,EAAE,GAAwB,EAAE,EAAE;IAClE,MAAM,EACJ,OAAO,EACP,WAAW,EACX,SAAS,EACT,WAAW,GAAG,UAAU,EAAE,YAAY;IACtC,SAAS,EACT,KAAK,EACL,OAAO,EACP,WAAW,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,EACpD,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,KAAK,EACL,GAAG,SAAS,EACb,GAAG,KAAK,CAAC;IACV,MAAM,EACJ,OAAO,EACP,UAAU,EACV,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,OAAO,EACjB,GAAG,gBAAgB,EACpB,GAAG,OAAO,CAAC;IAEZ,IAAI,SAAS,GAAgB,KAAK,CAAC;IACnC,IAAI,WAAW;QAAE,SAAS,GAAG,IAAI,CAAC;SAC7B,IAAI,cAAc;QAAE,SAAS,GAAG,MAAM,CAAC;IAE5C,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;IACpB,MAAM,EAAE,KAAK,EAAE,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAEvC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1D,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAA2B,IAAI,CAAC,CAAC;IAE3E,MAAM,mBAAmB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,UAAU,EAAkB,CAAC;IAC7D,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,UAAU,EAAkB,CAAC;IAEzE,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,cAAc,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAE3C,MAAM,aAAa,GAAG,CAAC,CAAC,SAAS,IAAI,cAAc,CAAC;IACpD,MAAM,eAAe,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,IAAI,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC;IAE1E,MAAM,gBAAgB,GAAG,MAAM,EAAiC,CAAC;IACjE,MAAM,iBAAiB,GAAG,MAAM,EAAiC,CAAC;IAClE,MAAM,iBAAiB,GAAG,MAAM,CAAc,IAAI,CAAC,CAAC;IAEpD,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,kBAAkB,CAAC;QAC/D,GAAG,EAAE,MAAM;QACX,QAAQ,EAAE,OAAO;QACjB,MAAM,EAAE,eAAe;QACvB,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ;KAC9C,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,QAAgB,CAAC,EAAE,EAAE;QAChD,IAAI,iBAAiB,CAAC,OAAO;YAAE,YAAY,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACvE,gBAAgB,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YACzC,WAAW,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC,EAAE,KAAK,CAAC,CAAC;IACZ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,QAAgB,CAAC,EAAE,EAAE;QACjD,IAAI,gBAAgB,CAAC,OAAO;YAAE,YAAY,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACrE,iBAAiB,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC1C,WAAW,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC,EAAE,KAAK,CAAC,CAAC;IACZ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE;QAC/B,IAAI,CAAC,mBAAmB,CAAC,OAAO,IAAI,cAAc;YAAE,OAAO,EAAE,CAAC;QAC9D,mBAAmB,CAAC,OAAO,GAAG,KAAK,CAAC;IACtC,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;IAE9B,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,EAAE,GAAG,EAAiB,EAAE,EAAE;QACvD,IAAI,GAAG,KAAK,QAAQ;YAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,cAAc,CACZ,CAAC,MAAM,CAAC,EACR,WAAW,CACT,CAAC,SAAkB,EAAE,UAA0B,EAAE,EAAE;QACjD,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC;YAAE,QAAQ,EAAE,CAAC;IAC/D,CAAC,EACD,CAAC,QAAQ,CAAC,CACX,CACF,CAAC;IAEF,eAAe,CAAC,GAAG,EAAE;QACnB,IAAI,WAAW,EAAE;YACf,OAAO,EAAE,CAAC;SACX;aAAM;YACL,QAAQ,EAAE,CAAC;SACZ;IACH,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,SAAS;YAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IAC5E,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,aAAa,EAAE;YACjB,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAChD,OAAO,GAAG,EAAE;gBACV,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACrD,CAAC,CAAC;SACH;IACH,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,cAAc,IAAI,aAAa,EAAE;YACnC,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAC5B,gBAAgB,CAAC,KAAK,CAAC,CAAC;SACzB;IACH,CAAC,EAAE,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC;IAEpC,MAAM,WAAW,GAAG,CAClB,MAAC,IAAI,OACC,SAAS,EACb,SAAS,EAAE;YACT,SAAS,EAAE,QAAQ;YACnB,OAAO,EAAE,SAAS;SACnB,EACD,GAAG,EAAE,MAAM,EACX,EAAE,EAAE,YAAY,EAChB,SAAS,EAAE,aAAa,EACxB,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,CAAC,CAAC,OAAO,EAClB,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,cAAc,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,EAC7E,YAAY,EAAE,cAAc,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,aAE7E,OAAO,IAAI,CACV,KAAC,oBAAoB,IACnB,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EACnB,KAAK,EAAE,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,YAEtD,OAAO,GACa,CACxB,EACA,CAAC,aAAa,IAAI,CACjB,MAAC,aAAa,IACZ,EAAE,EAAE,IAAI,EACR,WAAW,EAAE,SAAS,EACtB,OAAO,EAAC,MAAM,EACd,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,cAAc,gBACX,GAAG,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,KAC3D,gBAAgB,EACpB,SAAS,EAAE;oBACT,UAAU,EAAE,QAAQ;oBACpB,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,YAAY;iBAC9D,aAED,KAAC,IAAI,IAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,GAAI,EACvE,KAAC,IAAI,IAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,EAAC,MAAM,YACnC,OAAO,GACH,EACN,UAAU,IAAI,CACb,KAAC,IAAI,IAAC,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAC,MAAM,YACtC,UAAU,GACN,CACR,IACa,CACjB,EAEA,WAAW,IAAI,CAAC,aAAa,IAAI,CAChC,KAAC,gBAAgB,IACf,IAAI,EAAC,QAAQ,gBACD,WAAW,EACvB,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE,YAEjC,KAAC,WAAW,OAAK,WAAW,GAAI,GACf,CACpB,EAED,MAAC,gBAAgB,eACd,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,KAAC,SAAS,IAAC,SAAS,EAAE,SAAS,GAAI,EACxE,KAAK,IAAI,KAAC,KAAK,IAAC,KAAK,EAAE,KAAK,GAAI,EAChC,KAAK,IAAI,KAAC,KAAK,IAAC,KAAK,EAAE,KAAK,GAAI,IAChB,EAEnB,KAAC,KAAK,IAAC,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,GAAI,IAChE,CACR,CAAC;IAEF,OAAO,CACL,MAAC,eAAe,CAAC,QAAQ,IACvB,KAAK,EAAE,OAAO,CACZ,GAAG,EAAE,CAAC,CAAC;YACL,OAAO,EAAE,aAAa,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,SAAS;YACvE,QAAQ;YACR,UAAU;YACV,aAAa;YACb,SAAS;YACT,YAAY;YACZ,mBAAmB;YACnB,QAAQ,EAAE,QAAQ,IAAI,cAAc;YACpC,iBAAiB;SAClB,CAAC,EACF,CAAC,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,CAAC,CAC3E,aAED,KAAC,cAAc,KAAG,EACjB,aAAa,IAAI,CAChB,KAAC,SAAS,OACJ,OAAO,EACX,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,WAAW,GAChB,CACH,EAEA,cAAc,CAAC,CAAC,CAAC,CAChB,WAAW,CACZ,CAAC,CAAC,CAAC,CACF,8BACE,KAAC,IAAI,IAAC,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,iBAAiB,YACpF,KAAC,MAAM,IACL,OAAO,EAAC,QAAQ,EAChB,OAAO,EAAE,GAAG,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,gBAC7B,CAAC,CAAC,oBAAoB,CAAC,EACnC,IAAI,kBAEJ,KAAC,IAAI,IAAC,IAAI,EAAC,MAAM,GAAG,GACb,GACJ,EAEP,KAAC,QAAQ,IACP,IAAI,EAAE,iBAAiB,EACvB,eAAe,EAAC,MAAM,EACtB,mBAAmB,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,EACjD,qBAAqB,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,EACpD,OAAO,EAAE,CAAC,CAAC,EAAE;4BACX,IAAI,CAAC,CAAC,aAAa,KAAK,CAAC,CAAC,MAAM;gCAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;wBAC5D,CAAC,YAED,KAAC,MAAM,IACL,IAAI,EAAE,aAAa,EACnB,YAAY,EAAE,GAAG,EAAE;gCACjB,oBAAoB,CAAC,KAAK,CAAC,CAAC;4BAC9B,CAAC,EACD,QAAQ,EAAC,OAAO,EAChB,SAAS,EAAE,KAAK,EAChB,IAAI,EAAC,qCAAqC,EAC1C,cAAc,kBAEb,WAAW,GACL,GACA,IACV,CACJ,EACA,eAAe,IAAI,CAClB,MAAC,aAAa,IACZ,SAAS,EAAE,aAAa,EACxB,SAAS,EAAE,CAAC,cAAc,EAC1B,YAAY,EAAE,cAAc,CAAC,CAAC,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,cAAc,EAAE,YAAY,aAEnF,OAAO,IAAI,KAAC,kBAAkB,cAAE,OAAO,GAAsB,EAC7D,IAAI,IACS,CACjB,IACwB,CAC5B,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,eAAe,QAAQ,CAAC","sourcesContent":["import {\n FunctionComponent,\n forwardRef,\n PropsWithoutRef,\n Ref,\n useState,\n useCallback,\n useEffect,\n useMemo,\n ElementType,\n useContext,\n useRef,\n FC,\n MouseEventHandler,\n MutableRefObject,\n useLayoutEffect\n} from 'react';\n\nimport Flex from '../Flex';\nimport Link from '../Link';\nimport Count from '../Badges/Count';\nimport BareButton from '../Button/BareButton';\nimport SearchInput from '../SearchInput';\nimport Icon, { registerIcon } from '../Icon';\nimport * as timesIcon from '../Icon/icons/times.icon';\nimport * as plusIcon from '../Icon/icons/plus.icon';\nimport * as caseSolidIcon from '../Icon/icons/case-solid.icon';\nimport * as barsIcon from '../Icon/icons/bars.icon';\nimport * as caretLeftIcon from '../Icon/icons/caret-left.icon';\nimport * as caretRightIcon from '../Icon/icons/caret-right.icon';\nimport Text from '../Text';\nimport Image from '../Image';\nimport ExpandCollapse from '../ExpandCollapse';\nimport type { ForwardProps, OmitStrict } from '../../types';\nimport {\n useFocusWithin,\n useI18n,\n useBreakpoint,\n useConsolidatedRef,\n useDirection,\n useTheme,\n useElement,\n useTransitionState,\n useArrows,\n useUID\n} from '../../hooks';\nimport { openCloseStates } from '../../hooks/useTransitionState';\nimport Grid from '../Grid';\nimport Button from '../Button';\nimport Drawer from '../Drawer';\nimport type { PopoverProps } from '../Popover';\nimport Backdrop from '../Backdrop';\nimport { documentIsAvailable } from '../../utils';\n\nimport AppShellContext from './AppShellContext';\nimport AppShellDrawer from './Drawer';\nimport AppShellOperator from './Operator';\nimport AppHeader from './AppHeader';\nimport SkipNavigation from './SkipNavigation';\nimport {\n StyledAppNav,\n StyledAppInfo,\n StyledSearchForm,\n StyledCaseTypes,\n StyledScrollWrap,\n StyledUtils,\n StyledNavList,\n StyledNestedNavList,\n StyledNavListItem,\n StyledNavListMenuButton,\n StyledAppMain,\n StyledCaseClose,\n StyledAppShellNavIcon,\n StyledNavCasesList,\n StyledAppEnvironment,\n StyledBannerRegion,\n StyledCountIcon,\n StyledUtilIconCount,\n StyledMobileNav\n} from './AppShell.styles';\nimport {\n AppShellProps,\n CaseProps,\n CaseTypeProps,\n LinkProps,\n NavListItemProps,\n NavListProps,\n NavMenuProps,\n UtilItemProps,\n UtilsProps\n} from './AppShell.types';\n\nregisterIcon(timesIcon, plusIcon, caseSolidIcon, barsIcon, caretRightIcon, caretLeftIcon);\n\nconst NavComponents: {\n List: FunctionComponent<NavListProps>;\n ListItem: FunctionComponent<NavListItemProps>;\n Menu: FunctionComponent<NavMenuProps>;\n} = {\n List(props: NavListProps) {\n const { items = [], nestedList, collapsed, id } = props;\n let Component: ElementType = StyledNavList;\n let ItemComponent: ElementType;\n\n let fwdProps: {\n as?: ElementType;\n forwardedAs?: ElementType;\n nullWhenCollapsed?: boolean;\n transitionSpeed?: string;\n collapsed: boolean;\n } = {\n collapsed: !!collapsed\n };\n\n const {\n base: { animation }\n } = useTheme();\n\n if (nestedList) {\n fwdProps = {\n as: ExpandCollapse,\n forwardedAs: 'ul',\n nullWhenCollapsed: true,\n transitionSpeed: items.length >= 10 ? `calc(2 * ${animation.speed})` : animation.speed,\n ...fwdProps\n };\n\n Component = StyledNestedNavList;\n }\n\n if (Array.isArray(items) && items.length > 0) {\n ItemComponent = NavComponents.Menu;\n } else {\n ItemComponent = NavComponents.ListItem;\n }\n\n return (\n <Component {...(nestedList ? { role: 'menu', id } : {})} {...fwdProps}>\n {items?.map(item => {\n if (item.items && item.items.length > 0) {\n ItemComponent = NavComponents.Menu;\n } else {\n ItemComponent = NavComponents.ListItem;\n }\n return <ItemComponent key={item.id || item.primary} isMenuItem={nestedList} {...item} />;\n })}\n </Component>\n );\n },\n ListItem(props: NavListItemProps) {\n const { navOpen } = useContext(AppShellContext);\n const {\n visual,\n primary,\n secondary,\n href,\n onClick,\n items,\n dismissible = false,\n onDismiss,\n active,\n actions,\n forwardedRef,\n isMenuItem,\n ...restProps\n } = props;\n\n const t = useI18n();\n\n const compProps: {\n href?: string;\n onClick?: MouseEventHandler<HTMLAnchorElement | HTMLButtonElement | HTMLDivElement>;\n actions?: NavListItemProps['actions'];\n as?: ElementType<any>;\n popover?: OmitStrict<PopoverProps, 'show' | 'target' | 'children'>;\n } = {\n onClick,\n href\n };\n\n let Component: ElementType;\n\n if (actions) {\n Component = AppShellOperator;\n compProps.actions = actions;\n compProps.as = StyledNavListMenuButton;\n compProps.popover = {\n placement: 'right-end',\n modifiers: [\n {\n name: 'offset',\n options: { offset: [-12, -16] }\n },\n {\n name: 'flip',\n options: {\n boundary: documentIsAvailable ? document.body : undefined,\n fallbackPlacements: ['top-end']\n }\n }\n ]\n };\n } else if (href) {\n Component = Link;\n } else if (onClick) {\n Component = BareButton;\n } else {\n Component = 'div';\n }\n\n const itemRef = useConsolidatedRef(forwardedRef);\n\n useEffect(() => {\n if (!navOpen && actions) {\n const node = document.getElementsByTagName('body')[0];\n const clickEvent = document.createEvent('MouseEvent');\n clickEvent.initEvent('mousedown', true, true);\n node.dispatchEvent(clickEvent);\n }\n if (navOpen && isMenuItem && itemRef.current?.parentElement?.matches(':first-child'))\n itemRef.current?.focus();\n }, [navOpen]);\n\n const { end } = useDirection();\n\n return (\n <StyledNavListItem {...restProps} key={primary} nestedListCollapsed>\n {/* forwardedRef typed as 'any' due to ambiguity of Component element type */}\n <Component\n {...compProps}\n ref={itemRef as any}\n {...(isMenuItem ? { tabIndex: -1, role: 'menuitem', 'aria-label': primary } : {})}\n >\n {visual}\n {secondary ? (\n <Flex container={{ direction: 'column', alignItems: 'start' }}>\n <span>{primary}</span>\n <Text variant='secondary'>{secondary}</Text>\n </Flex>\n ) : (\n <span>{primary}</span>\n )}\n {actions && <Icon name={`caret-${end}`} as={StyledAppShellNavIcon} />}\n </Component>\n {dismissible && (\n <Button\n icon\n variant='simple'\n as={StyledCaseClose}\n onClick={onDismiss}\n aria-label={t('dismiss_case')}\n >\n <Icon name='times' />\n </Button>\n )}\n </StyledNavListItem>\n );\n },\n Menu(props: NavMenuProps) {\n const { navOpen } = useContext(AppShellContext);\n const {\n visual,\n primary,\n secondary,\n href,\n onClick,\n items,\n onDismiss,\n active,\n actions,\n forwardedRef,\n ...restProps\n } = props;\n\n const uid = useUID();\n\n const [collapsed, setCollapsed] = useState(true);\n\n const toggleCollapsed = useCallback(() => {\n setCollapsed(state => !state);\n }, []);\n\n const itemRef = useConsolidatedRef(forwardedRef);\n\n const onKeyDown = useCallback(({ key }: KeyboardEvent) => {\n if (key === 'Escape') {\n setCollapsed(true);\n itemRef.current?.focus();\n }\n }, []);\n\n const menuRef = useRef<HTMLLIElement>(null);\n\n useArrows(menuRef, { selector: '[role=\"menuitem\"]', cycle: true });\n\n useFocusWithin<HTMLElement>(\n [menuRef],\n useCallback(isFocused => {\n if (!isFocused) setCollapsed(true);\n }, [])\n );\n\n const { end } = useDirection();\n\n return (\n <StyledNavListItem\n {...restProps}\n key={primary}\n nestedListCollapsed={collapsed}\n onKeyDown={onKeyDown}\n ref={menuRef}\n >\n <BareButton\n id={uid}\n ref={itemRef}\n tabIndex={collapsed ? 0 : -1}\n aria-expanded={!collapsed}\n aria-controls={`${uid}-menu`}\n aria-label={primary}\n onClick={toggleCollapsed}\n >\n {visual}\n {secondary ? (\n <Flex container={{ direction: 'column', alignItems: 'start' }}>\n <span>{primary}</span>\n <Text variant='secondary'>{secondary}</Text>\n </Flex>\n ) : (\n <span>{primary}</span>\n )}\n <Icon name={`caret-${end}`} as={StyledAppShellNavIcon} />\n </BareButton>\n <NavComponents.List\n id={`${uid}-menu`}\n nestedList\n items={items}\n collapsed={!navOpen || collapsed}\n />\n </StyledNavListItem>\n );\n }\n};\n\nconst CaseTypes: FunctionComponent<{ caseTypes: CaseTypeProps[] }> = ({\n caseTypes\n}: {\n caseTypes: CaseTypeProps[];\n}) => {\n const t = useI18n();\n\n const transformedCaseTypes = caseTypes.map(caseType => {\n return {\n ...caseType,\n primary: caseType.name\n };\n });\n\n return useMemo(\n () => (\n <StyledCaseTypes>\n <NavComponents.List\n items={[\n {\n primary: t('app_shell_create'),\n visual: <Icon name='plus' as={StyledAppShellNavIcon} />,\n items: transformedCaseTypes\n }\n ]}\n />\n </StyledCaseTypes>\n ),\n [caseTypes]\n );\n};\n\nconst Links: FunctionComponent<{ links: LinkProps[] }> = (props: { links: LinkProps[] }) => {\n const { links } = props;\n const [transformedLinks, setTransformedLinks] = useState<NavListItemProps[]>([]);\n\n // TODO: Can this be a memo instead of a state and an effect?\n const mergedNavLinks = (items: LinkProps[]): NavListItemProps[] => {\n return items.map((link: LinkProps) => {\n return {\n ...link,\n primary: link.name,\n 'aria-current': link.active ? 'page' : null,\n visual: link.icon ? <Icon name={link.icon} as={StyledAppShellNavIcon} /> : null,\n onClick: link.links ? undefined : link.onClick,\n items: link.links ? mergedNavLinks(link.links) : undefined\n };\n });\n };\n\n useEffect(() => {\n setTransformedLinks(mergedNavLinks(links));\n }, [links]);\n\n return (\n <div>\n <NavComponents.List items={transformedLinks} />\n </div>\n );\n};\n\nconst Cases: FunctionComponent<{ cases: CaseProps[] }> = (props: { cases: CaseProps[] }) => {\n const { cases } = props;\n\n const setupCases = (items: CaseProps[]): NavListItemProps[] => {\n return items.map((item: CaseProps) => {\n const {\n id,\n primary,\n secondary,\n visual = <Icon name='case-solid' as={StyledAppShellNavIcon} />,\n active,\n onClick,\n onDismiss\n } = item;\n return {\n id,\n 'aria-current': active ? 'page' : undefined,\n primary,\n secondary,\n active: !!active,\n dismissible: true,\n onClick,\n onDismiss,\n visual\n };\n });\n };\n\n return (\n <StyledNavCasesList>\n <NavComponents.List items={setupCases(cases)} />\n </StyledNavCasesList>\n );\n};\n\n// TODO: Need to add back re-focus support to drawer.\nexport const Utils: FC<UtilsProps> = ({ operator, items, appHeader }) => {\n const { drawerOpen, setDrawerOpen, focusedImperatively } = useContext(AppShellContext);\n const [transformedLinks, setTransformedLinks] = useState<NavListItemProps[]>([]);\n const [item, setItem] = useState<UtilItemProps>();\n const [activeUtilItem, setActiveUtilItem] = useState('');\n const returnFocusRef: MutableRefObject<\n HTMLAnchorElement | HTMLDivElement | HTMLButtonElement | null\n > = useRef(null);\n\n const operatorInfo: NavListItemProps[] = useMemo(\n () =>\n appHeader\n ? []\n : [\n {\n primary: operator.name,\n visual: operator.avatar,\n actions: operator.actions\n }\n ],\n [appHeader, operator.name, operator.avatar, operator.actions]\n );\n\n // TODO: Can this be a memo instead of a state and an effect?\n const mergedUtilItems = (drawerItems: UtilItemProps[]): NavListItemProps[] => {\n return drawerItems?.map((drawerItem: UtilItemProps) => {\n return {\n onClick: e => {\n returnFocusRef.current = e.currentTarget;\n if (drawerItem.drawerView) {\n setItem(drawerItem);\n setActiveUtilItem(drawerItem.name);\n }\n },\n ...drawerItem,\n primary: drawerItem.name,\n visual: drawerItem.count ? (\n <StyledUtilIconCount>\n {drawerItem.visual}\n <Count as={StyledCountIcon} variant='urgent'>\n {drawerItem.count}\n </Count>\n </StyledUtilIconCount>\n ) : (\n drawerItem.visual\n )\n };\n });\n };\n\n useEffect(() => {\n if (items) {\n setTransformedLinks([...mergedUtilItems(items)!, ...operatorInfo]);\n } else {\n setTransformedLinks(operatorInfo);\n }\n }, [items, operatorInfo]);\n\n useEffect(() => {\n items?.forEach(uItem => {\n if (uItem.name === activeUtilItem) {\n setItem(uItem);\n }\n });\n }, [items]);\n\n useEffect(() => {\n if (item) setDrawerOpen(true);\n }, [item]);\n\n useEffect(() => {\n if (!drawerOpen) {\n setActiveUtilItem('');\n focusedImperatively.current = true;\n returnFocusRef?.current?.focus();\n }\n }, [drawerOpen]);\n\n return (\n <>\n <StyledUtils>\n <NavComponents.List\n // Pull onDrawerOpen and onDrawerClose off to avoid DOM passthrough warning.\n items={transformedLinks.map(({ onDrawerOpen, onDrawerClose, ...util }) => util)}\n />\n </StyledUtils>\n {item && (\n <AppShellDrawer\n content={item.drawerView}\n header={item.drawerHeader || item.name}\n onDrawerClose={() => {\n setItem(undefined);\n item.onDrawerClose?.();\n }}\n onDrawerOpen={item.onDrawerOpen}\n />\n )}\n </>\n );\n};\n\nconst AppShell: FunctionComponent<AppShellProps & ForwardProps> = forwardRef(\n (props: PropsWithoutRef<AppShellProps>, ref: Ref<HTMLDivElement>) => {\n const {\n appInfo,\n searchInput,\n appHeader,\n searchLabel = 'Sitewide', // FIXME: TR\n caseTypes,\n links,\n banners,\n environment: { name: envName, color: envColor } = {},\n main,\n operator,\n utils,\n cases,\n ...restProps\n } = props;\n const {\n appName,\n portalName,\n href: appInfoHref,\n onClick: appInfoOnClick,\n imageSrc: logoSrc,\n ...appInfoRestProps\n } = appInfo;\n\n let appInfoAs: ElementType = 'div';\n if (appInfoHref) appInfoAs = Link;\n else if (appInfoOnClick) appInfoAs = Button;\n\n const t = useI18n();\n const { start } = useDirection();\n const theme = useTheme();\n const navRef = useConsolidatedRef(ref);\n\n const [drawerOpen, setDrawerOpen] = useState(false);\n const [mobileNavOpen, setMobileNavOpen] = useState(false);\n const [mobileNavBackdrop, setMobileNavBackdrop] = useState(false);\n const [refocusEl, setRefocusEl] = useState<HTMLButtonElement | null>(null);\n\n const focusedImperatively = useRef(false);\n const [headerEl, setHeaderEl] = useElement<HTMLDivElement>();\n const [mobileHeaderEl, setMobileHeaderEl] = useElement<HTMLDivElement>();\n\n const isXlOrAbove = useBreakpoint('xl');\n const isSmallOrAbove = useBreakpoint('sm');\n\n const showAppHeader = !!appHeader && isSmallOrAbove;\n const showMainContent = showAppHeader ? headerEl || mobileHeaderEl : true;\n\n const openNavTimeoutId = useRef<ReturnType<typeof setTimeout>>();\n const closeNavTimeoutId = useRef<ReturnType<typeof setTimeout>>();\n const previewTriggerRef = useRef<HTMLElement>(null);\n\n const { state: navState, set: setNavState } = useTransitionState({\n ref: navRef,\n property: 'width',\n states: openCloseStates,\n defaultState: isXlOrAbove ? 'open' : 'closed'\n });\n\n const openNav = useCallback((delay: number = 0) => {\n if (closeNavTimeoutId.current) clearTimeout(closeNavTimeoutId.current);\n openNavTimeoutId.current = setTimeout(() => {\n setNavState('open');\n }, delay);\n }, []);\n\n const closeNav = useCallback((delay: number = 0) => {\n if (openNavTimeoutId.current) clearTimeout(openNavTimeoutId.current);\n closeNavTimeoutId.current = setTimeout(() => {\n setNavState('closed');\n }, delay);\n }, []);\n\n const onFocus = useCallback(() => {\n if (!focusedImperatively.current && isSmallOrAbove) openNav();\n focusedImperatively.current = false;\n }, [openNav, isSmallOrAbove]);\n\n const onKeydown = useCallback(({ key }: KeyboardEvent) => {\n if (key === 'Escape') setMobileNavOpen(false);\n }, []);\n\n useFocusWithin<HTMLElement>(\n [navRef],\n useCallback(\n (isFocused: boolean, navElement: Element | null) => {\n if (!isFocused && !navElement?.matches(':hover')) closeNav();\n },\n [closeNav]\n )\n );\n\n useLayoutEffect(() => {\n if (isXlOrAbove) {\n openNav();\n } else {\n closeNav();\n }\n }, [isXlOrAbove]);\n\n useEffect(() => {\n if (navState === 'closed' || navState === 'closing') setDrawerOpen(false);\n }, [navState]);\n\n useEffect(() => {\n if (mobileNavOpen) {\n document.addEventListener('keydown', onKeydown);\n return () => {\n document.removeEventListener('keydown', onKeydown);\n };\n }\n }, [mobileNavOpen]);\n\n useEffect(() => {\n if (isSmallOrAbove && mobileNavOpen) {\n setMobileNavBackdrop(false);\n setMobileNavOpen(false);\n }\n }, [isSmallOrAbove, mobileNavOpen]);\n\n const appShellJSX = (\n <Flex\n {...restProps}\n container={{\n direction: 'column',\n justify: 'between'\n }}\n ref={navRef}\n as={StyledAppNav}\n appHeader={showAppHeader}\n navOpen={mobileNavOpen}\n showEnv={!!envName}\n onFocus={onFocus}\n onMouseEnter={isSmallOrAbove && !isXlOrAbove ? () => openNav(200) : undefined}\n onMouseLeave={isSmallOrAbove && !isXlOrAbove ? () => closeNav(200) : undefined}\n >\n {envName && (\n <StyledAppEnvironment\n item={{ shrink: 0 }}\n color={envColor ?? theme.base.colors.red['extra-light']}\n >\n {envName}\n </StyledAppEnvironment>\n )}\n {!showAppHeader && (\n <StyledAppInfo\n as={Grid}\n forwardedAs={appInfoAs}\n variant='link'\n href={appInfoHref}\n onClick={appInfoOnClick}\n aria-label={`${appName}${portalName ? ` - ${portalName}` : ''}`}\n {...appInfoRestProps}\n container={{\n alignItems: 'center',\n areas: portalName ? '\"logo app\" \"logo portal\"' : '\"logo app\"'\n }}\n >\n <Grid item={{ area: 'logo' }} as={Image} src={logoSrc} alt={appName} />\n <Grid item={{ area: 'app' }} as='span'>\n {appName}\n </Grid>\n {portalName && (\n <Grid item={{ area: 'portal' }} as='span'>\n {portalName}\n </Grid>\n )}\n </StyledAppInfo>\n )}\n\n {searchInput && !showAppHeader && (\n <StyledSearchForm\n role='search'\n aria-label={searchLabel}\n onSubmit={e => e.preventDefault()}\n >\n <SearchInput {...searchInput} />\n </StyledSearchForm>\n )}\n\n <StyledScrollWrap>\n {caseTypes && caseTypes.length > 0 && <CaseTypes caseTypes={caseTypes} />}\n {links && <Links links={links} />}\n {cases && <Cases cases={cases} />}\n </StyledScrollWrap>\n\n <Utils appHeader={showAppHeader} operator={operator} items={utils} />\n </Flex>\n );\n\n return (\n <AppShellContext.Provider\n value={useMemo(\n () => ({\n navOpen: mobileNavOpen || navState === 'open' || navState === 'opening',\n navState,\n drawerOpen,\n setDrawerOpen,\n refocusEl,\n setRefocusEl,\n focusedImperatively,\n headerEl: headerEl || mobileHeaderEl,\n previewTriggerRef\n }),\n [navState, mobileNavOpen, drawerOpen, refocusEl, headerEl, mobileHeaderEl]\n )}\n >\n <SkipNavigation />\n {showAppHeader && (\n <AppHeader\n {...appInfo}\n searchInput={searchInput}\n searchLabel={searchLabel}\n operator={operator}\n ref={setHeaderEl}\n />\n )}\n\n {isSmallOrAbove ? (\n appShellJSX\n ) : (\n <>\n <Flex as={StyledMobileNav} container={{ alignItems: 'center' }} ref={setMobileHeaderEl}>\n <Button\n variant='simple'\n onClick={() => setMobileNavBackdrop(true)}\n aria-label={t('app_shell_open_nav')}\n icon\n >\n <Icon name='bars' />\n </Button>\n </Flex>\n\n <Backdrop\n open={mobileNavBackdrop}\n transitionSpeed='none'\n onAfterTransitionIn={() => setMobileNavOpen(true)}\n onBeforeTransitionOut={() => setMobileNavOpen(false)}\n onClick={e => {\n if (e.currentTarget === e.target) setMobileNavOpen(false);\n }}\n >\n <Drawer\n open={mobileNavOpen}\n onAfterClose={() => {\n setMobileNavBackdrop(false);\n }}\n position='fixed'\n placement={start}\n size='min(18.75rem, calc(100vw - 3.5rem))'\n nullWhenClosed\n >\n {appShellJSX}\n </Drawer>\n </Backdrop>\n </>\n )}\n {showMainContent && (\n <StyledAppMain\n appHeader={showAppHeader}\n mobileNav={!isSmallOrAbove}\n headerOffset={isSmallOrAbove ? headerEl?.offsetHeight : mobileHeaderEl?.offsetHeight}\n >\n {banners && <StyledBannerRegion>{banners}</StyledBannerRegion>}\n {main}\n </StyledAppMain>\n )}\n </AppShellContext.Provider>\n );\n }\n);\n\nexport default AppShell;\n"]}
|
|
1
|
+
{"version":3,"file":"AppShell.js","sourceRoot":"","sources":["../../../src/components/AppShell/AppShell.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n FunctionComponent,\n forwardRef,\n PropsWithoutRef,\n Ref,\n useState,\n useCallback,\n useEffect,\n useMemo,\n ElementType,\n useContext,\n useRef,\n FC,\n MouseEventHandler,\n MutableRefObject,\n useLayoutEffect\n} from 'react';\n\nimport Flex from '../Flex';\nimport Link from '../Link';\nimport Count from '../Badges/Count';\nimport BareButton from '../Button/BareButton';\nimport SearchInput from '../SearchInput';\nimport Icon, { registerIcon } from '../Icon';\nimport * as timesIcon from '../Icon/icons/times.icon';\nimport * as plusIcon from '../Icon/icons/plus.icon';\nimport * as caseSolidIcon from '../Icon/icons/case-solid.icon';\nimport * as barsIcon from '../Icon/icons/bars.icon';\nimport * as caretLeftIcon from '../Icon/icons/caret-left.icon';\nimport * as caretRightIcon from '../Icon/icons/caret-right.icon';\nimport Text from '../Text';\nimport Image from '../Image';\nimport ExpandCollapse from '../ExpandCollapse';\nimport type { ForwardProps, OmitStrict } from '../../types';\nimport {\n useFocusWithin,\n useI18n,\n useBreakpoint,\n useConsolidatedRef,\n useDirection,\n useTheme,\n useElement,\n useTransitionState,\n useArrows,\n useUID,\n useAfterInitialEffect\n} from '../../hooks';\nimport { openCloseStates } from '../../hooks/useTransitionState';\nimport Grid from '../Grid';\nimport Button from '../Button';\nimport Drawer from '../Drawer';\nimport type { PopoverProps } from '../Popover';\nimport Backdrop from '../Backdrop';\nimport { documentIsAvailable } from '../../utils';\n\nimport AppShellContext from './AppShellContext';\nimport AppShellDrawer from './Drawer';\nimport AppShellOperator from './Operator';\nimport AppHeader from './AppHeader';\nimport SkipNavigation from './SkipNavigation';\nimport {\n StyledAppNav,\n StyledAppInfo,\n StyledSearchForm,\n StyledCaseTypes,\n StyledScrollWrap,\n StyledUtils,\n StyledNavList,\n StyledNestedNavList,\n StyledNavListItem,\n StyledNavListMenuButton,\n StyledAppMain,\n StyledCaseClose,\n StyledAppShellNavIcon,\n StyledNavCasesList,\n StyledAppEnvironment,\n StyledBannerRegion,\n StyledCountIcon,\n StyledUtilIconCount,\n StyledMobileNav\n} from './AppShell.styles';\nimport {\n AppShellProps,\n CaseProps,\n CaseTypeProps,\n LinkProps,\n NavListItemProps,\n NavListProps,\n NavMenuProps,\n UtilItemProps,\n UtilsProps\n} from './AppShell.types';\n\nregisterIcon(timesIcon, plusIcon, caseSolidIcon, barsIcon, caretRightIcon, caretLeftIcon);\n\nconst NavComponents: {\n List: FunctionComponent<NavListProps>;\n ListItem: FunctionComponent<NavListItemProps>;\n Menu: FunctionComponent<NavMenuProps>;\n} = {\n List(props: NavListProps) {\n const { items = [], nestedList, collapsed, id } = props;\n let Component: ElementType = StyledNavList;\n let ItemComponent: ElementType;\n\n let fwdProps: {\n as?: ElementType;\n forwardedAs?: ElementType;\n nullWhenCollapsed?: boolean;\n transitionSpeed?: string;\n collapsed: boolean;\n } = {\n collapsed: !!collapsed\n };\n\n const {\n base: { animation }\n } = useTheme();\n\n if (nestedList) {\n fwdProps = {\n as: ExpandCollapse,\n forwardedAs: 'ul',\n nullWhenCollapsed: true,\n transitionSpeed: items.length >= 10 ? `calc(2 * ${animation.speed})` : animation.speed,\n ...fwdProps\n };\n\n Component = StyledNestedNavList;\n }\n\n if (Array.isArray(items) && items.length > 0) {\n ItemComponent = NavComponents.Menu;\n } else {\n ItemComponent = NavComponents.ListItem;\n }\n\n return (\n <Component {...(nestedList ? { role: 'menu', id } : {})} {...fwdProps}>\n {items?.map(item => {\n if (item.items && item.items.length > 0) {\n ItemComponent = NavComponents.Menu;\n } else {\n ItemComponent = NavComponents.ListItem;\n }\n return <ItemComponent key={item.id || item.primary} isMenuItem={nestedList} {...item} />;\n })}\n </Component>\n );\n },\n ListItem(props: NavListItemProps) {\n const { navOpen } = useContext(AppShellContext);\n const {\n visual,\n primary,\n secondary,\n href,\n onClick,\n items,\n dismissible = false,\n onDismiss,\n active,\n actions,\n forwardedRef,\n isMenuItem,\n ...restProps\n } = props;\n\n const t = useI18n();\n\n const compProps: {\n href?: string;\n onClick?: MouseEventHandler<HTMLAnchorElement | HTMLButtonElement | HTMLDivElement>;\n actions?: NavListItemProps['actions'];\n as?: ElementType<any>;\n popover?: OmitStrict<PopoverProps, 'show' | 'target' | 'children'>;\n } = {\n onClick,\n href\n };\n\n let Component: ElementType;\n\n if (actions) {\n Component = AppShellOperator;\n compProps.actions = actions;\n compProps.as = StyledNavListMenuButton;\n compProps.popover = {\n placement: 'right-end',\n modifiers: [\n {\n name: 'offset',\n options: { offset: [-12, -16] }\n },\n {\n name: 'flip',\n options: {\n boundary: documentIsAvailable ? document.body : undefined,\n fallbackPlacements: ['top-end']\n }\n }\n ]\n };\n } else if (href) {\n Component = Link;\n } else if (onClick) {\n Component = BareButton;\n } else {\n Component = 'div';\n }\n\n const itemRef = useConsolidatedRef(forwardedRef);\n\n useEffect(() => {\n if (!navOpen && actions) {\n const node = document.getElementsByTagName('body')[0];\n const clickEvent = document.createEvent('MouseEvent');\n clickEvent.initEvent('mousedown', true, true);\n node.dispatchEvent(clickEvent);\n }\n if (navOpen && isMenuItem && itemRef.current?.parentElement?.matches(':first-child'))\n itemRef.current?.focus();\n }, [navOpen]);\n\n const { end } = useDirection();\n\n return (\n <StyledNavListItem {...restProps} key={primary} nestedListCollapsed>\n {/* forwardedRef typed as 'any' due to ambiguity of Component element type */}\n <Component\n {...compProps}\n ref={itemRef as any}\n {...(isMenuItem ? { tabIndex: -1, role: 'menuitem', 'aria-label': primary } : {})}\n >\n {visual}\n {secondary ? (\n <Flex container={{ direction: 'column', alignItems: 'start' }}>\n <span>{primary}</span>\n <Text variant='secondary'>{secondary}</Text>\n </Flex>\n ) : (\n <span>{primary}</span>\n )}\n {actions && <Icon name={`caret-${end}`} as={StyledAppShellNavIcon} />}\n </Component>\n {dismissible && (\n <Button\n icon\n variant='simple'\n as={StyledCaseClose}\n onClick={onDismiss}\n aria-label={t('dismiss_case')}\n >\n <Icon name='times' />\n </Button>\n )}\n </StyledNavListItem>\n );\n },\n Menu(props: NavMenuProps) {\n const { navOpen } = useContext(AppShellContext);\n const {\n visual,\n primary,\n secondary,\n href,\n onClick,\n items,\n onDismiss,\n active,\n actions,\n forwardedRef,\n ...restProps\n } = props;\n\n const uid = useUID();\n\n const [collapsed, setCollapsed] = useState(true);\n\n const toggleCollapsed = useCallback(() => {\n setCollapsed(state => !state);\n }, []);\n\n const itemRef = useConsolidatedRef(forwardedRef);\n\n const onKeyDown = useCallback(({ key }: KeyboardEvent) => {\n if (key === 'Escape') {\n setCollapsed(true);\n itemRef.current?.focus();\n }\n }, []);\n\n const menuRef = useRef<HTMLLIElement>(null);\n\n useArrows(menuRef, { selector: '[role=\"menuitem\"]', cycle: true });\n\n useFocusWithin<HTMLElement>(\n [menuRef],\n useCallback(isFocused => {\n if (!isFocused) setCollapsed(true);\n }, [])\n );\n\n const { end } = useDirection();\n\n return (\n <StyledNavListItem\n {...restProps}\n key={primary}\n nestedListCollapsed={collapsed}\n onKeyDown={onKeyDown}\n ref={menuRef}\n >\n <BareButton\n id={uid}\n ref={itemRef}\n tabIndex={collapsed ? 0 : -1}\n aria-expanded={!collapsed}\n aria-controls={`${uid}-menu`}\n aria-label={primary}\n onClick={toggleCollapsed}\n >\n {visual}\n {secondary ? (\n <Flex container={{ direction: 'column', alignItems: 'start' }}>\n <span>{primary}</span>\n <Text variant='secondary'>{secondary}</Text>\n </Flex>\n ) : (\n <span>{primary}</span>\n )}\n <Icon name={`caret-${end}`} as={StyledAppShellNavIcon} />\n </BareButton>\n <NavComponents.List\n id={`${uid}-menu`}\n nestedList\n items={items}\n collapsed={!navOpen || collapsed}\n />\n </StyledNavListItem>\n );\n }\n};\n\nconst CaseTypes: FunctionComponent<{ caseTypes: CaseTypeProps[] }> = ({\n caseTypes\n}: {\n caseTypes: CaseTypeProps[];\n}) => {\n const t = useI18n();\n\n const transformedCaseTypes = caseTypes.map(caseType => {\n return {\n ...caseType,\n primary: caseType.name\n };\n });\n\n return useMemo(\n () => (\n <StyledCaseTypes>\n <NavComponents.List\n items={[\n {\n primary: t('app_shell_create'),\n visual: <Icon name='plus' as={StyledAppShellNavIcon} />,\n items: transformedCaseTypes\n }\n ]}\n />\n </StyledCaseTypes>\n ),\n [caseTypes]\n );\n};\n\nconst Links: FunctionComponent<{ links: LinkProps[] }> = (props: { links: LinkProps[] }) => {\n const { links } = props;\n const [transformedLinks, setTransformedLinks] = useState<NavListItemProps[]>([]);\n\n // TODO: Can this be a memo instead of a state and an effect?\n const mergedNavLinks = (items: LinkProps[]): NavListItemProps[] => {\n return items.map((link: LinkProps) => {\n return {\n ...link,\n primary: link.name,\n 'aria-current': link.active ? 'page' : null,\n visual: link.icon ? <Icon name={link.icon} as={StyledAppShellNavIcon} /> : null,\n onClick: link.links ? undefined : link.onClick,\n items: link.links ? mergedNavLinks(link.links) : undefined\n };\n });\n };\n\n useEffect(() => {\n setTransformedLinks(mergedNavLinks(links));\n }, [links]);\n\n return (\n <div>\n <NavComponents.List items={transformedLinks} />\n </div>\n );\n};\n\nconst Cases: FunctionComponent<{ cases: CaseProps[] }> = (props: { cases: CaseProps[] }) => {\n const { cases } = props;\n\n const setupCases = (items: CaseProps[]): NavListItemProps[] => {\n return items.map((item: CaseProps) => {\n const {\n id,\n primary,\n secondary,\n visual = <Icon name='case-solid' as={StyledAppShellNavIcon} />,\n active,\n onClick,\n onDismiss\n } = item;\n return {\n id,\n 'aria-current': active ? 'page' : undefined,\n primary,\n secondary,\n active: !!active,\n dismissible: true,\n onClick,\n onDismiss,\n visual\n };\n });\n };\n\n return (\n <StyledNavCasesList>\n <NavComponents.List items={setupCases(cases)} />\n </StyledNavCasesList>\n );\n};\n\n// TODO: Need to add back re-focus support to drawer.\nexport const Utils: FC<UtilsProps> = ({ operator, items, appHeader }) => {\n const { drawerOpen, setDrawerOpen, focusedImperatively } = useContext(AppShellContext);\n const [transformedLinks, setTransformedLinks] = useState<NavListItemProps[]>([]);\n const [item, setItem] = useState<UtilItemProps>();\n const [activeUtilItem, setActiveUtilItem] = useState('');\n const returnFocusRef: MutableRefObject<\n HTMLAnchorElement | HTMLDivElement | HTMLButtonElement | null\n > = useRef(null);\n\n const operatorInfo: NavListItemProps[] = useMemo(\n () =>\n appHeader\n ? []\n : [\n {\n primary: operator.name,\n visual: operator.avatar,\n actions: operator.actions\n }\n ],\n [appHeader, operator.name, operator.avatar, operator.actions]\n );\n\n // TODO: Can this be a memo instead of a state and an effect?\n const mergedUtilItems = (drawerItems: UtilItemProps[]): NavListItemProps[] => {\n return drawerItems?.map((drawerItem: UtilItemProps) => {\n return {\n onClick: e => {\n returnFocusRef.current = e.currentTarget;\n if (drawerItem.drawerView) {\n setItem(drawerItem);\n setActiveUtilItem(drawerItem.name);\n }\n },\n ...drawerItem,\n primary: drawerItem.name,\n visual: drawerItem.count ? (\n <StyledUtilIconCount>\n {drawerItem.visual}\n <Count as={StyledCountIcon} variant='urgent'>\n {drawerItem.count}\n </Count>\n </StyledUtilIconCount>\n ) : (\n drawerItem.visual\n )\n };\n });\n };\n\n useEffect(() => {\n if (items) {\n setTransformedLinks([...mergedUtilItems(items)!, ...operatorInfo]);\n } else {\n setTransformedLinks(operatorInfo);\n }\n }, [items, operatorInfo]);\n\n useEffect(() => {\n items?.forEach(uItem => {\n if (uItem.name === activeUtilItem) {\n setItem(uItem);\n }\n });\n }, [items]);\n\n useEffect(() => {\n if (item) setDrawerOpen(true);\n }, [item]);\n\n useAfterInitialEffect(() => {\n if (!drawerOpen) {\n setActiveUtilItem('');\n focusedImperatively.current = true;\n returnFocusRef?.current?.focus();\n }\n }, [drawerOpen]);\n\n return (\n <>\n <StyledUtils>\n <NavComponents.List\n // Pull onDrawerOpen and onDrawerClose off to avoid DOM passthrough warning.\n items={transformedLinks.map(({ onDrawerOpen, onDrawerClose, ...util }) => util)}\n />\n </StyledUtils>\n {item && (\n <AppShellDrawer\n content={item.drawerView}\n header={item.drawerHeader || item.name}\n onDrawerClose={() => {\n setItem(undefined);\n item.onDrawerClose?.();\n }}\n onDrawerOpen={item.onDrawerOpen}\n />\n )}\n </>\n );\n};\n\nconst AppShell: FunctionComponent<AppShellProps & ForwardProps> = forwardRef(\n (props: PropsWithoutRef<AppShellProps>, ref: Ref<HTMLDivElement>) => {\n const {\n appInfo,\n searchInput,\n appHeader,\n searchLabel = 'Sitewide', // FIXME: TR\n caseTypes,\n links,\n banners,\n environment: { name: envName, color: envColor } = {},\n main,\n operator,\n utils,\n cases,\n ...restProps\n } = props;\n const {\n appName,\n portalName,\n href: appInfoHref,\n onClick: appInfoOnClick,\n imageSrc: logoSrc,\n ...appInfoRestProps\n } = appInfo;\n\n let appInfoAs: ElementType = 'div';\n if (appInfoHref) appInfoAs = Link;\n else if (appInfoOnClick) appInfoAs = Button;\n\n const t = useI18n();\n const { start } = useDirection();\n const theme = useTheme();\n const navRef = useConsolidatedRef(ref);\n\n const [drawerOpen, setDrawerOpen] = useState(false);\n const [mobileNavOpen, setMobileNavOpen] = useState(false);\n const [mobileNavBackdrop, setMobileNavBackdrop] = useState(false);\n const [refocusEl, setRefocusEl] = useState<HTMLButtonElement | null>(null);\n\n const focusedImperatively = useRef(false);\n const [headerEl, setHeaderEl] = useElement<HTMLDivElement>();\n const [mobileHeaderEl, setMobileHeaderEl] = useElement<HTMLDivElement>();\n\n const isXlOrAbove = useBreakpoint('xl');\n const isSmallOrAbove = useBreakpoint('sm');\n\n const showAppHeader = !!appHeader && isSmallOrAbove;\n const showMainContent = showAppHeader ? headerEl || mobileHeaderEl : true;\n\n const openNavTimeoutId = useRef<ReturnType<typeof setTimeout>>();\n const closeNavTimeoutId = useRef<ReturnType<typeof setTimeout>>();\n const previewTriggerRef = useRef<HTMLElement>(null);\n\n const { state: navState, set: setNavState } = useTransitionState({\n ref: navRef,\n property: 'width',\n states: openCloseStates,\n defaultState: isXlOrAbove ? 'open' : 'closed'\n });\n\n const openNav = useCallback((delay: number = 0) => {\n if (closeNavTimeoutId.current) clearTimeout(closeNavTimeoutId.current);\n openNavTimeoutId.current = setTimeout(() => {\n setNavState('open');\n }, delay);\n }, []);\n\n const closeNav = useCallback((delay: number = 0) => {\n if (openNavTimeoutId.current) clearTimeout(openNavTimeoutId.current);\n closeNavTimeoutId.current = setTimeout(() => {\n setNavState('closed');\n }, delay);\n }, []);\n\n const onFocus = useCallback(() => {\n if (!focusedImperatively.current && isSmallOrAbove) openNav();\n focusedImperatively.current = false;\n }, [openNav, isSmallOrAbove]);\n\n const onKeydown = useCallback(({ key }: KeyboardEvent) => {\n if (key === 'Escape') setMobileNavOpen(false);\n }, []);\n\n useFocusWithin<HTMLElement>(\n [navRef],\n useCallback(\n (isFocused: boolean, navElement: Element | null) => {\n if (!isFocused && !navElement?.matches(':hover')) closeNav();\n },\n [closeNav]\n )\n );\n\n useLayoutEffect(() => {\n if (isXlOrAbove) {\n openNav();\n } else {\n closeNav();\n }\n }, [isXlOrAbove, openNav, closeNav]);\n\n useEffect(() => {\n if (navState === 'closed' || navState === 'closing') setDrawerOpen(false);\n }, [navState]);\n\n useEffect(() => {\n if (mobileNavOpen) {\n document.addEventListener('keydown', onKeydown);\n return () => {\n document.removeEventListener('keydown', onKeydown);\n };\n }\n }, [mobileNavOpen]);\n\n useEffect(() => {\n if (isSmallOrAbove && mobileNavOpen) {\n setMobileNavBackdrop(false);\n setMobileNavOpen(false);\n }\n }, [isSmallOrAbove, mobileNavOpen]);\n\n const appShellJSX = (\n <Flex\n {...restProps}\n container={{\n direction: 'column',\n justify: 'between'\n }}\n ref={navRef}\n as={StyledAppNav}\n appHeader={showAppHeader}\n navOpen={mobileNavOpen}\n showEnv={!!envName}\n onFocus={onFocus}\n onMouseEnter={isSmallOrAbove && !isXlOrAbove ? () => openNav(200) : undefined}\n onMouseLeave={isSmallOrAbove && !isXlOrAbove ? () => closeNav(200) : undefined}\n >\n {envName && (\n <StyledAppEnvironment\n item={{ shrink: 0 }}\n color={envColor ?? theme.base.colors.red['extra-light']}\n >\n {envName}\n </StyledAppEnvironment>\n )}\n {!showAppHeader && (\n <StyledAppInfo\n as={Grid}\n forwardedAs={appInfoAs}\n variant='link'\n href={appInfoHref}\n onClick={appInfoOnClick}\n aria-label={`${appName}${portalName ? ` - ${portalName}` : ''}`}\n {...appInfoRestProps}\n container={{\n alignItems: 'center',\n areas: portalName ? '\"logo app\" \"logo portal\"' : '\"logo app\"'\n }}\n >\n <Grid item={{ area: 'logo' }} as={Image} src={logoSrc} alt={appName} />\n <Grid item={{ area: 'app' }} as='span'>\n {appName}\n </Grid>\n {portalName && (\n <Grid item={{ area: 'portal' }} as='span'>\n {portalName}\n </Grid>\n )}\n </StyledAppInfo>\n )}\n\n {searchInput && !showAppHeader && (\n <StyledSearchForm\n role='search'\n aria-label={searchLabel}\n onSubmit={e => e.preventDefault()}\n >\n <SearchInput {...searchInput} />\n </StyledSearchForm>\n )}\n\n <StyledScrollWrap>\n {caseTypes && caseTypes.length > 0 && <CaseTypes caseTypes={caseTypes} />}\n {links && <Links links={links} />}\n {cases && <Cases cases={cases} />}\n </StyledScrollWrap>\n\n <Utils appHeader={showAppHeader} operator={operator} items={utils} />\n </Flex>\n );\n\n return (\n <AppShellContext.Provider\n value={useMemo(\n () => ({\n navOpen: mobileNavOpen || navState === 'open' || navState === 'opening',\n navState,\n drawerOpen,\n setDrawerOpen,\n refocusEl,\n setRefocusEl,\n focusedImperatively,\n headerEl: headerEl || mobileHeaderEl,\n previewTriggerRef\n }),\n [navState, mobileNavOpen, drawerOpen, refocusEl, headerEl, mobileHeaderEl]\n )}\n >\n <SkipNavigation />\n {showAppHeader && (\n <AppHeader\n {...appInfo}\n searchInput={searchInput}\n searchLabel={searchLabel}\n operator={operator}\n ref={setHeaderEl}\n />\n )}\n\n {isSmallOrAbove ? (\n appShellJSX\n ) : (\n <>\n <Flex as={StyledMobileNav} container={{ alignItems: 'center' }} ref={setMobileHeaderEl}>\n <Button\n variant='simple'\n onClick={() => setMobileNavBackdrop(true)}\n aria-label={t('app_shell_open_nav')}\n icon\n >\n <Icon name='bars' />\n </Button>\n </Flex>\n\n <Backdrop\n open={mobileNavBackdrop}\n transitionSpeed='none'\n onAfterTransitionIn={() => setMobileNavOpen(true)}\n onBeforeTransitionOut={() => setMobileNavOpen(false)}\n onClick={e => {\n if (e.currentTarget === e.target) setMobileNavOpen(false);\n }}\n >\n <Drawer\n open={mobileNavOpen}\n onAfterClose={() => {\n setMobileNavBackdrop(false);\n }}\n position='fixed'\n placement={start}\n size='min(18.75rem, calc(100vw - 3.5rem))'\n nullWhenClosed\n >\n {appShellJSX}\n </Drawer>\n </Backdrop>\n </>\n )}\n {showMainContent && (\n <StyledAppMain\n appHeader={showAppHeader}\n mobileNav={!isSmallOrAbove}\n headerOffset={isSmallOrAbove ? headerEl?.offsetHeight : mobileHeaderEl?.offsetHeight}\n >\n {banners && <StyledBannerRegion>{banners}</StyledBannerRegion>}\n {main}\n </StyledAppMain>\n )}\n </AppShellContext.Provider>\n );\n }\n);\n\nexport default AppShell;\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { FunctionComponent } from 'react';
|
|
2
|
+
import { ForwardProps } from '../../types';
|
|
3
|
+
export declare const StyledKeyboard: import("styled-components").StyledComponent<"kbd", import("styled-components").DefaultTheme, {}, never>;
|
|
4
|
+
export interface KeyboardProps {
|
|
5
|
+
keyName: string;
|
|
6
|
+
}
|
|
7
|
+
declare const Keyboard: FunctionComponent<KeyboardProps & ForwardProps>;
|
|
8
|
+
export default Keyboard;
|
|
9
|
+
//# sourceMappingURL=Keyboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Keyboard.d.ts","sourceRoot":"","sources":["../../../src/components/Badges/Keyboard.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAI1C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAsB3C,eAAO,MAAM,cAAc,yGA+B1B,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,QAAA,MAAM,QAAQ,EAAE,iBAAiB,CAAC,aAAa,GAAG,YAAY,CAU7D,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import styled, { css } from 'styled-components';
|
|
3
|
+
import useOS from '../../hooks/useOS';
|
|
4
|
+
const osxKeyMapper = {
|
|
5
|
+
Command: '⌘',
|
|
6
|
+
Option: '⌥',
|
|
7
|
+
Control: '⌃',
|
|
8
|
+
Return: '↵',
|
|
9
|
+
Delete: 'Del'
|
|
10
|
+
};
|
|
11
|
+
const windowsKeyMapper = {
|
|
12
|
+
Control: 'Ctrl',
|
|
13
|
+
Windows: '⊞',
|
|
14
|
+
Backspace: 'Backspace'
|
|
15
|
+
};
|
|
16
|
+
const generalKeyMapper = {
|
|
17
|
+
'Page up': 'Pg up',
|
|
18
|
+
'Page down': 'Pg dn',
|
|
19
|
+
Ins: 'Insert'
|
|
20
|
+
};
|
|
21
|
+
export const StyledKeyboard = styled.kbd(({ theme: { base, components: { text: { primary }, badges: { keyboard } } } }) => {
|
|
22
|
+
return css `
|
|
23
|
+
background-color: ${keyboard['background-color']};
|
|
24
|
+
color: ${base.palette['foreground-color']};
|
|
25
|
+
display: inline-block;
|
|
26
|
+
position: relative;
|
|
27
|
+
font-family: ${base['font-family']};
|
|
28
|
+
font-weight: ${primary['font-weight']};
|
|
29
|
+
overflow: hidden;
|
|
30
|
+
white-space: nowrap;
|
|
31
|
+
padding: 0.125rem;
|
|
32
|
+
border: 0.0125rem solid ${keyboard['border-color']};
|
|
33
|
+
border-radius: calc(${base['border-radius']} / 4);
|
|
34
|
+
text-transform: capitalize;
|
|
35
|
+
text-align: center;
|
|
36
|
+
min-width: 1.25rem;
|
|
37
|
+
height: 1.25rem;
|
|
38
|
+
text-overflow: ellipsis;
|
|
39
|
+
line-height: 1rem;
|
|
40
|
+
inset-block-start: calc(1.25rem / 4 - 0.125rem);
|
|
41
|
+
`;
|
|
42
|
+
});
|
|
43
|
+
const Keyboard = ({ keyName, ...restProps }) => {
|
|
44
|
+
const { windows: isWindows } = useOS();
|
|
45
|
+
return (_jsx(StyledKeyboard, { ...restProps, "aria-label": keyName, children: (isWindows && windowsKeyMapper[keyName]) ||
|
|
46
|
+
osxKeyMapper[keyName] ||
|
|
47
|
+
generalKeyMapper[keyName] ||
|
|
48
|
+
keyName }));
|
|
49
|
+
};
|
|
50
|
+
export default Keyboard;
|
|
51
|
+
//# sourceMappingURL=Keyboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Keyboard.js","sourceRoot":"","sources":["../../../src/components/Badges/Keyboard.tsx"],"names":[],"mappings":";AACA,OAAO,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,MAAM,mBAAmB,CAAC;AAGtC,MAAM,YAAY,GAA8B;IAC9C,OAAO,EAAE,GAAG;IACZ,MAAM,EAAE,GAAG;IACX,OAAO,EAAE,GAAG;IACZ,MAAM,EAAE,GAAG;IACX,MAAM,EAAE,KAAK;CACd,CAAC;AAEF,MAAM,gBAAgB,GAA8B;IAClD,OAAO,EAAE,MAAM;IACf,OAAO,EAAE,GAAG;IACZ,SAAS,EAAE,WAAW;CACvB,CAAC;AAEF,MAAM,gBAAgB,GAA8B;IAClD,SAAS,EAAE,OAAO;IAClB,WAAW,EAAE,OAAO;IACpB,GAAG,EAAE,QAAQ;CACd,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CACtC,CAAC,EACC,KAAK,EAAE,EACL,IAAI,EACJ,UAAU,EAAE,EACV,IAAI,EAAE,EAAE,OAAO,EAAE,EACjB,MAAM,EAAE,EAAE,QAAQ,EAAE,EACrB,EACF,EACF,EAAE,EAAE;IACH,OAAO,GAAG,CAAA;0BACY,QAAQ,CAAC,kBAAkB,CAAC;eACvC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC;;;qBAG1B,IAAI,CAAC,aAAa,CAAC;qBACnB,OAAO,CAAC,aAAa,CAAC;;;;gCAIX,QAAQ,CAAC,cAAc,CAAC;4BAC5B,IAAI,CAAC,eAAe,CAAC;;;;;;;;KAQ5C,CAAC;AACJ,CAAC,CACF,CAAC;AAMF,MAAM,QAAQ,GAAoD,CAAC,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,EAAE,EAAE;IAC9F,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,CAAC;IACvC,OAAO,CACL,KAAC,cAAc,OAAK,SAAS,gBAAc,OAAO,YAC/C,CAAC,SAAS,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC;YACvC,YAAY,CAAC,OAAO,CAAC;YACrB,gBAAgB,CAAC,OAAO,CAAC;YACzB,OAAO,GACM,CAClB,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,QAAQ,CAAC","sourcesContent":["import { FunctionComponent } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport useOS from '../../hooks/useOS';\nimport { ForwardProps } from '../../types';\n\nconst osxKeyMapper: { [key: string]: string } = {\n Command: '⌘',\n Option: '⌥',\n Control: '⌃',\n Return: '↵',\n Delete: 'Del'\n};\n\nconst windowsKeyMapper: { [key: string]: string } = {\n Control: 'Ctrl',\n Windows: '⊞',\n Backspace: 'Backspace'\n};\n\nconst generalKeyMapper: { [key: string]: string } = {\n 'Page up': 'Pg up',\n 'Page down': 'Pg dn',\n Ins: 'Insert'\n};\n\nexport const StyledKeyboard = styled.kbd(\n ({\n theme: {\n base,\n components: {\n text: { primary },\n badges: { keyboard }\n }\n }\n }) => {\n return css`\n background-color: ${keyboard['background-color']};\n color: ${base.palette['foreground-color']};\n display: inline-block;\n position: relative;\n font-family: ${base['font-family']};\n font-weight: ${primary['font-weight']};\n overflow: hidden;\n white-space: nowrap;\n padding: 0.125rem;\n border: 0.0125rem solid ${keyboard['border-color']};\n border-radius: calc(${base['border-radius']} / 4);\n text-transform: capitalize;\n text-align: center;\n min-width: 1.25rem;\n height: 1.25rem;\n text-overflow: ellipsis;\n line-height: 1rem;\n inset-block-start: calc(1.25rem / 4 - 0.125rem);\n `;\n }\n);\n\nexport interface KeyboardProps {\n keyName: string;\n}\n\nconst Keyboard: FunctionComponent<KeyboardProps & ForwardProps> = ({ keyName, ...restProps }) => {\n const { windows: isWindows } = useOS();\n return (\n <StyledKeyboard {...restProps} aria-label={keyName}>\n {(isWindows && windowsKeyMapper[keyName]) ||\n osxKeyMapper[keyName] ||\n generalKeyMapper[keyName] ||\n keyName}\n </StyledKeyboard>\n );\n};\n\nexport default Keyboard;\n"]}
|
|
@@ -4,6 +4,8 @@ export { default as Alert } from './Alert';
|
|
|
4
4
|
export { AlertProps } from './Alert';
|
|
5
5
|
export { default as Count } from './Count';
|
|
6
6
|
export { CountProps } from './Count';
|
|
7
|
+
export { default as Keyboard } from './Keyboard';
|
|
8
|
+
export { KeyboardProps } from './Keyboard';
|
|
7
9
|
export { default as Status } from './Status';
|
|
8
10
|
export { StatusProps } from './Status';
|
|
9
11
|
export { default as Tag } from './Tag';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Badges/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Badges/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { default as Selectable } from './Selection';
|
|
2
2
|
export { default as Alert } from './Alert';
|
|
3
3
|
export { default as Count } from './Count';
|
|
4
|
+
export { default as Keyboard } from './Keyboard';
|
|
4
5
|
export { default as Status } from './Status';
|
|
5
6
|
export { default as Tag } from './Tag';
|
|
6
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/Badges/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,aAAa,CAAC;AAEpD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAE3C,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAE3C,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAE7C,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,OAAO,CAAC","sourcesContent":["export { default as Selectable } from './Selection';\nexport { SelectableProps } from './Selection';\nexport { default as Alert } from './Alert';\nexport { AlertProps } from './Alert';\nexport { default as Count } from './Count';\nexport { CountProps } from './Count';\nexport { default as Status } from './Status';\nexport { StatusProps } from './Status';\nexport { default as Tag } from './Tag';\nexport { TagProps } from './Tag';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/Badges/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,aAAa,CAAC;AAEpD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAE3C,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAE3C,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEjD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAE7C,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,OAAO,CAAC","sourcesContent":["export { default as Selectable } from './Selection';\nexport { SelectableProps } from './Selection';\nexport { default as Alert } from './Alert';\nexport { AlertProps } from './Alert';\nexport { default as Count } from './Count';\nexport { CountProps } from './Count';\nexport { default as Keyboard } from './Keyboard';\nexport { KeyboardProps } from './Keyboard';\nexport { default as Status } from './Status';\nexport { StatusProps } from './Status';\nexport { default as Tag } from './Tag';\nexport { TagProps } from './Tag';\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Ref } from 'react';
|
|
2
2
|
import { BaseProps, NoChildrenProp } from '../../types';
|
|
3
|
+
import { FormControlProps } from '../FormControl';
|
|
3
4
|
export declare type ObfuscationMode = 'none' | 'partial' | 'full';
|
|
4
5
|
export interface FormattingOptions {
|
|
5
6
|
obfuscation?: ObfuscationMode;
|
|
@@ -20,4 +21,46 @@ export interface CreditCardDisplayProps extends BaseProps, NoChildrenProp {
|
|
|
20
21
|
/** Ref for the wrapping element. */
|
|
21
22
|
ref?: Ref<HTMLSpanElement>;
|
|
22
23
|
}
|
|
24
|
+
export interface CreditCardInputProps extends BaseProps, NoChildrenProp {
|
|
25
|
+
/**
|
|
26
|
+
* Sets DOM id for the control and associates label element via 'for' attribute.
|
|
27
|
+
* If an id is not pass, a random id will be generated for any render.
|
|
28
|
+
*/
|
|
29
|
+
id?: FormControlProps['id'];
|
|
30
|
+
/** Set visual state based on a validation state. */
|
|
31
|
+
status?: FormControlProps['status'];
|
|
32
|
+
/** Pass a string or a fragment with an Icon and string. */
|
|
33
|
+
label?: FormControlProps['label'];
|
|
34
|
+
/**
|
|
35
|
+
* Visually hides the label region.
|
|
36
|
+
* @default false
|
|
37
|
+
*/
|
|
38
|
+
labelHidden?: FormControlProps['labelHidden'];
|
|
39
|
+
/** It is recommended to pass a simple string to offer guidance. Text will be styled based on status prop. */
|
|
40
|
+
info?: FormControlProps['info'];
|
|
41
|
+
/** Indicate if the field is required. The browser defaults to false. */
|
|
42
|
+
required?: FormControlProps['required'];
|
|
43
|
+
/** Placeholder text. The browser defaults to an empty string. */
|
|
44
|
+
placeholder?: string;
|
|
45
|
+
/** Disable the control. The browser defaults to false. */
|
|
46
|
+
disabled?: FormControlProps['disabled'];
|
|
47
|
+
/** Makes the component non editable and non clickable. The browser defaults to false. */
|
|
48
|
+
readOnly?: FormControlProps['readOnly'];
|
|
49
|
+
/** Sets html name attribute for the underlying control. Useful for mapping to a data field. */
|
|
50
|
+
name?: FormControlProps['name'];
|
|
51
|
+
/**
|
|
52
|
+
* CurrencyInput input value.
|
|
53
|
+
* Requires an onChange handler to update value.
|
|
54
|
+
* @default ''
|
|
55
|
+
*/
|
|
56
|
+
value?: string;
|
|
57
|
+
/** Callback fired when input value changes. */
|
|
58
|
+
onChange: (value?: string) => void;
|
|
59
|
+
/** Callback fired when the component loses focus. */
|
|
60
|
+
onFocus?: (value?: string) => void;
|
|
61
|
+
/** Callback fired when the component loses focus. */
|
|
62
|
+
onBlur?: (value?: string) => void;
|
|
63
|
+
/** Ref for the wrapping element. */
|
|
64
|
+
ref?: Ref<HTMLInputElement>;
|
|
65
|
+
}
|
|
23
66
|
//# sourceMappingURL=CreditCard.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreditCard.types.d.ts","sourceRoot":"","sources":["../../../src/components/CreditCard/CreditCard.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAE5B,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"CreditCard.types.d.ts","sourceRoot":"","sources":["../../../src/components/CreditCard/CreditCard.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAE5B,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,oBAAY,eAAe,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAE1D,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,eAAe,CAAC;CAC/B;AAED,MAAM,WAAW,sBAAuB,SAAQ,SAAS,EAAE,cAAc;IACvE,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,iBAAiB,CAAC,EAAE;QAClB;;;;;WAKG;QACH,WAAW,CAAC,EAAE,eAAe,CAAC;KAC/B,CAAC;IACF,oCAAoC;IACpC,GAAG,CAAC,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC;CAC5B;AAED,MAAM,WAAW,oBAAqB,SAAQ,SAAS,EAAE,cAAc;IACrE;;;OAGG;IACH,EAAE,CAAC,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC5B,oDAAoD;IACpD,MAAM,CAAC,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACpC,2DAA2D;IAC3D,KAAK,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAClC;;;OAGG;IACH,WAAW,CAAC,EAAE,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAC9C,6GAA6G;IAC7G,IAAI,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAChC,wEAAwE;IACxE,QAAQ,CAAC,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACxC,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACxC,yFAAyF;IACzF,QAAQ,CAAC,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACxC,+FAA+F;IAC/F,IAAI,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAChC;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,qDAAqD;IACrD,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,qDAAqD;IACrD,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,oCAAoC;IACpC,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;CAC7B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreditCard.types.js","sourceRoot":"","sources":["../../../src/components/CreditCard/CreditCard.types.ts"],"names":[],"mappings":"","sourcesContent":["import { Ref } from 'react';\n\nimport { BaseProps, NoChildrenProp } from '../../types';\n\nexport type ObfuscationMode = 'none' | 'partial' | 'full';\n\nexport interface FormattingOptions {\n obfuscation?: ObfuscationMode;\n}\n\nexport interface CreditCardDisplayProps extends BaseProps, NoChildrenProp {\n /** Number value. */\n value?: string;\n /** Options to define formatting. */\n formattingOptions?: {\n /**\n * Defines if the obfuscation (replacing digits with bullets) should be applied.\n * This is only visual obfuscation, the real one should be applied on the server side.\n * Characters that are going to be obfuscated may be random characters or even missing.\n * @default 'none'\n */\n obfuscation?: ObfuscationMode;\n };\n /** Ref for the wrapping element. */\n ref?: Ref<HTMLSpanElement>;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"CreditCard.types.js","sourceRoot":"","sources":["../../../src/components/CreditCard/CreditCard.types.ts"],"names":[],"mappings":"","sourcesContent":["import { Ref } from 'react';\n\nimport { BaseProps, NoChildrenProp } from '../../types';\nimport { FormControlProps } from '../FormControl';\n\nexport type ObfuscationMode = 'none' | 'partial' | 'full';\n\nexport interface FormattingOptions {\n obfuscation?: ObfuscationMode;\n}\n\nexport interface CreditCardDisplayProps extends BaseProps, NoChildrenProp {\n /** Number value. */\n value?: string;\n /** Options to define formatting. */\n formattingOptions?: {\n /**\n * Defines if the obfuscation (replacing digits with bullets) should be applied.\n * This is only visual obfuscation, the real one should be applied on the server side.\n * Characters that are going to be obfuscated may be random characters or even missing.\n * @default 'none'\n */\n obfuscation?: ObfuscationMode;\n };\n /** Ref for the wrapping element. */\n ref?: Ref<HTMLSpanElement>;\n}\n\nexport interface CreditCardInputProps extends BaseProps, NoChildrenProp {\n /**\n * Sets DOM id for the control and associates label element via 'for' attribute.\n * If an id is not pass, a random id will be generated for any render.\n */\n id?: FormControlProps['id'];\n /** Set visual state based on a validation state. */\n status?: FormControlProps['status'];\n /** Pass a string or a fragment with an Icon and string. */\n label?: FormControlProps['label'];\n /**\n * Visually hides the label region.\n * @default false\n */\n labelHidden?: FormControlProps['labelHidden'];\n /** It is recommended to pass a simple string to offer guidance. Text will be styled based on status prop. */\n info?: FormControlProps['info'];\n /** Indicate if the field is required. The browser defaults to false. */\n required?: FormControlProps['required'];\n /** Placeholder text. The browser defaults to an empty string. */\n placeholder?: string;\n /** Disable the control. The browser defaults to false. */\n disabled?: FormControlProps['disabled'];\n /** Makes the component non editable and non clickable. The browser defaults to false. */\n readOnly?: FormControlProps['readOnly'];\n /** Sets html name attribute for the underlying control. Useful for mapping to a data field. */\n name?: FormControlProps['name'];\n /**\n * CurrencyInput input value.\n * Requires an onChange handler to update value.\n * @default ''\n */\n value?: string;\n /** Callback fired when input value changes. */\n onChange: (value?: string) => void;\n /** Callback fired when the component loses focus. */\n onFocus?: (value?: string) => void;\n /** Callback fired when the component loses focus. */\n onBlur?: (value?: string) => void;\n /** Ref for the wrapping element. */\n ref?: Ref<HTMLInputElement>;\n}\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { FunctionComponent } from 'react';
|
|
2
|
+
import { ForwardProps } from '../../types';
|
|
3
|
+
import { CreditCardInputProps } from './CreditCard.types';
|
|
4
|
+
declare const CreditCardInput: FunctionComponent<CreditCardInputProps & ForwardProps>;
|
|
5
|
+
export default CreditCardInput;
|
|
6
|
+
//# sourceMappingURL=CreditCardInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CreditCardInput.d.ts","sourceRoot":"","sources":["../../../src/components/CreditCard/CreditCardInput.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EAMlB,MAAM,OAAO,CAAC;AAGf,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAG1D,QAAA,MAAM,eAAe,EAAE,iBAAiB,CAAC,oBAAoB,GAAG,YAAY,CA2D3E,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef } from 'react';
|
|
3
|
+
import creditCardType from 'credit-card-type';
|
|
4
|
+
import Input from '../Input';
|
|
5
|
+
import { useConsolidatedRef, useInputFormatter } from '../../hooks';
|
|
6
|
+
import { formatCreditCard, isPossibleCardNumber } from './utils';
|
|
7
|
+
const CreditCardInput = forwardRef(({ value = '', onChange, onBlur, onFocus, ...restProps }, ref) => {
|
|
8
|
+
const onInputKeyDown = (e) => {
|
|
9
|
+
if (value && !isPossibleCardNumber(value) && Number.isFinite(Number.parseInt(e.key, 10))) {
|
|
10
|
+
e.target.value = '';
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
const onInputChange = (e) => {
|
|
14
|
+
onChange(e.target.value ? e.target.value.replace(/\D+/g, '') : undefined);
|
|
15
|
+
};
|
|
16
|
+
const onInputBlur = (e) => {
|
|
17
|
+
const inputValue = e.target.value;
|
|
18
|
+
onBlur?.(inputValue ? inputValue.replace(/\D+/g, '') : undefined);
|
|
19
|
+
};
|
|
20
|
+
const onInputFocus = (e) => {
|
|
21
|
+
const inputValue = e.target.value;
|
|
22
|
+
onFocus?.(inputValue ? inputValue.replace(/\D+/g, '') : undefined);
|
|
23
|
+
};
|
|
24
|
+
const onPaste = (e) => {
|
|
25
|
+
const text = e.clipboardData.getData('text').replace(/\D+/g, '');
|
|
26
|
+
const [{ lengths: [inferredLength] = [] } = {}] = creditCardType(text);
|
|
27
|
+
if (text.length > inferredLength) {
|
|
28
|
+
onChange(Number(text).toString());
|
|
29
|
+
e.preventDefault();
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
const maxLength = value ? Math.max(...(creditCardType(value)[0]?.lengths || [16])) : undefined;
|
|
33
|
+
const obfuscation = /\D/.test(value) ? 'partial' : 'none';
|
|
34
|
+
const inputRef = useConsolidatedRef(ref);
|
|
35
|
+
const formatted = useInputFormatter(inputRef, value, (input) => formatCreditCard(input.replace(/\D+/g, ''), { obfuscation }));
|
|
36
|
+
return (_jsx(Input, { ...restProps, inputMode: 'numeric', ref: inputRef, value: formatted, onChange: onInputChange, onBlur: onInputBlur, onFocus: onInputFocus, onPaste: onPaste, onKeyDown: onInputKeyDown, maxLength: maxLength, autocomplete: 'cc-number' }));
|
|
37
|
+
});
|
|
38
|
+
export default CreditCardInput;
|
|
39
|
+
//# sourceMappingURL=CreditCardInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CreditCardInput.js","sourceRoot":"","sources":["../../../src/components/CreditCard/CreditCardInput.tsx"],"names":[],"mappings":";AAAA,OAAO,EAEL,UAAU,EAKX,MAAM,OAAO,CAAC;AACf,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAG9C,OAAO,KAAK,MAAM,UAAU,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGpE,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAEjE,MAAM,eAAe,GAA2D,UAAU,CACxF,CACE,EAAE,KAAK,GAAG,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAyC,EAC9F,GAAgC,EAChC,EAAE;IACF,MAAM,cAAc,GAAG,CAAC,CAAgB,EAAE,EAAE;QAC1C,IAAI,KAAK,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE;YACvF,CAAC,CAAC,MAA2B,CAAC,KAAK,GAAG,EAAE,CAAC;SAC3C;IACH,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,CAAC,CAAgC,EAAE,EAAE;QACzD,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC5E,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,CAAC,CAAa,EAAE,EAAE;QACpC,MAAM,UAAU,GAAI,CAAC,CAAC,MAA2B,CAAC,KAAK,CAAC;QACxD,MAAM,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACpE,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,CAAa,EAAE,EAAE;QACrC,MAAM,UAAU,GAAI,CAAC,CAAC,MAA2B,CAAC,KAAK,CAAC;QACxD,OAAO,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACrE,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,CAAC,CAAiB,EAAE,EAAE;QACpC,MAAM,IAAI,GAAG,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACjE,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QACvE,IAAI,IAAI,CAAC,MAAM,GAAG,cAAc,EAAE;YAChC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YAClC,CAAC,CAAC,cAAc,EAAE,CAAC;SACpB;IACH,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE/F,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;IAE1D,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,iBAAiB,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,KAAa,EAAE,EAAE,CACrE,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,CAAC,CAC7D,CAAC;IAEF,OAAO,CACL,KAAC,KAAK,OACA,SAAS,EACb,SAAS,EAAC,SAAS,EACnB,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,cAAc,EACzB,SAAS,EAAE,SAAS,EACpB,YAAY,EAAC,WAAW,GACxB,CACH,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,eAAe,eAAe,CAAC","sourcesContent":["import {\n FunctionComponent,\n forwardRef,\n PropsWithoutRef,\n ChangeEvent,\n ClipboardEvent,\n KeyboardEvent\n} from 'react';\nimport creditCardType from 'credit-card-type';\n\nimport { ForwardProps } from '../../types';\nimport Input from '../Input';\nimport { useConsolidatedRef, useInputFormatter } from '../../hooks';\n\nimport { CreditCardInputProps } from './CreditCard.types';\nimport { formatCreditCard, isPossibleCardNumber } from './utils';\n\nconst CreditCardInput: FunctionComponent<CreditCardInputProps & ForwardProps> = forwardRef(\n (\n { value = '', onChange, onBlur, onFocus, ...restProps }: PropsWithoutRef<CreditCardInputProps>,\n ref: CreditCardInputProps['ref']\n ) => {\n const onInputKeyDown = (e: KeyboardEvent) => {\n if (value && !isPossibleCardNumber(value) && Number.isFinite(Number.parseInt(e.key, 10))) {\n (e.target as HTMLInputElement).value = '';\n }\n };\n\n const onInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n onChange(e.target.value ? e.target.value.replace(/\\D+/g, '') : undefined);\n };\n\n const onInputBlur = (e: FocusEvent) => {\n const inputValue = (e.target as HTMLInputElement).value;\n onBlur?.(inputValue ? inputValue.replace(/\\D+/g, '') : undefined);\n };\n\n const onInputFocus = (e: FocusEvent) => {\n const inputValue = (e.target as HTMLInputElement).value;\n onFocus?.(inputValue ? inputValue.replace(/\\D+/g, '') : undefined);\n };\n\n const onPaste = (e: ClipboardEvent) => {\n const text = e.clipboardData.getData('text').replace(/\\D+/g, '');\n const [{ lengths: [inferredLength] = [] } = {}] = creditCardType(text);\n if (text.length > inferredLength) {\n onChange(Number(text).toString());\n e.preventDefault();\n }\n };\n\n const maxLength = value ? Math.max(...(creditCardType(value)[0]?.lengths || [16])) : undefined;\n\n const obfuscation = /\\D/.test(value) ? 'partial' : 'none';\n\n const inputRef = useConsolidatedRef(ref);\n const formatted = useInputFormatter(inputRef, value, (input: string) =>\n formatCreditCard(input.replace(/\\D+/g, ''), { obfuscation })\n );\n\n return (\n <Input\n {...restProps}\n inputMode='numeric'\n ref={inputRef}\n value={formatted}\n onChange={onInputChange}\n onBlur={onInputBlur}\n onFocus={onInputFocus}\n onPaste={onPaste}\n onKeyDown={onInputKeyDown}\n maxLength={maxLength}\n autocomplete='cc-number'\n />\n );\n }\n);\n\nexport default CreditCardInput;\n"]}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
export { default as CreditCardDisplay } from './CreditCardDisplay';
|
|
2
|
-
export {
|
|
2
|
+
export { default as CreditCardInput } from './CreditCardInput';
|
|
3
|
+
export type { CreditCardDisplayProps, CreditCardInputProps, ObfuscationMode } from './CreditCard.types';
|
|
4
|
+
export { formatCreditCard, isValidCreditCard } from './utils';
|
|
3
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/CreditCard/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/CreditCard/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/D,YAAY,EACV,sBAAsB,EACtB,oBAAoB,EACpB,eAAe,EAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/CreditCard/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC","sourcesContent":["export { default as CreditCardDisplay } from './CreditCardDisplay';\nexport {
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/CreditCard/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAM/D,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC","sourcesContent":["export { default as CreditCardDisplay } from './CreditCardDisplay';\nexport { default as CreditCardInput } from './CreditCardInput';\nexport type {\n CreditCardDisplayProps,\n CreditCardInputProps,\n ObfuscationMode\n} from './CreditCard.types';\nexport { formatCreditCard, isValidCreditCard } from './utils';\n"]}
|
|
@@ -1,3 +1,14 @@
|
|
|
1
1
|
import type { FormattingOptions } from './CreditCard.types';
|
|
2
|
+
/**
|
|
3
|
+
* Returns a formatted and obfuscated on demand partial credit card number.
|
|
4
|
+
* @param value starting, partial number.
|
|
5
|
+
* @param formattingOptions additional formatting options
|
|
6
|
+
*/
|
|
2
7
|
export declare const formatCreditCard: (value: string, { obfuscation }?: FormattingOptions) => string;
|
|
8
|
+
/** Returns maximum total length of formatted credit card of given type including gaps. */
|
|
9
|
+
export declare const creditCardTotalLength: (cardType: string) => number;
|
|
10
|
+
/** Returns true if given first numbers match a pattern of any card, false otherwise. */
|
|
11
|
+
export declare const isPossibleCardNumber: (cardNumber: string) => boolean;
|
|
12
|
+
/** Returns true if given card number is valid (matches the pattern and length of a card type), false otherwise. */
|
|
13
|
+
export declare const isValidCreditCard: (cardNumber: number) => boolean;
|
|
3
14
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/CreditCard/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/CreditCard/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAe5D;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,UACpB,MAAM,oBACa,iBAAiB,KAC1C,MAaF,CAAC;AAEF,0FAA0F;AAC1F,eAAO,MAAM,qBAAqB,aAAc,MAAM,KAAG,MAGxD,CAAC;AAEF,yFAAyF;AACzF,eAAO,MAAM,oBAAoB,eAAgB,MAAM,KAAG,OAEzD,CAAC;AAEF,mHAAmH;AACnH,eAAO,MAAM,iBAAiB,eAAgB,MAAM,KAAG,OAKtD,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import creditCardType from 'credit-card-type';
|
|
1
|
+
import creditCardType, { getTypeInfo } from 'credit-card-type';
|
|
2
2
|
const prettyPrintCard = (value, gaps) => {
|
|
3
3
|
const offsets = [0].concat(gaps.filter(n => n < value.length), value.length);
|
|
4
4
|
const groups = [];
|
|
@@ -7,7 +7,11 @@ const prettyPrintCard = (value, gaps) => {
|
|
|
7
7
|
}
|
|
8
8
|
return groups.join(' ');
|
|
9
9
|
};
|
|
10
|
-
|
|
10
|
+
/**
|
|
11
|
+
* Returns a formatted and obfuscated on demand partial credit card number.
|
|
12
|
+
* @param value starting, partial number.
|
|
13
|
+
* @param formattingOptions additional formatting options
|
|
14
|
+
*/
|
|
11
15
|
export const formatCreditCard = (value, { obfuscation = 'none' } = {}) => {
|
|
12
16
|
let result;
|
|
13
17
|
switch (obfuscation) {
|
|
@@ -22,4 +26,18 @@ export const formatCreditCard = (value, { obfuscation = 'none' } = {}) => {
|
|
|
22
26
|
}
|
|
23
27
|
return result;
|
|
24
28
|
};
|
|
29
|
+
/** Returns maximum total length of formatted credit card of given type including gaps. */
|
|
30
|
+
export const creditCardTotalLength = (cardType) => {
|
|
31
|
+
const type = getTypeInfo(cardType);
|
|
32
|
+
return Math.max(...type.lengths) + type.gaps.length;
|
|
33
|
+
};
|
|
34
|
+
/** Returns true if given first numbers match a pattern of any card, false otherwise. */
|
|
35
|
+
export const isPossibleCardNumber = (cardNumber) => {
|
|
36
|
+
return creditCardType(cardNumber).length > 0;
|
|
37
|
+
};
|
|
38
|
+
/** Returns true if given card number is valid (matches the pattern and length of a card type), false otherwise. */
|
|
39
|
+
export const isValidCreditCard = (cardNumber) => {
|
|
40
|
+
return (creditCardType(cardNumber.toString())[0]?.lengths.includes(cardNumber.toString().length) ??
|
|
41
|
+
false);
|
|
42
|
+
};
|
|
25
43
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/components/CreditCard/utils.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/components/CreditCard/utils.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,EAAE,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAI/D,MAAM,eAAe,GAAG,CAAC,KAAa,EAAE,IAAc,EAAU,EAAE;IAChE,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CACxB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,EAClC,KAAK,CAAC,MAAM,CACb,CAAC;IAEF,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;QACjD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;KAC1D;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,KAAa,EACb,EAAE,WAAW,GAAG,MAAM,KAAwB,EAAE,EACxC,EAAE;IACV,IAAI,MAAM,CAAC;IACX,QAAQ,WAAW,EAAE;QACnB,KAAK,MAAM;YACT,MAAM,GAAG,eAAe,CAAC,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;YACtE,MAAM;QACR,KAAK,SAAS;YACZ,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACxE,MAAM;QACR;YACE,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACpE;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,0FAA0F;AAC1F,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,QAAgB,EAAU,EAAE;IAChE,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACnC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AACtD,CAAC,CAAC;AAEF,yFAAyF;AACzF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,UAAkB,EAAW,EAAE;IAClE,OAAO,cAAc,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF,mHAAmH;AACnH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,UAAkB,EAAW,EAAE;IAC/D,OAAO,CACL,cAAc,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC;QACxF,KAAK,CACN,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import creditCardType, { getTypeInfo } from 'credit-card-type';\n\nimport type { FormattingOptions } from './CreditCard.types';\n\nconst prettyPrintCard = (value: string, gaps: number[]): string => {\n const offsets = [0].concat(\n gaps.filter(n => n < value.length),\n value.length\n );\n\n const groups = [];\n for (let i = 0; offsets[i] < value.length; i += 1) {\n groups.push(value.substring(offsets[i], offsets[i + 1]));\n }\n return groups.join(' ');\n};\n\n/**\n * Returns a formatted and obfuscated on demand partial credit card number.\n * @param value starting, partial number.\n * @param formattingOptions additional formatting options\n */\nexport const formatCreditCard = (\n value: string,\n { obfuscation = 'none' }: FormattingOptions = {}\n): string => {\n let result;\n switch (obfuscation) {\n case 'none':\n result = prettyPrintCard(value, creditCardType(value)[0]?.gaps ?? []);\n break;\n case 'partial':\n result = prettyPrintCard(value.slice(-4).padStart(16, '•'), [4, 8, 12]);\n break;\n default:\n result = Array.from({ length: 4 }).fill('•'.repeat(4)).join(' ');\n }\n return result;\n};\n\n/** Returns maximum total length of formatted credit card of given type including gaps. */\nexport const creditCardTotalLength = (cardType: string): number => {\n const type = getTypeInfo(cardType);\n return Math.max(...type.lengths) + type.gaps.length;\n};\n\n/** Returns true if given first numbers match a pattern of any card, false otherwise. */\nexport const isPossibleCardNumber = (cardNumber: string): boolean => {\n return creditCardType(cardNumber).length > 0;\n};\n\n/** Returns true if given card number is valid (matches the pattern and length of a card type), false otherwise. */\nexport const isValidCreditCard = (cardNumber: number): boolean => {\n return (\n creditCardType(cardNumber.toString())[0]?.lengths.includes(cardNumber.toString().length) ??\n false\n );\n};\n"]}
|