impact-ui 4.0.0-alpha.13 → 4.0.0-alpha.14

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 (29) hide show
  1. package/dist/_virtual/index14.js +2 -2
  2. package/dist/_virtual/index15.js +2 -2
  3. package/dist/_virtual/index3.js +2 -4
  4. package/dist/_virtual/index4.js +3 -3
  5. package/dist/_virtual/index5.js +4 -2
  6. package/dist/components/FileUpload/FileUpload.types.d.ts +8 -0
  7. package/dist/components/FileUpload/FileUpload.types.d.ts.map +1 -1
  8. package/dist/components/FileUpload/TemplatePreview.d.ts +9 -0
  9. package/dist/components/FileUpload/TemplatePreview.d.ts.map +1 -0
  10. package/dist/components/FileUpload/TemplatePreview.js +31 -0
  11. package/dist/components/FileUpload/fileUploadUtils.d.ts +4 -0
  12. package/dist/components/FileUpload/fileUploadUtils.d.ts.map +1 -0
  13. package/dist/components/FileUpload/fileUploadUtils.js +14 -0
  14. package/dist/components/FileUpload/index.d.ts +1 -1
  15. package/dist/components/FileUpload/index.d.ts.map +1 -1
  16. package/dist/components/FileUpload/index.js +107 -9
  17. package/dist/components/FileUpload/useFileUploadTemplateState.d.ts +14 -0
  18. package/dist/components/FileUpload/useFileUploadTemplateState.d.ts.map +1 -0
  19. package/dist/components/FileUpload/useFileUploadTemplateState.js +46 -0
  20. package/dist/components/Menu/Menu.types.d.ts +3 -1
  21. package/dist/components/Menu/Menu.types.d.ts.map +1 -1
  22. package/dist/components/Menu/index.d.ts.map +1 -1
  23. package/dist/components/Menu/index.js +2 -1
  24. package/dist/mcp-component-registry.json +2 -1
  25. package/dist/node_modules/@mui/system/colorManipulator.js +2 -2
  26. package/dist/node_modules/call-bind/index.js +1 -1
  27. package/dist/node_modules/is-symbol/index.js +1 -1
  28. package/dist/node_modules/react-is/index.js +1 -1
  29. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- var callBind = { exports: {} };
1
+ var isSymbol = { exports: {} };
2
2
  export {
3
- callBind as __module
3
+ isSymbol as __module
4
4
  };
@@ -1,4 +1,4 @@
1
- var isSymbol = { exports: {} };
1
+ var callBind = { exports: {} };
2
2
  export {
3
- isSymbol as __module
3
+ callBind as __module
4
4
  };
@@ -1,6 +1,4 @@
1
- import { getAugmentedNamespace } from "./_commonjsHelpers.js";
2
- import * as index from "../node_modules/@mui/system/node_modules/@mui/utils/esm/formatMuiErrorMessage/index.js";
3
- const require$$1 = /* @__PURE__ */ getAugmentedNamespace(index);
1
+ var reactIs = { exports: {} };
4
2
  export {
5
- require$$1 as default
3
+ reactIs as __module
6
4
  };
@@ -1,6 +1,6 @@
1
1
  import { getAugmentedNamespace } from "./_commonjsHelpers.js";
2
- import * as index from "../node_modules/@mui/system/node_modules/@mui/utils/esm/clamp/index.js";
3
- const require$$2 = /* @__PURE__ */ getAugmentedNamespace(index);
2
+ import * as index from "../node_modules/@mui/system/node_modules/@mui/utils/esm/formatMuiErrorMessage/index.js";
3
+ const require$$1 = /* @__PURE__ */ getAugmentedNamespace(index);
4
4
  export {
5
- require$$2 as default
5
+ require$$1 as default
6
6
  };
@@ -1,4 +1,6 @@
1
- var reactIs = { exports: {} };
1
+ import { getAugmentedNamespace } from "./_commonjsHelpers.js";
2
+ import * as index from "../node_modules/@mui/system/node_modules/@mui/utils/esm/clamp/index.js";
3
+ const require$$2 = /* @__PURE__ */ getAugmentedNamespace(index);
2
4
  export {
3
- reactIs as __module
5
+ require$$2 as default
4
6
  };
