@rivm-loculus-tools/common-frontend 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/dist/_chunks/EmotionCacheService.js +33 -0
  2. package/dist/_chunks/EmotionCacheService.js.map +1 -0
  3. package/dist/_chunks/decorate.js +9 -0
  4. package/dist/classes/services/EmotionCacheService/EmotionCacheService.d.ts +7 -0
  5. package/dist/classes/services/EmotionCacheService/index.d.ts +1 -0
  6. package/dist/classes/services/EmotionCacheService/index.js +1 -0
  7. package/dist/classes/services/FastaDataEventBusService/FastaDataEventBusService.d.ts +1 -3
  8. package/dist/classes/services/FastaDataEventBusService/index.js +6 -8
  9. package/dist/classes/services/FastaDataEventBusService/index.js.map +1 -1
  10. package/dist/components/app/App/App.d.ts +6 -0
  11. package/dist/components/app/App/index.d.ts +1 -0
  12. package/dist/components/app/App/index.js +104 -0
  13. package/dist/components/app/App/index.js.map +1 -0
  14. package/dist/{_chunks/FastaDataImportDialog.js → components/fasta/FastaDataImportDialog/index.js} +3 -3
  15. package/dist/components/fasta/FastaDataImportDialog/index.js.map +1 -0
  16. package/dist/components/{FastaDataImportDialogLoader → fasta/FastaDataImportDialogLoader}/FastaDataImportDialogLoader.d.ts +2 -2
  17. package/dist/components/fasta/FastaDataImportDialogLoader/index.js +71 -0
  18. package/dist/components/fasta/FastaDataImportDialogLoader/index.js.map +1 -0
  19. package/dist/components/fasta/FastaNotLoaded/index.js +54 -0
  20. package/dist/components/fasta/FastaNotLoaded/index.js.map +1 -0
  21. package/dist/components/{FastaPageHeaderCenterComponent → fasta/FastaPageHeaderCenterComponent}/FastaPageHeaderCenterComponent.d.ts +1 -1
  22. package/dist/components/{FastaPageHeaderCenterComponent → fasta/FastaPageHeaderCenterComponent}/index.js +2 -2
  23. package/dist/components/fasta/FastaPageHeaderCenterComponent/index.js.map +1 -0
  24. package/dist/components/fasta/FastaPageHeaderImportButton/index.js +27 -0
  25. package/dist/components/fasta/FastaPageHeaderImportButton/index.js.map +1 -0
  26. package/dist/components/{FastaPageHeaderResetButton → fasta/FastaPageHeaderResetButton}/index.js +1 -1
  27. package/dist/components/fasta/FastaPageHeaderResetButton/index.js.map +1 -0
  28. package/dist/components/ui/ButtonWithMenu/ButtonWithMenu.d.ts +12 -0
  29. package/dist/components/ui/ButtonWithMenu/index.d.ts +1 -0
  30. package/dist/components/ui/ButtonWithMenu/index.js +47 -0
  31. package/dist/components/ui/ButtonWithMenu/index.js.map +1 -0
  32. package/dist/components/ui/GenericErrorMessage/GenericErrorMessage.d.ts +4 -0
  33. package/dist/components/ui/GenericErrorMessage/index.d.ts +1 -0
  34. package/dist/components/ui/GenericErrorMessage/index.js +44 -0
  35. package/dist/components/ui/GenericErrorMessage/index.js.map +1 -0
  36. package/dist/components/ui/I18nWrapper/index.js +21 -0
  37. package/dist/components/ui/I18nWrapper/index.js.map +1 -0
  38. package/dist/components/ui/PageCommon/PageCommon.d.ts +7 -0
  39. package/dist/components/ui/PageCommon/index.d.ts +1 -0
  40. package/dist/components/ui/PageCommon/index.js +55 -0
  41. package/dist/components/ui/PageCommon/index.js.map +1 -0
  42. package/dist/components/ui/PageCommonDrawer/index.d.ts +1 -0
  43. package/dist/components/ui/PageCommonDrawer/index.js +30 -0
  44. package/dist/components/ui/PageCommonDrawer/index.js.map +1 -0
  45. package/dist/components/{page → ui/PageCommonHeader}/PageCommonHeader.d.ts +1 -2
  46. package/dist/components/ui/PageCommonHeader/index.d.ts +1 -0
  47. package/dist/components/ui/PageCommonHeader/index.js +107 -0
  48. package/dist/components/ui/PageCommonHeader/index.js.map +1 -0
  49. package/dist/constants/config.constants.d.ts +9 -0
  50. package/dist/constants/config.constants.js +6 -0
  51. package/dist/constants/config.constants.js.map +1 -0
  52. package/dist/constants/page.constants.js +6 -0
  53. package/dist/constants/page.constants.js.map +1 -0
  54. package/dist/context/commonConfigContext/CommonConfigContext.d.ts +9 -0
  55. package/dist/context/commonConfigContext/CommonConfigContextProvider.d.ts +6 -0
  56. package/dist/context/commonConfigContext/index.d.ts +3 -0
  57. package/dist/context/commonConfigContext/index.js +34 -0
  58. package/dist/context/commonConfigContext/index.js.map +1 -0
  59. package/dist/context/commonConfigContext/useCommonConfigContext.d.ts +3 -0
  60. package/dist/context/pageCommonContext/PageCommonContext.d.ts +17 -0
  61. package/dist/context/pageCommonContext/PageCommonContextProvider.d.ts +4 -0
  62. package/dist/context/pageCommonContext/index.d.ts +2 -0
  63. package/dist/context/pageCommonContext/index.js +26 -0
  64. package/dist/context/pageCommonContext/index.js.map +1 -0
  65. package/dist/hooks/useConfig/index.d.ts +1 -0
  66. package/dist/hooks/useConfig/index.js +7 -0
  67. package/dist/hooks/useConfig/index.js.map +1 -0
  68. package/dist/hooks/useConfig/useConfig.d.ts +2 -0
  69. package/dist/hooks/useUpdateDocumentTitle/index.d.ts +1 -0
  70. package/dist/hooks/useUpdateDocumentTitle/index.js +13 -0
  71. package/dist/hooks/useUpdateDocumentTitle/index.js.map +1 -0
  72. package/dist/hooks/useUpdateDocumentTitle/useUpdateDocumentTitle.d.ts +1 -0
  73. package/dist/models/config.models.d.ts +16 -0
  74. package/dist/models/{fasta.js → fasta.models.js} +2 -2
  75. package/dist/models/fasta.models.js.map +1 -0
  76. package/dist/models/metadata.models.js +0 -0
  77. package/dist/pages/ErrorPage/ErrorPage.d.ts +4 -0
  78. package/dist/pages/ErrorPage/index.d.ts +1 -0
  79. package/dist/pages/ErrorPage/index.js +17 -0
  80. package/dist/pages/ErrorPage/index.js.map +1 -0
  81. package/dist/stores/fastaDataStore/fastaDataStore.d.ts +2 -2
  82. package/dist/stores/fastaDataStore/index.js +17 -15
  83. package/dist/stores/fastaDataStore/index.js.map +1 -1
  84. package/dist/theme/index.js +17 -17
  85. package/dist/theme/index.js.map +1 -1
  86. package/dist/utils/DependencyContainerUtil/DependencyContainerUtil.d.ts +6 -0
  87. package/dist/utils/DependencyContainerUtil/index.d.ts +1 -0
  88. package/dist/utils/DependencyContainerUtil/index.js +18 -0
  89. package/dist/utils/DependencyContainerUtil/index.js.map +1 -0
  90. package/dist/utils/ExportUtil/ExportUtil.d.ts +6 -0
  91. package/dist/utils/ExportUtil/index.d.ts +1 -0
  92. package/dist/utils/ExportUtil/index.js +42 -0
  93. package/dist/utils/ExportUtil/index.js.map +1 -0
  94. package/dist/utils/FastaUtil/FastaUtil.d.ts +1 -1
  95. package/dist/utils/FastaUtil/index.js.map +1 -1
  96. package/dist/utils/MetaDataUtil/MetaDataUtil.d.ts +1 -1
  97. package/dist/utils/MetaDataUtil/index.js.map +1 -1
  98. package/dist/utils/StandardConfigUtil/StandardConfigUtil.d.ts +4 -0
  99. package/dist/utils/StandardConfigUtil/index.d.ts +1 -0
  100. package/dist/utils/StandardConfigUtil/index.js +18 -0
  101. package/dist/utils/StandardConfigUtil/index.js.map +1 -0
  102. package/dist/utils/UrlUtil/index.js +6 -5
  103. package/dist/utils/UrlUtil/index.js.map +1 -1
  104. package/package.json +111 -47
  105. package/dist/_chunks/FastaDataImportDialog.js.map +0 -1
  106. package/dist/components/FastaDataImportDialog/index.js +0 -1
  107. package/dist/components/FastaDataImportDialogLoader/index.js +0 -70
  108. package/dist/components/FastaDataImportDialogLoader/index.js.map +0 -1
  109. package/dist/components/FastaNotLoaded/index.js +0 -53
  110. package/dist/components/FastaNotLoaded/index.js.map +0 -1
  111. package/dist/components/FastaPageHeaderCenterComponent/index.js.map +0 -1
  112. package/dist/components/FastaPageHeaderImportButton/index.js +0 -26
  113. package/dist/components/FastaPageHeaderImportButton/index.js.map +0 -1
  114. package/dist/components/FastaPageHeaderResetButton/index.js.map +0 -1
  115. package/dist/components/I18nWrapper/index.js +0 -21
  116. package/dist/components/I18nWrapper/index.js.map +0 -1
  117. package/dist/components/PageHeaderDocumentationButton/PageHeaderDocumentationButton.d.ts +0 -1
  118. package/dist/components/PageHeaderDocumentationButton/index.d.ts +0 -1
  119. package/dist/components/PageHeaderDocumentationButton/index.js +0 -24
  120. package/dist/components/PageHeaderDocumentationButton/index.js.map +0 -1
  121. package/dist/components/page/ErrorPageCommon.d.ts +0 -4
  122. package/dist/components/page/PageCommon.d.ts +0 -8
  123. package/dist/components/page/PageCommonContext.d.ts +0 -7
  124. package/dist/components/page/PageCommonContextProvider.d.ts +0 -3
  125. package/dist/components/page/index.d.ts +0 -6
  126. package/dist/components/page/index.js +0 -207
  127. package/dist/components/page/index.js.map +0 -1
  128. package/dist/constants/page.js +0 -6
  129. package/dist/constants/page.js.map +0 -1
  130. package/dist/models/fasta.js.map +0 -1
  131. /package/dist/components/{FastaDataImportDialog → fasta/FastaDataImportDialog}/FastaDataImportDialog.d.ts +0 -0
  132. /package/dist/components/{FastaDataImportDialog → fasta/FastaDataImportDialog}/index.d.ts +0 -0
  133. /package/dist/components/{FastaDataImportDialogLoader → fasta/FastaDataImportDialogLoader}/index.d.ts +0 -0
  134. /package/dist/components/{FastaNotLoaded → fasta/FastaNotLoaded}/FastaNotLoaded.d.ts +0 -0
  135. /package/dist/components/{FastaNotLoaded → fasta/FastaNotLoaded}/index.d.ts +0 -0
  136. /package/dist/components/{FastaPageHeaderCenterComponent → fasta/FastaPageHeaderCenterComponent}/index.d.ts +0 -0
  137. /package/dist/components/{FastaPageHeaderImportButton → fasta/FastaPageHeaderImportButton}/FastaPageHeaderImportButton.d.ts +0 -0
  138. /package/dist/components/{FastaPageHeaderImportButton → fasta/FastaPageHeaderImportButton}/index.d.ts +0 -0
  139. /package/dist/components/{FastaPageHeaderResetButton → fasta/FastaPageHeaderResetButton}/FastaPageHeaderResetButton.d.ts +0 -0
  140. /package/dist/components/{FastaPageHeaderResetButton → fasta/FastaPageHeaderResetButton}/index.d.ts +0 -0
  141. /package/dist/components/{I18nWrapper → ui/I18nWrapper}/I18nWrapper.d.ts +0 -0
  142. /package/dist/components/{I18nWrapper → ui/I18nWrapper}/index.d.ts +0 -0
  143. /package/dist/components/{page → ui/PageCommonDrawer}/PageCommonDrawer.d.ts +0 -0
  144. /package/dist/constants/{page.d.ts → page.constants.d.ts} +0 -0
  145. /package/dist/models/{metadata.js → config.models.js} +0 -0
  146. /package/dist/models/{fasta.d.ts → fasta.models.d.ts} +0 -0
  147. /package/dist/models/{metadata.d.ts → metadata.models.d.ts} +0 -0
