@jupyterlab/settingeditor 4.0.0-beta.2 → 4.0.0-rc.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.
@@ -88,6 +88,7 @@ export declare class SettingsFormEditor extends React.Component<SettingsFormEdit
88
88
  private _onChange;
89
89
  private _setUiSchema;
90
90
  private _setFilteredSchema;
91
+ private _getFilteredFormData;
91
92
  private _debouncer;
92
93
  private _formData;
93
94
  }
@@ -81,6 +81,7 @@ export class SettingsFormEditor extends React.Component {
81
81
  handleChange() {
82
82
  // Prevent unnecessary save when opening settings that haven't been modified.
83
83
  if (!this.props.settings.isModified &&
84
+ this._formData &&
84
85
  this.props.settings.isDefault(this._formData)) {
85
86
  this.props.updateDirtyState(false);
86
87
  return;
@@ -99,11 +100,12 @@ export class SettingsFormEditor extends React.Component {
99
100
  }
100
101
  render() {
101
102
  const trans = this.props.translator.load('jupyterlab');
102
- return (React.createElement("div", null,
103
+ return (React.createElement(React.Fragment, null,
103
104
  React.createElement("div", { className: "jp-SettingsHeader" },
104
- React.createElement("h2", { title: this.props.settings.schema.description }, this.props.settings.schema.title)),
105
- React.createElement("div", { className: "jp-Buttonbar" }, this.state.isModified && (React.createElement(Button, { className: "jp-RestoreButton", onClick: this.reset }, trans.__('Restore to Defaults')))),
106
- React.createElement(FormComponent, { validator: validatorAjv8, schema: this.state.filteredSchema, formData: this._formData, uiSchema: this.state.uiSchema, fields: this.props.renderers[this.props.settings.id], formContext: this.state.formContext, liveValidate: true, idPrefix: `jp-SettingsEditor-${this.props.settings.id}`, onChange: this._onChange, translator: this.props.translator })));
105
+ React.createElement("h2", { className: "jp-SettingsHeader-title", title: this.props.settings.schema.description }, this.props.settings.schema.title),
106
+ React.createElement("div", { className: "jp-SettingsHeader-buttonbar" }, this.state.isModified && (React.createElement(Button, { className: "jp-RestoreButton", onClick: this.reset }, trans.__('Restore to Defaults')))),
107
+ React.createElement("div", { className: "jp-SettingsHeader-description" }, this.props.settings.schema.description)),
108
+ React.createElement(FormComponent, { validator: validatorAjv8, schema: this.state.filteredSchema, formData: this._getFilteredFormData(this.state.filteredSchema), uiSchema: this.state.uiSchema, fields: this.props.renderers[this.props.settings.id], formContext: this.state.formContext, liveValidate: true, idPrefix: `jp-SettingsEditor-${this.props.settings.id}`, onChange: this._onChange, translator: this.props.translator })));
107
109
  }
108
110
  _setUiSchema(prevRenderers) {
109
111
  var _a;
@@ -141,5 +143,17 @@ export class SettingsFormEditor extends React.Component {
141
143
  this.setState({ filteredSchema });
142
144
  }
143
145
  }
146
+ _getFilteredFormData(filteredSchema) {
147
+ if (!(filteredSchema === null || filteredSchema === void 0 ? void 0 : filteredSchema.properties)) {
148
+ return this._formData;
149
+ }
150
+ const filteredFormData = JSONExt.deepCopy(this._formData);
151
+ for (const field in filteredFormData) {
152
+ if (!filteredSchema.properties[field]) {
153
+ delete filteredFormData[field];
154
+ }
155
+ }
156
+ return filteredFormData;
157
+ }
144
158
  }
145
159
  //# sourceMappingURL=SettingsFormEditor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SettingsFormEditor.js","sourceRoot":"","sources":["../src/SettingsFormEditor.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SettingsFormEditor.js","sourceRoot":"","sources":["../src/SettingsFormEditor.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jupyterlab/settingeditor",
3
- "version": "4.0.0-beta.2",
3
+ "version": "4.0.0-rc.0",
4
4
  "description": "The JupyterLab default setting editor interface",
5
5
  "homepage": "https://github.com/jupyterlab/jupyterlab",
6
6
  "bugs": {
@@ -32,28 +32,33 @@
32
32
  ],
33
33
  "scripts": {
34
34
  "build": "tsc -b",
35
- "clean": "rimraf lib && rimraf tsconfig.tsbuildinfo",
35
+ "build:test": "tsc --build tsconfig.test.json",
36
+ "clean": "rimraf lib tsconfig.tsbuildinfo",
36
37
  "docs": "typedoc src",
38
+ "test": "jest",
39
+ "test:cov": "jest --collect-coverage",
40
+ "test:debug": "node --inspect-brk ../../node_modules/.bin/jest --runInBand",
41
+ "test:debug:watch": "node --inspect-brk ../../node_modules/.bin/jest --runInBand --watch",
37
42
  "watch": "tsc -b --watch"
38
43
  },
39
44
  "dependencies": {
40
- "@jupyterlab/application": "^4.0.0-beta.2",
41
- "@jupyterlab/apputils": "^4.0.0-beta.2",
42
- "@jupyterlab/codeeditor": "^4.0.0-beta.2",
43
- "@jupyterlab/inspector": "^4.0.0-beta.2",
44
- "@jupyterlab/rendermime": "^4.0.0-beta.2",
45
- "@jupyterlab/settingregistry": "^4.0.0-beta.2",
46
- "@jupyterlab/statedb": "^4.0.0-beta.2",
47
- "@jupyterlab/translation": "^4.0.0-beta.2",
48
- "@jupyterlab/ui-components": "^4.0.0-beta.2",
45
+ "@jupyterlab/application": "^4.0.0-rc.0",
46
+ "@jupyterlab/apputils": "^4.0.0-rc.0",
47
+ "@jupyterlab/codeeditor": "^4.0.0-rc.0",
48
+ "@jupyterlab/inspector": "^4.0.0-rc.0",
49
+ "@jupyterlab/rendermime": "^4.0.0-rc.0",
50
+ "@jupyterlab/settingregistry": "^4.0.0-rc.0",
51
+ "@jupyterlab/statedb": "^4.0.0-rc.0",
52
+ "@jupyterlab/translation": "^4.0.0-rc.0",
53
+ "@jupyterlab/ui-components": "^4.0.0-rc.0",
49
54
  "@lumino/algorithm": "^2.0.0",
50
- "@lumino/commands": "^2.1.0",
51
- "@lumino/coreutils": "^2.1.0",
52
- "@lumino/disposable": "^2.1.0",
55
+ "@lumino/commands": "^2.1.1",
56
+ "@lumino/coreutils": "^2.1.1",
57
+ "@lumino/disposable": "^2.1.1",
53
58
  "@lumino/messaging": "^2.0.0",
54
- "@lumino/polling": "^2.1.0",
55
- "@lumino/signaling": "^2.1.0",
56
- "@lumino/widgets": "^2.1.0",
59
+ "@lumino/polling": "^2.1.1",
60
+ "@lumino/signaling": "^2.1.1",
61
+ "@lumino/widgets": "^2.1.1",
57
62
  "@rjsf/core": "^5.1.0",
58
63
  "@rjsf/utils": "^5.1.0",
59
64
  "@rjsf/validator-ajv8": "^5.1.0",
@@ -61,8 +66,14 @@
61
66
  "react": "^18.2.0"
62
67
  },
63
68
  "devDependencies": {
69
+ "@jupyterlab/testing": "^4.0.0-rc.0",
70
+ "@types/jest": "^29.2.0",
64
71
  "@types/react": "^18.0.26",
72
+ "@types/react-test-renderer": "^18.0.0",
73
+ "jest": "^29.2.0",
74
+ "react-test-renderer": "^18.2.0",
65
75
  "rimraf": "~3.0.0",
76
+ "ts-jest": "^29.1.0",
66
77
  "typedoc": "~0.24.1",
67
78
  "typescript": "~5.0.4"
68
79
  },
@@ -9,7 +9,12 @@ import { showErrorMessage } from '@jupyterlab/apputils';
9
9
  import { ISettingRegistry, Settings } from '@jupyterlab/settingregistry';
10
10
  import { ITranslator } from '@jupyterlab/translation';
11
11
  import { FormComponent } from '@jupyterlab/ui-components';
12
- import { JSONExt, ReadonlyPartialJSONObject } from '@lumino/coreutils';
12
+ import {
13
+ JSONExt,
14
+ PartialJSONObject,
15
+ ReadonlyJSONObject,
16
+ ReadonlyPartialJSONObject
17
+ } from '@lumino/coreutils';
13
18
  import { Debouncer } from '@lumino/polling';
14
19
  import { IChangeEvent } from '@rjsf/core';
15
20
  import validatorAjv8 from '@rjsf/validator-ajv8';
@@ -105,7 +110,7 @@ export class SettingsFormEditor extends React.Component<
105
110
  constructor(props: SettingsFormEditor.IProps) {
106
111
  super(props);
107
112
  const { settings } = props;
108
- this._formData = settings.composite;
113
+ this._formData = settings.composite as ReadonlyJSONObject;
109
114
  this.state = {
110
115
  isModified: settings.isModified,
111
116
  uiSchema: {},
@@ -149,6 +154,7 @@ export class SettingsFormEditor extends React.Component<
149
154
  // Prevent unnecessary save when opening settings that haven't been modified.
150
155
  if (
151
156
  !this.props.settings.isModified &&
157
+ this._formData &&
152
158
  this.props.settings.isDefault(this._formData)
153
159
  ) {
154
160
  this.props.updateDirtyState(false);
@@ -177,7 +183,7 @@ export class SettingsFormEditor extends React.Component<
177
183
  for (const field in this.props.settings.user) {
178
184
  await this.props.settings.remove(field);
179
185
  }
180
- this._formData = this.props.settings.composite;
186
+ this._formData = this.props.settings.composite as ReadonlyJSONObject;
181
187
  this.setState({ isModified: false });
182
188
  };
183
189
 
@@ -185,23 +191,29 @@ export class SettingsFormEditor extends React.Component<
185
191
  const trans = this.props.translator.load('jupyterlab');
186
192
 
187
193
  return (
188
- <div>
194
+ <>
189
195
  <div className="jp-SettingsHeader">
190
- <h2 title={this.props.settings.schema.description}>
196
+ <h2
197
+ className="jp-SettingsHeader-title"
198
+ title={this.props.settings.schema.description}
199
+ >
191
200
  {this.props.settings.schema.title}
192
201
  </h2>
193
- </div>
194
- <div className="jp-Buttonbar">
195
- {this.state.isModified && (
196
- <Button className="jp-RestoreButton" onClick={this.reset}>
197
- {trans.__('Restore to Defaults')}
198
- </Button>
199
- )}
202
+ <div className="jp-SettingsHeader-buttonbar">
203
+ {this.state.isModified && (
204
+ <Button className="jp-RestoreButton" onClick={this.reset}>
205
+ {trans.__('Restore to Defaults')}
206
+ </Button>
207
+ )}
208
+ </div>
209
+ <div className="jp-SettingsHeader-description">
210
+ {this.props.settings.schema.description}
211
+ </div>
200
212
  </div>
201
213
  <FormComponent
202
214
  validator={validatorAjv8}
203
215
  schema={this.state.filteredSchema as JSONSchema7}
204
- formData={this._formData}
216
+ formData={this._getFilteredFormData(this.state.filteredSchema)}
205
217
  uiSchema={this.state.uiSchema}
206
218
  fields={this.props.renderers[this.props.settings.id]}
207
219
  formContext={this.state.formContext}
@@ -210,13 +222,13 @@ export class SettingsFormEditor extends React.Component<
210
222
  onChange={this._onChange}
211
223
  translator={this.props.translator}
212
224
  />
213
- </div>
225
+ </>
214
226
  );
215
227
  }
216
228
 
217
229
  private _onChange = (e: IChangeEvent<ReadonlyPartialJSONObject>): void => {
218
230
  this.props.hasError(e.errors.length !== 0);
219
- this._formData = e.formData;
231
+ this._formData = e.formData as ReadonlyJSONObject;
220
232
  if (e.errors.length === 0) {
221
233
  this.props.updateDirtyState(true);
222
234
  void this._debouncer.invoke();
@@ -274,6 +286,23 @@ export class SettingsFormEditor extends React.Component<
274
286
  }
275
287
  }
276
288
 
289
+ private _getFilteredFormData(
290
+ filteredSchema?: ISettingRegistry.ISchema
291
+ ): ReadonlyJSONObject {
292
+ if (!filteredSchema?.properties) {
293
+ return this._formData;
294
+ }
295
+ const filteredFormData = JSONExt.deepCopy(
296
+ this._formData as PartialJSONObject
297
+ );
298
+ for (const field in filteredFormData) {
299
+ if (!filteredSchema.properties[field]) {
300
+ delete filteredFormData[field];
301
+ }
302
+ }
303
+ return filteredFormData as ReadonlyJSONObject;
304
+ }
305
+
277
306
  private _debouncer: Debouncer<void, any>;
278
- private _formData: any;
307
+ private _formData: ReadonlyJSONObject;
279
308
  }
package/style/base.css CHANGED
@@ -11,6 +11,7 @@
11
11
  --jp-private-settingeditor-toolbar-height: 28px;
12
12
  --jp-private-settingeditor-type-width: 75px;
13
13
  --jp-private-settingeditor-modifier-indent: 5px;
14
+ --jp-private-settingeditor-header-spacing: 8px;
14
15
  }
