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

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 (143) 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/Accordion/index.d.ts.map +1 -1
  7. package/dist/components/Accordion/index.js +43 -30
  8. package/dist/components/Alert/index.js +1 -1
  9. package/dist/components/Breadcrumbs/index.d.ts +1 -1
  10. package/dist/components/Breadcrumbs/index.d.ts.map +1 -1
  11. package/dist/components/Breadcrumbs/index.js +8 -1
  12. package/dist/components/ButtonGroup/index.d.ts +1 -1
  13. package/dist/components/ButtonGroup/index.d.ts.map +1 -1
  14. package/dist/components/ButtonGroup/index.js +4 -0
  15. package/dist/components/Chart/Chart.types.d.ts +2 -2
  16. package/dist/components/Chart/index.d.ts +1 -1
  17. package/dist/components/Chart/index.d.ts.map +1 -1
  18. package/dist/components/Chart/index.js +7 -1
  19. package/dist/components/Chatbot/index.d.ts.map +1 -1
  20. package/dist/components/Chatbot/index.js +9 -6
  21. package/dist/components/Checkbox/Checkbox.types.d.ts +2 -0
  22. package/dist/components/Checkbox/Checkbox.types.d.ts.map +1 -1
  23. package/dist/components/Checkbox/Default.d.ts +1 -1
  24. package/dist/components/Checkbox/Default.d.ts.map +1 -1
  25. package/dist/components/Checkbox/Default.js +4 -0
  26. package/dist/components/DatePicker/datePickerInput.d.ts +2 -0
  27. package/dist/components/DatePicker/datePickerInput.d.ts.map +1 -1
  28. package/dist/components/DatePicker/datePickerInput.js +4 -0
  29. package/dist/components/DatePicker/index.d.ts.map +1 -1
  30. package/dist/components/DatePicker/index.js +4 -0
  31. package/dist/components/DateRangePicker/dateRangePickerInput.d.ts +3 -1
  32. package/dist/components/DateRangePicker/dateRangePickerInput.d.ts.map +1 -1
  33. package/dist/components/DateRangePicker/dateRangePickerInput.js +8 -0
  34. package/dist/components/DateRangePicker/index.d.ts.map +1 -1
  35. package/dist/components/DateRangePicker/index.js +7 -1
  36. package/dist/components/EmptyState/EmptyState.types.d.ts +2 -2
  37. package/dist/components/EmptyState/index.d.ts +1 -2
  38. package/dist/components/EmptyState/index.d.ts.map +1 -1
  39. package/dist/components/EmptyState/index.js +33 -20
  40. package/dist/components/FileUpload/FileUpload.types.d.ts +10 -2
  41. package/dist/components/FileUpload/FileUpload.types.d.ts.map +1 -1
  42. package/dist/components/FileUpload/TemplatePreview.d.ts +9 -0
  43. package/dist/components/FileUpload/TemplatePreview.d.ts.map +1 -0
  44. package/dist/components/FileUpload/TemplatePreview.js +31 -0
  45. package/dist/components/FileUpload/fileUploadUtils.d.ts +4 -0
  46. package/dist/components/FileUpload/fileUploadUtils.d.ts.map +1 -0
  47. package/dist/components/FileUpload/fileUploadUtils.js +14 -0
  48. package/dist/components/FileUpload/index.d.ts +1 -1
  49. package/dist/components/FileUpload/index.d.ts.map +1 -1
  50. package/dist/components/FileUpload/index.js +114 -10
  51. package/dist/components/FileUpload/useFileUploadTemplateState.d.ts +14 -0
  52. package/dist/components/FileUpload/useFileUploadTemplateState.d.ts.map +1 -0
  53. package/dist/components/FileUpload/useFileUploadTemplateState.js +46 -0
  54. package/dist/components/FiltersStrip/FiltersStrip.types.d.ts +2 -2
  55. package/dist/components/FiltersStrip/index.d.ts +1 -1
  56. package/dist/components/FiltersStrip/index.d.ts.map +1 -1
  57. package/dist/components/FiltersStrip/index.js +7 -1
  58. package/dist/components/Header/Header.types.d.ts +2 -2
  59. package/dist/components/Header/index.d.ts +1 -1
  60. package/dist/components/Header/index.d.ts.map +1 -1
  61. package/dist/components/Header/index.js +139 -128
  62. package/dist/components/Input/InputWithIcon.d.ts +1 -1
  63. package/dist/components/Input/InputWithIcon.d.ts.map +1 -1
  64. package/dist/components/Input/InputWithIcon.js +20 -2
  65. package/dist/components/Input/VanillaInput.d.ts +1 -1
  66. package/dist/components/Input/VanillaInput.d.ts.map +1 -1
  67. package/dist/components/Input/VanillaInput.js +20 -2
  68. package/dist/components/Loader/Loader.types.d.ts +2 -2
  69. package/dist/components/Loader/index.d.ts +1 -1
  70. package/dist/components/Loader/index.d.ts.map +1 -1
  71. package/dist/components/Loader/index.js +55 -36
  72. package/dist/components/Menu/Menu.types.d.ts +3 -1
  73. package/dist/components/Menu/Menu.types.d.ts.map +1 -1
  74. package/dist/components/Menu/index.d.ts.map +1 -1
  75. package/dist/components/Menu/index.js +6 -3
  76. package/dist/components/Portal/index.d.ts +1 -1
  77. package/dist/components/Portal/index.d.ts.map +1 -1
  78. package/dist/components/Portal/index.js +2 -1
  79. package/dist/components/ProgressBar/ProgressBar.types.d.ts +2 -2
  80. package/dist/components/ProgressBar/index.d.ts +1 -1
  81. package/dist/components/ProgressBar/index.d.ts.map +1 -1
  82. package/dist/components/ProgressBar/index.js +29 -13
  83. package/dist/components/RadioButtonGroup/index.d.ts +1 -1
  84. package/dist/components/RadioButtonGroup/index.d.ts.map +1 -1
  85. package/dist/components/RadioButtonGroup/index.js +9 -1
  86. package/dist/components/Select/Select.types.d.ts +3 -0
  87. package/dist/components/Select/Select.types.d.ts.map +1 -1
  88. package/dist/components/Select/index.d.ts.map +1 -1
  89. package/dist/components/Select/index.js +7 -3
  90. package/dist/components/Sidebar/index.d.ts +1 -1
  91. package/dist/components/Sidebar/index.d.ts.map +1 -1
  92. package/dist/components/Sidebar/index.js +3 -0
  93. package/dist/components/Slider/index.d.ts +1 -1
  94. package/dist/components/Slider/index.d.ts.map +1 -1
  95. package/dist/components/Slider/index.js +2 -1
  96. package/dist/components/Switch/index.d.ts.map +1 -1
  97. package/dist/components/Switch/index.js +6 -2
  98. package/dist/components/Tag/Tag.types.d.ts +4 -0
  99. package/dist/components/Tag/Tag.types.d.ts.map +1 -1
  100. package/dist/components/Tag/filled.d.ts +1 -1
  101. package/dist/components/Tag/filled.d.ts.map +1 -1
  102. package/dist/components/Tag/filled.js +18 -2
  103. package/dist/components/Tag/index.d.ts.map +1 -1
  104. package/dist/components/Tag/index.js +28 -27
  105. package/dist/components/Tag/solid.d.ts +1 -1
  106. package/dist/components/Tag/solid.d.ts.map +1 -1
  107. package/dist/components/Tag/solid.js +9 -1
  108. package/dist/components/Tag/stroke.d.ts +1 -1
  109. package/dist/components/Tag/stroke.d.ts.map +1 -1
  110. package/dist/components/Tag/stroke.js +9 -1
  111. package/dist/components/TagGroup/TagGroup.types.d.ts +2 -2
  112. package/dist/components/TagGroup/index.d.ts +1 -1
  113. package/dist/components/TagGroup/index.d.ts.map +1 -1
  114. package/dist/components/TagGroup/index.js +10 -1
  115. package/dist/components/TextArea/index.d.ts +1 -1
  116. package/dist/components/TextArea/index.d.ts.map +1 -1
  117. package/dist/components/TextArea/index.js +26 -38
  118. package/dist/components/Tooltip/index.d.ts.map +1 -1
  119. package/dist/components/Tooltip/index.js +3 -3
  120. package/dist/components/common/HelperText/HelperText.types.d.ts +2 -2
  121. package/dist/components/common/HelperText/index.d.ts +1 -1
  122. package/dist/components/common/HelperText/index.d.ts.map +1 -1
  123. package/dist/components/common/HelperText/index.js +10 -1
  124. package/dist/components/index.d.ts +1 -1
  125. package/dist/components/index.d.ts.map +1 -1
  126. package/dist/mcp-component-registry.json +31 -1
  127. package/dist/node_modules/@mui/system/colorManipulator.js +2 -2
  128. package/dist/node_modules/call-bind/index.js +1 -1
  129. package/dist/node_modules/is-symbol/index.js +1 -1
  130. package/dist/node_modules/react-is/index.js +1 -1
  131. package/dist/storybook-utils/rootAttributes.d.ts +33 -0
  132. package/dist/storybook-utils/rootAttributes.d.ts.map +1 -0
  133. package/dist/storybook-utils.d.ts +2 -1
  134. package/dist/storybook-utils.d.ts.map +1 -1
  135. package/dist/test-utils/itForwardsRootId.d.ts +15 -0
  136. package/dist/test-utils/itForwardsRootId.d.ts.map +1 -0
  137. package/dist/test-utils/rootAttributes.d.ts +22 -0
  138. package/dist/test-utils/rootAttributes.d.ts.map +1 -0
  139. package/dist/types/index.d.ts +4 -0
  140. package/dist/types/index.d.ts.map +1 -1
  141. package/dist/utils/pickRootDomAttributes.d.ts +18 -0
  142. package/dist/utils/pickRootDomAttributes.d.ts.map +1 -0
  143. package/package.json +3 -1