@@ -0,0 +1,33 @@
1
+ import { CONFIG_TOKEN as e, WINDOW_SERVICE_TOKEN as t } from "../constants/config.constants.js";
2
+ import { t as n } from "./decorate.js";
3
+ import { inject as r, singleton as i } from "tsyringe";
4
+ import a from "@emotion/cache";
5
+ //#region \0@oxc-project+runtime@0.153.0/helpers/esm/decorateParam.js
6
+ function o(e, t) {
7
+ return function(n, r) {
8
+ t(n, r, e);
9
+ };
10
+ }
11
+ //#endregion
12
+ //#region src/classes/services/EmotionCacheService/EmotionCacheService.ts
13
+ var s = class {
14
+ emotionCache;
15
+ constructor(e, t) {
16
+ this.emotionCache = a({
17
+ container: t.document.head,
18
+ key: "loculus-tools",
19
+ nonce: e.nonce,
20
+ prepend: !!e.nonce,
21
+ stylisPlugins: []
22
+ });
23
+ }
24
+ };
25
+ s = n([
26
+ i(),
27
+ o(0, r(e)),
28
+ o(1, r(t))
29
+ ], s);
30
+ //#endregion
31
+ export { s as t };
32
+
33
+ //# sourceMappingURL=EmotionCacheService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmotionCacheService.js","names":["_decorate","_decorateParam","__decorate","createCache","__decorateParam","target","key","paramIndex","EmotionCacheService","windowService","config","singleton","inject","CONFIG_TOKEN","WINDOW_SERVICE_TOKEN"],"sources":["../../src/classes/services/EmotionCacheService/EmotionCacheService.ts"],"sourcesContent":["import type { EmotionCache } from '@emotion/cache';\nimport createCache from '@emotion/cache';\nimport {\n inject,\n singleton,\n} from 'tsyringe';\nimport type { WindowService } from '@gen-epix/ui-core/classes/services/WindowService';\n\nimport {\n CONFIG_TOKEN,\n WINDOW_SERVICE_TOKEN,\n} from '../../../constants/config.constants';\nimport type { ConfigBase } from '../../../models/config.models';\n\n\n@singleton()\nexport class EmotionCacheService {\n public readonly emotionCache: EmotionCache;\n\n public constructor(\n @inject(CONFIG_TOKEN) config: ConfigBase,\n @inject(WINDOW_SERVICE_TOKEN) windowService: WindowService,\n ) {\n this.emotionCache = createCache({\n container: windowService.document.head,\n key: 'loculus-tools',\n nonce: config.nonce,\n prepend: !!config.nonce,\n stylisPlugins: [],\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;AAgBO,IAAMQ,IAAN,MAA0B;CAC/B;CAEA,YACE,GACA,GACA;EACA,KAAK,eAAeL,EAAY;GAC9B,WAAWM,EAAc,SAAS;GAClC,KAAK;GACL,OAAOC,EAAO;GACd,SAAS,CAAC,CAACA,EAAO;GAClB,eAAe,CAAC;EAClB,CAAC;CACH;AACF;;CAhBCC,EAAU;CAKNV,EAAA,GAAAW,EAAOC,CAAY,CAAA;CACnBZ,EAAA,GAAAW,EAAOE,CAAoB,CAAA"}
@@ -0,0 +1,9 @@
1
+ //#region \0@oxc-project+runtime@0.153.0/helpers/esm/decorate.js
2
+ function e(e, t, n, r) {
3
+ var i = arguments.length, a = i < 3 ? t : r === null ? r = Object.getOwnPropertyDescriptor(t, n) : r, o;
4
+ if (typeof Reflect == "object" && typeof Reflect.decorate == "function") a = Reflect.decorate(e, t, n, r);
5
+ else for (var s = e.length - 1; s >= 0; s--) (o = e[s]) && (a = (i < 3 ? o(a) : i > 3 ? o(t, n, a) : o(t, n)) || a);
6
+ return i > 3 && a && Object.defineProperty(t, n, a), a;
7
+ }
8
+ //#endregion
9
+ export { e as t };
@@ -0,0 +1,7 @@
1
+ import { EmotionCache } from '@emotion/cache';
2
+ import { WindowService } from '@gen-epix/ui-core/classes/services/WindowService';
3
+ import { ConfigBase } from '../../../models/config.models';
4
+ export declare class EmotionCacheService {
5
+ readonly emotionCache: EmotionCache;
6
+ constructor(config: ConfigBase, windowService: WindowService);
7
+ }
@@ -0,0 +1 @@
1
+ export * from './EmotionCacheService';
@@ -0,0 +1 @@
1
+ export { t as EmotionCacheService } from "../../../_chunks/EmotionCacheService.js";
@@ -4,7 +4,5 @@ export type Event = {
4
4
  onShowImportDialog: string | undefined;
5
5
  };
6
6
  export declare class FastaDataEventBusService extends EventBusAbstract<Event> {
7
- private static __instance;
8
- private constructor();
9
- static getInstance(): FastaDataEventBusService;
7
+ constructor();
10
8
  }
@@ -1,16 +1,14 @@
1
- import { EventBusAbstract as e } from "@gen-epix/ui-core/classes/abstracts/EventBusAbstract";
2
- import { HmrUtil as t } from "@gen-epix/ui-core/utils/HmrUtil";
1
+ import { t as e } from "../../../_chunks/decorate.js";
2
+ import { singleton as t } from "tsyringe";
3
+ import { EventBusAbstract as n } from "@gen-epix/ui-core/classes/abstracts/EventBusAbstract";
3
4
  //#region src/classes/services/FastaDataEventBusService/FastaDataEventBusService.ts
