@osdk/create-widget 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/README.md +42 -0
  2. package/bin/createWidget.mjs +5 -0
  3. package/build/browser/esm-RYPQIV5S.js +363 -0
  4. package/build/browser/esm-RYPQIV5S.js.map +1 -0
  5. package/build/browser/index.js +432 -0
  6. package/build/browser/index.js.map +1 -0
  7. package/build/esm/cli.d.ts +2 -0
  8. package/build/esm/cli.d.ts.map +1 -0
  9. package/build/esm/cli.test.d.ts +2 -0
  10. package/build/esm/cli.test.d.ts.map +1 -0
  11. package/build/esm/consola.d.ts +3 -0
  12. package/build/esm/consola.d.ts.map +1 -0
  13. package/build/esm/esm-RYPQIV5S.js +363 -0
  14. package/build/esm/esm-RYPQIV5S.js.map +1 -0
  15. package/build/esm/generate/generateFoundryConfigJson.d.ts +6 -0
  16. package/build/esm/generate/generateFoundryConfigJson.d.ts.map +1 -0
  17. package/build/esm/generate/generateFoundryConfigJson.test.d.ts +2 -0
  18. package/build/esm/generate/generateFoundryConfigJson.test.d.ts.map +1 -0
  19. package/build/esm/generate/generateNpmRc.d.ts +5 -0
  20. package/build/esm/generate/generateNpmRc.d.ts.map +1 -0
  21. package/build/esm/generate/generateNpmRc.test.d.ts +2 -0
  22. package/build/esm/generate/generateNpmRc.test.d.ts.map +1 -0
  23. package/build/esm/generatedNoCheck/templates.d.ts +3 -0
  24. package/build/esm/generatedNoCheck/templates.d.ts.map +1 -0
  25. package/build/esm/getPackageFiles.d.ts +5 -0
  26. package/build/esm/getPackageFiles.d.ts.map +1 -0
  27. package/build/esm/highlight.d.ts +3 -0
  28. package/build/esm/highlight.d.ts.map +1 -0
  29. package/build/esm/index.d.ts +5 -0
  30. package/build/esm/index.d.ts.map +1 -0
  31. package/build/esm/index.js +432 -0
  32. package/build/esm/index.js.map +1 -0
  33. package/build/esm/prompts/promptFoundryUrl.d.ts +4 -0
  34. package/build/esm/prompts/promptFoundryUrl.d.ts.map +1 -0
  35. package/build/esm/prompts/promptFoundryUrl.test.d.ts +2 -0
  36. package/build/esm/prompts/promptFoundryUrl.test.d.ts.map +1 -0
  37. package/build/esm/prompts/promptOsdkPackage.d.ts +4 -0
  38. package/build/esm/prompts/promptOsdkPackage.d.ts.map +1 -0
  39. package/build/esm/prompts/promptOsdkPackage.test.d.ts +2 -0
  40. package/build/esm/prompts/promptOsdkPackage.test.d.ts.map +1 -0
  41. package/build/esm/prompts/promptOsdkRegistryUrl.d.ts +4 -0
  42. package/build/esm/prompts/promptOsdkRegistryUrl.d.ts.map +1 -0
  43. package/build/esm/prompts/promptOsdkRegistryUrl.test.d.ts +2 -0
  44. package/build/esm/prompts/promptOsdkRegistryUrl.test.d.ts.map +1 -0
  45. package/build/esm/prompts/promptOverwrite.d.ts +5 -0
  46. package/build/esm/prompts/promptOverwrite.d.ts.map +1 -0
  47. package/build/esm/prompts/promptOverwrite.test.d.ts +2 -0
  48. package/build/esm/prompts/promptOverwrite.test.d.ts.map +1 -0
  49. package/build/esm/prompts/promptProject.d.ts +4 -0
  50. package/build/esm/prompts/promptProject.d.ts.map +1 -0
  51. package/build/esm/prompts/promptProject.test.d.ts +2 -0
  52. package/build/esm/prompts/promptProject.test.d.ts.map +1 -0
  53. package/build/esm/prompts/promptSdkVersion.d.ts +6 -0
  54. package/build/esm/prompts/promptSdkVersion.d.ts.map +1 -0
  55. package/build/esm/prompts/promptTemplate.d.ts +6 -0
  56. package/build/esm/prompts/promptTemplate.d.ts.map +1 -0
  57. package/build/esm/prompts/promptTemplate.test.d.ts +2 -0
  58. package/build/esm/prompts/promptTemplate.test.d.ts.map +1 -0
  59. package/build/esm/prompts/promptWidgetRid.d.ts +4 -0
  60. package/build/esm/prompts/promptWidgetRid.d.ts.map +1 -0
  61. package/build/esm/prompts/promptWidgetRid.test.d.ts +2 -0
  62. package/build/esm/prompts/promptWidgetRid.test.d.ts.map +1 -0
  63. package/build/esm/run.d.ts +14 -0
  64. package/build/esm/run.d.ts.map +1 -0
  65. package/build/esm/templates.d.ts +27 -0
  66. package/build/esm/templates.d.ts.map +1 -0
  67. package/package.json +72 -0
