@elliemae/ds-app-picker 3.17.0-next.0 → 3.17.0-next.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/AppPickerImpl.js +10 -9
- package/dist/cjs/AppPickerImpl.js.map +2 -2
- package/dist/cjs/DSAppPicker.js +26 -24
- package/dist/cjs/DSAppPicker.js.map +2 -2
- package/dist/cjs/{types/AppPickerTypes.js → DSAppPickerDefinitions.js} +27 -3
- package/dist/cjs/DSAppPickerDefinitions.js.map +7 -0
- package/dist/cjs/hooks/useKeepTrackButtons.js +1 -1
- package/dist/cjs/hooks/useKeepTrackButtons.js.map +2 -2
- package/dist/cjs/index.js +9 -4
- package/dist/cjs/index.js.map +3 -3
- package/dist/cjs/{propTypes.js → react-desc-prop-types.js} +16 -7
- package/dist/cjs/react-desc-prop-types.js.map +7 -0
- package/dist/cjs/styles.js +6 -5
- package/dist/cjs/styles.js.map +2 -2
- package/dist/esm/AppPickerImpl.js +10 -9
- package/dist/esm/AppPickerImpl.js.map +2 -2
- package/dist/esm/DSAppPicker.js +27 -25
- package/dist/esm/DSAppPicker.js.map +2 -2
- package/dist/esm/DSAppPickerDefinitions.js +22 -0
- package/dist/esm/DSAppPickerDefinitions.js.map +7 -0
- package/dist/esm/hooks/useKeepTrackButtons.js +1 -1
- package/dist/esm/hooks/useKeepTrackButtons.js.map +2 -2
- package/dist/esm/index.js +7 -1
- package/dist/esm/index.js.map +2 -2
- package/dist/esm/{propTypes.js → react-desc-prop-types.js} +13 -4
- package/dist/esm/react-desc-prop-types.js.map +7 -0
- package/dist/esm/styles.js +6 -5
- package/dist/esm/styles.js.map +2 -2
- package/dist/types/AppPickerImpl.d.ts +10 -2
- package/dist/types/DSAppPicker.d.ts +4 -3
- package/dist/types/DSAppPickerDefinitions.d.ts +15 -0
- package/dist/types/hooks/useKeepTrackButtons.d.ts +2 -2
- package/dist/types/index.d.ts +3 -1
- package/dist/types/react-desc-prop-types.d.ts +44 -0
- package/dist/types/styles.d.ts +3 -3
- package/package.json +9 -9
- package/dist/cjs/propTypes.js.map +0 -7
- package/dist/cjs/types/AppPickerTypes.js.map +0 -7
- package/dist/esm/propTypes.js.map +0 -7
- package/dist/esm/types/AppPickerTypes.js +0 -2
- package/dist/esm/types/AppPickerTypes.js.map +0 -7
- package/dist/types/propTypes.d.ts +0 -2
- package/dist/types/types/AppPickerTypes.d.ts +0 -49
|
@@ -38,12 +38,13 @@ var import_ds_chip = require("@elliemae/ds-chip");
|
|
|
38
38
|
var import_utils = require("./utils.js");
|
|
39
39
|
var import_styles = require("./styles.js");
|
|
40
40
|
var import_useKeepTrackButtons = require("./hooks/useKeepTrackButtons.js");
|
|
41
|
+
var import_DSAppPickerDefinitions = require("./DSAppPickerDefinitions.js");
|
|
41
42
|
const AppPickerImpl = ({
|
|
42
|
-
apps
|
|
43
|
-
customApps
|
|
44
|
-
sectionTitle
|
|
45
|
-
customSectionTitle
|
|
46
|
-
close
|
|
43
|
+
apps,
|
|
44
|
+
customApps,
|
|
45
|
+
sectionTitle,
|
|
46
|
+
customSectionTitle,
|
|
47
|
+
close,
|
|
47
48
|
wrapperRef,
|
|
48
49
|
onKeyDown,
|
|
49
50
|
triggerRef,
|
|
@@ -109,7 +110,7 @@ const AppPickerImpl = ({
|
|
|
109
110
|
{
|
|
110
111
|
onClick: handleOnClick(app),
|
|
111
112
|
onKeyDown: handleKeyDown,
|
|
112
|
-
"data-testid":
|
|
113
|
+
"data-testid": import_DSAppPickerDefinitions.DSAppPickerDataTestIds.CHIP,
|
|
113
114
|
"aria-disabled": disabled,
|
|
114
115
|
disabled,
|
|
115
116
|
selected,
|
|
@@ -156,18 +157,18 @@ const AppPickerImpl = ({
|
|
|
156
157
|
role: "listbox",
|
|
157
158
|
ref: convertedTypeReference,
|
|
158
159
|
onKeyDown: handleOnKeyDownWrapper,
|
|
159
|
-
"data-testid":
|
|
160
|
+
"data-testid": import_DSAppPickerDefinitions.DSAppPickerDataTestIds.WRAPPER,
|
|
160
161
|
isOverflow,
|
|
161
162
|
cols: layout.cols,
|
|
162
163
|
rows: layout.rows,
|
|
163
164
|
tabIndex: -1,
|
|
164
165
|
"aria-label": `Application picker, ${sectionTitle} (${apps.length} apps)${customApps.length > 0 ? `, ${customSectionTitle} (${customApps.length} apps)` : ""}`,
|
|
165
166
|
children: [
|
|
166
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_styles.StyledListItemFullRow, { "aria-hidden": true, role: "group", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_styles.StyledTitle, { "data-testid":
|
|
167
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_styles.StyledListItemFullRow, { "aria-hidden": true, role: "group", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_styles.StyledTitle, { "data-testid": import_DSAppPickerDefinitions.DSAppPickerDataTestIds.MAIN_TITLE, role: "presentation", children: sectionTitle }) }),
|
|
167
168
|
AppsRows,
|
|
168
169
|
customApps.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
|
|
169
170
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_styles.StyledListItemFullRow, { "aria-hidden": true, role: "group", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_styles.StyledSeparator, { role: "presentation" }) }),
|
|
170
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_styles.StyledListItemFullRow, { "aria-hidden": true, role: "group", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_styles.StyledTitle, { "data-testid":
|
|
171
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_styles.StyledListItemFullRow, { "aria-hidden": true, role: "group", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_styles.StyledTitle, { "data-testid": import_DSAppPickerDefinitions.DSAppPickerDataTestIds.CUSTOM_TITLE, role: "presentation", children: customSectionTitle }) }),
|
|
171
172
|
CustomRows
|
|
172
173
|
] })
|
|
173
174
|
]
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/AppPickerImpl.tsx", "../../../../scripts/build/transpile/react-shim.js"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;
|
|
4
|
+
"sourcesContent": ["/* eslint-disable max-lines */\n/* eslint-disable react/no-array-index-key */\nimport React, { useCallback, useMemo } from 'react';\nimport { DSChip } from '@elliemae/ds-chip';\nimport { keys } from './utils.js';\nimport { StyledWrapper, StyledSeparator, StyledListItemFullRow, StyledListItem, StyledTitle } from './styles.js';\nimport { useKeepTrackButtons } from './hooks/useKeepTrackButtons.js';\nimport type { DSAppPickerT } from './react-desc-prop-types.js';\nimport { DSAppPickerDataTestIds } from './DSAppPickerDefinitions.js';\n\ninterface AppPickerImplProps\n extends Omit<\n DSAppPickerT.InternalProps,\n 'onClose' | 'icon' | 'onClick' | 'onClickOutside' | 'renderTrigger' | 'isOpen'\n > {\n close: () => void;\n wrapperRef: React.RefObject<HTMLDivElement>;\n isOverflow: boolean;\n wasOpenedByKeyboardRef: React.MutableRefObject<boolean>;\n triggerIsInternal: boolean;\n}\n\nconst AppPickerImpl: React.ComponentType<AppPickerImplProps> = ({\n apps,\n customApps,\n sectionTitle,\n customSectionTitle,\n close,\n wrapperRef,\n onKeyDown,\n triggerRef,\n isOverflow,\n actionRef,\n wasOpenedByKeyboardRef,\n triggerIsInternal,\n}) => {\n const { allFocusableButtons } = useKeepTrackButtons({\n wrapperRef,\n wasOpenedByKeyboardRef,\n actionRef,\n triggerIsInternal,\n });\n\n // eslint-disable-next-line max-statements\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n switch (e.key) {\n case keys.ESC:\n triggerRef?.current?.focus();\n close();\n break;\n case keys.TAB:\n if (e.shiftKey) {\n if (e.target === allFocusableButtons.current[0]) {\n e.preventDefault();\n allFocusableButtons?.current[allFocusableButtons.current.length - 1]?.focus();\n }\n } else if (e.target === allFocusableButtons.current[allFocusableButtons.current.length - 1]) {\n e.preventDefault();\n allFocusableButtons?.current[0]?.focus();\n }\n break;\n default:\n break;\n }\n },\n [allFocusableButtons, close, triggerRef],\n );\n\n const handleOnClick = useCallback(\n (app: DSAppPickerT.AppItem) => (e: React.MouseEvent) => {\n if (app.onClick) app.onClick(e, app);\n },\n [],\n );\n\n const handleOnKeyDownWrapper = useCallback(\n (e: React.KeyboardEvent) => {\n if (onKeyDown) onKeyDown(e);\n if (!onKeyDown && e.key === keys.ESC) {\n close();\n }\n },\n [onKeyDown, close],\n );\n\n const totalAppsLength = useMemo(() => apps.length + customApps.length, [apps.length, customApps.length]);\n\n const buildRows = useCallback(\n (appList: DSAppPickerT.AppItem[], prevIndex: number, title: string): JSX.Element => (\n <>\n {appList.map((app, index) => {\n const { label, disabled, selected, icon: Icon, id } = app;\n\n // eslint-disable-next-line react/no-unstable-nested-components\n const IconComp = () => <Icon className=\"app-picker__icon\" size=\"m\" />;\n\n return (\n <StyledListItem role=\"presentation\">\n <DSChip\n key={index}\n onClick={handleOnClick(app)}\n onKeyDown={handleKeyDown}\n data-testid={DSAppPickerDataTestIds.CHIP}\n aria-disabled={disabled}\n disabled={disabled}\n selected={selected}\n aria-selected={selected}\n role=\"option\"\n id={id}\n aria-label={`${label}. ${title} (${index + prevIndex} of ${totalAppsLength})`}\n icon={IconComp}\n label={label}\n />\n </StyledListItem>\n );\n })}\n </>\n ),\n [handleKeyDown, handleOnClick, totalAppsLength],\n );\n\n const AppsRows = useMemo(() => buildRows(apps, 1, sectionTitle), [apps, buildRows, sectionTitle]);\n const CustomRows = useMemo(\n () => buildRows(customApps, apps.length, customSectionTitle),\n [apps.length, buildRows, customApps, customSectionTitle],\n );\n\n const layout = useMemo(() => {\n const cols = ['repeat(3, 92px)'];\n let appsRows = 0;\n let customRows = 0;\n const rows = [];\n if (apps.length > 0) {\n appsRows = apps.length / 3;\n rows.push('68px', `repeat(${appsRows}, 68px})`);\n }\n if (customApps.length > 0) {\n customRows = customApps.length / 3;\n rows.push('9px', '68px', `repeat(${customRows}, 68px})`);\n }\n return {\n rows,\n cols,\n };\n }, [apps.length, customApps.length]);\n\n // Needed just for typescript reasons\n const convertedTypeReference = wrapperRef as unknown as React.RefObject<HTMLDivElement> &\n React.RefObject<HTMLUListElement>;\n\n return (\n <StyledWrapper\n forwardedAs=\"ul\"\n role=\"listbox\"\n ref={convertedTypeReference}\n onKeyDown={handleOnKeyDownWrapper}\n data-testid={DSAppPickerDataTestIds.WRAPPER}\n isOverflow={isOverflow}\n cols={layout.cols}\n rows={layout.rows}\n tabIndex={-1}\n aria-label={`Application picker, ${sectionTitle} (${apps.length} apps)${\n customApps.length > 0 ? `, ${customSectionTitle} (${customApps.length} apps)` : ''\n }`}\n >\n <StyledListItemFullRow aria-hidden role=\"group\">\n <StyledTitle data-testid={DSAppPickerDataTestIds.MAIN_TITLE} role=\"presentation\">\n {sectionTitle}\n </StyledTitle>\n </StyledListItemFullRow>\n {AppsRows}\n {customApps.length > 0 && (\n <>\n <StyledListItemFullRow aria-hidden role=\"group\">\n <StyledSeparator role=\"presentation\" />\n </StyledListItemFullRow>\n <StyledListItemFullRow aria-hidden role=\"group\">\n <StyledTitle data-testid={DSAppPickerDataTestIds.CUSTOM_TITLE} role=\"presentation\">\n {customSectionTitle}\n </StyledTitle>\n </StyledListItemFullRow>\n {CustomRows}\n </>\n )}\n </StyledWrapper>\n );\n};\n\nexport default AppPickerImpl;\n", "import * as React from 'react';\nexport { React };\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/cjs/DSAppPicker.js
CHANGED
|
@@ -36,28 +36,30 @@ module.exports = __toCommonJS(DSAppPicker_exports);
|
|
|
36
36
|
var React = __toESM(require("react"));
|
|
37
37
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
38
38
|
var import_react = require("react");
|
|
39
|
-
var import_ds_icons = require("@elliemae/ds-icons");
|
|
40
39
|
var import_ds_button = require("@elliemae/ds-button");
|
|
41
40
|
var import_ds_utilities = require("@elliemae/ds-utilities");
|
|
42
41
|
var import_ds_props_helpers = require("@elliemae/ds-props-helpers");
|
|
43
42
|
var import_ds_popover = __toESM(require("@elliemae/ds-popover"));
|
|
44
43
|
var import_AppPickerImpl = __toESM(require("./AppPickerImpl.js"));
|
|
45
|
-
var
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
44
|
+
var import_react_desc_prop_types = require("./react-desc-prop-types.js");
|
|
45
|
+
var import_DSAppPickerDefinitions = require("./DSAppPickerDefinitions.js");
|
|
46
|
+
const DSAppPicker = (props) => {
|
|
47
|
+
const propsWithDefault = (0, import_ds_props_helpers.useMemoMergePropsWithDefault)(props, import_react_desc_prop_types.defaultProps);
|
|
48
|
+
const {
|
|
49
|
+
apps,
|
|
50
|
+
customApps,
|
|
51
|
+
sectionTitle,
|
|
52
|
+
customSectionTitle,
|
|
53
|
+
icon: Icon,
|
|
54
|
+
renderTrigger,
|
|
55
|
+
isOpen,
|
|
56
|
+
onClose,
|
|
57
|
+
actionRef,
|
|
58
|
+
onKeyDown,
|
|
59
|
+
onClick,
|
|
60
|
+
onClickOutside,
|
|
61
|
+
triggerRef
|
|
62
|
+
} = propsWithDefault;
|
|
61
63
|
const [open, setOpen] = (0, import_react.useState)(false);
|
|
62
64
|
const [isOverflow, setIsOverflow] = (0, import_react.useState)(false);
|
|
63
65
|
const wrapperRef = (0, import_react.useRef)(null);
|
|
@@ -89,12 +91,12 @@ const DSAppPicker = ({
|
|
|
89
91
|
}, [isOpen, open]);
|
|
90
92
|
const handleOnClose = (0, import_react.useCallback)(() => {
|
|
91
93
|
setOpen(false);
|
|
92
|
-
onClose();
|
|
94
|
+
onClose?.();
|
|
93
95
|
}, [onClose]);
|
|
94
96
|
const handleOnClickOutside = (e) => {
|
|
95
97
|
setOpen(false);
|
|
96
|
-
onClose();
|
|
97
|
-
onClickOutside(e);
|
|
98
|
+
onClose?.();
|
|
99
|
+
onClickOutside?.(e);
|
|
98
100
|
};
|
|
99
101
|
const AppPickerContent = (0, import_react.useCallback)(
|
|
100
102
|
() => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
@@ -130,7 +132,7 @@ const DSAppPicker = ({
|
|
|
130
132
|
const RenderTrigger = renderTrigger || (({ ref }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
131
133
|
import_ds_button.DSButtonV2,
|
|
132
134
|
{
|
|
133
|
-
"data-testid":
|
|
135
|
+
"data-testid": import_DSAppPickerDefinitions.DSAppPickerDataTestIds.TRIGGER,
|
|
134
136
|
id: "app-picker__button",
|
|
135
137
|
buttonType: "icon",
|
|
136
138
|
"aria-haspopup": "true",
|
|
@@ -139,7 +141,7 @@ const DSAppPicker = ({
|
|
|
139
141
|
innerRef: (0, import_ds_utilities.mergeRefs)(ref, defaultTriggerRef),
|
|
140
142
|
onClick: (e) => {
|
|
141
143
|
wasOpenedByKeyboardRef.current = e.detail === 0;
|
|
142
|
-
onClick(e);
|
|
144
|
+
onClick?.(e);
|
|
143
145
|
setOpen(true);
|
|
144
146
|
},
|
|
145
147
|
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Icon, {})
|
|
@@ -163,8 +165,8 @@ const DSAppPicker = ({
|
|
|
163
165
|
}
|
|
164
166
|
);
|
|
165
167
|
};
|
|
166
|
-
DSAppPicker.displayName =
|
|
168
|
+
DSAppPicker.displayName = import_DSAppPickerDefinitions.DSAppPickerName;
|
|
167
169
|
const AppPickerWithSchema = (0, import_ds_props_helpers.describe)(DSAppPicker);
|
|
168
|
-
AppPickerWithSchema.propTypes =
|
|
170
|
+
AppPickerWithSchema.propTypes = import_react_desc_prop_types.DSAppPickerPropTypes;
|
|
169
171
|
var DSAppPicker_default = DSAppPicker;
|
|
170
172
|
//# sourceMappingURL=DSAppPicker.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/DSAppPicker.tsx", "../../../../scripts/build/transpile/react-shim.js"],
|
|
4
|
-
"sourcesContent": ["
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;
|
|
4
|
+
"sourcesContent": ["import React, { useState, useEffect, useRef, useCallback } from 'react';\nimport { DSButtonV2 } from '@elliemae/ds-button';\nimport { mergeRefs } from '@elliemae/ds-utilities';\nimport { describe, useMemoMergePropsWithDefault } from '@elliemae/ds-props-helpers';\nimport DSPopover from '@elliemae/ds-popover';\nimport AppPickerImpl from './AppPickerImpl.js';\nimport type { DSAppPickerT } from './react-desc-prop-types.js';\nimport { DSAppPickerPropTypes, defaultProps } from './react-desc-prop-types.js';\nimport { DSAppPickerDataTestIds, DSAppPickerName } from './DSAppPickerDefinitions.js';\n\nconst DSAppPicker: React.ComponentType<DSAppPickerT.Props> = (props) => {\n const propsWithDefault = useMemoMergePropsWithDefault<DSAppPickerT.InternalProps>(props, defaultProps);\n\n const {\n apps,\n customApps,\n sectionTitle,\n customSectionTitle,\n icon: Icon,\n renderTrigger,\n isOpen,\n onClose,\n actionRef,\n onKeyDown,\n onClick,\n onClickOutside,\n triggerRef,\n } = propsWithDefault;\n\n const [open, setOpen] = useState(false);\n const [isOverflow, setIsOverflow] = useState(false);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const defaultTriggerRef = useRef(null);\n const wasOpenedByKeyboardRef = useRef(false);\n\n useEffect(() => {\n if (actionRef && actionRef.current) {\n actionRef.current.focusToIndex = (index: number) => {\n if (wrapperRef.current) {\n const parent = wrapperRef.current;\n const buttons = [...parent.querySelectorAll('button')];\n buttons[index].focus();\n }\n };\n actionRef.current.focusWrapper = () => {\n wrapperRef.current?.focus();\n };\n }\n }, [actionRef, apps, customApps]);\n\n useEffect(() => {\n setTimeout(() => {\n if (wrapperRef.current) {\n const { scrollHeight, clientHeight } = wrapperRef.current;\n if (scrollHeight > clientHeight) return setIsOverflow(true);\n }\n return setIsOverflow(false);\n });\n }, [isOpen, open]);\n\n const handleOnClose = useCallback(() => {\n setOpen(false);\n onClose?.();\n }, [onClose]);\n\n const handleOnClickOutside = (e: React.MouseEvent) => {\n setOpen(false);\n onClose?.();\n onClickOutside?.(e);\n };\n\n const AppPickerContent = useCallback(\n () => (\n <AppPickerImpl\n apps={apps}\n customApps={customApps}\n sectionTitle={sectionTitle}\n customSectionTitle={customSectionTitle}\n close={handleOnClose}\n wrapperRef={wrapperRef}\n onKeyDown={onKeyDown}\n triggerRef={triggerRef || defaultTriggerRef}\n actionRef={actionRef}\n triggerIsInternal={!renderTrigger}\n wasOpenedByKeyboardRef={wasOpenedByKeyboardRef}\n isOverflow={isOverflow}\n />\n ),\n [\n actionRef,\n apps,\n customApps,\n customSectionTitle,\n handleOnClose,\n isOverflow,\n onKeyDown,\n renderTrigger,\n sectionTitle,\n triggerRef,\n ],\n );\n\n const RenderTrigger =\n renderTrigger ||\n (({ ref }: { ref: React.RefObject<HTMLButtonElement> }) => (\n <DSButtonV2\n data-testid={DSAppPickerDataTestIds.TRIGGER}\n id=\"app-picker__button\"\n buttonType=\"icon\"\n aria-haspopup=\"true\"\n aria-expanded={isOpen ?? open}\n aria-label=\"Application picker\"\n innerRef={mergeRefs(ref, defaultTriggerRef)}\n onClick={(e: React.MouseEvent | React.KeyboardEvent) => {\n wasOpenedByKeyboardRef.current = e.detail === 0;\n onClick?.(e);\n setOpen(true);\n }}\n >\n <Icon />\n </DSButtonV2>\n ));\n\n return (\n <DSPopover\n content={<AppPickerContent />}\n isOpen={typeof isOpen === 'boolean' ? isOpen : open}\n onClickOutside={handleOnClickOutside}\n placement=\"bottom\"\n interactionType=\"click\"\n renderTrigger={RenderTrigger}\n showArrow\n style={{\n padding: '0',\n maxWidth: '1000px',\n width: 'fit-content',\n }}\n />\n );\n};\n\nDSAppPicker.displayName = DSAppPickerName;\nconst AppPickerWithSchema = describe(DSAppPicker);\nAppPickerWithSchema.propTypes = DSAppPickerPropTypes;\n\nexport { DSAppPicker, AppPickerWithSchema };\nexport default DSAppPicker;\n", "import * as React from 'react';\nexport { React };\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["AppPickerImpl", "DSPopover"]
|
|
7
7
|
}
|
|
@@ -5,6 +5,10 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
5
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
6
|
var __getProtoOf = Object.getPrototypeOf;
|
|
7
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
8
12
|
var __copyProps = (to, from, except, desc) => {
|
|
9
13
|
if (from && typeof from === "object" || typeof from === "function") {
|
|
10
14
|
for (let key of __getOwnPropNames(from))
|
|
@@ -22,7 +26,27 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
22
26
|
mod
|
|
23
27
|
));
|
|
24
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
25
|
-
var
|
|
26
|
-
|
|
29
|
+
var DSAppPickerDefinitions_exports = {};
|
|
30
|
+
__export(DSAppPickerDefinitions_exports, {
|
|
31
|
+
DSAppPickerDataTestIds: () => DSAppPickerDataTestIds,
|
|
32
|
+
DSAppPickerName: () => DSAppPickerName,
|
|
33
|
+
DSAppPickerSlots: () => DSAppPickerSlots
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(DSAppPickerDefinitions_exports);
|
|
27
36
|
var React = __toESM(require("react"));
|
|
28
|
-
|
|
37
|
+
const DSAppPickerName = "DSAppPicker";
|
|
38
|
+
const DSAppPickerSlots = {
|
|
39
|
+
ROOT: "root",
|
|
40
|
+
TITLE: "title",
|
|
41
|
+
SEPARATOR: "separator",
|
|
42
|
+
ROW: "row",
|
|
43
|
+
ITEM: "item"
|
|
44
|
+
};
|
|
45
|
+
const DSAppPickerDataTestIds = {
|
|
46
|
+
TRIGGER: "app-picker__button",
|
|
47
|
+
WRAPPER: "app-picker__wrapper",
|
|
48
|
+
CHIP: "app-picker__chip",
|
|
49
|
+
MAIN_TITLE: "app-picker__main-title",
|
|
50
|
+
CUSTOM_TITLE: "app-picker__custom-title"
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=DSAppPickerDefinitions.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/DSAppPickerDefinitions.ts", "../../../../scripts/build/transpile/react-shim.js"],
|
|
4
|
+
"sourcesContent": ["export const DSAppPickerName = 'DSAppPicker';\n\nexport const DSAppPickerSlots = {\n ROOT: 'root',\n TITLE: 'title',\n SEPARATOR: 'separator',\n ROW: 'row',\n ITEM: 'item',\n};\n\nexport const DSAppPickerDataTestIds = {\n TRIGGER: 'app-picker__button',\n WRAPPER: 'app-picker__wrapper',\n CHIP: 'app-picker__chip',\n MAIN_TITLE: 'app-picker__main-title',\n CUSTOM_TITLE: 'app-picker__custom-title',\n};\n", "import * as React from 'react';\nexport { React };\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAhB,MAAM,kBAAkB;AAExB,MAAM,mBAAmB;AAAA,EAC9B,MAAM;AAAA,EACN,OAAO;AAAA,EACP,WAAW;AAAA,EACX,KAAK;AAAA,EACL,MAAM;AACR;AAEO,MAAM,yBAAyB;AAAA,EACpC,SAAS;AAAA,EACT,SAAS;AAAA,EACT,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,cAAc;AAChB;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -53,7 +53,7 @@ const useKeepTrackButtons = ({
|
|
|
53
53
|
if (!e.hasAttribute("disabled")) {
|
|
54
54
|
allFocusableButtons?.current?.push(e);
|
|
55
55
|
}
|
|
56
|
-
if (e.getAttribute("aria-
|
|
56
|
+
if (e.getAttribute("aria-selected") === "true") {
|
|
57
57
|
selectedButton.current = index;
|
|
58
58
|
}
|
|
59
59
|
if (wasOpenedByKeyboardRef.current || !triggerIsInternal) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/hooks/useKeepTrackButtons.tsx", "../../../../../scripts/build/transpile/react-shim.js"],
|
|
4
|
-
"sourcesContent": ["import type React from 'react';\nimport { useEffect, useRef } from 'react';\nimport {
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADCvB,mBAAkC;
|
|
4
|
+
"sourcesContent": ["import type React from 'react';\nimport { useEffect, useRef } from 'react';\nimport type { DSAppPickerT } from '../react-desc-prop-types.js';\nimport { focusSelectedOrFirstAvailable } from '../utils.js';\n\ninterface UseKeepTrackButtonsT {\n wrapperRef: React.RefObject<HTMLDivElement>;\n wasOpenedByKeyboardRef: React.MutableRefObject<boolean>;\n actionRef?: DSAppPickerT.ActionRef;\n triggerIsInternal?: boolean;\n}\n\nexport const useKeepTrackButtons = ({\n wrapperRef,\n wasOpenedByKeyboardRef,\n actionRef,\n triggerIsInternal,\n}: UseKeepTrackButtonsT) => {\n const allFocusableButtons = useRef<HTMLButtonElement[]>([]);\n const selectedButton = useRef<number | null>(null);\n\n useEffect(() => {\n if (actionRef && actionRef.current) {\n actionRef.current.focusSelectedOrFirstAvailable = () =>\n setTimeout(() => focusSelectedOrFirstAvailable(wrapperRef, allFocusableButtons, selectedButton));\n }\n }, [actionRef, wrapperRef]);\n\n useEffect(() => {\n setTimeout(() => {\n wrapperRef?.current?.querySelectorAll('button').forEach((e, index) => {\n if (!e.hasAttribute('disabled')) {\n allFocusableButtons?.current?.push(e);\n }\n if (e.getAttribute('aria-selected') === 'true') {\n selectedButton.current = index;\n }\n if (wasOpenedByKeyboardRef.current || !triggerIsInternal) {\n focusSelectedOrFirstAvailable(wrapperRef, allFocusableButtons, selectedButton);\n } else {\n wrapperRef.current?.focus();\n }\n });\n });\n }, [wasOpenedByKeyboardRef, wrapperRef, triggerIsInternal]);\n\n return { allFocusableButtons, selectedButton };\n};\n", "import * as React from 'react';\nexport { React };\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADCvB,mBAAkC;AAElC,mBAA8C;AASvC,MAAM,sBAAsB,CAAC;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA4B;AAC1B,QAAM,0BAAsB,qBAA4B,CAAC,CAAC;AAC1D,QAAM,qBAAiB,qBAAsB,IAAI;AAEjD,8BAAU,MAAM;AACd,QAAI,aAAa,UAAU,SAAS;AAClC,gBAAU,QAAQ,gCAAgC,MAChD,WAAW,UAAM,4CAA8B,YAAY,qBAAqB,cAAc,CAAC;AAAA,IACnG;AAAA,EACF,GAAG,CAAC,WAAW,UAAU,CAAC;AAE1B,8BAAU,MAAM;AACd,eAAW,MAAM;AACf,kBAAY,SAAS,iBAAiB,QAAQ,EAAE,QAAQ,CAAC,GAAG,UAAU;AACpE,YAAI,CAAC,EAAE,aAAa,UAAU,GAAG;AAC/B,+BAAqB,SAAS,KAAK,CAAC;AAAA,QACtC;AACA,YAAI,EAAE,aAAa,eAAe,MAAM,QAAQ;AAC9C,yBAAe,UAAU;AAAA,QAC3B;AACA,YAAI,uBAAuB,WAAW,CAAC,mBAAmB;AACxD,0DAA8B,YAAY,qBAAqB,cAAc;AAAA,QAC/E,OAAO;AACL,qBAAW,SAAS,MAAM;AAAA,QAC5B;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACH,GAAG,CAAC,wBAAwB,YAAY,iBAAiB,CAAC;AAE1D,SAAO,EAAE,qBAAqB,eAAe;AAC/C;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/cjs/index.js
CHANGED
|
@@ -17,7 +17,6 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
17
|
}
|
|
18
18
|
return to;
|
|
19
19
|
};
|
|
20
|
-
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
21
20
|
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
22
21
|
// If the importer is in node compatibility mode or this is not an ESM
|
|
23
22
|
// file that has been converted to a CommonJS file using a Babel-
|
|
@@ -29,10 +28,16 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
29
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
30
29
|
var src_exports = {};
|
|
31
30
|
__export(src_exports, {
|
|
32
|
-
|
|
31
|
+
AppPickerWithSchema: () => import_DSAppPicker.AppPickerWithSchema,
|
|
32
|
+
DSAppPicker: () => import_DSAppPicker.DSAppPicker,
|
|
33
|
+
DSAppPickerDataTestIds: () => import_DSAppPickerDefinitions.DSAppPickerDataTestIds,
|
|
34
|
+
DSAppPickerName: () => import_DSAppPickerDefinitions.DSAppPickerName,
|
|
35
|
+
DSAppPickerSlots: () => import_DSAppPickerDefinitions.DSAppPickerSlots,
|
|
36
|
+
default: () => import_DSAppPicker2.default
|
|
33
37
|
});
|
|
34
38
|
module.exports = __toCommonJS(src_exports);
|
|
35
39
|
var React = __toESM(require("react"));
|
|
36
|
-
|
|
37
|
-
var
|
|
40
|
+
var import_DSAppPicker = require("./DSAppPicker.js");
|
|
41
|
+
var import_DSAppPickerDefinitions = require("./DSAppPickerDefinitions.js");
|
|
42
|
+
var import_DSAppPicker2 = __toESM(require("./DSAppPicker.js"));
|
|
38
43
|
//# sourceMappingURL=index.js.map
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/index.tsx", "../../../../scripts/build/transpile/react-shim.js"],
|
|
4
|
-
"sourcesContent": ["export
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": []
|
|
4
|
+
"sourcesContent": ["export { DSAppPicker, AppPickerWithSchema } from './DSAppPicker.js';\nexport { DSAppPickerName, DSAppPickerSlots, DSAppPickerDataTestIds } from './DSAppPickerDefinitions.js';\nexport type { DSAppPickerT } from './react-desc-prop-types.js';\n\nexport { default } from './DSAppPicker.js';\n", "import * as React from 'react';\nexport { React };\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB,yBAAiD;AACjD,oCAA0E;AAG1E,IAAAA,sBAAwB;",
|
|
6
|
+
"names": ["import_DSAppPicker"]
|
|
7
7
|
}
|
|
@@ -26,15 +26,24 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
26
26
|
mod
|
|
27
27
|
));
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
-
var
|
|
30
|
-
__export(
|
|
31
|
-
|
|
29
|
+
var react_desc_prop_types_exports = {};
|
|
30
|
+
__export(react_desc_prop_types_exports, {
|
|
31
|
+
DSAppPickerPropTypes: () => DSAppPickerPropTypes,
|
|
32
|
+
defaultProps: () => defaultProps
|
|
32
33
|
});
|
|
33
|
-
module.exports = __toCommonJS(
|
|
34
|
+
module.exports = __toCommonJS(react_desc_prop_types_exports);
|
|
34
35
|
var React = __toESM(require("react"));
|
|
35
|
-
var
|
|
36
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
36
37
|
var import_ds_icons = require("@elliemae/ds-icons");
|
|
37
|
-
|
|
38
|
+
var import_ds_props_helpers = require("@elliemae/ds-props-helpers");
|
|
39
|
+
const defaultProps = {
|
|
40
|
+
apps: [],
|
|
41
|
+
customApps: [],
|
|
42
|
+
sectionTitle: "APPLICATIONS",
|
|
43
|
+
customSectionTitle: "CUSTOM APPLICATIONS",
|
|
44
|
+
icon: () => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ds_icons.MenuPicker, { color: ["brand-primary", "700"], size: "m" })
|
|
45
|
+
};
|
|
46
|
+
const DSAppPickerPropTypes = {
|
|
38
47
|
apps: import_ds_props_helpers.PropTypes.array.description(
|
|
39
48
|
"Main items. Format: [{ label:string, icon:component, onClick:func, disabled:bool, selected:bool }]"
|
|
40
49
|
).isRequired,
|
|
@@ -54,4 +63,4 @@ const propTypes = {
|
|
|
54
63
|
onClick: import_ds_props_helpers.PropTypes.func.description("Custom onClick for Trigger component."),
|
|
55
64
|
onClickOutside: import_ds_props_helpers.PropTypes.func.description("Callback event when the user clicks outside the App Picker.")
|
|
56
65
|
};
|
|
57
|
-
//# sourceMappingURL=
|
|
66
|
+
//# sourceMappingURL=react-desc-prop-types.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/react-desc-prop-types.tsx", "../../../../scripts/build/transpile/react-shim.js"],
|
|
4
|
+
"sourcesContent": ["import React from 'react';\nimport type { WeakValidationMap } from 'react';\nimport { MenuPicker } from '@elliemae/ds-icons';\nimport type { SvgIconT } from '@elliemae/ds-icons';\nimport type { GlobalAttributesT, XstyledProps } from '@elliemae/ds-props-helpers';\nimport { PropTypes } from '@elliemae/ds-props-helpers';\n\nexport declare namespace DSAppPickerT {\n export interface AppItem {\n label: string;\n icon: React.ComponentType<{ className: string; size: string }>;\n onClick?: (e: React.MouseEvent, item: AppItem) => void | null;\n disabled?: boolean;\n id?: string;\n selected?: boolean;\n }\n\n export type ActionRef = React.MutableRefObject<{\n focusToIndex?: (index: number) => void;\n focusSelectedOrFirstAvailable?: () => void;\n focusWrapper: () => void;\n }>;\n\n export interface DefaultProps {\n apps: AppItem[];\n customApps: AppItem[];\n sectionTitle: string;\n customSectionTitle: string;\n icon: React.ComponentType<SvgIconT.Props>;\n }\n\n export interface OptionalProps {\n onClose?: () => void;\n onClick?: (e: React.MouseEvent | React.KeyboardEvent) => void;\n onClickOutside?: (e: React.MouseEvent) => void;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n actionRef?: ActionRef;\n renderTrigger?: React.ComponentType<Record<string, unknown>>;\n isOpen?: boolean;\n triggerRef?: React.RefObject<HTMLButtonElement>;\n }\n\n export interface Props\n extends Partial<DefaultProps>,\n OptionalProps,\n Omit<GlobalAttributesT<HTMLDivElement>, keyof DefaultProps | keyof OptionalProps | keyof XstyledProps>,\n XstyledProps {}\n\n export interface InternalProps\n extends DefaultProps,\n OptionalProps,\n Omit<GlobalAttributesT<HTMLDivElement>, keyof DefaultProps | keyof OptionalProps | keyof XstyledProps>,\n XstyledProps {}\n}\n\nexport const defaultProps: DSAppPickerT.DefaultProps = {\n apps: [],\n customApps: [],\n sectionTitle: 'APPLICATIONS',\n customSectionTitle: 'CUSTOM APPLICATIONS',\n icon: () => <MenuPicker color={['brand-primary', '700']} size=\"m\" />,\n};\n\n// =============================================================================\n// PropTypes\n// =============================================================================\n\nexport const DSAppPickerPropTypes = {\n apps: PropTypes.array.description(\n 'Main items. Format: [{ label:string, icon:component, onClick:func, disabled:bool, selected:bool }]',\n ).isRequired,\n customApps: PropTypes.array.description(\n 'Custom items. Format: [{ label:string, icon:component, onClick:func, disabled:bool, selected:bool }]',\n ),\n sectionTitle: PropTypes.string.description('main section title').defaultValue('APPLICATIONS'),\n customSectionTitle: PropTypes.string.description('custom section title').defaultValue('CUSTOM APPLICATIONS'),\n icon: PropTypes.func.description('trigger button s icon').defaultValue(MenuPicker),\n renderTrigger: PropTypes.func.description('Custom trigger component.'),\n actionRef: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({ current: PropTypes.any })]).description(\n 'Ref containing a focusToIndex method. This method allows you to focus any App inside the AppPicker.',\n ),\n isOpen: PropTypes.bool.description('Wether the AppPicker should be open or not.'),\n onClose: PropTypes.func.description('Callback function when the AppPicker closes'),\n onKeyDown: PropTypes.func.description('OnKeyDown handler callback.'),\n onClick: PropTypes.func.description('Custom onClick for Trigger component.'),\n onClickOutside: PropTypes.func.description('Callback event when the user clicks outside the App Picker.'),\n} as WeakValidationMap<unknown>;\n", "import * as React from 'react';\nexport { React };\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;AD4DT;AA1Dd,sBAA2B;AAG3B,8BAA0B;AAkDnB,MAAM,eAA0C;AAAA,EACrD,MAAM,CAAC;AAAA,EACP,YAAY,CAAC;AAAA,EACb,cAAc;AAAA,EACd,oBAAoB;AAAA,EACpB,MAAM,MAAM,4CAAC,8BAAW,OAAO,CAAC,iBAAiB,KAAK,GAAG,MAAK,KAAI;AACpE;AAMO,MAAM,uBAAuB;AAAA,EAClC,MAAM,kCAAU,MAAM;AAAA,IACpB;AAAA,EACF,EAAE;AAAA,EACF,YAAY,kCAAU,MAAM;AAAA,IAC1B;AAAA,EACF;AAAA,EACA,cAAc,kCAAU,OAAO,YAAY,oBAAoB,EAAE,aAAa,cAAc;AAAA,EAC5F,oBAAoB,kCAAU,OAAO,YAAY,sBAAsB,EAAE,aAAa,qBAAqB;AAAA,EAC3G,MAAM,kCAAU,KAAK,YAAY,uBAAuB,EAAE,aAAa,0BAAU;AAAA,EACjF,eAAe,kCAAU,KAAK,YAAY,2BAA2B;AAAA,EACrE,WAAW,kCAAU,UAAU,CAAC,kCAAU,MAAM,kCAAU,MAAM,EAAE,SAAS,kCAAU,IAAI,CAAC,CAAC,CAAC,EAAE;AAAA,IAC5F;AAAA,EACF;AAAA,EACA,QAAQ,kCAAU,KAAK,YAAY,6CAA6C;AAAA,EAChF,SAAS,kCAAU,KAAK,YAAY,6CAA6C;AAAA,EACjF,WAAW,kCAAU,KAAK,YAAY,6BAA6B;AAAA,EACnE,SAAS,kCAAU,KAAK,YAAY,uCAAuC;AAAA,EAC3E,gBAAgB,kCAAU,KAAK,YAAY,6DAA6D;AAC1G;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/cjs/styles.js
CHANGED
|
@@ -38,7 +38,8 @@ module.exports = __toCommonJS(styles_exports);
|
|
|
38
38
|
var React = __toESM(require("react"));
|
|
39
39
|
var import_ds_system = require("@elliemae/ds-system");
|
|
40
40
|
var import_ds_grid = require("@elliemae/ds-grid");
|
|
41
|
-
|
|
41
|
+
var import_DSAppPickerDefinitions = require("./DSAppPickerDefinitions.js");
|
|
42
|
+
const StyledWrapper = (0, import_ds_system.styled)(import_ds_grid.Grid, { name: import_DSAppPickerDefinitions.DSAppPickerName, slot: import_DSAppPickerDefinitions.DSAppPickerSlots.ROOT })`
|
|
42
43
|
align-items: center;
|
|
43
44
|
min-width: 308px;
|
|
44
45
|
min-height: 110px;
|
|
@@ -52,14 +53,14 @@ const StyledWrapper = (0, import_ds_system.styled)(import_ds_grid.Grid, { name:
|
|
|
52
53
|
outline: none;
|
|
53
54
|
}
|
|
54
55
|
`;
|
|
55
|
-
const StyledListItem = import_ds_system.styled.
|
|
56
|
+
const StyledListItem = (0, import_ds_system.styled)("li", { name: import_DSAppPickerDefinitions.DSAppPickerName, slot: import_DSAppPickerDefinitions.DSAppPickerSlots.ITEM })`
|
|
56
57
|
list-style: none;
|
|
57
58
|
`;
|
|
58
|
-
const StyledListItemFullRow = import_ds_system.styled.
|
|
59
|
+
const StyledListItemFullRow = (0, import_ds_system.styled)("li", { name: import_DSAppPickerDefinitions.DSAppPickerName, slot: import_DSAppPickerDefinitions.DSAppPickerSlots.ROW })`
|
|
59
60
|
list-style: none;
|
|
60
61
|
grid-column: 1/4;
|
|
61
62
|
`;
|
|
62
|
-
const StyledTitle = (0, import_ds_system.styled)("h3", { name:
|
|
63
|
+
const StyledTitle = (0, import_ds_system.styled)("h3", { name: import_DSAppPickerDefinitions.DSAppPickerName, slot: import_DSAppPickerDefinitions.DSAppPickerSlots.TITLE })`
|
|
63
64
|
color: ${({ theme }) => theme.colors.neutral[700]};
|
|
64
65
|
font-size: ${({ theme }) => theme.fontSizes.value[400]};
|
|
65
66
|
font-weight: ${({ theme }) => theme.fontWeights.semibold};
|
|
@@ -67,7 +68,7 @@ const StyledTitle = (0, import_ds_system.styled)("h3", { name: "DSAppPicker", sl
|
|
|
67
68
|
line-height: 1.385;
|
|
68
69
|
text-transform: uppercase;
|
|
69
70
|
`;
|
|
70
|
-
const StyledSeparator = (0, import_ds_system.styled)("hr", { name:
|
|
71
|
+
const StyledSeparator = (0, import_ds_system.styled)("hr", { name: import_DSAppPickerDefinitions.DSAppPickerName, slot: import_DSAppPickerDefinitions.DSAppPickerSlots.SEPARATOR })`
|
|
71
72
|
border-top: 1px solid ${({ theme }) => theme.colors.neutral[100]};
|
|
72
73
|
border-bottom: none;
|
|
73
74
|
width: 99%;
|
package/dist/cjs/styles.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/styles.tsx", "../../../../scripts/build/transpile/react-shim.js"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable max-lines */\nimport { styled } from '@elliemae/ds-system';\nimport { Grid } from '@elliemae/ds-grid';\n\nexport const StyledWrapper = styled(Grid, { name:
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADEvB,uBAAuB;AACvB,qBAAqB;
|
|
4
|
+
"sourcesContent": ["/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable max-lines */\nimport { styled } from '@elliemae/ds-system';\nimport { Grid } from '@elliemae/ds-grid';\nimport { DSAppPickerName, DSAppPickerSlots } from './DSAppPickerDefinitions.js';\n\nexport const StyledWrapper = styled(Grid, { name: DSAppPickerName, slot: DSAppPickerSlots.ROOT })<{\n isOverflow: boolean;\n}>`\n align-items: center;\n min-width: 308px;\n min-height: 110px;\n max-height: 449px;\n width: 308px;\n overflow-y: auto;\n overflow-x: hidden;\n margin: 0;\n padding: ${({ isOverflow }) => (isOverflow ? '0 0 8px 16px' : '0 16px 8px 16px')};\n &:focus {\n outline: none;\n }\n`;\n\nexport const StyledListItem = styled('li', { name: DSAppPickerName, slot: DSAppPickerSlots.ITEM })`\n list-style: none;\n`;\n\nexport const StyledListItemFullRow = styled('li', { name: DSAppPickerName, slot: DSAppPickerSlots.ROW })`\n list-style: none;\n grid-column: 1/4;\n`;\n\nexport const StyledTitle = styled('h3', { name: DSAppPickerName, slot: DSAppPickerSlots.TITLE })`\n color: ${({ theme }) => theme.colors.neutral[700]};\n font-size: ${({ theme }) => theme.fontSizes.value[400]};\n font-weight: ${({ theme }) => theme.fontWeights.semibold};\n margin: 12px 0 8px 0;\n line-height: 1.385;\n text-transform: uppercase;\n`;\n\nexport const StyledSeparator = styled('hr', { name: DSAppPickerName, slot: DSAppPickerSlots.SEPARATOR })`\n border-top: 1px solid ${({ theme }) => theme.colors.neutral[100]};\n border-bottom: none;\n width: 99%;\n margin: 8px 0 0 0;\n`;\n", "import * as React from 'react';\nexport { React };\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADEvB,uBAAuB;AACvB,qBAAqB;AACrB,oCAAkD;AAE3C,MAAM,oBAAgB,yBAAO,qBAAM,EAAE,MAAM,+CAAiB,MAAM,+CAAiB,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAWnF,CAAC,EAAE,WAAW,MAAO,aAAa,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAMzD,MAAM,qBAAiB,yBAAO,MAAM,EAAE,MAAM,+CAAiB,MAAM,+CAAiB,KAAK,CAAC;AAAA;AAAA;AAI1F,MAAM,4BAAwB,yBAAO,MAAM,EAAE,MAAM,+CAAiB,MAAM,+CAAiB,IAAI,CAAC;AAAA;AAAA;AAAA;AAKhG,MAAM,kBAAc,yBAAO,MAAM,EAAE,MAAM,+CAAiB,MAAM,+CAAiB,MAAM,CAAC;AAAA,WACpF,CAAC,EAAE,MAAM,MAAM,MAAM,OAAO,QAAQ,GAAG;AAAA,eACnC,CAAC,EAAE,MAAM,MAAM,MAAM,UAAU,MAAM,GAAG;AAAA,iBACtC,CAAC,EAAE,MAAM,MAAM,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAM3C,MAAM,sBAAkB,yBAAO,MAAM,EAAE,MAAM,+CAAiB,MAAM,+CAAiB,UAAU,CAAC;AAAA,0BAC7E,CAAC,EAAE,MAAM,MAAM,MAAM,OAAO,QAAQ,GAAG;AAAA;AAAA;AAAA;AAAA;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -5,12 +5,13 @@ import { DSChip } from "@elliemae/ds-chip";
|
|
|
5
5
|
import { keys } from "./utils.js";
|
|
6
6
|
import { StyledWrapper, StyledSeparator, StyledListItemFullRow, StyledListItem, StyledTitle } from "./styles.js";
|
|
7
7
|
import { useKeepTrackButtons } from "./hooks/useKeepTrackButtons.js";
|
|
8
|
+
import { DSAppPickerDataTestIds } from "./DSAppPickerDefinitions.js";
|
|
8
9
|
const AppPickerImpl = ({
|
|
9
|
-
apps
|
|
10
|
-
customApps
|
|
11
|
-
sectionTitle
|
|
12
|
-
customSectionTitle
|
|
13
|
-
close
|
|
10
|
+
apps,
|
|
11
|
+
customApps,
|
|
12
|
+
sectionTitle,
|
|
13
|
+
customSectionTitle,
|
|
14
|
+
close,
|
|
14
15
|
wrapperRef,
|
|
15
16
|
onKeyDown,
|
|
16
17
|
triggerRef,
|
|
@@ -76,7 +77,7 @@ const AppPickerImpl = ({
|
|
|
76
77
|
{
|
|
77
78
|
onClick: handleOnClick(app),
|
|
78
79
|
onKeyDown: handleKeyDown,
|
|
79
|
-
"data-testid":
|
|
80
|
+
"data-testid": DSAppPickerDataTestIds.CHIP,
|
|
80
81
|
"aria-disabled": disabled,
|
|
81
82
|
disabled,
|
|
82
83
|
selected,
|
|
@@ -123,18 +124,18 @@ const AppPickerImpl = ({
|
|
|
123
124
|
role: "listbox",
|
|
124
125
|
ref: convertedTypeReference,
|
|
125
126
|
onKeyDown: handleOnKeyDownWrapper,
|
|
126
|
-
"data-testid":
|
|
127
|
+
"data-testid": DSAppPickerDataTestIds.WRAPPER,
|
|
127
128
|
isOverflow,
|
|
128
129
|
cols: layout.cols,
|
|
129
130
|
rows: layout.rows,
|
|
130
131
|
tabIndex: -1,
|
|
131
132
|
"aria-label": `Application picker, ${sectionTitle} (${apps.length} apps)${customApps.length > 0 ? `, ${customSectionTitle} (${customApps.length} apps)` : ""}`,
|
|
132
133
|
children: [
|
|
133
|
-
/* @__PURE__ */ jsx(StyledListItemFullRow, { "aria-hidden": true, role: "group", children: /* @__PURE__ */ jsx(StyledTitle, { "data-testid":
|
|
134
|
+
/* @__PURE__ */ jsx(StyledListItemFullRow, { "aria-hidden": true, role: "group", children: /* @__PURE__ */ jsx(StyledTitle, { "data-testid": DSAppPickerDataTestIds.MAIN_TITLE, role: "presentation", children: sectionTitle }) }),
|
|
134
135
|
AppsRows,
|
|
135
136
|
customApps.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
136
137
|
/* @__PURE__ */ jsx(StyledListItemFullRow, { "aria-hidden": true, role: "group", children: /* @__PURE__ */ jsx(StyledSeparator, { role: "presentation" }) }),
|
|
137
|
-
/* @__PURE__ */ jsx(StyledListItemFullRow, { "aria-hidden": true, role: "group", children: /* @__PURE__ */ jsx(StyledTitle, { "data-testid":
|
|
138
|
+
/* @__PURE__ */ jsx(StyledListItemFullRow, { "aria-hidden": true, role: "group", children: /* @__PURE__ */ jsx(StyledTitle, { "data-testid": DSAppPickerDataTestIds.CUSTOM_TITLE, role: "presentation", children: customSectionTitle }) }),
|
|
138
139
|
CustomRows
|
|
139
140
|
] })
|
|
140
141
|
]
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../scripts/build/transpile/react-shim.js", "../../src/AppPickerImpl.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable
|
|
5
|
-
"mappings": "AAAA,YAAY,WAAW;
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable max-lines */\n/* eslint-disable react/no-array-index-key */\nimport React, { useCallback, useMemo } from 'react';\nimport { DSChip } from '@elliemae/ds-chip';\nimport { keys } from './utils.js';\nimport { StyledWrapper, StyledSeparator, StyledListItemFullRow, StyledListItem, StyledTitle } from './styles.js';\nimport { useKeepTrackButtons } from './hooks/useKeepTrackButtons.js';\nimport type { DSAppPickerT } from './react-desc-prop-types.js';\nimport { DSAppPickerDataTestIds } from './DSAppPickerDefinitions.js';\n\ninterface AppPickerImplProps\n extends Omit<\n DSAppPickerT.InternalProps,\n 'onClose' | 'icon' | 'onClick' | 'onClickOutside' | 'renderTrigger' | 'isOpen'\n > {\n close: () => void;\n wrapperRef: React.RefObject<HTMLDivElement>;\n isOverflow: boolean;\n wasOpenedByKeyboardRef: React.MutableRefObject<boolean>;\n triggerIsInternal: boolean;\n}\n\nconst AppPickerImpl: React.ComponentType<AppPickerImplProps> = ({\n apps,\n customApps,\n sectionTitle,\n customSectionTitle,\n close,\n wrapperRef,\n onKeyDown,\n triggerRef,\n isOverflow,\n actionRef,\n wasOpenedByKeyboardRef,\n triggerIsInternal,\n}) => {\n const { allFocusableButtons } = useKeepTrackButtons({\n wrapperRef,\n wasOpenedByKeyboardRef,\n actionRef,\n triggerIsInternal,\n });\n\n // eslint-disable-next-line max-statements\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n switch (e.key) {\n case keys.ESC:\n triggerRef?.current?.focus();\n close();\n break;\n case keys.TAB:\n if (e.shiftKey) {\n if (e.target === allFocusableButtons.current[0]) {\n e.preventDefault();\n allFocusableButtons?.current[allFocusableButtons.current.length - 1]?.focus();\n }\n } else if (e.target === allFocusableButtons.current[allFocusableButtons.current.length - 1]) {\n e.preventDefault();\n allFocusableButtons?.current[0]?.focus();\n }\n break;\n default:\n break;\n }\n },\n [allFocusableButtons, close, triggerRef],\n );\n\n const handleOnClick = useCallback(\n (app: DSAppPickerT.AppItem) => (e: React.MouseEvent) => {\n if (app.onClick) app.onClick(e, app);\n },\n [],\n );\n\n const handleOnKeyDownWrapper = useCallback(\n (e: React.KeyboardEvent) => {\n if (onKeyDown) onKeyDown(e);\n if (!onKeyDown && e.key === keys.ESC) {\n close();\n }\n },\n [onKeyDown, close],\n );\n\n const totalAppsLength = useMemo(() => apps.length + customApps.length, [apps.length, customApps.length]);\n\n const buildRows = useCallback(\n (appList: DSAppPickerT.AppItem[], prevIndex: number, title: string): JSX.Element => (\n <>\n {appList.map((app, index) => {\n const { label, disabled, selected, icon: Icon, id } = app;\n\n // eslint-disable-next-line react/no-unstable-nested-components\n const IconComp = () => <Icon className=\"app-picker__icon\" size=\"m\" />;\n\n return (\n <StyledListItem role=\"presentation\">\n <DSChip\n key={index}\n onClick={handleOnClick(app)}\n onKeyDown={handleKeyDown}\n data-testid={DSAppPickerDataTestIds.CHIP}\n aria-disabled={disabled}\n disabled={disabled}\n selected={selected}\n aria-selected={selected}\n role=\"option\"\n id={id}\n aria-label={`${label}. ${title} (${index + prevIndex} of ${totalAppsLength})`}\n icon={IconComp}\n label={label}\n />\n </StyledListItem>\n );\n })}\n </>\n ),\n [handleKeyDown, handleOnClick, totalAppsLength],\n );\n\n const AppsRows = useMemo(() => buildRows(apps, 1, sectionTitle), [apps, buildRows, sectionTitle]);\n const CustomRows = useMemo(\n () => buildRows(customApps, apps.length, customSectionTitle),\n [apps.length, buildRows, customApps, customSectionTitle],\n );\n\n const layout = useMemo(() => {\n const cols = ['repeat(3, 92px)'];\n let appsRows = 0;\n let customRows = 0;\n const rows = [];\n if (apps.length > 0) {\n appsRows = apps.length / 3;\n rows.push('68px', `repeat(${appsRows}, 68px})`);\n }\n if (customApps.length > 0) {\n customRows = customApps.length / 3;\n rows.push('9px', '68px', `repeat(${customRows}, 68px})`);\n }\n return {\n rows,\n cols,\n };\n }, [apps.length, customApps.length]);\n\n // Needed just for typescript reasons\n const convertedTypeReference = wrapperRef as unknown as React.RefObject<HTMLDivElement> &\n React.RefObject<HTMLUListElement>;\n\n return (\n <StyledWrapper\n forwardedAs=\"ul\"\n role=\"listbox\"\n ref={convertedTypeReference}\n onKeyDown={handleOnKeyDownWrapper}\n data-testid={DSAppPickerDataTestIds.WRAPPER}\n isOverflow={isOverflow}\n cols={layout.cols}\n rows={layout.rows}\n tabIndex={-1}\n aria-label={`Application picker, ${sectionTitle} (${apps.length} apps)${\n customApps.length > 0 ? `, ${customSectionTitle} (${customApps.length} apps)` : ''\n }`}\n >\n <StyledListItemFullRow aria-hidden role=\"group\">\n <StyledTitle data-testid={DSAppPickerDataTestIds.MAIN_TITLE} role=\"presentation\">\n {sectionTitle}\n </StyledTitle>\n </StyledListItemFullRow>\n {AppsRows}\n {customApps.length > 0 && (\n <>\n <StyledListItemFullRow aria-hidden role=\"group\">\n <StyledSeparator role=\"presentation\" />\n </StyledListItemFullRow>\n <StyledListItemFullRow aria-hidden role=\"group\">\n <StyledTitle data-testid={DSAppPickerDataTestIds.CUSTOM_TITLE} role=\"presentation\">\n {customSectionTitle}\n </StyledTitle>\n </StyledListItemFullRow>\n {CustomRows}\n </>\n )}\n </StyledWrapper>\n );\n};\n\nexport default AppPickerImpl;\n"],
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;AC0FjB,mBAK2B,KA8EzB,YAnFF;AAxFN,SAAgB,aAAa,eAAe;AAC5C,SAAS,cAAc;AACvB,SAAS,YAAY;AACrB,SAAS,eAAe,iBAAiB,uBAAuB,gBAAgB,mBAAmB;AACnG,SAAS,2BAA2B;AAEpC,SAAS,8BAA8B;AAcvC,MAAM,gBAAyD,CAAC;AAAA,EAC9D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,EAAE,oBAAoB,IAAI,oBAAoB;AAAA,IAClD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAGD,QAAM,gBAAgB;AAAA,IACpB,CAAC,MAA2B;AAC1B,cAAQ,EAAE,KAAK;AAAA,QACb,KAAK,KAAK;AACR,sBAAY,SAAS,MAAM;AAC3B,gBAAM;AACN;AAAA,QACF,KAAK,KAAK;AACR,cAAI,EAAE,UAAU;AACd,gBAAI,EAAE,WAAW,oBAAoB,QAAQ,CAAC,GAAG;AAC/C,gBAAE,eAAe;AACjB,mCAAqB,QAAQ,oBAAoB,QAAQ,SAAS,CAAC,GAAG,MAAM;AAAA,YAC9E;AAAA,UACF,WAAW,EAAE,WAAW,oBAAoB,QAAQ,oBAAoB,QAAQ,SAAS,CAAC,GAAG;AAC3F,cAAE,eAAe;AACjB,iCAAqB,QAAQ,CAAC,GAAG,MAAM;AAAA,UACzC;AACA;AAAA,QACF;AACE;AAAA,MACJ;AAAA,IACF;AAAA,IACA,CAAC,qBAAqB,OAAO,UAAU;AAAA,EACzC;AAEA,QAAM,gBAAgB;AAAA,IACpB,CAAC,QAA8B,CAAC,MAAwB;AACtD,UAAI,IAAI;AAAS,YAAI,QAAQ,GAAG,GAAG;AAAA,IACrC;AAAA,IACA,CAAC;AAAA,EACH;AAEA,QAAM,yBAAyB;AAAA,IAC7B,CAAC,MAA2B;AAC1B,UAAI;AAAW,kBAAU,CAAC;AAC1B,UAAI,CAAC,aAAa,EAAE,QAAQ,KAAK,KAAK;AACpC,cAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,CAAC,WAAW,KAAK;AAAA,EACnB;AAEA,QAAM,kBAAkB,QAAQ,MAAM,KAAK,SAAS,WAAW,QAAQ,CAAC,KAAK,QAAQ,WAAW,MAAM,CAAC;AAEvG,QAAM,YAAY;AAAA,IAChB,CAAC,SAAiC,WAAmB,UACnD,gCACG,kBAAQ,IAAI,CAAC,KAAK,UAAU;AAC3B,YAAM,EAAE,OAAO,UAAU,UAAU,MAAM,MAAM,GAAG,IAAI;AAGtD,YAAM,WAAW,MAAM,oBAAC,QAAK,WAAU,oBAAmB,MAAK,KAAI;AAEnE,aACE,oBAAC,kBAAe,MAAK,gBACnB;AAAA,QAAC;AAAA;AAAA,UAEC,SAAS,cAAc,GAAG;AAAA,UAC1B,WAAW;AAAA,UACX,eAAa,uBAAuB;AAAA,UACpC,iBAAe;AAAA,UACf;AAAA,UACA;AAAA,UACA,iBAAe;AAAA,UACf,MAAK;AAAA,UACL;AAAA,UACA,cAAY,GAAG,UAAU,UAAU,QAAQ,gBAAgB;AAAA,UAC3D,MAAM;AAAA,UACN;AAAA;AAAA,QAZK;AAAA,MAaP,GACF;AAAA,IAEJ,CAAC,GACH;AAAA,IAEF,CAAC,eAAe,eAAe,eAAe;AAAA,EAChD;AAEA,QAAM,WAAW,QAAQ,MAAM,UAAU,MAAM,GAAG,YAAY,GAAG,CAAC,MAAM,WAAW,YAAY,CAAC;AAChG,QAAM,aAAa;AAAA,IACjB,MAAM,UAAU,YAAY,KAAK,QAAQ,kBAAkB;AAAA,IAC3D,CAAC,KAAK,QAAQ,WAAW,YAAY,kBAAkB;AAAA,EACzD;AAEA,QAAM,SAAS,QAAQ,MAAM;AAC3B,UAAM,OAAO,CAAC,iBAAiB;AAC/B,QAAI,WAAW;AACf,QAAI,aAAa;AACjB,UAAM,OAAO,CAAC;AACd,QAAI,KAAK,SAAS,GAAG;AACnB,iBAAW,KAAK,SAAS;AACzB,WAAK,KAAK,QAAQ,UAAU,kBAAkB;AAAA,IAChD;AACA,QAAI,WAAW,SAAS,GAAG;AACzB,mBAAa,WAAW,SAAS;AACjC,WAAK,KAAK,OAAO,QAAQ,UAAU,oBAAoB;AAAA,IACzD;AACA,WAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF,GAAG,CAAC,KAAK,QAAQ,WAAW,MAAM,CAAC;AAGnC,QAAM,yBAAyB;AAG/B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAY;AAAA,MACZ,MAAK;AAAA,MACL,KAAK;AAAA,MACL,WAAW;AAAA,MACX,eAAa,uBAAuB;AAAA,MACpC;AAAA,MACA,MAAM,OAAO;AAAA,MACb,MAAM,OAAO;AAAA,MACb,UAAU;AAAA,MACV,cAAY,uBAAuB,iBAAiB,KAAK,eACvD,WAAW,SAAS,IAAI,KAAK,uBAAuB,WAAW,iBAAiB;AAAA,MAGlF;AAAA,4BAAC,yBAAsB,eAAW,MAAC,MAAK,SACtC,8BAAC,eAAY,eAAa,uBAAuB,YAAY,MAAK,gBAC/D,wBACH,GACF;AAAA,QACC;AAAA,QACA,WAAW,SAAS,KACnB,iCACE;AAAA,8BAAC,yBAAsB,eAAW,MAAC,MAAK,SACtC,8BAAC,mBAAgB,MAAK,gBAAe,GACvC;AAAA,UACA,oBAAC,yBAAsB,eAAW,MAAC,MAAK,SACtC,8BAAC,eAAY,eAAa,uBAAuB,cAAc,MAAK,gBACjE,8BACH,GACF;AAAA,UACC;AAAA,WACH;AAAA;AAAA;AAAA,EAEJ;AAEJ;AAEA,IAAO,wBAAQ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|