4
- var n = class n extends e {
5
- static __instance;
5
+ var r = class extends n {
6
6
  constructor() {
7
7
  super();
8
8
  }
9
- static getInstance() {
10
- return n.__instance = t.getHmrSingleton("fastaDataEventBusService", n.__instance, () => new n()), n.__instance;
11
- }
12
9
  };
10
+ r = e([t()], r);
13
11
  //#endregion
14
- export { n as FastaDataEventBusService };
12
+ export { r as FastaDataEventBusService };
15
13
 
16
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["FastaDataEventBusService","EventBusAbstract","HmrUtil"],"sources":["../../../../src/classes/services/FastaDataEventBusService/FastaDataEventBusService.ts"],"sourcesContent":["import { EventBusAbstract } from '@gen-epix/ui-core/classes/abstracts/EventBusAbstract';\nimport { HmrUtil } from '@gen-epix/ui-core/utils/HmrUtil';\n\n\nexport type Event = {\n onCloseImportDialog: undefined;\n onShowImportDialog: string | undefined;\n};\n\nexport class FastaDataEventBusService extends EventBusAbstract<Event> {\n private static __instance: FastaDataEventBusService;\n\n\n private constructor() {\n super();\n }\n\n public static getInstance(): FastaDataEventBusService {\n FastaDataEventBusService.__instance = HmrUtil.getHmrSingleton('fastaDataEventBusService', FastaDataEventBusService.__instance, () => new FastaDataEventBusService());\n return FastaDataEventBusService.__instance;\n }\n}\n"],"mappings":";;;AASA,IAAaA,IAAb,MAAaA,UAAiCC,EAAwB;CACpE,OAAe;CAGf,cAAsB;EACpB,MAAM;CACR;CAEA,OAAc,cAAwC;EAEpD,OADA,EAAyB,aAAaC,EAAQ,gBAAgB,4BAA4BF,EAAyB,kBAAkB,IAAIA,EAAyB,CAAC,GAC5JA,EAAyB;CAClC;AACF"}
1
+ {"version":3,"file":"index.js","names":["_decorate","__decorate","FastaDataEventBusService","EventBusAbstract","singleton"],"sources":["../../../../src/classes/services/FastaDataEventBusService/FastaDataEventBusService.ts"],"sourcesContent":["import { EventBusAbstract } from '@gen-epix/ui-core/classes/abstracts/EventBusAbstract';\nimport { singleton } from 'tsyringe';\n\n\nexport type Event = {\n onCloseImportDialog: undefined;\n onShowImportDialog: string | undefined;\n};\n\n@singleton()\nexport class FastaDataEventBusService extends EventBusAbstract<Event> {\n public constructor() {\n super();\n }\n}\n"],"mappings":";;;;AAUO,IAAME,IAAN,cAAuCC,EAAwB;CACpE,cAAqB;EACnB,MAAM;CACR;AACF;AALC,IAAAH,EAAA,CAAAI,EAAU,CAAA,GAAAF,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { DependencyContainer } from 'tsyringe';
2
+ import { PropsWithChildren } from 'react';
3
+ export type AppProps = PropsWithChildren<{
4
+ readonly container: DependencyContainer;
5
+ }>;
6
+ export declare const App: ({ children, container }: AppProps) => import('react').JSX.Element;
@@ -0,0 +1 @@
1
+ export * from './App';
@@ -0,0 +1,104 @@
1
+ import { DependencyContainerUtil as e } from "../../../utils/DependencyContainerUtil/index.js";
2
+ import { PageCommonContextProvider as t } from "../../../context/pageCommonContext/index.js";
3
+ import { CommonConfigContextProvider as n } from "../../../context/commonConfigContext/index.js";
4
+ import { ErrorPage as r } from "../../../pages/ErrorPage/index.js";
5
+ import { I18nWrapper as i } from "../../ui/I18nWrapper/index.js";
6
+ import { t as a } from "../../../_chunks/EmotionCacheService.js";
7
+ import { CssBaseline as o, ThemeProvider as s } from "@mui/material";
8
+ import { jsx as c, jsxs as l } from "react/jsx-runtime";
9
+ import { Component as u, createContext as d, createElement as f, useMemo as p } from "react";
10
+ import { CacheProvider as m } from "@emotion/react";
11
+ //#region ../../../node_modules/.pnpm/react-error-boundary@6.1.6_@types+react@19.3.0_react@19.3.0/node_modules/react-error-boundary/dist/react-error-boundary.js
12
+ var h = d(null);
13
+ function g({ children: e, didCatch: t, error: n, resetErrorBoundary: r }) {
14
+ let i = p(() => ({
15
+ didCatch: t,
16
+ error: n,
17
+ resetErrorBoundary: r
18
+ }), [
19
+ t,
20
+ n,
21
+ r
22
+ ]);
23
+ return f(h.Provider, { value: i }, e);
24
+ }
25
+ var _ = {
26
+ didCatch: !1,
27
+ error: null
28
+ }, v = class extends u {
29
+ constructor(e) {
30
+ super(e), this.resetErrorBoundary = this.resetErrorBoundary.bind(this), this.state = _;
31
+ }
32
+ static getDerivedStateFromError(e) {
33
+ return {
34
+ didCatch: !0,
35
+ error: e
36
+ };
37
+ }
38
+ resetErrorBoundary(...e) {
39
+ let { didCatch: t } = this.state;
40
+ t && (this.props.onReset?.({
41
+ args: e,
42
+ reason: "imperative-api"
43
+ }), this.setState(_));
44
+ }
45
+ componentDidCatch(e, t) {
46
+ this.props.onError?.(e, t);
47
+ }
48
+ componentDidUpdate(e, t) {
49
+ let { didCatch: n } = this.state, { resetKeys: r } = this.props;
50
+ n && t.didCatch && y(e.resetKeys, r) && (this.props.onReset?.({
51
+ next: r,
52
+ prev: e.resetKeys,
53
+ reason: "keys"
54
+ }), this.setState(_));
55
+ }
56
+ render() {
57
+ let { children: e, fallbackRender: t, FallbackComponent: n, fallback: r } = this.props, { didCatch: i, error: a } = this.state, o = e;
58
+ if (i) {
59
+ let e = {
60
+ error: a,
61
+ resetErrorBoundary: this.resetErrorBoundary
62
+ };
63
+ if (typeof t == "function") o = t(e);
64
+ else if (n) o = f(n, e);
65
+ else if ("fallback" in this.props) o = r;
66
+ else throw a;
67
+ }
68
+ return f(g, {
69
+ didCatch: i,
70
+ error: a,
71
+ resetErrorBoundary: this.resetErrorBoundary
72
+ }, o);
73
+ }
74
+ };
75
+ function y(e = [], t = []) {
76
+ return e.length !== t.length || e.some((e, n) => !Object.is(e, t[n]));
77
+ }
78
+ //#endregion
79
+ //#region src/components/app/App/App.tsx
80
+ var b = ({ children: u, container: d }) => {
81
+ let f = e.resolveConfig(d), { pageConfig: p } = f, h = f.getTouchIconUrl?.();
82
+ h && document.querySelector("link[rel=\"icon\"]")?.setAttribute("href", h);
83
+ let g = d.resolve(a).emotionCache;
84
+ return /* @__PURE__ */ c(n, {
85
+ container: d,
86
+ children: /* @__PURE__ */ c(m, {
87
+ value: g,
88
+ children: /* @__PURE__ */ l(s, {
89
+ theme: f.theme,
90
+ children: [/* @__PURE__ */ c(o, {}), /* @__PURE__ */ c(v, {
91
+ FallbackComponent: r,
92
+ children: /* @__PURE__ */ c(i, { children: /* @__PURE__ */ c(t, {
93
+ ...p,
94
+ children: u
95
+ }) })
96
+ })]
97
+ })
98
+ })
99
+ });
100
+ };
101
+ //#endregion
102
+ export { b as App };
103
+
104
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["l","h","i","y","ErrorBoundary","EmotionCacheService","f","createContext","m","r","e","t","o","n","useMemo","createElement","d","C","Component","g","s","c","u","App","config","DependencyContainerUtil","container","touchIconUrl","emotionCache","CommonConfigContextProvider","CacheProvider","ThemeProvider","CssBaseline","ErrorPage","I18nWrapper","PageCommonContextProvider","pageConfig"],"sources":["../../../../../../../node_modules/.pnpm/react-error-boundary@6.1.6_@types+react@19.3.0_react@19.3.0/node_modules/react-error-boundary/dist/react-error-boundary.js","../../../../src/components/app/App/App.tsx"],"sourcesContent":["\"use client\";\nimport { createContext as l, useMemo as h, createElement as i, Component as y, useContext as p, useState as E, forwardRef as B } from \"react\";\nconst f = l(null);\nfunction m({\n children: r,\n didCatch: e,\n error: t,\n resetErrorBoundary: o\n}) {\n const n = h(\n () => ({ didCatch: e, error: t, resetErrorBoundary: o }),\n [e, t, o]\n );\n return i(f.Provider, { value: n }, r);\n}\nconst d = {\n didCatch: !1,\n error: null\n};\nclass C extends y {\n constructor(e) {\n super(e), this.resetErrorBoundary = this.resetErrorBoundary.bind(this), this.state = d;\n }\n static getDerivedStateFromError(e) {\n return { didCatch: !0, error: e };\n }\n resetErrorBoundary(...e) {\n const { didCatch: t } = this.state;\n t && (this.props.onReset?.({\n args: e,\n reason: \"imperative-api\"\n }), this.setState(d));\n }\n componentDidCatch(e, t) {\n this.props.onError?.(e, t);\n }\n componentDidUpdate(e, t) {\n const { didCatch: o } = this.state, { resetKeys: n } = this.props;\n o && t.didCatch && g(e.resetKeys, n) && (this.props.onReset?.({\n next: n,\n prev: e.resetKeys,\n reason: \"keys\"\n }), this.setState(d));\n }\n render() {\n const { children: e, fallbackRender: t, FallbackComponent: o, fallback: n } = this.props, { didCatch: s, error: a } = this.state;\n let c = e;\n if (s) {\n const u = {\n error: a,\n resetErrorBoundary: this.resetErrorBoundary\n };\n if (typeof t == \"function\")\n c = t(u);\n else if (o)\n c = i(o, u);\n else if (\"fallback\" in this.props)\n c = n;\n else\n throw a;\n }\n return i(\n m,\n {\n didCatch: s,\n error: a,\n resetErrorBoundary: this.resetErrorBoundary\n },\n c\n );\n }\n}\nfunction g(r = [], e = []) {\n return r.length !== e.length || r.some((t, o) => !Object.is(t, e[o]));\n}\nfunction x(r) {\n return r !== null && typeof r == \"object\" && \"didCatch\" in r && typeof r.didCatch == \"boolean\" && \"error\" in r && \"resetErrorBoundary\" in r && typeof r.resetErrorBoundary == \"function\";\n}\nfunction b(r) {\n if (!x(r))\n throw new Error(\"ErrorBoundaryContext not found\");\n}\nfunction S() {\n const r = p(f);\n b(r);\n const { error: e, resetErrorBoundary: t } = r, [o, n] = E({\n error: null,\n hasError: !1\n }), s = h(\n () => ({\n error: e,\n resetBoundary: () => {\n t(), n({ error: null, hasError: !1 });\n },\n showBoundary: (a) => n({\n error: a,\n hasError: !0\n })\n }),\n [e, t]\n );\n if (o.hasError)\n throw o.error;\n return s;\n}\nfunction w(r) {\n switch (typeof r) {\n case \"object\": {\n if (r !== null && \"message\" in r && typeof r.message == \"string\")\n return r.message;\n break;\n }\n case \"string\":\n return r;\n }\n}\nfunction R(r, e) {\n const t = B(\n (n, s) => i(\n C,\n e,\n i(r, { ...n, ref: s })\n )\n ), o = r.displayName || r.name || \"Unknown\";\n return t.displayName = `withErrorBoundary(${o})`, t;\n}\nexport {\n C as ErrorBoundary,\n f as ErrorBoundaryContext,\n w as getErrorMessage,\n S as useErrorBoundary,\n R as withErrorBoundary\n};\n//# sourceMappingURL=react-error-boundary.js.map\n","import type { DependencyContainer } from 'tsyringe';\nimport { CacheProvider } from '@emotion/react';\nimport {\n CssBaseline,\n ThemeProvider,\n} from '@mui/material';\nimport { ErrorBoundary } from 'react-error-boundary';\nimport type { PropsWithChildren } from 'react';\n\nimport { EmotionCacheService } from '../../../classes/services/EmotionCacheService';\nimport type { ConfigBase } from '../../../models/config.models';\nimport { DependencyContainerUtil } from '../../../utils/DependencyContainerUtil';\nimport { CommonConfigContextProvider } from '../../../context/commonConfigContext';\nimport { ErrorPage } from '../../../pages/ErrorPage';\nimport { I18nWrapper } from '../../ui/I18nWrapper';\nimport { PageCommonContextProvider } from '../../../context/pageCommonContext';\n\nexport type AppProps = PropsWithChildren<{\n readonly container: DependencyContainer;\n}>;\n\nexport const App = ({ children, container }: AppProps) => {\n const config = DependencyContainerUtil.resolveConfig<ConfigBase>(container);\n const { pageConfig } = config;\n const touchIconUrl = config.getTouchIconUrl?.();\n if (touchIconUrl) {\n document.querySelector('link[rel=\"icon\"]')?.setAttribute('href', touchIconUrl);\n }\n\n const emotionCache = container.resolve(EmotionCacheService).emotionCache;\n\n return (\n <CommonConfigContextProvider container={container}>\n <CacheProvider value={emotionCache}>\n <ThemeProvider theme={config.theme}>\n <CssBaseline />\n <ErrorBoundary FallbackComponent={ErrorPage}>\n <I18nWrapper>\n <PageCommonContextProvider {...pageConfig}>\n {children}\n </PageCommonContextProvider>\n </I18nWrapper>\n </ErrorBoundary>\n </ThemeProvider>\n </CacheProvider>\n </CommonConfigContextProvider>\n );\n};\n"],"ignoreList":[0],"mappings":";;;;;;;;;;;AAEA,IAAMM,IAAIN,EAAE,IAAI;AAChB,SAASQ,EAAE,EACT,UAAUC,GACV,UAAUC,GACV,OAAOC,GACP,oBAAoBC,KACnB;CACD,IAAMC,IAAIZ,SACD;EAAE,UAAUS;EAAG,OAAOC;EAAG,oBAAoBC;CAAE,IACtD;EAACF;EAAGC;EAAGC;CAAC,CACV;CACA,OAAOV,EAAEI,EAAE,UAAU,EAAE,OAAOO,EAAE,GAAGJ,CAAC;AACtC;AACA,IAAMO,IAAI;CACR,UAAU,CAAC;CACX,OAAO;AACT,GACMC,IAAN,cAAgBd,EAAE;CAChB,YAAY,GAAG;EACb,MAAM,CAAC,GAAG,KAAK,qBAAqB,KAAK,mBAAmB,KAAK,IAAI,GAAG,KAAK,QAAQa;CACvF;CACA,OAAO,yBAAyB,GAAG;EACjC,OAAO;GAAE,UAAU,CAAC;GAAG,OAAO;EAAE;CAClC;CACA,mBAAmB,GAAG,GAAG;EACvB,IAAM,EAAE,UAAU,MAAM,KAAK;EAC7B,MAAM,KAAK,MAAM,UAAU;GACzB,MAAM;GACN,QAAQ;EACV,CAAC,GAAG,KAAK,SAASA,CAAC;CACrB;CACA,kBAAkB,GAAG,GAAG;EACtB,KAAK,MAAM,UAAU,GAAG,CAAC;CAC3B;CACA,mBAAmB,GAAG,GAAG;EACvB,IAAM,EAAE,UAAUJ,MAAM,KAAK,OAAO,EAAE,WAAWC,MAAM,KAAK;EAC5D,KAAK,EAAE,YAAYM,EAAE,EAAE,WAAWN,CAAC,MAAM,KAAK,MAAM,UAAU;GAC5D,MAAMA;GACN,MAAM,EAAE;GACR,QAAQ;EACV,CAAC,GAAG,KAAK,SAASG,CAAC;CACrB;CACA,SAAS;EACP,IAAM,EAAE,UAAU,GAAG,gBAAgB,GAAG,mBAAmBJ,GAAG,UAAUC,MAAM,KAAK,OAAO,EAAE,UAAUO,GAAG,OAAO,MAAM,KAAK,OACvHC,IAAI;EACR,IAAID,GAAG;GACL,IAAME,IAAI;IACR,OAAO;IACP,oBAAoB,KAAK;GAC3B;GACA,IAAI,OAAO,KAAK,YACd,IAAI,EAAEA,CAAC;QACJ,IAAIV,GACP,IAAIV,EAAEU,GAAGU,CAAC;QACP,IAAI,cAAc,KAAK,OAC1B,IAAIT;QAEJ,MAAM;EACV;EACA,OAAOX,EACLM,GACA;GACE,UAAUY;GACV,OAAO;GACP,oBAAoB,KAAK;EAC3B,GACAC,CACF;CACF;AACF;AACA,SAASF,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG;CACzB,OAAOV,EAAE,WAAWC,EAAE,UAAUD,EAAE,MAAM,GAAG,MAAM,CAAC,OAAO,GAAGE,GAAGD,EAAEE,EAAE,CAAC;AACtE;;;ACrDA,IAAaW,KAAO,EAAE,aAAU,mBAA0B;CACxD,IAAMC,IAASC,EAAwB,cAA0BC,CAAS,GACpE,EAAE,kBAAeF,GACjBG,IAAeH,EAAO,kBAAkB;CAC9C,AAAIG,KACF,SAAS,cAAc,oBAAkB,CAAC,EAAE,aAAa,QAAQA,CAAY;CAG/E,IAAMC,IAAeF,EAAU,QAAQrB,CAAmB,CAAC,CAAC;CAE5D,OACE,kBAACwB,GAAD;EAAwC;EACtC,UAAA,kBAACC,GAAD;GAAe,OAAOF;GACpB,UAAA,kBAACG,GAAD;IAAe,OAAOP,EAAO;IAA7B,UAAA,CACE,kBAACQ,GAAD,CAAc,CAAA,GACd,kBAAC5B,GAAD;KAAe,mBAAmB6B;KAChC,UAAA,kBAACC,GAAD,EAAA,UACE,kBAACC,GAAD;MAA2B,GAAIC;MAC5B;KACwB,CAAA,EAChB,CAAA;IACA,CAAA,CACF;;EACF,CAAA;CACY,CAAA;AAEjC"}
@@ -5,7 +5,7 @@ import m from "@mui/icons-material/Biotech";
5
5
  import h from "@mui/icons-material/TableChart";