@@ -35,6 +35,14 @@ export interface FileUploadProps extends BaseComponentProps {
35
35
  disabled?: boolean;
36
36
  numberOfFiles?: number;
37
37
  validFileTypes?: ValidFileTypeConfig[];
38
+ /** Column labels for template download menu; enables Template Preview grid when set */
39
+ options?: string[];
40
+ /** Initial selected template columns (mapped to camelCase internally) */
41
+ selectedValues?: string[];
42
+ /** Called when the primary template format button is clicked in the options menu (e.g. xlsx) */
43
+ onMenuPrimaryButtonClick?: (fileType: string, selectedColumns: string[]) => void;
44
+ /** Called when the secondary template format button is clicked in the options menu (e.g. csv) */
45
+ onTertiaryButtonClick?: (selectedColumns: string[]) => void;
38
46
  primaryButtonLabel?: ReactNode;
39
47
  secondaryButtonLabel?: ReactNode;
40
48
  onPrimaryButtonClick?: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"FileUpload.types.d.ts","sourceRoot":"","sources":["../../../src/components/FileUpload/FileUpload.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CA2B9C,CAAC;AAEX,eAAO,MAAM,gBAAgB,gEAAiE,CAAC;AAE/F,MAAM,WAAW,eAAgB,SAAQ,kBAAkB;IACzD,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,gBAAgB,EAAE,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;IACnD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACvC,kBAAkB,CAAC,EAAE,SAAS,CAAC;IAC/B,oBAAoB,CAAC,EAAE,SAAS,CAAC;IACjC,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAC;IAClC,sBAAsB,CAAC,EAAE,MAAM,IAAI,CAAC;IACpC,kBAAkB,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1C,oBAAoB,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC5C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,wBAAwB,CAAC,EAAE,SAAS,CAAC;CACtC"}
1
+ {"version":3,"file":"FileUpload.types.d.ts","sourceRoot":"","sources":["../../../src/components/FileUpload/FileUpload.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CA2B9C,CAAC;AAEX,eAAO,MAAM,gBAAgB,gEAAiE,CAAC;AAE/F,MAAM,WAAW,eAAgB,SAAQ,kBAAkB;IACzD,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,gBAAgB,EAAE,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;IACnD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACvC,uFAAuF;IACvF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,yEAAyE;IACzE,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,gGAAgG;IAChG,wBAAwB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACjF,iGAAiG;IACjG,qBAAqB,CAAC,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC5D,kBAAkB,CAAC,EAAE,SAAS,CAAC;IAC/B,oBAAoB,CAAC,EAAE,SAAS,CAAC;IACjC,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAC;IAClC,sBAAsB,CAAC,EAAE,MAAM,IAAI,CAAC;IACpC,kBAAkB,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1C,oBAAoB,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC5C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,wBAAwB,CAAC,EAAE,SAAS,CAAC;CACtC"}
@@ -0,0 +1,9 @@
1
+ interface TemplatePreviewProps {
2
+ selectedColumns: string[];
3
+ }
4
+ export declare function TemplatePreview({ selectedColumns }: TemplatePreviewProps): import("react/jsx-runtime").JSX.Element;
5
+ export declare namespace TemplatePreview {
6
+ var displayName: string;
7
+ }
8
+ export {};
9
+ //# sourceMappingURL=TemplatePreview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemplatePreview.d.ts","sourceRoot":"","sources":["../../../src/components/FileUpload/TemplatePreview.tsx"],"names":[],"mappings":"AAAA,UAAU,oBAAoB;IAC5B,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AASD,wBAAgB,eAAe,CAAC,EAAE,eAAe,EAAE,EAAE,oBAAoB,2CA0CxE;yBA1Ce,eAAe"}
@@ -0,0 +1,31 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ const COLUMN_LETTERS = Array.from({ length: 9 }, (_, i) => String.fromCharCode(65 + i));
3
+ function formatCellLabel(value) {
4
+ if (!value) return "";
5
+ return value.charAt(0).toUpperCase() + value.slice(1);
6
+ }
7
+ function TemplatePreview({ selectedColumns }) {
8
+ return /* @__PURE__ */ jsxs("div", { className: "ia-template-preview", "data-testid": "file-upload-template-preview", children: [
9
+ /* @__PURE__ */ jsx("h3", { className: "ia-template-preview__title", children: "Template Preview" }),
10
+ /* @__PURE__ */ jsx("div", { className: "ia-template-preview__grid-wrapper", children: /* @__PURE__ */ jsxs("table", { className: "ia-template-preview__table", children: [
11
+ /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { children: [
12
+ /* @__PURE__ */ jsx("th", { className: "ia-template-preview__row-header" }),
13
+ COLUMN_LETTERS.map((letter) => /* @__PURE__ */ jsx("th", { className: "ia-template-preview__col-header", children: letter }, letter))
14
+ ] }) }),
15
+ /* @__PURE__ */ jsxs("tbody", { children: [
16
+ /* @__PURE__ */ jsxs("tr", { children: [
17
+ /* @__PURE__ */ jsx("td", { className: "ia-template-preview__row-header", children: "1" }),
18
+ COLUMN_LETTERS.map((_, i) => /* @__PURE__ */ jsx("td", { className: "ia-template-preview__cell", children: selectedColumns[i] ? /* @__PURE__ */ jsx("div", { className: "ia-template-preview__cell-value", children: formatCellLabel(selectedColumns[i] ?? "") }) : null }, i))
19
+ ] }),
20
+ [2, 3].map((row) => /* @__PURE__ */ jsxs("tr", { children: [
21
+ /* @__PURE__ */ jsx("td", { className: "ia-template-preview__row-header", children: row }),
22
+ COLUMN_LETTERS.map((_, i) => /* @__PURE__ */ jsx("td", { className: "ia-template-preview__cell" }, i))
23
+ ] }, row))
24
+ ] })
25
+ ] }) })
26
+ ] });
27
+ }
28
+ TemplatePreview.displayName = "TemplatePreview";
29
+ export {
30
+ TemplatePreview
31
+ };
@@ -0,0 +1,4 @@
1
+ /** Converts display labels (e.g. "Product Name") to camelCase keys for template preview cells */
2
+ export declare function toCamelCase(value: string): string;
3
+ export declare function toCamelCaseLabels(labels: readonly string[] | undefined): string[];
4
+ //# sourceMappingURL=fileUploadUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileUploadUtils.d.ts","sourceRoot":"","sources":["../../../src/components/FileUpload/fileUploadUtils.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAUjD;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,GAAG,MAAM,EAAE,CAEjF"}
@@ -0,0 +1,14 @@
1
+ function toCamelCase(value) {
2
+ return value.trim().split(/\s+/).map((word, index) => {
3
+ const lower = word.toLowerCase();
4
+ if (index === 0) return lower;
5
+ return lower.charAt(0).toUpperCase() + lower.slice(1);
6
+ }).join("");
7
+ }
8
+ function toCamelCaseLabels(labels) {
9
+ return (labels ?? []).map((label) => toCamelCase(label));
10
+ }
11
+ export {
12
+ toCamelCase,
13
+ toCamelCaseLabels
14
+ };
@@ -2,7 +2,7 @@ import { FileUploadProps } from './FileUpload.types';
2
2
 
3
3
  export type { FileUploadProps, FileUploadItem, ValidFileTypeConfig } from './FileUpload.types';
4
4
  export { FILE_TYPE_MIME_MAP, SIZE_CONVENTIONS } from './FileUpload.types';