15
16
 
16
17
  .jp-SettingsPanel,
@@ -41,6 +42,8 @@
41
42
  background-color: var(--jp-border-color2);
42
43
  }
43
44
 
45
+ /** Plugin list **/
46
+
44
47
  .jp-PluginList {
45
48
  min-width: 175px;
46
49
  max-width: 275px;
@@ -101,18 +104,6 @@
101
104
  background-color: var(--jp-error-color0);
102
105
  }
103
106
 
104
- .jp-SettingEditor-header {
105
- font-size: var(--jp-content-font-size4);
106
- font-weight: var(--jp-content-heading-font-weight);
107
- color: var(--jp-ui-font-color0);
108
- padding: 20px 0 10px 20px;
109
- border-bottom: 1px solid var(--jp-border-color2);
110
- position: sticky;
111
- top: 0;
112
- z-index: 999;
113
- background-color: var(--jp-layout-color0);
114
- }
115
-
116
107
  .jp-PluginList-icon {
117
108
  display: flex;
118
109
  height: 20px;
@@ -121,6 +112,52 @@
121
112
  position: relative;
122
113
  }
123
114
 
115
+ .jp-PluginList-wrapper > .jp-FilterBox {
116
+ margin: 8px 12px 0;
117
+ }
118
+
119
+ .jp-PluginList mark {
120
+ background-color: transparent;
121
+ font-weight: bold;
122
+ color: var(--jp-ui-font-color1);
123
+ }
124
+
125
+ .jp-PluginList-entry {
126
+ display: flex;
127
+ flex-direction: column;
128
+ border: 1px solid transparent;
129
+ background: transparent;
130
+ overflow: hidden;
131
+ padding: 4px 0 4px 4px;
132
+ white-space: nowrap;
133
+ }
134
+
135
+ .jp-PluginList-entry:hover {
136
+ background: var(--jp-layout-color1);
137
+ }
138
+
139
+ .jp-PluginList-entry li {
140
+ margin-left: 27px;
141
+ margin-top: 5px;
142
+ color: var(--jp-ui-font-color1);
143
+ overflow-x: hidden;
144
+ text-overflow: ellipsis;
145
+ }
146
+
147
+ .jp-PluginList-entry-label {
148
+ display: flex;
149
+ }
150
+
151
+ .jp-PluginList-entry-label-text {
152
+ text-overflow: ellipsis;
153
+ overflow-x: hidden;
154
+ white-space: nowrap;
155
+ color: var(--jp-ui-font-color1);
156
+ line-height: var(--jp-cell-collapser-min-height);
157
+ }
158
+
159
+ /** Raw editor **/
160
+
124
161
  .jp-SettingsRawEditor .jp-Toolbar {
125
162
  color: var(--jp-ui-font-color0);
126
163
  font-size: var(--jp-ui-font-size1);
@@ -156,6 +193,8 @@
156
193
  height: 100%;
157
194
  }