package/README.md ADDED
@@ -0,0 +1,42 @@
1
+ # @osdk/create-widget
2
+
3
+ A CLI for bootstrapping OSDK widgets on top of popular frameworks
4
+
5
+ The CLI may be run directly through npx with `npx @osdk/create-widget@latest` or with the alias `npm create @osdk/widget@latest`. When the NPM package is explicitly installed for example with `npm install -g @osdk/create-widget@latest` the `create-osdk-widget` binary is also available.
6
+
7
+ ## Running locally
8
+
9
+ Run the following commands from the repository root:
10
+
11
+ ```sh
12
+ pnpm install
13
+ pnpm build
14
+ cd packages/create-widget
15
+ ./bin/createWidget.mjs
16
+ ```
17
+
18
+ Changes to templates require updating `examples/` which can be done with the `@osdk/example-generator` package.
19
+
20
+ ## Options
21
+
22
+ The CLI can be run without any arguments and the user will be guided with interactive prompts to fill in required information. The prompts may be skipped by providing the relevant information in through arguments instead.
23
+
24
+ ```
25
+ npx @osdk/create-widget [project] [--<option>]
26
+ ```
27
+
28
+ | Option | Description |
29
+ | ----------------- | ------------------------------------------------------------- |
30
+ | --overwrite | Overwrite project directory if already exists [boolean] |
31
+ | --template | Template name to use [string] |
32
+ | --sdkVersion | The SDK version to use (1.x or 2.x), defaults to 2.x [string] |
33
+ | --foundryUrl | URL for the Foundry stack [string] |
34
+ | --widget | Widget resource identifier (rid) [string] |
35
+ | --osdkPackage | OSDK package name for application [string] |
36
+ | --osdkRegistryUrl | URL for NPM registry to install OSDK package [string] |
37
+
38
+ ## Templates
39
+
40
+ | Template name | Description |
41
+ | ------------- | -------------------------------------------------------------------------- |
42
+ | react | [React](https://react.dev/) with [Vite](https://vitejs.dev/guide/why.html) |
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ // @ts-check
3
+
4
+ import { cli } from "../build/esm/index.js";
5
+ cli();
@@ -0,0 +1,363 @@
1
+ // ../create-widget.template.react.v2/build/esm/generatedNoCheck/index.js
2
+ var files = /* @__PURE__ */ new Map([["README.md.hbs", {
3
+ type: "raw",
4
+ body: `# {{project}}
5
+
6
+ This project was generated with [\`@osdk/create-widget\`](https://www.npmjs.com/package/@osdk/create-widget) and demonstrates developing a custom widget to be embedded within Foundry UIs such as Workshop. It uses the Ontology SDK package \`{{osdkPackage}}\` with React on top of Vite. Check out the [Vite](https://vitejs.dev/guide/) docs for further configuration.
7
+
8
+ ## Developing
9
+
10
+ Run the following command or equivalent with your preferred package manager to start a local development server on \`http://localhost:8080\`:
11
+
12
+ \`\`\`sh
13
+ npm run dev
14
+ \`\`\`
15
+
16
+ Development configuration is stored in \`.env.development\`.
17
+
18
+ ## Deploying
19
+
20
+ Run the following command or equivalent with your preferred package manager to create a production build of your application:
21
+
22
+ \`\`\`sh
23
+ npm run build
24
+ \`\`\`
25
+
26
+ Production configuration is stored in \`.env.production\`.
27
+
28
+ A \`foundry.config.json\` file is included in the root of this project to make deploying to Foundry website hosting with [\`@osdk/cli\`](https://www.npmjs.com/package/@osdk/cli) easier. If you are not using Foundry website hosting for your application you may delete this file.
29
+ `
30
+ }], [".gitignore", {
31
+ type: "raw",
32
+ body: `# Logs
33
+ logs
34
+ *.log
35
+ npm-debug.log*
36
+ yarn-debug.log*
37
+ yarn-error.log*
38
+ pnpm-debug.log*
39
+ lerna-debug.log*
40
+
41
+ node_modules
42
+ dist
43
+ dist-ssr
44
+ *.local
45
+
46
+ # Editor directories and files
47
+ .vscode/*
48
+ !.vscode/extensions.json
49
+ .idea
50
+ .DS_Store
51
+ *.suo
52
+ *.ntvs*
53
+ *.njsproj
54
+ *.sln
55
+ *.sw?
56
+ `
57
+ }], ["eslint.config.mjs", {
58
+ "type": "base64",
59
+ "body": "Ly8gQHRzLWNoZWNrCmltcG9ydCBlc2xpbnQgZnJvbSAiQGVzbGludC9qcyI7CmltcG9ydCB0c1BhcnNlciBmcm9tICJAdHlwZXNjcmlwdC1lc2xpbnQvcGFyc2VyIjsKaW1wb3J0ICogYXMgaW1wb3J0UGx1Z2luIGZyb20gImVzbGludC1wbHVnaW4taW1wb3J0IjsKaW1wb3J0IGpzeEExMXlQbHVnaW4gZnJvbSAiZXNsaW50LXBsdWdpbi1qc3gtYTExeSI7CmltcG9ydCByZWFjdFBsdWdpbiBmcm9tICJlc2xpbnQtcGx1Z2luLXJlYWN0IjsKaW1wb3J0IHJlYWN0SG9va3NQbHVnaW4gZnJvbSAiZXNsaW50LXBsdWdpbi1yZWFjdC1ob29rcyI7CmltcG9ydCByZWFjdFJlZnJlc2ggZnJvbSAiZXNsaW50LXBsdWdpbi1yZWFjdC1yZWZyZXNoIjsKaW1wb3J0IGdsb2JhbHMgZnJvbSAiZ2xvYmFscyI7CmltcG9ydCB0c2VzbGludCBmcm9tICJ0eXBlc2NyaXB0LWVzbGludCI7CgpleHBvcnQgZGVmYXVsdCB0c2VzbGludC5jb25maWcoewogIGZpbGVzOiBbImVzbGludC5jb25maWcubWpzIiwgInNyYy8qKi8qLntqcyxtanMsY2pzLHRzLGpzeCx0c3h9Il0sCiAgc2V0dGluZ3M6IHsKICAgIHJlYWN0OiB7CiAgICAgIHZlcnNpb246ICJkZXRlY3QiLAogICAgfSwKCiAgICAiaW1wb3J0L3Jlc29sdmVyIjogewogICAgICBub2RlOiB7CiAgICAgICAgZXh0ZW5zaW9uczogWyIuanMiLCAiLmpzeCIsICIudHMiLCAiLnRzeCJdLAogICAgICB9LAogICAgfSwKICB9LAogIGxhbmd1YWdlT3B0aW9uczogewogICAgZ2xvYmFsczogewogICAgICAuLi5nbG9iYWxzLmJyb3dzZXIsCiAgICB9LAoKICAgIHBhcnNlcjogdHNQYXJzZXIsCiAgfSwKICBleHRlbmRzOiBbCiAgICBlc2xpbnQuY29uZmlncy5yZWNvbW1lbmRlZCwKICAgIC4uLnRzZXNsaW50LmNvbmZpZ3MucmVjb21tZW5kZWQsCiAgXSwKICBwbHVnaW5zOiB7CiAgICAicmVhY3QiOiAvKiogQHR5cGUgaW1wb3J0KCJlc2xpbnQiKS5FU0xpbnQuUGx1Z2luICovIChyZWFjdFBsdWdpbiksCiAgICAicmVhY3QtcmVmcmVzaCI6IHJlYWN0UmVmcmVzaCwKICAgICJyZWFjdC1ob29rcyI6CiAgICAgIC8qKiBAdHlwZSBpbXBvcnQoImVzbGludCIpLkVTTGludC5QbHVnaW4gKi8gKHJlYWN0SG9va3NQbHVnaW4pLAogICAgImpzeC1hMTF5IjoganN4QTExeVBsdWdpbiwKICAgICJpbXBvcnQiOiBpbXBvcnRQbHVnaW4sCiAgfSwKICBydWxlczogewogICAgLi4uKAogICAgICAvKiogQHR5cGUgaW1wb3J0KCJlc2xpbnQiKS5MaW50ZXIuUnVsZXNSZWNvcmQgKi8KICAgICAgKHJlYWN0UGx1Z2luLmNvbmZpZ3MuZmxhdD8ucmVjb21tZW5kZWQucnVsZXMpCiAgICApLAogICAgInJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzIjogImVycm9yIiwKICAgICJyZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHMiOiAid2FybiIsCiAgICAuLi5qc3hBMTF5UGx1Z2luLmNvbmZpZ3MucmVjb21tZW5kZWQucnVsZXMsCiAgICAicmVhY3QtcmVmcmVzaC9vbmx5LWV4cG9ydC1jb21wb25lbnRzIjogWyJ3YXJuIiwgewogICAgICBhbGxvd0NvbnN0YW50RXhwb3J0OiB0cnVlLAogICAgfV0sCgogICAgImltcG9ydC9uYW1lZCI6ICJlcnJvciIsCiAgICAiaW1wb3J0L2RlZmF1bHQiOiAiZXJyb3IiLAogICAgImltcG9ydC9uYW1lc3BhY2UiOiAiZXJyb3IiLAogICAgImltcG9ydC9uby1kdXBsaWNhdGVzIjogImVycm9yIiwKICAgICJpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMiOiAiZXJyb3IiLAoKICAgICJyZWFjdC9yZWFjdC1pbi1qc3gtc2NvcGUiOiAib2ZmIiwKICB9LAp9KTsK"
60
+ }], ["index.html", {
61
+ type: "raw",
62
+ body: `<!doctype html>
63
+ <html lang="en">
64
+ <head>
65
+ <meta charset="UTF-8" />
66
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
67
+ <title>Widget: Ontology SDK + React</title>
68
+ </head>
69
+ <body>
70
+ <script type="module" src="/src/main.tsx"></script>
71
+ </body>
72
+ </html>
73
+ `
74
+ }], ["package.json.hbs", {
75
+ type: "raw",
76
+ body: `{
77
+ "name": "{{project}}",
78
+ "private": true,
79
+ "version": "0.0.0",
80
+ "type": "module",
81
+ "scripts": {
82
+ "dev": "vite",
83
+ "build": "tsc && vite build",
84
+ "lint": "eslint . --report-unused-disable-directives --max-warnings 0",
85
+ "test": "vitest run",
86
+ "preview": "vite preview"
87
+ },
88
+ "dependencies": {
89
+ "{{osdkPackage}}": "latest",
90
+ "@osdk/client": "workspace:~",
91
+ "@osdk/widget-client-react.unstable": "workspace:~",
92
+ "@osdk/widget-client.unstable": "workspace:~",
93
+ "@radix-ui/react-icons": "^1.3.1",
94
+ "@radix-ui/themes": "^3.1.4",
95
+ "react": "^18",
96
+ "react-dom": "^18",
97
+ "react-router-dom": "^6.23.1"
98
+ },
99
+ "devDependencies": {
100
+ "@eslint/compat": "^1.2.1",
101
+ "@eslint/js": "^9.13.0",
102
+ "@osdk/widget-manifest-vite-plugin": "workspace:~",
103
+ "@types/react": "^18",
104
+ "@types/react-dom": "^18",
105
+ "@typescript-eslint/eslint-plugin": "^8.11.0",
106
+ "@typescript-eslint/parser": "^8.11.0",
107
+ "@vitejs/plugin-react": "^4.2.0",
108
+ "eslint": "^9.13.0",
109
+ "eslint-plugin-import": "^2.31.0",
110
+ "eslint-plugin-jsx-a11y": "^6.10.1",
111
+ "eslint-plugin-react": "^7.37.2",
112
+ "eslint-plugin-react-hooks": "^5.0.0",
113
+ "eslint-plugin-react-refresh": "^0.4.14",
114
+ "globals": "^15.11.0",
115
+ "typescript": "~5.5.4",
116
+ "typescript-eslint": "^8.11.0",
117
+ "vite": "^5.4.8",
118
+ "vitest": "^2.1.2"
119
+ }
120
+ }`
121
+ }], ["src/context.ts", {
122
+ "type": "base64",
123
+ "body": "aW1wb3J0IHsgdXNlRm91bmRyeVdpZGdldENvbnRleHQgfSBmcm9tICJAb3Nkay93aWRnZXQtY2xpZW50LXJlYWN0LnVuc3RhYmxlIjsKaW1wb3J0IHR5cGUgTWFpbkNvbmZpZyBmcm9tICIuL21haW4uY29uZmlnLmpzIjsKCmV4cG9ydCBjb25zdCB1c2VXaWRnZXRDb250ZXh0ID0gdXNlRm91bmRyeVdpZGdldENvbnRleHQud2l0aFR5cGVzPAogIHR5cGVvZiBNYWluQ29uZmlnCj4oKTsK"
124
+ }], ["src/main.config.ts.hbs", {
125
+ type: "raw",
126
+ body: `import { defineConfig } from "@osdk/widget-client.unstable";
127
+
128
+ export default defineConfig({
129
+ type: "workshop",
130
+ rid: "{{widgetRid}}",
131
+ parameters: {
132
+ headerText: {
133
+ displayName: "Widget title",
134
+ type: "string",
135
+ },
136
+ todoItems: {
137
+ displayName: "Todo items",
138
+ type: "array",
139
+ subType: "string",
140
+ },
141
+ },
142
+ events: {
143
+ updateHeader: {
144
+ displayName: "Update header",
145
+ parameterUpdateIds: ["headerText"],
146
+ },
147
+ updateTodoItems: {
148
+ displayName: "Update todo items",
149
+ parameterUpdateIds: ["todoItems"],
150
+ },
151
+ },
152
+ });
153
+ `
154
+ }], ["src/main.css", {
155
+ "type": "base64",
156
+ "body": ""
157
+ }], ["src/main.tsx", {
158
+ type: "raw",
159
+ body: `import "@radix-ui/themes/styles.css";
160
+ import "./main.css";
161
+
162
+ import { FoundryWidget } from "@osdk/widget-client-react.unstable";
163
+ import { Theme } from "@radix-ui/themes";
164
+ import { createRoot } from "react-dom/client";
165
+ import MainConfig from "./main.config.js";
166
+ import { App } from "./widget.js";
167
+
168
+ const root = document.querySelector("body")!;
169
+
170
+ createRoot(root).render(
171
+ <Theme>
172
+ <FoundryWidget config={MainConfig}>
173
+ <App />
174
+ </FoundryWidget>
175
+ </Theme>,
176
+ );
177
+ `
178
+ }], ["src/vite-env.d.ts", {
179
+ "type": "base64",
180
+ "body": "Ly8vIDxyZWZlcmVuY2UgdHlwZXM9InZpdGUvY2xpZW50IiAvPgo="
181
+ }], ["src/widget.tsx.hbs", {
182
+ type: "raw",
183
+ body: `import { $Actions, $Objects, $Queries } from "{{osdkPackage}}";
184
+ import {
185
+ Box,
186
+ Button,
187
+ Checkbox,
188
+ Container,
189
+ Flex,
190
+ Heading,
191
+ Skeleton,
192
+ Table,
193
+ Text,
194
+ TextField,
195
+ } from "@radix-ui/themes";
196
+ import React, { useCallback, useState } from "react";
197
+ import { useWidgetContext } from "./context.js";
198
+
199
+ export const App: React.FC = () => {
200
+ const { parameters, emitEvent } = useWidgetContext();
201
+ const { headerText, todoItems } = parameters.values;
202
+ const [newTodoItem, setNewTodoItem] = useState("");
203
+
204
+ const handleAddTodoItem = useCallback(() => {
205
+ emitEvent("updateTodoItems", {
206
+ parameterUpdates: {
207
+ todoItems: [...(todoItems ?? []), newTodoItem],
208
+ },
209
+ });
210
+ setNewTodoItem("");
211
+ }, [emitEvent, newTodoItem, todoItems]);
212
+
213
+ const handleNewTodoItemChange = useCallback(
214
+ (event: React.ChangeEvent<HTMLInputElement>) => {
215
+ setNewTodoItem(event.target.value);
216
+ },
217
+ []
218
+ );
219
+
220
+ const objectApiNames = Object.keys($Objects);
221
+ const actionApiNames = Object.keys($Actions);
222
+ const queryApiNames = Object.keys($Queries);
223
+
224
+ return (
225
+ <Box>
226
+ <Container size="1">
227
+ <Flex direction="column" gap="4">
228
+ <Flex p="5" direction="column" gap="2">
229
+ <Heading size="4">
230
+ {parameters.state === "loading"
231
+ || parameters.state === "not-started"
232
+ ? <Skeleton>Hello, world!</Skeleton>
233
+ : headerText ?? "{{project}}"}
234
+ </Heading>
235
+
236
+ <Table.Root>
237
+ <Table.Header>
238
+ <Table.Row>
239
+ <Table.ColumnHeaderCell>Finished</Table.ColumnHeaderCell>
240
+ <Table.ColumnHeaderCell>Item</Table.ColumnHeaderCell>
241
+ </Table.Row>
242
+ </Table.Header>
243
+
244
+ <Table.Body>
245
+ {(parameters.state === "loading"
246
+ || parameters.state === "not-started") && (
247
+ <>
248
+ <Table.Row>
249
+ <Table.Cell>
250
+ <Skeleton>
251
+ <Checkbox />
252
+ </Skeleton>
253
+ </Table.Cell>
254
+ <Table.Cell>
255
+ <Skeleton>Loading cell</Skeleton>
256
+ </Table.Cell>
257
+ </Table.Row>
258
+ <Table.Row>
259
+ <Table.Cell>
260
+ <Skeleton>
261
+ <Checkbox />
262
+ </Skeleton>
263
+ </Table.Cell>
264
+ <Table.Cell>
265
+ <Skeleton>Loading cell</Skeleton>
266
+ </Table.Cell>
267
+ </Table.Row>
268
+ </>
269
+ )}
270
+ {parameters.state === "loaded"
271
+ && todoItems?.map((item, index) => (
272
+ <Table.Row key={index}>
273
+ <Table.Cell>
274
+ <Checkbox />
275
+ </Table.Cell>
276
+ <Table.Cell>{item}</Table.Cell>
277
+ </Table.Row>
278
+ ))}
279
+ {parameters.state === "loaded"
280
+ && (todoItems ?? []).length === 0 && (
281
+ <Table.Row>
282
+ <Table.Cell colSpan={2}>No items yet</Table.Cell>
283
+ </Table.Row>
284
+ )}
285
+ <Table.Row>
286
+ <Table.Cell colSpan={2}>
287
+ <Flex gap="2">
288
+ <TextField.Root
289
+ value={newTodoItem}
290
+ onChange={handleNewTodoItemChange}
291
+ size="2"
292
+ placeholder="Add item\u2026"
293
+ />
294
+ <Button onClick={handleAddTodoItem}>Add item</Button>
295
+ </Flex>
296
+ </Table.Cell>
297
+ </Table.Row>
298
+ </Table.Body>
299
+ </Table.Root>
300
+
301
+ </Flex>
302
+ <Box>
303
+ <Flex direction="column" gap="2">
304
+ <Text>
305
+ Try and of the following methods from your Ontology SDK
306
+ </Text>
307
+ <Flex direction="column" gap="1">
308
+ <Heading size="4">Objects ({objectApiNames.length})</Heading>
309
+ <pre>
310
+ {objectApiNames.map((objectApiName) => (
311
+ <div key={objectApiName}>client({objectApiName})</div>
312
+ ))}
313
+ </pre>
314
+ </Flex>
315
+ <Flex direction="column" gap="1">
316
+ <Heading size="4">Actions ({actionApiNames.length})</Heading>
317
+ <pre>
318
+ {actionApiNames.map((actionApiName) => (
319
+ <div key={actionApiName}>client({actionApiName})</div>
320
+ ))}
321
+ </pre>
322
+ </Flex>
323
+ <Flex direction="column" gap="1">
324
+ <Heading size="4">Queries ({queryApiNames.length})</Heading>
325
+ <pre>
326
+ {queryApiNames.map((queryApiName) => (
327
+ <div key={queryApiName}>client({queryApiName})</div>
328
+ ))}
329
+ </pre>
330
+ </Flex>
331
+ </Flex>
332
+ </Box>
333
+ </Flex>
334
+ </Container>
335
+ </Box>
336
+ );
337
+ };
338
+ `
339
+ }], ["tsconfig.json", {
340
+ "type": "base64",
341
+ "body": "ewogICJjb21waWxlck9wdGlvbnMiOiB7CiAgICAidGFyZ2V0IjogIkVTMjAyMCIsCiAgICAidXNlRGVmaW5lRm9yQ2xhc3NGaWVsZHMiOiB0cnVlLAogICAgImxpYiI6IFsiRVMyMDIwIiwgIkRPTSIsICJET00uSXRlcmFibGUiXSwKICAgICJtb2R1bGUiOiAiRVNOZXh0IiwKICAgICJza2lwTGliQ2hlY2siOiB0cnVlLAoKICAgIC8qIEJ1bmRsZXIgbW9kZSAqLwogICAgIm1vZHVsZVJlc29sdXRpb24iOiAiYnVuZGxlciIsCiAgICAiYWxsb3dJbXBvcnRpbmdUc0V4dGVuc2lvbnMiOiB0cnVlLAogICAgInJlc29sdmVKc29uTW9kdWxlIjogdHJ1ZSwKICAgICJpc29sYXRlZE1vZHVsZXMiOiB0cnVlLAogICAgIm5vRW1pdCI6IHRydWUsCiAgICAianN4IjogInJlYWN0LWpzeCIsCgogICAgLyogTGludGluZyAqLwogICAgInN0cmljdCI6IHRydWUsCiAgICAibm9VbnVzZWRMb2NhbHMiOiB0cnVlLAogICAgIm5vVW51c2VkUGFyYW1ldGVycyI6IHRydWUsCiAgICAibm9GYWxsdGhyb3VnaENhc2VzSW5Td2l0Y2giOiB0cnVlCiAgfSwKICAiaW5jbHVkZSI6IFsic3JjIl0sCiAgInJlZmVyZW5jZXMiOiBbeyAicGF0aCI6ICIuL3RzY29uZmlnLm5vZGUuanNvbiIgfV0KfQo="
342
+ }], ["tsconfig.node.json", {
343
+ "type": "base64",
344
+ "body": "ewogICJjb21waWxlck9wdGlvbnMiOiB7CiAgICAiY29tcG9zaXRlIjogdHJ1ZSwKICAgICJza2lwTGliQ2hlY2siOiB0cnVlLAogICAgIm1vZHVsZSI6ICJFU05leHQiLAogICAgIm1vZHVsZVJlc29sdXRpb24iOiAiYnVuZGxlciIsCiAgICAiYWxsb3dTeW50aGV0aWNEZWZhdWx0SW1wb3J0cyI6IHRydWUKICB9LAogICJpbmNsdWRlIjogWyJ2aXRlLmNvbmZpZy50cyJdCn0K"
345
+ }], ["vite.config.ts.hbs", {
346
+ type: "raw",
347
+ body: `import widgetManifestPlugin from "@osdk/widget-manifest-vite-plugin";
348
+ import react from "@vitejs/plugin-react";
349
+ import { defineConfig } from "vite";
350
+
351
+ // https://vitejs.dev/config/
352
+ export default defineConfig({
353
+ plugins: [react(), widgetManifestPlugin()],
354
+ server: {
355
+ port: 8080,
356
+ },
357
+ });
358
+ `
359
+ }]]);
360
+
361
+ export { files };
362
+ //# sourceMappingURL=esm-RYPQIV5S.js.map
363
+ //# sourceMappingURL=esm-RYPQIV5S.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../create-widget.template.react.v2/build/esm/generatedNoCheck/index.js"],"names":[],"mappings":"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","file":"esm-RYPQIV5S.js","sourcesContent":["export const files = new Map([[\"README.md.hbs\", {\n type: \"raw\",\n body: `# {{project}}\n\nThis project was generated with [\\`@osdk/create-widget\\`](https://www.npmjs.com/package/@osdk/create-widget) and demonstrates developing a custom widget to be embedded within Foundry UIs such as Workshop. It uses the Ontology SDK package \\`{{osdkPackage}}\\` with React on top of Vite. Check out the [Vite](https://vitejs.dev/guide/) docs for further configuration.\n\n## Developing\n\nRun the following command or equivalent with your preferred package manager to start a local development server on \\`http://localhost:8080\\`:\n\n\\`\\`\\`sh\nnpm run dev\n\\`\\`\\`\n\nDevelopment configuration is stored in \\`.env.development\\`.\n\n## Deploying\n\nRun the following command or equivalent with your preferred package manager to create a production build of your application:\n\n\\`\\`\\`sh\nnpm run build\n\\`\\`\\`\n\nProduction configuration is stored in \\`.env.production\\`.\n\nA \\`foundry.config.json\\` file is included in the root of this project to make deploying to Foundry website hosting with [\\`@osdk/cli\\`](https://www.npmjs.com/package/@osdk/cli) easier. If you are not using Foundry website hosting for your application you may delete this file.\n`\n}], [\".gitignore\", {\n type: \"raw\",\n body: `# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndist-ssr\n*.local\n\n# Editor directories and files\n.vscode/*\n!.vscode/extensions.json\n.idea\n.DS_Store\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?\n`\n}], [\"eslint.config.mjs\", {\n \"type\": \"base64\",\n \"body\": \"Ly8gQHRzLWNoZWNrCmltcG9ydCBlc2xpbnQgZnJvbSAiQGVzbGludC9qcyI7CmltcG9ydCB0c1BhcnNlciBmcm9tICJAdHlwZXNjcmlwdC1lc2xpbnQvcGFyc2VyIjsKaW1wb3J0ICogYXMgaW1wb3J0UGx1Z2luIGZyb20gImVzbGludC1wbHVnaW4taW1wb3J0IjsKaW1wb3J0IGpzeEExMXlQbHVnaW4gZnJvbSAiZXNsaW50LXBsdWdpbi1qc3gtYTExeSI7CmltcG9ydCByZWFjdFBsdWdpbiBmcm9tICJlc2xpbnQtcGx1Z2luLXJlYWN0IjsKaW1wb3J0IHJlYWN0SG9va3NQbHVnaW4gZnJvbSAiZXNsaW50LXBsdWdpbi1yZWFjdC1ob29rcyI7CmltcG9ydCByZWFjdFJlZnJlc2ggZnJvbSAiZXNsaW50LXBsdWdpbi1yZWFjdC1yZWZyZXNoIjsKaW1wb3J0IGdsb2JhbHMgZnJvbSAiZ2xvYmFscyI7CmltcG9ydCB0c2VzbGludCBmcm9tICJ0eXBlc2NyaXB0LWVzbGludCI7CgpleHBvcnQgZGVmYXVsdCB0c2VzbGludC5jb25maWcoewogIGZpbGVzOiBbImVzbGludC5jb25maWcubWpzIiwgInNyYy8qKi8qLntqcyxtanMsY2pzLHRzLGpzeCx0c3h9Il0sCiAgc2V0dGluZ3M6IHsKICAgIHJlYWN0OiB7CiAgICAgIHZlcnNpb246ICJkZXRlY3QiLAogICAgfSwKCiAgICAiaW1wb3J0L3Jlc29sdmVyIjogewogICAgICBub2RlOiB7CiAgICAgICAgZXh0ZW5zaW9uczogWyIuanMiLCAiLmpzeCIsICIudHMiLCAiLnRzeCJdLAogICAgICB9LAogICAgfSwKICB9LAogIGxhbmd1YWdlT3B0aW9uczogewogICAgZ2xvYmFsczogewogICAgICAuLi5nbG9iYWxzLmJyb3dzZXIsCiAgICB9LAoKICAgIHBhcnNlcjogdHNQYXJzZXIsCiAgfSwKICBleHRlbmRzOiBbCiAgICBlc2xpbnQuY29uZmlncy5yZWNvbW1lbmRlZCwKICAgIC4uLnRzZXNsaW50LmNvbmZpZ3MucmVjb21tZW5kZWQsCiAgXSwKICBwbHVnaW5zOiB7CiAgICAicmVhY3QiOiAvKiogQHR5cGUgaW1wb3J0KCJlc2xpbnQiKS5FU0xpbnQuUGx1Z2luICovIChyZWFjdFBsdWdpbiksCiAgICAicmVhY3QtcmVmcmVzaCI6IHJlYWN0UmVmcmVzaCwKICAgICJyZWFjdC1ob29rcyI6CiAgICAgIC8qKiBAdHlwZSBpbXBvcnQoImVzbGludCIpLkVTTGludC5QbHVnaW4gKi8gKHJlYWN0SG9va3NQbHVnaW4pLAogICAgImpzeC1hMTF5IjoganN4QTExeVBsdWdpbiwKICAgICJpbXBvcnQiOiBpbXBvcnRQbHVnaW4sCiAgfSwKICBydWxlczogewogICAgLi4uKAogICAgICAvKiogQHR5cGUgaW1wb3J0KCJlc2xpbnQiKS5MaW50ZXIuUnVsZXNSZWNvcmQgKi8KICAgICAgKHJlYWN0UGx1Z2luLmNvbmZpZ3MuZmxhdD8ucmVjb21tZW5kZWQucnVsZXMpCiAgICApLAogICAgInJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzIjogImVycm9yIiwKICAgICJyZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHMiOiAid2FybiIsCiAgICAuLi5qc3hBMTF5UGx1Z2luLmNvbmZpZ3MucmVjb21tZW5kZWQucnVsZXMsCiAgICAicmVhY3QtcmVmcmVzaC9vbmx5LWV4cG9ydC1jb21wb25lbnRzIjogWyJ3YXJuIiwgewogICAgICBhbGxvd0NvbnN0YW50RXhwb3J0OiB0cnVlLAogICAgfV0sCgogICAgImltcG9ydC9uYW1lZCI6ICJlcnJvciIsCiAgICAiaW1wb3J0L2RlZmF1bHQiOiAiZXJyb3IiLAogICAgImltcG9ydC9uYW1lc3BhY2UiOiAiZXJyb3IiLAogICAgImltcG9ydC9uby1kdXBsaWNhdGVzIjogImVycm9yIiwKICAgICJpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMiOiAiZXJyb3IiLAoKICAgICJyZWFjdC9yZWFjdC1pbi1qc3gtc2NvcGUiOiAib2ZmIiwKICB9LAp9KTsK\"\n}], [\"index.html\", {\n type: \"raw\",\n body: `<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>Widget: Ontology SDK + React</title>\n </head>\n <body>\n <script type=\"module\" src=\"/src/main.tsx\"></script>\n </body>\n</html>\n`\n}], [\"package.json.hbs\", {\n type: \"raw\",\n body: `{\n \"name\": \"{{project}}\",\n \"private\": true,\n \"version\": \"0.0.0\",\n \"type\": \"module\",\n \"scripts\": {\n \"dev\": \"vite\",\n \"build\": \"tsc && vite build\",\n \"lint\": \"eslint . --report-unused-disable-directives --max-warnings 0\",\n \"test\": \"vitest run\",\n \"preview\": \"vite preview\"\n },\n \"dependencies\": {\n \"{{osdkPackage}}\": \"latest\",\n \"@osdk/client\": \"workspace:~\",\n \"@osdk/widget-client-react.unstable\": \"workspace:~\",\n \"@osdk/widget-client.unstable\": \"workspace:~\",\n \"@radix-ui/react-icons\": \"^1.3.1\",\n \"@radix-ui/themes\": \"^3.1.4\",\n \"react\": \"^18\",\n \"react-dom\": \"^18\",\n \"react-router-dom\": \"^6.23.1\"\n },\n \"devDependencies\": {\n \"@eslint/compat\": \"^1.2.1\",\n \"@eslint/js\": \"^9.13.0\",\n \"@osdk/widget-manifest-vite-plugin\": \"workspace:~\",\n \"@types/react\": \"^18\",\n \"@types/react-dom\": \"^18\",\n \"@typescript-eslint/eslint-plugin\": \"^8.11.0\",\n \"@typescript-eslint/parser\": \"^8.11.0\",\n \"@vitejs/plugin-react\": \"^4.2.0\",\n \"eslint\": \"^9.13.0\",\n \"eslint-plugin-import\": \"^2.31.0\",\n \"eslint-plugin-jsx-a11y\": \"^6.10.1\",\n \"eslint-plugin-react\": \"^7.37.2\",\n \"eslint-plugin-react-hooks\": \"^5.0.0\",\n \"eslint-plugin-react-refresh\": \"^0.4.14\",\n \"globals\": \"^15.11.0\",\n \"typescript\": \"~5.5.4\",\n \"typescript-eslint\": \"^8.11.0\",\n \"vite\": \"^5.4.8\",\n \"vitest\": \"^2.1.2\"\n }\n}`\n}], [\"src/context.ts\", {\n \"type\": \"base64\",\n \"body\": \"aW1wb3J0IHsgdXNlRm91bmRyeVdpZGdldENvbnRleHQgfSBmcm9tICJAb3Nkay93aWRnZXQtY2xpZW50LXJlYWN0LnVuc3RhYmxlIjsKaW1wb3J0IHR5cGUgTWFpbkNvbmZpZyBmcm9tICIuL21haW4uY29uZmlnLmpzIjsKCmV4cG9ydCBjb25zdCB1c2VXaWRnZXRDb250ZXh0ID0gdXNlRm91bmRyeVdpZGdldENvbnRleHQud2l0aFR5cGVzPAogIHR5cGVvZiBNYWluQ29uZmlnCj4oKTsK\"\n}], [\"src/main.config.ts.hbs\", {\n type: \"raw\",\n body: `import { defineConfig } from \"@osdk/widget-client.unstable\";\n\nexport default defineConfig({\n type: \"workshop\",\n rid: \"{{widgetRid}}\",\n parameters: {\n headerText: {\n displayName: \"Widget title\",\n type: \"string\",\n },\n todoItems: {\n displayName: \"Todo items\",\n type: \"array\",\n subType: \"string\",\n },\n },\n events: {\n updateHeader: {\n displayName: \"Update header\",\n parameterUpdateIds: [\"headerText\"],\n },\n updateTodoItems: {\n displayName: \"Update todo items\",\n parameterUpdateIds: [\"todoItems\"],\n },\n },\n});\n`\n}], [\"src/main.css\", {\n \"type\": \"base64\",\n \"body\": \"\"\n}], [\"src/main.tsx\", {\n type: \"raw\",\n body: `import \"@radix-ui/themes/styles.css\";\nimport \"./main.css\";\n\nimport { FoundryWidget } from \"@osdk/widget-client-react.unstable\";\nimport { Theme } from \"@radix-ui/themes\";\nimport { createRoot } from \"react-dom/client\";\nimport MainConfig from \"./main.config.js\";\nimport { App } from \"./widget.js\";\n\nconst root = document.querySelector(\"body\")!;\n\ncreateRoot(root).render(\n <Theme>\n <FoundryWidget config={MainConfig}>\n <App />\n </FoundryWidget>\n </Theme>,\n);\n`\n}], [\"src/vite-env.d.ts\", {\n \"type\": \"base64\",\n \"body\": \"Ly8vIDxyZWZlcmVuY2UgdHlwZXM9InZpdGUvY2xpZW50IiAvPgo=\"\n}], [\"src/widget.tsx.hbs\", {\n type: \"raw\",\n body: `import { \\$Actions, \\$Objects, \\$Queries } from \"{{osdkPackage}}\";\nimport {\n Box,\n Button,\n Checkbox,\n Container,\n Flex,\n Heading,\n Skeleton,\n Table,\n Text,\n TextField,\n} from \"@radix-ui/themes\";\nimport React, { useCallback, useState } from \"react\";\nimport { useWidgetContext } from \"./context.js\";\n\nexport const App: React.FC = () => {\n const { parameters, emitEvent } = useWidgetContext();\n const { headerText, todoItems } = parameters.values;\n const [newTodoItem, setNewTodoItem] = useState(\"\");\n\n const handleAddTodoItem = useCallback(() => {\n emitEvent(\"updateTodoItems\", {\n parameterUpdates: {\n todoItems: [...(todoItems ?? []), newTodoItem],\n },\n });\n setNewTodoItem(\"\");\n }, [emitEvent, newTodoItem, todoItems]);\n\n const handleNewTodoItemChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n setNewTodoItem(event.target.value);\n },\n []\n );\n\n const objectApiNames = Object.keys(\\$Objects);\n const actionApiNames = Object.keys(\\$Actions);\n const queryApiNames = Object.keys(\\$Queries);\n\n return (\n <Box>\n <Container size=\"1\">\n <Flex direction=\"column\" gap=\"4\">\n <Flex p=\"5\" direction=\"column\" gap=\"2\">\n <Heading size=\"4\">\n {parameters.state === \"loading\"\n || parameters.state === \"not-started\"\n ? <Skeleton>Hello, world!</Skeleton>\n : headerText ?? \"{{project}}\"}\n </Heading>\n\n <Table.Root>\n <Table.Header>\n <Table.Row>\n <Table.ColumnHeaderCell>Finished</Table.ColumnHeaderCell>\n <Table.ColumnHeaderCell>Item</Table.ColumnHeaderCell>\n </Table.Row>\n </Table.Header>\n\n <Table.Body>\n {(parameters.state === \"loading\"\n || parameters.state === \"not-started\") && (\n <>\n <Table.Row>\n <Table.Cell>\n <Skeleton>\n <Checkbox />\n </Skeleton>\n </Table.Cell>\n <Table.Cell>\n <Skeleton>Loading cell</Skeleton>\n </Table.Cell>\n </Table.Row>\n <Table.Row>\n <Table.Cell>\n <Skeleton>\n <Checkbox />\n </Skeleton>\n </Table.Cell>\n <Table.Cell>\n <Skeleton>Loading cell</Skeleton>\n </Table.Cell>\n </Table.Row>\n </>\n )}\n {parameters.state === \"loaded\"\n && todoItems?.map((item, index) => (\n <Table.Row key={index}>\n <Table.Cell>\n <Checkbox />\n </Table.Cell>\n <Table.Cell>{item}</Table.Cell>\n </Table.Row>\n ))}\n {parameters.state === \"loaded\"\n && (todoItems ?? []).length === 0 && (\n <Table.Row>\n <Table.Cell colSpan={2}>No items yet</Table.Cell>\n </Table.Row>\n )}\n <Table.Row>\n <Table.Cell colSpan={2}>\n <Flex gap=\"2\">\n <TextField.Root\n value={newTodoItem}\n onChange={handleNewTodoItemChange}\n size=\"2\"\n placeholder=\"Add item…\"\n />\n <Button onClick={handleAddTodoItem}>Add item</Button>\n </Flex>\n </Table.Cell>\n </Table.Row>\n </Table.Body>\n </Table.Root>\n\n </Flex>\n <Box>\n <Flex direction=\"column\" gap=\"2\">\n <Text>\n Try and of the following methods from your Ontology SDK\n </Text>\n <Flex direction=\"column\" gap=\"1\">\n <Heading size=\"4\">Objects ({objectApiNames.length})</Heading>\n <pre>\n {objectApiNames.map((objectApiName) => (\n <div key={objectApiName}>client({objectApiName})</div>\n ))}\n </pre>\n </Flex>\n <Flex direction=\"column\" gap=\"1\">\n <Heading size=\"4\">Actions ({actionApiNames.length})</Heading>\n <pre>\n {actionApiNames.map((actionApiName) => (\n <div key={actionApiName}>client({actionApiName})</div>\n ))}\n </pre>\n </Flex>\n <Flex direction=\"column\" gap=\"1\">\n <Heading size=\"4\">Queries ({queryApiNames.length})</Heading>\n <pre>\n {queryApiNames.map((queryApiName) => (\n <div key={queryApiName}>client({queryApiName})</div>\n ))}\n </pre>\n </Flex>\n </Flex>\n </Box>\n </Flex>\n </Container>\n </Box>\n );\n};\n`\n}], [\"tsconfig.json\", {\n \"type\": \"base64\",\n \"body\": \"ewogICJjb21waWxlck9wdGlvbnMiOiB7CiAgICAidGFyZ2V0IjogIkVTMjAyMCIsCiAgICAidXNlRGVmaW5lRm9yQ2xhc3NGaWVsZHMiOiB0cnVlLAogICAgImxpYiI6IFsiRVMyMDIwIiwgIkRPTSIsICJET00uSXRlcmFibGUiXSwKICAgICJtb2R1bGUiOiAiRVNOZXh0IiwKICAgICJza2lwTGliQ2hlY2siOiB0cnVlLAoKICAgIC8qIEJ1bmRsZXIgbW9kZSAqLwogICAgIm1vZHVsZVJlc29sdXRpb24iOiAiYnVuZGxlciIsCiAgICAiYWxsb3dJbXBvcnRpbmdUc0V4dGVuc2lvbnMiOiB0cnVlLAogICAgInJlc29sdmVKc29uTW9kdWxlIjogdHJ1ZSwKICAgICJpc29sYXRlZE1vZHVsZXMiOiB0cnVlLAogICAgIm5vRW1pdCI6IHRydWUsCiAgICAianN4IjogInJlYWN0LWpzeCIsCgogICAgLyogTGludGluZyAqLwogICAgInN0cmljdCI6IHRydWUsCiAgICAibm9VbnVzZWRMb2NhbHMiOiB0cnVlLAogICAgIm5vVW51c2VkUGFyYW1ldGVycyI6IHRydWUsCiAgICAibm9GYWxsdGhyb3VnaENhc2VzSW5Td2l0Y2giOiB0cnVlCiAgfSwKICAiaW5jbHVkZSI6IFsic3JjIl0sCiAgInJlZmVyZW5jZXMiOiBbeyAicGF0aCI6ICIuL3RzY29uZmlnLm5vZGUuanNvbiIgfV0KfQo=\"\n}], [\"tsconfig.node.json\", {\n \"type\": \"base64\",\n \"body\": \"ewogICJjb21waWxlck9wdGlvbnMiOiB7CiAgICAiY29tcG9zaXRlIjogdHJ1ZSwKICAgICJza2lwTGliQ2hlY2siOiB0cnVlLAogICAgIm1vZHVsZSI6ICJFU05leHQiLAogICAgIm1vZHVsZVJlc29sdXRpb24iOiAiYnVuZGxlciIsCiAgICAiYWxsb3dTeW50aGV0aWNEZWZhdWx0SW1wb3J0cyI6IHRydWUKICB9LAogICJpbmNsdWRlIjogWyJ2aXRlLmNvbmZpZy50cyJdCn0K\"\n}], [\"vite.config.ts.hbs\", {\n type: \"raw\",\n body: `import widgetManifestPlugin from \"@osdk/widget-manifest-vite-plugin\";\nimport react from \"@vitejs/plugin-react\";\nimport { defineConfig } from \"vite\";\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n plugins: [react(), widgetManifestPlugin()],\n server: {\n port: 8080,\n },\n});\n`\n}]]);"]}