@elliemae/ds-legacy-app-picker 1.0.0-rc.1

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.
Files changed (45) hide show
  1. package/dist/cjs/AppPickerImpl.js +165 -0
  2. package/dist/cjs/AppPickerImpl.js.map +7 -0
  3. package/dist/cjs/DSAppPicker.js +175 -0
  4. package/dist/cjs/DSAppPicker.js.map +7 -0
  5. package/dist/cjs/DSAppPickerDefinitions.js +52 -0
  6. package/dist/cjs/DSAppPickerDefinitions.js.map +7 -0
  7. package/dist/cjs/hooks/useKeepTrackButtons.js +70 -0
  8. package/dist/cjs/hooks/useKeepTrackButtons.js.map +7 -0
  9. package/dist/cjs/index.js +43 -0
  10. package/dist/cjs/index.js.map +7 -0
  11. package/dist/cjs/package.json +7 -0
  12. package/dist/cjs/react-desc-prop-types.js +69 -0
  13. package/dist/cjs/react-desc-prop-types.js.map +7 -0
  14. package/dist/cjs/styles.js +77 -0
  15. package/dist/cjs/styles.js.map +7 -0
  16. package/dist/cjs/utils.js +55 -0
  17. package/dist/cjs/utils.js.map +7 -0
  18. package/dist/esm/AppPickerImpl.js +135 -0
  19. package/dist/esm/AppPickerImpl.js.map +7 -0
  20. package/dist/esm/DSAppPicker.js +145 -0
  21. package/dist/esm/DSAppPicker.js.map +7 -0
  22. package/dist/esm/DSAppPickerDefinitions.js +22 -0
  23. package/dist/esm/DSAppPickerDefinitions.js.map +7 -0
  24. package/dist/esm/hooks/useKeepTrackButtons.js +40 -0
  25. package/dist/esm/hooks/useKeepTrackButtons.js.map +7 -0
  26. package/dist/esm/index.js +13 -0
  27. package/dist/esm/index.js.map +7 -0
  28. package/dist/esm/package.json +7 -0
  29. package/dist/esm/react-desc-prop-types.js +39 -0
  30. package/dist/esm/react-desc-prop-types.js.map +7 -0
  31. package/dist/esm/styles.js +47 -0
  32. package/dist/esm/styles.js.map +7 -0
  33. package/dist/esm/utils.js +25 -0
  34. package/dist/esm/utils.js.map +7 -0
  35. package/dist/types/AppPickerImpl.d.ts +11 -0
  36. package/dist/types/DSAppPicker.d.ts +6 -0
  37. package/dist/types/DSAppPickerDefinitions.d.ts +15 -0
  38. package/dist/types/hooks/useKeepTrackButtons.d.ts +13 -0
  39. package/dist/types/index.d.ts +4 -0
  40. package/dist/types/react-desc-prop-types.d.ts +48 -0
  41. package/dist/types/styles.d.ts +8 -0
  42. package/dist/types/tests/AppPicker.test.d.ts +1 -0
  43. package/dist/types/tests/a11y/axe.test.d.ts +1 -0
  44. package/dist/types/utils.d.ts +14 -0
  45. package/package.json +97 -0
