synapse-react-client 4.0.23 → 4.0.24

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 (46) hide show
  1. package/dist/SWC.index.js +1 -1
  2. package/dist/components/EntityCitation/EntityCitation.d.ts.map +1 -1
  3. package/dist/components/EntityCitation/EntityCitation.js +28 -26
  4. package/dist/components/EntityCitation/EntityCitation.js.map +1 -1
  5. package/dist/components/Plot/SynapsePlot.d.ts +4 -0
  6. package/dist/components/Plot/SynapsePlot.d.ts.map +1 -1
  7. package/dist/components/Plot/SynapsePlot.js +57 -44
  8. package/dist/components/Plot/SynapsePlot.js.map +1 -1
  9. package/dist/components/QueryWrapperPlotNav/QueryWrapperSynapsePlot.d.ts.map +1 -1
  10. package/dist/components/QueryWrapperPlotNav/QueryWrapperSynapsePlot.js +77 -34
  11. package/dist/components/QueryWrapperPlotNav/QueryWrapperSynapsePlot.js.map +1 -1
  12. package/dist/components/SearchQueryWrapperPlotNav/SearchQueryWrapperPlotNav.d.ts.map +1 -1
  13. package/dist/components/SearchQueryWrapperPlotNav/SearchQueryWrapperPlotNav.js +1 -0
  14. package/dist/components/SearchQueryWrapperPlotNav/SearchQueryWrapperPlotNav.js.map +1 -1
  15. package/dist/components/entity/page/action_menu/EntityActionMenu.d.ts +2 -0
  16. package/dist/components/entity/page/action_menu/EntityActionMenu.d.ts.map +1 -1
  17. package/dist/components/entity/page/action_menu/EntityActionMenu.js +46 -27
  18. package/dist/components/entity/page/action_menu/EntityActionMenu.js.map +1 -1
  19. package/dist/components/entity/page/breadcrumbs/EntityPageBreadcrumbs.d.ts.map +1 -1
  20. package/dist/components/entity/page/breadcrumbs/EntityPageBreadcrumbs.js +0 -1
  21. package/dist/components/entity/page/breadcrumbs/EntityPageBreadcrumbs.js.map +1 -1
  22. package/dist/components/entity/page/title_bar/EntityPageTitleBar.d.ts +1 -0
  23. package/dist/components/entity/page/title_bar/EntityPageTitleBar.d.ts.map +1 -1
  24. package/dist/components/entity/page/title_bar/EntityPageTitleBar.js +31 -22
  25. package/dist/components/entity/page/title_bar/EntityPageTitleBar.js.map +1 -1
  26. package/dist/components/entity/page/title_bar/EntityTitleBarVersionInfo.d.ts.map +1 -1
  27. package/dist/components/entity/page/title_bar/EntityTitleBarVersionInfo.js +34 -20
  28. package/dist/components/entity/page/title_bar/EntityTitleBarVersionInfo.js.map +1 -1
  29. package/dist/components/favorites/FavoriteButton.d.ts +1 -0
  30. package/dist/components/favorites/FavoriteButton.d.ts.map +1 -1
  31. package/dist/components/favorites/FavoriteButton.js +8 -8
  32. package/dist/components/favorites/FavoriteButton.js.map +1 -1
  33. package/dist/components/menu/DropdownMenu.d.ts +1 -0
  34. package/dist/components/menu/DropdownMenu.d.ts.map +1 -1
  35. package/dist/components/menu/DropdownMenu.js +24 -24
  36. package/dist/components/menu/DropdownMenu.js.map +1 -1
  37. package/dist/components/widgets/facet-nav/FacetNavPanel.d.ts.map +1 -1
  38. package/dist/components/widgets/facet-nav/FacetNavPanel.js +59 -49
  39. package/dist/components/widgets/facet-nav/FacetNavPanel.js.map +1 -1
  40. package/dist/components/widgets/facet-nav/PlotsContainer.d.ts.map +1 -1
  41. package/dist/components/widgets/facet-nav/PlotsContainer.js +8 -2
  42. package/dist/components/widgets/facet-nav/PlotsContainer.js.map +1 -1
  43. package/dist/style/components/facet_nav/_facet-nav-panel.scss +11 -0
  44. package/dist/style/main.css +1 -1
  45. package/dist/tsconfig.build.tsbuildinfo +1 -1
  46. package/package.json +6 -6
package/dist/SWC.index.js CHANGED
@@ -113,7 +113,7 @@ var x = { BackendDestinationEnum: r }, S = {
113
113
  sendSearchResultsReturnedEvent: y,
114
114
  sendSearchResultReturnedEvent: v,
115
115
  sendSearchResultClickedEvent: _
116
- }, T = "4.0.23";
116
+ }, T = "4.0.24";
117
117
  //#endregion
118
118
  export { w as Analytics, a as HttpClient, d as Palettes, o as SynapseClient, C as SynapseComponents, n as SynapseConstants, S as SynapseContext, x as SynapseEnums, m as SynapseQueries, T as SynapseReactClientVersion, p as SynapseSessionManager, i as xssOptions };
119
119
 