158
195
 
196
+ /** Panel **/
197
+
159
198
  .jp-SettingsPanel .checkbox p {
160
199
  font-size: var(--jp-content-font-size1);
161
200
  }
@@ -171,122 +210,58 @@
171
210
  margin-top: 5px;
172
211
  }
173
212
 
174
- .jp-SettingsPanel .jp-SaveSettingsBanner {
175
- position: absolute;
176
- bottom: 0;
213
+ .jp-SettingsPanel .jp-SettingsEditor {
177
214
  padding: 20px;
178
- width: 100%;
179
- background: var(--jp-border-color3);
180
215
  }
181
216
 
182
- .jp-SettingsPanel .jp-SaveSettingsBanner button {
183
- box-shadow: none;
184
- outline: none;
185
- border: none;
186
- color: var(--jp-brand-color1);
187
- font-size: var(--jp-ui-font-size1);
188
- cursor: pointer;
189
- }
190
-
191
- .jp-SettingsPanel .jp-SaveSettingsBanner button:hover {
192
- color: var(--jp-brand-color0);
193
- }
194
-
195
- .jp-SettingsPanel .jp-SettingsHeader h2 {
196
- font-size: var(--jp-content-font-size3);
197
- color: var(--jp-ui-font-color0);
198
- font-weight: var(--jp-content-heading-font-weight);
199
- padding-inline-start: 0.5em;
217
+ .jp-SettingsPanel {
218
+ overflow-y: auto;
219
+ height: 100%;
200
220
  }
201
221
 
202
222
  .jp-SettingsForm {
203
223
  position: relative;
204
224
  }
205
225
 
206
- .jp-SettingsPanel .jp-SettingsHeader {
207
- display: flex;
208
- flex: auto;
209
- justify-content: space-between;
210
- cursor: pointer;
211
- border: 1px solid var(--jp-border-color2);
212
- }
213
-
214
- .jp-PluginList .jp-FilterBox {
215
- margin: 8px 12px 0;
226
+ .jp-SettingsForm > .rjsf > .form-group {
227
+ padding-top: 0;
228
+ margin-top: 0;
216
229
  }
217
230
 
218
- .jp-PluginList mark {
219
- background-color: transparent;
220
- font-weight: bold;
221
- color: var(--jp-ui-font-color1);
222
- }
231
+ /** Settings header **/
223
232
 
224
- .jp-PluginList-entry {
225
- display: flex;
226
- flex-direction: column;
227
- border: 1px solid transparent;
228
- background: transparent;
229
- overflow: hidden;
230
- padding: 4px 0 4px 4px;
231
- white-space: nowrap;
232
- }
233
-
234
- .jp-PluginList-entry:hover {
235
- background: var(--jp-layout-color1);
236
- }
237
-
238
- .jp-PluginList-entry li {
239
- margin-left: 27px;
240
- margin-top: 5px;
241
- color: var(--jp-ui-font-color1);
242
- overflow-x: hidden;
243
- text-overflow: ellipsis;
233
+ .jp-SettingsHeader {
234
+ display: grid;
235
+ grid-template:
236
+ 'title buttonbar'
237
+ 'description buttonbar';
238
+ grid-template-columns: 1fr max-content;
239
+ padding: 0 var(--jp-private-settingeditor-header-spacing);
240
+ border-bottom: 1px solid var(--jp-border-color2);
244
241
  }
245
242
 
246
- .jp-PluginList-entry-label {
247
- display: flex;
243
+ .jp-SettingsHeader-title {
244
+ font-size: var(--jp-content-font-size3);
245
+ color: var(--jp-ui-font-color0);
246
+ font-weight: 400;
247
+ grid-area: title;
248
+ padding: 0;
249
+ margin-top: calc(var(--jp-private-settingeditor-header-spacing) * 2);
250
+ margin-bottom: calc(var(--jp-private-settingeditor-header-spacing) / 2);
248
251
  }
249
252
 
250
- .jp-PluginList-entry-label-text {
251
- text-overflow: ellipsis;
252
- overflow-x: hidden;
253
- white-space: nowrap;
253
+ .jp-SettingsHeader-description {
254
+ grid-area: description;
255
+ padding-bottom: var(--jp-private-settingeditor-header-spacing);
254
256
  color: var(--jp-ui-font-color1);
255
- line-height: var(--jp-cell-collapser-min-height);
256
257
  }
257
258
 
258
- .jp-SettingsPanel .jp-SettingsHeader-Name {
259
- text-transform: inherit;
260
- font-size: var(--jp-ui-font-size1);
259
+ .jp-SettingsHeader-buttonbar {
260
+ margin: auto var(--jp-private-settingeditor-header-spacing);
261
+ grid-row: span 2;
261
262
  }
262
263
 
263
- .jp-SettingsPanel .jp-SettingsEditor {
264
- padding: 20px;
265
- }
266
-
267
- .jp-SettingsPanel .jp-SettingEditor-Switch .jp-switch {
268
- position: absolute;
269
- bottom: 0;
270
- z-index: 999;
271
- background-color: var(--jp-border-color3);
272
- border: 1px solid var(--jp-border-color1);
273
- }
274
-
275
- .jp-SettingsPanel {
276
- overflow-y: auto;
277
- height: 100%;
278
- }
279
-
280
- .jp-SettingsForm .jp-Buttonbar {
281
- display: flex;
282
- flex-direction: row;
283
- justify-content: flex-end;
284
- margin: 8px;
285
- gap: 0.5em;
286
- max-width: 800px;
287
- }
288
-
289
- .jp-SettingsForm button.jp-RestoreButton {
264
+ .jp-SettingsHeader-buttonbar > .jp-RestoreButton {
290
265
  background-color: var(--jp-warn-color-normal);
291
266
  border: 0;
292
267
  color: var(--jp-ui-inverse-font-color0);
@@ -296,6 +271,8 @@
296
271
  overflow: auto;
297
272
  }
298
273
 
274
+ /** Placeholder **/
275
+
299
276
  .jp-SettingsEditor-placeholder {
300
277
  text-align: center;
301
278
  }