@malloy-publisher/sdk 0.0.198-dev → 0.0.198

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 (40) hide show
  1. package/dist/components/Package/ContentTypeIcon.d.ts +16 -0
  2. package/dist/components/Package/index.d.ts +0 -1
  3. package/dist/components/styles.d.ts +16 -0
  4. package/dist/{core-w79IMXAG.es.js → core-CbsC6R_Y.es.js} +1 -1
  5. package/dist/{core-7-3Jcsb0.cjs.js → core-WV2T5KIQ.cjs.js} +1 -1
  6. package/dist/{index-CN0_kZSF.es.js → index-BIdK-n2r.es.js} +17654 -20603
  7. package/dist/index-BZ3efB1x.cjs.js +228 -0
  8. package/dist/index.cjs.js +1 -1
  9. package/dist/index.es.js +33 -34
  10. package/package.json +5 -5
  11. package/src/components/Environment/AddPackageDialog.tsx +116 -79
  12. package/src/components/Environment/DeletePackageDialog.tsx +3 -2
  13. package/src/components/Environment/Environment.tsx +44 -23
  14. package/src/components/Environment/Packages.tsx +164 -156
  15. package/src/components/Home/DeleteEnvironmentDialog.tsx +3 -2
  16. package/src/components/Home/Home.tsx +272 -389
  17. package/src/components/Model/Model.tsx +2 -2
  18. package/src/components/Model/ModelCell.tsx +1 -1
  19. package/src/components/Model/ModelExplorerDialog.tsx +1 -1
  20. package/src/components/Model/SourcesExplorer.tsx +4 -4
  21. package/src/components/Notebook/Notebook.tsx +4 -9
  22. package/src/components/Notebook/NotebookCell.tsx +10 -7
  23. package/src/components/Package/ContentTypeIcon.tsx +79 -0
  24. package/src/components/Package/Package.tsx +387 -55
  25. package/src/components/Package/index.ts +0 -1
  26. package/src/components/QueryResult/QueryResult.tsx +1 -1
  27. package/src/components/RenderedResult/RenderedResult.tsx +9 -8
  28. package/src/components/ResultsDialog.tsx +1 -1
  29. package/src/components/styles.ts +28 -15
  30. package/dist/components/Package/Config.d.ts +0 -5
  31. package/dist/components/Package/Databases.d.ts +0 -5
  32. package/dist/components/Package/FileTreeView.d.ts +0 -9
  33. package/dist/components/Package/Models.d.ts +0 -6
  34. package/dist/components/Package/Notebooks.d.ts +0 -6
  35. package/dist/index-Xo_ADux9.cjs.js +0 -233
  36. package/src/components/Package/Config.tsx +0 -97
  37. package/src/components/Package/Databases.tsx +0 -228
  38. package/src/components/Package/FileTreeView.tsx +0 -241
  39. package/src/components/Package/Models.tsx +0 -68
  40. package/src/components/Package/Notebooks.tsx +0 -77