@@ -0,0 +1,165 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
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
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var AppPickerImpl_exports = {};
30
+ __export(AppPickerImpl_exports, {
31
+ default: () => AppPickerImpl_default
32
+ });
33
+ module.exports = __toCommonJS(AppPickerImpl_exports);
34
+ var React = __toESM(require("react"));
35
+ var import_jsx_runtime = require("react/jsx-runtime");
36
+ var import_react = require("react");
37
+ var import_ds_legacy_chip = require("@elliemae/ds-legacy-chip");
38
+ var import_utils = require("./utils.js");
39
+ var import_styles = require("./styles.js");
40
+ var import_useKeepTrackButtons = require("./hooks/useKeepTrackButtons.js");
41
+ var import_DSAppPickerDefinitions = require("./DSAppPickerDefinitions.js");
42
+ var import_ds_legacy_utilities = require("@elliemae/ds-legacy-utilities");
43
+ const AppPickerImpl = ({
44
+ apps,
45
+ customApps,
46
+ sectionTitle,
47
+ customSectionTitle,
48
+ close,
49
+ wrapperRef,
50
+ onKeyDown,
51
+ triggerRef,
52
+ isOverflow,
53
+ actionRef,
54
+ wasOpenedByKeyboardRef,
55
+ triggerIsInternal
56
+ }) => {
57
+ const { allFocusableButtons } = (0, import_useKeepTrackButtons.useKeepTrackButtons)({
58
+ wrapperRef,
59
+ wasOpenedByKeyboardRef,
60
+ actionRef,
61
+ triggerIsInternal
62
+ });
63
+ const firstElementRef = (0, import_react.useRef)(null);
64
+ const lastElementRef = (0, import_react.useRef)(null);
65
+ const handleOnClick = (0, import_react.useCallback)(
66
+ (app) => (e) => {
67
+ if (app.onClick)
68
+ app.onClick(e, app);
69
+ },
70
+ []
71
+ );
72
+ const handleOnKeyDownWrapper = (0, import_react.useCallback)(
73
+ (e) => {
74
+ if (onKeyDown)
75
+ onKeyDown(e);
76
+ if (!onKeyDown && e.key === import_utils.keys.ESC) {
77
+ triggerRef?.current?.focus();
78
+ close();
79
+ }
80
+ },
81
+ [onKeyDown, triggerRef, close]
82
+ );
83
+ firstElementRef.current = allFocusableButtons[0];
84
+ lastElementRef.current = allFocusableButtons[allFocusableButtons.length - 1];
85
+ const handleOnKeyDown = (0, import_ds_legacy_utilities.useFocusTrap)({
86
+ firstElementRef,
87
+ lastElementRef,
88
+ onKeyDown: handleOnKeyDownWrapper
89
+ });
90
+ const totalAppsLength = (0, import_react.useMemo)(() => apps.length + customApps.length, [apps.length, customApps.length]);
91
+ const buildRows = (0, import_react.useCallback)(
92
+ (appList, prevIndex, title) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children: appList.map((app, index) => {
93
+ const { label, disabled, selected, icon: Icon, id } = app;
94
+ const IconComp = () => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Icon, { className: "app-picker__icon", size: "m" });
95
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_styles.StyledListItem, { role: "presentation", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
96
+ import_ds_legacy_chip.DSChip,
97
+ {
98
+ onClick: handleOnClick(app),
99
+ "data-testid": import_DSAppPickerDefinitions.DSAppPickerDataTestIds.CHIP,
100
+ "aria-disabled": disabled,
101
+ disabled,
102
+ selected,
103
+ "aria-selected": selected,
104
+ role: "option",
105
+ id,
106
+ "aria-label": `${label}. ${title} (${index + prevIndex} of ${totalAppsLength})`,
107
+ icon: IconComp,
108
+ label
109
+ },
110
+ index
111
+ ) });
112
+ }) }),
113
+ [handleOnClick, totalAppsLength]
114
+ );
115
+ const AppsRows = (0, import_react.useMemo)(() => buildRows(apps, 1, sectionTitle), [apps, buildRows, sectionTitle]);
116
+ const CustomRows = (0, import_react.useMemo)(
117
+ () => buildRows(customApps, apps.length, customSectionTitle),
118
+ [apps.length, buildRows, customApps, customSectionTitle]
119
+ );
120
+ const layout = (0, import_react.useMemo)(() => {
121
+ const cols = ["repeat(3, 92px)"];
122
+ let appsRows = 0;
123
+ let customRows = 0;
124
+ const rows = [];
125
+ if (apps.length > 0) {
126
+ appsRows = apps.length / 3;
127
+ rows.push("68px", `repeat(${appsRows}, 68px})`);
128
+ }
129
+ if (customApps.length > 0) {
130
+ customRows = customApps.length / 3;
131
+ rows.push("9px", "68px", `repeat(${customRows}, 68px})`);
132
+ }
133
+ return {
134
+ rows,
135
+ cols
136
+ };
137
+ }, [apps.length, customApps.length]);
138
+ const convertedTypeReference = wrapperRef;
139
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
140
+ import_styles.StyledWrapper,
141
+ {
142
+ forwardedAs: "ul",
143
+ role: "listbox",
144
+ ref: convertedTypeReference,
145
+ onKeyDown: handleOnKeyDown,
146
+ "data-testid": import_DSAppPickerDefinitions.DSAppPickerDataTestIds.WRAPPER,
147
+ isOverflow,
148
+ cols: layout.cols,
149
+ rows: layout.rows,
150
+ tabIndex: -1,
151
+ "aria-label": `Application picker, ${sectionTitle} (${apps.length} apps)${customApps.length > 0 ? `, ${customSectionTitle} (${customApps.length} apps)` : ""}`,
152
+ children: [
153
+ /* @__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 }) }),
154
+ AppsRows,
155
+ customApps.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
156
+ /* @__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" }) }),
157
+ /* @__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 }) }),
158
+ CustomRows
159
+ ] })
160
+ ]
161
+ }
162
+ );
163
+ };
164
+ var AppPickerImpl_default = AppPickerImpl;
165
+ //# sourceMappingURL=AppPickerImpl.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/AppPickerImpl.tsx", "../../../../../scripts/build/transpile/react-shim.js"],
4
+ "sourcesContent": ["/* eslint-disable max-lines */\n/* eslint-disable react/no-array-index-key */\nimport React, { useCallback, useRef, useMemo } from 'react';\nimport { DSChip } from '@elliemae/ds-legacy-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';\nimport { useFocusTrap } from '@elliemae/ds-legacy-utilities';\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 const firstElementRef = useRef<HTMLElement | null>(null);\n const lastElementRef = useRef<HTMLElement | null>(null);\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: React.KeyboardEventHandler = useCallback(\n (e) => {\n if (onKeyDown) onKeyDown(e);\n if (!onKeyDown && e.key === keys.ESC) {\n triggerRef?.current?.focus();\n close();\n }\n },\n [onKeyDown, triggerRef, close],\n );\n firstElementRef.current = allFocusableButtons[0];\n lastElementRef.current = allFocusableButtons[allFocusableButtons.length - 1];\n\n const handleOnKeyDown = useFocusTrap({\n firstElementRef,\n lastElementRef,\n onKeyDown: handleOnKeyDownWrapper,\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 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 [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={handleOnKeyDown}\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": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;AD6EjB;AA3EN,mBAAoD;AACpD,4BAAuB;AACvB,mBAAqB;AACrB,oBAAmG;AACnG,iCAAoC;AAEpC,oCAAuC;AACvC,iCAA6B;AAc7B,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,QAAI,gDAAoB;AAAA,IAClD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,sBAAkB,qBAA2B,IAAI;AACvD,QAAM,qBAAiB,qBAA2B,IAAI;AAEtD,QAAM,oBAAgB;AAAA,IACpB,CAAC,QAA8B,CAAC,MAAwB;AACtD,UAAI,IAAI;AAAS,YAAI,QAAQ,GAAG,GAAG;AAAA,IACrC;AAAA,IACA,CAAC;AAAA,EACH;AAEA,QAAM,6BAAqD;AAAA,IACzD,CAAC,MAAM;AACL,UAAI;AAAW,kBAAU,CAAC;AAC1B,UAAI,CAAC,aAAa,EAAE,QAAQ,kBAAK,KAAK;AACpC,oBAAY,SAAS,MAAM;AAC3B,cAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,CAAC,WAAW,YAAY,KAAK;AAAA,EAC/B;AACA,kBAAgB,UAAU,oBAAoB,CAAC;AAC/C,iBAAe,UAAU,oBAAoB,oBAAoB,SAAS,CAAC;AAE3E,QAAM,sBAAkB,yCAAa;AAAA,IACnC;AAAA,IACA;AAAA,IACA,WAAW;AAAA,EACb,CAAC;AAED,QAAM,sBAAkB,sBAAQ,MAAM,KAAK,SAAS,WAAW,QAAQ,CAAC,KAAK,QAAQ,WAAW,MAAM,CAAC;AAEvG,QAAM,gBAAY;AAAA,IAChB,CAAC,SAAiC,WAAmB,UACnD,2EACG,kBAAQ,IAAI,CAAC,KAAK,UAAU;AAC3B,YAAM,EAAE,OAAO,UAAU,UAAU,MAAM,MAAM,GAAG,IAAI;AAGtD,YAAM,WAAW,MAAM,4CAAC,QAAK,WAAU,oBAAmB,MAAK,KAAI;AAEnE,aACE,4CAAC,gCAAe,MAAK,gBACnB;AAAA,QAAC;AAAA;AAAA,UAEC,SAAS,cAAc,GAAG;AAAA,UAC1B,eAAa,qDAAuB;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,QAXK;AAAA,MAYP,GACF;AAAA,IAEJ,CAAC,GACH;AAAA,IAEF,CAAC,eAAe,eAAe;AAAA,EACjC;AAEA,QAAM,eAAW,sBAAQ,MAAM,UAAU,MAAM,GAAG,YAAY,GAAG,CAAC,MAAM,WAAW,YAAY,CAAC;AAChG,QAAM,iBAAa;AAAA,IACjB,MAAM,UAAU,YAAY,KAAK,QAAQ,kBAAkB;AAAA,IAC3D,CAAC,KAAK,QAAQ,WAAW,YAAY,kBAAkB;AAAA,EACzD;AAEA,QAAM,aAAS,sBAAQ,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,qDAAuB;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,oDAAC,uCAAsB,eAAW,MAAC,MAAK,SACtC,sDAAC,6BAAY,eAAa,qDAAuB,YAAY,MAAK,gBAC/D,wBACH,GACF;AAAA,QACC;AAAA,QACA,WAAW,SAAS,KACnB,4EACE;AAAA,sDAAC,uCAAsB,eAAW,MAAC,MAAK,SACtC,sDAAC,iCAAgB,MAAK,gBAAe,GACvC;AAAA,UACA,4CAAC,uCAAsB,eAAW,MAAC,MAAK,SACtC,sDAAC,6BAAY,eAAa,qDAAuB,cAAc,MAAK,gBACjE,8BACH,GACF;AAAA,UACC;AAAA,WACH;AAAA;AAAA;AAAA,EAEJ;AAEJ;AAEA,IAAO,wBAAQ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,175 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
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
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var DSAppPicker_exports = {};
30
+ __export(DSAppPicker_exports, {
31
+ AppPickerWithSchema: () => AppPickerWithSchema,
32
+ DSAppPicker: () => DSAppPicker,
33
+ default: () => DSAppPicker_default
34
+ });
35
+ module.exports = __toCommonJS(DSAppPicker_exports);
36
+ var React = __toESM(require("react"));
37
+ var import_jsx_runtime = require("react/jsx-runtime");
38
+ var import_react = require("react");
39
+ var import_ds_legacy_button_v2 = require("@elliemae/ds-legacy-button-v2");
40
+ var import_ds_legacy_utilities = require("@elliemae/ds-legacy-utilities");
41
+ var import_ds_legacy_props_helpers = require("@elliemae/ds-legacy-props-helpers");
42
+ var import_ds_legacy_popover = __toESM(require("@elliemae/ds-legacy-popover"));
43
+ var import_AppPickerImpl = __toESM(require("./AppPickerImpl.js"));
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_legacy_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;
63
+ const [open, setOpen] = (0, import_react.useState)(false);
64
+ const [isOverflow, setIsOverflow] = (0, import_react.useState)(false);
65
+ const wrapperRef = (0, import_react.useRef)(null);
66
+ const defaultTriggerRef = (0, import_react.useRef)(null);
67
+ const wasOpenedByKeyboardRef = (0, import_react.useRef)(false);
68
+ (0, import_react.useEffect)(() => {
69
+ if (actionRef && actionRef.current) {
70
+ actionRef.current.focusToIndex = (index) => {
71
+ if (wrapperRef.current) {
72
+ const parent = wrapperRef.current;
73
+ const buttons = [...parent.querySelectorAll("button")];
74
+ buttons[index].focus();
75
+ }
76
+ };
77
+ actionRef.current.focusWrapper = () => {
78
+ wrapperRef.current?.focus();
79
+ };
80
+ }
81
+ }, [actionRef, apps, customApps]);
82
+ (0, import_react.useEffect)(() => {
83
+ setTimeout(() => {
84
+ if (wrapperRef.current) {
85
+ const { scrollHeight, clientHeight } = wrapperRef.current;
86
+ if (scrollHeight > clientHeight)
87
+ return setIsOverflow(true);
88
+ }
89
+ return setIsOverflow(false);
90
+ });
91
+ }, [isOpen, open]);
92
+ const handleOnClose = (0, import_react.useCallback)(() => {
93
+ setOpen(false);
94
+ onClose?.();
95
+ }, [onClose]);
96
+ const handleOnClickOutside = (e) => {
97
+ setOpen(false);
98
+ onClose?.();
99
+ onClickOutside?.(e);
100
+ };
101
+ const AppPickerContent = (0, import_react.useCallback)(
102
+ () => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
103
+ import_AppPickerImpl.default,
104
+ {
105
+ apps,
106
+ customApps,
107
+ sectionTitle,
108
+ customSectionTitle,
109
+ close: handleOnClose,
110
+ wrapperRef,
111
+ onKeyDown,
112
+ triggerRef: triggerRef || defaultTriggerRef,
113
+ actionRef,
114
+ triggerIsInternal: !renderTrigger,
115
+ wasOpenedByKeyboardRef,
116
+ isOverflow
117
+ }
118
+ ),
119
+ [
120
+ actionRef,
121
+ apps,
122
+ customApps,
123
+ customSectionTitle,
124
+ handleOnClose,
125
+ isOverflow,
126
+ onKeyDown,
127
+ renderTrigger,
128
+ sectionTitle,
129
+ triggerRef
130
+ ]
131
+ );
132
+ const RenderTrigger = (0, import_react.useMemo)(
133
+ () => renderTrigger || (({ ref }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
134
+ import_ds_legacy_button_v2.DSButtonV2,
135
+ {
136
+ "data-testid": import_DSAppPickerDefinitions.DSAppPickerDataTestIds.TRIGGER,
137
+ id: "app-picker__button",
138
+ buttonType: "icon",
139
+ "aria-haspopup": "true",
140
+ "aria-expanded": isOpen ?? open,
141
+ "aria-label": "Application picker",
142
+ innerRef: (0, import_ds_legacy_utilities.mergeRefs)(ref, triggerRef || defaultTriggerRef),
143
+ onClick: (e) => {
144
+ wasOpenedByKeyboardRef.current = e.detail === 0;
145
+ onClick?.(e);
146
+ setOpen(true);
147
+ },
148
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Icon, {})
149
+ }
150
+ )),
151
+ [Icon, isOpen, onClick, open, renderTrigger, triggerRef]
152
+ );
153
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
154
+ import_ds_legacy_popover.default,
155
+ {
156
+ content: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AppPickerContent, {}),
157
+ isOpen: typeof isOpen === "boolean" ? isOpen : open,
158
+ onClickOutside: handleOnClickOutside,
159
+ placement: "bottom",
160
+ interactionType: "click",
161
+ renderTrigger: RenderTrigger,
162
+ showArrow: true,
163
+ style: {
164
+ padding: "0",
165
+ maxWidth: "1000px",
166
+ width: "fit-content"
167
+ }
168
+ }
169
+ );
170
+ };
171
+ DSAppPicker.displayName = import_DSAppPickerDefinitions.DSAppPickerName;
172
+ const AppPickerWithSchema = (0, import_ds_legacy_props_helpers.describe)(DSAppPicker);
173
+ AppPickerWithSchema.propTypes = import_react_desc_prop_types.DSAppPickerPropTypes;
174
+ var DSAppPicker_default = DSAppPicker;
175
+ //# sourceMappingURL=DSAppPicker.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/DSAppPicker.tsx", "../../../../../scripts/build/transpile/react-shim.js"],
4
+ "sourcesContent": ["import React, { useState, useEffect, useMemo, useRef, useCallback } from 'react';\nimport { DSButtonV2 } from '@elliemae/ds-legacy-button-v2';\nimport { mergeRefs } from '@elliemae/ds-legacy-utilities';\nimport { describe, useMemoMergePropsWithDefault } from '@elliemae/ds-legacy-props-helpers';\nimport DSPopover from '@elliemae/ds-legacy-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 = useMemo(\n () =>\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, triggerRef || 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 [Icon, isOpen, onClick, open, renderTrigger, triggerRef],\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
+ "names": ["AppPickerImpl", "DSPopover"]
7
+ }
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
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
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var DSAppPickerDefinitions_exports = {};
30
+ __export(DSAppPickerDefinitions_exports, {
31
+ DSAppPickerDataTestIds: () => DSAppPickerDataTestIds,
32
+ DSAppPickerName: () => DSAppPickerName,
33
+ DSAppPickerSlots: () => DSAppPickerSlots
34
+ });
35
+ module.exports = __toCommonJS(DSAppPickerDefinitions_exports);
36
+ var React = __toESM(require("react"));
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
+ }
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
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
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var useKeepTrackButtons_exports = {};
30
+ __export(useKeepTrackButtons_exports, {
31
+ useKeepTrackButtons: () => useKeepTrackButtons
32
+ });
33
+ module.exports = __toCommonJS(useKeepTrackButtons_exports);
34
+ var React = __toESM(require("react"));
35
+ var import_react = require("react");
36
+ var import_utils = require("../utils.js");
37
+ const useKeepTrackButtons = ({
38
+ wrapperRef,
39
+ wasOpenedByKeyboardRef,
40
+ actionRef,
41
+ triggerIsInternal
42
+ }) => {
43
+ const [allFocusableButtons, setAllFocusableButtons] = (0, import_react.useState)([]);
44
+ const selectedButton = (0, import_react.useRef)(null);
45
+ (0, import_react.useEffect)(() => {
46
+ if (actionRef && actionRef.current) {
47
+ actionRef.current.focusSelectedOrFirstAvailable = () => setTimeout(() => {
48
+ (0, import_utils.focusSelectedOrFirstAvailable)(wrapperRef, allFocusableButtons, selectedButton);
49
+ });
50
+ }
51
+ }, [actionRef, allFocusableButtons, wrapperRef]);
52
+ (0, import_react.useEffect)(() => {
53
+ wrapperRef?.current?.querySelectorAll("button").forEach((e, index) => {
54
+ if (!e.hasAttribute("disabled"))
55
+ setAllFocusableButtons((prev) => [...prev, e]);
56
+ if (e.getAttribute("aria-selected") === "true") {
57
+ selectedButton.current = index;
58
+ }
59
+ });
60
+ }, [wasOpenedByKeyboardRef, wrapperRef, triggerIsInternal]);
61
+ (0, import_react.useEffect)(() => {
62
+ if (wasOpenedByKeyboardRef?.current || !triggerIsInternal) {
63
+ (0, import_utils.focusSelectedOrFirstAvailable)(wrapperRef, allFocusableButtons, selectedButton);
64
+ } else {
65
+ wrapperRef.current?.focus();
66
+ }
67
+ }, [wasOpenedByKeyboardRef, wrapperRef, triggerIsInternal, allFocusableButtons]);
68
+ return { allFocusableButtons, selectedButton };
69
+ };
70
+ //# sourceMappingURL=useKeepTrackButtons.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/hooks/useKeepTrackButtons.tsx", "../../../../../../scripts/build/transpile/react-shim.js"],
4
+ "sourcesContent": ["import type React from 'react';\nimport { useEffect, useRef, useState } 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, setAllFocusableButtons] = useState<HTMLButtonElement[]>([]);\n const selectedButton = useRef<number | null>(null);\n\n useEffect(() => {\n if (actionRef && actionRef.current) {\n actionRef.current.focusSelectedOrFirstAvailable = () =>\n setTimeout(() => {\n focusSelectedOrFirstAvailable(wrapperRef, allFocusableButtons, selectedButton);\n });\n }\n }, [actionRef, allFocusableButtons, wrapperRef]);\n\n useEffect(() => {\n wrapperRef?.current?.querySelectorAll('button').forEach((e, index) => {\n if (!e.hasAttribute('disabled')) setAllFocusableButtons((prev) => [...prev, e]);\n if (e.getAttribute('aria-selected') === 'true') {\n selectedButton.current = index;\n }\n });\n }, [wasOpenedByKeyboardRef, wrapperRef, triggerIsInternal]);\n\n useEffect(() => {\n if (wasOpenedByKeyboardRef?.current || !triggerIsInternal) {\n focusSelectedOrFirstAvailable(wrapperRef, allFocusableButtons, selectedButton);\n } else {\n wrapperRef.current?.focus();\n }\n }, [wasOpenedByKeyboardRef, wrapperRef, triggerIsInternal, allFocusableButtons]);\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,mBAA4C;AAE5C,mBAA8C;AASvC,MAAM,sBAAsB,CAAC;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA4B;AAC1B,QAAM,CAAC,qBAAqB,sBAAsB,QAAI,uBAA8B,CAAC,CAAC;AACtF,QAAM,qBAAiB,qBAAsB,IAAI;AAEjD,8BAAU,MAAM;AACd,QAAI,aAAa,UAAU,SAAS;AAClC,gBAAU,QAAQ,gCAAgC,MAChD,WAAW,MAAM;AACf,wDAA8B,YAAY,qBAAqB,cAAc;AAAA,MAC/E,CAAC;AAAA,IACL;AAAA,EACF,GAAG,CAAC,WAAW,qBAAqB,UAAU,CAAC;AAE/C,8BAAU,MAAM;AACd,gBAAY,SAAS,iBAAiB,QAAQ,EAAE,QAAQ,CAAC,GAAG,UAAU;AACpE,UAAI,CAAC,EAAE,aAAa,UAAU;AAAG,+BAAuB,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,CAAC;AAC9E,UAAI,EAAE,aAAa,eAAe,MAAM,QAAQ;AAC9C,uBAAe,UAAU;AAAA,MAC3B;AAAA,IACF,CAAC;AAAA,EACH,GAAG,CAAC,wBAAwB,YAAY,iBAAiB,CAAC;AAE1D,8BAAU,MAAM;AACd,QAAI,wBAAwB,WAAW,CAAC,mBAAmB;AACzD,sDAA8B,YAAY,qBAAqB,cAAc;AAAA,IAC/E,OAAO;AACL,iBAAW,SAAS,MAAM;AAAA,IAC5B;AAAA,EACF,GAAG,CAAC,wBAAwB,YAAY,mBAAmB,mBAAmB,CAAC;AAE/E,SAAO,EAAE,qBAAqB,eAAe;AAC/C;",
6
+ "names": []
7
+ }
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
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
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var src_exports = {};
30
+ __export(src_exports, {
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
37
+ });
38
+ module.exports = __toCommonJS(src_exports);
39
+ var React = __toESM(require("react"));
40
+ var import_DSAppPicker = require("./DSAppPicker.js");
41
+ var import_DSAppPickerDefinitions = require("./DSAppPickerDefinitions.js");
42
+ var import_DSAppPicker2 = __toESM(require("./DSAppPicker.js"));
43
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/index.tsx", "../../../../../scripts/build/transpile/react-shim.js"],
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
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "type": "commonjs",
3
+ "sideEffects": [
4
+ "*.css",
5
+ "*.scss"
6
+ ]
7
+ }