no-frills-ui 0.0.14-alpha.7 → 0.0.14-rc.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/README.md +2 -3
- package/dist/index.js +926 -795
- package/dist/index.js.map +1 -1
- package/lib-esm/components/Accordion/Accordion.d.ts +9 -13
- package/lib-esm/components/Accordion/Accordion.js +4 -10
- package/lib-esm/components/Accordion/Accordion.js.map +1 -0
- package/lib-esm/components/Accordion/AccordionStep.d.ts +22 -22
- package/lib-esm/components/Accordion/AccordionStep.js +41 -35
- package/lib-esm/components/Accordion/AccordionStep.js.map +1 -0
- package/lib-esm/components/Badge/Badge.d.ts +13 -16
- package/lib-esm/components/Badge/Badge.js +12 -21
- package/lib-esm/components/Badge/Badge.js.map +1 -0
- package/lib-esm/components/Button/ActionButton.d.ts +9 -5
- package/lib-esm/components/Button/ActionButton.js +20 -4
- package/lib-esm/components/Button/ActionButton.js.map +1 -0
- package/lib-esm/components/Button/Button.d.ts +9 -5
- package/lib-esm/components/Button/Button.js +19 -6
- package/lib-esm/components/Button/Button.js.map +1 -0
- package/lib-esm/components/Button/IconButton.d.ts +9 -5
- package/lib-esm/components/Button/IconButton.js +20 -4
- package/lib-esm/components/Button/IconButton.js.map +1 -0
- package/lib-esm/components/Button/LinkButton.d.ts +9 -5
- package/lib-esm/components/Button/LinkButton.js +20 -4
- package/lib-esm/components/Button/LinkButton.js.map +1 -0
- package/lib-esm/components/Button/RaisedButton.d.ts +9 -5
- package/lib-esm/components/Button/RaisedButton.js +20 -4
- package/lib-esm/components/Button/RaisedButton.js.map +1 -0
- package/lib-esm/components/Card/Card.d.ts +4 -6
- package/lib-esm/components/Card/Card.js +18 -4
- package/lib-esm/components/Card/Card.js.map +1 -0
- package/lib-esm/components/Chip/Chip.d.ts +2 -2
- package/lib-esm/components/Chip/Chip.js +17 -10
- package/lib-esm/components/Chip/Chip.js.map +1 -0
- package/lib-esm/components/ChipInput/ChipInput.d.ts +28 -39
- package/lib-esm/components/ChipInput/ChipInput.js +39 -39
- package/lib-esm/components/ChipInput/ChipInput.js.map +1 -0
- package/lib-esm/components/Dialog/AlertDialog.d.ts +11 -12
- package/lib-esm/components/Dialog/AlertDialog.js +5 -11
- package/lib-esm/components/Dialog/AlertDialog.js.map +1 -0
- package/lib-esm/components/Dialog/ConfirmDialog.d.ts +13 -14
- package/lib-esm/components/Dialog/ConfirmDialog.js +5 -12
- package/lib-esm/components/Dialog/ConfirmDialog.js.map +1 -0
- package/lib-esm/components/Dialog/Dialog.d.ts +8 -14
- package/lib-esm/components/Dialog/Dialog.js +13 -10
- package/lib-esm/components/Dialog/Dialog.js.map +1 -0
- package/lib-esm/components/Dialog/PromptDialog.d.ts +18 -19
- package/lib-esm/components/Dialog/PromptDialog.js +14 -21
- package/lib-esm/components/Dialog/PromptDialog.js.map +1 -0
- package/lib-esm/components/DragAndDrop/DragAndDrop.d.ts +37 -59
- package/lib-esm/components/DragAndDrop/DragAndDrop.js +26 -28
- package/lib-esm/components/DragAndDrop/DragAndDrop.js.map +1 -0
- package/lib-esm/components/DragAndDrop/DragItem.d.ts +2 -2
- package/lib-esm/components/DragAndDrop/DragItem.js +43 -40
- package/lib-esm/components/DragAndDrop/DragItem.js.map +1 -0
- package/lib-esm/components/DragAndDrop/types.d.ts +3 -3
- package/lib-esm/components/DragAndDrop/types.js +1 -0
- package/lib-esm/components/DragAndDrop/types.js.map +1 -0
- package/lib-esm/components/Drawer/Drawer.d.ts +24 -31
- package/lib-esm/components/Drawer/Drawer.js +50 -45
- package/lib-esm/components/Drawer/Drawer.js.map +1 -0
- package/lib-esm/components/Groups/Group.d.ts +6 -8
- package/lib-esm/components/Groups/Group.js +15 -12
- package/lib-esm/components/Groups/Group.js.map +1 -0
- package/lib-esm/components/Groups/GroupLabel.js +2 -1
- package/lib-esm/components/Groups/GroupLabel.js.map +1 -0
- package/lib-esm/components/Input/Checkbox.d.ts +12 -15
- package/lib-esm/components/Input/Checkbox.js +34 -29
- package/lib-esm/components/Input/Checkbox.js.map +1 -0
- package/lib-esm/components/Input/Dropdown.d.ts +8 -18
- package/lib-esm/components/Input/Dropdown.js +44 -18
- package/lib-esm/components/Input/Dropdown.js.map +1 -0
- package/lib-esm/components/Input/Input.d.ts +8 -3
- package/lib-esm/components/Input/Input.js +24 -22
- package/lib-esm/components/Input/Input.js.map +1 -0
- package/lib-esm/components/Input/Radio.d.ts +4 -8
- package/lib-esm/components/Input/Radio.js +20 -16
- package/lib-esm/components/Input/Radio.js.map +1 -0
- package/lib-esm/components/Input/RadioButton.d.ts +4 -8
- package/lib-esm/components/Input/RadioButton.js +19 -15
- package/lib-esm/components/Input/RadioButton.js.map +1 -0
- package/lib-esm/components/Input/Select.d.ts +6 -13
- package/lib-esm/components/Input/Select.js +26 -22
- package/lib-esm/components/Input/Select.js.map +1 -0
- package/lib-esm/components/Input/TextArea.d.ts +6 -13
- package/lib-esm/components/Input/TextArea.js +33 -27
- package/lib-esm/components/Input/TextArea.js.map +1 -0
- package/lib-esm/components/Input/Toggle.d.ts +4 -9
- package/lib-esm/components/Input/Toggle.js +15 -12
- package/lib-esm/components/Input/Toggle.js.map +1 -0
- package/lib-esm/components/Menu/Menu.d.ts +4 -14
- package/lib-esm/components/Menu/Menu.js +26 -17
- package/lib-esm/components/Menu/Menu.js.map +1 -0
- package/lib-esm/components/Menu/MenuContext.d.ts +4 -4
- package/lib-esm/components/Menu/MenuContext.js +2 -0
- package/lib-esm/components/Menu/MenuContext.js.map +1 -0
- package/lib-esm/components/Menu/MenuItem.d.ts +10 -4
- package/lib-esm/components/Menu/MenuItem.js +21 -6
- package/lib-esm/components/Menu/MenuItem.js.map +1 -0
- package/lib-esm/components/Modal/Modal.d.ts +17 -23
- package/lib-esm/components/Modal/Modal.js +38 -34
- package/lib-esm/components/Modal/Modal.js.map +1 -0
- package/lib-esm/components/Notification/Notification.d.ts +39 -34
- package/lib-esm/components/Notification/Notification.js +17 -39
- package/lib-esm/components/Notification/Notification.js.map +1 -0
- package/lib-esm/components/Notification/NotificationManager.d.ts +4 -4
- package/lib-esm/components/Notification/NotificationManager.js +19 -14
- package/lib-esm/components/Notification/NotificationManager.js.map +1 -0
- package/lib-esm/components/Notification/index.d.ts +1 -0
- package/lib-esm/components/Notification/style.d.ts +2 -3
- package/lib-esm/components/Notification/style.js +21 -20
- package/lib-esm/components/Notification/style.js.map +1 -0
- package/lib-esm/components/Notification/types.js +1 -0
- package/lib-esm/components/Notification/types.js.map +1 -0
- package/lib-esm/components/Popover/Popover.d.ts +21 -20
- package/lib-esm/components/Popover/Popover.js +44 -45
- package/lib-esm/components/Popover/Popover.js.map +1 -0
- package/lib-esm/components/Spinner/Spinner.d.ts +14 -15
- package/lib-esm/components/Spinner/Spinner.js +14 -14
- package/lib-esm/components/Spinner/Spinner.js.map +1 -0
- package/lib-esm/components/Stepper/Step.d.ts +15 -12
- package/lib-esm/components/Stepper/Step.js +12 -9
- package/lib-esm/components/Stepper/Step.js.map +1 -0
- package/lib-esm/components/Stepper/Stepper.d.ts +11 -17
- package/lib-esm/components/Stepper/Stepper.js +30 -27
- package/lib-esm/components/Stepper/Stepper.js.map +1 -0
- package/lib-esm/components/Tabs/Tab.d.ts +10 -16
- package/lib-esm/components/Tabs/Tab.js +1 -8
- package/lib-esm/components/Tabs/Tab.js.map +1 -0
- package/lib-esm/components/Tabs/Tabs.d.ts +11 -22
- package/lib-esm/components/Tabs/Tabs.js +43 -34
- package/lib-esm/components/Tabs/Tabs.js.map +1 -0
- package/lib-esm/components/Toast/Toast.d.ts +7 -7
- package/lib-esm/components/Toast/Toast.js +17 -15
- package/lib-esm/components/Toast/Toast.js.map +1 -0
- package/lib-esm/components/Toast/ToastStory.d.ts +21 -24
- package/lib-esm/components/Tooltip/Tooltip.d.ts +11 -14
- package/lib-esm/components/Tooltip/Tooltip.js +14 -23
- package/lib-esm/components/Tooltip/Tooltip.js.map +1 -0
- package/lib-esm/icons/CheckCircle.js +3 -2
- package/lib-esm/icons/CheckCircle.js.map +1 -0
- package/lib-esm/icons/Close.js +1 -0
- package/lib-esm/icons/Close.js.map +1 -0
- package/lib-esm/icons/DragIndicator.js +1 -0
- package/lib-esm/icons/DragIndicator.js.map +1 -0
- package/lib-esm/icons/ErrorOutline.js +3 -2
- package/lib-esm/icons/ErrorOutline.js.map +1 -0
- package/lib-esm/icons/ExpandMore.js +1 -0
- package/lib-esm/icons/ExpandMore.js.map +1 -0
- package/lib-esm/icons/FiberManualRecord.js +1 -0
- package/lib-esm/icons/FiberManualRecord.js.map +1 -0
- package/lib-esm/icons/Info.js +3 -2
- package/lib-esm/icons/Info.js.map +1 -0
- package/lib-esm/icons/ReportProblem.js +3 -2
- package/lib-esm/icons/ReportProblem.js.map +1 -0
- package/lib-esm/index.js +43 -0
- package/lib-esm/index.js.map +1 -0
- package/lib-esm/shared/LayerManager.d.ts +5 -4
- package/lib-esm/shared/LayerManager.js +125 -112
- package/lib-esm/shared/LayerManager.js.map +1 -0
- package/lib-esm/shared/constants.js +1 -0
- package/lib-esm/shared/constants.js.map +1 -0
- package/lib-esm/shared/styles.js +9 -8
- package/lib-esm/shared/styles.js.map +1 -0
- package/package.json +66 -31
- package/lib-esm/components/index.js +0 -42
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React from 'react';
|
|
1
|
+
import React, { ForwardRefExoticComponent, RefAttributes } from 'react';
|
|
2
2
|
/** Enums for layer position on screen. */
|
|
3
3
|
export declare enum LAYER_POSITION {
|
|
4
4
|
TOP_LEFT = 0,
|
|
@@ -13,7 +13,7 @@ interface LayerConfig {
|
|
|
13
13
|
/** Show an overlay */
|
|
14
14
|
overlay?: boolean;
|
|
15
15
|
/** Element to render inside the layer. */
|
|
16
|
-
component: JSX.Element;
|
|
16
|
+
component: React.JSX.Element | null;
|
|
17
17
|
/** Position of the layer */
|
|
18
18
|
position?: LAYER_POSITION;
|
|
19
19
|
/** Delay for exit */
|
|
@@ -23,7 +23,7 @@ interface LayerConfig {
|
|
|
23
23
|
/** Close layer overlay is clicked. */
|
|
24
24
|
closeOnOverlayClick?: boolean;
|
|
25
25
|
/** Callback called when modal closes */
|
|
26
|
-
closeCallback?:
|
|
26
|
+
closeCallback?: (resp?: unknown) => void;
|
|
27
27
|
/** Layer is created with max z-index */
|
|
28
28
|
alwaysOnTop?: boolean;
|
|
29
29
|
}
|
|
@@ -86,11 +86,12 @@ declare class LayerManager {
|
|
|
86
86
|
* @param layer
|
|
87
87
|
*/
|
|
88
88
|
private unmount;
|
|
89
|
+
private Empty;
|
|
89
90
|
/**
|
|
90
91
|
* Renders a layer.
|
|
91
92
|
* @param config
|
|
92
93
|
*/
|
|
93
|
-
renderLayer: (config: LayerConfig) => [
|
|
94
|
+
renderLayer: (config: LayerConfig) => [ForwardRefExoticComponent<RefAttributes<HTMLDivElement>>, (resp?: unknown) => void];
|
|
94
95
|
}
|
|
95
96
|
declare const _default: LayerManager;
|
|
96
97
|
export default _default;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx } from '@emotion/react/jsx-runtime';
|
|
2
2
|
import React, { useEffect } from 'react';
|
|
3
|
-
import
|
|
3
|
+
import { createPortal } from 'react-dom';
|
|
4
4
|
import styled from '@emotion/styled';
|
|
5
5
|
import { getThemeValue, THEME_NAME } from './constants.js';
|
|
6
6
|
|
|
@@ -32,8 +32,8 @@ import { getThemeValue, THEME_NAME } from './constants.js';
|
|
|
32
32
|
[5]: 'bottom: 0; right: 0; justify-content: flex-end;',
|
|
33
33
|
[6]: 'top: 0; left: 0; justify-content: center; align-items: center;'
|
|
34
34
|
};
|
|
35
|
-
/** Layer container component. */ const Container = /*#__PURE__*/ styled("div", {
|
|
36
|
-
target: "
|
|
35
|
+
/** Layer container component. */ const Container$5 = /*#__PURE__*/ styled("div", {
|
|
36
|
+
target: "erw6k0c0",
|
|
37
37
|
label: "Container"
|
|
38
38
|
})("position:fixed;display:flex;opacity:0;transition:opacity 0.3s ease;", (props)=>POSITION_STYLE[props.position], " ", (props)=>props.overlay && `
|
|
39
39
|
width: 100%;
|
|
@@ -43,8 +43,8 @@ import { getThemeValue, THEME_NAME } from './constants.js';
|
|
|
43
43
|
pointer-events: all;
|
|
44
44
|
`, " z-index:", (props)=>props.zIndex, ";.nf-layer-enter &{opacity:1;", (props)=>props.overlay && `
|
|
45
45
|
backdrop-filter: blur(3px);
|
|
46
|
-
`, "}", "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiL2hvbWUvcnVubmVyL3dvcmsvbm8tZnJpbGxzLXVpL25vLWZyaWxscy11aS9zcmMvc2hhcmVkL0xheWVyTWFuYWdlci50c3giLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL25vLWZyaWxscy11aS9uby1mcmlsbHMtdWkvc3JjL3NoYXJlZC9MYXllck1hbmFnZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBSZWFjdFBvcnRhbCwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XG5pbXBvcnQgeyBnZXRUaGVtZVZhbHVlLCBUSEVNRV9OQU1FIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKiogRW51bXMgZm9yIGxheWVyIHBvc2l0aW9uIG9uIHNjcmVlbi4gKi9cbmV4cG9ydCBlbnVtIExBWUVSX1BPU0lUSU9OIHtcbiAgICBUT1BfTEVGVCxcbiAgICBUT1BfQ0VOVEVSLFxuICAgIFRPUF9SSUdIVCxcbiAgICBCT1RUT01fTEVGVCxcbiAgICBCT1RUT01fQ0VOVEVSLFxuICAgIEJPVFRPTV9SSUdIVCxcbiAgICBESUFMT0csXG59XG5cbmludGVyZmFjZSBMYXllckNvbmZpZyB7XG4gICAgLyoqIFNob3cgYW4gb3ZlcmxheSAqL1xuICAgIG92ZXJsYXk/OiBib29sZWFuO1xuICAgIC8qKiBFbGVtZW50IHRvIHJlbmRlciBpbnNpZGUgdGhlIGxheWVyLiAqL1xuICAgIGNvbXBvbmVudDogSlNYLkVsZW1lbnQ7XG4gICAgLyoqIFBvc2l0aW9uIG9mIHRoZSBsYXllciAqL1xuICAgIHBvc2l0aW9uPzogTEFZRVJfUE9TSVRJT047XG4gICAgLyoqIERlbGF5IGZvciBleGl0ICovXG4gICAgZXhpdERlbGF5PzogbnVtYmVyO1xuICAgIC8qKiBDbG9zZSBsYXllciBvbiBgZXNjYCBrZXkgcHJlc3MuICovXG4gICAgY2xvc2VPbkVzYz86IGJvb2xlYW47XG4gICAgLyoqIENsb3NlIGxheWVyIG92ZXJsYXkgaXMgY2xpY2tlZC4gKi9cbiAgICBjbG9zZU9uT3ZlcmxheUNsaWNrPzogYm9vbGVhbjtcbiAgICAvKiogQ2FsbGJhY2sgY2FsbGVkIHdoZW4gbW9kYWwgY2xvc2VzICovXG4gICAgY2xvc2VDYWxsYmFjaz86IDxUPihyZXNwOiBUKSA9PiB2b2lkO1xuICAgIC8qKiBMYXllciBpcyBjcmVhdGVkIHdpdGggbWF4IHotaW5kZXggKi9cbiAgICBhbHdheXNPblRvcD86IGJvb2xlYW47XG59XG5cbi8qKiBEZWZhdWx0IHZhbHVlIG9mIGNvbmZpZyAqL1xuY29uc3QgZGVmYXVsdENvbmZpZzogTGF5ZXJDb25maWcgPSB7XG4gICAgY2xvc2VPbkVzYzogdHJ1ZSxcbiAgICBvdmVybGF5OiBmYWxzZSxcbiAgICBwb3NpdGlvbjogTEFZRVJfUE9TSVRJT04uVE9QX0xFRlQsXG4gICAgY29tcG9uZW50OiBudWxsLFxuICAgIGV4aXREZWxheTogMCxcbiAgICBjbG9zZU9uT3ZlcmxheUNsaWNrOiB0cnVlLFxuICAgIGFsd2F5c09uVG9wOiBmYWxzZSxcbn07XG5cbi8qKiBNZXRhZGF0YSBvZiBlYWNoIGxheWVyICovXG5pbnRlcmZhY2UgTGF5ZXIge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgY29uZmlnOiBMYXllckNvbmZpZztcbiAgICBlbGVtZW50OiBIVE1MRGl2RWxlbWVudDtcbn1cblxuLyoqIFN0eWxlcyBmb3IgZWFjaCBwb3NpdGlvbiAqL1xuY29uc3QgUE9TSVRJT05fU1RZTEUgPSB7XG4gICAgW0xBWUVSX1BPU0lUSU9OLlRPUF9MRUZUXTogJ3RvcDogMDsgbGVmdDogMDsnLFxuICAgIFtMQVlFUl9QT1NJVElPTi5UT1BfQ0VOVEVSXTogJ3RvcDogMDsgbGVmdDogNTAlOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsnLFxuICAgIFtMQVlFUl9QT1NJVElPTi5UT1BfUklHSFRdOiAndG9wOiAwOyByaWdodDogMDsganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsnLFxuICAgIFtMQVlFUl9QT1NJVElPTi5CT1RUT01fTEVGVF06ICdib3R0b206IDA7IGxlZnQ6IDA7JyxcbiAgICBbTEFZRVJfUE9TSVRJT04uQk9UVE9NX0NFTlRFUl06ICdib3R0b206IDA7IGxlZnQ6IDUwJTsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7JyxcbiAgICBbTEFZRVJfUE9TSVRJT04uQk9UVE9NX1JJR0hUXTogJ2JvdHRvbTogMDsgcmlnaHQ6IDA7IGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7JyxcbiAgICBbTEFZRVJfUE9TSVRJT04uRElBTE9HXTogJ3RvcDogMDsgbGVmdDogMDsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGFsaWduLWl0ZW1zOiBjZW50ZXI7Jyxcbn07XG5cbi8qKiBMYXllciBjb250YWluZXIgY29tcG9uZW50LiAqL1xuY29uc3QgQ29udGFpbmVyID0gc3R5bGVkLmRpdjxMYXllckNvbmZpZyAmIHsgekluZGV4OiBudW1iZXIgfT5gXG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgZWFzZTtcbiAgICAkeyhwcm9wcykgPT4gUE9TSVRJT05fU1RZTEVbcHJvcHMucG9zaXRpb25dfVxuICAgICR7KHByb3BzKSA9PlxuICAgICAgICBwcm9wcy5vdmVybGF5ICYmXG4gICAgICAgIGBcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogMTAwdmg7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Z2V0VGhlbWVWYWx1ZShUSEVNRV9OQU1FLkJBQ0tEUk9QX0NPTE9SKX07XG4gICAgICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigwcHgpO1xuICAgICAgICBwb2ludGVyLWV2ZW50czogYWxsO1xuICAgIGB9XG4gICAgei1pbmRleDogJHsocHJvcHMpID0+IHByb3BzLnpJbmRleH07XG5cbiAgICAubmYtbGF5ZXItZW50ZXIgJiB7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgICR7KHByb3BzKSA9PlxuICAgICAgICAgICAgcHJvcHMub3ZlcmxheSAmJlxuICAgICAgICAgICAgYFxuICAgICAgICAgICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDNweCk7XG4gICAgICAgIGB9XG4gICAgfVxuYDtcblxuLyoqIEtleSBjb2RlIGZvciBkaWZmZXJlbnQga2V5cy4gKi9cbmNvbnN0IEtFWV9DT0RFUyA9IHtcbiAgICBFU0M6IDI3LFxufTtcblxuLyoqXG4gKiBUaGlzIGlzIGEgc2hhcmVkIGhlbHBlciBjbGFzcyB3aGljaCBtYW5hZ2VzIHRoZSB6LWluZGV4IG9mIGVhY2ggbGF5ZXIuXG4gKiBJZiBhIGNvbXBvbmVudCBuZWVkcyB0byBiZSByZW5kZXJlZCBpbiBhIGRpZmZlcmVudCBsYXllciB0aGVuIHRoaXMgY2xhc3NcbiAqIHNob3VsZCBiZSB1c2VkLiBJdCBpbnRlcm5hbGx5IG1haW50YWlucyB0aGUgc3RhY2sgb2Ygb3BlbmVkIGxheWVyIGFuZCBlYWNoXG4gKiBgcmVuZGVyTGF5ZXJgIGNhbGwgd2lsbCBwdXNoIGEgbmV3IGxheWVyIGluIHN0YWNrLlxuICpcbiAqIFRoaXMgd2F5IHdlIG5lZWQgbm90IHdvcnJ5IGFib3V0IHRoZSB6LWluZGV4IGFuZCBjYW4gZnJlZWx5IGtlZXAgb24gY3JlYXRpbmdcbiAqIG5ldyBsYXllcnMuIFRoZSBzdGFyaW5nIGxheWVyIHotaW5kZXggaXMgMTAwMDAuIExlYXZpbmcgZW5vdWdoIHotaW5kZXggZm9yIHRoZVxuICogdXNlciBpZiB0aGV5IGRlc2lyZXMgc28uXG4gKlxuICogQGltcG9ydGFudCBVc2FnZSBQYXR0ZXJuXG4gKiBUbyBhdm9pZCBjcmVhdGluZyBkdXBsaWNhdGUgbGF5ZXJzIChlc3BlY2lhbGx5IGluIFJlYWN0IFN0cmljdCBNb2RlIG9yIE5leHQuanMpLFxuICogYWx3YXlzIGNhbGwgYHJlbmRlckxheWVyYCBvbmx5IG9uY2UgLSBlaXRoZXIgaW4gYSBsaWZlY3ljbGUgbWV0aG9kIChsaWtlIGBjb21wb25lbnREaWRVcGRhdGVgKVxuICogb3IgaW4gYW4gaW1wZXJhdGl2ZSBtZXRob2QgKGxpa2UgYG9wZW4oKWApLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyDinYwgRG9uJ3QgY2FsbCByZW5kZXJMYXllciBpbiByZW5kZXIoKSBtZXRob2RcbiAqIHJlbmRlcigpIHtcbiAqICAgaWYgKHRoaXMuc3RhdGUuc2hvdykge1xuICogICAgIGNvbnN0IFtDb21wb25lbnQsIGNsb3NlRm5dID0gTGF5ZXJNYW5hZ2VyLnJlbmRlckxheWVyKHsgLi4uIH0pOyAvLyBDcmVhdGVzIG5ldyBsYXllciBvbiBldmVyeSByZW5kZXJcbiAqICAgICByZXR1cm4gPENvbXBvbmVudCAvPjtcbiAqICAgfVxuICogfVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyDinIUgRG8gY2FsbCByZW5kZXJMYXllciBvbmNlIGluIGEgbWV0aG9kIGFuZCBzdG9yZSB0aGUgY29tcG9uZW50XG4gKiBvcGVuKCkge1xuICogICBjb25zdCBbQ29tcG9uZW50LCBjbG9zZUZuXSA9IExheWVyTWFuYWdlci5yZW5kZXJMYXllcih7IC4uLiB9KTtcbiAqICAgdGhpcy5zZXRTdGF0ZSh7IExheWVyQ29tcG9uZW50OiBDb21wb25lbnQgfSk7XG4gKiB9XG4gKlxuICogcmVuZGVyKCkge1xuICogICBjb25zdCB7IExheWVyQ29tcG9uZW50IH0gPSB0aGlzLnN0YXRlO1xuICogICByZXR1cm4gTGF5ZXJDb21wb25lbnQgPyA8TGF5ZXJDb21wb25lbnQgLz4gOiBudWxsO1xuICogfVxuICovXG5jbGFzcyBMYXllck1hbmFnZXIge1xuICAgIC8qKiBMYXllciBzdGFjayAqL1xuICAgIHByaXZhdGUgbGF5ZXJzOiBMYXllcltdID0gW107XG4gICAgLyoqIHotaW5kZXggb2YgdGhlIG5leHQgbGF5ZXIgKi9cbiAgICBwcml2YXRlIG5leHRJbmRleCA9IDEwMDAwO1xuICAgIHByaXZhdGUga2V5dXBIYW5kbGVyOiAoZTogS2V5Ym9hcmRFdmVudCkgPT4gdm9pZDtcbiAgICBwcml2YXRlIHRpbWVvdXRJZHMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpOyAvLyBUcmFjayB0aW1lb3V0c1xuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0b3Igc2ltcGx5IHJlZ2lzdGVycyBhIGV2ZW50IGxpc3RlbmVyIG9uIGJvZHkgdG9cbiAgICAgKiByZWFjdCB0byBlc2Mga2V5IHByZXNzLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgLy8gU3RvcmUgaGFuZGxlciByZWZlcmVuY2UgZm9yIGNsZWFudXBcbiAgICAgICAgICAgIHRoaXMua2V5dXBIYW5kbGVyID0gKGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5sYXllcnMubGVuZ3RoICYmIGUua2V5Q29kZSA9PT0gS0VZX0NPREVTLkVTQykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsYXN0TGF5ZXIgPSB0aGlzLmxheWVycy5zbGljZSgtMSlbMF07XG4gICAgICAgICAgICAgICAgICAgIGlmIChsYXN0TGF5ZXIuY29uZmlnLmNsb3NlT25Fc2MgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVubW91bnQobGFzdExheWVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5rZXl1cEhhbmRsZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWRkIGNsZWFudXAgbWV0aG9kXG4gICAgcHVibGljIGRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMua2V5dXBIYW5kbGVyKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5rZXl1cEhhbmRsZXIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIENsZWFyIGFsbCBwZW5kaW5nIHRpbWVvdXRzXG4gICAgICAgIHRoaXMudGltZW91dElkcy5mb3JFYWNoKChpZCkgPT4gY2xlYXJUaW1lb3V0KGlkKSk7XG4gICAgICAgIHRoaXMudGltZW91dElkcy5jbGVhcigpO1xuICAgICAgICAvLyBDbGVhbiB1cCByZW1haW5pbmcgbGF5ZXJzXG4gICAgICAgIHRoaXMubGF5ZXJzLmZvckVhY2goKGxheWVyKSA9PiB7XG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuYm9keS5jb250YWlucyhsYXllci5lbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGF5ZXIuZWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmxheWVycyA9IFtdO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBVbi1tb3VudHMgYSBsYXllci5cbiAgICAgKlxuICAgICAqIEl0IGZpcnN0IGFkZHMgYSBjbGFzcyAnbmYtbGF5ZXItZXhpdCcgYW5kIHRoZW4gdW4tbW91bnRzIHRoZVxuICAgICAqIGxheWVyIGFmdGVyIHRoZSBgZXhpdERlbGF5YCBtZW50aW9uZWQgaW4gdGhlIGxheWVyIGNvbmZpZy5cbiAgICAgKiBUaGlzIGNsYXNzIHdpbGwgaGVscCBjb21wb25lbnQgaW4gdHJpZ2dlcmluZyB0aGUgZW50cnkgYW5pbWF0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIGxheWVyXG4gICAgICovXG4gICAgcHJpdmF0ZSB1bm1vdW50ID0gKGxheWVyOiBMYXllciwgcmVzcD86IHVua25vd24pID0+IHtcbiAgICAgICAgbGF5ZXIuZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ25mLWxheWVyLWV4aXQnKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmxheWVycy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0gPT09IGxheWVyKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5sYXllcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudGltZW91dElkcy5kZWxldGUobGF5ZXIuaWQpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBsYXllci5jb25maWcuY2xvc2VDYWxsYmFjaz8uKHJlc3ApO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihlLm1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ2xlYXIgcmVmZXJlbmNlIHRvIGhlbHAgR0NcbiAgICAgICAgICAgIGxheWVyLmNvbmZpZy5jb21wb25lbnQgPSBudWxsO1xuICAgICAgICB9LCBsYXllci5jb25maWcuZXhpdERlbGF5KTtcblxuICAgICAgICB0aGlzLnRpbWVvdXRJZHMuc2V0KGxheWVyLmlkLCB0aW1lb3V0SWQpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBSZW5kZXJzIGEgbGF5ZXIuXG4gICAgICogQHBhcmFtIGNvbmZpZ1xuICAgICAqL1xuICAgIHB1YmxpYyByZW5kZXJMYXllciA9IChcbiAgICAgICAgY29uZmlnOiBMYXllckNvbmZpZyxcbiAgICApOiBbKCkgPT4gUmVhY3QuUmVhY3RQb3J0YWwgfCBudWxsLCAocmVzcD86IHVua25vd24pID0+IHZvaWRdID0+IHtcbiAgICAgICAgLy8gU1NSIGd1YXJkXG4gICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gWygpID0+IG51bGwsICgpID0+IHt9XTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1lcmdlIGRlZmF1bHQgY29uZmlnIHdpdGggdGhlIHByb3ZpZGVkIGNvbmZpZy5cbiAgICAgICAgY29uc3QgbGF5ZXJDb25maWcgPSB7XG4gICAgICAgICAgICAuLi5kZWZhdWx0Q29uZmlnLFxuICAgICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEdldCB0aGUgei1pbmRleCBmb3IgdGhlIG5ldyBsYXllclxuICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSBsYXllckNvbmZpZy5hbHdheXNPblRvcCA/IDIxNDc0ODM2NDcgOiB0aGlzLm5leHRJbmRleCsrO1xuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBsYXllckNvbmZpZy5hbHdheXNPblRvcCA/ICduZi1sYXllci1tYW5hZ2VyLXRvcCcgOiAnbmYtbGF5ZXItbWFuYWdlcic7XG5cbiAgICAgICAgLy8gQ3JlYXRlIGEgdW5pcXVlIElEIGZvciB0cmFja2luZyB0aGlzIGxheWVyXG4gICAgICAgIGNvbnN0IGxheWVySWQgPSBgbmYtbGF5ZXItbWFuYWdlci0ke2N1cnJlbnRJbmRleH1gO1xuXG4gICAgICAgIGNvbnN0IG92ZXJsYXlDbGlja0hhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsYXllciA9IHRoaXMubGF5ZXJzLmZpbmQoKGwpID0+IGwuaWQgPT09IGxheWVySWQpO1xuICAgICAgICAgICAgaWYgKGxheWVyICYmIGxheWVyLmNvbmZpZy5jbG9zZU9uT3ZlcmxheUNsaWNrICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudW5tb3VudChsYXllcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgY2xvc2VGbiA9IChyZXNwPzogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLmxheWVycy5maW5kKChsKSA9PiBsLmlkID09PSBsYXllcklkKTtcbiAgICAgICAgICAgIGlmIChsYXllcikge1xuICAgICAgICAgICAgICAgIHRoaXMudW5tb3VudChsYXllciwgcmVzcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUmV0dXJuIGNhbGxiYWNrIHdoaWNoIHdpbGwgdHJpZ2dlciB0aGUgdW4tbW91bnQuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAoKTogUmVhY3RQb3J0YWwgfCBudWxsID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBbZGl2RWxlbWVudCwgc2V0RGl2RWxlbWVudF0gPSBSZWFjdC51c2VTdGF0ZTxIVE1MRGl2RWxlbWVudCB8IG51bGw+KG51bGwpO1xuXG4gICAgICAgICAgICAgICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBkaXYgZWxlbWVudCBvbmx5IG9uY2Ugd2hlbiBjb21wb25lbnQgbW91bnRzXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCdjbGFzcycsIGNsYXNzTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoJ2lkJywgbGF5ZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBBZGQgbGF5ZXIgdG8gc3RhY2tcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudExheWVyID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGxheWVySWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWc6IGxheWVyQ29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogZGl2LFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxheWVycy5wdXNoKGN1cnJlbnRMYXllcik7XG5cbiAgICAgICAgICAgICAgICAgICAgc2V0RGl2RWxlbWVudChkaXYpO1xuICAgICAgICAgICAgICAgICAgICAvLyBBZGQgZW50cnkgYW5pbWF0aW9uIGNsYXNzIGFmdGVyIGEgc2hvcnQgZGVsYXlcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCdjbGFzcycsICduZi1sYXllci1lbnRlcicpO1xuICAgICAgICAgICAgICAgICAgICB9LCAxMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gVHJhY2sgZWxlbWVudHMgbW9kaWZpZWQgZm9yIGFjY2Vzc2liaWxpdHlcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9kaWZpZWRFbGVtZW50czogQXJyYXk8e1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhZEFyaWFIaWRkZW46IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1ZhbHVlOiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9PiA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBsZXQgb3JpZ2luYWxCb2R5T3ZlcmZsb3c6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBsZXQgb3JpZ2luYWxCb2R5UG9zaXRpb246IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBsZXQgb3JpZ2luYWxCb2R5V2lkdGg6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBsZXQgb3JpZ2luYWxCb2R5VG9wOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNjcm9sbFkgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIEFwcGx5IGFyaWEtaGlkZGVuIHRvIHNpYmxpbmdzIGFuZCBib2R5IHNjcm9sbCBsb2NrIGZvciBvdmVybGF5IG1vZGFsc1xuICAgICAgICAgICAgICAgICAgICBpZiAobGF5ZXJDb25maWcub3ZlcmxheSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGlkZSBhbGwgYm9keSBjaGlsZHJlbiBleGNlcHQgdGhpcyBsYXllciBwb3J0YWwsIHNjcmlwdHMsIGFuZCBzdHlsZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvZHlDaGlsZHJlbiA9IEFycmF5LmZyb20oZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5Q2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkICE9PSBkaXYgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuY2xhc3NOYW1lICE9PSAnbmYtbGF5ZXItbWFuYWdlci10b3AnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnRhZ05hbWUgIT09ICdTQ1JJUFQnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnRhZ05hbWUgIT09ICdTVFlMRSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFkQXJpYUhpZGRlbiA9IGNoaWxkLmhhc0F0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IGNoaWxkLmdldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IHNldCBhcmlhLWhpZGRlbiBpZiBub3QgYWxyZWFkeSBoaWRkZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzVmFsdWUgIT09ICd0cnVlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllZEVsZW1lbnRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGNoaWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhZEFyaWFIaWRkZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByZXZlbnQgYm9keSBzY3JvbGwgb24gaU9TXG4gICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxZID0gd2luZG93LnNjcm9sbFk7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbEJvZHlPdmVyZmxvdyA9IGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbEJvZHlQb3NpdGlvbiA9IGRvY3VtZW50LmJvZHkuc3R5bGUucG9zaXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbEJvZHlXaWR0aCA9IGRvY3VtZW50LmJvZHkuc3R5bGUud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbEJvZHlUb3AgPSBkb2N1bWVudC5ib2R5LnN0eWxlLnRvcDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLndpZHRoID0gJzEwMCUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS50b3AgPSBgLSR7c2Nyb2xsWX1weGA7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBDbGVhbnVwIGZ1bmN0aW9uIC0gcmVtb3ZlIGRpdiB3aGVuIGNvbXBvbmVudCB1bm1vdW50c1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzdG9yZSBhcmlhLWhpZGRlbiBhdHRyaWJ1dGVzXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllZEVsZW1lbnRzLmZvckVhY2goKHsgZWxlbWVudCwgaGFkQXJpYUhpZGRlbiwgcHJldmlvdXNWYWx1ZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmJvZHkuY29udGFpbnMoZWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhZEFyaWFIaWRkZW4gJiYgcHJldmlvdXNWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgcHJldmlvdXNWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXN0b3JlIGJvZHkgc2Nyb2xsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGF5ZXJDb25maWcub3ZlcmxheSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSBvcmlnaW5hbEJvZHlPdmVyZmxvdyB8fCAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnBvc2l0aW9uID0gb3JpZ2luYWxCb2R5UG9zaXRpb24gfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS53aWR0aCA9IG9yaWdpbmFsQm9keVdpZHRoIHx8ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUudG9wID0gb3JpZ2luYWxCb2R5VG9wIHx8ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCBzY3JvbGxZKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmJvZHkuY29udGFpbnMoZGl2KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZGl2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBmcm9tIGxheWVycyBhcnJheVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmxheWVycy5maW5kSW5kZXgoKGxheWVyKSA9PiBsYXllci5pZCA9PT0gbGF5ZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXllcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9LCBbXSk7IC8vIEVtcHR5IGRlcGVuZGVuY3kgYXJyYXkgLSBydW4gb25seSBvbmNlXG5cbiAgICAgICAgICAgICAgICBpZiAoIWRpdkVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0RE9NLmNyZWF0ZVBvcnRhbChcbiAgICAgICAgICAgICAgICAgICAgPENvbnRhaW5lciBvbkNsaWNrPXtvdmVybGF5Q2xpY2tIYW5kbGVyfSB6SW5kZXg9e2N1cnJlbnRJbmRleH0gey4uLmxheWVyQ29uZmlnfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtsYXllckNvbmZpZy5jb21wb25lbnR9XG4gICAgICAgICAgICAgICAgICAgIDwvQ29udGFpbmVyPixcbiAgICAgICAgICAgICAgICAgICAgZGl2RWxlbWVudCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsb3NlRm4sXG4gICAgICAgIF07XG4gICAgfTtcbn1cblxuLy8gUmV0dXJuIHRoZSBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgdG8gY3JlYXRlIGEgU2luZ2xldG9uLlxuZXhwb3J0IGRlZmF1bHQgbmV3IExheWVyTWFuYWdlcigpO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWlFa0IifQ== */");
|
|
47
|
-
/** Key code for different keys. */ const KEY_CODES = {
|
|
46
|
+
`, "}");
|
|
47
|
+
/** Key code for different keys. */ const KEY_CODES$1 = {
|
|
48
48
|
ESC: 27
|
|
49
49
|
};
|
|
50
50
|
/**
|
|
@@ -82,13 +82,13 @@ import { getThemeValue, THEME_NAME } from './constants.js';
|
|
|
82
82
|
* const { LayerComponent } = this.state;
|
|
83
83
|
* return LayerComponent ? <LayerComponent /> : null;
|
|
84
84
|
* }
|
|
85
|
-
*/ class LayerManager {
|
|
85
|
+
*/ let LayerManager$1 = class LayerManager {
|
|
86
86
|
/**
|
|
87
87
|
* Constructor simply registers a event listener on body to
|
|
88
88
|
* react to esc key press.
|
|
89
89
|
*/ constructor(){
|
|
90
90
|
/** Layer stack */ this.layers = [];
|
|
91
|
-
/** z-index of the next layer */ this.nextIndex =
|
|
91
|
+
/** z-index of the next layer */ this.nextIndex = 0;
|
|
92
92
|
this.timeoutIds = new Map(); // Track timeouts
|
|
93
93
|
// Add cleanup method
|
|
94
94
|
this.destroy = ()=>{
|
|
@@ -124,14 +124,21 @@ import { getThemeValue, THEME_NAME } from './constants.js';
|
|
|
124
124
|
this.timeoutIds.delete(layer.id);
|
|
125
125
|
try {
|
|
126
126
|
layer.config.closeCallback?.(resp);
|
|
127
|
-
} catch (
|
|
128
|
-
|
|
127
|
+
} catch (err) {
|
|
128
|
+
if (err instanceof Error) {
|
|
129
|
+
console.warn(err.message);
|
|
130
|
+
} else {
|
|
131
|
+
console.warn(err);
|
|
132
|
+
}
|
|
129
133
|
}
|
|
130
134
|
// Clear reference to help GC
|
|
131
135
|
layer.config.component = null;
|
|
132
136
|
}, layer.config.exitDelay);
|
|
133
137
|
this.timeoutIds.set(layer.id, timeoutId);
|
|
134
138
|
};
|
|
139
|
+
this.Empty = ()=>{
|
|
140
|
+
return null;
|
|
141
|
+
};
|
|
135
142
|
/**
|
|
136
143
|
* Renders a layer.
|
|
137
144
|
* @param config
|
|
@@ -139,7 +146,7 @@ import { getThemeValue, THEME_NAME } from './constants.js';
|
|
|
139
146
|
// SSR guard
|
|
140
147
|
if (typeof document === 'undefined') {
|
|
141
148
|
return [
|
|
142
|
-
()
|
|
149
|
+
/*#__PURE__*/ React.forwardRef(this.Empty),
|
|
143
150
|
()=>{}
|
|
144
151
|
];
|
|
145
152
|
}
|
|
@@ -149,10 +156,12 @@ import { getThemeValue, THEME_NAME } from './constants.js';
|
|
|
149
156
|
...config
|
|
150
157
|
};
|
|
151
158
|
// Get the z-index for the new layer
|
|
152
|
-
const currentIndex = layerConfig.alwaysOnTop ? 2147483647 : this.nextIndex
|
|
159
|
+
const currentIndex = layerConfig.alwaysOnTop ? 2147483647 : 10000 + this.nextIndex;
|
|
153
160
|
const className = layerConfig.alwaysOnTop ? 'nf-layer-manager-top' : 'nf-layer-manager';
|
|
154
161
|
// Create a unique ID for tracking this layer
|
|
155
|
-
const layerId =
|
|
162
|
+
const layerId = `${className}-${currentIndex + this.nextIndex}`;
|
|
163
|
+
// Always increment for next layer
|
|
164
|
+
this.nextIndex += 1;
|
|
156
165
|
const overlayClickHandler = ()=>{
|
|
157
166
|
const layer = this.layers.find((l)=>l.id === layerId);
|
|
158
167
|
if (layer && layer.config.closeOnOverlayClick !== false) {
|
|
@@ -165,112 +174,115 @@ import { getThemeValue, THEME_NAME } from './constants.js';
|
|
|
165
174
|
this.unmount(layer, resp);
|
|
166
175
|
}
|
|
167
176
|
};
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
()=>{
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
//
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
child
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
previousValue
|
|
212
|
-
});
|
|
213
|
-
}
|
|
177
|
+
const LayerContainer = (props, ref)=>{
|
|
178
|
+
const [divElement, setDivElement] = React.useState(null);
|
|
179
|
+
useEffect(()=>{
|
|
180
|
+
// Create the div element only once when component mounts
|
|
181
|
+
const div = document.createElement('div');
|
|
182
|
+
div.setAttribute('class', className);
|
|
183
|
+
div.setAttribute('id', layerId);
|
|
184
|
+
document.body.appendChild(div);
|
|
185
|
+
// Add layer to stack
|
|
186
|
+
const currentLayer = {
|
|
187
|
+
id: layerId,
|
|
188
|
+
config: layerConfig,
|
|
189
|
+
element: div
|
|
190
|
+
};
|
|
191
|
+
this.layers.push(currentLayer);
|
|
192
|
+
setDivElement(div);
|
|
193
|
+
// Add entry animation class after a short delay
|
|
194
|
+
setTimeout(()=>{
|
|
195
|
+
div.setAttribute('class', 'nf-layer-enter');
|
|
196
|
+
}, 10);
|
|
197
|
+
// Track elements modified for accessibility
|
|
198
|
+
const modifiedElements = [];
|
|
199
|
+
let originalBodyOverflow = null;
|
|
200
|
+
let originalBodyPosition = null;
|
|
201
|
+
let originalBodyWidth = null;
|
|
202
|
+
let originalBodyTop = null;
|
|
203
|
+
let scrollY = 0;
|
|
204
|
+
// Apply aria-hidden to siblings and body scroll lock for overlay modals
|
|
205
|
+
if (layerConfig.overlay) {
|
|
206
|
+
// Hide all body children except this layer portal, scripts, and styles
|
|
207
|
+
const bodyChildren = Array.from(document.body.children);
|
|
208
|
+
bodyChildren.forEach((child)=>{
|
|
209
|
+
if (child !== div && child.className !== 'nf-layer-manager-top' && child.tagName !== 'SCRIPT' && child.tagName !== 'STYLE') {
|
|
210
|
+
const hadAriaHidden = child.hasAttribute('aria-hidden');
|
|
211
|
+
const previousValue = child.getAttribute('aria-hidden');
|
|
212
|
+
// Only set aria-hidden if not already hidden
|
|
213
|
+
if (previousValue !== 'true') {
|
|
214
|
+
child.setAttribute('aria-hidden', 'true');
|
|
215
|
+
modifiedElements.push({
|
|
216
|
+
element: child,
|
|
217
|
+
hadAriaHidden,
|
|
218
|
+
previousValue
|
|
219
|
+
});
|
|
214
220
|
}
|
|
215
|
-
});
|
|
216
|
-
// Prevent body scroll on iOS
|
|
217
|
-
scrollY = window.scrollY;
|
|
218
|
-
originalBodyOverflow = document.body.style.overflow;
|
|
219
|
-
originalBodyPosition = document.body.style.position;
|
|
220
|
-
originalBodyWidth = document.body.style.width;
|
|
221
|
-
originalBodyTop = document.body.style.top;
|
|
222
|
-
document.body.style.overflow = 'hidden';
|
|
223
|
-
document.body.style.position = 'fixed';
|
|
224
|
-
document.body.style.width = '100%';
|
|
225
|
-
document.body.style.top = `-${scrollY}px`;
|
|
226
|
-
}
|
|
227
|
-
// Cleanup function - remove div when component unmounts
|
|
228
|
-
return ()=>{
|
|
229
|
-
// Restore aria-hidden attributes
|
|
230
|
-
modifiedElements.forEach(({ element, hadAriaHidden, previousValue })=>{
|
|
231
|
-
if (document.body.contains(element)) {
|
|
232
|
-
if (hadAriaHidden && previousValue !== null) {
|
|
233
|
-
element.setAttribute('aria-hidden', previousValue);
|
|
234
|
-
} else {
|
|
235
|
-
element.removeAttribute('aria-hidden');
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
});
|
|
239
|
-
// Restore body scroll
|
|
240
|
-
if (layerConfig.overlay) {
|
|
241
|
-
document.body.style.overflow = originalBodyOverflow || '';
|
|
242
|
-
document.body.style.position = originalBodyPosition || '';
|
|
243
|
-
document.body.style.width = originalBodyWidth || '';
|
|
244
|
-
document.body.style.top = originalBodyTop || '';
|
|
245
|
-
window.scrollTo(0, scrollY);
|
|
246
|
-
}
|
|
247
|
-
if (document.body.contains(div)) {
|
|
248
|
-
document.body.removeChild(div);
|
|
249
221
|
}
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
222
|
+
});
|
|
223
|
+
// Prevent body scroll on iOS
|
|
224
|
+
scrollY = window.scrollY;
|
|
225
|
+
originalBodyOverflow = document.body.style.overflow;
|
|
226
|
+
originalBodyPosition = document.body.style.position;
|
|
227
|
+
originalBodyWidth = document.body.style.width;
|
|
228
|
+
originalBodyTop = document.body.style.top;
|
|
229
|
+
document.body.style.overflow = 'hidden';
|
|
230
|
+
document.body.style.position = 'fixed';
|
|
231
|
+
document.body.style.width = '100%';
|
|
232
|
+
document.body.style.top = `-${scrollY}px`;
|
|
259
233
|
}
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
234
|
+
// Cleanup function - remove div when component unmounts
|
|
235
|
+
return ()=>{
|
|
236
|
+
// Restore aria-hidden attributes
|
|
237
|
+
modifiedElements.forEach(({ element, hadAriaHidden, previousValue })=>{
|
|
238
|
+
if (document.body.contains(element)) {
|
|
239
|
+
if (hadAriaHidden && previousValue !== null) {
|
|
240
|
+
element.setAttribute('aria-hidden', previousValue);
|
|
241
|
+
} else {
|
|
242
|
+
element.removeAttribute('aria-hidden');
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
// Restore body scroll
|
|
247
|
+
if (layerConfig.overlay) {
|
|
248
|
+
document.body.style.overflow = originalBodyOverflow || '';
|
|
249
|
+
document.body.style.position = originalBodyPosition || '';
|
|
250
|
+
document.body.style.width = originalBodyWidth || '';
|
|
251
|
+
document.body.style.top = originalBodyTop || '';
|
|
252
|
+
window.scrollTo(0, scrollY);
|
|
253
|
+
}
|
|
254
|
+
if (document.body.contains(div)) {
|
|
255
|
+
document.body.removeChild(div);
|
|
256
|
+
}
|
|
257
|
+
// Remove from layers array
|
|
258
|
+
const index = this.layers.findIndex((layer)=>layer.id === layerId);
|
|
259
|
+
if (index !== -1) {
|
|
260
|
+
this.layers.splice(index, 1);
|
|
261
|
+
}
|
|
262
|
+
};
|
|
263
|
+
}, []); // Empty dependency array - run only once
|
|
264
|
+
if (!divElement) {
|
|
265
|
+
return null;
|
|
266
|
+
}
|
|
267
|
+
return /*#__PURE__*/ createPortal(/*#__PURE__*/ jsx(Container$5, {
|
|
268
|
+
...props,
|
|
269
|
+
ref: ref,
|
|
270
|
+
onClick: overlayClickHandler,
|
|
271
|
+
zIndex: currentIndex,
|
|
272
|
+
...layerConfig,
|
|
273
|
+
children: layerConfig.component
|
|
274
|
+
}), divElement);
|
|
275
|
+
};
|
|
276
|
+
// Return callback which will trigger the un-mount.
|
|
277
|
+
return [
|
|
278
|
+
/*#__PURE__*/ React.forwardRef(LayerContainer),
|
|
267
279
|
closeFn
|
|
268
280
|
];
|
|
269
281
|
};
|
|
270
282
|
if (typeof document !== 'undefined') {
|
|
271
283
|
// Store handler reference for cleanup
|
|
272
284
|
this.keyupHandler = (e)=>{
|
|
273
|
-
if (this.layers.length && e.keyCode === KEY_CODES.ESC) {
|
|
285
|
+
if (this.layers.length && e.keyCode === KEY_CODES$1.ESC) {
|
|
274
286
|
const lastLayer = this.layers.slice(-1)[0];
|
|
275
287
|
if (lastLayer.config.closeOnEsc !== false) {
|
|
276
288
|
this.unmount(lastLayer);
|
|
@@ -280,8 +292,9 @@ import { getThemeValue, THEME_NAME } from './constants.js';
|
|
|
280
292
|
document.body.addEventListener('keyup', this.keyupHandler);
|
|
281
293
|
}
|
|
282
294
|
}
|
|
283
|
-
}
|
|
295
|
+
};
|
|
284
296
|
// Return the instance of the class to create a Singleton.
|
|
285
|
-
var LayerManager
|
|
297
|
+
var LayerManager = new LayerManager$1();
|
|
286
298
|
|
|
287
|
-
export { LAYER_POSITION, LayerManager
|
|
299
|
+
export { LAYER_POSITION, LayerManager as default };
|
|
300
|
+
//# sourceMappingURL=LayerManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LayerManager.js","sources":["../../src/shared/LayerManager.tsx"],"sourcesContent":["import React, { ForwardRefExoticComponent, RefAttributes, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport styled from '@emotion/styled';\nimport { getThemeValue, THEME_NAME } from './constants';\n\n/** Enums for layer position on screen. */\nexport enum LAYER_POSITION {\n TOP_LEFT,\n TOP_CENTER,\n TOP_RIGHT,\n BOTTOM_LEFT,\n BOTTOM_CENTER,\n BOTTOM_RIGHT,\n DIALOG,\n}\n\ninterface LayerConfig {\n /** Show an overlay */\n overlay?: boolean;\n /** Element to render inside the layer. */\n component: React.JSX.Element | null;\n /** Position of the layer */\n position?: LAYER_POSITION;\n /** Delay for exit */\n exitDelay?: number;\n /** Close layer on `esc` key press. */\n closeOnEsc?: boolean;\n /** Close layer overlay is clicked. */\n closeOnOverlayClick?: boolean;\n /** Callback called when modal closes */\n closeCallback?: (resp?: unknown) => void;\n /** Layer is created with max z-index */\n alwaysOnTop?: boolean;\n}\n\n/** Default value of config */\nconst defaultConfig: LayerConfig = {\n closeOnEsc: true,\n overlay: false,\n position: LAYER_POSITION.TOP_LEFT,\n component: null,\n exitDelay: 0,\n closeOnOverlayClick: true,\n alwaysOnTop: false,\n};\n\n/** Metadata of each layer */\ninterface Layer {\n id: string;\n config: LayerConfig;\n element: HTMLDivElement;\n}\n\n/** Styles for each position */\nconst POSITION_STYLE: Record<LAYER_POSITION, string> = {\n [LAYER_POSITION.TOP_LEFT]: 'top: 0; left: 0;',\n [LAYER_POSITION.TOP_CENTER]: 'top: 0; left: 50%; justify-content: center;',\n [LAYER_POSITION.TOP_RIGHT]: 'top: 0; right: 0; justify-content: flex-end;',\n [LAYER_POSITION.BOTTOM_LEFT]: 'bottom: 0; left: 0;',\n [LAYER_POSITION.BOTTOM_CENTER]: 'bottom: 0; left: 50%; justify-content: center;',\n [LAYER_POSITION.BOTTOM_RIGHT]: 'bottom: 0; right: 0; justify-content: flex-end;',\n [LAYER_POSITION.DIALOG]: 'top: 0; left: 0; justify-content: center; align-items: center;',\n};\n\n/** Layer container component. */\nconst Container = styled.div<LayerConfig & { zIndex: number }>`\n position: fixed;\n display: flex;\n opacity: 0;\n transition: opacity 0.3s ease;\n ${(props) => POSITION_STYLE[props.position as LAYER_POSITION]}\n ${(props) =>\n props.overlay &&\n `\n width: 100%;\n height: 100vh;\n background-color: ${getThemeValue(THEME_NAME.BACKDROP_COLOR)};\n backdrop-filter: blur(0px);\n pointer-events: all;\n `}\n z-index: ${(props) => props.zIndex};\n\n .nf-layer-enter & {\n opacity: 1;\n ${(props) =>\n props.overlay &&\n `\n backdrop-filter: blur(3px);\n `}\n }\n`;\n\n/** Key code for different keys. */\nconst KEY_CODES = {\n ESC: 27,\n};\n\n/**\n * This is a shared helper class which manages the z-index of each layer.\n * If a component needs to be rendered in a different layer then this class\n * should be used. It internally maintains the stack of opened layer and each\n * `renderLayer` call will push a new layer in stack.\n *\n * This way we need not worry about the z-index and can freely keep on creating\n * new layers. The staring layer z-index is 10000. Leaving enough z-index for the\n * user if they desires so.\n *\n * @important Usage Pattern\n * To avoid creating duplicate layers (especially in React Strict Mode or Next.js),\n * always call `renderLayer` only once - either in a lifecycle method (like `componentDidUpdate`)\n * or in an imperative method (like `open()`).\n *\n * @example\n * // ❌ Don't call renderLayer in render() method\n * render() {\n * if (this.state.show) {\n * const [Component, closeFn] = LayerManager.renderLayer({ ... }); // Creates new layer on every render\n * return <Component />;\n * }\n * }\n *\n * @example\n * // ✅ Do call renderLayer once in a method and store the component\n * open() {\n * const [Component, closeFn] = LayerManager.renderLayer({ ... });\n * this.setState({ LayerComponent: Component });\n * }\n *\n * render() {\n * const { LayerComponent } = this.state;\n * return LayerComponent ? <LayerComponent /> : null;\n * }\n */\nclass LayerManager {\n /** Layer stack */\n private layers: Layer[] = [];\n /** z-index of the next layer */\n private nextIndex = 0;\n private keyupHandler!: (e: KeyboardEvent) => void;\n private timeoutIds = new Map<string, number>(); // Track timeouts\n\n /**\n * Constructor simply registers a event listener on body to\n * react to esc key press.\n */\n constructor() {\n if (typeof document !== 'undefined') {\n // Store handler reference for cleanup\n this.keyupHandler = (e) => {\n if (this.layers.length && e.keyCode === KEY_CODES.ESC) {\n const lastLayer = this.layers.slice(-1)[0];\n if (lastLayer.config.closeOnEsc !== false) {\n this.unmount(lastLayer);\n }\n }\n };\n document.body.addEventListener('keyup', this.keyupHandler);\n }\n }\n\n // Add cleanup method\n public destroy = () => {\n if (typeof document !== 'undefined' && this.keyupHandler) {\n document.body.removeEventListener('keyup', this.keyupHandler);\n }\n // Clear all pending timeouts\n this.timeoutIds.forEach((id) => clearTimeout(id));\n this.timeoutIds.clear();\n // Clean up remaining layers\n this.layers.forEach((layer) => {\n if (document.body.contains(layer.element)) {\n document.body.removeChild(layer.element);\n }\n });\n this.layers = [];\n };\n\n /**\n * Un-mounts a layer.\n *\n * It first adds a class 'nf-layer-exit' and then un-mounts the\n * layer after the `exitDelay` mentioned in the layer config.\n * This class will help component in triggering the entry animation.\n *\n * @param layer\n */\n private unmount = (layer: Layer, resp?: unknown) => {\n layer.element.setAttribute('class', 'nf-layer-exit');\n const index = this.layers.findIndex((item) => item === layer);\n if (index !== -1) {\n this.layers.splice(index, 1);\n }\n\n const timeoutId = window.setTimeout(() => {\n this.timeoutIds.delete(layer.id);\n try {\n layer.config.closeCallback?.(resp);\n } catch (err) {\n if (err instanceof Error) {\n console.warn(err.message);\n } else {\n console.warn(err);\n }\n }\n // Clear reference to help GC\n layer.config.component = null;\n }, layer.config.exitDelay);\n\n this.timeoutIds.set(layer.id, timeoutId);\n };\n\n private Empty = () => {\n return null;\n };\n\n /**\n * Renders a layer.\n * @param config\n */\n public renderLayer = (\n config: LayerConfig,\n ): [ForwardRefExoticComponent<RefAttributes<HTMLDivElement>>, (resp?: unknown) => void] => {\n // SSR guard\n if (typeof document === 'undefined') {\n return [React.forwardRef(this.Empty), () => {}];\n }\n\n // Merge default config with the provided config.\n const layerConfig = {\n ...defaultConfig,\n ...config,\n };\n\n // Get the z-index for the new layer\n const currentIndex = layerConfig.alwaysOnTop ? 2147483647 : 10000 + this.nextIndex;\n const className = layerConfig.alwaysOnTop ? 'nf-layer-manager-top' : 'nf-layer-manager';\n\n // Create a unique ID for tracking this layer\n const layerId = `${className}-${currentIndex + this.nextIndex}`;\n\n // Always increment for next layer\n this.nextIndex += 1;\n\n const overlayClickHandler = () => {\n const layer = this.layers.find((l) => l.id === layerId);\n if (layer && layer.config.closeOnOverlayClick !== false) {\n this.unmount(layer);\n }\n };\n\n const closeFn = (resp?: unknown) => {\n const layer = this.layers.find((l) => l.id === layerId);\n if (layer) {\n this.unmount(layer, resp);\n }\n };\n\n const LayerContainer = (\n props: React.HTMLAttributes<HTMLDivElement>,\n ref: React.Ref<HTMLDivElement>,\n ) => {\n const [divElement, setDivElement] = React.useState<HTMLDivElement | null>(null);\n\n useEffect(() => {\n // Create the div element only once when component mounts\n const div = document.createElement('div');\n div.setAttribute('class', className);\n div.setAttribute('id', layerId);\n document.body.appendChild(div);\n\n // Add layer to stack\n const currentLayer = {\n id: layerId,\n config: layerConfig,\n element: div,\n };\n this.layers.push(currentLayer);\n\n setDivElement(div);\n // Add entry animation class after a short delay\n setTimeout(() => {\n div.setAttribute('class', 'nf-layer-enter');\n }, 10);\n\n // Track elements modified for accessibility\n const modifiedElements: Array<{\n element: Element;\n hadAriaHidden: boolean;\n previousValue: string | null;\n }> = [];\n let originalBodyOverflow: string | null = null;\n let originalBodyPosition: string | null = null;\n let originalBodyWidth: string | null = null;\n let originalBodyTop: string | null = null;\n let scrollY = 0;\n\n // Apply aria-hidden to siblings and body scroll lock for overlay modals\n if (layerConfig.overlay) {\n // Hide all body children except this layer portal, scripts, and styles\n const bodyChildren = Array.from(document.body.children);\n bodyChildren.forEach((child) => {\n if (\n child !== div &&\n child.className !== 'nf-layer-manager-top' &&\n child.tagName !== 'SCRIPT' &&\n child.tagName !== 'STYLE'\n ) {\n const hadAriaHidden = child.hasAttribute('aria-hidden');\n const previousValue = child.getAttribute('aria-hidden');\n\n // Only set aria-hidden if not already hidden\n if (previousValue !== 'true') {\n child.setAttribute('aria-hidden', 'true');\n modifiedElements.push({\n element: child,\n hadAriaHidden,\n previousValue,\n });\n }\n }\n });\n\n // Prevent body scroll on iOS\n scrollY = window.scrollY;\n originalBodyOverflow = document.body.style.overflow;\n originalBodyPosition = document.body.style.position;\n originalBodyWidth = document.body.style.width;\n originalBodyTop = document.body.style.top;\n\n document.body.style.overflow = 'hidden';\n document.body.style.position = 'fixed';\n document.body.style.width = '100%';\n document.body.style.top = `-${scrollY}px`;\n }\n\n // Cleanup function - remove div when component unmounts\n return () => {\n // Restore aria-hidden attributes\n modifiedElements.forEach(({ element, hadAriaHidden, previousValue }) => {\n if (document.body.contains(element)) {\n if (hadAriaHidden && previousValue !== null) {\n element.setAttribute('aria-hidden', previousValue);\n } else {\n element.removeAttribute('aria-hidden');\n }\n }\n });\n\n // Restore body scroll\n if (layerConfig.overlay) {\n document.body.style.overflow = originalBodyOverflow || '';\n document.body.style.position = originalBodyPosition || '';\n document.body.style.width = originalBodyWidth || '';\n document.body.style.top = originalBodyTop || '';\n window.scrollTo(0, scrollY);\n }\n\n if (document.body.contains(div)) {\n document.body.removeChild(div);\n }\n // Remove from layers array\n const index = this.layers.findIndex((layer) => layer.id === layerId);\n if (index !== -1) {\n this.layers.splice(index, 1);\n }\n };\n }, []); // Empty dependency array - run only once\n\n if (!divElement) {\n return null;\n }\n\n return createPortal(\n <Container\n {...props}\n ref={ref}\n onClick={overlayClickHandler}\n zIndex={currentIndex}\n {...layerConfig}\n >\n {layerConfig.component}\n </Container>,\n divElement,\n );\n };\n\n // Return callback which will trigger the un-mount.\n return [\n React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(LayerContainer),\n closeFn,\n ];\n };\n}\n\n// Return the instance of the class to create a Singleton.\nexport default new LayerManager();\n"],"names":["LAYER_POSITION","defaultConfig","closeOnEsc","overlay","position","component","exitDelay","closeOnOverlayClick","alwaysOnTop","POSITION_STYLE","Container","styled","props","getThemeValue","THEME_NAME","BACKDROP_COLOR","zIndex","KEY_CODES","ESC","LayerManager","layers","nextIndex","timeoutIds","Map","destroy","document","keyupHandler","body","removeEventListener","forEach","id","clearTimeout","clear","layer","contains","element","removeChild","unmount","resp","setAttribute","index","findIndex","item","splice","timeoutId","window","setTimeout","delete","config","closeCallback","err","Error","console","warn","message","set","Empty","renderLayer","React","forwardRef","layerConfig","currentIndex","className","layerId","overlayClickHandler","find","l","closeFn","LayerContainer","ref","divElement","setDivElement","useState","useEffect","div","createElement","appendChild","currentLayer","push","modifiedElements","originalBodyOverflow","originalBodyPosition","originalBodyWidth","originalBodyTop","scrollY","bodyChildren","Array","from","children","child","tagName","hadAriaHidden","hasAttribute","previousValue","getAttribute","style","overflow","width","top","removeAttribute","scrollTo","createPortal","_jsx","onClick","e","length","keyCode","lastLayer","slice","addEventListener"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sources":["../../src/shared/constants.ts"],"sourcesContent":["export enum THEME_CONSTANTS {\n PRIMARY = '#1f7ac5',\n PRIMARY_LIGHT = '#64baff',\n PRIMARY_LIGHTER = '#cfe9ff',\n BACKDROP_COLOR = '#2681da80',\n INFO = '#1f7ac5ff',\n INFO_LIGHT = '#64baffff',\n SUCCESS = '#1a835f',\n SUCCESS_LIGHT = '#80eac6',\n WARNING = '#916b01',\n WARNING_LIGHT = '#ffba00',\n ERROR = '#bb2828',\n ERROR_LIGHT = '#f1a5a5',\n BORDER_COLOR = '#555555',\n TOAST = '#5f5f5f',\n TOOLTIP_COLOR = 'rgba(0,0,0,0.6)',\n BORDER_LIGHT_COLOR = '#eeeeee',\n BACKGROUND = '#ffffff',\n DISABLED_BACKGROUND = '#fafafa',\n DISABLED_BORDER = '#aaa',\n LIGHT_GREY = '#ccc',\n DISABLED = '#737373',\n TEXT_COLOR_LIGHT = '#fff',\n TEXT_COLOR_DARK = '#000',\n SHADOW = '0px 1px 3px 0px rgba(0,0,0,0.1), 0px 1px 2px 0px rgba(0,0,0,0.06)',\n HOVER_SHADOW = '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',\n MODAL_SHADOW = '0px 8px 17px 2px rgba(0,0,0,0.14), 0px 3px 14px 2px rgba(0,0,0,0.12), 0px 5px 5px -3px rgba(0,0,0,0.2)',\n}\n\nexport enum THEME_NAME {\n PRIMARY = '--nfui-primary',\n PRIMARY_LIGHT = '--nfui-primary-light',\n PRIMARY_LIGHTER = '--nfui-primary-lighter',\n INFO = '--nfui-info',\n INFO_LIGHT = '--nfui-info-light',\n SUCCESS = '--nfui-success',\n SUCCESS_LIGHT = '--nfui-success-light',\n WARNING = '--nfui-warning',\n WARNING_LIGHT = '--nfui-warning-light',\n ERROR = '--nfui-error',\n ERROR_LIGHT = '--nfui-error-light',\n BORDER_COLOR = '--nfui-border-color',\n TOAST = '--nfui-toast',\n TOOLTIP_COLOR = '--nfui-tooltip-color',\n BORDER_LIGHT_COLOR = '--nfui-border-light-color',\n BACKGROUND = '--nfui-background',\n DISABLED_BACKGROUND = '--nfui-disabled-background',\n DISABLED_BORDER = '--nfui-disabled-border',\n LIGHT_GREY = '--nfui-light-grey',\n DISABLED = '--nfui-disabled',\n TEXT_COLOR_LIGHT = '--nfui-text-color-light',\n TEXT_COLOR_DARK = '--nfui-text-color-dark',\n SHADOW = '--nfui-shadow',\n HOVER_SHADOW = '--nfui-hover-shadow',\n MODAL_SHADOW = '--nfui-modal-shadow',\n BACKDROP_COLOR = '--nfui-backdrop-color',\n}\n\nexport const themeNameMap: Record<THEME_NAME, THEME_CONSTANTS> = {\n [THEME_NAME.PRIMARY]: THEME_CONSTANTS.PRIMARY,\n [THEME_NAME.PRIMARY_LIGHT]: THEME_CONSTANTS.PRIMARY_LIGHT,\n [THEME_NAME.PRIMARY_LIGHTER]: THEME_CONSTANTS.PRIMARY_LIGHTER,\n [THEME_NAME.INFO]: THEME_CONSTANTS.INFO,\n [THEME_NAME.INFO_LIGHT]: THEME_CONSTANTS.INFO_LIGHT,\n [THEME_NAME.SUCCESS]: THEME_CONSTANTS.SUCCESS,\n [THEME_NAME.SUCCESS_LIGHT]: THEME_CONSTANTS.SUCCESS_LIGHT,\n [THEME_NAME.WARNING]: THEME_CONSTANTS.WARNING,\n [THEME_NAME.WARNING_LIGHT]: THEME_CONSTANTS.WARNING_LIGHT,\n [THEME_NAME.ERROR]: THEME_CONSTANTS.ERROR,\n [THEME_NAME.ERROR_LIGHT]: THEME_CONSTANTS.ERROR_LIGHT,\n [THEME_NAME.BACKDROP_COLOR]: THEME_CONSTANTS.BACKDROP_COLOR,\n [THEME_NAME.BORDER_COLOR]: THEME_CONSTANTS.BORDER_COLOR,\n [THEME_NAME.TOAST]: THEME_CONSTANTS.TOAST,\n [THEME_NAME.TOOLTIP_COLOR]: THEME_CONSTANTS.TOOLTIP_COLOR,\n [THEME_NAME.BORDER_LIGHT_COLOR]: THEME_CONSTANTS.BORDER_LIGHT_COLOR,\n [THEME_NAME.BACKGROUND]: THEME_CONSTANTS.BACKGROUND,\n [THEME_NAME.DISABLED_BACKGROUND]: THEME_CONSTANTS.DISABLED_BACKGROUND,\n [THEME_NAME.DISABLED_BORDER]: THEME_CONSTANTS.DISABLED_BORDER,\n [THEME_NAME.LIGHT_GREY]: THEME_CONSTANTS.LIGHT_GREY,\n [THEME_NAME.DISABLED]: THEME_CONSTANTS.DISABLED,\n [THEME_NAME.TEXT_COLOR_LIGHT]: THEME_CONSTANTS.TEXT_COLOR_LIGHT,\n [THEME_NAME.TEXT_COLOR_DARK]: THEME_CONSTANTS.TEXT_COLOR_DARK,\n [THEME_NAME.SHADOW]: THEME_CONSTANTS.SHADOW,\n [THEME_NAME.HOVER_SHADOW]: THEME_CONSTANTS.HOVER_SHADOW,\n [THEME_NAME.MODAL_SHADOW]: THEME_CONSTANTS.MODAL_SHADOW,\n};\n\nexport const getThemeValue = (key: THEME_NAME) => {\n return `var(${key}, ${themeNameMap[key]})`;\n};\n"],"names":["THEME_NAME","themeNameMap","getThemeValue","key"],"mappings":"AA6BO,IAAA,UAAKA,iBAAAA,SAAAA,UAAAA,EAAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAAA,IAAAA,OAAAA,UAAAA;AA2BX,CAAA,CAAA,EAAA;MAEYC,YAAAA,GAAoD;IAC7D,CAAA,gBAAA,GAAoB,SAAA;IACpB,CAAA,sBAAA,GAA0B,SAAA;IAC1B,CAAA,wBAAA,GAA4B,SAAA;IAC5B,CAAA,aAAA,GAAiB,WAAA;IACjB,CAAA,mBAAA,GAAuB,WAAA;IACvB,CAAA,gBAAA,GAAoB,SAAA;IACpB,CAAA,sBAAA,GAA0B,SAAA;IAC1B,CAAA,gBAAA,GAAoB,SAAA;IACpB,CAAA,sBAAA,GAA0B,SAAA;IAC1B,CAAA,cAAA,GAAkB,SAAA;IAClB,CAAA,oBAAA,GAAwB,SAAA;IACxB,CAAA,uBAAA,GAA2B,WAAA;IAC3B,CAAA,qBAAA,GAAyB,SAAA;IACzB,CAAA,cAAA,GAAkB,SAAA;IAClB,CAAA,sBAAA,GAA0B,iBAAA;IAC1B,CAAA,2BAAA,GAA+B,SAAA;IAC/B,CAAA,mBAAA,GAAuB,SAAA;IACvB,CAAA,4BAAA,GAAgC,SAAA;IAChC,CAAA,wBAAA,GAA4B,MAAA;IAC5B,CAAA,mBAAA,GAAuB,MAAA;IACvB,CAAA,iBAAA,GAAqB,SAAA;IACrB,CAAA,yBAAA,GAA6B,MAAA;IAC7B,CAAA,wBAAA,GAA4B,MAAA;IAC5B,CAAA,eAAA,GAAmB,mEAAA;IACnB,CAAA,qBAAA,GAAyB,uEAAA;IACzB,CAAA,qBAAA,GAAyB;AAC7B;AAEO,MAAMC,gBAAgB,CAACC,GAAAA,GAAAA;IAC1B,OAAO,CAAC,IAAI,EAAEA,GAAAA,CAAI,EAAE,EAAEF,YAAY,CAACE,GAAAA,CAAI,CAAC,CAAC,CAAC;AAC9C;;;;"}
|
package/lib-esm/shared/styles.js
CHANGED
|
@@ -4,18 +4,19 @@ import { getThemeValue, THEME_NAME } from './constants.js';
|
|
|
4
4
|
const Ellipsis = /*#__PURE__*/ styled("span", {
|
|
5
5
|
target: "e126ntv90",
|
|
6
6
|
label: "Ellipsis"
|
|
7
|
-
})("white-space:nowrap;text-overflow:ellipsis;overflow:hidden;flex:1;"
|
|
8
|
-
const Header = /*#__PURE__*/ styled("h1", {
|
|
7
|
+
})("white-space:nowrap;text-overflow:ellipsis;overflow:hidden;flex:1;");
|
|
8
|
+
const Header$1 = /*#__PURE__*/ styled("h1", {
|
|
9
9
|
target: "e126ntv91",
|
|
10
10
|
label: "Header"
|
|
11
|
-
})("padding:10px 15px;line-height:26px;border-bottom:1px solid ", getThemeValue(THEME_NAME.BORDER_LIGHT_COLOR), ";font-size:16px;font-weight:bold;"
|
|
12
|
-
const Body = /*#__PURE__*/ styled("div", {
|
|
11
|
+
})("padding:10px 15px;line-height:26px;border-bottom:1px solid ", getThemeValue(THEME_NAME.BORDER_LIGHT_COLOR), ";font-size:16px;font-weight:bold;");
|
|
12
|
+
const Body$1 = /*#__PURE__*/ styled("div", {
|
|
13
13
|
target: "e126ntv92",
|
|
14
14
|
label: "Body"
|
|
15
|
-
})("padding:20px 15px;flex:1;overflow:auto;"
|
|
16
|
-
const Footer = /*#__PURE__*/ styled("div", {
|
|
15
|
+
})("padding:20px 15px;flex:1;overflow:auto;");
|
|
16
|
+
const Footer$1 = /*#__PURE__*/ styled("div", {
|
|
17
17
|
target: "e126ntv93",
|
|
18
18
|
label: "Footer"
|
|
19
|
-
})("padding:10px 15px;border-top:1px solid ", getThemeValue(THEME_NAME.BORDER_LIGHT_COLOR), ";display:flex;justify-content:flex-end;"
|
|
19
|
+
})("padding:10px 15px;border-top:1px solid ", getThemeValue(THEME_NAME.BORDER_LIGHT_COLOR), ";display:flex;justify-content:flex-end;");
|
|
20
20
|
|
|
21
|
-
export { Body, Ellipsis, Footer, Header };
|
|
21
|
+
export { Body$1 as Body, Ellipsis, Footer$1 as Footer, Header$1 as Header };
|
|
22
|
+
//# sourceMappingURL=styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.js","sources":["../../src/shared/styles.ts"],"sourcesContent":["import styled from '@emotion/styled';\nimport { getThemeValue, THEME_NAME } from './constants';\n\nexport const Ellipsis = styled.span`\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n flex: 1;\n`;\n\nexport const Header = styled.h1`\n padding: 10px 15px;\n line-height: 26px;\n border-bottom: 1px solid ${getThemeValue(THEME_NAME.BORDER_LIGHT_COLOR)};\n font-size: 16px;\n font-weight: bold;\n`;\n\nexport const Body = styled.div`\n padding: 20px 15px;\n flex: 1;\n overflow: auto;\n`;\n\nexport const Footer = styled.div`\n padding: 10px 15px;\n border-top: 1px solid ${getThemeValue(THEME_NAME.BORDER_LIGHT_COLOR)};\n display: flex;\n justify-content: flex-end;\n`;\n"],"names":["Ellipsis","styled","Header","getThemeValue","THEME_NAME","BORDER_LIGHT_COLOR","Body","Footer"],"mappings":";;;MAGaA,QAAAA,iBAAWC,MAAAA,CAAAA,MAAAA,EAAAA;;;AAKtB,CAAA,CAAA,CAAA,mEAAA;MAEWC,QAAAA,iBAASD,MAAAA,CAAAA,IAAAA,EAAAA;;;kEAGSE,aAAAA,CAAcC,UAAAA,CAAWC,kBAAkB,CAAA,EAAA,mCAAA;MAK7DC,MAAAA,iBAAOL,MAAAA,CAAAA,KAAAA,EAAAA;;;AAIlB,CAAA,CAAA,CAAA,yCAAA;MAEWM,QAAAA,iBAASN,MAAAA,CAAAA,KAAAA,EAAAA;;;8CAEME,aAAAA,CAAcC,UAAAA,CAAWC,kBAAkB,CAAA,EAAA,yCAAA;;;;"}
|