5
- export declare function FileUpload({ fileList, onFileListChange, disabled, numberOfFiles: numFiles, validFileTypes, primaryButtonLabel, secondaryButtonLabel, onPrimaryButtonClick, primaryButtonProps, onSecondaryButtonClick, secondaryButtonProps, onClose, customFailedActionButton, className, 'data-testid': dataTestId, }: FileUploadProps): import("react/jsx-runtime").JSX.Element;
5
+ export declare function FileUpload({ fileList, onFileListChange, disabled, numberOfFiles: numFiles, validFileTypes, primaryButtonLabel, secondaryButtonLabel, onPrimaryButtonClick, primaryButtonProps, onSecondaryButtonClick, secondaryButtonProps, onClose, customFailedActionButton, options: templateColumnOptions, selectedValues: templateColumnSelections, onMenuPrimaryButtonClick: onTemplateMenuPrimaryClick, onTertiaryButtonClick: onTemplateMenuTertiaryClick, className, 'data-testid': dataTestId, }: FileUploadProps): import("react/jsx-runtime").JSX.Element;
6
6
  export declare namespace FileUpload {
7
7
  var displayName: string;
8
8
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/FileUpload/index.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,eAAe,EAAkB,MAAM,oBAAoB,CAAC;AAC1E,OAAO,0BAA0B,CAAC;AAElC,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC/F,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE1E,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,gBAAgB,EAChB,QAAgB,EAChB,aAAa,EAAE,QAAY,EAC3B,cAA2F,EAC3F,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,OAAO,EACP,wBAAwB,EACxB,SAAS,EACT,aAAa,EAAE,UAAU,GAC1B,EAAE,eAAe,2CAocjB;yBApde,UAAU"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/FileUpload/index.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAkB,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,0BAA0B,CAAC;AAGlC,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC/F,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE1E,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,gBAAgB,EAChB,QAAgB,EAChB,aAAa,EAAE,QAAY,EAC3B,cAA2F,EAC3F,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,OAAO,EACP,wBAAwB,EACxB,OAAO,EAAE,qBAAqB,EAC9B,cAAc,EAAE,wBAAwB,EACxC,wBAAwB,EAAE,0BAA0B,EACpD,qBAAqB,EAAE,2BAA2B,EAClD,SAAS,EACT,aAAa,EAAE,UAAU,GAC1B,EAAE,eAAe,2CAkjBjB;yBAtkBe,UAAU"}
@@ -1,11 +1,14 @@
1
- !function(){"use strict";try{if("undefined"!=typeof document){var e=document.createElement("style");e.appendChild(document.createTextNode(".ia-fileUpload-container{align-items:stretch;background-color:#fff;border-radius:16px;box-shadow:0 0 16px 2px #0000000f;display:flex;flex-direction:column;gap:16px;min-height:274px;padding:16px;width:550px}.ia-fileUpload-container .ia-fileUpload-container-header{align-items:center;display:flex;justify-content:space-between}.ia-fileUpload-container .ia-fileUpload-container-header .ia-fileUpload-container-header-title{display:flex;flex-direction:column;gap:2px}.ia-fileUpload-container .ia-fileUpload-container-header .ia-fileUpload-container-header-title .ia-fileUpload-container-header-title-primary{color:#0d152c;font-family:Manrope,sans-serif;font-size:16px;font-weight:800;line-height:24px}.ia-fileUpload-container .ia-fileUpload-container-header .ia-fileUpload-container-header-title .ia-fileUpload-container-header-title-secondary{color:#7a8294;font-family:Manrope,sans-serif;font-size:14px;font-weight:500;line-height:20px}.ia-fileUpload-container .ia-fileUpload-container-header .ia-fileUpload-container-header-closeIcon{color:#60697d;cursor:pointer}.ia-fileUpload{align-items:center;background-color:initial;background-position:50% 24px;background-repeat:no-repeat;background-size:55px;border:1px dashed #b3bdf8;border-radius:8px;display:flex;flex-direction:column;gap:8px;height:148px;justify-content:flex-end;margin:auto;padding:24px 16px;position:relative;width:100%}.ia-fileUpload input{height:calc(2px + 100%);left:-1px;opacity:0;position:absolute;top:-1px;width:calc(2px + 100%)}.ia-fileUpload .ia-fileUpload-label{color:#1f2b4d;font-size:14px;font-weight:500;line-height:20px;text-align:center}.ia-fileUpload.ia-fileUpload-error{background-position:50% 24px;background-size:55px;border:1px solid #e15554;box-shadow:inset 0 0 20px #e155541f}.ia-fileUpload.ia-fileUpload-error .ia-fileUpload-label{color:#e15554}.ia-fileUpload.ia-fileUpload-disabled{opacity:.5;pointer-events:none}.ia-fileUpload.ia-fileUpload-dragOver{background:none;border:1px solid #4259ee;box-shadow:inset 0 0 96px 23px #4259ee24;justify-content:center}.ia-fileUpload.ia-fileUpload-dragOver .ia-fileUpload-dragOverLabel{color:#1f2b4d;font-family:Manrope,sans-serif;font-size:14px;font-weight:700;line-height:21px}.ia-fileUpload .ia-fileUpload-label-secondary{color:#7a8294;font-size:12px;font-weight:500;line-height:16px;text-align:center}.ia-fileUpload .ia-fileUpload-label-primary,.ia-fileUpload-validFileType{align-items:center;display:flex;gap:4px}.ia-fileUpload-validFileType{color:#60697d;font-size:14px;font-weight:500;height:16px;line-height:16.1px}.ia-fileUpload-validFileType .ia-fileUpload-validFileType-container{position:relative}.ia-fileUpload-validFileType .ia-fileUpload-validFileType-container .ia-fileUpload-validFileType-arrow{cursor:pointer;height:11px;margin-top:2px;width:11px}.ia-fileUpload-validFileType .ia-fileUpload-validFileType-container .ia-fileUpload-validFileType-arrow.rotate{transform:rotate(180deg)}.ia-fileUpload-validFileType .ia-fileUpload-validFileType-menu{background-color:#fff;border-radius:8px;bottom:32px;box-shadow:0 0 4px #0000001f;display:flex;flex-direction:column;gap:5px;left:0;padding-bottom:16px;padding-top:16px;position:absolute;width:100px;z-index:99}.ia-fileUpload-validFileType .ia-fileUpload-validFileType-menu .ia-fileUpload-validFileType-menu-item{align-items:center;color:#1f2b4d;cursor:pointer;display:flex;font-size:14px;font-weight:500;height:25px;line-height:20px;padding-left:18px;text-align:left}.ia-fileUpload-validFileType .ia-fileUpload-validFileType-menu .ia-fileUpload-validFileType-menu-item:hover{background-color:#f5f6fa}.ia-fileUpload-previewItem{align-items:stretch;border:1px solid #e7e7e7;border-radius:12px;display:flex;flex-direction:column;gap:8px;justify-content:space-between;padding:16px}.ia-fileUpload-previewItem img{max-height:36px;max-width:36px}.ia-fileUpload-previewItem .ia-fileUpload-previewItem-exceptProgress{display:flex;gap:8px;justify-content:space-between;z-index:99}.ia-fileUpload-previewItem .ia-fileUpload-previewItem-exceptProgress .ia-fileUpload-previewItem-details{display:flex;gap:8px}.ia-fileUpload-previewItem .ia-fileUpload-previewItem-exceptProgress .ia-fileUpload-previewItem-details .ia-fileUpload-previewItemIcon{background-repeat:no-repeat;height:36px;width:36px}.ia-fileUpload-previewItem .ia-fileUpload-previewItem-exceptProgress .ia-fileUpload-previewItem-details .ia-fileUpload-previewItem-info{display:flex;flex-direction:column;gap:2px;justify-content:space-between}.ia-fileUpload-previewItem .ia-fileUpload-previewItem-exceptProgress .ia-fileUpload-previewItem-details .ia-fileUpload-previewItem-info .ia-fileUpload-previewItem-name{color:#0b0b0b;font-size:12px;font-weight:700;line-height:18px}.ia-fileUpload-previewItem .ia-fileUpload-previewItem-exceptProgress .ia-fileUpload-previewItem-details .ia-fileUpload-previewItem-info .ia-fileUpload-previewItem-name.ia-fileUpload-previewItem-name-failed{color:#7a8294}.ia-fileUpload-previewItem .ia-fileUpload-previewItem-exceptProgress .ia-fileUpload-previewItem-details .ia-fileUpload-previewItem-info .ia-fileUpload-previewItem-size{color:#6d6d6d;font-size:12px;font-weight:500;line-height:16px}.ia-fileUpload-previewItem .ia-fileUpload-previewItem-exceptProgress .ia-fileUpload-previewItem-details .ia-fileUpload-previewItem-info .ia-fileUpload-previewItem-size.uploadFailed{color:#e15554}.ia-fileUpload-previewItem .ia-fileUpload-previewItem-exceptProgress .ia-fileUpload-previewItem-details .ia-fileUpload-previewItem-info .ia-fileUpload-previewItem-size.uploading{color:#0000}.ia-fileUpload-previewItem .ia-fileUpload-previewItem-exceptProgress .ia-fileUpload-previewItem-details .ia-fileUpload-previewItem-info .ia-fileUpload-previewItem-size.disabled{color:#7a8294}.ia-fileUpload-previewItem .ia-fileUpload-previewItem-exceptProgress .ia-fileUpload-previewItem-actions{align-items:center;display:flex;gap:14px}.ia-fileUpload-previewItem .ia-fileUpload-previewItem-exceptProgress .ia-fileUpload-previewItem-actions .ia-fileUpload-previewItem-action{color:#4259ee;cursor:pointer}.ia-fileUpload-previewItem .ia-fileUpload-previewItem-exceptProgress .ia-fileUpload-previewItem-actions .ia-fileUpload-previewItem-action.removeIcon{color:#60697d}.ia-fileUpload-previewItem .ia-fileUpload-progress .progressbar_layout{margin:0}.ia-fileUpload-previewItem .ia-fileUpload-progress .progressbar_label_container{margin:-24px 0 8px}.ia-fileUpload-actions{display:flex;gap:16px;justify-content:flex-end}")),document.head.appendChild(e)}}catch(i){console.error("vite-plugin-css-injected-by-js",i)}}();
1
+ !function(){"use strict";try{if("undefined"!=typeof document){var e=document.createElement("style");e.appendChild(document.createTextNode(".ia-fileUpload-container{align-items:stretch;background-color:#fff;border-radius:16px;box-shadow:0 0 16px 2px #0000000f;display:flex;flex-direction:column;gap:16px;min-height:274px;padding:16px;width:550px}.ia-fileUpload-container .ia-fileUpload-container-header{align-items:center;display:flex;justify-content:space-between}.ia-fileUpload-container .ia-fileUpload-container-header .ia-fileUpload-container-header-title{display:flex;flex-direction:column;gap:2px}.ia-fileUpload-container .ia-fileUpload-container-header .ia-fileUpload-container-header-title .ia-fileUpload-container-header-title-primary{color:#0d152c;font-family:Manrope,sans-serif;font-size:16px;font-weight:800;line-height:24px}.ia-fileUpload-container .ia-fileUpload-container-header .ia-fileUpload-container-header-title .ia-fileUpload-container-header-title-secondary{color:#7a8294;font-family:Manrope,sans-serif;font-size:14px;font-weight:500;line-height:20px}.ia-fileUpload-container .ia-fileUpload-container-header .ia-fileUpload-container-header-closeIcon{color:#60697d;cursor:pointer}.ia-fileUpload{align-items:center;background-color:initial;background-position:50% 24px;background-repeat:no-repeat;background-size:55px;border:1px dashed #b3bdf8;border-radius:8px;display:flex;flex-direction:column;gap:8px;height:148px;justify-content:flex-end;margin:auto;padding:24px 16px;position:relative;width:100%}.ia-fileUpload input{height:calc(2px + 100%);left:-1px;opacity:0;position:absolute;top:-1px;width:calc(2px + 100%)}.ia-fileUpload .ia-fileUpload-label{color:#1f2b4d;font-size:14px;font-weight:500;line-height:20px;text-align:center}.ia-fileUpload.ia-fileUpload-error{background-position:50% 24px;background-size:55px;border:1px solid #e15554;box-shadow:inset 0 0 20px #e155541f}.ia-fileUpload.ia-fileUpload-error .ia-fileUpload-label{color:#e15554}.ia-fileUpload.ia-fileUpload-disabled{opacity:.5;pointer-events:none}.ia-fileUpload.ia-fileUpload-dragOver{background:none;border:1px solid #4259ee;box-shadow:inset 0 0 96px 23px #4259ee24;justify-content:center}.ia-fileUpload.ia-fileUpload-dragOver .ia-fileUpload-dragOverLabel{color:#1f2b4d;font-family:Manrope,sans-serif;font-size:14px;font-weight:700;line-height:21px}.ia-fileUpload .ia-fileUpload-label-secondary{color:#7a8294;font-size:12px;font-weight:500;line-height:16px;text-align:center}.ia-fileUpload .ia-fileUpload-label-primary,.ia-fileUpload-validFileType{align-items:center;display:flex;gap:4px}.ia-fileUpload-validFileType{color:#60697d;font-size:14px;font-weight:500;height:16px;line-height:16.1px}.ia-fileUpload-validFileType .ia-fileUpload-validFileType-container{position:relative}.ia-fileUpload-validFileType .ia-fileUpload-validFileType-container .ia-fileUpload-validFileType-arrow{cursor:pointer;height:11px;margin-top:2px;width:11px}.ia-fileUpload-validFileType .ia-fileUpload-validFileType-container .ia-fileUpload-validFileType-arrow.rotate{transform:rotate(180deg)}.ia-fileUpload-validFileType .ia-fileUpload-validFileType-menu{background-color:#fff;border-radius:8px;bottom:32px;box-shadow:0 0 4px #0000001f;display:flex;flex-direction:column;gap:5px;left:0;padding-bottom:16px;padding-top:16px;position:absolute;width:100px;z-index:99}.ia-fileUpload-validFileType .ia-fileUpload-validFileType-menu .ia-fileUpload-validFileType-menu-item{align-items:center;color:#1f2b4d;cursor:pointer;display:flex;font-size:14px;font-weight:500;height:25px;line-height:20px;padding-left:18px;text-align:left}.ia-fileUpload-validFileType .ia-fileUpload-validFileType-menu .ia-fileUpload-validFileType-menu-item:hover{background-color:#f5f6fa}.ia-fileUpload-previewItem{align-items:stretch;border:1px solid #e7e7e7;border-radius:12px;display:flex;flex-direction:column;gap:8px;justify-content:space-between;padding:16px}.ia-fileUpload-previewItem img{max-height:36px;max-width:36px}.ia-fileUpload-previewItem .ia-fileUpload-previewItem-exceptProgress{display:flex;gap:8px;justify-content:space-between;z-index:99}.ia-fileUpload-previewItem .ia-fileUpload-previewItem-exceptProgress .ia-fileUpload-previewItem-details{display:flex;gap:8px}.ia-fileUpload-previewItem .ia-fileUpload-previewItem-exceptProgress .ia-fileUpload-previewItem-details .ia-fileUpload-previewItemIcon{background-repeat:no-repeat;height:36px;width:36px}.ia-fileUpload-previewItem .ia-fileUpload-previewItem-exceptProgress .ia-fileUpload-previewItem-details .ia-fileUpload-previewItem-info{display:flex;flex-direction:column;gap:2px;justify-content:space-between}.ia-fileUpload-previewItem .ia-fileUpload-previewItem-exceptProgress .ia-fileUpload-previewItem-details .ia-fileUpload-previewItem-info .ia-fileUpload-previewItem-name{color:#0b0b0b;font-size:12px;font-weight:700;line-height:18px}.ia-fileUpload-previewItem .ia-fileUpload-previewItem-exceptProgress .ia-fileUpload-previewItem-details .ia-fileUpload-previewItem-info .ia-fileUpload-previewItem-name.ia-fileUpload-previewItem-name-failed{color:#7a8294}.ia-fileUpload-previewItem .ia-fileUpload-previewItem-exceptProgress .ia-fileUpload-previewItem-details .ia-fileUpload-previewItem-info .ia-fileUpload-previewItem-size{color:#6d6d6d;font-size:12px;font-weight:500;line-height:16px}.ia-fileUpload-previewItem .ia-fileUpload-previewItem-exceptProgress .ia-fileUpload-previewItem-details .ia-fileUpload-previewItem-info .ia-fileUpload-previewItem-size.uploadFailed{color:#e15554}.ia-fileUpload-previewItem .ia-fileUpload-previewItem-exceptProgress .ia-fileUpload-previewItem-details .ia-fileUpload-previewItem-info .ia-fileUpload-previewItem-size.uploading{color:#0000}.ia-fileUpload-previewItem .ia-fileUpload-previewItem-exceptProgress .ia-fileUpload-previewItem-details .ia-fileUpload-previewItem-info .ia-fileUpload-previewItem-size.disabled{color:#7a8294}.ia-fileUpload-previewItem .ia-fileUpload-previewItem-exceptProgress .ia-fileUpload-previewItem-actions{align-items:center;display:flex;gap:14px}.ia-fileUpload-previewItem .ia-fileUpload-previewItem-exceptProgress .ia-fileUpload-previewItem-actions .ia-fileUpload-previewItem-action{color:#4259ee;cursor:pointer}.ia-fileUpload-previewItem .ia-fileUpload-previewItem-exceptProgress .ia-fileUpload-previewItem-actions .ia-fileUpload-previewItem-action.removeIcon{color:#60697d}.ia-fileUpload-previewItem .ia-fileUpload-progress .progressbar_layout{margin:0}.ia-fileUpload-previewItem .ia-fileUpload-progress .progressbar_label_container{margin:-24px 0 8px}.ia-fileUpload-actions{display:flex;gap:16px;justify-content:flex-end}.ia-fileUpload-validFileType-menu .MuiPaper-root{min-width:226px}.ia-fileUpload-validFileType-menu .MuiPaper-root .ia-btn-icon{margin-bottom:0}.ia-template-preview{background-color:#f5f6fa;border-radius:8px;box-shadow:0 0 16px 2px #0000000f;padding:12px}.ia-template-preview .ia-template-preview__title{color:#0d152c;font-size:14px;font-weight:800;line-height:21px;margin:0 0 10px}.ia-template-preview .ia-template-preview__grid-wrapper{border:1px solid #d9dde7;border-radius:4px;overflow-x:auto}.ia-template-preview .ia-template-preview__table{background-color:#fff;border-collapse:collapse;table-layout:fixed;width:100%}.ia-template-preview .ia-template-preview__table td,.ia-template-preview .ia-template-preview__table th{border:1px solid #d9dde7;font-size:12px;line-height:20px;padding:0;text-align:center}.ia-template-preview .ia-template-preview__col-header,.ia-template-preview .ia-template-preview__row-header{background-color:#f3f4f6;color:#6b7280;font-size:12px;font-weight:500}.ia-template-preview .ia-template-preview__row-header{max-width:28px;min-width:28px!important;width:28px}.ia-template-preview .ia-template-preview__cell{background-color:#fff}.ia-template-preview .ia-template-preview__cell-value{color:#0d152c;font-size:12px;font-weight:600;overflow:hidden;padding-inline:2px;text-overflow:ellipsis;white-space:nowrap}")),document.head.appendChild(e)}}catch(i){console.error("vite-plugin-css-injected-by-js",i)}}();
2
2
  import { jsxs, jsx, Fragment } from "react/jsx-runtime";