package/dist/index.cjs.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./index-Xo_ADux9.cjs.js"),o=require("./ServerProvider-IhQ4aYBm.cjs.js");exports.AnalyzePackageButton=e.AnalyzePackageButton;exports.BrowserWorkbookStorage=e.BrowserWorkbookStorage;exports.ConnectionExplorer=e.ConnectionExplorer;exports.DimensionFilter=e.DimensionFilter;exports.EmbeddedQueryResult=e.EmbeddedQueryResult;exports.Environment=e.Environment;exports.Home=e.Home;exports.Loading=e.Loading;exports.Model=e.Model;exports.ModelExplorer=e.ModelExplorer;exports.ModelExplorerDialog=e.ModelExplorerDialog;exports.Models=e.Models;exports.Notebook=e.Notebook;exports.Package=e.Package;exports.Packages=e.Packages;exports.QueryResult=e.QueryResult;exports.RenderedResult=e.RenderedResult;exports.ResultContainer=e.ResultContainer;exports.SourceExplorerComponent=e.SourceExplorerComponent;exports.SourcesExplorer=e.SourcesExplorer;exports.Workbook=e.Workbook;exports.WorkbookList=e.WorkbookList;exports.WorkbookManager=e.WorkbookManager;exports.WorkbookStorageProvider=e.WorkbookStorageProvider;exports.createEmbeddedQueryResult=e.createEmbeddedQueryResult;exports.encodeResourceUri=e.encodeResourceUri;exports.extractDimensionSpecs=e.extractDimensionSpecs;exports.extractSourceFromQuery=e.extractSourceFromQuery;exports.generateFilterClause=e.generateFilterClause;exports.getDimensionKey=e.getDimensionKey;exports.getJoinedSources=e.getJoinedSources;exports.injectWhereClause=e.injectWhereClause;exports.makeDimensionKey=e.makeDimensionKey;exports.parseAllSourceInfos=e.parseAllSourceInfos;exports.parseDimensionFilterAnnotation=e.parseDimensionFilterAnnotation;exports.parseNotebookFilterAnnotation=e.parseNotebookFilterAnnotation;exports.parseResourceUri=e.parseResourceUri;exports.useDimensionFilters=e.useDimensionFilters;exports.useDimensionFiltersFromSpec=e.useDimensionFiltersFromSpec;exports.useDimensionFiltersQuery=e.useDimensionFiltersQuery;exports.useDimensionalFilterRangeData=e.useDimensionalFilterRangeData;exports.useModelData=e.useModelData;exports.useRawQueryData=e.useRawQueryData;exports.useRouterClickHandler=e.useRouterClickHandler;exports.ServerProvider=o.ServerProvider;exports.useServer=o.useServer;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./index-BZ3efB1x.cjs.js"),o=require("./ServerProvider-IhQ4aYBm.cjs.js");exports.AnalyzePackageButton=e.AnalyzePackageButton;exports.BrowserWorkbookStorage=e.BrowserWorkbookStorage;exports.ConnectionExplorer=e.ConnectionExplorer;exports.DimensionFilter=e.DimensionFilter;exports.EmbeddedQueryResult=e.EmbeddedQueryResult;exports.Environment=e.Environment;exports.Home=e.Home;exports.Loading=e.Loading;exports.Model=e.Model;exports.ModelExplorer=e.ModelExplorer;exports.ModelExplorerDialog=e.ModelExplorerDialog;exports.Notebook=e.Notebook;exports.Package=e.Package;exports.Packages=e.Packages;exports.QueryResult=e.QueryResult;exports.RenderedResult=e.RenderedResult;exports.ResultContainer=e.ResultContainer;exports.SourceExplorerComponent=e.SourceExplorerComponent;exports.SourcesExplorer=e.SourcesExplorer;exports.Workbook=e.Workbook;exports.WorkbookList=e.WorkbookList;exports.WorkbookManager=e.WorkbookManager;exports.WorkbookStorageProvider=e.WorkbookStorageProvider;exports.createEmbeddedQueryResult=e.createEmbeddedQueryResult;exports.encodeResourceUri=e.encodeResourceUri;exports.extractDimensionSpecs=e.extractDimensionSpecs;exports.extractSourceFromQuery=e.extractSourceFromQuery;exports.generateFilterClause=e.generateFilterClause;exports.getDimensionKey=e.getDimensionKey;exports.getJoinedSources=e.getJoinedSources;exports.injectWhereClause=e.injectWhereClause;exports.makeDimensionKey=e.makeDimensionKey;exports.parseAllSourceInfos=e.parseAllSourceInfos;exports.parseDimensionFilterAnnotation=e.parseDimensionFilterAnnotation;exports.parseNotebookFilterAnnotation=e.parseNotebookFilterAnnotation;exports.parseResourceUri=e.parseResourceUri;exports.useDimensionFilters=e.useDimensionFilters;exports.useDimensionFiltersFromSpec=e.useDimensionFiltersFromSpec;exports.useDimensionFiltersQuery=e.useDimensionFiltersQuery;exports.useDimensionalFilterRangeData=e.useDimensionalFilterRangeData;exports.useModelData=e.useModelData;exports.useRawQueryData=e.useRawQueryData;exports.useRouterClickHandler=e.useRouterClickHandler;exports.ServerProvider=o.ServerProvider;exports.useServer=o.useServer;
package/dist/index.es.js CHANGED
@@ -1,5 +1,5 @@
1
- import { A as a, J as o, C as r, D as n, y as t, E as i, H as l, L as u, M as m, o as c, q as d, x as k, N as p, v as D, P as g, Q as S, R, F, r as x, S as y, W as b, G as E, K as C, I as M, B as Q, _ as W, g as v, i as P, j as A, X as f, k as B, l as H, Y as K, p as L, m as N, n as U, Z as j, O as w, T as I, U as J, V as h, t as q, u as z, e as G } from "./index-CN0_kZSF.es.js";
2
- import { S as T, u as V } from "./ServerProvider-DDScRRDc.es.js";
1
+ import { A as a, I as o, C as r, D as n, x as t, E as i, H as l, L as u, M as m, o as c, q as d, N as k, v as p, P as D, Q as g, R as S, B as R, r as F, S as x, W as y, F as b, J as E, G as C, y as Q, Z as W, g as v, i as M, j as P, V as A, k as f, l as B, X as H, p as K, m as L, n as N, Y as U, K as j, O as w, T as I, U as J, t as h, u as q, e as z } from "./index-BIdK-n2r.es.js";
2
+ import { S as O, u as T } from "./ServerProvider-DDScRRDc.es.js";
3
3
  export {
4
4
  a as AnalyzePackageButton,
5
5
  o as BrowserWorkbookStorage,
@@ -12,39 +12,38 @@ export {
12
12
  m as Model,
13
13
  c as ModelExplorer,
14
14
  d as ModelExplorerDialog,
15
- k as Models,
16
- p as Notebook,
17
- D as Package,
18
- g as Packages,
19
- S as QueryResult,
20
- R as RenderedResult,
21
- F as ResultContainer,
22
- T as ServerProvider,
23
- x as SourceExplorerComponent,
24
- y as SourcesExplorer,
25
- b as Workbook,
26
- E as WorkbookList,
27
- C as WorkbookManager,
28
- M as WorkbookStorageProvider,
15
+ k as Notebook,
16
+ p as Package,
17
+ D as Packages,
18
+ g as QueryResult,
19
+ S as RenderedResult,
20
+ R as ResultContainer,
21
+ O as ServerProvider,
22
+ F as SourceExplorerComponent,
23
+ x as SourcesExplorer,
24
+ y as Workbook,
25
+ b as WorkbookList,
26
+ E as WorkbookManager,
27
+ C as WorkbookStorageProvider,
29
28
  Q as createEmbeddedQueryResult,
30
29
  W as encodeResourceUri,
31
30
  v as extractDimensionSpecs,
32
- P as extractSourceFromQuery,
33
- A as generateFilterClause,
34
- f as getDimensionKey,
35
- B as getJoinedSources,
36
- H as injectWhereClause,
37
- K as makeDimensionKey,
38
- L as parseAllSourceInfos,
39
- N as parseDimensionFilterAnnotation,
40
- U as parseNotebookFilterAnnotation,
41
- j as parseResourceUri,
42
- w as useDimensionFilters,
43
- I as useDimensionFiltersFromSpec,
44
- J as useDimensionFiltersQuery,
45
- h as useDimensionalFilterRangeData,
46
- q as useModelData,
47
- z as useRawQueryData,
48
- G as useRouterClickHandler,
49
- V as useServer
31
+ M as extractSourceFromQuery,
32
+ P as generateFilterClause,
33
+ A as getDimensionKey,
34
+ f as getJoinedSources,
35
+ B as injectWhereClause,
36
+ H as makeDimensionKey,
37
+ K as parseAllSourceInfos,
38
+ L as parseDimensionFilterAnnotation,
39
+ N as parseNotebookFilterAnnotation,
40
+ U as parseResourceUri,
41
+ j as useDimensionFilters,
42
+ w as useDimensionFiltersFromSpec,
43
+ I as useDimensionFiltersQuery,
44
+ J as useDimensionalFilterRangeData,
45
+ h as useModelData,
46
+ q as useRawQueryData,
47
+ z as useRouterClickHandler,
48
+ T as useServer
50
49
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@malloy-publisher/sdk",
3
3
  "description": "Malloy Publisher SDK",
4
- "version": "0.0.198-dev",
4
+ "version": "0.0.198",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs.js",
7
7
  "module": "dist/index.es.js",
@@ -71,9 +71,9 @@
71
71
  "react-router-dom": ">=7.6.2",
72
72
  "@tanstack/react-query": ">=5.59.16",
73
73
  "@malloydata/malloy-explorer": "0.0.338-dev260215172810",
74
- "@malloydata/malloy-interfaces": "^0.0.383",
75
- "@malloydata/malloy-query-builder": "^0.0.383",
76
- "@malloydata/render": "^0.0.383",
74
+ "@malloydata/malloy-interfaces": "^0.0.394",
75
+ "@malloydata/malloy-query-builder": "^0.0.394",
76
+ "@malloydata/render": "^0.0.394",
77
77
  "@mui/icons-material": ">=7.1.1",
78
78
  "@mui/x-date-pickers": ">=7.1.1",
79
79
  "@mui/material": ">=7.1.1",
@@ -91,7 +91,7 @@
91
91
  },
92
92
  "devDependencies": {
93
93
  "@malloydata/malloy-explorer": "0.0.338-dev260215172810",
94
- "@malloydata/malloy-query-builder": "^0.0.383",
94
+ "@malloydata/malloy-query-builder": "^0.0.394",
95
95
  "@openapitools/openapi-generator-cli": "^2.20.2",
96
96
  "@types/bun": "^1.2.21",
97
97
  "@types/k6": "^1.0.2",
@@ -1,19 +1,22 @@
1
- import React from "react";
2
- import Button from "@mui/material/Button";
3
- import TextField from "@mui/material/TextField";
4
- import Dialog from "@mui/material/Dialog";
5
- import DialogActions from "@mui/material/DialogActions";
6
- import DialogContent from "@mui/material/DialogContent";
7
- import DialogContentText from "@mui/material/DialogContentText";
8
- import DialogTitle from "@mui/material/DialogTitle";
9
- import { useState } from "react";
10
1
  import { Add } from "@mui/icons-material";
11
- import { Snackbar } from "@mui/material";
12
- import { Package } from "../../client";
2
+ import {
3
+ Box,
4
+ Button,
5
+ Dialog,
6
+ DialogActions,
7
+ DialogContent,
8
+ DialogTitle,
9
+ Snackbar,
10
+ Stack,
11
+ TextField,
12
+ Typography,
13
+ } from "@mui/material";
13
14
  import { useQueryClient } from "@tanstack/react-query";
15
+ import React, { useState } from "react";
16
+ import { Package } from "../../client";
14
17
  import { useMutationWithApiError } from "../../hooks/useQueryWithApiError";
15
- import { useServer } from "../ServerProvider";
16
18
  import { parseResourceUri } from "../../utils/formatting";
19
+ import { useServer } from "../ServerProvider";
17
20
 
18
21
  interface AddPackageDialogProps {
19
22
  resourceUri: string;
@@ -27,15 +30,8 @@ export default function AddPackageDialog({
27
30
  const queryClient = useQueryClient();
28
31
  const [notificationMessage, setNotificationMessage] = useState("");
29
32
 
30
- const handleClickOpen = () => {
31
- setOpen(true);
32
- };
33
-
34
- const handleClose = () => {
35
- setOpen(false);
36
- };
37
-
38
33
  const { environmentName } = parseResourceUri(resourceUri);
34
+
39
35
  const addPackage = useMutationWithApiError({
40
36
  async mutationFn(variables: Package) {
41
37
  return apiClients.packages.createPackage(environmentName, {
@@ -45,7 +41,7 @@ export default function AddPackageDialog({
45
41
  });
46
42
  },
47
43
  onSuccess() {
48
- handleClose();
44
+ setOpen(false);
49
45
  setNotificationMessage("Package created successfully");
50
46
  queryClient.invalidateQueries({
51
47
  queryKey: ["packages", environmentName],
@@ -70,80 +66,121 @@ export default function AddPackageDialog({
70
66
  };
71
67
 
72
68
  return (
73
- <React.Fragment>
69
+ <>
74
70
  <Button
75
- onClick={handleClickOpen}
71
+ onClick={() => setOpen(true)}
76
72
  variant="contained"
77
73
  color="primary"
78
74
  startIcon={<Add />}
79
- sx={{
80
- color: "white",
81
- }}
82
75
  >
83
76
  Add Package
84
77
  </Button>
85
78
 
86
- <Dialog open={open} onClose={handleClose}>
87
- <DialogTitle>Create New Package</DialogTitle>
88
- <DialogContent>
89
- <DialogContentText>
90
- Create a new malloy package to start exploring your data.
91
- <br />
92
- <br />
93
- The location can be a GitHub/S3/GCP URL containing a package
94
- (Zipped or unzipped), or an absolute path to a directory that
95
- the publisher server has access to.
96
- <br />
97
- <br />
98
- Make sure to conform the{" "}
99
- <a
100
- href="https://github.com/malloydata/publisher/blob/main/README.md#architecture-overview"
101
- target="_blank"
102
- rel="noopener noreferrer"
79
+ <Dialog
80
+ open={open}
81
+ onClose={() => setOpen(false)}
82
+ maxWidth="sm"
83
+ fullWidth
84
+ PaperProps={{ sx: { borderRadius: 2 } }}
85
+ >
86
+ <DialogTitle
87
+ sx={{
88
+ fontSize: "1.25rem",
89
+ fontWeight: 600,
90
+ letterSpacing: "-0.025em",
91
+ pt: 3,
92
+ pb: 1,
93
+ px: 3,
94
+ }}
95
+ >
96
+ Create New Package
97
+ </DialogTitle>
98
+ <DialogContent sx={{ px: 3, pb: 0 }}>
99
+ <Box sx={{ mb: 3 }}>
100
+ <Typography
101
+ variant="body2"
102
+ color="text.secondary"
103
+ sx={{ mb: 1.5 }}
103
104
  >
104
- Malloy Package Format
105
- </a>
106
- .
107
- </DialogContentText>
105
+ Create a new Malloy package to start exploring your data.
106
+ </Typography>
107
+ <Typography
108
+ variant="body2"
109
+ color="text.secondary"
110
+ sx={{ mb: 1.5 }}
111
+ >
112
+ The location can be a GitHub/S3/GCP URL containing a
113
+ package (zipped or unzipped), or an absolute path to a
114
+ directory the publisher server has access to.
115
+ </Typography>
116
+ <Typography variant="body2" color="text.secondary">
117
+ Make sure to conform to the{" "}
118
+ <Box
119
+ component="a"
120
+ href="https://github.com/malloydata/publisher/blob/main/README.md#architecture-overview"
121
+ target="_blank"
122
+ rel="noopener noreferrer"
123
+ sx={{
124
+ color: "text.primary",
125
+ textDecoration: "underline",
126
+ }}
127
+ >
128
+ Malloy Package Format
129
+ </Box>
130
+ .
131
+ </Typography>
132
+ </Box>
108
133
  <form onSubmit={handleSubmit} id="package-form">
109
- <TextField
110
- autoFocus
111
- required
112
- margin="dense"
113
- id="name"
114
- name="name"
115
- label="Package Name"
116
- type="text"
117
- fullWidth
118
- variant="standard"
119
- />
120
- <TextField
121
- id="description"
122
- name="description"
123
- label="Description"
124
- multiline
125
- fullWidth
126
- rows={4}
127
- variant="standard"
128
- />
129
- <TextField
130
- id="location"
131
- name="location"
132
- label="Location"
133
- type="text"
134
- placeholder="E.g. s3://my-bucket/my-package.zip"
135
- fullWidth
136
- variant="standard"
137
- />
134
+ <Stack spacing={2.5}>
135
+ <TextField
136
+ autoFocus
137
+ required
138
+ id="name"
139
+ name="name"
140
+ label="Package Name"
141
+ type="text"
142
+ fullWidth
143
+ variant="outlined"
144
+ size="small"
145
+ InputLabelProps={{ shrink: true }}
146
+ />
147
+ <TextField
148
+ id="description"
149
+ name="description"
150
+ label="Description"
151
+ multiline
152
+ rows={3}
153
+ fullWidth
154
+ variant="outlined"
155
+ size="small"
156
+ InputLabelProps={{ shrink: true }}
157
+ />
158
+ <TextField
159
+ id="location"
160
+ name="location"
161
+ label="Location"
162
+ type="text"
163
+ placeholder="e.g. s3://my-bucket/my-package.zip"
164
+ fullWidth
165
+ variant="outlined"
166
+ size="small"
167
+ InputLabelProps={{ shrink: true }}
168
+ />
169
+ </Stack>
138
170
  </form>
139
171
  </DialogContent>
140
- <DialogActions>
141
- <Button disabled={addPackage.isPending} onClick={handleClose}>
172
+ <DialogActions sx={{ px: 3, pt: 2, pb: 3, gap: 1 }}>
173
+ <Button
174
+ variant="outlined"
175
+ disabled={addPackage.isPending}
176
+ onClick={() => setOpen(false)}
177
+ >
142
178
  Cancel
143
179
  </Button>
144
180
  <Button
145
181
  type="submit"
146
182
  form="package-form"
183
+ variant="contained"
147
184
  loading={addPackage.isPending}
148
185
  >
149
186
  Save Changes
@@ -156,6 +193,6 @@ export default function AddPackageDialog({
156
193
  onClose={() => setNotificationMessage("")}
157
194
  message={notificationMessage}
158
195
  />
159
- </React.Fragment>
196
+ </>
160
197
  );
161
198
  }
@@ -13,6 +13,7 @@ import { useMutationWithApiError } from "../../hooks/useQueryWithApiError";
13
13
  import { useServer } from "../ServerProvider";
14
14
  import { useQueryClient } from "@tanstack/react-query";
15
15
  import { parseResourceUri } from "../../utils/formatting";
16
+ import { MALLOY_BRAND } from "../styles";
16
17
 
17
18
  export default function DeletePackageDialog({
18
19
  resourceUri,
@@ -90,8 +91,8 @@ export default function DeletePackageDialog({
90
91
  variant="outlined"
91
92
  onClick={handleClose}
92
93
  style={{
93
- borderColor: "#14b3cb",
94
- color: "#14b3cb",
94
+ borderColor: MALLOY_BRAND.teal,
95
+ color: MALLOY_BRAND.teal,
95
96
  }}
96
97
  >
97
98
  Cancel
@@ -1,8 +1,7 @@
1
- import { Box, Grid, Typography } from "@mui/material";
1
+ import { Box, Container, Stack, Typography } from "@mui/material";
2
2
  import { useEffect } from "react";
3
3
  import { parseResourceUri } from "../../utils/formatting";
4
4
  import { useServer } from "../ServerProvider";
5
- import { PackageContainer } from "../styles";
6
5
  import About from "./About";
7
6
  import AddPackageDialog from "./AddPackageDialog";
8
7
  import Packages from "./Packages";
@@ -24,29 +23,51 @@ export default function Environment({
24
23
  }, []);
25
24
 
26
25
  return (
27
- <>
28
- <PackageContainer>
29
- <Box
30
- display="flex"
26
+ <Container
27
+ maxWidth={false}
28
+ sx={{ maxWidth: 1024, mx: "auto", px: 4, py: 3 }}
29
+ >
30
+ <Box sx={{ mb: 5 }}>
31
+ <Typography
32
+ variant="h4"
33
+ component="h1"
34
+ sx={{ fontWeight: 600, letterSpacing: "-0.025em", mb: 0.5 }}
35
+ >
36
+ {environmentName}
37
+ </Typography>
38
+ <Typography variant="body2" color="text.secondary">
39
+ Manage packages in this environment. Open a package to explore
40
+ its models, notebooks, and connections.
41
+ </Typography>
42
+ </Box>
43
+
44
+ <Box sx={{ mb: 5 }}>
45
+ <Stack
46
+ direction="row"
31
47
  justifyContent="space-between"
32
- alignItems="center"
33
- mb={2}
48
+ alignItems="flex-start"
49
+ sx={{ mb: 3 }}
34
50
  >
35
- <Typography variant="h6">{environmentName} packages</Typography>
51
+ <Box>
52
+ <Typography
53
+ variant="h6"
54
+ sx={{ fontWeight: 600, letterSpacing: "-0.025em" }}
55
+ >
56
+ Packages
57
+ </Typography>
58
+ <Typography variant="body2" color="text.secondary">
59
+ Published packages available for use in this environment
60
+ </Typography>
61
+ </Box>
36
62
  {mutable && <AddPackageDialog resourceUri={resourceUri} />}
37
- </Box>
38
- <Grid container spacing={3} columns={12}>
39
- <Grid size={{ xs: 12, md: 12 }}>
40
- <Packages
41
- onSelectPackage={onSelectPackage}
42
- resourceUri={resourceUri}
43
- />
44
- </Grid>
45
- <Grid size={{ xs: 12, md: 12 }}>
46
- <About resourceUri={resourceUri} />
47
- </Grid>
48
- </Grid>
49
- </PackageContainer>
50
- </>
63
+ </Stack>
64
+ <Packages
65
+ onSelectPackage={onSelectPackage}
66
+ resourceUri={resourceUri}
67
+ />
68
+ </Box>
69
+
70
+ <About resourceUri={resourceUri} />
71
+ </Container>
51
72
  );
52
73
  }