gwchq-textjam 0.1.3 → 0.1.4

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.
package/README.md CHANGED
@@ -1,255 +1,256 @@
1
- # Getting Started
2
-
3
- This project provides a React component containing the Raspberry Pi Code Editor for embedding inside other applications. Although originally bootstrapped with [Create React App](https://github.com/facebook/create-react-app), the application has been ejected so all the build scripts etc. are now in the repo. Legacy web-component assets are still published for backwards compatibility, but the primary integration surface is the `TextJamEditor` React component.
4
-
5
- # Local development
6
-
7
- The app test page at `http://localhost:3011` can be used to develop the React component in isolation if needed.
8
-
9
- ## Install dependencies
10
-
11
- This repository uses Yarn 3 (see `package.json` → `packageManager`). Please install dependencies with Yarn:
12
-
13
- ```
14
- yarn install
15
- ```
16
-
17
- Using `npm install` can fail due to strict peer-dependency resolution in npm for some legacy packages in this project.
18
-
19
- ## Available Scripts
20
-
21
- In the project directory, you can run:
22
-
23
- ### `yarn start`
24
-
25
- Runs the app in the development mode.\
26
- Open [http://localhost:3011](http://localhost:3011) to view the web component test page in the browser.
27
-
28
- The page will reload if you make edits.\
29
- You will also see any lint errors in the console.
30
-
31
- ### `yarn test`
32
-
33
- Launches the test runner in interactive watch mode.\
34
- See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
35
-
36
- ### `yarn build:lib`
37
-
38
- Builds the lib for production to the `dist` folder.\
39
- It bundles React in production mode and optimizes the build for the best performance.
40
-
41
- The build is minified and the filenames include the hashes.\
42
- Your app is ready to be deployed!
43
-
44
- See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
45
-
46
- ## Styling
47
-
48
- The dev playground (`webpack.config.js`) keeps styles in JavaScript via `style-loader` for the fastest live reload experience. The library build (`webpack.lib.config.js`) extracts all CSS/SCSS into `dist/style.css` using `MiniCssExtractPlugin` so consumers can import a single stylesheet while still benefitting from CSS Modules (`*.module.(css|scss)`) for scoped styles.
49
-
50
- ### Styling Best Practices for Developers
51
-
52
- **Focus on CSS Modules**: When adding or modifying styles, prioritize CSS Modules over global styles. Use the `.module.css` or `.module.scss` naming convention to ensure styles are scoped to components and avoid style conflicts.
53
-
54
- **Refactor Global Styles**: When working on existing code, identify global styles and refactor them into CSS Modules when possible. This improves maintainability, reduces style conflicts, and makes components more self-contained.
55
-
56
- **CSS Modules Structure**:
57
- - Component-specific styles should live in `ComponentName/styles.module.scss` alongside the component
58
- - Import styles as: `import classes from './styles.module.scss'`
59
- - Use class names from the imported styles object: `className={classes.container}`
60
- - Webpack automatically generates scoped class names like `ComponentName__container--abc123`
61
-
62
- **When Global Styles Are Acceptable**:
63
- - Design system tokens and variables (e.g., color palettes, spacing scales)
64
- - Third-party library overrides that cannot be modularized
65
- - Base resets or typography that must apply globally
66
-
67
- **Example - Preferred CSS Modules Approach**:
68
- ```jsx
69
- // ComponentName/ComponentName.jsx
70
- import classes from './styles.module.scss';
71
-
72
- export function ComponentName() {
73
- return <div className={classes.container}>Content</div>;
74
- }
75
- ```
76
-
77
- ```scss
78
- // ComponentName/styles.module.scss
79
- .container {
80
- padding: 1rem;
81
- background: var(--color-background);
82
- }
83
- ```
84
-
85
- ## Testing
86
-
87
- Automated unit tests can be run via the `yarn test` command. These unit tests are written using the JavaScript testing framework `Jest` and make use of the tools provided by the [React Testing Library](https://testing-library.com/docs/). Automated accessibility testing for components is available via the `jest-axe` library. This can be achieved using the `haveNoViolations` matcher provided by `jest-axe`, although this does not guarantee that the tested components have no accessibility issues.
88
-
89
- ## Publishing to npm
90
-
91
- ### Prerequisites
92
-
93
- 1. Ensure you're logged into npm:
94
- ```bash
95
- npm login
96
- ```
97
-
98
- 2. Verify you have publish access to the `gwchq-textjam` package.
99
-
100
- 3. Make sure all changes are committed and the working directory is clean.
101
-
102
- ### Publishing Steps
103
-
104
- 1. **Update the version** in `package.json` following [semantic versioning](https://semver.org/):
105
- - Patch: `0.1.2` → `0.1.3` (bug fixes)
106
- - Minor: `0.1.2` → `0.2.0` (new features, backwards compatible)
107
- - Major: `0.1.2` → `1.0.0` (breaking changes)
108
-
109
- 2. **Build the library** (automatically runs via `prepublishOnly` hook):
110
- ```bash
111
- yarn build:lib
112
- ```
113
- This creates the `dist` folder with:
114
- - `index.js` - The main ESM module
115
- - `style.css` - Extracted stylesheet
116
- - `assets/` - Static assets (icons, fonts, etc.)
117
-
118
- 3. **Verify the build output**:
119
- - Check that `dist/index.js` exists and is properly built
120
- - Verify `dist/style.css` contains all styles
121
- - Ensure all required assets are in `dist/assets/`
122
-
123
- 4. **Publish to npm**:
124
- ```bash
125
- npm publish
126
- ```
127
- The `prepublishOnly` script will automatically run `yarn build:lib` before publishing.
128
-
129
- 5. **Verify publication**:
130
- ```bash
131
- npm view gwchq-textjam version
132
- ```
133
-
134
- ### What Gets Published
135
-
136
- The following files are included in the npm package (as defined in `package.json` → `files`):
137
- - `dist/` - Built library files
138
- - `README.md` - This file
139
- - `LICENSE` - License file
140
-
141
- ### Package Exports
142
-
143
- Consumers can import:
144
- - Main component: `import { TextJamEditor } from "gwchq-textjam"`
145
- - Stylesheet: `import "gwchq-textjam/style.css"`
146
-
147
- # Using the editor as a React component
148
-
149
- The editor can be imported and rendered directly inside another React application. The package exports the `TextJamEditor` component and `styles.css`:
150
-
151
- ```tsx
152
- import { TextJamEditor } from "gwchq-textjam";
153
- import "gwchq-textjam/style.css"
154
-
155
- export function EditorWrapper() {
156
- return (
157
- <TextJamEditor />
158
- );
159
- }
160
- ```
161
-
162
- The consumer's webpack config should include the following setups
163
- ```
164
- {
165
- ...,
166
- modules: {
167
- rules: [
168
- ...,
169
- {
170
- test: /\.map$/,
171
- type: "asset/resource",
172
- },
173
- {
174
- test: /\.whl$/,
175
- type: "asset/resource",
176
- },
177
- {
178
- test: /\.glb$/,
179
- type: "asset/resource",
180
- },
181
- ]
182
- },
183
- plugins: [
184
- new CopyWebpackPlugin({
185
- patterns: [
186
- ...,
187
- {
188
- from: "node_modules/gwchq-textjam/dist/assets",
189
- to: "assets",
190
- },
191
- ],
192
- }),
193
- ],
194
- resolve: {
195
- extensions: ['.js', '.jsx'],
196
- alias: {
197
- 'react': path.resolve(__dirname, 'node_modules/react'),
198
- 'react-dom': path.resolve(__dirname, 'node_modules/react-dom'),
199
- 'react-redux': path.resolve(__dirname, 'node_modules/react-redux'),
200
- },
201
- fallback: {
202
- stream: require.resolve('stream-browserify'),
203
- path: require.resolve('path-browserify'),
204
- util: require.resolve('util/'),
205
- assert: require.resolve("assert"),
206
- },
207
- },
208
- }
209
- ```
210
-
211
- ### Component props
212
-
213
- `TextJamEditor` accepts the following props (previously exposed as web-component attributes):
214
-
215
- - `assetsIdentifier`: Load assets (not code) from this project identifier
216
- - `code`: A preset blob of code to show in the editor pane (overrides content of `main.py`/`index.html`)
217
- - `editableInstructions`: Boolean; show edit panel for instructions when `true`
218
- - `embedded`: Enable embedded mode which hides some functionality (defaults to `false`)
219
- - `identifier`: Load the project with this identifier from the database
220
- - `instructions`: JSON object containing steps to be displayed in the instructions panel in the sidebar
221
- - `loadCache`: Load latest version of project code from local storage (defaults to `true`)
222
- - `locale`: Locale for UI elements and to determine the language of projects loaded from the API (defaults to `en`)
223
- - `outputOnly`: Only display the output panel (defaults to `false`)
224
- - `outputPanels`: Array of output panel names to display (defaults to `['text', 'visual']`)
225
- - `outputSplitView`: Start with split view in output panel (defaults to `false`, i.e. tabbed view)
226
- - `projectNameEditable`: Allow the user to edit the project name in the project bar (defaults to `false`)
227
- - `reactAppApiEndpoint`: API endpoint to send project-related requests to
228
- - `readOnly`: Display the editor in read-only mode (defaults to `false`)
229
- - `showSavePrompt`: Prompt the user to save their work (defaults to `false`)
230
- - `sidebarOptions`: Array of strings specifying the panels to be displayed in the sidebar. Options include `"projects"`, `"instructions"`, `"file"`, `"images"`, `"download"`, `"settings"`, and `"info"`.
231
- - `sidebarPlugins`: Array of plugin definitions to render inside the sidebar (defaults to `[]`)
232
- - `theme`: Force editor into `"dark"` or `"light"` mode; browser/system preferences are used when omitted
233
- - `withProjectbar`: Show the project bar containing project name and save status (defaults to `false`)
234
- - `withSidebar`: Show the sidebar (defaults to `false`)
235
-
236
- When no props are supplied the component falls back to parsing the current page’s query string so the local development experience (`yarn start`) continues to work unchanged. You can override this by explicitly passing `queryString` or the equivalent props.
237
-
238
- ### Events and callbacks
239
-
240
- For backwards compatibility the editor continues to dispatch the following `document` events. You can listen for them from your host application if you rely on the legacy integration layer:
241
-
242
- - `editor-codeChanged`
243
- - `editor-navigateToProjectsPage`
244
- - `editor-projectIdentifierChanged`
245
- - `editor-projectOwnerLoaded`
246
- - `editor-runCompleted`
247
- - `editor-runStarted`
248
- - `editor-stepChanged`
249
- - `editor-logIn`
250
- - `editor-signUp`
251
- - `editor-quizReady`
252
- - `editor-themeUpdated`
253
-
254
- These events make it possible for the host page to react to code execution, project changes, authentication requests, and theme updates.
255
-
1
+ # Getting Started
2
+
3
+ This project provides a React component containing the Raspberry Pi Code Editor for embedding inside other applications. Although originally bootstrapped with [Create React App](https://github.com/facebook/create-react-app), the application has been ejected so all the build scripts etc. are now in the repo. Legacy web-component assets are still published for backwards compatibility, but the primary integration surface is the `TextJamEditor` React component.
4
+
5
+ # Local development
6
+
7
+ The app test page at `http://localhost:3011` can be used to develop the React component in isolation if needed.
8
+
9
+ ## Install dependencies
10
+
11
+ This repository uses Yarn 3 (see `package.json` → `packageManager`). Please install dependencies with Yarn:
12
+
13
+ ```
14
+ yarn install
15
+ ```
16
+
17
+ Using `npm install` can fail due to strict peer-dependency resolution in npm for some legacy packages in this project.
18
+
19
+ ## Available Scripts
20
+
21
+ In the project directory, you can run:
22
+
23
+ ### `yarn start`
24
+
25
+ Runs the app in the development mode.\
26
+ Open [http://localhost:3011](http://localhost:3011) to view the web component test page in the browser.
27
+
28
+ The page will reload if you make edits.\
29
+ You will also see any lint errors in the console.
30
+
31
+ ### `yarn test`
32
+
33
+ Launches the test runner in interactive watch mode.\
34
+ See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
35
+
36
+ ### `yarn build:lib`
37
+
38
+ Builds the lib for production to the `dist` folder.\
39
+ It bundles React in production mode and optimizes the build for the best performance.
40
+
41
+ The build is minified and the filenames include the hashes.\
42
+ Your app is ready to be deployed!
43
+
44
+ See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
45
+
46
+ ## Styling
47
+
48
+ The dev playground (`webpack.config.js`) keeps styles in JavaScript via `style-loader` for the fastest live reload experience. The library build (`webpack.lib.config.js`) extracts all CSS/SCSS into `dist/style.css` using `MiniCssExtractPlugin` so consumers can import a single stylesheet while still benefitting from CSS Modules (`*.module.(css|scss)`) for scoped styles.
49
+
50
+ ### Styling Best Practices for Developers
51
+
52
+ **Focus on CSS Modules**: When adding or modifying styles, prioritize CSS Modules over global styles. Use the `.module.css` or `.module.scss` naming convention to ensure styles are scoped to components and avoid style conflicts.
53
+
54
+ **Refactor Global Styles**: When working on existing code, identify global styles and refactor them into CSS Modules when possible. This improves maintainability, reduces style conflicts, and makes components more self-contained.
55
+
56
+ **CSS Modules Structure**:
57
+ - Component-specific styles should live in `ComponentName/styles.module.scss` alongside the component
58
+ - Import styles as: `import classes from './styles.module.scss'`
59
+ - Use class names from the imported styles object: `className={classes.container}`
60
+ - Webpack automatically generates scoped class names like `ComponentName__container--abc123`
61
+
62
+ **When Global Styles Are Acceptable**:
63
+ - Design system tokens and variables (e.g., color palettes, spacing scales)
64
+ - Third-party library overrides that cannot be modularized
65
+ - Base resets or typography that must apply globally
66
+
67
+ **Example - Preferred CSS Modules Approach**:
68
+ ```jsx
69
+ // ComponentName/ComponentName.jsx
70
+ import classes from './styles.module.scss';
71
+
72
+ export function ComponentName() {
73
+ return <div className={classes.container}>Content</div>;
74
+ }
75
+ ```
76
+
77
+ ```scss
78
+ // ComponentName/styles.module.scss
79
+ .container {
80
+ padding: 1rem;
81
+ background: var(--color-background);
82
+ }
83
+ ```
84
+
85
+ ## Testing
86
+
87
+ Automated unit tests can be run via the `yarn test` command. These unit tests are written using the JavaScript testing framework `Jest` and make use of the tools provided by the [React Testing Library](https://testing-library.com/docs/). Automated accessibility testing for components is available via the `jest-axe` library. This can be achieved using the `haveNoViolations` matcher provided by `jest-axe`, although this does not guarantee that the tested components have no accessibility issues.
88
+
89
+ ## Publishing to npm
90
+
91
+ ### Prerequisites
92
+
93
+ 1. Ensure you're logged into npm:
94
+ ```bash
95
+ npm login
96
+ ```
97
+
98
+ 2. Verify you have publish access to the `gwchq-textjam` package.
99
+
100
+ 3. Make sure all changes are committed and the working directory is clean.
101
+
102
+ ### Publishing Steps
103
+
104
+ 1. **Update the version** in `package.json` following [semantic versioning](https://semver.org/):
105
+ - Patch: `0.1.2` → `0.1.3` (bug fixes)
106
+ - Minor: `0.1.2` → `0.2.0` (new features, backwards compatible)
107
+ - Major: `0.1.2` → `1.0.0` (breaking changes)
108
+
109
+ 2. **Build the library** (automatically runs via `prepublishOnly` hook):
110
+ ```bash
111
+ yarn build:lib
112
+ ```
113
+ This creates the `dist` folder with:
114
+ - `index.js` - The main ESM module
115
+ - `style.css` - Extracted stylesheet
116
+ - `assets/` - Static assets (icons, fonts, etc.)
117
+
118
+ 3. **Verify the build output**:
119
+ - Check that `dist/index.js` exists and is properly built
120
+ - Verify `dist/style.css` contains all styles
121
+ - Ensure all required assets are in `dist/assets/`
122
+
123
+ 4. **Publish to npm**:
124
+ ```bash
125
+ npm publish
126
+ ```
127
+ The `prepublishOnly` script will automatically run `yarn build:lib` before publishing.
128
+
129
+ 5. **Verify publication**:
130
+ ```bash
131
+ npm view gwchq-textjam version
132
+ ```
133
+
134
+ ### What Gets Published
135
+
136
+ The following files are included in the npm package (as defined in `package.json` → `files`):
137
+ - `dist/` - Built library files
138
+ - `README.md` - This file
139
+ - `LICENSE` - License file
140
+
141
+ ### Package Exports
142
+
143
+ Consumers can import:
144
+ - Main component: `import { TextJamEditor } from "gwchq-textjam"`
145
+ - Stylesheet: `import "gwchq-textjam/style.css"`
146
+
147
+ # Using the editor as a React component
148
+
149
+ The editor can be imported and rendered directly inside another React application. The package exports the `TextJamEditor` component and `styles.css`:
150
+
151
+ ```tsx
152
+ import { TextJamEditor } from "gwchq-textjam";
153
+ import "gwchq-textjam/style.css"
154
+
155
+ export function EditorWrapper() {
156
+ return (
157
+ <TextJamEditor
158
+ project={{ project_type: "python", identifier: "my-py-app" }}
159
+ />
160
+ );
161
+ }
162
+ ```
163
+
164
+ The consumer's webpack config should include the following setups
165
+ ```
166
+ {
167
+ ...,
168
+ modules: {
169
+ rules: [
170
+ ...,
171
+ {
172
+ test: /\.map$/,
173
+ type: "asset/resource",
174
+ },
175
+ {
176
+ test: /\.whl$/,
177
+ type: "asset/resource",
178
+ },
179
+ {
180
+ test: /\.glb$/,
181
+ type: "asset/resource",
182
+ },
183
+ ]
184
+ },
185
+ plugins: [
186
+ new CopyWebpackPlugin({
187
+ patterns: [
188
+ ...,
189
+ {
190
+ from: "node_modules/gwchq-textjam/dist/assets",
191
+ to: "assets",
192
+ },
193
+ ],
194
+ }),
195
+ ],
196
+ resolve: {
197
+ extensions: ['.js', '.jsx'],
198
+ alias: {
199
+ 'react': path.resolve(__dirname, 'node_modules/react'),
200
+ 'react-dom': path.resolve(__dirname, 'node_modules/react-dom'),
201
+ 'react-redux': path.resolve(__dirname, 'node_modules/react-redux'),
202
+ },
203
+ fallback: {
204
+ stream: require.resolve('stream-browserify'),
205
+ path: require.resolve('path-browserify'),
206
+ util: require.resolve('util/'),
207
+ assert: require.resolve("assert"),
208
+ },
209
+ },
210
+ }
211
+ ```
212
+
213
+ ### Component props
214
+
215
+ `TextJamEditor` accepts the following props (previously exposed as web-component attributes):
216
+
217
+ - `project`: an object with the project data. Contains the following props:
218
+ - `project_type`: Possible values `web` | `python`. Default project files will be created according to this value
219
+ - `identifier`: A string that represents the project id. If provided, cached project with same id will be loaded
220
+
221
+ // TODO: review old options below
222
+ - `code`: A preset blob of code to show in the editor pane (overrides content of `main.py`/`index.html`)
223
+ - `embedded`: Enable embedded mode which hides some functionality (defaults to `false`)
224
+ - `loadCache`: Load latest version of project code from local storage (defaults to `true`)
225
+ - `locale`: Locale for UI elements and to determine the language of projects loaded from the API (defaults to `en`)
226
+ - `outputOnly`: Only display the output panel (defaults to `false`)
227
+ - `outputPanels`: Array of output panel names to display (defaults to `['text', 'visual']`)
228
+ - `outputSplitView`: Start with split view in output panel (defaults to `false`, i.e. tabbed view)
229
+ - `projectNameEditable`: Allow the user to edit the project name in the project bar (defaults to `false`)
230
+ - `readOnly`: Display the editor in read-only mode (defaults to `false`)
231
+ - `showSavePrompt`: Prompt the user to save their work (defaults to `false`)
232
+ - `sidebarOptions`: Array of strings specifying the panels to be displayed in the sidebar. Options include `"projects"`, `"file"`, `"download"`, `"settings"`.
233
+ - `sidebarPlugins`: Array of plugin definitions to render inside the sidebar (defaults to `[]`)
234
+ - `theme`: Force editor into `"dark"` or `"light"` mode; browser/system preferences are used when omitted
235
+ - `withProjectbar`: Show the project bar containing project name and save status (defaults to `false`)
236
+ - `withSidebar`: Show the sidebar (defaults to `false`)
237
+
238
+ When no props are supplied the component falls back to parsing the current page’s query string so the local development experience (`yarn start`) continues to work unchanged. You can override this by explicitly passing `queryString` or the equivalent props.
239
+
240
+ ### Events and callbacks
241
+
242
+ For backwards compatibility the editor continues to dispatch the following `document` events. You can listen for them from your host application if you rely on the legacy integration layer:
243
+
244
+ - `editor-codeChanged`
245
+ - `editor-navigateToProjectsPage`
246
+ - `editor-projectOwnerLoaded`
247
+ - `editor-runCompleted`
248
+ - `editor-runStarted`
249
+ - `editor-stepChanged`
250
+ - `editor-logIn`
251
+ - `editor-signUp`
252
+ - `editor-quizReady`
253
+ - `editor-themeUpdated`
254
+
255
+ These events make it possible for the host page to react to code execution, project changes, authentication requests, and theme updates.
256
+
package/dist/360.index.js CHANGED
@@ -5,7 +5,7 @@ export const modules = {
5
5
  /***/ 22796:
6
6
  /***/ ((module) => {
7
7
 
8
- module.exports = /*#__PURE__*/JSON.parse('{"modal":{"close":"Close","error":{"error":"Error","heading":"An error has occurred","externalLink":{"message":"Unfortunately links to external sites are not available in the Editor."}}},"editorPanel":{"ariaLabel":"editor text input","characterLimitError":"Error: Character limit reached","characterLimitExplanation_one":"Files in the editor are limited to {{count}} character","characterLimitExplanation_other":"Files in the editor are limited to {{count}} characters","viewOnly":"View only","close":"close"},"filePanel":{"errors":{"reservedFileName":"{{fileName}} is a reserved file name. Please choose a different name.","containsSpaces":"File names must not contain spaces.","generalError":"Error","notUnique":"File names must be unique.","or":"or","unsupportedExtension":"File names must end in {{allowedExtensions}}."},"files":"Project files","images":"Image gallery","newFileButton":"Add file","newFileModal":{"cancel":"Cancel","heading":"Add a new file to your project","helpText":"Remember to add the file extension at the end of your file name, for example, {{examples}}","helpTextExample":{"html":"\'file.html\', \'file.css\' or \'file.js\'","python":"\'file.py\'"},"inputLabel":"Name your file","addFile":"Add file"},"renameFileModal":{"cancel":"Cancel","heading":"Rename file","inputLabel":"Name your file","save":"Save"},"fileMenu":{"label":"Open file menu","renameItem":"Rename file"}},"downloadPanel":{"heading":"Save & download","logInTitle":"Log in to save your progress","logInHint":"With a Raspberry Pi Account you can save your code and project steps progress.","logInButton":"Log in to save","signUpButton":"Sign up","downloadHint":"Download your project files so you can use them offline and in a different code editor.","downloadButton":"Download project"},"footer":{"accessibility":"Accessibility","charityNameAndNumber":"Raspberry Pi Foundation UK registered charity 1129409","cookies":"Cookies","privacy":"Privacy","safeguarding":"Safeguarding"},"projectName":{"label":"Project name","newProject":"New Project"},"header":{"download":"Download","downloadFileNameDefault":"my {{project_type}} project","editorLogoAltText":"Editor logo","projects":"Your projects","renameProject":"Edit project name","renameSave":"Save project name","save":"Save","loginToSave":"Log in to save","settings":"Settings"},"imagePanel":{"gallery":"Image Gallery"},"infoPanel":{"info":"Information"},"instructionsPanel":{"demoInstructions":{"title":"How instructions work","enablingInstructions":"Enabling instructions","visible":"Any text written here will be visible to students in the sidebar.","writingInstructions":"Writing instructions","markdown":"Write your instructions using [Markdown](https://www.markdownguide.org/).","whatYouCanDo":"What you can do","lists":"Lists","bulletPoints":"Bullet points","numberedSteps":"Numbered steps"},"emptyState":{"addInstructions":"Add instructions","edits":"Like project code, students will not see any edits you make to the instructions after they have saved their version of the project.","location":"These instructions will be shown to students in their project sidebar and will be view-only.","markdown":"Instructions are written in <0>markdown</0>.","purpose":"Instructions can be added to your project to guide students."},"removeInstructions":"Remove instructions","nextStep":"Next step","previousStep":"Previous step","projectSteps":"Project instructions","edit":"Edit","view":"View","removeInstructionsModal":{"removeInstructions":"Remove instructions","close":"Close","heading":"Remove project instructions?","removeInstuctionsWarning":"You are about to remove the instructions from the project.","resultRemovingInstructions":"As a result of removing these instructions:","instructionsWillBeDeleted":"Instructions content will be deleted.","studentsWorkingProjectNotRecievedInstructions":"Students who start working on this project will not receive instructions.","studentsStartedWillSeeInstructions":"Students who have already started working on this project will still be able to see the instructions as they were when they started."}},"projectsPanel":{"projects":"Projects","yourProjectsButton":"Go to your projects","projectTypeLabel":"Project type"},"settingsPanel":{"info":"Settings"},"input":{"comment":{"py5":"Py5: imported mode"}},"mobile":{"code":"Code","menu":"Menu","output":"Output","preview":"Preview","steps":"Steps"},"modals":{"close":"Close"},"notifications":{"close":"close","loginPrompt":"To save this project and access it later, don\'t forget to log in or sign up!","projectRenamed":"You have renamed your project.","projectSaved":"Your project has been saved","savePrompt":"Save this project to access it later under \\"Your projects\\"."},"output":{"errors":{"interrupted":"Execution interrupted"},"newTab":"Preview in new tab","preview":"preview","textOutput":"Text output","visualOutput":"Visual output"},"outputViewToggle":{"buttonTabLabel":"Tabbed view","buttonTabTitle":"Tabbed view","buttonSplitLabel":"Split view","buttonSplitTitle":"Split view"},"project":{"accessDeniedWithAuthModal":{"embedded":{"text":"Visit the Projects site for cool project ideas"},"heading":"You can\'t access this project","newProject":"Create a new code project","projectsSiteLinkText":"Explore Projects site","text":"Visit the Projects site for cool project ideas or start coding in a new project."},"loading":"Loading","notFoundModal":{"embedded":{"text":"Visit the Projects site for cool project ideas"},"heading":"This project does not exist","newProject":"Start new code project","projectsSiteLinkText":"Explore Projects site","text":"You can start coding in a new project, or visit the Projects site for cool project ideas."},"untitled":"Untitled project"},"projectHeader":{"subTitle":"Code Editor","title":"Your projects","text":"Select a project to continue coding, view, or edit it."},"projectList":{"delete":"Delete","deleteLabel":"Delete project","empty":"No projects created yet","label":"Open project menu","loading":"Loading","loadingFailed":"Failed to load projects","newProject":"Create a new project","pagination":{"first":"First page","last":"Last page","next":"Next page","previous":"Previous page","more":"Load more projects"},"rename":"Rename","renameLabel":"Rename project","renameProjectModal":{"cancel":"Do not save","heading":"Rename project","inputLabel":"Change the name of your project","save":"Save"},"updated":"Edited","python_type":"Python","html_type":"HTML"},"projectTypes":{"html":"HTML/CSS","python":"Python"},"runButton":{"run":"Run","stop":"Stop","stopping":"Stopping..."},"saveStatus":{"saving":"Saving","saved":"Saved"},"runners":{"HtmlOutput":"HTML Output Preview"},"sidebar":{"collapse":"Collapse sidebar","download":"Download project","expand":"Expand sidebar","file":"Project files","images":"Image gallery","settings":"Settings","projects":"Projects","information":"Information","information_text":"Our Code Editor is a tool to help young people learn to code. We have only included functions that are simple and safe to use. That\'s why, for example, links to other websites are not allowed.","instructions":"Project instructions","feedback":"Feedback","help":"Help","privacy":"Privacy","cookies":"Cookies","accessibility":"Accessibility","safeguarding":"Safeguarding","charity":"Raspberry Pi Foundation - UK registered charity 1129409","settingsMenu":{"heading":"Settings","textSize":"Text size","theme":"Theme","textSizeOptions":{"large":"Large","medium":"Medium","small":"Small"},"themeOptions":{"dark":"Dark","light":"Light"}}},"webComponent":{"loading":"Loading","failed":"Load failed"},"newInputPanelButton":{"buttonText":"Add another panel"},"button":{"yes":"Yes","no":"No"},"common":{"or":"or"}}');
8
+ module.exports = /*#__PURE__*/JSON.parse('{"modal":{"close":"Close","error":{"error":"Error","heading":"An error has occurred","externalLink":{"message":"Unfortunately links to external sites are not available in the Editor."}}},"editorPanel":{"ariaLabel":"editor text input","characterLimitError":"Error: Character limit reached","characterLimitExplanation_one":"Files in the editor are limited to {{count}} character","characterLimitExplanation_other":"Files in the editor are limited to {{count}} characters","viewOnly":"View only","close":"close"},"filePanel":{"errors":{"reservedFileName":"{{fileName}} is a reserved file name. Please choose a different name.","containsSpaces":"File names must not contain spaces.","generalError":"Error","notUnique":"File names must be unique.","or":"or","unsupportedExtension":"File names must end in {{allowedExtensions}}."},"files":"Project files","images":"Image gallery","newFileButton":"Add file","newFileModal":{"cancel":"Cancel","heading":"Add a new file to your project","helpText":"Remember to add the file extension at the end of your file name, for example, {{examples}}","helpTextExample":{"html":"\'file.html\', \'file.css\' or \'file.js\'","python":"\'file.py\'"},"inputLabel":"Name your file","addFile":"Add file"},"renameFileModal":{"cancel":"Cancel","heading":"Rename file","inputLabel":"Name your file","save":"Save"},"fileMenu":{"label":"Open file menu","renameItem":"Rename file"}},"downloadPanel":{"heading":"Save & download","logInTitle":"Log in to save your progress","logInHint":"With a Raspberry Pi Account you can save your code and project steps progress.","logInButton":"Log in to save","signUpButton":"Sign up","downloadHint":"Download your project files so you can use them offline and in a different code editor.","downloadButton":"Download project"},"footer":{"accessibility":"Accessibility","charityNameAndNumber":"Raspberry Pi Foundation UK registered charity 1129409","cookies":"Cookies","privacy":"Privacy","safeguarding":"Safeguarding"},"projectName":{"label":"Project name","newProject":"New Project"},"header":{"download":"Download","downloadFileNameDefault":"my {{project_type}} project","editorLogoAltText":"Editor logo","projects":"Your projects","renameProject":"Edit project name","renameSave":"Save project name","save":"Save","loginToSave":"Log in to save","settings":"Settings"},"imagePanel":{"gallery":"Image Gallery"},"projectsPanel":{"projects":"Projects","yourProjectsButton":"Go to your projects","projectTypeLabel":"Project type"},"settingsPanel":{"info":"Settings"},"input":{"comment":{"py5":"Py5: imported mode"}},"mobile":{"code":"Code","menu":"Menu","output":"Output","preview":"Preview","steps":"Steps"},"modals":{"close":"Close"},"notifications":{"close":"close","loginPrompt":"To save this project and access it later, don\'t forget to log in or sign up!","projectRenamed":"You have renamed your project.","projectSaved":"Your project has been saved","savePrompt":"Save this project to access it later under \\"Your projects\\"."},"output":{"errors":{"interrupted":"Execution interrupted"},"newTab":"Preview in new tab","preview":"preview","textOutput":"Text output","visualOutput":"Visual output"},"outputViewToggle":{"buttonTabLabel":"Tabbed view","buttonTabTitle":"Tabbed view","buttonSplitLabel":"Split view","buttonSplitTitle":"Split view"},"project":{"accessDeniedWithAuthModal":{"embedded":{"text":"Visit the Projects site for cool project ideas"},"heading":"You can\'t access this project","newProject":"Create a new code project","projectsSiteLinkText":"Explore Projects site","text":"Visit the Projects site for cool project ideas or start coding in a new project."},"loading":"Loading","notFoundModal":{"embedded":{"text":"Visit the Projects site for cool project ideas"},"heading":"This project does not exist","newProject":"Start new code project","projectsSiteLinkText":"Explore Projects site","text":"You can start coding in a new project, or visit the Projects site for cool project ideas."},"untitled":"Untitled project"},"projectHeader":{"subTitle":"Code Editor","title":"Your projects","text":"Select a project to continue coding, view, or edit it."},"projectList":{"delete":"Delete","deleteLabel":"Delete project","empty":"No projects created yet","label":"Open project menu","loading":"Loading","loadingFailed":"Failed to load projects","newProject":"Create a new project","pagination":{"first":"First page","last":"Last page","next":"Next page","previous":"Previous page","more":"Load more projects"},"rename":"Rename","renameLabel":"Rename project","renameProjectModal":{"cancel":"Do not save","heading":"Rename project","inputLabel":"Change the name of your project","save":"Save"},"updated":"Edited","python_type":"Python","html_type":"HTML"},"projectTypes":{"html":"HTML/CSS","python":"Python"},"runButton":{"run":"Run","stop":"Stop","stopping":"Stopping..."},"saveStatus":{"saving":"Saving","saved":"Saved"},"runners":{"HtmlOutput":"HTML Output Preview"},"sidebar":{"collapse":"Collapse sidebar","download":"Download project","expand":"Expand sidebar","file":"Project files","images":"Image gallery","settings":"Settings","projects":"Projects","information":"Information","information_text":"Our Code Editor is a tool to help young people learn to code. We have only included functions that are simple and safe to use. That\'s why, for example, links to other websites are not allowed.","feedback":"Feedback","help":"Help","privacy":"Privacy","cookies":"Cookies","accessibility":"Accessibility","safeguarding":"Safeguarding","charity":"Raspberry Pi Foundation - UK registered charity 1129409","settingsMenu":{"heading":"Settings","textSize":"Text size","theme":"Theme","textSizeOptions":{"large":"Large","medium":"Medium","small":"Small"},"themeOptions":{"dark":"Dark","light":"Light"}}},"webComponent":{"loading":"Loading","failed":"Load failed"},"newInputPanelButton":{"buttonText":"Add another panel"},"button":{"yes":"Yes","no":"No"},"common":{"or":"or"}}');
9
9
 
10
10
  /***/ })
11
11