3
3
  import { useRef, useState, useEffect, useCallback, useMemo } from "react";
4
4
  import default_1 from "../../node_modules/@mui/icons-material/Clear.js";
5
5
  import { Button } from "../Button/index.js";
6
+ import { Menu } from "../Menu/index.js";
6
7
  import { ProgressBar } from "../ProgressBar/index.js";
7
8
  import { FILE_TYPE_MIME_MAP, SIZE_CONVENTIONS } from "./FileUpload.types.js";
8
9
  import { loadFileUploadAssets } from "./fileUploadAssets.loader.js";
10
+ import { TemplatePreview } from "./TemplatePreview.js";
11
+ import { useFileUploadTemplateState } from "./useFileUploadTemplateState.js";
9
12
 
10
13
  function FileUpload({
11
14
  fileList,
@@ -21,6 +24,10 @@ function FileUpload({
21
24
  secondaryButtonProps,
22
25
  onClose,
23
26
  customFailedActionButton,
27
+ options: templateColumnOptions,
28
+ selectedValues: templateColumnSelections,
29
+ onMenuPrimaryButtonClick: onTemplateMenuPrimaryClick,
30
+ onTertiaryButtonClick: onTemplateMenuTertiaryClick,
24
31
  className,
25
32
  "data-testid": dataTestId
26
33
  }) {
@@ -32,7 +39,22 @@ function FileUpload({
32
39
  const [isError, setIsError] = useState(false);
33
40
  const [isDraggedOver, setIsDraggedOver] = useState(false);
34
41
  const [showDownLoadMenu, setShowDownLoadMenu] = useState(false);
42
+ const [isOpen, setIsOpen] = useState(false);
43
+ const [anchorEl, setAnchorEl] = useState(null);
35
44
  const numberOfFiles = numFiles >= 1 ? Math.floor(numFiles) : 1;
45
+ const {
46
+ selected,
47
+ hasTemplateOptions,
48
+ menuOptions,
49
+ handleMenuSelectionChange,
50
+ handleMenuPrimaryClick,
51
+ handleMenuTertiaryClick
52
+ } = useFileUploadTemplateState({
53
+ options: templateColumnOptions,
54
+ selectedValues: templateColumnSelections,
55
+ onMenuPrimaryButtonClick: onTemplateMenuPrimaryClick,
56
+ onTertiaryButtonClick: onTemplateMenuTertiaryClick
57
+ });
36
58
  const [assets, setAssets] = useState(null);
37
59
  useEffect(() => {
38
60
  void loadFileUploadAssets().then(setAssets);
@@ -126,6 +148,17 @@ function FileUpload({
126
148
  if (!Array.isArray(validFileTypes)) return null;
127
149
  return validFileTypes.find((vft) => vft.templateDownloader) ?? null;
128
150
  }, [validFileTypes]);
151
+ const selectedFileType = useMemo(() => {
152
+ var _a2, _b;
153
+ return ((_a2 = validFileTypes.find((vft) => vft.fileType === "xlsx")) == null ? void 0 : _a2.fileType) ?? ((_b = validFileTypes[0]) == null ? void 0 : _b.fileType) ?? "xlsx";
154
+ }, [validFileTypes]);
155
+ const tertiaryFileType = useMemo(() => {
156
+ var _a2;
157
+ return (_a2 = validFileTypes.find((vft) => vft.fileType !== "xlsx")) == null ? void 0 : _a2.fileType;
158
+ }, [validFileTypes]);
159
+ const handleMenuClose = useCallback(() => {
160
+ setIsOpen(false);
161
+ }, []);
129
162
  const handleTemplateDownloadMenu = useCallback(() => {
130
163
  setShowDownLoadMenu((prev) => !prev);
131
164
  }, []);
@@ -133,16 +166,32 @@ function FileUpload({
133
166
  const target = event.target;
134
167
  if (!target.closest(".ia-fileUpload-validFileType-container") && !target.closest(".ia-fileUpload-validFileType-menu-item")) {
135
168
  setShowDownLoadMenu(false);
169
+ setIsOpen(false);
136
170
  }
137
171
  }, []);
138
172
  useEffect(() => {
173
+ const handleEscape = (event) => {
174
+ if (event.key === "Escape") {
175
+ setShowDownLoadMenu(false);
176
+ }
177
+ };
139
178
  if (showDownLoadMenu) {
140
179
  document.addEventListener("click", handleClickOutside);
180
+ document.addEventListener("keydown", handleEscape);
141
181
  }
142
182
  return () => {
143
183
  document.removeEventListener("click", handleClickOutside);
184
+ document.removeEventListener("keydown", handleEscape);
144
185
  };
145
186
  }, [showDownLoadMenu, handleClickOutside]);
187
+ useEffect(() => {
188
+ if (isOpen) {
189
+ document.addEventListener("click", handleClickOutside);
190
+ }
191
+ return () => {
192
+ document.removeEventListener("click", handleClickOutside);
193
+ };
194
+ }, [isOpen, handleClickOutside]);
146
195
  return /* @__PURE__ */ jsxs(
147
196
  "div",
148
197
  {
@@ -246,15 +295,27 @@ function FileUpload({
246
295
  /* @__PURE__ */ jsxs(
247
296
  "div",
248
297
  {
298
+ "aria-expanded": validFileTypes.length > 1 || templateColumnOptions ? showDownLoadMenu || isOpen : void 0,
299
+ "aria-haspopup": validFileTypes.length > 1 || templateColumnOptions ? "menu" : void 0,
300
+ "aria-label": "Download template",
249
301
  role: "button",
250
302
  style: { display: "flex", alignItems: "center", gap: "4px" },
251
303
  tabIndex: 0,
252
- onClick: validFileTypes.length > 1 ? handleTemplateDownloadMenu : templateDownloader.templateDownloader,
304
+ onClick: (e) => {
305
+ var _a2;
306
+ setIsOpen(true);
307
+ setAnchorEl(e.currentTarget);
308
+ if (validFileTypes.length > 1 || templateColumnOptions) {
309
+ handleTemplateDownloadMenu();
310
+ } else {
311
+ (_a2 = templateDownloader.templateDownloader) == null ? void 0 : _a2.call(templateDownloader);
312
+ }
313
+ },
253
314
  onKeyDown: (e) => {
254
315
  var _a2;
255
316
  if (e.key === "Enter" || e.key === " ") {
256
317
  e.preventDefault();
257
- if (validFileTypes.length > 1) {
318
+ if (validFileTypes.length > 1 || templateColumnOptions) {
258
319
  handleTemplateDownloadMenu();
259
320
  } else {
260
321
  (_a2 = templateDownloader.templateDownloader) == null ? void 0 : _a2.call(templateDownloader);
@@ -262,33 +323,69 @@ function FileUpload({
262
323
  }
263
324
  },
264
325
  children: [
265
- /* @__PURE__ */ jsx(Button, { "data-fileUpload": "templateDownload", variant: "url", children: "Download template" }),
326
+ /* @__PURE__ */ jsx(Button, { "data-fileUpload": "templateDownload", tabIndex: -1, variant: "url", children: "Download template" }),
266
327
  assets && /* @__PURE__ */ jsx(
267
328
  "img",
268
329
  {
269
330
  alt: "",
270
- className: `ia-fileUpload-validFileType-arrow ${validFileTypes.length > 1 && showDownLoadMenu ? "rotate" : ""}`,
271
- src: validFileTypes.length > 1 ? assets.downArrow : assets.uploadDownloadIcon
331
+ "aria-hidden": "true",
332
+ className: `ia-fileUpload-validFileType-arrow ${(validFileTypes.length > 1 || templateColumnOptions) && showDownLoadMenu ? "rotate" : ""}`,
333
+ src: validFileTypes.length > 1 || templateColumnOptions ? assets.downArrow : assets.uploadDownloadIcon
334
+ }
335
+ ),
336
+ templateColumnOptions && isOpen && /* @__PURE__ */ jsx(
337
+ Menu,
338
+ {
339
+ withActionButtons: true,
340
+ withCheckbox: true,
341
+ anchorEl,
342
+ customHeaderProps: {
343
+ onSelectionChange: handleMenuSelectionChange,
344
+ selectedItems: selected
345
+ },
346
+ iconPlacement: "left",
347
+ menuContainerClassName: "ia-fileUpload-validFileType-menu",
348
+ MenuProps: {
349
+ anchorOrigin: {
350
+ vertical: "top",
351
+ horizontal: "left"
352
+ },
353
+ transformOrigin: {
354
+ vertical: "bottom",
355
+ horizontal: "left"
356
+ }
357
+ },
358
+ open: isOpen,
359
+ options: menuOptions,
360
+ primaryButtonProps: { label: selectedFileType },
361
+ tertiaryButtonLabel: tertiaryFileType,
362
+ onClose: handleMenuClose,
363
+ onPrimaryButtonClick: () => {
364
+ handleMenuPrimaryClick(selectedFileType);
365
+ },
366
+ onTertiaryButtonClick: handleMenuTertiaryClick
272
367
  }
273
368
  )
274
369
  ]
275
370
  }
276
371
  ),
277
- showDownLoadMenu && /* @__PURE__ */ jsx("div", { className: "ia-fileUpload-validFileType-menu", children: validFileTypes.map((vft) => /* @__PURE__ */ jsx(
372
+ showDownLoadMenu && !templateColumnOptions && /* @__PURE__ */ jsx("div", { className: "ia-fileUpload-validFileType-menu", role: "menu", children: validFileTypes.map((vft) => /* @__PURE__ */ jsx(
278
373
  "span",
279
374
  {
280
375
  className: "ia-fileUpload-validFileType-menu-item",
281
- role: "button",
376
+ role: "menuitem",
282
377
  tabIndex: 0,
283
378
  onClick: () => {
284
379
  var _a2;
285
- return (_a2 = vft.templateDownloader) == null ? void 0 : _a2.call(vft);
380
+ (_a2 = vft.templateDownloader) == null ? void 0 : _a2.call(vft);
381
+ setShowDownLoadMenu(false);
286
382
  },
287
383
  onKeyDown: (e) => {
288
384
  var _a2;
289
385
  if (e.key === "Enter" || e.key === " ") {
290
386
  e.preventDefault();
291
387
  (_a2 = vft.templateDownloader) == null ? void 0 : _a2.call(vft);
388
+ setShowDownLoadMenu(false);
292
389
  }
293
390
  },
294
391
  children: `.${vft.fileType}`
@@ -297,6 +394,7 @@ function FileUpload({
297
394
  )) })
298
395
  ] })
299
396
  ] }) : null,
397
+ hasTemplateOptions && templateDownloader ? /* @__PURE__ */ jsx(TemplatePreview, { selectedColumns: selected }) : null,
300
398
  fileList.map((item) => {
301
399
  let fileSize = item.file.size;
302
400
  let i = 0;
@@ -0,0 +1,14 @@
1
+ import { MenuOption } from '../Menu';
2
+ import { FileUploadProps } from './FileUpload.types';
3
+
4
+ type FileUploadTemplateProps = Pick<FileUploadProps, 'options' | 'selectedValues' | 'onMenuPrimaryButtonClick' | 'onTertiaryButtonClick'>;
5
+ export declare function useFileUploadTemplateState({ options: templateColumnOptions, selectedValues: templateColumnSelections, onMenuPrimaryButtonClick: onTemplateMenuPrimaryClick, onTertiaryButtonClick: onTemplateMenuTertiaryClick, }: FileUploadTemplateProps): {
6
+ selected: string[];
7
+ hasTemplateOptions: boolean;
8
+ menuOptions: MenuOption[];
9
+ handleMenuSelectionChange: (items: string[]) => void;
10
+ handleMenuPrimaryClick: (selectedFileType: string) => void;
11
+ handleMenuTertiaryClick: () => void;
12
+ };
13
+ export {};
14
+ //# sourceMappingURL=useFileUploadTemplateState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFileUploadTemplateState.d.ts","sourceRoot":"","sources":["../../../src/components/FileUpload/useFileUploadTemplateState.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,KAAK,uBAAuB,GAAG,IAAI,CACjC,eAAe,EACf,SAAS,GAAG,gBAAgB,GAAG,0BAA0B,GAAG,uBAAuB,CACpF,CAAC;AAEF,wBAAgB,0BAA0B,CAAC,EACzC,OAAO,EAAE,qBAAqB,EAC9B,cAAc,EAAE,wBAAwB,EACxC,wBAAwB,EAAE,0BAA0B,EACpD,qBAAqB,EAAE,2BAA2B,GACnD,EAAE,uBAAuB;;;;uCAmB8B,MAAM,EAAE;+CAKzC,MAAM;;EAkB5B"}
@@ -0,0 +1,46 @@
1
+ import { useState, useMemo, useEffect, useCallback } from "react";
2
+ import { toCamelCaseLabels, toCamelCase } from "./fileUploadUtils.js";
3
+ function useFileUploadTemplateState({
4
+ options: templateColumnOptions,
5
+ selectedValues: templateColumnSelections,
6
+ onMenuPrimaryButtonClick: onTemplateMenuPrimaryClick,
7
+ onTertiaryButtonClick: onTemplateMenuTertiaryClick
8
+ }) {
9
+ const [selected, setSelected] = useState(
10
+ () => toCamelCaseLabels(templateColumnSelections)
11
+ );
12
+ const hasTemplateOptions = ((templateColumnOptions == null ? void 0 : templateColumnOptions.length) ?? 0) > 0;
13
+ const menuOptions = useMemo(() => {
14
+ if (!templateColumnOptions) return [];
15
+ return templateColumnOptions.map((item) => ({
16
+ label: item,
17
+ value: toCamelCase(item)
18
+ }));
19
+ }, [templateColumnOptions]);
20
+ useEffect(() => {
21
+ setSelected(toCamelCaseLabels(templateColumnSelections));
22
+ }, [templateColumnSelections]);
23
+ const handleMenuSelectionChange = useCallback((items) => {
24
+ setSelected(items);
25
+ }, []);
26
+ const handleMenuPrimaryClick = useCallback(
27
+ (selectedFileType) => {
28
+ onTemplateMenuPrimaryClick == null ? void 0 : onTemplateMenuPrimaryClick(selectedFileType, selected);
29
+ },
30
+ [onTemplateMenuPrimaryClick, selected]
31
+ );
32
+ const handleMenuTertiaryClick = useCallback(() => {
33
+ onTemplateMenuTertiaryClick == null ? void 0 : onTemplateMenuTertiaryClick(selected);
34
+ }, [onTemplateMenuTertiaryClick, selected]);
35
+ return {
36
+ selected,
37
+ hasTemplateOptions,
38
+ menuOptions,
39
+ handleMenuSelectionChange,
40
+ handleMenuPrimaryClick,
41
+ handleMenuTertiaryClick
42
+ };
43
+ }
44
+ export {
45
+ useFileUploadTemplateState
46
+ };
@@ -78,8 +78,10 @@ export interface MenuProps extends BaseComponentProps {
78
78
  withActionButtons?: boolean;
79
79
  /** Called when Apply is clicked */
80
80
  onPrimaryButtonClick?: () => void;
81
- /** Called when Cancel is clicked */
81
+ /** Called when the tertiary (left) action button is clicked */
82
82
  onTertiaryButtonClick?: () => void;
83
+ /** Label for the tertiary action button (defaults to "Cancel") */
84
+ tertiaryButtonLabel?: string;
83
85
  /** Unused; kept for API compat */
84
86
  withSection?: boolean;
85
87
  /** Single selected value (highlights one item when withCheckbox is false) */
@@ -1 +1 @@
1
- {"version":3,"file":"Menu.types.d.ts","sourceRoot":"","sources":["../../../src/components/Menu/Menu.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Menu.types.d.ts","sourceRoot":"","sources":["../../../src/components/Menu/Menu.types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Menu/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAI/D,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,IAAI,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,oBAAoB,CAAC;AAE5B,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAElE;;;;GAIG;AACH,eAAO,MAAM,IAAI,uHA0NhB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Menu/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAI/D,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,IAAI,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,oBAAoB,CAAC;AAE5B,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAElE;;;;GAIG;AACH,eAAO,MAAM,IAAI,uHA2NhB,CAAC"}
@@ -20,6 +20,7 @@ const Menu = forwardRef(
20
20
  },
21
21
  onTertiaryButtonClick = () => {
22
22
  },
23
+ tertiaryButtonLabel,
23
24
  anchorEl,
24
25
  open,
25
26
  selected,
@@ -149,7 +150,7 @@ const Menu = forwardRef(
149
150
  renderHeader(),
150
151
  isLoading ? renderLoadingState() : isSearching ? renderSearchingState() : hasEmptySearch ? renderEmptySearchState() : hasNoInitialData ? renderNoDataState() : /* @__PURE__ */ jsx("div", { className: "menu-scroll-area", children: menuItems }),
151
152
  withActionButtons && withCheckbox && !isLoading && !isSearching && ((data == null ? void 0 : data.length) ?? 0) > 0 && /* @__PURE__ */ jsx("div", { className: "bottom_action", children: /* @__PURE__ */ jsxs("div", { className: "ia-menu-action-button-container", children: [
152
- /* @__PURE__ */ jsx(Button, { variant: "tertiary", onClick: onTertiaryButtonClick, children: "Cancel" }),
153
+ /* @__PURE__ */ jsx(Button, { variant: "tertiary", onClick: onTertiaryButtonClick, children: tertiaryButtonLabel ?? "Cancel" }),
153
154
  /* @__PURE__ */ jsx(
154
155
  Button,
155
156
  {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 1,
3
- "generatedAt": "2026-06-15T08:44:22.119Z",
3
+ "generatedAt": "2026-06-15T10:52:01.103Z",
4
4
  "components": {
5
5
  "Accordion": {
6
6
  "title": "Components/Accordion",
@@ -1282,6 +1282,7 @@
1282
1282
  "Disabled",
1283
1283
  "WithTemplateDownload",
1284
1284
  "WithTemplateDownloadMenu",
1285
+ "WithTemplatePreview",
1285
1286
  "WithFileUploading",
1286
1287
  "WithFailedFile",
1287
1288
  "WithFailedMessageAndCustomAction",
@@ -1,7 +1,7 @@
1
1
  import { __exports as colorManipulator } from "../../../_virtual/colorManipulator.js";
2
2
  import require$$0 from "@babel/runtime/helpers/interopRequireDefault";
3
- import require$$1 from "../../../_virtual/index3.js";
4
- import require$$2 from "../../../_virtual/index4.js";
3
+ import require$$1 from "../../../_virtual/index4.js";
4
+ import require$$2 from "../../../_virtual/index5.js";
5
5
  var _interopRequireDefault = require$$0;
6
6
  Object.defineProperty(colorManipulator, "__esModule", {
7
7
  value: true
@@ -1,4 +1,4 @@
1
- import { __module as callBind } from "../../_virtual/index14.js";
1
+ import { __module as callBind } from "../../_virtual/index15.js";
2
2
  import { __require as requireSetFunctionLength } from "../set-function-length/index.js";
3
3
  import { __require as requireEsDefineProperty } from "../es-define-property/index.js";
4
4
  import { __require as requireCallBindApplyHelpers } from "../call-bind-apply-helpers/index.js";
@@ -1,4 +1,4 @@
1
- import { __module as isSymbol } from "../../_virtual/index15.js";
1
+ import { __module as isSymbol } from "../../_virtual/index14.js";
2
2
  import { __require as requireCallBound } from "../call-bound/index.js";
3
3
  import { __require as requireHasSymbols } from "../has-symbols/index.js";
4
4
  import { __require as requireSafeRegexTest } from "../safe-regex-test/index.js";
@@ -1,4 +1,4 @@
1
- import { __module as reactIs } from "../../_virtual/index5.js";
1
+ import { __module as reactIs } from "../../_virtual/index3.js";
2
2
  import { __require as requireReactIs_production } from "./cjs/react-is.production.js";
3
3
  import { __require as requireReactIs_development } from "./cjs/react-is.development.js";
4
4
  if (process.env.NODE_ENV === "production") {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "impact-ui",
3
- "version": "4.0.0-alpha.13",
3
+ "version": "4.0.0-alpha.14",
4
4
  "description": "Impact Analytics UI library",
5
5
  "type": "module",
6
6
  "main": "./dist/components/index.js",