6
6
  import { FileDropZone as g } from "@gen-epix/ui-core-components/components/FileDropZone";
7
7
  import { withDialog as _ } from "@gen-epix/ui-core-components/hoc/withDialog";
8
- //#region src/components/FastaDataImportDialog/FastaDataImportDialog.tsx
8
+ //#region src/components/fasta/FastaDataImportDialog/FastaDataImportDialog.tsx
9
9
  var v = _(({ extraActions: _, onActionsChange: v, onClose: y, onDataChange: b, onDisableBackdropClickChange: x, onError: S, onNoCloseButtonChange: C, openProps: w }) => {
10
10
  let [T, E] = p(0), [D, O] = p(null), [k, A] = p(""), [j, M] = p(""), [N, ee] = p(0), [P, F] = p(null), [I, L] = p(""), [R, z] = p(""), [B, V] = p(!1), [H, U] = p(null);
11
11
  f(() => {
@@ -304,6 +304,6 @@ var v = _(({ extraActions: _, onActionsChange: v, onClose: y, onDataChange: b, o
304
304
  testId: "FastaDataImportDialog"
305
305
  });
306
306
  //#endregion
307
- export { v as t };
307
+ export { v as FastaDataImportDialog };
308
308
 
309
- //# sourceMappingURL=FastaDataImportDialog.js.map
309
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_Fragment","DnaIcon","TableChartIcon","FastaDataImportDialog","withDialog","fastaTab","setFastaTab","useState","fastaFile","setFastaFile","fastaUrl","setFastaUrl","fastaText","setFastaText","metadataTab","setMetadataTab","metadataFile","setMetadataFile","metadataUrl","setMetadataUrl","metadataText","setMetadataText","isLoading","setIsLoading","errorMsg","setErrorMsg","useEffect","openProps","onNoCloseButtonChange","onDisableBackdropClickChange","onCloseError","useCallback","onChangeFastaTab","value","onChangeMetadataTab","onFileSelectedFasta","file","onFileSelectedMetadata","onChangeFastaUrl","event","onChangeFastaText","onChangeMetadataUrl","onChangeMetadataText","onClickLoadData","fastaContent","res","metadataContent","onDataChange","onClose","err","onError","actions","CircularProgress","extraActions","onActionsChange","Fragment","Alert","Box","Paper","Typography","Tabs","Tab","FileDropZone","TextField"],"sources":["../../../../src/components/fasta/FastaDataImportDialog/FastaDataImportDialog.tsx"],"sourcesContent":["import type {\n ChangeEvent,\n ReactElement,\n SyntheticEvent,\n} from 'react';\nimport {\n useCallback,\n useEffect,\n useState,\n} from 'react';\nimport {\n Alert,\n Box,\n CircularProgress,\n Paper,\n Tab,\n Tabs,\n TextField,\n Typography,\n} from '@mui/material';\nimport DnaIcon from '@mui/icons-material/Biotech';\nimport TableChartIcon from '@mui/icons-material/TableChart';\nimport { FileDropZone } from '@gen-epix/ui-core-components/components/FileDropZone';\nimport type {\n WithDialogRefMethods,\n WithDialogRenderProps,\n} from '@gen-epix/ui-core-components/hoc/withDialog';\nimport { withDialog } from '@gen-epix/ui-core-components/hoc/withDialog';\nimport type { DialogAction } from '@gen-epix/ui-core-components/components/Dialog';\n\n\nenum FASTA_TAB {\n DROP = 0,\n URL = 1,\n PASTE = 2,\n}\n\nenum META_DATA_TAB {\n DROP = 0,\n URL = 1,\n PASTE = 2,\n}\n\nexport interface FastaDataImportDialogOpenProps {\n initialErrorMessage?: string;\n}\n\nexport interface FastaDataImportDialogProps extends WithDialogRenderProps<FastaDataImportDialogOpenProps> {\n extraActions?: DialogAction[];\n onDataChange: (fasta: string, metaData?: string) => void;\n onError: (error: unknown) => void;\n}\n\nexport type FastaDataImportDialogRefMethods = WithDialogRefMethods<FastaDataImportDialogProps, FastaDataImportDialogOpenProps>;\n\nexport const FastaDataImportDialog = withDialog<FastaDataImportDialogProps, FastaDataImportDialogOpenProps>((\n {\n extraActions,\n onActionsChange,\n onClose,\n onDataChange,\n onDisableBackdropClickChange,\n onError,\n onNoCloseButtonChange,\n openProps,\n }: FastaDataImportDialogProps,\n): ReactElement => {\n // FASTA state\n const [fastaTab, setFastaTab] = useState(FASTA_TAB.DROP);\n const [fastaFile, setFastaFile] = useState<FileList | null>(null);\n const [fastaUrl, setFastaUrl] = useState('');\n const [fastaText, setFastaText] = useState('');\n\n // Metadata state\n const [metadataTab, setMetadataTab] = useState(META_DATA_TAB.DROP);\n const [metadataFile, setMetadataFile] = useState<FileList | null>(null);\n const [metadataUrl, setMetadataUrl] = useState('');\n const [metadataText, setMetadataText] = useState('');\n\n const [isLoading, setIsLoading] = useState(false);\n const [errorMsg, setErrorMsg] = useState<null | string>(null);\n\n useEffect(() => {\n setErrorMsg(openProps?.initialErrorMessage ?? null);\n }, [openProps]);\n\n useEffect(() => {\n if (onNoCloseButtonChange) {\n onNoCloseButtonChange(!!openProps?.initialErrorMessage);\n }\n if (onDisableBackdropClickChange) {\n onDisableBackdropClickChange(!!openProps?.initialErrorMessage);\n }\n }, [onDisableBackdropClickChange, onNoCloseButtonChange, openProps?.initialErrorMessage]);\n\n const onCloseError = useCallback(() => setErrorMsg(null), []);\n const onChangeFastaTab = useCallback((_event: SyntheticEvent, value: number) => {\n setFastaTab(value);\n }, []);\n const onChangeMetadataTab = useCallback((_event: SyntheticEvent, value: number) => {\n setMetadataTab(value);\n }, []);\n const onFileSelectedFasta = useCallback((file: FileList) => setFastaFile(file), []);\n const onFileSelectedMetadata = useCallback((file: FileList) => setMetadataFile(file), []);\n const onChangeFastaUrl = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n setFastaUrl(event.target.value);\n }, []);\n const onChangeFastaText = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n setFastaText(event.target.value);\n }, []);\n const onChangeMetadataUrl = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n setMetadataUrl(event.target.value);\n }, []);\n const onChangeMetadataText = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n setMetadataText(event.target.value);\n }, []);\n\n const onClickLoadData = useCallback(async () => {\n setErrorMsg(null);\n setIsLoading(true);\n\n try {\n // 1. Resolve FASTA content\n let fastaContent = '';\n if (fastaTab === FASTA_TAB.DROP && fastaFile) {\n fastaContent = await fastaFile[0].text();\n } else if (fastaTab === FASTA_TAB.URL && fastaUrl.trim()) {\n const res = await fetch(fastaUrl.trim());\n if (!res.ok) {\n throw new Error(`Failed to fetch FASTA from URL (${res.status} ${res.statusText})`);\n }\n fastaContent = await res.text();\n } else if (fastaTab === FASTA_TAB.PASTE && fastaText.trim()) {\n fastaContent = fastaText.trim();\n }\n\n if (!fastaContent?.trim()) {\n throw new Error('Please provide FASTA sequence data via file, URL, or paste.');\n }\n\n // 2. Resolve Metadata content (optional)\n let metadataContent = '';\n if (metadataTab === META_DATA_TAB.DROP && metadataFile) {\n metadataContent = await metadataFile[0].text();\n } else if (metadataTab === META_DATA_TAB.URL && metadataUrl.trim()) {\n const res = await fetch(metadataUrl.trim());\n if (!res.ok) {\n throw new Error(`Failed to fetch Metadata from URL (${res.status} ${res.statusText})`);\n }\n metadataContent = await res.text();\n } else if (metadataTab === META_DATA_TAB.PASTE && metadataText.trim()) {\n metadataContent = metadataText.trim();\n }\n onDataChange(fastaContent, metadataContent);\n if (onClose) {\n onClose();\n }\n } catch (err: unknown) {\n console.error('Data import failed:', err);\n onError(err);\n } finally {\n setIsLoading(false);\n }\n }, [fastaFile, fastaTab, fastaText, fastaUrl, metadataFile, metadataTab, metadataText, metadataUrl, onClose, onDataChange, onError]);\n\n\n useEffect(() => {\n const actions: DialogAction[] = [\n {\n disabled: isLoading,\n label: isLoading ? 'Processing...' : 'Load & Calculate',\n onClick: onClickLoadData,\n startIcon: isLoading ? (\n <CircularProgress\n color={'inherit'}\n size={18}\n />\n ) : undefined,\n variant: 'contained',\n },\n ];\n if (extraActions?.length) {\n actions.unshift(...extraActions);\n }\n if (onActionsChange) {\n onActionsChange(actions);\n }\n }, [onActionsChange, onClickLoadData, isLoading, extraActions]);\n\n return (\n <>\n {errorMsg && (\n <Alert\n onClose={onCloseError}\n severity={'error'}\n sx={{\n marginBottom: 2,\n }}\n >\n {errorMsg}\n </Alert>\n )}\n <Box sx={{ display: 'grid', gap: 3, gridTemplateColumns: { md: '1fr 1fr', xs: '1fr' } }}>\n {/* FASTA Sequences Group */}\n <Paper\n sx={{ borderRadius: 2, p: 2.5 }}\n variant={'outlined'}\n >\n <Box sx={{ alignItems: 'center', display: 'flex', gap: 1, mb: 1.5 }}>\n <DnaIcon color={'primary'} />\n <Typography\n sx={{ fontWeight: 700 }}\n variant={'subtitle1'}\n >\n {'1. FASTA Sequences (Required)'}\n </Typography>\n </Box>\n <Typography\n color={'text.secondary'}\n sx={{ display: 'block', mb: 2 }}\n variant={'caption'}\n >\n {'Pre-aligned nucleotide or amino-acid sequence data.'}\n </Typography>\n <Tabs\n onChange={onChangeFastaTab}\n sx={{ mb: 2, minHeight: 36 }}\n value={fastaTab}\n >\n <Tab\n label={'File Upload'}\n sx={{ fontSize: '0.85rem', py: 0.5 }}\n />\n <Tab\n label={'Public URL'}\n sx={{ fontSize: '0.85rem', py: 0.5 }}\n />\n <Tab\n label={'Direct Paste'}\n sx={{ fontSize: '0.85rem', py: 0.5 }}\n />\n </Tabs>\n {fastaTab === FASTA_TAB.DROP && (\n <FileDropZone\n accept={'.fasta,.fa,.fna,.aln'}\n files={fastaFile}\n helperText={'Drag & drop .fasta / .fa alignment file'}\n onFilesSelected={onFileSelectedFasta}\n />\n )}\n {fastaTab === FASTA_TAB.URL && (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1.5, justifyContent: 'center', minHeight: 180 }}>\n <TextField\n fullWidth\n helperText={'Enter a publicly accessible URL to a FASTA alignment'}\n label={'FASTA URL'}\n onChange={onChangeFastaUrl}\n placeholder={'https://example.com/sequences.fasta'}\n value={fastaUrl}\n variant={'outlined'}\n />\n </Box>\n )}\n {fastaTab === FASTA_TAB.PASTE && (\n <Box sx={{ minHeight: 180 }}>\n <TextField\n fullWidth\n label={'Paste FASTA Content'}\n multiline\n onChange={onChangeFastaText}\n placeholder={'>seq1&#10;ACTG...&#10;>seq2&#10;ACTG...'}\n rows={6}\n sx={{ fontFamily: 'monospace' }}\n value={fastaText}\n variant={'outlined'}\n />\n </Box>\n )}\n </Paper>\n {/* TSV Metadata Group */}\n <Paper\n sx={{ borderRadius: 2, p: 2.5 }}\n variant={'outlined'}\n >\n <Box sx={{ alignItems: 'center', display: 'flex', gap: 1, mb: 1.5 }}>\n <TableChartIcon color={'primary'} />\n <Typography\n sx={{ fontWeight: 700 }}\n variant={'subtitle1'}\n >\n {'2. TSV Metadata (Optional)'}\n </Typography>\n </Box>\n <Typography\n color={'text.primary'}\n sx={{ display: 'block', mb: 2 }}\n variant={'caption'}\n >\n {'Sample attributes for coloring, search & custom leaf labels.'}\n </Typography>\n <Tabs\n onChange={onChangeMetadataTab}\n sx={{ mb: 2, minHeight: 36 }}\n value={metadataTab}\n >\n <Tab\n label={'File Upload'}\n sx={{ fontSize: '0.85rem', py: 0.5 }}\n />\n <Tab\n label={'Public URL'}\n sx={{ fontSize: '0.85rem', py: 0.5 }}\n />\n <Tab\n label={'Direct Paste'}\n sx={{ fontSize: '0.85rem', py: 0.5 }}\n />\n </Tabs>\n {metadataTab === META_DATA_TAB.DROP && (\n <FileDropZone\n accept={'.tsv,.txt,.csv'}\n files={metadataFile}\n label={'TSV Metadata File'}\n onFilesSelected={onFileSelectedMetadata}\n />\n )}\n {metadataTab === META_DATA_TAB.URL && (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1.5, justifyContent: 'center', minHeight: 180 }}>\n <TextField\n fullWidth\n helperText={'Enter a publicly accessible URL to a TSV metadata file'}\n label={'Metadata TSV URL'}\n onChange={onChangeMetadataUrl}\n placeholder={'https://example.com/metadata.tsv'}\n value={metadataUrl}\n variant={'outlined'}\n />\n </Box>\n )}\n {metadataTab === META_DATA_TAB.PASTE && (\n <Box sx={{ minHeight: 180 }}>\n <TextField\n fullWidth\n label={'Paste TSV Content'}\n multiline\n onChange={onChangeMetadataText}\n placeholder={'SampleID&#9;Country&#9;Date&#10;Sample1&#9;NL&#9;2024-01-01'}\n rows={6}\n sx={{ fontFamily: 'monospace' }}\n value={metadataText}\n variant={'outlined'}\n />\n </Box>\n )}\n </Paper>\n </Box>\n </>\n );\n}, {\n defaultTitle: 'Load Phylogenetic Data',\n fullWidth: true,\n maxWidth: 'xl',\n testId: 'FastaDataImportDialog',\n});\n"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { DialogAction } from '@gen-epix/ui-core-components/components/Dialog';
2
2
  import { StoreApi } from 'zustand';
3
- import { FastaDataStore } from '../../stores/fastaDataStore';
3
+ import { FastaDataStore } from '../../../stores/fastaDataStore';
4
4
  export type FastaDataImportDialogLoaderProps = {
5
- extraActions: DialogAction[];
5
+ extraActions?: DialogAction[];
6
6
  store: StoreApi<FastaDataStore>;
7
7
  };
8
8
  export declare const FastaDataImportDialogLoader: ({ extraActions, store }: FastaDataImportDialogLoaderProps) => import('react').JSX.Element;
@@ -0,0 +1,71 @@
1
+ import { UrlUtil as e } from "../../../utils/UrlUtil/index.js";
2
+ import { ErrorUtil as t } from "../../../utils/ErrorUtil/index.js";
3
+ import { LOADING_STATUS as n } from "../../../models/fasta.models.js";
4
+ import { FastaDataEventBusService as r } from "../../../classes/services/FastaDataEventBusService/index.js";
5
+ import { t as i } from "../../../_chunks/react.js";
6
+ import { FastaDataImportDialog as a } from "../FastaDataImportDialog/index.js";
7
+ import { container as o } from "tsyringe";
8
+ import { Fragment as s, jsx as c } from "react/jsx-runtime";
9
+ import { useCallback as l, useEffect as u, useRef as d } from "react";
10
+ //#region src/components/fasta/FastaDataImportDialogLoader/FastaDataImportDialogLoader.tsx
11
+ var f = ({ extraActions: f, store: p }) => {
12
+ let m = i(p, (e) => e.setData), h = i(p, (e) => e.setLoadingStatus), g = d(null);
13
+ u(() => {
14
+ let e = [o.resolve(r).addEventListener("onShowImportDialog", (e) => {
15
+ g.current?.open(e ? { initialErrorMessage: e } : void 0);
16
+ }), o.resolve(r).addEventListener("onCloseImportDialog", () => {
17
+ g.current?.close();
18
+ })];
19
+ return () => {
20
+ e.forEach((e) => e());
21
+ };
22
+ }, []), u(() => {
23
+ let e = new URLSearchParams(window.location.search), t = e.get("input-fasta"), i = e.get("input-metadata");
24
+ (async () => {
25
+ if (t) {
26
+ h(n.LOADING);
27
+ try {
28
+ let e = await fetch(t);
29
+ if (!e.ok) throw Error(`FASTA fetch failed (${e.status})`);
30
+ let r = await e.text();
31
+ if (!r.trim()) throw h(n.ERROR), Error("The input-fasta URL returned no sequence data. Check that the URL and requested accession(s) are correct.");
32
+ let a;
33
+ if (i) try {
34
+ let e = await fetch(i);
35
+ e.ok && (a = await e.text());
36
+ } catch (e) {
37
+ console.warn("[App] Failed to auto-fetch metadata:", e);
38
+ }
39
+ await m(r, a);
40
+ } catch (e) {
41
+ console.error("[App] Failed to auto-load FASTA:", e);
42
+ let t = e instanceof Error ? e.message : "Failed to auto-load FASTA from the provided URL.";
43
+ o.resolve(r).emit("onShowImportDialog", t);
44
+ }
45
+ } else o.resolve(r).emit("onShowImportDialog");
46
+ })();
47
+ }, [m, h]);
48
+ let _ = l((e) => {
49
+ g.current?.close(), o.resolve(r).emit("onShowImportDialog", e);
50
+ }, []), v = l(async (n, r) => {
51
+ try {
52
+ await m(n, r), g.current?.close();
53
+ } catch (e) {
54
+ _(t.getErrorMessage(e, "Unknown error"));
55
+ } finally {
56
+ e.clearSearchParams();
57
+ }
58
+ }, [_, m]), y = l((e) => {
59
+ _(t.getErrorMessage(e, "Unknown error"));
60
+ }, [_]);
61
+ return /* @__PURE__ */ c(s, { children: /* @__PURE__ */ c(a, {
62
+ extraActions: f,
63
+ onDataChange: v,
64
+ onError: y,
65
+ ref: g
66
+ }) });
67
+ };
68
+ //#endregion
69
+ export { f as FastaDataImportDialogLoader };
70
+
71
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_Fragment","useStore","FastaDataImportDialogLoader","setData","store","state","setLoadingStatus","fastaDataImportDialogRef","useRef","useEffect","removers","container","FastaDataEventBusService","initialErrorMessage","remove","urlParams","inputFastaUrl","inputMetadataUrl","LOADING_STATUS","fastaRes","fastaText","metaText","metaRes","metaErr","fastaErr","message","handleError","useCallback","errorMessage","onDataChange","fastaContent","metadataContent","ErrorUtil","onError","Fragment","FastaDataImportDialog"],"sources":["../../../../src/components/fasta/FastaDataImportDialogLoader/FastaDataImportDialogLoader.tsx"],"sourcesContent":["import { container } from 'tsyringe';\nimport type { DialogAction } from '@gen-epix/ui-core-components/components/Dialog';\nimport {\n useCallback,\n useEffect,\n useRef,\n} from 'react';\nimport type { StoreApi } from 'zustand';\nimport { useStore } from 'zustand';\n\nimport { FastaDataEventBusService } from '../../../classes/services/FastaDataEventBusService';\nimport { LOADING_STATUS } from '../../../models/fasta.models';\nimport type { FastaDataStore } from '../../../stores/fastaDataStore';\nimport { UrlUtil } from '../../../utils/UrlUtil';\nimport type { FastaDataImportDialogRefMethods } from '../FastaDataImportDialog';\nimport { FastaDataImportDialog } from '../FastaDataImportDialog';\nimport { ErrorUtil } from '../../../utils/ErrorUtil';\n\n\nexport type FastaDataImportDialogLoaderProps = {\n extraActions?: DialogAction[];\n store: StoreApi<FastaDataStore>;\n};\n\nexport const FastaDataImportDialogLoader = ({ extraActions, store }: FastaDataImportDialogLoaderProps) => {\n const setData = useStore(store, (state) => state.setData);\n const setLoadingStatus = useStore(store, (state) => state.setLoadingStatus);\n const fastaDataImportDialogRef = useRef<FastaDataImportDialogRefMethods>(null);\n\n useEffect(() => {\n const removers = [\n // eslint-disable-next-line @eslint-react/web-api-no-leaked-event-listener\n container.resolve(FastaDataEventBusService).addEventListener('onShowImportDialog', (initialErrorMessage?: string) => {\n fastaDataImportDialogRef.current?.open(initialErrorMessage ? { initialErrorMessage } : undefined);\n }),\n // eslint-disable-next-line @eslint-react/web-api-no-leaked-event-listener\n container.resolve(FastaDataEventBusService).addEventListener('onCloseImportDialog', () => {\n fastaDataImportDialogRef.current?.close();\n }),\n ];\n return () => {\n removers.forEach((remove) => remove());\n };\n }, []);\n\n useEffect(() => {\n // Scan URL parameters for deep-linking\n const urlParams = new URLSearchParams(window.location.search);\n const inputFastaUrl = urlParams.get('input-fasta');\n const inputMetadataUrl = urlParams.get('input-metadata');\n\n const handleDeepLinking = async () => {\n if (inputFastaUrl) {\n setLoadingStatus(LOADING_STATUS.LOADING);\n try {\n const fastaRes = await fetch(inputFastaUrl);\n if (!fastaRes.ok) {\n throw new Error(`FASTA fetch failed (${fastaRes.status})`);\n }\n const fastaText = await fastaRes.text();\n\n if (!fastaText.trim()) {\n setLoadingStatus(LOADING_STATUS.ERROR);\n throw new Error('The input-fasta URL returned no sequence data. Check that the URL and requested accession(s) are correct.');\n }\n\n let metaText: string | undefined;\n if (inputMetadataUrl) {\n try {\n const metaRes = await fetch(inputMetadataUrl);\n if (metaRes.ok) {\n metaText = await metaRes.text();\n }\n } catch (metaErr) {\n console.warn('[App] Failed to auto-fetch metadata:', metaErr);\n }\n }\n\n await setData(fastaText, metaText);\n } catch (fastaErr) {\n console.error('[App] Failed to auto-load FASTA:', fastaErr);\n const message = fastaErr instanceof Error ? fastaErr.message : 'Failed to auto-load FASTA from the provided URL.';\n container.resolve(FastaDataEventBusService).emit('onShowImportDialog', message);\n }\n } else {\n // PV1-02: Show data loading modal if no data provided via URL query params\n container.resolve(FastaDataEventBusService).emit('onShowImportDialog');\n }\n };\n\n void handleDeepLinking();\n }, [setData, setLoadingStatus]);\n\n const handleError = useCallback((errorMessage: string) => {\n fastaDataImportDialogRef.current?.close();\n container.resolve(FastaDataEventBusService).emit('onShowImportDialog', errorMessage);\n }, []);\n\n const onDataChange = useCallback(async (fastaContent: string, metadataContent?: string) => {\n try {\n await setData(fastaContent, metadataContent);\n fastaDataImportDialogRef.current?.close();\n } catch (e) {\n handleError(ErrorUtil.getErrorMessage(e, 'Unknown error'));\n } finally {\n // clear any search params from the URL\n UrlUtil.clearSearchParams();\n }\n }, [handleError, setData]);\n\n const onError = useCallback((errorMessage: unknown) => {\n handleError(ErrorUtil.getErrorMessage(errorMessage, 'Unknown error'));\n }, [handleError]);\n\n return (\n <>\n <FastaDataImportDialog\n extraActions={extraActions}\n onDataChange={onDataChange}\n onError={onError}\n ref={fastaDataImportDialogRef}\n />\n </>\n );\n};\n"],"mappings":";;;;;;;;;;AAwBA,IAAaE,KAA+B,EAAE,iBAAc,eAA8C;CACxG,IAAMC,IAAUF,EAASG,IAAQ,MAAUC,EAAM,OAAO,GAClDC,IAAmBL,EAASG,IAAQ,MAAUC,EAAM,gBAAgB,GACpEE,IAA2BC,EAAwC,IAAI;CAkB7E,AAhBAC,QAAgB;EACd,IAAMC,IAAW,CAEfC,EAAU,QAAQC,CAAwB,CAAC,CAAC,iBAAiB,uBAAuB,MAAiC;GACnH,EAAyB,SAAS,KAAKC,IAAsB,EAAE,uBAAoB,IAAI,KAAA,CAAS;EAClG,CAAC,GAEDF,EAAU,QAAQC,CAAwB,CAAC,CAAC,iBAAiB,6BAA6B;GACxF,EAAyB,SAAS,MAAM;EAC1C,CAAC,CACH;EACA,aAAa;GACX,EAAS,SAAS,MAAWE,EAAO,CAAC;EACvC;CACF,GAAG,CAAC,CAAC,GAELL,QAAgB;EAEd,IAAMM,IAAY,IAAI,gBAAgB,OAAO,SAAS,MAAM,GACtDC,IAAgBD,EAAU,IAAI,aAAa,GAC3CE,IAAmBF,EAAU,IAAI,gBAAgB;EAyCvD,aAvCsC;GACpC,IAAIC,GAAe;IACjB,EAAiBE,EAAe,OAAO;IACvC,IAAI;KACF,IAAMC,IAAW,MAAM,MAAMH,CAAa;KAC1C,IAAI,CAACG,EAAS,IACZ,MAAU,MAAM,uBAAuBA,EAAS,OAAO,EAAE;KAE3D,IAAMC,IAAY,MAAMD,EAAS,KAAK;KAEtC,IAAI,CAACC,EAAU,KAAK,GAElB,MADAd,EAAiBY,EAAe,KAAK,GAC3B,MAAM,2GAA2G;KAG7H,IAAIG;KACJ,IAAIJ,GACF,IAAI;MACF,IAAMK,IAAU,MAAM,MAAML,CAAgB;MAC5C,AAAIK,EAAQ,OACV,IAAW,MAAMA,EAAQ,KAAK;KAElC,SAASC,GAAS;MAChB,QAAQ,KAAK,wCAAwCA,CAAO;KAC9D;KAGF,MAAMpB,EAAQiB,GAAWC,CAAQ;IACnC,SAASG,GAAU;KACjB,QAAQ,MAAM,oCAAoCA,CAAQ;KAC1D,IAAMC,IAAUD,aAAoB,QAAQA,EAAS,UAAU;KAC/D,EAAU,QAAQZ,CAAwB,CAAC,CAAC,KAAK,sBAAsBa,CAAO;IAChF;GACF,OAEE,EAAU,QAAQb,CAAwB,CAAC,CAAC,KAAK,oBAAoB;EAEzE,EAEK,CAAkB;CACzB,GAAG,CAACT,GAASG,CAAgB,CAAC;CAE9B,IAAMoB,IAAcC,GAAa,MAAyB;EAExD,AADApB,EAAyB,SAAS,MAAM,GACxCI,EAAU,QAAQC,CAAwB,CAAC,CAAC,KAAK,sBAAsBgB,CAAY;CACrF,GAAG,CAAC,CAAC,GAECC,IAAeF,EAAY,OAAO,GAAsB,MAA6B;EACzF,IAAI;GAEF,AADA,MAAMxB,EAAQ2B,GAAcC,CAAe,GAC3CxB,EAAyB,SAAS,MAAM;EAC1C,SAAS,GAAG;GACV,EAAYyB,EAAU,gBAAgB,GAAG,eAAe,CAAC;EAC3D,UAAU;GAER,EAAQ,kBAAkB;EAC5B;CACF,GAAG,CAACN,GAAavB,CAAO,CAAC,GAEnB8B,IAAUN,GAAa,MAA0B;EACrD,EAAYK,EAAU,gBAAgBJ,GAAc,eAAe,CAAC;CACtE,GAAG,CAACF,CAAW,CAAC;CAEhB,OACE,kBAAA1B,GAAA,EAAA,UACE,kBAACmC,GAAD;EACgB;EACA;EACL;EACT,KAAK5B;CACN,CAAA,EACD,CAAA;AAEN"}
@@ -0,0 +1,54 @@
1
+ import { FastaDataEventBusService as e } from "../../../classes/services/FastaDataEventBusService/index.js";
2
+ import { container as t } from "tsyringe";
3
+ import { Box as n, Button as r, Typography as i } from "@mui/material";
4
+ import { jsx as a, jsxs as o } from "react/jsx-runtime";
5
+ import { useCallback as s } from "react";
6
+ import c from "@mui/icons-material/FileUploadOutlined";
7
+ //#region src/components/fasta/FastaNotLoaded/FastaNotLoaded.tsx
8
+ var l = ({ description: l, icon: u, title: d }) => {
9
+ let f = s(() => {
10
+ t.resolve(e).emit("onShowImportDialog");
11
+ }, []);
12
+ return /* @__PURE__ */ o(n, {
13
+ sx: {
14
+ alignItems: "center",
15
+ display: "flex",
16
+ flexDirection: "column",
17
+ gap: 2,
18
+ height: "100%",
19
+ justifyContent: "center",
20
+ p: 3,
21
+ width: "100%"
22
+ },
23
+ children: [
24
+ u,
25
+ /* @__PURE__ */ a(i, {
26
+ color: "text.secondary",
27
+ sx: { fontWeight: 600 },
28
+ variant: "h6",
29
+ children: d
30
+ }),
31
+ /* @__PURE__ */ a(i, {
32
+ color: "text.secondary",
33
+ sx: {
34
+ maxWidth: 450,
35
+ textAlign: "center"
36
+ },
37
+ variant: "body2",
38
+ children: l
39
+ }),
40
+ /* @__PURE__ */ a(r, {
41
+ color: "primary",
42
+ onClick: f,
43
+ startIcon: /* @__PURE__ */ a(c, {}),
44
+ sx: { mt: 1 },
45
+ variant: "contained",
46
+ children: "Load Data"
47
+ })
48
+ ]
49
+ });
50
+ };
51
+ //#endregion
52
+ export { l as FastaNotLoaded };
53
+
54
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["FileUploadOutlinedIcon","FastaNotLoaded","onClickLoadData","useCallback","FastaDataEventBusService","Box","icon","Typography","title","description","Button"],"sources":["../../../../src/components/fasta/FastaNotLoaded/FastaNotLoaded.tsx"],"sourcesContent":["import { container } from 'tsyringe';\nimport {\n Box,\n Button,\n Typography,\n} from '@mui/material';\nimport FileUploadOutlinedIcon from '@mui/icons-material/FileUploadOutlined';\nimport type { ReactNode } from 'react';\nimport { useCallback } from 'react';\n\nimport { FastaDataEventBusService } from '../../../classes/services/FastaDataEventBusService';\n\nexport type FastaNotLoadedProps = {\n description: ReactNode;\n icon: ReactNode;\n title: ReactNode;\n};\n\nexport const FastaNotLoaded = ({ description, icon, title }: FastaNotLoadedProps) => {\n const onClickLoadData = useCallback(() => {\n container.resolve(FastaDataEventBusService).emit('onShowImportDialog');\n }, []);\n\n return (\n <Box\n sx={{\n alignItems: 'center',\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n height: '100%',\n justifyContent: 'center',\n p: 3,\n width: '100%',\n }}\n >\n {icon}\n <Typography\n color={'text.secondary'}\n sx={{ fontWeight: 600 }}\n variant={'h6'}\n >\n {title}\n </Typography>\n <Typography\n color={'text.secondary'}\n sx={{ maxWidth: 450, textAlign: 'center' }}\n variant={'body2'}\n >\n {description}\n </Typography>\n <Button\n color={'primary'}\n onClick={onClickLoadData}\n startIcon={<FileUploadOutlinedIcon />}\n sx={{ mt: 1 }}\n variant={'contained'}\n >\n {'Load Data'}\n </Button>\n </Box>\n );\n};\n"],"mappings":";;;;;;;AAkBA,IAAaC,KAAkB,EAAE,gBAAa,SAAM,eAAiC;CACnF,IAAMC,IAAkBC,QAAkB;EACxC,EAAU,QAAQC,CAAwB,CAAC,CAAC,KAAK,oBAAoB;CACvE,GAAG,CAAC,CAAC;CAEL,OACE,kBAACC,GAAD;EACE,IAAI;GACF,YAAY;GACZ,SAAS;GACT,eAAe;GACf,KAAK;GACL,QAAQ;GACR,gBAAgB;GAChB,GAAG;GACH,OAAO;EACT;EAVF,UAAA;GAYGC;GACD,kBAACC,GAAD;IACE,OAAO;IACP,IAAI,EAAE,YAAY,IAAI;IACtB,SAAS;IAER,UAAAC;GACS,CAAA;GACZ,kBAACD,GAAD;IACE,OAAO;IACP,IAAI;KAAE,UAAU;KAAK,WAAW;IAAS;IACzC,SAAS;IAER,UAAAE;GACS,CAAA;GACZ,kBAACC,GAAD;IACE,OAAO;IACP,SAASR;IACT,WAAW,kBAACF,GAAD,CAAyB,CAAA;IACpC,IAAI,EAAE,IAAI,EAAE;IACZ,SAAS;IAER,UAAA;GACK,CAAA;EACL;;AAET"}
@@ -1,5 +1,5 @@
1
1
  import { StoreApi } from 'zustand';
2
- import { FastaDataStore } from '../../stores/fastaDataStore';
2
+ import { FastaDataStore } from '../../../stores/fastaDataStore';
3
3
  export type FastaPageHeaderCenterComponentProps = {
4
4
  store: StoreApi<FastaDataStore>;
5
5
  };
@@ -1,7 +1,7 @@
1
- import { t as e } from "../../_chunks/react.js";
1
+ import { t as e } from "../../../_chunks/react.js";
2
2
  import { Box as t, Chip as n } from "@mui/material";
3
3
  import { jsx as r, jsxs as i } from "react/jsx-runtime";
4
- //#region src/components/FastaPageHeaderCenterComponent/FastaPageHeaderCenterComponent.tsx
4
+ //#region src/components/fasta/FastaPageHeaderCenterComponent/FastaPageHeaderCenterComponent.tsx
5
5
  var a = ({ store: a }) => {
6
6
  let o = e(a, (e) => e.parsedFasta), s = e(a, (e) => e.parsedMetadata), c = o?.sequences?.length || 0, l = s?.records?.length || 0;
7
7
  return /* @__PURE__ */ i(t, {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["useStore","FastaPageHeaderCenterComponent","parsedFasta","store","state","parsedMetadata","seqCount","metaCount","Box","Chip"],"sources":["../../../../src/components/fasta/FastaPageHeaderCenterComponent/FastaPageHeaderCenterComponent.tsx"],"sourcesContent":["import {\n Box,\n Chip,\n} from '@mui/material';\nimport type { StoreApi } from 'zustand';\nimport { useStore } from 'zustand';\n\nimport type { FastaDataStore } from '../../../stores/fastaDataStore';\n\n\nexport type FastaPageHeaderCenterComponentProps = {\n store: StoreApi<FastaDataStore>;\n};\n\nexport const FastaPageHeaderCenterComponent = ({ store }: FastaPageHeaderCenterComponentProps) => {\n const parsedFasta = useStore(store, (state) => state.parsedFasta);\n const parsedMetadata = useStore(store, (state) => state.parsedMetadata);\n\n const seqCount = parsedFasta?.sequences?.length || 0;\n const metaCount = parsedMetadata?.records?.length || 0;\n\n return (\n <Box sx={{ alignItems: 'center', display: 'flex', gap: 1 }}>\n {seqCount > 0 && (\n <Chip\n label={`${seqCount} Sequences`}\n size={'small'}\n sx={{\n backgroundColor: 'rgba(255, 255, 255, 0.2)',\n color: '#FFFFFF',\n fontSize: '0.75rem',\n fontWeight: 600,\n }}\n />\n )}\n {metaCount > 0 && (\n <Chip\n label={`${metaCount} Metadata Records`}\n size={'small'}\n sx={{\n backgroundColor: 'rgba(255, 255, 255, 0.2)',\n color: '#FFFFFF',\n fontSize: '0.75rem',\n fontWeight: 600,\n }}\n />\n )}\n </Box>\n );\n};\n"],"mappings":";;;;AAcA,IAAaC,KAAkC,EAAE,eAAiD;CAChG,IAAMC,IAAcF,EAASG,IAAQ,MAAUC,EAAM,WAAW,GAC1DC,IAAiBL,EAASG,IAAQ,MAAUC,EAAM,cAAc,GAEhEE,IAAWJ,GAAa,WAAW,UAAU,GAC7CK,IAAYF,GAAgB,SAAS,UAAU;CAErD,OACE,kBAACG,GAAD;EAAK,IAAI;GAAE,YAAY;GAAU,SAAS;GAAQ,KAAK;EAAE;EAAzD,UAAA,CACGF,IAAW,KACV,kBAACG,GAAD;GACE,OAAO,GAAGH,EAAS;GACnB,MAAM;GACN,IAAI;IACF,iBAAiB;IACjB,OAAO;IACP,UAAU;IACV,YAAY;GACd;EACD,CAAA,GAEFC,IAAY,KACX,kBAACE,GAAD;GACE,OAAO,GAAGF,EAAU;GACpB,MAAM;GACN,IAAI;IACF,iBAAiB;IACjB,OAAO;IACP,UAAU;IACV,YAAY;GACd;EACD,CAAA,CAEA;;AAET"}
@@ -0,0 +1,27 @@
1
+ import { FastaDataEventBusService as e } from "../../../classes/services/FastaDataEventBusService/index.js";
2
+ import { container as t } from "tsyringe";
3
+ import { Button as n } from "@mui/material";
4
+ import { jsx as r } from "react/jsx-runtime";
5
+ import { useCallback as i } from "react";
6
+ import a from "@mui/icons-material/FileUploadOutlined";
7
+ //#region src/components/fasta/FastaPageHeaderImportButton/FastaPageHeaderImportButton.tsx
8
+ var o = () => {
9
+ let o = i(() => t.resolve(e).emit("onShowImportDialog"), []);
10
+ return /* @__PURE__ */ r(n, {
11
+ color: "inherit",
12
+ onClick: o,
13
+ size: "small",
14
+ startIcon: /* @__PURE__ */ r(a, {}),
15
+ sx: {
16
+ "&:hover": { backgroundColor: "rgba(255, 255, 255, 0.25)" },
17
+ backgroundColor: "rgba(255, 255, 255, 0.15)",
18
+ color: "#FFFFFF"
19
+ },
20
+ variant: "contained",
21
+ children: "Import Data"
22
+ });
23
+ };
24
+ //#endregion
25
+ export { o as FastaPageHeaderImportButton };
26
+
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["FileUploadOutlinedIcon","FastaPageHeaderImportButton","onImportDataButtonClick","useCallback","container","FastaDataEventBusService","Button"],"sources":["../../../../src/components/fasta/FastaPageHeaderImportButton/FastaPageHeaderImportButton.tsx"],"sourcesContent":["import { container } from 'tsyringe';\nimport FileUploadOutlinedIcon from '@mui/icons-material/FileUploadOutlined';\nimport { Button } from '@mui/material';\nimport { useCallback } from 'react';\n\nimport { FastaDataEventBusService } from '../../../classes/services/FastaDataEventBusService';\n\nexport const FastaPageHeaderImportButton = () => {\n const onImportDataButtonClick = useCallback(() => container.resolve(FastaDataEventBusService).emit('onShowImportDialog'), []);\n\n return (\n <Button\n color={'inherit'}\n onClick={onImportDataButtonClick}\n size={'small'}\n startIcon={<FileUploadOutlinedIcon />}\n sx={{\n '&:hover': {\n backgroundColor: 'rgba(255, 255, 255, 0.25)',\n },\n backgroundColor: 'rgba(255, 255, 255, 0.15)',\n color: '#FFFFFF',\n }}\n variant={'contained'}\n >\n {'Import Data'}\n </Button>\n );\n};\n"],"mappings":";;;;;;;AAOA,IAAaC,UAAoC;CAC/C,IAAMC,IAA0BC,QAAkBC,EAAU,QAAQC,CAAwB,CAAC,CAAC,KAAK,oBAAoB,GAAG,CAAC,CAAC;CAE5H,OACE,kBAACC,GAAD;EACE,OAAO;EACP,SAASJ;EACT,MAAM;EACN,WAAW,kBAACF,GAAD,CAAyB,CAAA;EACpC,IAAI;GACF,WAAW,EACT,iBAAiB,4BACnB;GACA,iBAAiB;GACjB,OAAO;EACT;EACA,SAAS;EAER,UAAA;CACK,CAAA;AAEZ"}
@@ -4,7 +4,7 @@ import { Fragment as r, jsx as i, jsxs as a } from "react/jsx-runtime";
4
4
  import { useCallback as o, useRef as s } from "react";
5
5
  import c from "@mui/icons-material/RestartAlt";
6
6
  import { Confirmation as l } from "@gen-epix/ui-core-components/components/Confirmation";
7
- //#region src/components/FastaPageHeaderResetButton/FastaPageHeaderResetButton.tsx
7
+ //#region src/components/fasta/FastaPageHeaderResetButton/FastaPageHeaderResetButton.tsx
8
8
  var u = ({ onReset: u }) => {
9
9
  let d = s(null), f = o(() => {
10
10
  d.current?.open();
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_Fragment","RestartAltIcon","FastaPageHeaderResetButton","confirmationRef","useRef","onClickResetSession","useCallback","onConfirm","onReset","Fragment","Tooltip","IconButton","Confirmation"],"sources":["../../../../src/components/fasta/FastaPageHeaderResetButton/FastaPageHeaderResetButton.tsx"],"sourcesContent":["import RestartAltIcon from '@mui/icons-material/RestartAlt';\nimport {\n IconButton,\n Tooltip,\n} from '@mui/material';\nimport {\n useCallback,\n useRef,\n} from 'react';\nimport { Confirmation } from '@gen-epix/ui-core-components/components/Confirmation';\nimport type { ConfirmationRefMethods } from '@gen-epix/ui-core-components/components/Confirmation';\nimport { t } from 'i18next';\n\nexport type FastaPageHeaderResetButtonProps = {\n onReset: () => void;\n};\n\nexport const FastaPageHeaderResetButton = ({ onReset }: FastaPageHeaderResetButtonProps) => {\n const confirmationRef = useRef<ConfirmationRefMethods>(null);\n const onClickResetSession = useCallback(() => {\n confirmationRef.current?.open();\n }, []);\n\n const onConfirm = useCallback(() => {\n onReset();\n }, [onReset]);\n\n return (\n <>\n <Tooltip title={'Reset current session and dataset'}>\n <IconButton\n color={'inherit'}\n onClick={onClickResetSession}\n size={'small'}\n sx={{ opacity: 0.85 }}\n >\n <RestartAltIcon fontSize={'small'} />\n </IconButton>\n </Tooltip>\n <Confirmation\n body={t`Are you sure you want to reset the current session and dataset?`}\n cancelLabel={t`Cancel`}\n confirmLabel={t`Reset`}\n onConfirm={onConfirm}\n ref={confirmationRef}\n title={t`Reset current session and dataset?`}\n />\n </>\n );\n};\n"],"mappings":";;;;;;;AAiBA,IAAaE,KAA8B,EAAE,iBAA+C;CAC1F,IAAMC,IAAkBC,EAA+B,IAAI,GACrDC,IAAsBC,QAAkB;EAC5C,EAAgB,SAAS,KAAK;CAChC,GAAG,CAAC,CAAC,GAECC,IAAYD,QAAkB;EAClC,EAAQ;CACV,GAAG,CAACE,CAAO,CAAC;CAEZ,OACE,kBAAAR,GAAA,EAAA,UAAA,CACE,kBAACU,GAAD;EAAS,OAAO;EACd,UAAA,kBAACC,GAAD;GACE,OAAO;GACP,SAASN;GACT,MAAM;GACN,IAAI,EAAE,SAAS,IAAK;GAEpB,UAAA,kBAACJ,GAAD,EAAgB,UAAU,QAAU,CAAA;EAC1B,CAAA;CACL,CAAA,GACT,kBAACW,GAAD;EACE,MAAM,CAAC;EACP,aAAa,CAAC;EACd,cAAc,CAAC;EACJ;EACX,KAAKT;EACL,OAAO,CAAC;CACT,CAAA,CACD,EAAA,CAAA;AAEN"}
@@ -0,0 +1,12 @@
1
+ import { ReactElement } from 'react';
2
+ export type ButtonWithMenuProps = {
3
+ disabled?: boolean;
4
+ items: Array<{
5
+ icon: ReactElement;
6
+ label: string;
7
+ onClick: () => void;
8
+ }>;
9
+ label: string;
10
+ startIcon?: ReactElement;
11
+ };
12
+ export declare const ButtonWithMenu: ({ disabled, items, label, startIcon }: ButtonWithMenuProps) => import('react').JSX.Element;
@@ -0,0 +1 @@
1
+ export * from './ButtonWithMenu';
@@ -0,0 +1,47 @@
1
+ import { Button as e, ListItemIcon as t, ListItemText as n, Menu as r, MenuItem as i } from "@mui/material";
2
+ import { Fragment as a, jsx as o, jsxs as s } from "react/jsx-runtime";
3
+ import { useCallback as c, useState as l } from "react";
4
+ //#region src/components/ui/ButtonWithMenu/ButtonWithMenu.tsx
5
+ var u = ({ disabled: u, items: d, label: f, startIcon: p }) => {
6
+ let [m, h] = l(null), g = !!m, _ = c((e) => {
7
+ h(e.currentTarget);
8
+ }, []), v = c(() => {
9
+ h(null);
10
+ }, []);
11
+ return /* @__PURE__ */ s(a, { children: [/* @__PURE__ */ o(e, {
12
+ color: "inherit",
13
+ disabled: u,
14
+ onClick: _,
15
+ size: "small",
16
+ startIcon: p,
17
+ sx: {
18
+ "&:hover": { backgroundColor: "rgba(255, 255, 255, 0.25)" },
19
+ backgroundColor: "rgba(255, 255, 255, 0.15)",
20
+ color: "#FFFFFF"
21
+ },
22
+ variant: "contained",
23
+ children: f
24
+ }), /* @__PURE__ */ o(r, {
25
+ anchorEl: m,
26
+ anchorOrigin: {
27
+ horizontal: "right",
28
+ vertical: "bottom"
29
+ },
30
+ onClose: v,
31
+ open: g,
32
+ transformOrigin: {
33
+ horizontal: "right",
34
+ vertical: "top"
35
+ },
36
+ children: d.map(({ icon: e, label: r, onClick: a }) => /* @__PURE__ */ s(i, {
37
+ onClick: () => {
38
+ v(), a();
39
+ },
40
+ children: [/* @__PURE__ */ o(t, { children: e }), /* @__PURE__ */ o(n, { primary: r })]
41
+ }, r))
42
+ })] });
43
+ };
44
+ //#endregion
45
+ export { u as ButtonWithMenu };
46
+
47
+ //# sourceMappingURL=index.js.map