@@ -1 +1 @@
1
- {"version":3,"file":"EntityCitation.d.ts","sourceRoot":"","sources":["../../../src/components/EntityCitation/EntityCitation.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAWzB,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,CAAA;AAED,QAAA,MAAM,cAAc,GAAI,yCAIrB,mBAAmB,KAAG,KAAK,CAAC,SAyJ9B,CAAA;AAED,eAAe,cAAc,CAAA"}
1
+ {"version":3,"file":"EntityCitation.d.ts","sourceRoot":"","sources":["../../../src/components/EntityCitation/EntityCitation.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAazB,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,CAAA;AAED,QAAA,MAAM,cAAc,GAAI,yCAIrB,mBAAmB,KAAG,KAAK,CAAC,SA2J9B,CAAA;AAED,eAAe,cAAc,CAAA"}
@@ -10,26 +10,26 @@ import { Button as c, Skeleton as l } from "@mui/material";
10
10
  import { Fragment as u, jsx as d, jsxs as f } from "react/jsx-runtime";
11
11
  import { DoiObjectType as p } from "@sage-bionetworks/synapse-client";
12
12
  //#region src/components/EntityCitation/EntityCitation.tsx
13
- var m = ({ projectId: m, entityId: h, versionNumber: g }) => {
14
- let { data: _, isLoading: v } = e(h, g), [y, b] = s(null), [x, S] = s(void 0), [C, w] = s(null), [T, E] = s(void 0), D = o(null), O = y ? "cite-as-popover" : void 0, k = a(h, g, m, _), { data: A, isLoading: j } = t({
15
- id: m,
13
+ var m = "10px 12px", h = ({ projectId: h, entityId: g, versionNumber: _ }) => {
14
+ let { data: v, isLoading: y } = e(g, _), [b, x] = s(null), [S, C] = s(void 0), [w, T] = s(null), [E, D] = s(void 0), O = o(null), k = b ? "cite-as-popover" : void 0, A = a(g, _, h, v), { data: j, isLoading: M } = t({
15
+ id: h,
16
16
  version: void 0,
17
17
  type: p.ENTITY
18
- }, { enabled: !!m }), M = A && k;
19
- function N() {
20
- return M ? "Cite as..." : k && !A ? "Cite page" : !k && A ? "Cite project" : "";
18
+ }, { enabled: !!h }), N = j && A;
19
+ function P() {
20
+ return N ? "Cite as..." : A && !j ? "Cite page" : !A && j ? "Cite project" : "";
21
21
  }
22
- let P = N();
23
- return !A && !k ? null : v || j ? /* @__PURE__ */ d(l, { sx: {
22
+ let F = P();
23
+ return !j && !A ? null : y || M ? /* @__PURE__ */ d(l, { sx: {
24
24
  width: {
25
25
  xs: "100%",
26
26
  sm: "140px"
27
27
  },
28
28
  height: "45px"
29
- } }) : /* @__PURE__ */ f(u, { children: [M ? /* @__PURE__ */ d(i, {
30
- disabled: v && j,
29
+ } }) : /* @__PURE__ */ f(u, { children: [N ? /* @__PURE__ */ d(i, {
30
+ disabled: y && M,
31
31
  options: ["Cite this Project", "Cite only this page"],
32
- anchorRef: D,
32
+ anchorRef: O,
33
33
  sx: {
34
34
  width: {
35
35
  xs: "100%",
@@ -37,7 +37,8 @@ var m = ({ projectId: m, entityId: h, versionNumber: g }) => {
37
37
  },
38
38
  "& .MuiButtonGroup-firstButton": {
39
39
  borderTopLeftRadius: "6px",
40
- borderBottomLeftRadius: "6px"
40
+ borderBottomLeftRadius: "6px",
41
+ padding: m
41
42
  },
42
43
  "& .MuiButtonGroup-lastButton": {
43
44
  borderTopRightRadius: "6px",
@@ -48,42 +49,43 @@ var m = ({ projectId: m, entityId: h, versionNumber: g }) => {
48
49
  buttonText: "Cite as...",
49
50
  variant: "outlined",
50
51
  buttonGroupAriaLabel: "Citation options",
51
- selectedIndex: T,
52
+ selectedIndex: E,
52
53
  setSelectedIndex: (e) => {
53
- E(e);
54
- let t = e === 0 ? A?.doiUri : k?.doiUri;
55
- t && (S(t), w(D.current));
54
+ D(e);
55
+ let t = e === 0 ? j?.doiUri : A?.doiUri;
56
+ t && (C(t), T(O.current));
56
57
  }
57
58
  }) : /* @__PURE__ */ d(c, {
58
59
  onClick: (e) => {
59
- k && !A ? (S(k.doiUri), w(e.currentTarget)) : !k && A ? (S(A.doiUri), w(e.currentTarget)) : b(e.currentTarget);
60
+ A && !j ? (C(A.doiUri), T(e.currentTarget)) : !A && j ? (C(j.doiUri), T(e.currentTarget)) : x(e.currentTarget);
60
61
  },
61
- disabled: v && j,
62
+ disabled: y && M,
62
63
  sx: {
63
64
  width: {
64
65
  xs: "100%",
65
66
  sm: "initial"
66
67
  },
67
68
  borderRadius: "6px",
68
- fontWeight: 540
69
+ fontWeight: 540,
70
+ padding: m
69
71
  },
70
72
  variant: "outlined",
71
73
  startIcon: /* @__PURE__ */ d(n, {
72
74
  width: 18,
73
75
  height: 18
74
76
  }),
75
- children: P
77
+ children: F
76
78
  }), /* @__PURE__ */ d(r, {
77
- doi: x,
78
- anchorEl: C,
79
- open: !!C && !!x,
80
- id: O,
79
+ doi: S,
80
+ anchorEl: w,
81
+ open: !!w && !!S,
82
+ id: k,
81
83
  onClose: () => {
82
- w(null), S(void 0);
84
+ T(null), C(void 0);
83
85
  }
84
86
  })] });
85
87
  };
86
88
  //#endregion
87
- export { m as default };
89
+ export { h as default };
88
90
 
89
91
  //# sourceMappingURL=EntityCitation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EntityCitation.js","names":[],"sources":["../../../src/components/EntityCitation/EntityCitation.tsx"],"sourcesContent":["import React from 'react'\nimport { ReactComponent as DoubleQuotes } from '@/assets/icons/DoubleQuotes.svg'\nimport { Button, Skeleton } from '@mui/material'\nimport { useGetDOIAssociation } from '@/synapse-queries/doi/useDOI'\nimport { useGetEntityBundle } from '@/synapse-queries/entity'\nimport { DoiObjectType } from '@sage-bionetworks/synapse-client'\nimport CitationPopoverContent from '../CitationPopover/CitationPopoverContent'\nimport { useRef, useState } from 'react'\nimport { useGetEntityDoiAssociation } from './EntityCitationUtils'\nimport DropdownSelect from '../DropdownSelect'\n\nexport type EntityCitationProps = {\n projectId: string\n entityId: string\n versionNumber?: number\n}\n\nconst EntityCitation = ({\n projectId,\n entityId,\n versionNumber,\n}: EntityCitationProps): React.ReactNode => {\n const { data: bundle, isLoading: isEntityLoading } = useGetEntityBundle(\n entityId,\n versionNumber,\n )\n const [anchorEl, setAnchorEl] = useState<HTMLButtonElement | null>(null)\n const [selectedDoi, setSelectedDoi] = useState<string | undefined>(undefined)\n const [citationAnchorEl, setCitationAnchorEl] = useState<HTMLElement | null>(\n null,\n )\n const [selectedIndex, setSelectedIndex] = useState<number | undefined>(\n undefined,\n )\n const citationButtonRef = useRef<HTMLDivElement>(null)\n\n const open = Boolean(anchorEl)\n const id = open ? 'cite-as-popover' : undefined\n\n const entityDoiAssociation = useGetEntityDoiAssociation(\n entityId,\n versionNumber,\n projectId,\n bundle,\n )\n\n // Get DOI association for the project\n // Projects are not versioned\n const { data: projectDoiAssociation, isLoading: isProjectLoading } =\n useGetDOIAssociation(\n {\n id: projectId,\n version: undefined,\n type: DoiObjectType.ENTITY,\n },\n {\n enabled: !!projectId,\n },\n )\n\n // If both project and entity have DOIs, we show the dropdown variant\n const isProjectAndEntityDoi = projectDoiAssociation && entityDoiAssociation\n\n function getButtonText() {\n if (isProjectAndEntityDoi) {\n return 'Cite as...'\n } else if (entityDoiAssociation && !projectDoiAssociation) {\n return 'Cite page'\n } else if (!entityDoiAssociation && projectDoiAssociation) {\n return 'Cite project'\n }\n return ''\n }\n\n const buttonText = getButtonText()\n\n const handleButtonClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n if (entityDoiAssociation && !projectDoiAssociation) {\n setSelectedDoi(entityDoiAssociation.doiUri)\n setCitationAnchorEl(event.currentTarget)\n } else if (!entityDoiAssociation && projectDoiAssociation) {\n setSelectedDoi(projectDoiAssociation.doiUri)\n setCitationAnchorEl(event.currentTarget)\n } else {\n // If both project and entity doi exist, show dropdown\n setAnchorEl(event.currentTarget)\n }\n }\n\n const popover = (\n <CitationPopoverContent\n doi={selectedDoi}\n anchorEl={citationAnchorEl}\n open={!!citationAnchorEl && !!selectedDoi}\n id={id}\n onClose={() => {\n setCitationAnchorEl(null)\n setSelectedDoi(undefined)\n }}\n />\n )\n\n const options: string[] = ['Cite this Project', 'Cite only this page']\n\n if (!projectDoiAssociation && !entityDoiAssociation) {\n return null\n }\n\n if (isEntityLoading || isProjectLoading) {\n return (\n <Skeleton\n sx={{\n width: { xs: '100%', sm: '140px' },\n height: '45px',\n }}\n />\n )\n }\n\n return (\n <>\n {isProjectAndEntityDoi ? (\n <DropdownSelect\n disabled={isEntityLoading && isProjectLoading}\n options={options}\n anchorRef={citationButtonRef}\n sx={{\n width: { xs: '100%', sm: 'initial' },\n '& .MuiButtonGroup-firstButton': {\n borderTopLeftRadius: '6px',\n borderBottomLeftRadius: '6px',\n },\n '& .MuiButtonGroup-lastButton': {\n borderTopRightRadius: '6px',\n borderBottomRightRadius: '6px',\n },\n '& .MuiButton-root': {\n fontWeight: 540,\n },\n }}\n buttonText=\"Cite as...\"\n variant=\"outlined\"\n buttonGroupAriaLabel=\"Citation options\"\n selectedIndex={selectedIndex}\n setSelectedIndex={(index: number) => {\n setSelectedIndex(index)\n const selected =\n index === 0\n ? projectDoiAssociation?.doiUri\n : entityDoiAssociation?.doiUri\n if (selected) {\n setSelectedDoi(selected)\n setCitationAnchorEl(citationButtonRef.current)\n }\n }}\n />\n ) : (\n <Button\n onClick={handleButtonClick}\n disabled={isEntityLoading && isProjectLoading}\n sx={{\n width: { xs: '100%', sm: 'initial' },\n borderRadius: '6px',\n fontWeight: 540,\n }}\n variant=\"outlined\"\n startIcon={<DoubleQuotes width={18} height={18} />}\n >\n {buttonText}\n </Button>\n )}\n {popover}\n </>\n )\n}\n\nexport default EntityCitation\n"],"mappings":";;;;;;;;;;;;AAiBA,IAAM,KAAkB,EACtB,cACA,aACA,uBAC0C;CAC1C,IAAM,EAAE,MAAM,GAAQ,WAAW,MAAoB,EACnD,GACA,CACF,GACM,CAAC,GAAU,KAAe,EAAmC,IAAI,GACjE,CAAC,GAAa,KAAkB,EAA6B,KAAA,CAAS,GACtE,CAAC,GAAkB,KAAuB,EAC9C,IACF,GACM,CAAC,GAAe,KAAoB,EACxC,KAAA,CACF,GACM,IAAoB,EAAuB,IAAI,GAG/C,IADe,IACH,oBAAoB,KAAA,GAEhC,IAAuB,EAC3B,GACA,GACA,GACA,CACF,GAIM,EAAE,MAAM,GAAuB,WAAW,MAC9C,EACE;EACE,IAAI;EACJ,SAAS,KAAA;EACT,MAAM,EAAc;CACtB,GACA,EACE,SAAS,CAAC,CAAC,EACb,CACF,GAGI,IAAwB,KAAyB;CAEvD,SAAS,IAAgB;EAQvB,OAPI,IACK,eACE,KAAwB,CAAC,IAC3B,cACE,CAAC,KAAwB,IAC3B,iBAEF;CACT;CAEA,IAAM,IAAa,EAAc;CA6CjC,OAfI,CAAC,KAAyB,CAAC,IACtB,OAGL,KAAmB,IAEnB,kBAAC,GAAD,EACE,IAAI;EACF,OAAO;GAAE,IAAI;GAAQ,IAAI;EAAQ;EACjC,QAAQ;CACV,EACD,CAAA,IAKH,kBAAA,GAAA,EAAA,UAAA,CACG,IACC,kBAAC,GAAD;EACE,UAAU,KAAmB;EACpB,UAtBU,qBAAqB,qBAsB/B;EACT,WAAW;EACX,IAAI;GACF,OAAO;IAAE,IAAI;IAAQ,IAAI;GAAU;GACnC,iCAAiC;IAC/B,qBAAqB;IACrB,wBAAwB;GAC1B;GACA,gCAAgC;IAC9B,sBAAsB;IACtB,yBAAyB;GAC3B;GACA,qBAAqB,EACnB,YAAY,IACd;EACF;EACA,YAAW;EACX,SAAQ;EACR,sBAAqB;EACN;EACf,mBAAmB,MAAkB;GACnC,EAAiB,CAAK;GACtB,IAAM,IACJ,MAAU,IACN,GAAuB,SACvB,GAAsB;GAC5B,AAAI,MACF,EAAe,CAAQ,GACvB,EAAoB,EAAkB,OAAO;EAEjD;CACD,CAAA,IAED,kBAAC,GAAD;EACE,UAlFmB,MAA+C;GACxE,AAAI,KAAwB,CAAC,KAC3B,EAAe,EAAqB,MAAM,GAC1C,EAAoB,EAAM,aAAa,KAC9B,CAAC,KAAwB,KAClC,EAAe,EAAsB,MAAM,GAC3C,EAAoB,EAAM,aAAa,KAGvC,EAAY,EAAM,aAAa;EAEnC;EAwEQ,UAAU,KAAmB;EAC7B,IAAI;GACF,OAAO;IAAE,IAAI;IAAQ,IAAI;GAAU;GACnC,cAAc;GACd,YAAY;EACd;EACA,SAAQ;EACR,WAAW,kBAAC,GAAD;GAAc,OAAO;GAAI,QAAQ;EAAK,CAAA;YAEhD;CACK,CAAA,GAET,gBAjFH,EAAC,GAAD;EACE,KAAK;EACL,UAAU;EACV,MAAM,CAAC,CAAC,KAAoB,CAAC,CAAC;EAC1B;EACJ,eAAe;GAEb,AADA,EAAoB,IAAI,GACxB,EAAe,KAAA,CAAS;EAC1B;CACD,CAwEE,CACD,EAAA,CAAA;AAEN"}
1
+ {"version":3,"file":"EntityCitation.js","names":[],"sources":["../../../src/components/EntityCitation/EntityCitation.tsx"],"sourcesContent":["import React from 'react'\nimport { ReactComponent as DoubleQuotes } from '@/assets/icons/DoubleQuotes.svg'\nimport { Button, Skeleton } from '@mui/material'\nimport { useGetDOIAssociation } from '@/synapse-queries/doi/useDOI'\nimport { useGetEntityBundle } from '@/synapse-queries/entity'\nimport { DoiObjectType } from '@sage-bionetworks/synapse-client'\nimport CitationPopoverContent from '../CitationPopover/CitationPopoverContent'\nimport { useRef, useState } from 'react'\nimport { useGetEntityDoiAssociation } from './EntityCitationUtils'\nimport DropdownSelect from '../DropdownSelect'\n\nconst CITATION_BUTTON_PADDING = '10px 12px'\n\nexport type EntityCitationProps = {\n projectId: string\n entityId: string\n versionNumber?: number\n}\n\nconst EntityCitation = ({\n projectId,\n entityId,\n versionNumber,\n}: EntityCitationProps): React.ReactNode => {\n const { data: bundle, isLoading: isEntityLoading } = useGetEntityBundle(\n entityId,\n versionNumber,\n )\n const [anchorEl, setAnchorEl] = useState<HTMLButtonElement | null>(null)\n const [selectedDoi, setSelectedDoi] = useState<string | undefined>(undefined)\n const [citationAnchorEl, setCitationAnchorEl] = useState<HTMLElement | null>(\n null,\n )\n const [selectedIndex, setSelectedIndex] = useState<number | undefined>(\n undefined,\n )\n const citationButtonRef = useRef<HTMLDivElement>(null)\n\n const open = Boolean(anchorEl)\n const id = open ? 'cite-as-popover' : undefined\n\n const entityDoiAssociation = useGetEntityDoiAssociation(\n entityId,\n versionNumber,\n projectId,\n bundle,\n )\n\n // Get DOI association for the project\n // Projects are not versioned\n const { data: projectDoiAssociation, isLoading: isProjectLoading } =\n useGetDOIAssociation(\n {\n id: projectId,\n version: undefined,\n type: DoiObjectType.ENTITY,\n },\n {\n enabled: !!projectId,\n },\n )\n\n // If both project and entity have DOIs, we show the dropdown variant\n const isProjectAndEntityDoi = projectDoiAssociation && entityDoiAssociation\n\n function getButtonText() {\n if (isProjectAndEntityDoi) {\n return 'Cite as...'\n } else if (entityDoiAssociation && !projectDoiAssociation) {\n return 'Cite page'\n } else if (!entityDoiAssociation && projectDoiAssociation) {\n return 'Cite project'\n }\n return ''\n }\n\n const buttonText = getButtonText()\n\n const handleButtonClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n if (entityDoiAssociation && !projectDoiAssociation) {\n setSelectedDoi(entityDoiAssociation.doiUri)\n setCitationAnchorEl(event.currentTarget)\n } else if (!entityDoiAssociation && projectDoiAssociation) {\n setSelectedDoi(projectDoiAssociation.doiUri)\n setCitationAnchorEl(event.currentTarget)\n } else {\n // If both project and entity doi exist, show dropdown\n setAnchorEl(event.currentTarget)\n }\n }\n\n const popover = (\n <CitationPopoverContent\n doi={selectedDoi}\n anchorEl={citationAnchorEl}\n open={!!citationAnchorEl && !!selectedDoi}\n id={id}\n onClose={() => {\n setCitationAnchorEl(null)\n setSelectedDoi(undefined)\n }}\n />\n )\n\n const options: string[] = ['Cite this Project', 'Cite only this page']\n\n if (!projectDoiAssociation && !entityDoiAssociation) {\n return null\n }\n\n if (isEntityLoading || isProjectLoading) {\n return (\n <Skeleton\n sx={{\n width: { xs: '100%', sm: '140px' },\n height: '45px',\n }}\n />\n )\n }\n\n return (\n <>\n {isProjectAndEntityDoi ? (\n <DropdownSelect\n disabled={isEntityLoading && isProjectLoading}\n options={options}\n anchorRef={citationButtonRef}\n sx={{\n width: { xs: '100%', sm: 'initial' },\n '& .MuiButtonGroup-firstButton': {\n borderTopLeftRadius: '6px',\n borderBottomLeftRadius: '6px',\n padding: CITATION_BUTTON_PADDING,\n },\n '& .MuiButtonGroup-lastButton': {\n borderTopRightRadius: '6px',\n borderBottomRightRadius: '6px',\n },\n '& .MuiButton-root': {\n fontWeight: 540,\n },\n }}\n buttonText=\"Cite as...\"\n variant=\"outlined\"\n buttonGroupAriaLabel=\"Citation options\"\n selectedIndex={selectedIndex}\n setSelectedIndex={(index: number) => {\n setSelectedIndex(index)\n const selected =\n index === 0\n ? projectDoiAssociation?.doiUri\n : entityDoiAssociation?.doiUri\n if (selected) {\n setSelectedDoi(selected)\n setCitationAnchorEl(citationButtonRef.current)\n }\n }}\n />\n ) : (\n <Button\n onClick={handleButtonClick}\n disabled={isEntityLoading && isProjectLoading}\n sx={{\n width: { xs: '100%', sm: 'initial' },\n borderRadius: '6px',\n fontWeight: 540,\n padding: CITATION_BUTTON_PADDING,\n }}\n variant=\"outlined\"\n startIcon={<DoubleQuotes width={18} height={18} />}\n >\n {buttonText}\n </Button>\n )}\n {popover}\n </>\n )\n}\n\nexport default EntityCitation\n"],"mappings":";;;;;;;;;;;;AAWA,IAAM,IAA0B,aAQ1B,KAAkB,EACtB,cACA,aACA,uBAC0C;CAC1C,IAAM,EAAE,MAAM,GAAQ,WAAW,MAAoB,EACnD,GACA,CACF,GACM,CAAC,GAAU,KAAe,EAAmC,IAAI,GACjE,CAAC,GAAa,KAAkB,EAA6B,KAAA,CAAS,GACtE,CAAC,GAAkB,KAAuB,EAC9C,IACF,GACM,CAAC,GAAe,KAAoB,EACxC,KAAA,CACF,GACM,IAAoB,EAAuB,IAAI,GAG/C,IADe,IACH,oBAAoB,KAAA,GAEhC,IAAuB,EAC3B,GACA,GACA,GACA,CACF,GAIM,EAAE,MAAM,GAAuB,WAAW,MAC9C,EACE;EACE,IAAI;EACJ,SAAS,KAAA;EACT,MAAM,EAAc;CACtB,GACA,EACE,SAAS,CAAC,CAAC,EACb,CACF,GAGI,IAAwB,KAAyB;CAEvD,SAAS,IAAgB;EAQvB,OAPI,IACK,eACE,KAAwB,CAAC,IAC3B,cACE,CAAC,KAAwB,IAC3B,iBAEF;CACT;CAEA,IAAM,IAAa,EAAc;CA6CjC,OAfI,CAAC,KAAyB,CAAC,IACtB,OAGL,KAAmB,IAEnB,kBAAC,GAAD,EACE,IAAI;EACF,OAAO;GAAE,IAAI;GAAQ,IAAI;EAAQ;EACjC,QAAQ;CACV,EACD,CAAA,IAKH,kBAAA,GAAA,EAAA,UAAA,CACG,IACC,kBAAC,GAAD;EACE,UAAU,KAAmB;EACpB,UAtBU,qBAAqB,qBAsB/B;EACT,WAAW;EACX,IAAI;GACF,OAAO;IAAE,IAAI;IAAQ,IAAI;GAAU;GACnC,iCAAiC;IAC/B,qBAAqB;IACrB,wBAAwB;IACxB,SAAS;GACX;GACA,gCAAgC;IAC9B,sBAAsB;IACtB,yBAAyB;GAC3B;GACA,qBAAqB,EACnB,YAAY,IACd;EACF;EACA,YAAW;EACX,SAAQ;EACR,sBAAqB;EACN;EACf,mBAAmB,MAAkB;GACnC,EAAiB,CAAK;GACtB,IAAM,IACJ,MAAU,IACN,GAAuB,SACvB,GAAsB;GAC5B,AAAI,MACF,EAAe,CAAQ,GACvB,EAAoB,EAAkB,OAAO;EAEjD;CACD,CAAA,IAED,kBAAC,GAAD;EACE,UAnFmB,MAA+C;GACxE,AAAI,KAAwB,CAAC,KAC3B,EAAe,EAAqB,MAAM,GAC1C,EAAoB,EAAM,aAAa,KAC9B,CAAC,KAAwB,KAClC,EAAe,EAAsB,MAAM,GAC3C,EAAoB,EAAM,aAAa,KAGvC,EAAY,EAAM,aAAa;EAEnC;EAyEQ,UAAU,KAAmB;EAC7B,IAAI;GACF,OAAO;IAAE,IAAI;IAAQ,IAAI;GAAU;GACnC,cAAc;GACd,YAAY;GACZ,SAAS;EACX;EACA,SAAQ;EACR,WAAW,kBAAC,GAAD;GAAc,OAAO;GAAI,QAAQ;EAAK,CAAA;YAEhD;CACK,CAAA,GAET,gBAnFH,EAAC,GAAD;EACE,KAAK;EACL,UAAU;EACV,MAAM,CAAC,CAAC,KAAoB,CAAC,CAAC;EAC1B;EACJ,eAAe;GAEb,AADA,EAAoB,IAAI,GACxB,EAAe,KAAA,CAAS;EAC1B;CACD,CA0EE,CACD,EAAA,CAAA;AAEN"}
@@ -16,6 +16,10 @@ export type SynapsePlotWidgetParams = {
16
16
  barmode?: Plotly.Layout['barmode'];
17
17
  displayModeBar?: Plotly.Config['displayModeBar'];
18
18
  hoverinfo?: Plotly.PlotData['hoverinfo'];
19
+ hideYAxisTickLabels?: boolean;
20
+ hideXAxisTickLabels?: boolean;
21
+ footnote?: string;
22
+ fullWidth?: boolean;
19
23
  };
20
24
  export type QueryWrapperPlotNavCustomPlotParams = {
21
25
  selectedFacets: FacetColumnRequest[];
@@ -1 +1 @@
1
- {"version":3,"file":"SynapsePlot.d.ts","sourceRoot":"","sources":["../../../src/components/Plot/SynapsePlot.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAKzB,OAAO,EACL,kBAAkB,EAElB,WAAW,EAEZ,MAAM,iCAAiC,CAAA;AACxC,OAAO,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,EAAE,oCAAoC,EAAE,MAAM,gDAAgD,CAAA;AAErG,OAAO,oBAAoB,CAAA;AAE3B,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;IACnC,IAAI,EAAE,QAAQ,CAAA;IACd,SAAS,CAAC,EAAE,QAAQ,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;IACxC,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;CACzC,CAAA;AAGD,MAAM,MAAM,mCAAmC,GAAG;IAChD,cAAc,EAAE,kBAAkB,EAAE,CAAA;IACpC,iBAAiB,EAAE,WAAW,EAAE,CAAA;IAChC,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,oCAAoC,KAAK,IAAI,CAAA;IACzE,YAAY,CAAC,EAAE,gBAAgB,CAAA;CAChC,CAAA;AACD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,uBAAuB,EAAE,uBAAuB,CAAA;IAChD,gBAAgB,CAAC,EAAE,mCAAmC,CAAA;CACvD,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,OAAO,gBAAgB,KAAG,KAAK,CAAC,SAuH3D,CAAA;AAED,eAAe,WAAW,CAAA"}
1
+ {"version":3,"file":"SynapsePlot.d.ts","sourceRoot":"","sources":["../../../src/components/Plot/SynapsePlot.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAKzB,OAAO,EACL,kBAAkB,EAElB,WAAW,EAEZ,MAAM,iCAAiC,CAAA;AACxC,OAAO,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,EAAE,oCAAoC,EAAE,MAAM,gDAAgD,CAAA;AAGrG,OAAO,oBAAoB,CAAA;AAE3B,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;IACnC,IAAI,EAAE,QAAQ,CAAA;IACd,SAAS,CAAC,EAAE,QAAQ,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;IACxC,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;IACxC,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,CAAA;AAGD,MAAM,MAAM,mCAAmC,GAAG;IAChD,cAAc,EAAE,kBAAkB,EAAE,CAAA;IACpC,iBAAiB,EAAE,WAAW,EAAE,CAAA;IAChC,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,oCAAoC,KAAK,IAAI,CAAA;IACzE,YAAY,CAAC,EAAE,gBAAgB,CAAA;CAChC,CAAA;AACD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,uBAAuB,EAAE,uBAAuB,CAAA;IAChD,gBAAgB,CAAC,EAAE,mCAAmC,CAAA;CACvD,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,OAAO,gBAAgB,KAAG,KAAK,CAAC,SAwI3D,CAAA;AAED,eAAe,WAAW,CAAA"}
@@ -3,71 +3,84 @@ import { parseEntityIdFromSqlStatement as e } from "../../utils/functions/SqlFun
3
3
  import "../../utils/index.js";
4
4
  import { useGetFullTableQueryResults as t } from "../../synapse-queries/entity/useGetQueryResultBundle.js";
5
5
  import "../../synapse-queries/index.js";
6
- import { Plot as n } from "./Plot.js";
6
+ import { unCamelCase as n } from "../../utils/functions/unCamelCase.js";
7
+ import { Plot as r } from "./Plot.js";
7
8
  import './SynapsePlot.css';/* empty css */
8
9
  import "react";
9
- import { Skeleton as r } from "@mui/material";
10
- import { Fragment as i, jsx as a } from "react/jsx-runtime";
10
+ import { Skeleton as i } from "@mui/material";
11
+ import { Fragment as a, jsx as o } from "react/jsx-runtime";
11
12
  //#region src/components/Plot/SynapsePlot.tsx
12
- var o = (o) => {
13
- let { query: s } = o.synapsePlotWidgetParams, { selectedFacets: c, additionalFilters: l, onCustomPlotClick: u, queryContext: d } = o.customPlotParams ?? {}, { data: f, isLoading: p } = t({
13
+ var s = (s) => {
14
+ let { query: c } = s.synapsePlotWidgetParams, { selectedFacets: l, additionalFilters: u, onCustomPlotClick: d, queryContext: f } = s.customPlotParams ?? {}, { data: p, isLoading: m } = t({
14
15
  concreteType: "org.sagebionetworks.repo.model.table.QueryBundleRequest",
15
16
  partMask: 1,
16
- entityId: e(s),
17
+ entityId: e(c),
17
18
  query: {
18
- sql: s,
19
- selectedFacets: c,
20
- additionalFilters: l
19
+ sql: c,
20
+ selectedFacets: l,
21
+ additionalFilters: u
21
22
  }
22
23
  });
23
- if (p) return /* @__PURE__ */ a(r, {
24
+ if (m) return /* @__PURE__ */ o(i, {
24
25
  width: "100%",
25
26
  height: "200px"
26
27
  });
27
- if (!f) return /* @__PURE__ */ a(i, {});
28
- let { title: m, xtitle: h, ytitle: g, type: _, xaxistype: v, showlegend: y, barmode: b, horizontal: x, displayModeBar: S, hoverinfo: C } = o.synapsePlotWidgetParams, w = { displayModeBar: S }, T = {
29
- showlegend: y,
30
- title: m,
31
- barmode: b
28
+ if (!p) return /* @__PURE__ */ o(a, {});
29
+ let { title: h, xtitle: g, ytitle: _, type: v, xaxistype: y, showlegend: b, barmode: x, horizontal: S, displayModeBar: C, hoverinfo: w, hideYAxisTickLabels: T, hideXAxisTickLabels: E, footnote: D } = s.synapsePlotWidgetParams, O = { displayModeBar: C }, k = {
30
+ showlegend: b,
31
+ title: h,
32
+ barmode: x,
33
+ ...D && { margin: { b: 40 } }
32
34
  };
33
- h && (T.xaxis = { title: h }), v && (T.xaxis = {
34
- ...T.xaxis,
35
- type: v
36
- }), g && (T.yaxis = { title: g });
37
- let E = [], D = x ? "h" : "v", O = f.queryResult?.queryResults.headers ?? [], k = f.queryResult?.queryResults.rows ?? [];
38
- if (O.length == 0 || k.length == 0) return /* @__PURE__ */ a(i, {});
39
- for (let e = 0; e < O.length - 1; e += 1) E[e] = {
40
- orientation: D,
41
- name: O[e + 1].name,
42
- type: _,
43
- x: [],
44
- y: [],
45
- customdata: [],
46
- ...C !== void 0 && { hoverinfo: C }
47
- };
48
- for (let e of k) for (let t = 1; t < e.values.length; t += 1) {
49
- let n = e.values, r = E[t - 1].x, i = E[t - 1].y, a = E[t - 1].customdata;
50
- r.push(x ? n[t] : n[0]), i.push(x ? n[0] : n[t]), a.push(JSON.stringify(e));
35
+ (g || E) && (k.xaxis = {
36
+ ...g && { title: g },
37
+ ...E && { showticklabels: !1 }
38
+ }), y && (k.xaxis = {
39
+ ...k.xaxis,
40
+ type: y
41
+ }), (_ || T) && (k.yaxis = {
42
+ ..._ && { title: _ },
43
+ ...T && { showticklabels: !1 }
44
+ });
45
+ let A = [], j = S ? "h" : "v", M = p.queryResult?.queryResults.headers ?? [], N = p.queryResult?.queryResults.rows ?? [];
46
+ if (M.length == 0 || N.length == 0) return /* @__PURE__ */ o(a, {});
47
+ for (let e = 0; e < M.length - 1; e += 1) {
48
+ let t = M[e + 1].name, r = n(t.replace(/_/g, " ")), i = v === "bar" ? S ? `<b>%{y}</b><br>${r}: %{x:,}<extra></extra>` : `<b>%{x}</b><br>${r}: %{y:,}<extra></extra>` : void 0;
49
+ A[e] = {
50
+ orientation: j,
51
+ name: t,
52
+ type: v,
53
+ x: [],
54
+ y: [],
55
+ customdata: [],
56
+ ...i !== void 0 && { hovertemplate: i },
57
+ ...w !== void 0 && { hoverinfo: w }
58
+ };
59
+ }
60
+ for (let e of N) for (let t = 1; t < e.values.length; t += 1) {
61
+ let n = e.values, r = A[t - 1].x, i = A[t - 1].y, a = A[t - 1].customdata;
62
+ r.push(S ? n[t] : n[0]), i.push(S ? n[0] : n[t]), a.push(JSON.stringify(e));
51
63
  }
52
- let A;
53
- return u && (A = (e) => {
54
- u({
64
+ let P;
65
+ return d && (P = (e) => {
66
+ d({
55
67
  row: JSON.parse(e.points[0].customdata),
56
- queryContext: d
68
+ queryContext: f
57
69
  });
58
- }), /* @__PURE__ */ a(n, {
70
+ }), /* @__PURE__ */ o(r, {
59
71
  style: {
60
72
  width: "100%",
61
73
  height: "450px"
62
74
  },
63
- className: A ? "SynapsePlot--clickable" : void 0,
64
- layout: T,
65
- data: E,
66
- config: w,
67
- onClick: A
75
+ className: P ? "SynapsePlot--clickable" : void 0,
76
+ layout: k,
77
+ data: A,
78
+ config: O,
79
+ onClick: P,
80
+ useResizeHandler: !0
68
81
  });
69
82
  };
70
83
  //#endregion
71
- export { o as SynapsePlot, o as default };
84
+ export { s as SynapsePlot, s as default };
72
85
 
73
86
  //# sourceMappingURL=SynapsePlot.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SynapsePlot.js","names":[],"sources":["../../../src/components/Plot/SynapsePlot.tsx"],"sourcesContent":["import React from 'react'\nimport { useGetFullTableQueryResults } from '@/synapse-queries'\nimport { SynapseConstants } from '@/utils'\nimport { parseEntityIdFromSqlStatement } from '@/utils/functions/SqlFunctions'\nimport { Skeleton } from '@mui/material'\nimport {\n FacetColumnRequest,\n QueryBundleRequest,\n QueryFilter,\n Row,\n} from '@sage-bionetworks/synapse-types'\nimport Plotly, { AxisType, PlotType } from 'plotly.js-basic-dist'\nimport { QueryContextType } from '../QueryContext'\nimport { QueryWrapperSynapsePlotRowClickEvent } from '../QueryWrapperPlotNav/QueryWrapperSynapsePlot'\nimport Plot from './Plot'\nimport './SynapsePlot.scss'\n\nexport type SynapsePlotWidgetParams = {\n query: string //sql string\n title?: string //plot title\n xtitle?: Plotly.LayoutAxis['title'] // x-axis title\n ytitle?: Plotly.LayoutAxis['title'] // y-axis title\n type: PlotType\n xaxistype?: AxisType\n showlegend?: Plotly.Layout['showlegend'] // sets the legend visibility\n horizontal?: boolean // sets the if a bar chart should be horizontal or vertical\n barmode?: Plotly.Layout['barmode'] // Plotly barmode\n displayModeBar?: Plotly.Config['displayModeBar'] // sets the modebar visibility\n hoverinfo?: Plotly.PlotData['hoverinfo'] // sets the hover info\n}\n\n// QueryWrapperPlotNav customPlot parameters, undefined otherwise\nexport type QueryWrapperPlotNavCustomPlotParams = {\n selectedFacets: FacetColumnRequest[]\n additionalFilters: QueryFilter[]\n onCustomPlotClick?: (event: QueryWrapperSynapsePlotRowClickEvent) => void\n queryContext?: QueryContextType\n}\nexport type SynapsePlotProps = {\n synapsePlotWidgetParams: SynapsePlotWidgetParams\n customPlotParams?: QueryWrapperPlotNavCustomPlotParams\n}\n\nexport const SynapsePlot = (props: SynapsePlotProps): React.ReactNode => {\n const { query } = props.synapsePlotWidgetParams\n const { selectedFacets, additionalFilters, onCustomPlotClick, queryContext } =\n props.customPlotParams ?? {}\n const queryRequest: QueryBundleRequest = {\n concreteType: 'org.sagebionetworks.repo.model.table.QueryBundleRequest',\n partMask: SynapseConstants.BUNDLE_MASK_QUERY_RESULTS,\n entityId: parseEntityIdFromSqlStatement(query),\n query: {\n sql: query,\n selectedFacets,\n additionalFilters,\n },\n }\n const { data: queryData, isLoading } =\n useGetFullTableQueryResults(queryRequest)\n if (isLoading) {\n return <Skeleton width={'100%'} height={'200px'} />\n }\n if (!queryData) {\n return <></>\n }\n\n const {\n title,\n xtitle,\n ytitle,\n type,\n xaxistype,\n showlegend,\n barmode,\n horizontal,\n displayModeBar,\n hoverinfo,\n } = props.synapsePlotWidgetParams\n\n const config: Partial<Plotly.Config> = {\n displayModeBar,\n }\n const layout: Partial<Plotly.Layout> = {\n showlegend: showlegend,\n title,\n barmode: barmode,\n }\n if (xtitle) {\n layout.xaxis = {\n title: xtitle,\n }\n }\n if (xaxistype) {\n layout.xaxis = {\n ...layout.xaxis,\n type: xaxistype,\n }\n }\n if (ytitle) {\n layout.yaxis = {\n title: ytitle,\n }\n }\n // init plot_data\n const plotData: Partial<Plotly.PlotData>[] = []\n const orientation = horizontal ? 'h' : 'v'\n const headers = queryData.queryResult?.queryResults.headers ?? []\n const rows = queryData.queryResult?.queryResults.rows ?? []\n if (headers.length == 0 || rows.length == 0) {\n return <></>\n }\n for (let i = 0; i < headers.length - 1; i += 1) {\n // make an entry for each set of data points\n plotData[i] = {\n orientation,\n name: headers[i + 1].name,\n type: type,\n x: [],\n y: [],\n customdata: [],\n ...(hoverinfo !== undefined && { hoverinfo }),\n }\n }\n // grab all the data\n for (const row of rows) {\n for (let j = 1; j < row.values.length; j += 1) {\n // create pairs of data\n const rowValues = row.values\n const xArray = plotData[j - 1].x as Plotly.Datum[]\n const yArray = plotData[j - 1].y as Plotly.Datum[]\n const customdata = plotData[j - 1].customdata as Plotly.Datum[]\n\n xArray.push(horizontal ? rowValues[j] : rowValues[0])\n yArray.push(horizontal ? rowValues[0] : rowValues[j])\n customdata.push(JSON.stringify(row))\n }\n }\n let onPlotClick:\n | ((event: Readonly<Plotly.PlotMouseEvent>) => void)\n | undefined\n if (onCustomPlotClick) {\n onPlotClick = eventData => {\n const selectedRow = JSON.parse(\n eventData.points[0].customdata as string,\n ) as Row\n onCustomPlotClick({\n row: selectedRow,\n queryContext,\n })\n }\n }\n\n return (\n <Plot\n style={{ width: '100%', height: '450px' }}\n className={onPlotClick ? 'SynapsePlot--clickable' : undefined}\n layout={layout}\n data={plotData}\n config={config}\n onClick={onPlotClick}\n />\n )\n}\n\nexport default SynapsePlot\n"],"mappings":";;;;;;;;;;;AA2CA,IAAa,KAAe,MAA6C;CACvE,IAAM,EAAE,aAAU,EAAM,yBAClB,EAAE,mBAAgB,sBAAmB,sBAAmB,oBAC5D,EAAM,oBAAoB,CAAC,GAWvB,EAAE,MAAM,GAAW,iBACvB,EAA4B;EAV5B,cAAc;EACd,UAAU;EACV,UAAU,EAA8B,CAAK;EAC7C,OAAO;GACL,KAAK;GACL;GACA;EACF;CAG4B,CAAY;CAC1C,IAAI,GACF,OAAO,kBAAC,GAAD;EAAU,OAAO;EAAQ,QAAQ;CAAU,CAAA;CAEpD,IAAI,CAAC,GACH,OAAO,kBAAA,GAAA,CAAI,CAAA;CAGb,IAAM,EACJ,UACA,WACA,WACA,SACA,cACA,eACA,YACA,eACA,mBACA,iBACE,EAAM,yBAEJ,IAAiC,EACrC,kBACF,GACM,IAAiC;EACzB;EACZ;EACS;CACX;CAYA,AAXI,MACF,EAAO,QAAQ,EACb,OAAO,EACT,IAEE,MACF,EAAO,QAAQ;EACb,GAAG,EAAO;EACV,MAAM;CACR,IAEE,MACF,EAAO,QAAQ,EACb,OAAO,EACT;CAGF,IAAM,IAAuC,CAAC,GACxC,IAAc,IAAa,MAAM,KACjC,IAAU,EAAU,aAAa,aAAa,WAAW,CAAC,GAC1D,IAAO,EAAU,aAAa,aAAa,QAAQ,CAAC;CAC1D,IAAI,EAAQ,UAAU,KAAK,EAAK,UAAU,GACxC,OAAO,kBAAA,GAAA,CAAI,CAAA;CAEb,KAAK,IAAI,IAAI,GAAG,IAAI,EAAQ,SAAS,GAAG,KAAK,GAE3C,EAAS,KAAK;EACZ;EACA,MAAM,EAAQ,IAAI,GAAG;EACf;EACN,GAAG,CAAC;EACJ,GAAG,CAAC;EACJ,YAAY,CAAC;EACb,GAAI,MAAc,KAAA,KAAa,EAAE,aAAU;CAC7C;CAGF,KAAK,IAAM,KAAO,GAChB,KAAK,IAAI,IAAI,GAAG,IAAI,EAAI,OAAO,QAAQ,KAAK,GAAG;EAE7C,IAAM,IAAY,EAAI,QAChB,IAAS,EAAS,IAAI,GAAG,GACzB,IAAS,EAAS,IAAI,GAAG,GACzB,IAAa,EAAS,IAAI,GAAG;EAInC,AAFA,EAAO,KAAK,IAAa,EAAU,KAAK,EAAU,EAAE,GACpD,EAAO,KAAK,IAAa,EAAU,KAAK,EAAU,EAAE,GACpD,EAAW,KAAK,KAAK,UAAU,CAAG,CAAC;CACrC;CAEF,IAAI;CAeJ,OAZI,MACF,KAAc,MAAa;EAIzB,EAAkB;GAChB,KAJkB,KAAK,MACvB,EAAU,OAAO,GAAG,UAGf;GACL;EACF,CAAC;CACH,IAIA,kBAAC,GAAD;EACE,OAAO;GAAE,OAAO;GAAQ,QAAQ;EAAQ;EACxC,WAAW,IAAc,2BAA2B,KAAA;EAC5C;EACR,MAAM;EACE;EACR,SAAS;CACV,CAAA;AAEL"}
1
+ {"version":3,"file":"SynapsePlot.js","names":[],"sources":["../../../src/components/Plot/SynapsePlot.tsx"],"sourcesContent":["import React from 'react'\nimport { useGetFullTableQueryResults } from '@/synapse-queries'\nimport { SynapseConstants } from '@/utils'\nimport { parseEntityIdFromSqlStatement } from '@/utils/functions/SqlFunctions'\nimport { Skeleton } from '@mui/material'\nimport {\n FacetColumnRequest,\n QueryBundleRequest,\n QueryFilter,\n Row,\n} from '@sage-bionetworks/synapse-types'\nimport Plotly, { AxisType, PlotType } from 'plotly.js-basic-dist'\nimport { QueryContextType } from '../QueryContext'\nimport { QueryWrapperSynapsePlotRowClickEvent } from '../QueryWrapperPlotNav/QueryWrapperSynapsePlot'\nimport Plot from './Plot'\nimport { unCamelCase } from '@/utils/functions/unCamelCase'\nimport './SynapsePlot.scss'\n\nexport type SynapsePlotWidgetParams = {\n query: string //sql string\n title?: string //plot title\n xtitle?: Plotly.LayoutAxis['title'] // x-axis title\n ytitle?: Plotly.LayoutAxis['title'] // y-axis title\n type: PlotType\n xaxistype?: AxisType\n showlegend?: Plotly.Layout['showlegend'] // sets the legend visibility\n horizontal?: boolean // sets the if a bar chart should be horizontal or vertical\n barmode?: Plotly.Layout['barmode'] // Plotly barmode\n displayModeBar?: Plotly.Config['displayModeBar'] // sets the modebar visibility\n hoverinfo?: Plotly.PlotData['hoverinfo'] // sets the hover info\n hideYAxisTickLabels?: boolean // hides the y-axis tick labels\n hideXAxisTickLabels?: boolean // hides the x-axis tick labels\n footnote?: string // optional text displayed below the plot\n fullWidth?: boolean // forces the plot to take up the full container width\n}\n\n// QueryWrapperPlotNav customPlot parameters, undefined otherwise\nexport type QueryWrapperPlotNavCustomPlotParams = {\n selectedFacets: FacetColumnRequest[]\n additionalFilters: QueryFilter[]\n onCustomPlotClick?: (event: QueryWrapperSynapsePlotRowClickEvent) => void\n queryContext?: QueryContextType\n}\nexport type SynapsePlotProps = {\n synapsePlotWidgetParams: SynapsePlotWidgetParams\n customPlotParams?: QueryWrapperPlotNavCustomPlotParams\n}\n\nexport const SynapsePlot = (props: SynapsePlotProps): React.ReactNode => {\n const { query } = props.synapsePlotWidgetParams\n const { selectedFacets, additionalFilters, onCustomPlotClick, queryContext } =\n props.customPlotParams ?? {}\n const queryRequest: QueryBundleRequest = {\n concreteType: 'org.sagebionetworks.repo.model.table.QueryBundleRequest',\n partMask: SynapseConstants.BUNDLE_MASK_QUERY_RESULTS,\n entityId: parseEntityIdFromSqlStatement(query),\n query: {\n sql: query,\n selectedFacets,\n additionalFilters,\n },\n }\n const { data: queryData, isLoading } =\n useGetFullTableQueryResults(queryRequest)\n\n if (isLoading) {\n return <Skeleton width={'100%'} height={'200px'} />\n }\n if (!queryData) {\n return <></>\n }\n\n const {\n title,\n xtitle,\n ytitle,\n type,\n xaxistype,\n showlegend,\n barmode,\n horizontal,\n displayModeBar,\n hoverinfo,\n hideYAxisTickLabels,\n hideXAxisTickLabels,\n footnote,\n } = props.synapsePlotWidgetParams\n\n const config: Partial<Plotly.Config> = {\n displayModeBar,\n }\n const layout: Partial<Plotly.Layout> = {\n showlegend: showlegend,\n title,\n barmode: barmode,\n ...(footnote && { margin: { b: 40 } }),\n }\n if (xtitle || hideXAxisTickLabels) {\n layout.xaxis = {\n ...(xtitle && { title: xtitle }),\n ...(hideXAxisTickLabels && { showticklabels: false }),\n }\n }\n if (xaxistype) {\n layout.xaxis = {\n ...layout.xaxis,\n type: xaxistype,\n }\n }\n if (ytitle || hideYAxisTickLabels) {\n layout.yaxis = {\n ...(ytitle && { title: ytitle }),\n ...(hideYAxisTickLabels && { showticklabels: false }),\n }\n }\n // init plot_data\n const plotData: Partial<Plotly.PlotData>[] = []\n const orientation = horizontal ? 'h' : 'v'\n const headers = queryData.queryResult?.queryResults.headers ?? []\n const rows = queryData.queryResult?.queryResults.rows ?? []\n if (headers.length == 0 || rows.length == 0) {\n return <></>\n }\n for (let i = 0; i < headers.length - 1; i += 1) {\n // make an entry for each set of data points\n const valueColumnName = headers[i + 1].name\n const friendlyColumnName = unCamelCase(valueColumnName.replace(/_/g, ' '))\n const hovertemplate =\n type === 'bar'\n ? horizontal\n ? `<b>%{y}</b><br>${friendlyColumnName}: %{x:,}<extra></extra>`\n : `<b>%{x}</b><br>${friendlyColumnName}: %{y:,}<extra></extra>`\n : undefined\n plotData[i] = {\n orientation,\n name: valueColumnName,\n type: type,\n x: [],\n y: [],\n customdata: [],\n ...(hovertemplate !== undefined && { hovertemplate }),\n ...(hoverinfo !== undefined && { hoverinfo }),\n }\n }\n // grab all the data\n for (const row of rows) {\n for (let j = 1; j < row.values.length; j += 1) {\n // create pairs of data\n const rowValues = row.values\n const xArray = plotData[j - 1].x as Plotly.Datum[]\n const yArray = plotData[j - 1].y as Plotly.Datum[]\n const customdata = plotData[j - 1].customdata as Plotly.Datum[]\n\n xArray.push(horizontal ? rowValues[j] : rowValues[0])\n yArray.push(horizontal ? rowValues[0] : rowValues[j])\n customdata.push(JSON.stringify(row))\n }\n }\n let onPlotClick:\n | ((event: Readonly<Plotly.PlotMouseEvent>) => void)\n | undefined\n if (onCustomPlotClick) {\n onPlotClick = eventData => {\n const selectedRow = JSON.parse(\n eventData.points[0].customdata as string,\n ) as Row\n onCustomPlotClick({\n row: selectedRow,\n queryContext,\n })\n }\n }\n\n return (\n <Plot\n style={{ width: '100%', height: '450px' }}\n className={onPlotClick ? 'SynapsePlot--clickable' : undefined}\n layout={layout}\n data={plotData}\n config={config}\n onClick={onPlotClick}\n useResizeHandler={true}\n />\n )\n}\n\nexport default SynapsePlot\n"],"mappings":";;;;;;;;;;;;AAgDA,IAAa,KAAe,MAA6C;CACvE,IAAM,EAAE,aAAU,EAAM,yBAClB,EAAE,mBAAgB,sBAAmB,sBAAmB,oBAC5D,EAAM,oBAAoB,CAAC,GAWvB,EAAE,MAAM,GAAW,iBACvB,EAA4B;EAV5B,cAAc;EACd,UAAU;EACV,UAAU,EAA8B,CAAK;EAC7C,OAAO;GACL,KAAK;GACL;GACA;EACF;CAG4B,CAAY;CAE1C,IAAI,GACF,OAAO,kBAAC,GAAD;EAAU,OAAO;EAAQ,QAAQ;CAAU,CAAA;CAEpD,IAAI,CAAC,GACH,OAAO,kBAAA,GAAA,CAAI,CAAA;CAGb,IAAM,EACJ,UACA,WACA,WACA,SACA,cACA,eACA,YACA,eACA,mBACA,cACA,wBACA,wBACA,gBACE,EAAM,yBAEJ,IAAiC,EACrC,kBACF,GACM,IAAiC;EACzB;EACZ;EACS;EACT,GAAI,KAAY,EAAE,QAAQ,EAAE,GAAG,GAAG,EAAE;CACtC;CAaA,CAZI,KAAU,OACZ,EAAO,QAAQ;EACb,GAAI,KAAU,EAAE,OAAO,EAAO;EAC9B,GAAI,KAAuB,EAAE,gBAAgB,GAAM;CACrD,IAEE,MACF,EAAO,QAAQ;EACb,GAAG,EAAO;EACV,MAAM;CACR,KAEE,KAAU,OACZ,EAAO,QAAQ;EACb,GAAI,KAAU,EAAE,OAAO,EAAO;EAC9B,GAAI,KAAuB,EAAE,gBAAgB,GAAM;CACrD;CAGF,IAAM,IAAuC,CAAC,GACxC,IAAc,IAAa,MAAM,KACjC,IAAU,EAAU,aAAa,aAAa,WAAW,CAAC,GAC1D,IAAO,EAAU,aAAa,aAAa,QAAQ,CAAC;CAC1D,IAAI,EAAQ,UAAU,KAAK,EAAK,UAAU,GACxC,OAAO,kBAAA,GAAA,CAAI,CAAA;CAEb,KAAK,IAAI,IAAI,GAAG,IAAI,EAAQ,SAAS,GAAG,KAAK,GAAG;EAE9C,IAAM,IAAkB,EAAQ,IAAI,GAAG,MACjC,IAAqB,EAAY,EAAgB,QAAQ,MAAM,GAAG,CAAC,GACnE,IACJ,MAAS,QACL,IACE,kBAAkB,EAAmB,2BACrC,kBAAkB,EAAmB,2BACvC,KAAA;EACN,EAAS,KAAK;GACZ;GACA,MAAM;GACA;GACN,GAAG,CAAC;GACJ,GAAG,CAAC;GACJ,YAAY,CAAC;GACb,GAAI,MAAkB,KAAA,KAAa,EAAE,iBAAc;GACnD,GAAI,MAAc,KAAA,KAAa,EAAE,aAAU;EAC7C;CACF;CAEA,KAAK,IAAM,KAAO,GAChB,KAAK,IAAI,IAAI,GAAG,IAAI,EAAI,OAAO,QAAQ,KAAK,GAAG;EAE7C,IAAM,IAAY,EAAI,QAChB,IAAS,EAAS,IAAI,GAAG,GACzB,IAAS,EAAS,IAAI,GAAG,GACzB,IAAa,EAAS,IAAI,GAAG;EAInC,AAFA,EAAO,KAAK,IAAa,EAAU,KAAK,EAAU,EAAE,GACpD,EAAO,KAAK,IAAa,EAAU,KAAK,EAAU,EAAE,GACpD,EAAW,KAAK,KAAK,UAAU,CAAG,CAAC;CACrC;CAEF,IAAI;CAeJ,OAZI,MACF,KAAc,MAAa;EAIzB,EAAkB;GAChB,KAJkB,KAAK,MACvB,EAAU,OAAO,GAAG,UAGf;GACL;EACF,CAAC;CACH,IAIA,kBAAC,GAAD;EACE,OAAO;GAAE,OAAO;GAAQ,QAAQ;EAAQ;EACxC,WAAW,IAAc,2BAA2B,KAAA;EAC5C;EACR,MAAM;EACE;EACR,SAAS;EACT,kBAAkB;CACnB,CAAA;AAEL"}
@@ -1 +1 @@
1
- {"version":3,"file":"QueryWrapperSynapsePlot.d.ts","sourceRoot":"","sources":["../../../src/components/QueryWrapperPlotNav/QueryWrapperSynapsePlot.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAmB,MAAM,iBAAiB,CAAA;AACnE,OAAO,EACL,mCAAmC,EACnC,uBAAuB,EACxB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAGL,GAAG,EACJ,MAAM,iCAAiC,CAAA;AAGxC,MAAM,MAAM,4BAA4B,GAAG,IAAI,CAC7C,mCAAmC,EACnC,mBAAmB,CACpB,GACC,IAAI,CAAC,uBAAuB,EAAE,gBAAgB,GAAG,mBAAmB,CAAC,CAAA;AACvE,KAAK,oCAAoC,GAAG;IAC1C,MAAM,EAAE,MAAM,IAAI,CAAA;CACnB,CAAA;AACD,MAAM,MAAM,oCAAoC,GAAG;IACjD,GAAG,EAAE,GAAG,CAAA;IACR,YAAY,CAAC,EAAE,gBAAgB,CAAA;CAChC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAC7C,KAAK,EAAE,4BAA4B,GAAG,oCAAoC,2CAsC3E"}
1
+ {"version":3,"file":"QueryWrapperSynapsePlot.d.ts","sourceRoot":"","sources":["../../../src/components/QueryWrapperPlotNav/QueryWrapperSynapsePlot.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAmB,MAAM,iBAAiB,CAAA;AACnE,OAAO,EACL,mCAAmC,EACnC,uBAAuB,EACxB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAGL,GAAG,EACJ,MAAM,iCAAiC,CAAA;AAKxC,MAAM,MAAM,4BAA4B,GAAG,IAAI,CAC7C,mCAAmC,EACnC,mBAAmB,CACpB,GACC,IAAI,CAAC,uBAAuB,EAAE,gBAAgB,GAAG,mBAAmB,CAAC,CAAA;AACvE,KAAK,oCAAoC,GAAG;IAC1C,MAAM,EAAE,MAAM,IAAI,CAAA;CACnB,CAAA;AACD,MAAM,MAAM,oCAAoC,GAAG;IACjD,GAAG,EAAE,GAAG,CAAA;IACR,YAAY,CAAC,EAAE,gBAAgB,CAAA;CAChC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAC7C,KAAK,EAAE,4BAA4B,GAAG,oCAAoC,2CAoG3E"}
@@ -1,45 +1,88 @@
1
- import { useQueryContext as e } from "../QueryContext/QueryContext.js";
1
+ import { ConfirmationDialog as e } from "../ConfirmationDialog/ConfirmationDialog.js";
2
+ import { StyledFormControl as t } from "../styled/StyledFormControl.js";
3
+ import { useQueryContext as n } from "../QueryContext/QueryContext.js";
2
4
  import "../QueryContext/index.js";
3
- import { useQueryVisualizationContext as t } from "../QueryVisualizationWrapper/QueryVisualizationContext.js";
5
+ import { useQueryVisualizationContext as r } from "../QueryVisualizationWrapper/QueryVisualizationContext.js";
4
6
  import "../QueryVisualizationWrapper/index.js";
5
- import n from "../Plot/PlotPanelHeader.js";
6
- import { SynapsePlot as r } from "../Plot/SynapsePlot.js";
7
+ import i from "../Plot/PlotPanelHeader.js";
8
+ import { SynapsePlot as a } from "../Plot/SynapsePlot.js";
7
9
  import "../Plot/index.js";
8
- import { useMemo as i } from "react";
9
- import { Fragment as a, jsx as o, jsxs as s } from "react/jsx-runtime";
10
+ import { useId as o, useMemo as s, useState as c } from "react";
11
+ import { InputLabel as l, MenuItem as u, Select as d, Stack as f, Typography as p } from "@mui/material";
12
+ import { Fragment as m, jsx as h, jsxs as g } from "react/jsx-runtime";
10
13
  //#region src/components/QueryWrapperPlotNav/QueryWrapperSynapsePlot.tsx
11
- function c(c) {
12
- let l = e(), { currentQueryRequest: u } = l, { title: d, onCustomPlotClick: f, onHide: p } = c, { showPlots: m } = t(), h = i(() => ({
13
- ...c,
14
- title: void 0,
15
- showlegend: !1,
16
- displayModebar: !1
17
- }), [c]), g = i(() => {
18
- let { selectedFacets: e, additionalFilters: t } = u.query;
19
- return {
20
- selectedFacets: e,
21
- additionalFilters: t,
22
- onCustomPlotClick: f,
23
- queryContext: l
24
- };
25
- }, [
26
- u.query,
27
- f,
28
- l
29
- ]);
30
- return /* @__PURE__ */ o("div", {
14
+ function _(_) {
15
+ let v = n(), { currentQueryRequest: y } = v, { title: b, footnote: x, onCustomPlotClick: S, onHide: C } = _, { showPlots: w } = r(), [T, E] = c(!1), [D, O] = c(_.xaxistype), k = _.xaxistype === "log", A = o(), j = /* @__PURE__ */ g(m, { children: [/* @__PURE__ */ h(a, {
16
+ synapsePlotWidgetParams: s(() => ({
17
+ ..._,
18
+ xaxistype: D,
19
+ title: void 0,
20
+ showlegend: !1,
21
+ displayModebar: !1
22
+ }), [_, D]),
23
+ customPlotParams: s(() => {
24
+ let { selectedFacets: e, additionalFilters: t } = y.query;
25
+ return {
26
+ selectedFacets: e,
27
+ additionalFilters: t,
28
+ onCustomPlotClick: S,
29
+ queryContext: v
30
+ };
31
+ }, [
32
+ y.query,
33
+ S,
34
+ v
35
+ ])
36
+ }), x && /* @__PURE__ */ h(p, {
37
+ variant: "body1Italic",
38
+ sx: {
39
+ display: "block",
40
+ mt: 1,
41
+ px: 1
42
+ },
43
+ children: x
44
+ })] });
45
+ return /* @__PURE__ */ g("div", {
31
46
  role: "figure",
32
47
  className: "SynapsePlot",
33
- children: m && /* @__PURE__ */ s(a, { children: [d && /* @__PURE__ */ o(n, {
34
- title: d,
35
- onHide: p
36
- }), /* @__PURE__ */ o(r, {
37
- synapsePlotWidgetParams: h,
38
- customPlotParams: g
39
- })] })
48
+ children: [/* @__PURE__ */ h(e, {
49
+ open: T,
50
+ onCancel: () => E(!1),
51
+ title: b ?? "",
52
+ content: /* @__PURE__ */ g(f, {
53
+ sx: { gap: 2 },
54
+ children: [k && /* @__PURE__ */ g(t, {
55
+ fullWidth: !0,
56
+ children: [/* @__PURE__ */ h(l, {
57
+ id: A,
58
+ children: "X Axis Scale"
59
+ }), /* @__PURE__ */ g(d, {
60
+ labelId: A,
61
+ label: "X Axis Scale",
62
+ value: D ?? "log",
63
+ onChange: (e) => O(e.target.value),
64
+ children: [/* @__PURE__ */ h(u, {
65
+ value: "log",
66
+ children: "Log"
67
+ }), /* @__PURE__ */ h(u, {
68
+ value: "linear",
69
+ children: "Linear"
70
+ })]
71
+ })]
72
+ }), j]
73
+ }),
74
+ hasCancelButton: !1,
75
+ confirmButtonProps: { children: "Close" },
76
+ onConfirm: () => E(!1),
77
+ maxWidth: "md"
78
+ }), w && /* @__PURE__ */ g(m, { children: [b && /* @__PURE__ */ h(i, {
79
+ title: b,
80
+ onHide: C,
81
+ setShowModal: E
82
+ }), j] })]
40
83
  });
41
84
  }
42
85
  //#endregion
43
- export { c as default };
86
+ export { _ as default };
44
87
 
45
88
  //# sourceMappingURL=QueryWrapperSynapsePlot.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"QueryWrapperSynapsePlot.js","names":[],"sources":["../../../src/components/QueryWrapperPlotNav/QueryWrapperSynapsePlot.tsx"],"sourcesContent":["import { useMemo } from 'react'\nimport { SynapsePlot } from '../Plot'\nimport { QueryContextType, useQueryContext } from '../QueryContext'\nimport {\n QueryWrapperPlotNavCustomPlotParams,\n SynapsePlotWidgetParams,\n} from '../Plot/SynapsePlot'\nimport {\n FacetColumnRequest,\n QueryFilter,\n Row,\n} from '@sage-bionetworks/synapse-types'\nimport { useQueryVisualizationContext } from '../QueryVisualizationWrapper'\nimport PlotPanelHeader from '../Plot/PlotPanelHeader'\nexport type QueryWrapperSynapsePlotProps = Pick<\n QueryWrapperPlotNavCustomPlotParams,\n 'onCustomPlotClick'\n> &\n Omit<SynapsePlotWidgetParams, 'selectedFacets' | 'additionalFilters'>\ntype QueryWrapperSynapsePlotInternalProps = {\n onHide: () => void\n}\nexport type QueryWrapperSynapsePlotRowClickEvent = {\n row: Row\n queryContext?: QueryContextType\n}\n\n/**\n * This component wraps a SynapsePlot. It passes in the current query context, and has a custom\n * \"title\" style so that it looks like it belongs in the QueryWrapperPlotNav plots.\n * @param props\n * @returns\n */\nexport default function QueryWrapperSynapsePlot(\n props: QueryWrapperSynapsePlotProps & QueryWrapperSynapsePlotInternalProps,\n) {\n const queryContext = useQueryContext()\n const { currentQueryRequest } = queryContext\n const { title, onCustomPlotClick, onHide } = props\n const { showPlots } = useQueryVisualizationContext()\n\n const widgetParamsMapped: SynapsePlotWidgetParams = useMemo(() => {\n return {\n ...props,\n title: undefined, // we are handling the plot title here in this component\n showlegend: false,\n displayModebar: false,\n }\n }, [props])\n\n const customPlotParams: QueryWrapperPlotNavCustomPlotParams = useMemo(() => {\n const { selectedFacets, additionalFilters } = currentQueryRequest.query\n return {\n selectedFacets: selectedFacets as FacetColumnRequest[],\n additionalFilters: additionalFilters as QueryFilter[],\n onCustomPlotClick,\n queryContext,\n }\n }, [currentQueryRequest.query, onCustomPlotClick, queryContext])\n return (\n <div role=\"figure\" className=\"SynapsePlot\">\n {showPlots && (\n <>\n {title && <PlotPanelHeader title={title} onHide={onHide} />}\n <SynapsePlot\n synapsePlotWidgetParams={widgetParamsMapped}\n customPlotParams={customPlotParams}\n />\n </>\n )}\n </div>\n )\n}\n"],"mappings":";;;;;;;;;;AAiCA,SAAwB,EACtB,GACA;CACA,IAAM,IAAe,EAAgB,GAC/B,EAAE,2BAAwB,GAC1B,EAAE,UAAO,sBAAmB,cAAW,GACvC,EAAE,iBAAc,EAA6B,GAE7C,IAA8C,SAC3C;EACL,GAAG;EACH,OAAO,KAAA;EACP,YAAY;EACZ,gBAAgB;CAClB,IACC,CAAC,CAAK,CAAC,GAEJ,IAAwD,QAAc;EAC1E,IAAM,EAAE,mBAAgB,yBAAsB,EAAoB;EAClE,OAAO;GACW;GACG;GACnB;GACA;EACF;CACF,GAAG;EAAC,EAAoB;EAAO;EAAmB;CAAY,CAAC;CAC/D,OACE,kBAAC,OAAD;EAAK,MAAK;EAAS,WAAU;YAC1B,KACC,kBAAA,GAAA,EAAA,UAAA,CACG,KAAS,kBAAC,GAAD;GAAwB;GAAe;EAAS,CAAA,GAC1D,kBAAC,GAAD;GACE,yBAAyB;GACP;EACnB,CAAA,CACD,EAAA,CAAA;CAED,CAAA;AAET"}
1
+ {"version":3,"file":"QueryWrapperSynapsePlot.js","names":[],"sources":["../../../src/components/QueryWrapperPlotNav/QueryWrapperSynapsePlot.tsx"],"sourcesContent":["import { useId, useMemo, useState } from 'react'\nimport { InputLabel, MenuItem, Select, Stack, Typography } from '@mui/material'\nimport { AxisType } from 'plotly.js-basic-dist'\nimport { SynapsePlot } from '../Plot'\nimport { QueryContextType, useQueryContext } from '../QueryContext'\nimport {\n QueryWrapperPlotNavCustomPlotParams,\n SynapsePlotWidgetParams,\n} from '../Plot/SynapsePlot'\nimport {\n FacetColumnRequest,\n QueryFilter,\n Row,\n} from '@sage-bionetworks/synapse-types'\nimport { useQueryVisualizationContext } from '../QueryVisualizationWrapper'\nimport PlotPanelHeader from '../Plot/PlotPanelHeader'\nimport { ConfirmationDialog } from '../ConfirmationDialog/ConfirmationDialog'\nimport StyledFormControl from '../styled/StyledFormControl'\nexport type QueryWrapperSynapsePlotProps = Pick<\n QueryWrapperPlotNavCustomPlotParams,\n 'onCustomPlotClick'\n> &\n Omit<SynapsePlotWidgetParams, 'selectedFacets' | 'additionalFilters'>\ntype QueryWrapperSynapsePlotInternalProps = {\n onHide: () => void\n}\nexport type QueryWrapperSynapsePlotRowClickEvent = {\n row: Row\n queryContext?: QueryContextType\n}\n\n/**\n * This component wraps a SynapsePlot. It passes in the current query context, and has a custom\n * \"title\" style so that it looks like it belongs in the QueryWrapperPlotNav plots.\n * @param props\n * @returns\n */\nexport default function QueryWrapperSynapsePlot(\n props: QueryWrapperSynapsePlotProps & QueryWrapperSynapsePlotInternalProps,\n) {\n const queryContext = useQueryContext()\n const { currentQueryRequest } = queryContext\n const { title, footnote, onCustomPlotClick, onHide } = props\n const { showPlots } = useQueryVisualizationContext()\n\n const [showModal, setShowModal] = useState(false)\n const [currentXAxisType, setCurrentXAxisType] = useState<\n AxisType | undefined\n >(props.xaxistype)\n\n // Only offer log/linear toggle when the default axis type was explicitly set to 'log'\n const defaultXAxisTypeIsLog = props.xaxistype === 'log'\n\n const xAxisTypeInputLabelId = useId()\n\n const widgetParamsMapped: SynapsePlotWidgetParams = useMemo(() => {\n return {\n ...props,\n xaxistype: currentXAxisType,\n title: undefined, // we are handling the plot title here in this component\n showlegend: false,\n displayModebar: false,\n }\n }, [props, currentXAxisType])\n\n const customPlotParams: QueryWrapperPlotNavCustomPlotParams = useMemo(() => {\n const { selectedFacets, additionalFilters } = currentQueryRequest.query\n return {\n selectedFacets: selectedFacets as FacetColumnRequest[],\n additionalFilters: additionalFilters as QueryFilter[],\n onCustomPlotClick,\n queryContext,\n }\n }, [currentQueryRequest.query, onCustomPlotClick, queryContext])\n\n const plotContent = (\n <>\n <SynapsePlot\n synapsePlotWidgetParams={widgetParamsMapped}\n customPlotParams={customPlotParams}\n />\n {footnote && (\n <Typography\n variant=\"body1Italic\"\n sx={{ display: 'block', mt: 1, px: 1 }}\n >\n {footnote}\n </Typography>\n )}\n </>\n )\n\n const modalContent = (\n <Stack sx={{ gap: 2 }}>\n {defaultXAxisTypeIsLog && (\n <StyledFormControl fullWidth>\n <InputLabel id={xAxisTypeInputLabelId}>X Axis Scale</InputLabel>\n <Select\n labelId={xAxisTypeInputLabelId}\n label=\"X Axis Scale\"\n value={currentXAxisType ?? 'log'}\n onChange={e => setCurrentXAxisType(e.target.value as AxisType)}\n >\n <MenuItem value=\"log\">Log</MenuItem>\n <MenuItem value=\"linear\">Linear</MenuItem>\n </Select>\n </StyledFormControl>\n )}\n {plotContent}\n </Stack>\n )\n\n return (\n <div role=\"figure\" className=\"SynapsePlot\">\n <ConfirmationDialog\n open={showModal}\n onCancel={() => setShowModal(false)}\n title={title ?? ''}\n content={modalContent}\n hasCancelButton={false}\n confirmButtonProps={{ children: 'Close' }}\n onConfirm={() => setShowModal(false)}\n maxWidth=\"md\"\n />\n {showPlots && (\n <>\n {title && (\n <PlotPanelHeader\n title={title}\n onHide={onHide}\n setShowModal={setShowModal}\n />\n )}\n {plotContent}\n </>\n )}\n </div>\n )\n}\n"],"mappings":";;;;;;;;;;;;;AAqCA,SAAwB,EACtB,GACA;CACA,IAAM,IAAe,EAAgB,GAC/B,EAAE,2BAAwB,GAC1B,EAAE,UAAO,aAAU,sBAAmB,cAAW,GACjD,EAAE,iBAAc,EAA6B,GAE7C,CAAC,GAAW,KAAgB,EAAS,EAAK,GAC1C,CAAC,GAAkB,KAAuB,EAE9C,EAAM,SAAS,GAGX,IAAwB,EAAM,cAAc,OAE5C,IAAwB,EAAM,GAsB9B,IACJ,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,GAAD;EACE,yBAvB8C,SAC3C;GACL,GAAG;GACH,WAAW;GACX,OAAO,KAAA;GACP,YAAY;GACZ,gBAAgB;EAClB,IACC,CAAC,GAAO,CAAgB,CAeI;EACP,kBAdsC,QAAc;GAC1E,IAAM,EAAE,mBAAgB,yBAAsB,EAAoB;GAClE,OAAO;IACW;IACG;IACnB;IACA;GACF;EACF,GAAG;GAAC,EAAoB;GAAO;GAAmB;EAAY,CAMtC;CACnB,CAAA,GACA,KACC,kBAAC,GAAD;EACE,SAAQ;EACR,IAAI;GAAE,SAAS;GAAS,IAAI;GAAG,IAAI;EAAE;YAEpC;CACS,CAAA,CAEd,EAAA,CAAA;CAuBJ,OACE,kBAAC,OAAD;EAAK,MAAK;EAAS,WAAU;YAA7B,CACE,kBAAC,GAAD;GACE,MAAM;GACN,gBAAgB,EAAa,EAAK;GAClC,OAAO,KAAS;GAChB,SAzBJ,kBAAC,GAAD;IAAO,IAAI,EAAE,KAAK,EAAE;cAApB,CACG,KACC,kBAAC,GAAD;KAAmB,WAAA;eAAnB,CACE,kBAAC,GAAD;MAAY,IAAI;gBAAuB;KAAwB,CAAA,GAC/D,kBAAC,GAAD;MACE,SAAS;MACT,OAAM;MACN,OAAO,KAAoB;MAC3B,WAAU,MAAK,EAAoB,EAAE,OAAO,KAAiB;gBAJ/D,CAME,kBAAC,GAAD;OAAU,OAAM;iBAAM;MAAa,CAAA,GACnC,kBAAC,GAAD;OAAU,OAAM;iBAAS;MAAgB,CAAA,CACnC;OACS;QAEpB,CACI;IASM;GACT,iBAAiB;GACjB,oBAAoB,EAAE,UAAU,QAAQ;GACxC,iBAAiB,EAAa,EAAK;GACnC,UAAS;EACV,CAAA,GACA,KACC,kBAAA,GAAA,EAAA,UAAA,CACG,KACC,kBAAC,GAAD;GACS;GACC;GACM;EACf,CAAA,GAEF,CACD,EAAA,CAAA,CAED;;AAET"}
@@ -1 +1 @@
1
- {"version":3,"file":"SearchQueryWrapperPlotNav.d.ts","sourceRoot":"","sources":["../../../src/components/SearchQueryWrapperPlotNav/SearchQueryWrapperPlotNav.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AACtE,OAAO,EAEL,8BAA8B,EAC/B,MAAM,8BAA8B,CAAA;AAErC,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAA;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAA;AACzF,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAA;AACzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,6CAA6C,CAAA;AACtF,OAAO,EAEL,uBAAuB,EACxB,MAAM,0CAA0C,CAAA;AAIjD,KAAK,iCAAiC,GAAG;IACvC,iDAAiD;IACjD,aAAa,EAAE,MAAM,CAAA;IACrB;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,2HAA2H;IAC3H,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,kBAAkB,CAAC,EAAE,yBAAyB,CAAA;IAC9C,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IACrC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,eAAe,CAAC,EAAE,wBAAwB,CAAC,iBAAiB,CAAC,CAAA;IAC7D,4BAA4B,CAAC,EAAE,wBAAwB,CAAC,8BAA8B,CAAC,CAAA;IACvF,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAI/B,CAAA;AAED,MAAM,MAAM,8BAA8B,GAAG,iCAAiC,GAC5E,mBAAmB,GACnB,IAAI,CACF,8BAA8B,EAC5B,kBAAkB,GAClB,oBAAoB,GACpB,eAAe,GACf,eAAe,GACf,kBAAkB,GAClB,UAAU,GACV,mBAAmB,GACnB,0BAA0B,GAC1B,iBAAiB,GACjB,mBAAmB,GACnB,qBAAqB,GACrB,2BAA2B,GAC3B,gCAAgC,GAChC,sBAAsB,GACtB,sBAAsB,CACzB,GACD,IAAI,CAAC,qBAAqB,EAAE,MAAM,GAAG,gBAAgB,CAAC,GAAG;IACvD,6GAA6G;IAC7G,gBAAgB,CAAC,EAAE,uBAAuB,CAAC,kBAAkB,CAAC,CAAA;IAC9D,8FAA8F;IAC9F,yBAAyB,CAAC,EAAE,uBAAuB,CAAC,2BAA2B,CAAC,CAAA;IAChF,+EAA+E;IAC/E,cAAc,CAAC,EAAE,uBAAuB,CAAC,gBAAgB,CAAC,CAAA;IAC1D,gGAAgG;IAChG,iBAAiB,CAAC,EAAE,uBAAuB,CAAC,mBAAmB,CAAC,CAAA;CACjE,CAAA;AAEH;;;;;;;;;GASG;AACH,wBAAgB,gCAAgC,CAAC,MAAM,EAAE;IACvD,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,GAAG,CAAC,EAAE,OAAO,CAAA;CACd,GAAG,MAAM,IAAI,8BAA8B,CAE3C;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAC/C,KAAK,EAAE,8BAA8B,2CA4GtC"}
1
+ {"version":3,"file":"SearchQueryWrapperPlotNav.d.ts","sourceRoot":"","sources":["../../../src/components/SearchQueryWrapperPlotNav/SearchQueryWrapperPlotNav.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AACtE,OAAO,EAEL,8BAA8B,EAC/B,MAAM,8BAA8B,CAAA;AAErC,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAA;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAA;AACzF,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAA;AACzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,6CAA6C,CAAA;AACtF,OAAO,EAEL,uBAAuB,EACxB,MAAM,0CAA0C,CAAA;AAIjD,KAAK,iCAAiC,GAAG;IACvC,iDAAiD;IACjD,aAAa,EAAE,MAAM,CAAA;IACrB;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,2HAA2H;IAC3H,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,kBAAkB,CAAC,EAAE,yBAAyB,CAAA;IAC9C,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IACrC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,eAAe,CAAC,EAAE,wBAAwB,CAAC,iBAAiB,CAAC,CAAA;IAC7D,4BAA4B,CAAC,EAAE,wBAAwB,CAAC,8BAA8B,CAAC,CAAA;IACvF,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAI/B,CAAA;AAED,MAAM,MAAM,8BAA8B,GAAG,iCAAiC,GAC5E,mBAAmB,GACnB,IAAI,CACF,8BAA8B,EAC5B,kBAAkB,GAClB,oBAAoB,GACpB,eAAe,GACf,eAAe,GACf,kBAAkB,GAClB,UAAU,GACV,mBAAmB,GACnB,0BAA0B,GAC1B,iBAAiB,GACjB,mBAAmB,GACnB,qBAAqB,GACrB,2BAA2B,GAC3B,gCAAgC,GAChC,sBAAsB,GACtB,sBAAsB,CACzB,GACD,IAAI,CAAC,qBAAqB,EAAE,MAAM,GAAG,gBAAgB,CAAC,GAAG;IACvD,6GAA6G;IAC7G,gBAAgB,CAAC,EAAE,uBAAuB,CAAC,kBAAkB,CAAC,CAAA;IAC9D,8FAA8F;IAC9F,yBAAyB,CAAC,EAAE,uBAAuB,CAAC,2BAA2B,CAAC,CAAA;IAChF,+EAA+E;IAC/E,cAAc,CAAC,EAAE,uBAAuB,CAAC,gBAAgB,CAAC,CAAA;IAC1D,gGAAgG;IAChG,iBAAiB,CAAC,EAAE,uBAAuB,CAAC,mBAAmB,CAAC,CAAA;CACjE,CAAA;AAEH;;;;;;;;;GASG;AACH,wBAAgB,gCAAgC,CAAC,MAAM,EAAE;IACvD,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,GAAG,CAAC,EAAE,OAAO,CAAA;CACd,GAAG,MAAM,IAAI,8BAA8B,CAE3C;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAC/C,KAAK,EAAE,8BAA8B,2CA6GtC"}
@@ -61,6 +61,7 @@ function d(u) {
61
61
  hideSqlEditorControl: !0,
62
62
  hideVisualizationsControl: u.hideVisualizationsControl,
63
63
  initialLimit: u.initialLimit,
64
+ customPlots: u.customPlots,
64
65
  initialPlotTypeByFacetColumnName: u.initialPlotTypeByFacetColumnName,
65
66
  hideTopLevelControls: u.hideTopLevelControls,
66
67
  isFullTextSearchEnabled: !0,
@@ -1 +1 @@
1
- {"version":3,"file":"SearchQueryWrapperPlotNav.js","names":[],"sources":["../../../src/components/SearchQueryWrapperPlotNav/SearchQueryWrapperPlotNav.tsx"],"sourcesContent":["import { NoContentPlaceholderType } from '@/components/SynapseTable/NoContentPlaceholderType'\nimport { DEFAULT_PAGE_SIZE } from '@/utils/SynapseConstants'\nimport { Suspense, useRef } from 'react'\nimport { useDeepCompareMemoize } from 'use-deep-compare-effect'\nimport { CardConfiguration } from '../CardContainer/CardConfiguration'\nimport {\n QueryVisualizationWrapper,\n QueryVisualizationWrapperProps,\n} from '../QueryVisualizationWrapper'\nimport QueryWrapperLoadingScreen from '../QueryWrapper/QueryWrapperLoadingScreen'\nimport { SynapseTableConfiguration } from '../SynapseTable'\nimport { TopLevelControlsProps } from '../SynapseTable/TopLevelControls/TopLevelControls'\nimport { PlotsContainerProps } from '../widgets/facet-nav/PlotsContainer'\nimport { FacetFilterControlsProps } from '../widgets/query-filter/FacetFilterControls'\nimport {\n SearchQueryWrapper,\n SearchQueryWrapperProps,\n} from '../SearchQueryWrapper/SearchQueryWrapper'\nimport { QueryWrapperPlotNavContents } from '../QueryWrapperPlotNav/QueryWrapperPlotNav'\nimport { useGetSuggestionsForSearchIndex } from '../SearchQueryWrapper/SearchQueryUseQueryOptions'\n\ntype SearchQueryWrapperPlotNavOwnProps = {\n /** The ID of the SearchIndex entity to query. */\n searchIndexId: string\n /**\n * The name of the field to use for autocomplete suggestions.\n * When provided, the search bar will show a dropdown of suggestions as the user types,\n * populated by querying the search index with this field restricted via POST /search/autocomplete.\n */\n autocompleteFieldName?: string\n /** Whether the displayed results should be paginated or infinite. Default for cards is true, default for table is false */\n isInfinite?: boolean\n tableConfiguration?: SynapseTableConfiguration\n cardConfiguration?: CardConfiguration\n facetsToPlot?: string[]\n availableFacets?: FacetFilterControlsProps['availableFacets']\n initialExpandedFacetControls?: FacetFilterControlsProps['initialExpandedFacetControls']\n initialLimit?: number\n hideTopLevelControls?: boolean\n // Note: hideDownload, hideSqlEditorControl are intentionally\n // excluded — they are hardcoded to true because these controls are not applicable to the\n // SearchQueryServicesApi (no file download, no SQL editing).\n}\n\nexport type SearchQueryWrapperPlotNavProps = SearchQueryWrapperPlotNavOwnProps &\n PlotsContainerProps &\n Pick<\n QueryVisualizationWrapperProps,\n | 'defaultShowPlots'\n | 'visibleColumnCount'\n | 'hiddenColumns'\n | 'columnAliases'\n | 'renderFacetValue'\n | 'rgbIndex'\n | 'showLastUpdatedOn'\n | 'noContentPlaceholderType'\n | 'unitDescription'\n | 'helpConfiguration'\n | 'hideCopyToClipboard'\n | 'hideVisualizationsControl'\n | 'lockTextMatchesQueryFilterPill'\n | 'hideSearchBarControl'\n | 'defaultShowSearchBar'\n > &\n Pick<TopLevelControlsProps, 'name' | 'hideQueryCount'> & {\n /** Optional initial query parameters. Only selectedFacets, additionalFilters, limit, and offset are used. */\n initQueryRequest?: SearchQueryWrapperProps['initQueryRequest']\n /** Called when the query result bundle changes (e.g. to report result counts to a parent). */\n onQueryResultBundleChange?: SearchQueryWrapperProps['onQueryResultBundleChange']\n /** Whether the URL should update when the query is modified (deep linking). */\n shouldDeepLink?: SearchQueryWrapperProps['shouldDeepLink']\n /** OpenSearch query strategy and field-boost configuration. Forwarded to SearchQueryWrapper. */\n searchQueryConfig?: SearchQueryWrapperProps['searchQueryConfig']\n }\n\n/**\n * Type guard that identifies a SearchQueryWrapperPlotNavProps from the union\n * `QueryWrapperPlotNavProps | SearchQueryWrapperPlotNavProps`.\n *\n * Two conditions are checked to be robust against future API changes:\n * 1. The config has `searchIndexId` (present only on SearchQueryWrapperPlotNavProps).\n * 2. The config does NOT have `sql` (always present on QueryWrapperPlotNavProps via\n * QueryOrDeprecatedSearchParams), so that if QueryWrapperPlotNavProps ever gains a\n * `searchIndexId` field the guard remains correct.\n */\nexport function isSearchQueryWrapperPlotNavProps(config: {\n searchIndexId?: unknown\n sql?: unknown\n}): config is SearchQueryWrapperPlotNavProps {\n return 'searchIndexId' in config && !('sql' in config)\n}\n\n/**\n * A component similar to QueryWrapperPlotNav that sources its data from the SearchQueryServicesApi\n * rather than the standard Synapse Table Services. Facets, table/card rendering, and plots are\n * all reused from the existing component library.\n */\nexport default function SearchQueryWrapperPlotNav(\n props: SearchQueryWrapperPlotNavProps,\n) {\n const {\n tableConfiguration,\n isInfinite = !tableConfiguration,\n unitDescription,\n helpConfiguration,\n initQueryRequest: initQueryRequestFromProps,\n onQueryResultBundleChange,\n searchIndexId,\n autocompleteFieldName,\n shouldDeepLink,\n } = props\n\n const getSuggestions = useGetSuggestionsForSearchIndex(\n searchIndexId,\n autocompleteFieldName,\n )\n\n const initQueryRequest: SearchQueryWrapperProps['initQueryRequest'] =\n useDeepCompareMemoize({\n partMask: initQueryRequestFromProps?.partMask ?? 0,\n query: {\n selectedFacets: initQueryRequestFromProps?.query?.selectedFacets,\n additionalFilters: initQueryRequestFromProps?.query?.additionalFilters,\n sort: initQueryRequestFromProps?.query?.sort,\n limit: initQueryRequestFromProps?.query?.limit ?? DEFAULT_PAGE_SIZE,\n offset: initQueryRequestFromProps?.query?.offset ?? 0,\n },\n })\n\n // Remount SearchQueryWrapper when initQueryRequest content changes.\n // useDeepCompareMemoize returns the same reference when content is equal, so reference\n // comparison is sufficient here. A counter is used rather than JSON.stringify to avoid\n // serializing the object on every render.\n const mountKeyRef = useRef(0)\n const prevInitQueryRef = useRef(initQueryRequest)\n if (prevInitQueryRef.current !== initQueryRequest) {\n mountKeyRef.current += 1\n prevInitQueryRef.current = initQueryRequest\n }\n\n return (\n <SearchQueryWrapper\n key={mountKeyRef.current}\n searchIndexId={searchIndexId}\n initQueryRequest={initQueryRequest}\n isInfinite={isInfinite}\n onQueryResultBundleChange={onQueryResultBundleChange}\n shouldDeepLink={shouldDeepLink}\n searchQueryConfig={props.searchQueryConfig}\n >\n <Suspense fallback={<QueryWrapperLoadingScreen />}>\n <QueryVisualizationWrapper\n unitDescription={unitDescription}\n rgbIndex={props.rgbIndex}\n columnAliases={props.columnAliases}\n renderFacetValue={props.renderFacetValue}\n dataUseModifiersColumnName={\n props.cardConfiguration?.genericCardSchema\n ?.dataUseModifiersColumnName\n }\n helpConfiguration={helpConfiguration}\n visibleColumnCount={props.visibleColumnCount}\n hiddenColumns={props.hiddenColumns}\n defaultShowPlots={props.defaultShowPlots}\n hideCopyToClipboard={props.hideCopyToClipboard}\n hideSearchBarControl={props.hideSearchBarControl ?? false}\n lockTextMatchesQueryFilterPill={props.lockTextMatchesQueryFilterPill}\n defaultShowSearchBar={props.defaultShowSearchBar ?? true}\n showLastUpdatedOn={props.showLastUpdatedOn}\n noContentPlaceholderType={\n props.noContentPlaceholderType ??\n NoContentPlaceholderType.INTERACTIVE\n }\n >\n <QueryWrapperPlotNavContents\n tableConfiguration={tableConfiguration}\n name={props.name}\n cardConfiguration={props.cardConfiguration}\n facetsToPlot={props.facetsToPlot}\n availableFacets={props.availableFacets}\n initialExpandedFacetControls={props.initialExpandedFacetControls}\n hideDownload={true}\n hideQueryCount={props.hideQueryCount ?? false}\n hideSqlEditorControl={true}\n hideVisualizationsControl={props.hideVisualizationsControl}\n initialLimit={props.initialLimit}\n initialPlotTypeByFacetColumnName={\n props.initialPlotTypeByFacetColumnName\n }\n hideTopLevelControls={props.hideTopLevelControls}\n isFullTextSearchEnabled={true}\n searchConfiguration={{\n ftsConfig: {\n textMatchesMode: 'NATURAL_LANGUAGE',\n minSearchQueryLength: 1,\n replaceExistingFilter: true,\n getSuggestions: autocompleteFieldName\n ? getSuggestions\n : undefined,\n },\n }}\n />\n </QueryVisualizationWrapper>\n </Suspense>\n </SearchQueryWrapper>\n )\n}\n"],"mappings":";;;;;;;;;;;;AAqFA,SAAgB,EAAiC,GAGJ;CAC3C,OAAO,mBAAmB,KAAU,EAAE,SAAS;AACjD;AAOA,SAAwB,EACtB,GACA;CACA,IAAM,EACJ,uBACA,gBAAa,CAAC,GACd,oBACA,sBACA,kBAAkB,GAClB,8BACA,kBACA,0BACA,sBACE,GAEE,IAAiB,EACrB,GACA,CACF,GAEM,IACJ,EAAsB;EACpB,UAAU,GAA2B,YAAY;EACjD,OAAO;GACL,gBAAgB,GAA2B,OAAO;GAClD,mBAAmB,GAA2B,OAAO;GACrD,MAAM,GAA2B,OAAO;GACxC,OAAO,GAA2B,OAAO,SAAA;GACzC,QAAQ,GAA2B,OAAO,UAAU;EACtD;CACF,CAAC,GAMG,IAAc,EAAO,CAAC,GACtB,IAAmB,EAAO,CAAgB;CAMhD,OALI,EAAiB,YAAY,MAC/B,EAAY,WAAW,GACvB,EAAiB,UAAU,IAI3B,kBAAC,GAAD;EAEiB;EACG;EACN;EACe;EACX;EAChB,mBAAmB,EAAM;YAEzB,kBAAC,GAAD;GAAU,UAAU,kBAAC,GAAD,CAA4B,CAAA;aAC9C,kBAAC,GAAD;IACmB;IACjB,UAAU,EAAM;IAChB,eAAe,EAAM;IACrB,kBAAkB,EAAM;IACxB,4BACE,EAAM,mBAAmB,mBACrB;IAEa;IACnB,oBAAoB,EAAM;IAC1B,eAAe,EAAM;IACrB,kBAAkB,EAAM;IACxB,qBAAqB,EAAM;IAC3B,sBAAsB,EAAM,wBAAwB;IACpD,gCAAgC,EAAM;IACtC,sBAAsB,EAAM,wBAAwB;IACpD,mBAAmB,EAAM;IACzB,0BACE,EAAM,4BACN,EAAyB;cAG3B,kBAAC,GAAD;KACsB;KACpB,MAAM,EAAM;KACZ,mBAAmB,EAAM;KACzB,cAAc,EAAM;KACpB,iBAAiB,EAAM;KACvB,8BAA8B,EAAM;KACpC,cAAc;KACd,gBAAgB,EAAM,kBAAkB;KACxC,sBAAsB;KACtB,2BAA2B,EAAM;KACjC,cAAc,EAAM;KACpB,kCACE,EAAM;KAER,sBAAsB,EAAM;KAC5B,yBAAyB;KACzB,qBAAqB,EACnB,WAAW;MACT,iBAAiB;MACjB,sBAAsB;MACtB,uBAAuB;MACvB,gBAAgB,IACZ,IACA,KAAA;KACN,EACF;IACD,CAAA;GACwB,CAAA;EACnB,CAAA;CACQ,GA9Db,EAAY,OA8DC;AAExB"}
1
+ {"version":3,"file":"SearchQueryWrapperPlotNav.js","names":[],"sources":["../../../src/components/SearchQueryWrapperPlotNav/SearchQueryWrapperPlotNav.tsx"],"sourcesContent":["import { NoContentPlaceholderType } from '@/components/SynapseTable/NoContentPlaceholderType'\nimport { DEFAULT_PAGE_SIZE } from '@/utils/SynapseConstants'\nimport { Suspense, useRef } from 'react'\nimport { useDeepCompareMemoize } from 'use-deep-compare-effect'\nimport { CardConfiguration } from '../CardContainer/CardConfiguration'\nimport {\n QueryVisualizationWrapper,\n QueryVisualizationWrapperProps,\n} from '../QueryVisualizationWrapper'\nimport QueryWrapperLoadingScreen from '../QueryWrapper/QueryWrapperLoadingScreen'\nimport { SynapseTableConfiguration } from '../SynapseTable'\nimport { TopLevelControlsProps } from '../SynapseTable/TopLevelControls/TopLevelControls'\nimport { PlotsContainerProps } from '../widgets/facet-nav/PlotsContainer'\nimport { FacetFilterControlsProps } from '../widgets/query-filter/FacetFilterControls'\nimport {\n SearchQueryWrapper,\n SearchQueryWrapperProps,\n} from '../SearchQueryWrapper/SearchQueryWrapper'\nimport { QueryWrapperPlotNavContents } from '../QueryWrapperPlotNav/QueryWrapperPlotNav'\nimport { useGetSuggestionsForSearchIndex } from '../SearchQueryWrapper/SearchQueryUseQueryOptions'\n\ntype SearchQueryWrapperPlotNavOwnProps = {\n /** The ID of the SearchIndex entity to query. */\n searchIndexId: string\n /**\n * The name of the field to use for autocomplete suggestions.\n * When provided, the search bar will show a dropdown of suggestions as the user types,\n * populated by querying the search index with this field restricted via POST /search/autocomplete.\n */\n autocompleteFieldName?: string\n /** Whether the displayed results should be paginated or infinite. Default for cards is true, default for table is false */\n isInfinite?: boolean\n tableConfiguration?: SynapseTableConfiguration\n cardConfiguration?: CardConfiguration\n facetsToPlot?: string[]\n availableFacets?: FacetFilterControlsProps['availableFacets']\n initialExpandedFacetControls?: FacetFilterControlsProps['initialExpandedFacetControls']\n initialLimit?: number\n hideTopLevelControls?: boolean\n // Note: hideDownload, hideSqlEditorControl are intentionally\n // excluded — they are hardcoded to true because these controls are not applicable to the\n // SearchQueryServicesApi (no file download, no SQL editing).\n}\n\nexport type SearchQueryWrapperPlotNavProps = SearchQueryWrapperPlotNavOwnProps &\n PlotsContainerProps &\n Pick<\n QueryVisualizationWrapperProps,\n | 'defaultShowPlots'\n | 'visibleColumnCount'\n | 'hiddenColumns'\n | 'columnAliases'\n | 'renderFacetValue'\n | 'rgbIndex'\n | 'showLastUpdatedOn'\n | 'noContentPlaceholderType'\n | 'unitDescription'\n | 'helpConfiguration'\n | 'hideCopyToClipboard'\n | 'hideVisualizationsControl'\n | 'lockTextMatchesQueryFilterPill'\n | 'hideSearchBarControl'\n | 'defaultShowSearchBar'\n > &\n Pick<TopLevelControlsProps, 'name' | 'hideQueryCount'> & {\n /** Optional initial query parameters. Only selectedFacets, additionalFilters, limit, and offset are used. */\n initQueryRequest?: SearchQueryWrapperProps['initQueryRequest']\n /** Called when the query result bundle changes (e.g. to report result counts to a parent). */\n onQueryResultBundleChange?: SearchQueryWrapperProps['onQueryResultBundleChange']\n /** Whether the URL should update when the query is modified (deep linking). */\n shouldDeepLink?: SearchQueryWrapperProps['shouldDeepLink']\n /** OpenSearch query strategy and field-boost configuration. Forwarded to SearchQueryWrapper. */\n searchQueryConfig?: SearchQueryWrapperProps['searchQueryConfig']\n }\n\n/**\n * Type guard that identifies a SearchQueryWrapperPlotNavProps from the union\n * `QueryWrapperPlotNavProps | SearchQueryWrapperPlotNavProps`.\n *\n * Two conditions are checked to be robust against future API changes:\n * 1. The config has `searchIndexId` (present only on SearchQueryWrapperPlotNavProps).\n * 2. The config does NOT have `sql` (always present on QueryWrapperPlotNavProps via\n * QueryOrDeprecatedSearchParams), so that if QueryWrapperPlotNavProps ever gains a\n * `searchIndexId` field the guard remains correct.\n */\nexport function isSearchQueryWrapperPlotNavProps(config: {\n searchIndexId?: unknown\n sql?: unknown\n}): config is SearchQueryWrapperPlotNavProps {\n return 'searchIndexId' in config && !('sql' in config)\n}\n\n/**\n * A component similar to QueryWrapperPlotNav that sources its data from the SearchQueryServicesApi\n * rather than the standard Synapse Table Services. Facets, table/card rendering, and plots are\n * all reused from the existing component library.\n */\nexport default function SearchQueryWrapperPlotNav(\n props: SearchQueryWrapperPlotNavProps,\n) {\n const {\n tableConfiguration,\n isInfinite = !tableConfiguration,\n unitDescription,\n helpConfiguration,\n initQueryRequest: initQueryRequestFromProps,\n onQueryResultBundleChange,\n searchIndexId,\n autocompleteFieldName,\n shouldDeepLink,\n } = props\n\n const getSuggestions = useGetSuggestionsForSearchIndex(\n searchIndexId,\n autocompleteFieldName,\n )\n\n const initQueryRequest: SearchQueryWrapperProps['initQueryRequest'] =\n useDeepCompareMemoize({\n partMask: initQueryRequestFromProps?.partMask ?? 0,\n query: {\n selectedFacets: initQueryRequestFromProps?.query?.selectedFacets,\n additionalFilters: initQueryRequestFromProps?.query?.additionalFilters,\n sort: initQueryRequestFromProps?.query?.sort,\n limit: initQueryRequestFromProps?.query?.limit ?? DEFAULT_PAGE_SIZE,\n offset: initQueryRequestFromProps?.query?.offset ?? 0,\n },\n })\n\n // Remount SearchQueryWrapper when initQueryRequest content changes.\n // useDeepCompareMemoize returns the same reference when content is equal, so reference\n // comparison is sufficient here. A counter is used rather than JSON.stringify to avoid\n // serializing the object on every render.\n const mountKeyRef = useRef(0)\n const prevInitQueryRef = useRef(initQueryRequest)\n if (prevInitQueryRef.current !== initQueryRequest) {\n mountKeyRef.current += 1\n prevInitQueryRef.current = initQueryRequest\n }\n\n return (\n <SearchQueryWrapper\n key={mountKeyRef.current}\n searchIndexId={searchIndexId}\n initQueryRequest={initQueryRequest}\n isInfinite={isInfinite}\n onQueryResultBundleChange={onQueryResultBundleChange}\n shouldDeepLink={shouldDeepLink}\n searchQueryConfig={props.searchQueryConfig}\n >\n <Suspense fallback={<QueryWrapperLoadingScreen />}>\n <QueryVisualizationWrapper\n unitDescription={unitDescription}\n rgbIndex={props.rgbIndex}\n columnAliases={props.columnAliases}\n renderFacetValue={props.renderFacetValue}\n dataUseModifiersColumnName={\n props.cardConfiguration?.genericCardSchema\n ?.dataUseModifiersColumnName\n }\n helpConfiguration={helpConfiguration}\n visibleColumnCount={props.visibleColumnCount}\n hiddenColumns={props.hiddenColumns}\n defaultShowPlots={props.defaultShowPlots}\n hideCopyToClipboard={props.hideCopyToClipboard}\n hideSearchBarControl={props.hideSearchBarControl ?? false}\n lockTextMatchesQueryFilterPill={props.lockTextMatchesQueryFilterPill}\n defaultShowSearchBar={props.defaultShowSearchBar ?? true}\n showLastUpdatedOn={props.showLastUpdatedOn}\n noContentPlaceholderType={\n props.noContentPlaceholderType ??\n NoContentPlaceholderType.INTERACTIVE\n }\n >\n <QueryWrapperPlotNavContents\n tableConfiguration={tableConfiguration}\n name={props.name}\n cardConfiguration={props.cardConfiguration}\n facetsToPlot={props.facetsToPlot}\n availableFacets={props.availableFacets}\n initialExpandedFacetControls={props.initialExpandedFacetControls}\n hideDownload={true}\n hideQueryCount={props.hideQueryCount ?? false}\n hideSqlEditorControl={true}\n hideVisualizationsControl={props.hideVisualizationsControl}\n initialLimit={props.initialLimit}\n customPlots={props.customPlots}\n initialPlotTypeByFacetColumnName={\n props.initialPlotTypeByFacetColumnName\n }\n hideTopLevelControls={props.hideTopLevelControls}\n isFullTextSearchEnabled={true}\n searchConfiguration={{\n ftsConfig: {\n textMatchesMode: 'NATURAL_LANGUAGE',\n minSearchQueryLength: 1,\n replaceExistingFilter: true,\n getSuggestions: autocompleteFieldName\n ? getSuggestions\n : undefined,\n },\n }}\n />\n </QueryVisualizationWrapper>\n </Suspense>\n </SearchQueryWrapper>\n )\n}\n"],"mappings":";;;;;;;;;;;;AAqFA,SAAgB,EAAiC,GAGJ;CAC3C,OAAO,mBAAmB,KAAU,EAAE,SAAS;AACjD;AAOA,SAAwB,EACtB,GACA;CACA,IAAM,EACJ,uBACA,gBAAa,CAAC,GACd,oBACA,sBACA,kBAAkB,GAClB,8BACA,kBACA,0BACA,sBACE,GAEE,IAAiB,EACrB,GACA,CACF,GAEM,IACJ,EAAsB;EACpB,UAAU,GAA2B,YAAY;EACjD,OAAO;GACL,gBAAgB,GAA2B,OAAO;GAClD,mBAAmB,GAA2B,OAAO;GACrD,MAAM,GAA2B,OAAO;GACxC,OAAO,GAA2B,OAAO,SAAA;GACzC,QAAQ,GAA2B,OAAO,UAAU;EACtD;CACF,CAAC,GAMG,IAAc,EAAO,CAAC,GACtB,IAAmB,EAAO,CAAgB;CAMhD,OALI,EAAiB,YAAY,MAC/B,EAAY,WAAW,GACvB,EAAiB,UAAU,IAI3B,kBAAC,GAAD;EAEiB;EACG;EACN;EACe;EACX;EAChB,mBAAmB,EAAM;YAEzB,kBAAC,GAAD;GAAU,UAAU,kBAAC,GAAD,CAA4B,CAAA;aAC9C,kBAAC,GAAD;IACmB;IACjB,UAAU,EAAM;IAChB,eAAe,EAAM;IACrB,kBAAkB,EAAM;IACxB,4BACE,EAAM,mBAAmB,mBACrB;IAEa;IACnB,oBAAoB,EAAM;IAC1B,eAAe,EAAM;IACrB,kBAAkB,EAAM;IACxB,qBAAqB,EAAM;IAC3B,sBAAsB,EAAM,wBAAwB;IACpD,gCAAgC,EAAM;IACtC,sBAAsB,EAAM,wBAAwB;IACpD,mBAAmB,EAAM;IACzB,0BACE,EAAM,4BACN,EAAyB;cAG3B,kBAAC,GAAD;KACsB;KACpB,MAAM,EAAM;KACZ,mBAAmB,EAAM;KACzB,cAAc,EAAM;KACpB,iBAAiB,EAAM;KACvB,8BAA8B,EAAM;KACpC,cAAc;KACd,gBAAgB,EAAM,kBAAkB;KACxC,sBAAsB;KACtB,2BAA2B,EAAM;KACjC,cAAc,EAAM;KACpB,aAAa,EAAM;KACnB,kCACE,EAAM;KAER,sBAAsB,EAAM;KAC5B,yBAAyB;KACzB,qBAAqB,EACnB,WAAW;MACT,iBAAiB;MACjB,sBAAsB;MACtB,uBAAuB;MACvB,gBAAgB,IACZ,IACA,KAAA;KACN,EACF;IACD,CAAA;GACwB,CAAA;EACnB,CAAA;CACQ,GA/Db,EAAY,OA+DC;AAExB"}
@@ -34,6 +34,8 @@ export type EntityActionMenuLayout = {
34
34
  primaryMenuEndIcon: IconName;
35
35
  primaryMenuEndIconSx?: SxProps;
36
36
  menuButtonSx?: SystemStyleObject<Theme>;
37
+ downloadMenuVariant?: ButtonProps['variant'];
38
+ primaryMenuVariant?: ButtonProps['variant'];
37
39
  };
38
40
  export type EntityActionMenuProps = {
39
41
  actionConfiguration: ActionConfigurationMap;
@@ -1 +1 @@
1
- {"version":3,"file":"EntityActionMenu.d.ts","sourceRoot":"","sources":["../../../../../src/components/entity/page/action_menu/EntityActionMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAO,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAEhE,OAAgB,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,gBAAgB,EAAqB,MAAM,4BAA4B,CAAA;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAG/C,KAAK,gCAAgC,GAAG,UAAU,GAAG,SAAS,CAAA;AAE9D,KAAK,yCAAyC,GAAG;IAC/C,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAA;IACjC,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;AAExE,MAAM,MAAM,oBAAoB,GAAG,MAAM,CACvC,gCAAgC,EAChC,yCAAyC,CAC1C,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,QAAQ,CAAA;IACf,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,aAAa,EAAE,eAAe,EAAE,CAAA;IAChC,mBAAmB,EAAE,eAAe,EAAE,EAAE,CAAA;IACxC,kBAAkB,EAAE,eAAe,EAAE,EAAE,CAAA;IACvC,eAAe,EAAE,MAAM,CAAA;IACvB,kBAAkB,EAAE,QAAQ,CAAA;IAC5B,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,YAAY,CAAC,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAA;CACxC,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAElC,mBAAmB,EAAE,sBAAsB,CAAA;IAE3C,iBAAiB,EAAE,oBAAoB,CAAA;IAEvC,MAAM,EAAE,sBAAsB,CAAA;CAC/B,CAAA;AAMD,iBAAS,kBAAkB,CACzB,mBAAmB,EAAE,sBAAsB,EAC3C,MAAM,EAAE,sBAAsB,GAC7B,sBAAsB,CAmBxB;AAED;;;;;GAKG;AACH,iBAAS,4BAA4B,CACnC,KAAK,EAAE,eAAe,EAAE,EACxB,mBAAmB,EAAE,sBAAsB,GAC1C,gBAAgB,EAAE,CAqBpB;AAED;;;;;;GAMG;AACH,iBAAS,sBAAsB,CAC7B,WAAW,EAAE,eAAe,EAAE,EAAE,EAChC,mBAAmB,EAAE,sBAAsB,GAC1C,gBAAgB,EAAE,EAAE,CAYtB;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,2CA8GpE;AAED,eAAO,MAAM,yBAAyB;;;;CAIrC,CAAA"}
1
+ {"version":3,"file":"EntityActionMenu.d.ts","sourceRoot":"","sources":["../../../../../src/components/entity/page/action_menu/EntityActionMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAO,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAEhE,OAAgB,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,gBAAgB,EAAqB,MAAM,4BAA4B,CAAA;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAK/C,KAAK,gCAAgC,GAAG,UAAU,GAAG,SAAS,CAAA;AAE9D,KAAK,yCAAyC,GAAG;IAC/C,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAA;IACjC,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;AAExE,MAAM,MAAM,oBAAoB,GAAG,MAAM,CACvC,gCAAgC,EAChC,yCAAyC,CAC1C,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,QAAQ,CAAA;IACf,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,aAAa,EAAE,eAAe,EAAE,CAAA;IAChC,mBAAmB,EAAE,eAAe,EAAE,EAAE,CAAA;IACxC,kBAAkB,EAAE,eAAe,EAAE,EAAE,CAAA;IACvC,eAAe,EAAE,MAAM,CAAA;IACvB,kBAAkB,EAAE,QAAQ,CAAA;IAC5B,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,YAAY,CAAC,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAA;IACvC,mBAAmB,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,CAAA;IAC5C,kBAAkB,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,CAAA;CAC5C,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAElC,mBAAmB,EAAE,sBAAsB,CAAA;IAE3C,iBAAiB,EAAE,oBAAoB,CAAA;IAEvC,MAAM,EAAE,sBAAsB,CAAA;CAC/B,CAAA;AAMD,iBAAS,kBAAkB,CACzB,mBAAmB,EAAE,sBAAsB,EAC3C,MAAM,EAAE,sBAAsB,GAC7B,sBAAsB,CAmBxB;AAED;;;;;GAKG;AACH,iBAAS,4BAA4B,CACnC,KAAK,EAAE,eAAe,EAAE,EACxB,mBAAmB,EAAE,sBAAsB,GAC1C,gBAAgB,EAAE,CAqBpB;AAED;;;;;;GAMG;AACH,iBAAS,sBAAsB,CAC7B,WAAW,EAAE,eAAe,EAAE,EAAE,EAChC,mBAAmB,EAAE,sBAAsB,GAC1C,gBAAgB,EAAE,EAAE,CAYtB;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,2CAoIpE;AAED,eAAO,MAAM,yBAAyB;;;;CAIrC,CAAA"}