@@ -15,27 +15,40 @@ function EmptyState({
15
15
  primaryButtonProps = {},
16
16
  secondaryButtonProps = {},
17
17
  className = "",
18
- "data-testid": dataTestId
18
+ id,
19
+ "data-testid": dataTestId,
20
+ "aria-label": ariaLabel = "Empty state",
21
+ role = "region"
19
22
  }) {
20
- return /* @__PURE__ */ jsxs("div", { className: `impact_emptystate ${className}`.trim(), "data-testid": dataTestId, children: [
21
- /* @__PURE__ */ jsx("div", { className: `impact_center_svg ${emptyStateIcon ? "impact_center_svg_with_icon" : ""}`, children: emptyStateIcon ?? /* @__PURE__ */ jsx(EmptyStateImage, {}) }),
22
- /* @__PURE__ */ jsx("div", { className: "impact_heading", children: heading }),
23
- description ? /* @__PURE__ */ jsx("div", { className: "impact_paragraph", children: description }) : null,
24
- /* @__PURE__ */ jsxs("div", { className: "bottom_cta_container", children: [
25
- emptyStateBottomOptions,
26
- secondaryButtonLabel != null && /* @__PURE__ */ jsx(
27
- Button,
28
- {
29
- className: "secondary_btn",
30
- variant: "secondary",
31
- onClick: onSecondaryButtonClick,
32
- ...secondaryButtonProps,
33
- children: secondaryButtonLabel
34
- }
35
- ),
36
- primaryButtonLabel != null && /* @__PURE__ */ jsx(Button, { className: "primary_btn", onClick: onPrimaryButtonClick, ...primaryButtonProps, children: primaryButtonLabel })
37
- ] })
38
- ] });
23
+ return /* @__PURE__ */ jsxs(
24
+ "div",
25
+ {
26
+ "aria-label": ariaLabel,
27
+ className: `impact_emptystate ${className}`.trim(),
28
+ "data-testid": dataTestId,
29
+ id,
30
+ role,
31
+ children: [
32
+ /* @__PURE__ */ jsx("div", { className: `impact_center_svg ${emptyStateIcon ? "impact_center_svg_with_icon" : ""}`, children: emptyStateIcon ?? /* @__PURE__ */ jsx(EmptyStateImage, {}) }),
33
+ /* @__PURE__ */ jsx("div", { className: "impact_heading", children: heading }),
34
+ description ? /* @__PURE__ */ jsx("div", { className: "impact_paragraph", children: description }) : null,
35
+ /* @__PURE__ */ jsxs("div", { className: "bottom_cta_container", children: [
36
+ emptyStateBottomOptions,
37
+ secondaryButtonLabel != null && /* @__PURE__ */ jsx(
38
+ Button,
39
+ {
40
+ className: "secondary_btn",
41
+ variant: "secondary",
42
+ onClick: onSecondaryButtonClick,
43
+ ...secondaryButtonProps,
44
+ children: secondaryButtonLabel
45
+ }
46
+ ),
47
+ primaryButtonLabel != null && /* @__PURE__ */ jsx(Button, { className: "primary_btn", onClick: onPrimaryButtonClick, ...primaryButtonProps, children: primaryButtonLabel })
48
+ ] })
49
+ ]
50
+ }
51
+ );
39
52
  }
40
53
  EmptyState.displayName = "EmptyState";
41
54
  export {
@@ -1,5 +1,5 @@
1
1
  import { ReactNode } from 'react';
2
- import { BaseComponentProps } from '../../types';
2
+ import { RootComponentProps } from '../../types';
3
3
  import { ButtonProps } from '../Button';
4
4
 
5
5
  /**
@@ -29,12 +29,20 @@ export interface ValidFileTypeConfig {
29
29
  */
30
30
  export declare const FILE_TYPE_MIME_MAP: Record<string, string[]>;
31
31
  export declare const SIZE_CONVENTIONS: readonly ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
32
- export interface FileUploadProps extends BaseComponentProps {
32
+ export interface FileUploadProps extends RootComponentProps {
33
33
  fileList: FileUploadItem[];
34
34
  onFileListChange: (list: FileUploadItem[]) => void;
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, id, 'data-testid': dataTestId, 'aria-label': ariaLabel, role, }: 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,EAAE,EACF,aAAa,EAAE,UAAU,EACzB,YAAY,EAAE,SAAyB,EACvC,IAAe,GAChB,EAAE,eAAe,2CAqjBjB;yBA5kBe,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,8 +24,15 @@ 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
- "data-testid": dataTestId
32
+ id,
33
+ "data-testid": dataTestId,
34
+ "aria-label": ariaLabel = "File upload",
35
+ role = "region"
26
36
  }) {
27
37
  var _a;
28
38
  const wrapperRef = useRef(null);
@@ -32,7 +42,22 @@ function FileUpload({
32
42
  const [isError, setIsError] = useState(false);
33
43
  const [isDraggedOver, setIsDraggedOver] = useState(false);
34
44
  const [showDownLoadMenu, setShowDownLoadMenu] = useState(false);
45
+ const [isOpen, setIsOpen] = useState(false);
46
+ const [anchorEl, setAnchorEl] = useState(null);
35
47
  const numberOfFiles = numFiles >= 1 ? Math.floor(numFiles) : 1;
48
+ const {
49
+ selected,
50
+ hasTemplateOptions,
51
+ menuOptions,
52
+ handleMenuSelectionChange,
53
+ handleMenuPrimaryClick,
54
+ handleMenuTertiaryClick
55
+ } = useFileUploadTemplateState({
56
+ options: templateColumnOptions,
57
+ selectedValues: templateColumnSelections,
58
+ onMenuPrimaryButtonClick: onTemplateMenuPrimaryClick,
59
+ onTertiaryButtonClick: onTemplateMenuTertiaryClick
60
+ });
36
61
  const [assets, setAssets] = useState(null);
37
62
  useEffect(() => {
38
63
  void loadFileUploadAssets().then(setAssets);
@@ -126,6 +151,17 @@ function FileUpload({
126
151
  if (!Array.isArray(validFileTypes)) return null;
127
152
  return validFileTypes.find((vft) => vft.templateDownloader) ?? null;
128
153
  }, [validFileTypes]);
154
+ const selectedFileType = useMemo(() => {
155
+ var _a2, _b;
156
+ return ((_a2 = validFileTypes.find((vft) => vft.fileType === "xlsx")) == null ? void 0 : _a2.fileType) ?? ((_b = validFileTypes[0]) == null ? void 0 : _b.fileType) ?? "xlsx";
157
+ }, [validFileTypes]);
158
+ const tertiaryFileType = useMemo(() => {
159
+ var _a2;
160
+ return (_a2 = validFileTypes.find((vft) => vft.fileType !== "xlsx")) == null ? void 0 : _a2.fileType;
161
+ }, [validFileTypes]);
162
+ const handleMenuClose = useCallback(() => {
163
+ setIsOpen(false);
164
+ }, []);
129
165
  const handleTemplateDownloadMenu = useCallback(() => {
130
166
  setShowDownLoadMenu((prev) => !prev);
131
167
  }, []);
@@ -133,22 +169,41 @@ function FileUpload({
133
169
  const target = event.target;
134
170
  if (!target.closest(".ia-fileUpload-validFileType-container") && !target.closest(".ia-fileUpload-validFileType-menu-item")) {
135
171
  setShowDownLoadMenu(false);
172
+ setIsOpen(false);
136
173
  }
137
174
  }, []);
138
175
  useEffect(() => {
176
+ const handleEscape = (event) => {
177
+ if (event.key === "Escape") {
178
+ setShowDownLoadMenu(false);
179
+ }
180
+ };
139
181
  if (showDownLoadMenu) {
140
182
  document.addEventListener("click", handleClickOutside);
183
+ document.addEventListener("keydown", handleEscape);
141
184
  }
142
185
  return () => {
143
186
  document.removeEventListener("click", handleClickOutside);
187
+ document.removeEventListener("keydown", handleEscape);
144
188
  };
145
189
  }, [showDownLoadMenu, handleClickOutside]);
190
+ useEffect(() => {
191
+ if (isOpen) {
192
+ document.addEventListener("click", handleClickOutside);
193
+ }
194
+ return () => {
195
+ document.removeEventListener("click", handleClickOutside);
196
+ };
197
+ }, [isOpen, handleClickOutside]);
146
198
  return /* @__PURE__ */ jsxs(
147
199
  "div",
148
200
  {
149
201
  ref: containerRef,
202
+ "aria-label": ariaLabel,
150
203
  className: `ia-fileUpload-container ${className ?? ""}`.trim(),
151
204
  "data-testid": dataTestId,
205
+ id,
206
+ role,
152
207
  children: [
153
208
  /* @__PURE__ */ jsxs("div", { className: "ia-fileUpload-container-header", children: [
154
209
  /* @__PURE__ */ jsxs("div", { className: "ia-fileUpload-container-header-title", children: [
@@ -246,15 +301,27 @@ function FileUpload({
246
301
  /* @__PURE__ */ jsxs(
247
302
  "div",
248
303
  {
304
+ "aria-expanded": validFileTypes.length > 1 || templateColumnOptions ? showDownLoadMenu || isOpen : void 0,
305
+ "aria-haspopup": validFileTypes.length > 1 || templateColumnOptions ? "menu" : void 0,
306
+ "aria-label": "Download template",
249
307
  role: "button",
250
308
  style: { display: "flex", alignItems: "center", gap: "4px" },
251
309
  tabIndex: 0,
252
- onClick: validFileTypes.length > 1 ? handleTemplateDownloadMenu : templateDownloader.templateDownloader,
310
+ onClick: (e) => {
311
+ var _a2;
312
+ setIsOpen(true);
313
+ setAnchorEl(e.currentTarget);
314
+ if (validFileTypes.length > 1 || templateColumnOptions) {
315
+ handleTemplateDownloadMenu();
316
+ } else {
317
+ (_a2 = templateDownloader.templateDownloader) == null ? void 0 : _a2.call(templateDownloader);
318
+ }
319
+ },
253
320
  onKeyDown: (e) => {
254
321
  var _a2;
255
322
  if (e.key === "Enter" || e.key === " ") {
256
323
  e.preventDefault();
257
- if (validFileTypes.length > 1) {
324
+ if (validFileTypes.length > 1 || templateColumnOptions) {
258
325
  handleTemplateDownloadMenu();
259
326
  } else {
260
327
  (_a2 = templateDownloader.templateDownloader) == null ? void 0 : _a2.call(templateDownloader);
@@ -262,33 +329,69 @@ function FileUpload({
262
329
  }
263
330
  },
264
331
  children: [
265
- /* @__PURE__ */ jsx(Button, { "data-fileUpload": "templateDownload", variant: "url", children: "Download template" }),
332
+ /* @__PURE__ */ jsx(Button, { "data-fileUpload": "templateDownload", tabIndex: -1, variant: "url", children: "Download template" }),
266
333
  assets && /* @__PURE__ */ jsx(
267
334
  "img",
268
335
  {
269
336
  alt: "",
270
- className: `ia-fileUpload-validFileType-arrow ${validFileTypes.length > 1 && showDownLoadMenu ? "rotate" : ""}`,
271
- src: validFileTypes.length > 1 ? assets.downArrow : assets.uploadDownloadIcon
337
+ "aria-hidden": "true",
338
+ className: `ia-fileUpload-validFileType-arrow ${(validFileTypes.length > 1 || templateColumnOptions) && showDownLoadMenu ? "rotate" : ""}`,
339
+ src: validFileTypes.length > 1 || templateColumnOptions ? assets.downArrow : assets.uploadDownloadIcon
340
+ }
341
+ ),
342
+ templateColumnOptions && isOpen && /* @__PURE__ */ jsx(
343
+ Menu,
344
+ {
345
+ withActionButtons: true,
346
+ withCheckbox: true,
347
+ anchorEl,
348
+ customHeaderProps: {
349
+ onSelectionChange: handleMenuSelectionChange,
350
+ selectedItems: selected
351
+ },
352
+ iconPlacement: "left",
353
+ menuContainerClassName: "ia-fileUpload-validFileType-menu",
354
+ MenuProps: {
355
+ anchorOrigin: {
356
+ vertical: "top",
357
+ horizontal: "left"
358
+ },
359
+ transformOrigin: {
360
+ vertical: "bottom",
361
+ horizontal: "left"
362
+ }
363
+ },
364
+ open: isOpen,
365
+ options: menuOptions,
366
+ primaryButtonProps: { label: selectedFileType },
367
+ tertiaryButtonLabel: tertiaryFileType,
368
+ onClose: handleMenuClose,
369
+ onPrimaryButtonClick: () => {
370
+ handleMenuPrimaryClick(selectedFileType);
371
+ },
372
+ onTertiaryButtonClick: handleMenuTertiaryClick
272
373
  }
273
374
  )
274
375
  ]
275
376
  }
276
377
  ),
277
- showDownLoadMenu && /* @__PURE__ */ jsx("div", { className: "ia-fileUpload-validFileType-menu", children: validFileTypes.map((vft) => /* @__PURE__ */ jsx(
378
+ showDownLoadMenu && !templateColumnOptions && /* @__PURE__ */ jsx("div", { className: "ia-fileUpload-validFileType-menu", role: "menu", children: validFileTypes.map((vft) => /* @__PURE__ */ jsx(
278
379
  "span",
279
380
  {
280
381
  className: "ia-fileUpload-validFileType-menu-item",
281
- role: "button",
382
+ role: "menuitem",
282
383
  tabIndex: 0,
283
384
  onClick: () => {
284
385
  var _a2;
285
- return (_a2 = vft.templateDownloader) == null ? void 0 : _a2.call(vft);
386
+ (_a2 = vft.templateDownloader) == null ? void 0 : _a2.call(vft);
387
+ setShowDownLoadMenu(false);
286
388
  },
287
389
  onKeyDown: (e) => {
288
390
  var _a2;
289
391
  if (e.key === "Enter" || e.key === " ") {
290
392
  e.preventDefault();
291
393
  (_a2 = vft.templateDownloader) == null ? void 0 : _a2.call(vft);
394
+ setShowDownLoadMenu(false);
292
395
  }
293
396
  },
294
397
  children: `.${vft.fileType}`
@@ -297,6 +400,7 @@ function FileUpload({
297
400
  )) })
298
401
  ] })
299
402
  ] }) : null,
403
+ hasTemplateOptions && templateDownloader ? /* @__PURE__ */ jsx(TemplatePreview, { selectedColumns: selected }) : null,
300
404
  fileList.map((item) => {
301
405
  let fileSize = item.file.size;
302
406
  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
+ };
@@ -1,4 +1,4 @@
1
- import { BaseComponentProps } from '../../types';
1
+ import { RootComponentProps } from '../../types';
2
2
 
3
3
  export interface FilterTagValue {
4
4
  label: string;
@@ -23,7 +23,7 @@ export interface SavedFilterListOption {
23
23
  label: string;
24
24
  value: string;
25
25
  }
26
- export interface FiltersStripProps extends BaseComponentProps {
26
+ export interface FiltersStripProps extends RootComponentProps {
27
27
  /** Currently selected saved filter label */
28
28
  selectedFilter?: string;
29
29
  /** Callback when saved filter selection changes */
@@ -7,7 +7,7 @@ export { AppliedFilters } from './AppliedFilters';
7
7
  /**
8
8
  * Horizontal strip with saved/recent filter dropdown and filter tags. Optional "All Filters" button.
9
9
  */
10
- export declare function FiltersStrip({ selectedFilter, setSelectedFilter, recentFilters, savedFiltersBadge, savedFilterLists, filterTags, handleBadgeChange, handleApplyFilter, handleCancelFilter, filterButtonLabel, filterButtonClick, filterButtonProps, hideSelectedFilterBadge, savedFilterSelectedBadge, handleSavedRecentFilterDropdown, filterDropDownLabel, className, 'data-testid': dataTestId, }: FiltersStripProps): import("react/jsx-runtime").JSX.Element;
10
+ export declare function FiltersStrip({ selectedFilter, setSelectedFilter, recentFilters, savedFiltersBadge, savedFilterLists, filterTags, handleBadgeChange, handleApplyFilter, handleCancelFilter, filterButtonLabel, filterButtonClick, filterButtonProps, hideSelectedFilterBadge, savedFilterSelectedBadge, handleSavedRecentFilterDropdown, filterDropDownLabel, className, id, 'data-testid': dataTestId, 'aria-label': ariaLabel, role, }: FiltersStripProps): import("react/jsx-runtime").JSX.Element;
11
11
  export declare namespace FiltersStrip {
12
12
  var displayName: string;
13
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/FiltersStrip/index.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,4BAA4B,CAAC;AAEpC,YAAY,EACV,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAC3B,cAAmB,EACnB,iBAA4B,EAC5B,aAAkB,EAClB,iBAAsB,EACtB,gBAAqB,EACrB,UAAe,EACf,iBAA4B,EAC5B,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiC,EACjC,iBAAiB,EACjB,iBAAiB,EACjB,uBAA+B,EAC/B,wBAA+B,EAC/B,+BAA0C,EAC1C,mBAAmB,EACnB,SAAS,EACT,aAAa,EAAE,UAAU,GAC1B,EAAE,iBAAiB,2CA4GnB;yBA/He,YAAY"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/FiltersStrip/index.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,4BAA4B,CAAC;AAEpC,YAAY,EACV,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAC3B,cAAmB,EACnB,iBAA4B,EAC5B,aAAkB,EAClB,iBAAsB,EACtB,gBAAqB,EACrB,UAAe,EACf,iBAA4B,EAC5B,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiC,EACjC,iBAAiB,EACjB,iBAAiB,EACjB,uBAA+B,EAC/B,wBAA+B,EAC/B,+BAA0C,EAC1C,mBAAmB,EACnB,SAAS,EACT,EAAE,EACF,aAAa,EAAE,UAAU,EACzB,YAAY,EAAE,SAAqB,EACnC,IAAe,GAChB,EAAE,iBAAiB,2CA+GnB;yBArIe,YAAY"}
@@ -29,7 +29,10 @@ function FiltersStrip({
29
29
  },
30
30
  filterDropDownLabel,
31
31
  className,
32
- "data-testid": dataTestId
32
+ id,
33
+ "data-testid": dataTestId,
34
+ "aria-label": ariaLabel = "Filters",
35
+ role = "region"
33
36
  }) {
34
37
  const [showSeparator, setShowSeparator] = useState(false);
35
38
  const [currDropShow, setCurrDropShow] = useState(null);
@@ -45,8 +48,11 @@ function FiltersStrip({
45
48
  return /* @__PURE__ */ jsxs(
46
49
  "div",
47
50
  {
51
+ "aria-label": ariaLabel,
48
52
  className: `impact-info-panel-container ${className ?? ""}`.trim(),
49
53
  "data-testid": dataTestId,
54
+ id,
55
+ role,
50
56
  children: [
51
57
  /* @__PURE__ */ jsxs("div", { className: "impact-info-panel-left-container", children: [
52
58
  hasDropDown && /* @__PURE__ */ jsxs(Fragment, { children: [
@@ -1,5 +1,5 @@
1
1
  import { ReactNode } from 'react';
2
- import { BaseComponentProps } from '../../types';
2
+ import { RootComponentProps } from '../../types';
3
3
  import { AvatarProps } from '../Avatar/Avatar.types';
4
4
 
5
5
  /**
@@ -14,7 +14,7 @@ export interface HeaderDropMenuOption {
14
14
  * Header component props.
15
15
  * Avatar props can be extended via avatarProps; dropMenuOptions drive the avatar dropdown menu.
16
16
  */
17
- export interface HeaderProps extends BaseComponentProps {
17
+ export interface HeaderProps extends RootComponentProps {
18
18
  /** Title shown next to the logo */
19
19
  title?: ReactNode;
20
20
  /** User name shown in avatar and default menu option */
@@ -4,7 +4,7 @@ export type { HeaderProps, HeaderDropMenuOption } from './Header.types';
4
4
  /**
5
5
  * App header with logo, title, actions (help, message, notification, chatbot) and avatar menu.
6
6
  */
7
- export declare function Header({ title, userName, handleLogoClick, showNotificationIcon, notificationIndicator, handleNotificationClick, showHelpIcon, handleHelpClick, showMessageIcon, handleMessageClick, showChatBotIcon, handleChatBotClick, isMessageIconDisabled, isNotificationDnd, dropMenuOptions, isChatBotDisabled, centerComponent, avatarProps, avatarType, className, 'data-testid': dataTestId, }: HeaderProps): import("react/jsx-runtime").JSX.Element;
7
+ export declare function Header({ title, userName, handleLogoClick, showNotificationIcon, notificationIndicator, handleNotificationClick, showHelpIcon, handleHelpClick, showMessageIcon, handleMessageClick, showChatBotIcon, handleChatBotClick, isMessageIconDisabled, isNotificationDnd, dropMenuOptions, isChatBotDisabled, centerComponent, avatarProps, avatarType, className, id, 'data-testid': dataTestId, role, }: HeaderProps): import("react/jsx-runtime").JSX.Element;
8
8
  export declare namespace Header {
9
9
  var displayName: string;
10
10
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Header/index.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,sBAAsB,CAAC;AAS9B,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAExE;;GAEG;AACH,wBAAgB,MAAM,CAAC,EACrB,KAAK,EACL,QAAQ,EACR,eAAe,EACf,oBAA2B,EAC3B,qBAA4B,EAC5B,uBAAuB,EACvB,YAAmB,EACnB,eAAe,EACf,eAAsB,EACtB,kBAAkB,EAClB,eAAsB,EACtB,kBAAkB,EAClB,qBAA6B,EAC7B,iBAAyB,EACzB,eAAoE,EACpE,iBAAyB,EACzB,eAAe,EACf,WAAW,EACX,UAA6B,EAC7B,SAAS,EACT,aAAa,EAAE,UAAU,GAC1B,EAAE,WAAW,2CAkIb;yBAxJe,MAAM"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Header/index.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,sBAAsB,CAAC;AAS9B,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAExE;;GAEG;AACH,wBAAgB,MAAM,CAAC,EACrB,KAAK,EACL,QAAQ,EACR,eAAe,EACf,oBAA2B,EAC3B,qBAA4B,EAC5B,uBAAuB,EACvB,YAAmB,EACnB,eAAe,EACf,eAAsB,EACtB,kBAAkB,EAClB,eAAsB,EACtB,kBAAkB,EAClB,qBAA6B,EAC7B,iBAAyB,EACzB,eAAoE,EACpE,iBAAyB,EACzB,eAAe,EACf,WAAW,EACX,UAA6B,EAC7B,SAAS,EACT,EAAE,EACF,aAAa,EAAE,UAAU,EACzB,IAAe,GAChB,EAAE,WAAW,2CAuIb;yBA/Je,MAAM"}