@iebh/tera-fy 2.2.13 → 2.3.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.
package/api.md CHANGED
@@ -155,18 +155,20 @@
155
155
  * [Parameters][151]
156
156
  * [uiConfirm][152]
157
157
  * [Parameters][153]
158
- * [uiPanic][154]
158
+ * [uiJson][154]
159
159
  * [Parameters][155]
160
- * [uiProgress][156]
160
+ * [uiPanic][156]
161
161
  * [Parameters][157]
162
- * [uiPrompt][158]
162
+ * [uiProgress][158]
163
163
  * [Parameters][159]
164
- * [uiThrow][160]
164
+ * [uiPrompt][160]
165
165
  * [Parameters][161]
166
- * [uiWindow][162]
166
+ * [uiThrow][162]
167
167
  * [Parameters][163]
168
- * [uiSplat][164]
168
+ * [uiWindow][164]
169
169
  * [Parameters][165]
170
+ * [uiSplat][166]
171
+ * [Parameters][167]
170
172
 
171
173
  ## ProjectFile
172
174
 
@@ -177,131 +179,131 @@ A project file fetched from TERA
177
179
  The TERA compatible unique ID of the file
178
180
  NOTE: This is computed each time from the Base64 of the file path
179
181
 
180
- Type: [String][166]
182
+ Type: [String][168]
181
183
 
182
184
  ### sbId
183
185
 
184
186
  The raw Supabase UUID of the file
185
187
 
186
- Type: [String][166]
188
+ Type: [String][168]
187
189
 
188
190
  ### name
189
191
 
190
192
  Relative name path (can contain prefix directories) for the human readable file name
191
193
 
192
- Type: [String][166]
194
+ Type: [String][168]
193
195
 
194
196
  ### icon
195
197
 
196
198
  CSS class to use as the file icon
197
199
 
198
- Type: [String][166]
200
+ Type: [String][168]
199
201
 
200
202
  ### path
201
203
 
202
204
  Full path to the file
203
205
  This is also used as the unique identifier within the project
204
206
 
205
- Type: [String][166]
207
+ Type: [String][168]
206
208
 
207
209
  ### url
208
210
 
209
211
  Fully qualified URL to view / access / download the file from TERA
210
212
  This will usually open an edit UI within the TERA site
211
213
 
212
- Type: [String][166]
214
+ Type: [String][168]
213
215
 
214
216
  ### teraUrl
215
217
 
216
218
  Rewrite of the URL where the absolute URL has been removed in place of a relative path, assuming the owner project is active
217
219
  This is used to direct to the edit/view/download UI when the files project is active and is usually used in place of URL for TERA related operations
218
220
 
219
- Type: [String][166]
221
+ Type: [String][168]
220
222
 
221
223
  ### parsedName
222
224
 
223
225
  An object representing meta file parts of a file name
224
226
 
225
- Type: [Object][167]
227
+ Type: [Object][169]
226
228
 
227
229
  #### Properties
228
230
 
229
- * `basename` **[String][166]** The filename + extention (i.e. everything without directory name)
230
- * `filename` **[String][166]** The file portion of the name (basename without the extension)
231
- * `ext` **[String][166]** The extension portion of the name (always lower case)
232
- * `dirName` **[String][166]** The directory path portion of the name
231
+ * `basename` **[String][168]** The filename + extention (i.e. everything without directory name)
232
+ * `filename` **[String][168]** The file portion of the name (basename without the extension)
233
+ * `ext` **[String][168]** The extension portion of the name (always lower case)
234
+ * `dirName` **[String][168]** The directory path portion of the name
233
235
 
234
236
  ### created
235
237
 
236
238
  A date representing when the file was created
237
239
 
238
- Type: [Date][168]
240
+ Type: [Date][170]
239
241
 
240
242
  ### createdFormatted
241
243
 
242
244
  A human readable, formatted version of "created"
243
245
 
244
- Type: [String][166]
246
+ Type: [String][168]
245
247
 
246
248
  ### modified
247
249
 
248
250
  A date representing when the file was created
249
251
 
250
- Type: [Date][168]
252
+ Type: [Date][170]
251
253
 
252
254
  ### modifiedFormatted
253
255
 
254
256
  A human readable, formatted version of "modified"
255
257
 
256
- Type: [String][166]
258
+ Type: [String][168]
257
259
 
258
260
  ### accessed
259
261
 
260
262
  A date representing when the file was last accessed
261
263
 
262
- Type: [Date][168]
264
+ Type: [Date][170]
263
265
 
264
266
  ### accessedFormatted
265
267
 
266
268
  A human readable, formatted version of "accessed"
267
269
 
268
- Type: [String][166]
270
+ Type: [String][168]
269
271
 
270
272
  ### size
271
273
 
272
274
  Size, in bytes, of the file
273
275
 
274
- Type: [Number][169]
276
+ Type: [Number][171]
275
277
 
276
278
  ### sizeFormatted
277
279
 
278
280
  A human readable, formatted version of the file size
279
281
 
280
- Type: [String][166]
282
+ Type: [String][168]
281
283
 
282
284
  ### mime
283
285
 
284
286
  The associated mime type for the file
285
287
 
286
- Type: [String][166]
288
+ Type: [String][168]
287
289
 
288
290
  ### meta
289
291
 
290
292
  Additional meta information for the file
291
293
 
292
- Type: [Object][167]
294
+ Type: [Object][169]
293
295
 
294
296
  ### isFolder
295
297
 
296
298
  Whether this is a folder or not
297
299
 
298
- Type: [boolean][170]
300
+ Type: [boolean][172]
299
301
 
300
302
  ### files
301
303
 
302
304
  If it is a folder, it will have an array of files in the folder
303
305
 
304
- Type: [Array][171]<[ProjectFile][1]>
306
+ Type: [Array][173]<[ProjectFile][1]>
305
307
 
306
308
  ### getContents
307
309
 
@@ -311,9 +313,9 @@ Fetch the raw file contents as a Blob
311
313
 
312
314
  #### Parameters
313
315
 
314
- * `options` **[Object][167]?** Additioanl options to mutate behaviour
316
+ * `options` **[Object][169]?** Additioanl options to mutate behaviour
315
317
 
316
- Returns **[Promise][172]<[Blob][173]>** The eventual raw file contents as a Blob
318
+ Returns **[Promise][174]<[Blob][175]>** The eventual raw file contents as a Blob
317
319
 
318
320
  ### setContents
319
321
 
@@ -323,9 +325,9 @@ Overwrite the contents of a file with new content
323
325
 
324
326
  #### Parameters
325
327
 
326
- * `contents` **(File | [Blob][173] | [FormData][174] | [Object][167] | [Array][171])** The new file contents
328
+ * `contents` **(File | [Blob][175] | [FormData][176] | [Object][169] | [Array][173])** The new file contents
327
329
 
328
- Returns **[Promise][172]\<void>** A promise which resolves when the operation has completed
330
+ Returns **[Promise][174]\<void>** A promise which resolves when the operation has completed
329
331
 
330
332
  ### getRefs
331
333
 
@@ -333,7 +335,7 @@ Returns **[Promise][172]\<void>** A promise which resolves when the operation ha
333
335
 
334
336
  Fetch the file contents as an array of Reflib refs
335
337
 
336
- Returns **[Promise][172]<[Array][171]\<RefLibRef>>** An eventual array of RefLib references
338
+ Returns **[Promise][174]<[Array][173]\<RefLibRef>>** An eventual array of RefLib references
337
339
 
338
340
  ### setRefs
339
341
 
@@ -343,18 +345,18 @@ Overwrite the contents of a file with a new collection of Reflib refs
343
345
 
344
346
  #### Parameters
345
347
 
346
- * `refs` **[Array][171]\<RefLibRef>** Collection of references for the selected library
348
+ * `refs` **[Array][173]\<RefLibRef>** Collection of references for the selected library
347
349
 
348
- Returns **[Promise][172]\<void>** A promise which resolves when the operation has completed
350
+ Returns **[Promise][174]\<void>** A promise which resolves when the operation has completed
349
351
 
350
352
  ### serialize
351
353
 
352
- * **See**: [https://developer.mozilla.org/en-US/docs/Web/API/Web\_Workers\_API/Structured\_clone\_algorithm][175]
354
+ * **See**: [https://developer.mozilla.org/en-US/docs/Web/API/Web\_Workers\_API/Structured\_clone\_algorithm][177]
353
355
 
354
356
  Compress a file state down into a serializable entity
355
357
  By default this computes a Structured Clone which can be stringified
356
358
 
357
- Returns **[Object][167]** A Structured Clone compatible representation of this ProjectFile instance
359
+ Returns **[Object][169]** A Structured Clone compatible representation of this ProjectFile instance
358
360
 
359
361
  ### deserialize
360
362
 
@@ -364,7 +366,7 @@ as it's not included in the serialized output.
364
366
 
365
367
  #### Parameters
366
368
 
367
- * `data` **[Object][167]** An input object created via `ProjectFiles.serialize()` (MUST include a 'tera' property added manually)
369
+ * `data` **[Object][169]** An input object created via `ProjectFiles.serialize()` (MUST include a 'tera' property added manually)
368
370
 
369
371
  Returns **[ProjectFile][1]** A ProjectFile instance setup against the deserializzed data
370
372
 
@@ -376,23 +378,23 @@ Main Tera-Fy Client (class singleton) to be used in a frontend browser
376
378
 
377
379
  Various settings to configure behaviour
378
380
 
379
- Type: [Object][167]
381
+ Type: [Object][169]
380
382
 
381
383
  #### Properties
382
384
 
383
- * `session` **[String][166]** Unique session signature for this instance of TeraFy, used to sign server messages, if falsy `getEntropicString(16)` is used to populate
384
- * `devMode` **[Boolean][170]** Operate in Dev-Mode - i.e. force outer refresh when encountering an existing TeraFy instance + be more tolerent of weird iframe origins
385
- * `verbosity` **[Number][169]** Verbosity level, the higher the more chatty TeraFY will be. Set to zero to disable all `debug()` call output
385
+ * `session` **[String][168]** Unique session signature for this instance of TeraFy, used to sign server messages, if falsy `getEntropicString(16)` is used to populate
386
+ * `devMode` **[Boolean][172]** Operate in Dev-Mode - i.e. force outer refresh when encountering an existing TeraFy instance + be more tolerent of weird iframe origins
387
+ * `verbosity` **[Number][171]** Verbosity level, the higher the more chatty TeraFY will be. Set to zero to disable all `debug()` call output
386
388
  * `mode` **(`"detect"` | `"parent"` | `"child"` | `"popup"`)** How to communicate with TERA. 'parent' assumes that the parent of the current document is TERA, 'child' spawns an iFrame and uses TERA there, 'detect' tries parent and switches to `modeFallback` if communication fails
387
- * `modeFallback` **[String][166]** Method to use when all method detection fails
388
- * `modeOverrides` **[Object][167]<[Object][167]<[Function][176]>>** Functions to run when switching to specific modes, these are typically used to augment config. Called as `(config:Object)`
389
- * `modeTimeout` **[Number][169]** How long entities have in 'detect' mode to identify themselves
390
- * `siteUrl` **[String][166]** The TERA URL to connect to
391
- * `restrictOrigin` **[String][166]** URL to restrict communications to
392
- * `List` **[Array][171]<[String][166]>** of sandbox allowables for the embedded if in embed mode
393
- * `handshakeInterval` **[Number][169]** Interval in milliseconds when sanning for a handshake
394
- * `handshakeTimeout` **[Number][169]** Interval in milliseconds for when to give up trying to handshake
395
- * `debugPaths` **[Array][171]<([String][166] | [Array][171]<[String][166]>)>?** List of paths (in either dotted or array notation) to enter debugging mode if a change is detected in dev mode e.g. `{debugPaths: ['foo.bar.baz']}`. This really slows down state writes so should only be used for debugging
389
+ * `modeFallback` **[String][168]** Method to use when all method detection fails
390
+ * `modeOverrides` **[Object][169]<[Object][169]<[Function][178]>>** Functions to run when switching to specific modes, these are typically used to augment config. Called as `(config:Object)`
391
+ * `modeTimeout` **[Number][171]** How long entities have in 'detect' mode to identify themselves
392
+ * `siteUrl` **[String][168]** The TERA URL to connect to
393
+ * `restrictOrigin` **[String][168]** URL to restrict communications to
394
+ * `List` **[Array][173]<[String][168]>** of sandbox allowables for the embedded if in embed mode
395
+ * `handshakeInterval` **[Number][171]** Interval in milliseconds when sanning for a handshake
396
+ * `handshakeTimeout` **[Number][171]** Interval in milliseconds for when to give up trying to handshake
397
+ * `debugPaths` **[Array][173]<([String][168] | [Array][173]<[String][168]>)>?** List of paths (in either dotted or array notation) to enter debugging mode if a change is detected in dev mode e.g. `{debugPaths: ['foo.bar.baz']}`. This really slows down state writes so should only be used for debugging
396
398
 
397
399
  ### events
398
400
 
@@ -404,13 +406,13 @@ Type: Mitt
404
406
 
405
407
  DOMElements for this TeraFy instance
406
408
 
407
- Type: [Object][167]
409
+ Type: [Object][169]
408
410
 
409
411
  #### Properties
410
412
 
411
413
  * `el` **DOMElement** The main tera-fy div wrapper
412
414
  * `iframe` **DOMElement** The internal iFrame element (if `settings.mode == 'child'`)
413
- * `popup` **[Window][177]** The popup window context (if `settings.mode == 'popup'`)
415
+ * `popup` **[Window][179]** The popup window context (if `settings.mode == 'popup'`)
414
416
  * `stylesheet` **DOMElement** The corresponding stylesheet
415
417
 
416
418
  ### methods
@@ -418,13 +420,13 @@ Type: [Object][167]
418
420
  List of function stubs mapped from the server to here
419
421
  This array is forms the reference of `TeraFy.METHOD()` objects to provide locally which will be mapped via `TeraFy.rpc(METHOD, ...args)`
420
422
 
421
- Type: [Array][171]<[String][166]>
423
+ Type: [Array][173]<[String][168]>
422
424
 
423
425
  ### plugins
424
426
 
425
427
  Loaded plugins via Use()
426
428
 
427
- Type: [Array][171]\<TeraFyPlugin>
429
+ Type: [Array][173]\<TeraFyPlugin>
428
430
 
429
431
  ### namespaces
430
432
 
@@ -432,7 +434,7 @@ Active namespaces we are subscribed to
432
434
  Each key is the namespace name with the value as the local reactive \ observer \ object equivelent
433
435
  The key string is always of the form `${ENTITY}::${ID}` e.g. `projects:1234`
434
436
 
435
- Type: [Object][167]<[Object][167]>
437
+ Type: [Object][169]<[Object][169]>
436
438
 
437
439
  ### send
438
440
 
@@ -440,9 +442,9 @@ Send a message + wait for a response object
440
442
 
441
443
  #### Parameters
442
444
 
443
- * `message` **[Object][167]** Message object to send
445
+ * `message` **[Object][169]** Message object to send
444
446
 
445
- Returns **[Promise][172]\<any>** A promise which resolves when the operation has completed with the remote reply
447
+ Returns **[Promise][174]\<any>** A promise which resolves when the operation has completed with the remote reply
446
448
 
447
449
  ### sendRaw
448
450
 
@@ -451,7 +453,7 @@ This function does not return or wait for a reply - use `send()` for that
451
453
 
452
454
  #### Parameters
453
455
 
454
- * `message` **[Object][167]** Message object to send
456
+ * `message` **[Object][169]** Message object to send
455
457
 
456
458
  ### rpc
457
459
 
@@ -459,10 +461,10 @@ Call an RPC function in the server instance
459
461
 
460
462
  #### Parameters
461
463
 
462
- * `method` **[String][166]** The method name to call
464
+ * `method` **[String][168]** The method name to call
463
465
  * `args` **...any?** Optional arguments to pass to the function
464
466
 
465
- Returns **[Promise][172]\<any>** The resolved output of the server function
467
+ Returns **[Promise][174]\<any>** The resolved output of the server function
466
468
 
467
469
  ### acceptMessage
468
470
 
@@ -470,9 +472,9 @@ Accept an incoming message
470
472
 
471
473
  #### Parameters
472
474
 
473
- * `rawMessage` **[MessageEvent][178]** Raw message event to process
475
+ * `rawMessage` **[MessageEvent][180]** Raw message event to process
474
476
 
475
- Returns **[Promise][172]** A promise which will resolve when the message has been processed
477
+ Returns **[Promise][174]** A promise which will resolve when the message has been processed
476
478
 
477
479
  ### acceptPostboxes
478
480
 
@@ -485,22 +487,22 @@ This function can only be called once and will return the existing init() worker
485
487
 
486
488
  #### Parameters
487
489
 
488
- * `options` **[Object][167]?** Additional options to merge into `settings` via `set`
490
+ * `options` **[Object][169]?** Additional options to merge into `settings` via `set`
489
491
 
490
- Returns **[Promise][172]<[TeraFy][33]>** An eventual promise which will resovle with this terafy instance
492
+ Returns **[Promise][174]<[TeraFy][33]>** An eventual promise which will resovle with this terafy instance
491
493
 
492
494
  ### detectMode
493
495
 
494
496
  Populate `settings.mode`
495
497
  Try to communicate with a parent frame, if none assume we need to fallback to child mode
496
498
 
497
- Returns **[Promise][172]<[String][166]>** A promise which will resolve with the detected mode to use
499
+ Returns **[Promise][174]<[String][168]>** A promise which will resolve with the detected mode to use
498
500
 
499
501
  ### injectComms
500
502
 
501
503
  Find an existing active TERA server OR initalize one
502
504
 
503
- Returns **[Promise][172]** A promise which will resolve when the loading has completed and we have found a parent TERA instance or initiallized a child
505
+ Returns **[Promise][174]** A promise which will resolve when the loading has completed and we have found a parent TERA instance or initiallized a child
504
506
 
505
507
  ### handshakeLoop
506
508
 
@@ -508,20 +510,20 @@ Keep trying to handshake until the target responds
508
510
 
509
511
  #### Parameters
510
512
 
511
- * `options` **[Object][167]?** Additional options to mutate behaviour
513
+ * `options` **[Object][169]?** Additional options to mutate behaviour
512
514
 
513
515
  #### Properties
514
516
 
515
- * `handshakeInterval` **[Number][169]?** Interval in milliseconds when sanning for a handshake, defaults to global setting
516
- * `handshakeTimeout` **[Number][169]?** Interval in milliseconds for when to give up trying to handshake, defaults to global setting
517
+ * `handshakeInterval` **[Number][171]?** Interval in milliseconds when sanning for a handshake, defaults to global setting
518
+ * `handshakeTimeout` **[Number][171]?** Interval in milliseconds for when to give up trying to handshake, defaults to global setting
517
519
 
518
- Returns **[Promise][172]** A promise which will either resolve when the handshake is successful OR fail with 'TIMEOUT'
520
+ Returns **[Promise][174]** A promise which will either resolve when the handshake is successful OR fail with 'TIMEOUT'
519
521
 
520
522
  ### injectStylesheet
521
523
 
522
524
  Inject a local stylesheet to handle TERA server functionality
523
525
 
524
- Returns **[Promise][172]** A promise which will resolve when the loading has completed and we have found a parent TERA instance or initiallized a child
526
+ Returns **[Promise][174]** A promise which will resolve when the loading has completed and we have found a parent TERA instance or initiallized a child
525
527
 
526
528
  ### injectMethods
527
529
 
@@ -536,7 +538,7 @@ This function will only act if `settings.devMode` is truthy
536
538
 
537
539
  * `msg` **...any?** Output to show
538
540
  * `method` **(`"INFO"` | `"LOG"` | `"WARN"` | `"ERROR"`)** Logging method to use (optional, default `'LOG'`)
539
- * `verboseLevel` **[Number][169]** The verbosity level to trigger at. If `settings.verbosity` is lower than this, the message is ignored (optional, default `1`)
541
+ * `verboseLevel` **[Number][171]** The verbosity level to trigger at. If `settings.verbosity` is lower than this, the message is ignored (optional, default `1`)
540
542
 
541
543
  ### set
542
544
 
@@ -545,11 +547,11 @@ This function also routes 'special' keys like `devMode` to their internal handle
545
547
 
546
548
  #### Parameters
547
549
 
548
- * `key` **([String][166] | [Object][167])** Either a single setting key to set or an object to merge
550
+ * `key` **([String][168] | [Object][169])** Either a single setting key to set or an object to merge
549
551
  * `value` **any** The value to set if `key` is a string
550
- * `options` **[Object][167]?** Additional options to mutate behaviour
552
+ * `options` **[Object][169]?** Additional options to mutate behaviour
551
553
 
552
- * `options.ignoreNullish` **[Boolean][170]** If falsy, this forces the setting of undefined or null values rather than ignoring them when specifying values by string (optional, default `true`)
554
+ * `options.ignoreNullish` **[Boolean][172]** If falsy, this forces the setting of undefined or null values rather than ignoring them when specifying values by string (optional, default `true`)
553
555
 
554
556
  Returns **[TeraFy][33]** This chainable terafy instance
555
557
 
@@ -561,9 +563,9 @@ Set or merge settings - but only in dev mode and only if the value is not undefi
561
563
 
562
564
  #### Parameters
563
565
 
564
- * `key` **([String][166] | [Object][167])** Either a single setting key to set or an object to merge
566
+ * `key` **([String][168] | [Object][169])** Either a single setting key to set or an object to merge
565
567
  * `value` **any** The value to set if `key` is a string
566
- * `options` **[Object][167]?** Additional options to mutate behaviour
568
+ * `options` **[Object][169]?** Additional options to mutate behaviour
567
569
 
568
570
  Returns **[TeraFy][33]** This chainable terafy instance
569
571
 
@@ -573,8 +575,8 @@ Include a TeraFy client plugin
573
575
 
574
576
  #### Parameters
575
577
 
576
- * `source` **([Function][176] | [Object][167] | [String][166])** Either the JS module class, singleton object or URL to fetch it from. Eventually constructed as invoked as `(teraClient:TeraFy, options:Object)`
577
- * `options` **[Object][167]?** Additional options to mutate behaviour during construction (pass options to init() to intialize later options)
578
+ * `source` **([Function][178] | [Object][169] | [String][168])** Either the JS module class, singleton object or URL to fetch it from. Eventually constructed as invoked as `(teraClient:TeraFy, options:Object)`
579
+ * `options` **[Object][169]?** Additional options to mutate behaviour during construction (pass options to init() to intialize later options)
578
580
 
579
581
  Returns **[TeraFy][33]** This chainable terafy instance
580
582
 
@@ -584,8 +586,8 @@ Internal function used by use() to merge an external declared singleton against
584
586
 
585
587
  #### Parameters
586
588
 
587
- * `target` **[Object][167]** Initalied class instance to extend
588
- * `source` **[Object][167]** Initalized source object to extend from
589
+ * `target` **[Object][169]** Initalied class instance to extend
590
+ * `source` **[Object][169]** Initalized source object to extend from
589
591
 
590
592
  ### toggleDevMode
591
593
 
@@ -597,7 +599,7 @@ This function also accepts meta values:
597
599
 
598
600
  #### Parameters
599
601
 
600
- * `devModeEnabled` **(`"toggle"` | `"proxy"` | [Boolean][170])** Optional boolean to force dev mode or specify other behaviour (optional, default `'toggle'`)
602
+ * `devModeEnabled` **(`"toggle"` | `"proxy"` | [Boolean][172])** Optional boolean to force dev mode or specify other behaviour (optional, default `'toggle'`)
601
603
 
602
604
  Returns **[TeraFy][33]** This chainable terafy instance
603
605
 
@@ -608,7 +610,7 @@ This is usually because the server component wants to perform some user activity
608
610
 
609
611
  #### Parameters
610
612
 
611
- * `isFocused` **([String][166] | [Boolean][170])** Whether to fullscreen the embedded component (optional, default `'toggle'`)
613
+ * `isFocused` **([String][168] | [Boolean][172])** Whether to fullscreen the embedded component (optional, default `'toggle'`)
612
614
 
613
615
  ### getEntropicString
614
616
 
@@ -616,9 +618,9 @@ Generate random entropic character string in Base64
616
618
 
617
619
  #### Parameters
618
620
 
619
- * `maxLength` **[Number][169]** Maximum lengh of the genrated string (optional, default `32`)
621
+ * `maxLength` **[Number][171]** Maximum lengh of the genrated string (optional, default `32`)
620
622
 
621
- Returns **[String][166]**&#x20;
623
+ Returns **[String][168]**&#x20;
622
624
 
623
625
  ### selectProjectFile
624
626
 
@@ -630,7 +632,7 @@ This is an pre-requisite step for requireProject()
630
632
 
631
633
  * `options` **any?**&#x20;
632
634
 
633
- Returns **[Promise][172]** A promise which will resolve if the there is a user and they are logged in
635
+ Returns **[Promise][174]** A promise which will resolve if the there is a user and they are logged in
634
636
 
635
637
  ## mountNamespace
636
638
 
@@ -639,17 +641,17 @@ This generally creates whatever framework flavoured reactive/observer/object is
639
641
 
640
642
  ### Parameters
641
643
 
642
- * `name` **[String][166]** The alias of the namespace, this should be alphanumeric + hyphens + underscores
644
+ * `name` **[String][168]** The alias of the namespace, this should be alphanumeric + hyphens + underscores
643
645
 
644
- Returns **[Promise][172]\<Reactive>** A promise which resolves to the reactive object
646
+ Returns **[Promise][174]\<Reactive>** A promise which resolves to the reactive object
645
647
 
646
648
  ## Actual namespace mounting function designed to be overriden by plugins
647
649
 
648
650
  ### Parameters
649
651
 
650
- * `name` **[String][166]** The alias of the namespace, this should be alphanumeric + hyphens + underscores
652
+ * `name` **[String][168]** The alias of the namespace, this should be alphanumeric + hyphens + underscores
651
653
 
652
- Returns **[Promise][172]** A promise which resolves when the mount operation has completed
654
+ Returns **[Promise][174]** A promise which resolves when the mount operation has completed
653
655
 
654
656
  ## unmountNamespace
655
657
 
@@ -658,17 +660,17 @@ This function will remove the namespace from `namespaces`, cleaning up any memor
658
660
 
659
661
  ### Parameters
660
662
 
661
- * `name` **[String][166]** The name of the namespace to unmount
663
+ * `name` **[String][168]** The name of the namespace to unmount
662
664
 
663
- Returns **[Promise][172]** A promise which resolves when the operation has completed
665
+ Returns **[Promise][174]** A promise which resolves when the operation has completed
664
666
 
665
667
  ## Actual namespace unmounting function designed to be overriden by plugins
666
668
 
667
669
  ### Parameters
668
670
 
669
- * `name` **[String][166]** The name of the namespace to unmount
671
+ * `name` **[String][168]** The name of the namespace to unmount
670
672
 
671
- Returns **[Promise][172]** A promise which resolves when the operation has completed
673
+ Returns **[Promise][174]** A promise which resolves when the operation has completed
672
674
 
673
675
  ## handshake
674
676
 
@@ -676,9 +678,9 @@ Return basic server information as a form of validation
676
678
 
677
679
  ### Properties
678
680
 
679
- * `date` **[Date][168]** Server date
681
+ * `date` **[Date][170]** Server date
680
682
 
681
- Returns **[Promise][172]<[Object][167]>** Basic promise result
683
+ Returns **[Promise][174]<[Object][169]>** Basic promise result
682
684
 
683
685
  ## setServerVerbosity
684
686
 
@@ -686,7 +688,7 @@ RPC callback to set the server verbostiy level
686
688
 
687
689
  ### Parameters
688
690
 
689
- * `verbosity` **[Number][169]** The desired server verbosity level
691
+ * `verbosity` **[Number][171]** The desired server verbosity level
690
692
 
691
693
  ## User
692
694
 
@@ -694,22 +696,22 @@ User / active session within TERA
694
696
 
695
697
  ### Properties
696
698
 
697
- * `id` **[String][166]** Unique identifier of the user
698
- * `email` **[String][166]** The email address of the current user
699
- * `name` **[String][166]** The provided full name of the user
700
- * `isSubscribed` **[Boolean][170]** Whether the active user has a TERA subscription
699
+ * `id` **[String][168]** Unique identifier of the user
700
+ * `email` **[String][168]** The email address of the current user
701
+ * `name` **[String][168]** The provided full name of the user
702
+ * `isSubscribed` **[Boolean][172]** Whether the active user has a TERA subscription
701
703
 
702
704
  ## getUser
703
705
 
704
706
  Fetch the current session user
705
707
 
706
- Returns **[Promise][172]<[User][90]>** The current logged in user or null if none
708
+ Returns **[Promise][174]<[User][90]>** The current logged in user or null if none
707
709
 
708
710
  ## getCredentials
709
711
 
710
712
  Provide an object of credentials for 3rd party services like Firebase/Supabase
711
713
 
712
- Returns **[Object][167]** An object containing 3rd party service credentials
714
+ Returns **[Object][169]** An object containing 3rd party service credentials
713
715
 
714
716
  ## requireUser
715
717
 
@@ -719,11 +721,11 @@ This is an pre-requisite step for requireProject()
719
721
 
720
722
  ### Parameters
721
723
 
722
- * `options` **[Object][167]?** Additional options to mutate behaviour
724
+ * `options` **[Object][169]?** Additional options to mutate behaviour
723
725
 
724
- * `options.forceRetry` **[Boolean][170]** Forcabily try to refresh the user state (optional, default `false`)
726
+ * `options.forceRetry` **[Boolean][172]** Forcabily try to refresh the user state (optional, default `false`)
725
727
 
726
- Returns **[Promise][172]<[User][90]>** The current logged in user or null if none
728
+ Returns **[Promise][174]<[User][90]>** The current logged in user or null if none
727
729
 
728
730
  ## Project
729
731
 
@@ -733,13 +735,13 @@ Project entry within TERA
733
735
 
734
736
  Get the currently active project, if any
735
737
 
736
- Returns **[Promise][172]<([Project][96] | null)>** The currently active project, if any
738
+ Returns **[Promise][174]<([Project][96] | null)>** The currently active project, if any
737
739
 
738
740
  ## getProjects
739
741
 
740
742
  Get a list of projects the current session user has access to
741
743
 
742
- Returns **[Promise][172]<[Array][171]<[Project][96]>>** Collection of projects the user has access to
744
+ Returns **[Promise][174]<[Array][173]<[Project][96]>>** Collection of projects the user has access to
743
745
 
744
746
  ## setActiveProject
745
747
 
@@ -747,7 +749,7 @@ Set the currently active project within TERA
747
749
 
748
750
  ### Parameters
749
751
 
750
- * `project` **([Object][167] | [String][166])** The project to set as active - either the full Project object or its ID
752
+ * `project` **([Object][169] | [String][168])** The project to set as active - either the full Project object or its ID
751
753
 
752
754
  ## requireProject
753
755
 
@@ -756,14 +758,14 @@ Note that this function will percist in asking the uesr even if they try to canc
756
758
 
757
759
  ### Parameters
758
760
 
759
- * `options` **[Object][167]?** Additional options to mutate behaviour
761
+ * `options` **[Object][169]?** Additional options to mutate behaviour
760
762
 
761
- * `options.autoSetActiveProject` **[Boolean][170]** After selecting a project set that project as active in TERA (optional, default `true`)
762
- * `options.title` **[String][166]** The title of the dialog to display (optional, default `"Select a project to work with"`)
763
- * `options.noSelectTitle` **[String][166]** Dialog title when warning the user they need to select something (optional, default `'Select project'`)
764
- * `options.noSelectBody` **[String][166]** Dialog body when warning the user they need to select something (optional, default `'A project needs to be selected to continue'`)
763
+ * `options.autoSetActiveProject` **[Boolean][172]** After selecting a project set that project as active in TERA (optional, default `true`)
764
+ * `options.title` **[String][168]** The title of the dialog to display (optional, default `"Select a project to work with"`)
765
+ * `options.noSelectTitle` **[String][168]** Dialog title when warning the user they need to select something (optional, default `'Select project'`)
766
+ * `options.noSelectBody` **[String][168]** Dialog body when warning the user they need to select something (optional, default `'A project needs to be selected to continue'`)
765
767
 
766
- Returns **[Promise][172]<[Project][96]>** The active project
768
+ Returns **[Promise][174]<[Project][96]>** The active project
767
769
 
768
770
  ## selectProject
769
771
 
@@ -771,13 +773,13 @@ Prompt the user to select a project from those available
771
773
 
772
774
  ### Parameters
773
775
 
774
- * `options` **[Object][167]?** Additional options to mutate behaviour
776
+ * `options` **[Object][169]?** Additional options to mutate behaviour
775
777
 
776
- * `options.title` **[String][166]** The title of the dialog to display (optional, default `"Select a project to work with"`)
777
- * `options.allowCancel` **[Boolean][170]** Advertise cancelling the operation, the dialog can still be cancelled by closing it (optional, default `true`)
778
- * `options.setActive` **[Boolean][170]** Also set the project as active when selected (optional, default `false`)
778
+ * `options.title` **[String][168]** The title of the dialog to display (optional, default `"Select a project to work with"`)
779
+ * `options.allowCancel` **[Boolean][172]** Advertise cancelling the operation, the dialog can still be cancelled by closing it (optional, default `true`)
780
+ * `options.setActive` **[Boolean][172]** Also set the project as active when selected (optional, default `false`)
779
781
 
780
- Returns **[Promise][172]<[Project][96]>** The active project
782
+ Returns **[Promise][174]<[Project][96]>** The active project
781
783
 
782
784
  ## getNamespace
783
785
 
@@ -786,9 +788,9 @@ This can be used for simpler apps which don't have their own reactive / observer
786
788
 
787
789
  ### Parameters
788
790
 
789
- * `name` **[String][166]** The alias of the namespace, this should be alphanumeric + hyphens + underscores
791
+ * `name` **[String][168]** The alias of the namespace, this should be alphanumeric + hyphens + underscores
790
792
 
791
- Returns **[Promise][172]<[Object][167]>** A promise which resolves to the namespace POJO state
793
+ Returns **[Promise][174]<[Object][169]>** A promise which resolves to the namespace POJO state
792
794
 
793
795
  ## setNamespace
794
796
 
@@ -797,13 +799,13 @@ This can be used for simpler apps which don't have their own reactive / observer
797
799
 
798
800
  ### Parameters
799
801
 
800
- * `name` **[String][166]** The name of the namespace
801
- * `state` **[Object][167]** The state to merge
802
- * `options` **[Object][167]?** Additional options to mutate behaviour
802
+ * `name` **[String][168]** The name of the namespace
803
+ * `state` **[Object][169]** The state to merge
804
+ * `options` **[Object][169]?** Additional options to mutate behaviour
803
805
 
804
806
  * `options.method` **(`"merge"` | `"set"`)** How to handle the state. 'merge' (merge a partial state over the existing namespace state), 'set' (completely overwrite the existing namespace) (optional, default `'merge'`)
805
807
 
806
- Returns **[Promise][172]<[Object][167]>** A promise which resolves to the namespace POJO state
808
+ Returns **[Promise][174]<[Object][169]>** A promise which resolves to the namespace POJO state
807
809
 
808
810
  ## listNamespaces
809
811
 
@@ -811,9 +813,9 @@ Return a list of namespaces available to the current project
811
813
 
812
814
  ### Properties
813
815
 
814
- * `name` **[String][166]** The name of the namespace
816
+ * `name` **[String][168]** The name of the namespace
815
817
 
816
- Returns **[Promise][172]<[Array][171]<[Object][167]>>** Collection of available namespaces for the current project
818
+ Returns **[Promise][174]<[Array][173]<[Object][169]>>** Collection of available namespaces for the current project
817
819
 
818
820
  ## getProjectState
819
821
 
@@ -821,12 +823,12 @@ Return the current, full snapshot state of the active project
821
823
 
822
824
  ### Parameters
823
825
 
824
- * `options` **[Object][167]?** Additional options to mutate behaviour
826
+ * `options` **[Object][169]?** Additional options to mutate behaviour
825
827
 
826
- * `options.autoRequire` **[Boolean][170]** Run `requireProject()` automatically before continuing (optional, default `true`)
827
- * `Paths` **[Array][171]<[String][166]>** to subscribe to e.g. \['/users/'],
828
+ * `options.autoRequire` **[Boolean][172]** Run `requireProject()` automatically before continuing (optional, default `true`)
829
+ * `Paths` **[Array][173]<[String][168]>** to subscribe to e.g. \['/users/'],
828
830
 
829
- Returns **[Promise][172]<[Object][167]>** The current project state snapshot
831
+ Returns **[Promise][174]<[Object][169]>** The current project state snapshot
830
832
 
831
833
  ## setProjectState
832
834
 
@@ -838,13 +840,13 @@ Paths can be any valid Lodash.set() value such as:
838
840
 
839
841
  ### Parameters
840
842
 
841
- * `path` **([String][166] | [Array][171]<[String][166]>)** The sub-path within the project state to set
843
+ * `path` **([String][168] | [Array][173]<[String][168]>)** The sub-path within the project state to set
842
844
  * `value` **any** The value to set
843
- * `options` **[Object][167]?** Additional options to mutate behaviour
845
+ * `options` **[Object][169]?** Additional options to mutate behaviour
844
846
 
845
- * `options.save` **[Boolean][170]** Save the changes to the server immediately, disable to queue up multiple writes (optional, default `true`)
847
+ * `options.save` **[Boolean][172]** Save the changes to the server immediately, disable to queue up multiple writes (optional, default `true`)
846
848
 
847
- Returns **[Promise][172]** A promise which resolves when the operation has been dispatched to the server
849
+ Returns **[Promise][174]** A promise which resolves when the operation has been dispatched to the server
848
850
 
849
851
  ## setProjectStateDefaults
850
852
 
@@ -854,18 +856,18 @@ Set a nested value within the project state - just like `setProjectState()` - bu
854
856
 
855
857
  ### Parameters
856
858
 
857
- * `path` **([String][166] | [Array][171]<[String][166]>)** The sub-path within the project state to set
859
+ * `path` **([String][168] | [Array][173]<[String][168]>)** The sub-path within the project state to set
858
860
  * `value` **any** The value to set
859
- * `options` **[Object][167]?** Additional options to mutate behaviour, see setProjectState() for the full list of supported options
861
+ * `options` **[Object][169]?** Additional options to mutate behaviour, see setProjectState() for the full list of supported options
860
862
 
861
- Returns **[Promise][172]<[Boolean][170]>** A promise which resolves to whether any changes were made - True if defaults were applied, false otherwise
863
+ Returns **[Promise][174]<[Boolean][172]>** A promise which resolves to whether any changes were made - True if defaults were applied, false otherwise
862
864
 
863
865
  ## setProjectStateRefresh
864
866
 
865
867
  Force refetching the remote project state into local
866
868
  This is only ever needed when saving large quantities of data that need to be immediately available
867
869
 
868
- Returns **[Promise][172]** A promise which resolves when the operation has completed
870
+ Returns **[Promise][174]** A promise which resolves when the operation has completed
869
871
 
870
872
  ## FileFilters
871
873
 
@@ -873,10 +875,10 @@ Data structure for a file filter
873
875
 
874
876
  ### Properties
875
877
 
876
- * `library` **[Boolean][170]?** Restrict to library files only
877
- * `filename` **[String][166]?** CSV of @momsfriendlydevco/match expressions to filter the filename by (filenames are the basename sans extension)
878
- * `basename` **[String][166]?** CSV of @momsfriendlydevco/match expressions to filter the basename by
879
- * `ext` **[String][166]?** CSV of @momsfriendlydevco/match expressions to filter the file extension by
878
+ * `library` **[Boolean][172]?** Restrict to library files only
879
+ * `filename` **[String][168]?** CSV of @momsfriendlydevco/match expressions to filter the filename by (filenames are the basename sans extension)
880
+ * `basename` **[String][168]?** CSV of @momsfriendlydevco/match expressions to filter the basename by
881
+ * `ext` **[String][168]?** CSV of @momsfriendlydevco/match expressions to filter the file extension by
880
882
 
881
883
  ## selectProjectFile
882
884
 
@@ -884,22 +886,22 @@ Prompt the user to select a library to operate on
884
886
 
885
887
  ### Parameters
886
888
 
887
- * `options` **[Object][167]?** Additional options to mutate behaviour
889
+ * `options` **[Object][169]?** Additional options to mutate behaviour
888
890
 
889
- * `options.title` **[String][166]** The title of the dialog to display (optional, default `"Select a file"`)
890
- * `options.hint` **([String][166] | [Array][171]<[String][166]>)?** Hints to identify the file to select in array order of preference
891
- * `options.save` **[Boolean][170]** Set to truthy if saving a new file, UI will adjust to allowing overwrite OR new file name input (optional, default `false`)
892
- * `options.saveFilename` **[String][166]?** File name to save as, if omitted the hinting system is used otherwise 'My File.unknown' is assumed
891
+ * `options.title` **[String][168]** The title of the dialog to display (optional, default `"Select a file"`)
892
+ * `options.hint` **([String][168] | [Array][173]<[String][168]>)?** Hints to identify the file to select in array order of preference
893
+ * `options.save` **[Boolean][172]** Set to truthy if saving a new file, UI will adjust to allowing overwrite OR new file name input (optional, default `false`)
894
+ * `options.saveFilename` **[String][168]?** File name to save as, if omitted the hinting system is used otherwise 'My File.unknown' is assumed
893
895
  * `options.filters` **[FileFilters][118]?** Optional file filters
894
- * `options.allowUpload` **[Boolean][170]** Allow uploading new files (optional, default `true`)
895
- * `options.allowRefresh` **[Boolean][170]** Allow the user to manually refresh the file list (optional, default `true`)
896
- * `options.allowDownloadZip` **[Boolean][170]** Allow the user to download a Zip of all files (optional, default `true`)
897
- * `options.allowCancel` **[Boolean][170]** Allow cancelling the operation. Will throw `'CANCEL'` as the promise rejection if acationed (optional, default `true`)
898
- * `options.autoRequire` **[Boolean][170]** Run `requireProject()` automatically before continuing (optional, default `true`)
899
- * `options.showHiddenFiles` **[Boolean][170]** Whether hidden data.json files should be shown (optional, default `false`)
896
+ * `options.allowUpload` **[Boolean][172]** Allow uploading new files (optional, default `true`)
897
+ * `options.allowRefresh` **[Boolean][172]** Allow the user to manually refresh the file list (optional, default `true`)
898
+ * `options.allowDownloadZip` **[Boolean][172]** Allow the user to download a Zip of all files (optional, default `true`)
899
+ * `options.allowCancel` **[Boolean][172]** Allow cancelling the operation. Will throw `'CANCEL'` as the promise rejection if acationed (optional, default `true`)
900
+ * `options.autoRequire` **[Boolean][172]** Run `requireProject()` automatically before continuing (optional, default `true`)
901
+ * `options.showHiddenFiles` **[Boolean][172]** Whether hidden data.json files should be shown (optional, default `false`)
900
902
  * `options.filter` **[FileFilters][118]?** Optional file filters
901
903
 
902
- Returns **[Promise][172]<[ProjectFile][1]>** The eventually selected file, if in save mode new files are created as stubs
904
+ Returns **[Promise][174]<[ProjectFile][1]>** The eventually selected file, if in save mode new files are created as stubs
903
905
 
904
906
  ## getProjectFiles
905
907
 
@@ -907,13 +909,13 @@ Fetch the files associated with a given project
907
909
 
908
910
  ### Parameters
909
911
 
910
- * `options` **[Object][167]** Options which mutate behaviour
912
+ * `options` **[Object][169]** Options which mutate behaviour
911
913
 
912
- * `options.autoRequire` **[Boolean][170]** Run `requireProject()` automatically before continuing (optional, default `true`)
913
- * `options.lazy` **[Boolean][170]** If true, use the fastest method to retrieve the file list such as the cache. If false, force a refresh each time (optional, default `true`)
914
- * `options.meta` **[Boolean][170]** Pull meta information for each file entity (optional, default `true`)
914
+ * `options.autoRequire` **[Boolean][172]** Run `requireProject()` automatically before continuing (optional, default `true`)
915
+ * `options.lazy` **[Boolean][172]** If true, use the fastest method to retrieve the file list such as the cache. If false, force a refresh each time (optional, default `true`)
916
+ * `options.meta` **[Boolean][172]** Pull meta information for each file entity (optional, default `true`)
915
917
 
916
- Returns **[Promise][172]<[Array][171]<[ProjectFile][1]>>** A collection of project files for the given project
918
+ Returns **[Promise][174]<[Array][173]<[ProjectFile][1]>>** A collection of project files for the given project
917
919
 
918
920
  ## getProjectFileContents
919
921
 
@@ -921,8 +923,8 @@ Fetch the raw contents of a file by its ID
921
923
 
922
924
  ### Parameters
923
925
 
924
- * `id` **[String][166]?** File ID to retrieve the contents of
925
- * `options` **[Object][167]?** Additioanl options to mutate behaviour
926
+ * `id` **[String][168]?** File ID to retrieve the contents of
927
+ * `options` **[Object][169]?** Additioanl options to mutate behaviour
926
928
 
927
929
  * `options.format` **(`"blob"` | `"json"`)** The format to retrieve the file in (optional, default `'blob'`)
928
930
 
@@ -934,13 +936,13 @@ Fetch a project file by its name
934
936
 
935
937
  ### Parameters
936
938
 
937
- * `name` **[String][166]** The file name (or path if inside a directory)
938
- * `options` **([Object][167] | [String][166])?** Additional options to mutate behaviour, if a string is given `options.subkey` is assumed
939
+ * `name` **[String][168]** The file name (or path if inside a directory)
940
+ * `options` **([Object][169] | [String][168])?** Additional options to mutate behaviour, if a string is given `options.subkey` is assumed
939
941
 
940
- * `options.subkey` **[String][166]?** If specified only the extracted subkey is returned rather than the full object
941
- * `options.cache` **[Boolean][170]** Use the existing file cache if possible, set to false to force a refresh of files from the server first (optional, default `true`)
942
+ * `options.subkey` **[String][168]?** If specified only the extracted subkey is returned rather than the full object
943
+ * `options.cache` **[Boolean][172]** Use the existing file cache if possible, set to false to force a refresh of files from the server first (optional, default `true`)
942
944
 
943
- Returns **[Promise][172]<[ProjectFile][1]>** The eventual fetched ProjectFile (or requested subkey)
945
+ Returns **[Promise][174]<[ProjectFile][1]>** The eventual fetched ProjectFile (or requested subkey)
944
946
 
945
947
  ## createProjectFile
946
948
 
@@ -949,9 +951,9 @@ This creates an empty file which can then be written to
949
951
 
950
952
  ### Parameters
951
953
 
952
- * `name` **[String][166]** The name + relative directory path component
954
+ * `name` **[String][168]** The name + relative directory path component
953
955
 
954
- Returns **[Promise][172]<[ProjectFile][1]>** The eventual ProjectFile created
956
+ Returns **[Promise][174]<[ProjectFile][1]>** The eventual ProjectFile created
955
957
 
956
958
  ## moveProjectFile
957
959
 
@@ -960,17 +962,17 @@ The file's unique ID (UUID) remains the same, but its 'name' (relative path) and
960
962
 
961
963
  ### Parameters
962
964
 
963
- * `sourceId` **[String][166]** The unique ID (UUID) of the file to move.
964
- * `newName` **[String][166]** The new relative name for the file (e.g., "documents/report-final.pdf" or "image.png").
965
+ * `sourceId` **[String][168]** The unique ID (UUID) of the file to move.
966
+ * `newName` **[String][168]** The new relative name for the file (e.g., "documents/report-final.pdf" or "image.png").
965
967
  This path is relative to the project's root file directory.
966
- * `options` **[Object][167]?** Additional options to mutate behaviour.
968
+ * `options` **[Object][169]?** Additional options to mutate behaviour.
967
969
 
968
- * `options.autoRequire` **[Boolean][170]** Run `requireProject()` automatically before continuing. (optional, default `true`)
969
- * `options.overwrite` **[Boolean][170]** If true (default), moving a file to a `newName` that already exists will overwrite the existing file.
970
+ * `options.autoRequire` **[Boolean][172]** Run `requireProject()` automatically before continuing. (optional, default `true`)
971
+ * `options.overwrite` **[Boolean][172]** If true (default), moving a file to a `newName` that already exists will overwrite the existing file.
970
972
  This aligns with the default behavior of the underlying Supabase storage `move` operation.
971
973
  If set to false, the function would ideally check and prevent overwrite, but current implementation relies on underlying storage behavior. (optional, default `true`)
972
974
 
973
- Returns **[Promise][172]<([ProjectFile][1] | null)>** A promise which resolves to the updated ProjectFile object for the moved file if found after the operation,
975
+ Returns **[Promise][174]<([ProjectFile][1] | null)>** A promise which resolves to the updated ProjectFile object for the moved file if found after the operation,
974
976
  or null if the file could not be located post-move (e.g., if its ID changed unexpectedly or it was deleted).
975
977
 
976
978
  ## deleteProjectFile
@@ -979,9 +981,9 @@ Remove a project file by its ID
979
981
 
980
982
  ### Parameters
981
983
 
982
- * `id` **[String][166]** The File ID to remove
984
+ * `id` **[String][168]** The File ID to remove
983
985
 
984
- Returns **[Promise][172]** A promise which resolves when the operation has completed
986
+ Returns **[Promise][174]** A promise which resolves when the operation has completed
985
987
 
986
988
  ## setProjectFileContents
987
989
 
@@ -989,18 +991,18 @@ Save (or overwrite) a file within a project
989
991
 
990
992
  ### Parameters
991
993
 
992
- * `id` **([String][166] | [ProjectFile][1])?** ProjectFile or ID of the same to overwrite, if omitted a file is prompted for
993
- * `contents` **(File | [Blob][173] | [FormData][174] | [Object][167] | [Array][171])** The new file contents
994
- * `options` **[Object][167]?** Additional options to mutate behaviour
994
+ * `id` **([String][168] | [ProjectFile][1])?** ProjectFile or ID of the same to overwrite, if omitted a file is prompted for
995
+ * `contents` **(File | [Blob][175] | [FormData][176] | [Object][169] | [Array][173])** The new file contents
996
+ * `options` **[Object][169]?** Additional options to mutate behaviour
995
997
 
996
- * `options.id` **([String][166] | [ProjectFile][1])?** Alternate method to specify the file ID to save as, if omitted one will be prompted for
997
- * `options.autoRequire` **[Boolean][170]** Run `requireProject()` automatically before continuing (optional, default `true`)
998
- * `options.hint` **([String][166] | [Array][171]<[String][166]>)?** Hint(s) to store against the library. Generally corresponds to the current operation being performed - e.g. 'deduped'
999
- * `options.filename` **[String][166]?** Suggested filename if `id` is unspecified
1000
- * `options.title` **[String][166]** Dialog title if `id` is unspecified and a prompt is necessary (optional, default `'Save citation library'`)
1001
- * `options.meta` **[Object][167]?** Optional meta data to merge into the file data
998
+ * `options.id` **([String][168] | [ProjectFile][1])?** Alternate method to specify the file ID to save as, if omitted one will be prompted for
999
+ * `options.autoRequire` **[Boolean][172]** Run `requireProject()` automatically before continuing (optional, default `true`)
1000
+ * `options.hint` **([String][168] | [Array][173]<[String][168]>)?** Hint(s) to store against the library. Generally corresponds to the current operation being performed - e.g. 'deduped'
1001
+ * `options.filename` **[String][168]?** Suggested filename if `id` is unspecified
1002
+ * `options.title` **[String][168]** Dialog title if `id` is unspecified and a prompt is necessary (optional, default `'Save citation library'`)
1003
+ * `options.meta` **[Object][169]?** Optional meta data to merge into the file data
1002
1004
 
1003
- Returns **[Promise][172]** A promise which will resolve when the write operation has completed
1005
+ Returns **[Promise][174]** A promise which will resolve when the write operation has completed
1004
1006
 
1005
1007
  ## createProjectFolder
1006
1008
 
@@ -1010,16 +1012,16 @@ This operation is idempotent: if the folder (via its placeholder) already exists
1010
1012
 
1011
1013
  ### Parameters
1012
1014
 
1013
- * `folderPath` **[String][166]** The relative path of the folder to create (e.g., "myDocuments/reports").
1014
- * `options` **[Object][167]?** Additional options.
1015
+ * `folderPath` **[String][168]** The relative path of the folder to create (e.g., "myDocuments/reports").
1016
+ * `options` **[Object][169]?** Additional options.
1015
1017
 
1016
- * `options.autoRequire` **[Boolean][170]** Automatically run `requireProject()` to ensure an active project context. (optional, default `true`)
1018
+ * `options.autoRequire` **[Boolean][172]** Automatically run `requireProject()` to ensure an active project context. (optional, default `true`)
1017
1019
 
1018
1020
  <!---->
1019
1021
 
1020
- * Throws **[Error][179]** If no project is active (and autoRequire is false), or if folderPath is invalid, or if the creation fails.
1022
+ * Throws **[Error][181]** If no project is active (and autoRequire is false), or if folderPath is invalid, or if the creation fails.
1021
1023
 
1022
- Returns **[Promise][172]\<void>** A promise that resolves when the folder is created or ensured.
1024
+ Returns **[Promise][174]\<void>** A promise that resolves when the folder is created or ensured.
1023
1025
 
1024
1026
  ## deleteProjectFolder
1025
1027
 
@@ -1028,16 +1030,16 @@ This involves listing all files under the given folder path (prefix) and removin
1028
1030
 
1029
1031
  ### Parameters
1030
1032
 
1031
- * `folderPath` **[String][166]** The relative path of the folder to delete (e.g., "myDocuments/reports").
1032
- * `options` **[Object][167]?** Additional options.
1033
+ * `folderPath` **[String][168]** The relative path of the folder to delete (e.g., "myDocuments/reports").
1034
+ * `options` **[Object][169]?** Additional options.
1033
1035
 
1034
- * `options.autoRequire` **[Boolean][170]** Automatically run `requireProject()` to ensure an active project context. (optional, default `true`)
1036
+ * `options.autoRequire` **[Boolean][172]** Automatically run `requireProject()` to ensure an active project context. (optional, default `true`)
1035
1037
 
1036
1038
  <!---->
1037
1039
 
1038
- * Throws **[Error][179]** If no project is active (and autoRequire is false), or if folderPath is invalid, or if deletion fails.
1040
+ * Throws **[Error][181]** If no project is active (and autoRequire is false), or if folderPath is invalid, or if deletion fails.
1039
1041
 
1040
- Returns **[Promise][172]\<null>** A promise that resolves with null when the folder and its contents are deleted.
1042
+ Returns **[Promise][174]\<null>** A promise that resolves with null when the folder and its contents are deleted.
1041
1043
 
1042
1044
  ## selectProjectLibrary
1043
1045
 
@@ -1045,19 +1047,19 @@ Prompt the user to select a library to operate on and return a array of referenc
1045
1047
 
1046
1048
  ### Parameters
1047
1049
 
1048
- * `options` **[Object][167]?** Additional options to mutate behaviour
1050
+ * `options` **[Object][169]?** Additional options to mutate behaviour
1049
1051
 
1050
- * `options.title` **[String][166]** The title of the dialog to display (optional, default `"Select a citation library"`)
1051
- * `options.hint` **([String][166] | [Array][171]<[String][166]>)?** Hints to identify the library to select in array order of preference. Generally corresponds to the previous stage - e.g. 'deduped', 'review1', 'review2', 'dedisputed'
1052
- * `options.allowUpload` **[Boolean][170]** Allow uploading new files (optional, default `true`)
1053
- * `options.allowRefresh` **[Boolean][170]** Allow the user to manually refresh the file list (optional, default `true`)
1054
- * `options.allowDownloadZip` **[Boolean][170]** Allow the user to download a Zip of all files (optional, default `true`)
1055
- * `options.allowCancel` **[Boolean][170]** Allow cancelling the operation. Will throw `'CANCEL'` as the promise rejection if acationed (optional, default `true`)
1056
- * `options.autoRequire` **[Boolean][170]** Run `requireProject()` automatically before continuing (optional, default `true`)
1052
+ * `options.title` **[String][168]** The title of the dialog to display (optional, default `"Select a citation library"`)
1053
+ * `options.hint` **([String][168] | [Array][173]<[String][168]>)?** Hints to identify the library to select in array order of preference. Generally corresponds to the previous stage - e.g. 'deduped', 'review1', 'review2', 'dedisputed'
1054
+ * `options.allowUpload` **[Boolean][172]** Allow uploading new files (optional, default `true`)
1055
+ * `options.allowRefresh` **[Boolean][172]** Allow the user to manually refresh the file list (optional, default `true`)
1056
+ * `options.allowDownloadZip` **[Boolean][172]** Allow the user to download a Zip of all files (optional, default `true`)
1057
+ * `options.allowCancel` **[Boolean][172]** Allow cancelling the operation. Will throw `'CANCEL'` as the promise rejection if acationed (optional, default `true`)
1058
+ * `options.autoRequire` **[Boolean][172]** Run `requireProject()` automatically before continuing (optional, default `true`)
1057
1059
  * `options.filters` **[FileFilters][118]?** Optional file filters, defaults to citation library selection only
1058
1060
  * `options` **...any?** Additional options - see `getProjectLibrary()`
1059
1061
 
1060
- Returns **[Promise][172]<[Array][171]\<Ref>>** A collection of references from the selected file
1062
+ Returns **[Promise][174]<[Array][173]\<Ref>>** A collection of references from the selected file
1061
1063
 
1062
1064
  ## getProjectLibrary
1063
1065
 
@@ -1065,15 +1067,15 @@ Fetch + convert a project file into a library of citations
1065
1067
 
1066
1068
  ### Parameters
1067
1069
 
1068
- * `id` **[String][166]** File ID to read
1069
- * `options` **[Object][167]?** Additional options to mutate behaviour
1070
+ * `id` **[String][168]** File ID to read
1071
+ * `options` **[Object][169]?** Additional options to mutate behaviour
1070
1072
 
1071
- * `options.format` **[String][166]** Format for the file. ENUM: 'pojo' (return a parsed JS collection), 'blob' (raw JS Blob object), 'file' (named JS File object) (optional, default `'json'`)
1072
- * `options.autoRequire` **[Boolean][170]** Run `requireProject()` automatically before continuing (optional, default `true`)
1073
- * `options.filter` **[Function][176]?** Optional async file filter, called each time as `(File:ProjectFile)`
1074
- * `options.find` **[Function][176]?** Optional async final stage file filter to reduce all candidates down to one subject file
1073
+ * `options.format` **[String][168]** Format for the file. ENUM: 'pojo' (return a parsed JS collection), 'blob' (raw JS Blob object), 'file' (named JS File object) (optional, default `'json'`)
1074
+ * `options.autoRequire` **[Boolean][172]** Run `requireProject()` automatically before continuing (optional, default `true`)
1075
+ * `options.filter` **[Function][178]?** Optional async file filter, called each time as `(File:ProjectFile)`
1076
+ * `options.find` **[Function][178]?** Optional async final stage file filter to reduce all candidates down to one subject file
1075
1077
 
1076
- Returns **([Promise][172]<[Array][171]\<Ref>> | [Promise][172]\<any>)** A collection of references (default bevahiour) or a whatever format was requested
1078
+ Returns **([Promise][174]<[Array][173]\<Ref>> | [Promise][174]\<any>)** A collection of references (default bevahiour) or a whatever format was requested
1077
1079
 
1078
1080
  ## setProjectLibrary
1079
1081
 
@@ -1081,33 +1083,33 @@ Save back a citation library from some input
1081
1083
 
1082
1084
  ### Parameters
1083
1085
 
1084
- * `id` **[String][166]?** File ID to save back to, if omitted a file will be prompted for
1085
- * `refs` **([Array][171]\<RefLibRef> | [Blob][173] | File)?** Collection of references for the selected library or the raw Blob/File
1086
- * `options` **[Object][167]?** Additional options to mutate behaviour
1086
+ * `id` **[String][168]?** File ID to save back to, if omitted a file will be prompted for
1087
+ * `refs` **([Array][173]\<RefLibRef> | [Blob][175] | File)?** Collection of references for the selected library or the raw Blob/File
1088
+ * `options` **[Object][169]?** Additional options to mutate behaviour
1087
1089
 
1088
- * `options.id` **[String][166]?** Alternate method to specify the file ID to save as, if omitted one will be prompted for
1089
- * `options.refs` **([Array][171]\<RefLibRef> | [Blob][173] | File)?** Alternate method to specify the refs to save as an array or raw Blob/File
1090
- * `options.format` **[String][166]** Input format used. ENUM: 'pojo' (return a parsed JS collection), 'blob' (raw JS Blob object), 'file' (named JS File object) (optional, default `'json'`)
1091
- * `options.autoRequire` **[Boolean][170]** Run `requireProject()` automatically before continuing (optional, default `true`)
1092
- * `options.hint` **[String][166]?** Hint to store against the library. Generally corresponds to the current operation being performed - e.g. 'deduped'
1093
- * `options.filename` **[String][166]?** Suggested filename if `id` is unspecified
1094
- * `options.title` **[String][166]** Dialog title if `id` is unspecified and a prompt is necessary (optional, default `'Save citation library'`)
1095
- * `options.overwrite` **[Boolean][170]** Allow existing file upsert (optional, default `true`)
1096
- * `options.meta` **[Object][167]?** Optional meta data to merge into the file data
1090
+ * `options.id` **[String][168]?** Alternate method to specify the file ID to save as, if omitted one will be prompted for
1091
+ * `options.refs` **([Array][173]\<RefLibRef> | [Blob][175] | File)?** Alternate method to specify the refs to save as an array or raw Blob/File
1092
+ * `options.format` **[String][168]** Input format used. ENUM: 'pojo' (return a parsed JS collection), 'blob' (raw JS Blob object), 'file' (named JS File object) (optional, default `'json'`)
1093
+ * `options.autoRequire` **[Boolean][172]** Run `requireProject()` automatically before continuing (optional, default `true`)
1094
+ * `options.hint` **[String][168]?** Hint to store against the library. Generally corresponds to the current operation being performed - e.g. 'deduped'
1095
+ * `options.filename` **[String][168]?** Suggested filename if `id` is unspecified
1096
+ * `options.title` **[String][168]** Dialog title if `id` is unspecified and a prompt is necessary (optional, default `'Save citation library'`)
1097
+ * `options.overwrite` **[Boolean][172]** Allow existing file upsert (optional, default `true`)
1098
+ * `options.meta` **[Object][169]?** Optional meta data to merge into the file data
1097
1099
 
1098
- Returns **[Promise][172]** A promise which resolves when the save operation has completed
1100
+ Returns **[Promise][174]** A promise which resolves when the save operation has completed
1099
1101
 
1100
1102
  ## projectLog
1101
1103
 
1102
1104
  Create a log entry for the currently active project
1103
1105
 
1104
- The required log object can be of various forms. See [https://tera-tools.com/api/logs.json][180] for the full list
1106
+ The required log object can be of various forms. See [https://tera-tools.com/api/logs.json][182] for the full list
1105
1107
 
1106
1108
  ### Parameters
1107
1109
 
1108
- * `log` **[Object][167]** The log entry to create
1110
+ * `log` **[Object][169]** The log entry to create
1109
1111
 
1110
- Returns **[Promise][172]** A promise which resolves when the operation has completed
1112
+ Returns **[Promise][174]** A promise which resolves when the operation has completed
1111
1113
 
1112
1114
  ## setPage
1113
1115
 
@@ -1116,10 +1118,10 @@ This is usually called by a tool nested within the tera-tools.com embed
1116
1118
 
1117
1119
  ### Parameters
1118
1120
 
1119
- * `options` **([Object][167] | [String][166])** Context information about the page, if this is a string, its assumed to popupate `url`
1121
+ * `options` **([Object][169] | [String][168])** Context information about the page, if this is a string, its assumed to popupate `url`
1120
1122
 
1121
- * `options.path` **[String][166]?** The URL path segment to restore on next refresh
1122
- * `options.title` **[String][166]?** The page title associated with the path
1123
+ * `options.path` **[String][168]?** The URL path segment to restore on next refresh
1124
+ * `options.title` **[String][168]?** The page title associated with the path
1123
1125
 
1124
1126
  ## uiAlert
1125
1127
 
@@ -1127,15 +1129,15 @@ Display simple text within TERA
1127
1129
 
1128
1130
  ### Parameters
1129
1131
 
1130
- * `text` **[String][166]?** Text to display, if specified this populates `options.body`
1131
- * `options` **[Object][167]?** Additional options to mutate behaviour
1132
+ * `text` **[String][168]?** Text to display, if specified this populates `options.body`
1133
+ * `options` **[Object][169]?** Additional options to mutate behaviour
1132
1134
 
1133
- * `options.body` **[String][166]** The body text to display (optional, default `"Alert!"`)
1134
- * `options.isHtml` **[Boolean][170]** If falsy the text is rendered as plain-text otherwise it will be assumed as HTML content (optional, default `false`)
1135
- * `options.title` **[String][166]** The title of the alert box (optional, default `'TERA'`)
1135
+ * `options.body` **[String][168]** The body text to display (optional, default `"Alert!"`)
1136
+ * `options.isHtml` **[Boolean][172]** If falsy the text is rendered as plain-text otherwise it will be assumed as HTML content (optional, default `false`)
1137
+ * `options.title` **[String][168]** The title of the alert box (optional, default `'TERA'`)
1136
1138
  * `options.buttons` **(`"ok"` | `false`)** Button set to use or falsy to disable (optional, default `'ok'`)
1137
1139
 
1138
- Returns **[Promise][172]** A promise which resolves when the alert has been dismissed
1140
+ Returns **[Promise][174]** A promise which resolves when the alert has been dismissed
1139
1141
 
1140
1142
  ## uiConfirm
1141
1143
 
@@ -1143,14 +1145,30 @@ Present a simple ok/cancel dialog to the user
1143
1145
 
1144
1146
  ### Parameters
1145
1147
 
1146
- * `text` **[String][166]?** Text to display, if specified this populates `options.body`
1147
- * `options` **[Object][167]?** Additional options to mutate behaviour
1148
+ * `text` **[String][168]?** Text to display, if specified this populates `options.body`
1149
+ * `options` **[Object][169]?** Additional options to mutate behaviour
1148
1150
 
1149
- * `options.body` **[String][166]** The body text to display (optional, default `"Confirm?"`)
1150
- * `options.isHtml` **[Boolean][170]** If falsy the text is rendered as plain-text otherwise it will be assumed as HTML content (optional, default `false`)
1151
- * `options.title` **[String][166]** The title of the confirmation box (optional, default `'TERA'`)
1151
+ * `options.body` **[String][168]** The body text to display (optional, default `"Confirm?"`)
1152
+ * `options.isHtml` **[Boolean][172]** If falsy the text is rendered as plain-text otherwise it will be assumed as HTML content (optional, default `false`)
1153
+ * `options.title` **[String][168]** The title of the confirmation box (optional, default `'TERA'`)
1152
1154
 
1153
- Returns **[Promise][172]** A promise which resolves with `Promise.resolve('OK')` or rejects with `Promise.reject('CANCEL')`
1155
+ Returns **[Promise][174]** A promise which resolves with `Promise.resolve('OK')` or rejects with `Promise.reject('CANCEL')`
1156
+
1157
+ ## uiJson
1158
+
1159
+ Present some JSON to the user
1160
+
1161
+ ### Parameters
1162
+
1163
+ * `data` **([String][168] | [Object][169])?** Data to display, if (and this doesn't contain 'body' or 'title') this populates `options.body`
1164
+ * `options` **[Object][169]?** Additional options to mutate behaviour
1165
+
1166
+ * `options.body` **[String][168]** The body text to display above the JSON (optional, default `""`)
1167
+ * `options.isHtml` **[Boolean][172]** If falsy the text is rendered as plain-text otherwise it will be assumed as HTML content (optional, default `false`)
1168
+ * `options.json` **([String][168] | [Object][169])?** The JSON data to display
1169
+ * `options.title` **[String][168]** The title of the confirmation box (optional, default `'TERA'`)
1170
+
1171
+ Returns **[Promise][174]** A promise which resolves with `Promise.resolve('OK')`
1154
1172
 
1155
1173
  ## uiPanic
1156
1174
 
@@ -1158,7 +1176,7 @@ Trigger a fatal error, killing the outer TERA site
1158
1176
 
1159
1177
  ### Parameters
1160
1178
 
1161
- * `text` **[String][166]?** Text to display
1179
+ * `text` **[String][168]?** Text to display
1162
1180
 
1163
1181
  ## uiProgress
1164
1182
 
@@ -1167,18 +1185,18 @@ All options are cumulative - i.e. they are merged with other options previously
1167
1185
 
1168
1186
  ### Parameters
1169
1187
 
1170
- * `options` **([Object][167] | [Boolean][170])?** Additional options to mutate behaviour, if boolean false `{close: true}` is assumed
1188
+ * `options` **([Object][169] | [Boolean][172])?** Additional options to mutate behaviour, if boolean false `{close: true}` is assumed
1171
1189
 
1172
- * `options.title` **[String][166]** Window title, can only be set on the initial call (optional, default `'TERA'`)
1173
- * `options.backdrop` **[String][166]** Set to `'static'` to prevent user being able to click outside the modal to close (optional, default `true`)
1174
- * `options.body` **[String][166]** Window body text, can only be set on the initial call (optional, default `''`)
1175
- * `options.bodyHtml` **[Boolean][170]** Treat body text as HTML (optional, default `false`)
1176
- * `options.close` **[Boolean][170]** Close the existing dialog, if true the dialog is disposed and options reset (optional, default `false`)
1177
- * `options.text` **[String][166]?** The text of the task being conducted
1178
- * `options.progress` **[Number][169]?** The current progress of the task being conducted, this is assumed to be a value less than `maxProgress`
1179
- * `options.maxProgress` **[Number][169]?** The maximum value that the progress can be
1190
+ * `options.title` **[String][168]** Window title, can only be set on the initial call (optional, default `'TERA'`)
1191
+ * `options.backdrop` **[String][168]** Set to `'static'` to prevent user being able to click outside the modal to close (optional, default `true`)
1192
+ * `options.body` **[String][168]** Window body text, can only be set on the initial call (optional, default `''`)
1193
+ * `options.bodyHtml` **[Boolean][172]** Treat body text as HTML (optional, default `false`)
1194
+ * `options.close` **[Boolean][172]** Close the existing dialog, if true the dialog is disposed and options reset (optional, default `false`)
1195
+ * `options.text` **[String][168]?** The text of the task being conducted
1196
+ * `options.progress` **[Number][171]?** The current progress of the task being conducted, this is assumed to be a value less than `maxProgress`
1197
+ * `options.maxProgress` **[Number][171]?** The maximum value that the progress can be
1180
1198
 
1181
- Returns **[Promise][172]** A promise which resolves when the dialog has been updated
1199
+ Returns **[Promise][174]** A promise which resolves when the dialog has been updated
1182
1200
 
1183
1201
  ## uiPrompt
1184
1202
 
@@ -1186,17 +1204,17 @@ Prompt the user for an input, responding with a Promisable value
1186
1204
 
1187
1205
  ### Parameters
1188
1206
 
1189
- * `text` **[String][166]?** Text to display, if specified this populates `options.body`
1190
- * `options` **[Object][167]?** Additional options to mutate behaviour
1207
+ * `text` **[String][168]?** Text to display, if specified this populates `options.body`
1208
+ * `options` **[Object][169]?** Additional options to mutate behaviour
1191
1209
 
1192
- * `options.body` **[String][166]?** Optional additional body text
1193
- * `options.isHtml` **[Boolean][170]** If truthy, treat the body as HTML (optional, default `false`)
1194
- * `options.value` **[String][166]?** Current or default value to display pre-filled
1195
- * `options.title` **[String][166]** The dialog title to display (optional, default `'Input required'`)
1196
- * `options.placeholder` **[String][166]?** Optional placeholder text
1197
- * `options.required` **[Boolean][170]** Treat nullish or empty inputs as a cancel operation (optional, default `true`)
1210
+ * `options.body` **[String][168]?** Optional additional body text
1211
+ * `options.isHtml` **[Boolean][172]** If truthy, treat the body as HTML (optional, default `false`)
1212
+ * `options.value` **[String][168]?** Current or default value to display pre-filled
1213
+ * `options.title` **[String][168]** The dialog title to display (optional, default `'Input required'`)
1214
+ * `options.placeholder` **[String][168]?** Optional placeholder text
1215
+ * `options.required` **[Boolean][172]** Treat nullish or empty inputs as a cancel operation (optional, default `true`)
1198
1216
 
1199
- Returns **[Promise][172]\<any>** Either the eventual user value or a throw with `Promise.reject('CANCEL')`
1217
+ Returns **[Promise][174]\<any>** Either the eventual user value or a throw with `Promise.reject('CANCEL')`
1200
1218
 
1201
1219
  ## uiThrow
1202
1220
 
@@ -1204,7 +1222,7 @@ Catch an error using the TERA error handler
1204
1222
 
1205
1223
  ### Parameters
1206
1224
 
1207
- * `error` **([Error][179] | [Object][167] | [String][166])** Error to handle, generally an Error object but can be a POJO or a scalar string
1225
+ * `error` **([Error][181] | [Object][169] | [String][168])** Error to handle, generally an Error object but can be a POJO or a scalar string
1208
1226
 
1209
1227
  Returns **Void** This function is fatal
1210
1228
 
@@ -1214,13 +1232,13 @@ Open a popup window containing a new site
1214
1232
 
1215
1233
  ### Parameters
1216
1234
 
1217
- * `url` **[String][166]** The URL to open
1218
- * `options` **[Object][167]?** Additional options to mutate behaviour
1235
+ * `url` **[String][168]** The URL to open
1236
+ * `options` **[Object][169]?** Additional options to mutate behaviour
1219
1237
 
1220
- * `options.width` **[Number][169]** The desired width of the window (optional, default `500`)
1221
- * `options.height` **[Number][169]** The desired height of the window (optional, default `600`)
1222
- * `options.center` **[Boolean][170]** Attempt to center the window on the screen (optional, default `true`)
1223
- * `options.permissions` **[Object][167]?** Additional permissions to set on opening, defaults to a suitable set of permission for popups (see code)
1238
+ * `options.width` **[Number][171]** The desired width of the window (optional, default `500`)
1239
+ * `options.height` **[Number][171]** The desired height of the window (optional, default `600`)
1240
+ * `options.center` **[Boolean][172]** Attempt to center the window on the screen (optional, default `true`)
1241
+ * `options.permissions` **[Object][169]?** Additional permissions to set on opening, defaults to a suitable set of permission for popups (see code)
1224
1242
 
1225
1243
  Returns **WindowProxy** The opened window object (if `noopener` is not set in permissions)
1226
1244
 
@@ -1231,10 +1249,10 @@ This function is ideally called within a requestFocus() wrapper
1231
1249
 
1232
1250
  ### Parameters
1233
1251
 
1234
- * `content` **(DOMElement | [String][166] | `false`)** Either a prepared DOM element or string to compile, set to falsy to remove existing content
1235
- * `options` **[Object][167]?** Additional options to mutate behaviour
1252
+ * `content` **(DOMElement | [String][168] | `false`)** Either a prepared DOM element or string to compile, set to falsy to remove existing content
1253
+ * `options` **[Object][169]?** Additional options to mutate behaviour
1236
1254
 
1237
- * `options.logo` **([Boolean][170] | [String][166])** Add a logo to the output, if boolean true the Tera-tools logo is used otherwise specify a path or URL (optional, default `false`)
1255
+ * `options.logo` **([Boolean][172] | [String][168])** Add a logo to the output, if boolean true the Tera-tools logo is used otherwise specify a path or URL (optional, default `false`)
1238
1256
 
1239
1257
  [1]: #projectfile
1240
1258
 
@@ -1542,56 +1560,60 @@ This function is ideally called within a requestFocus() wrapper
1542
1560
 
1543
1561
  [153]: #parameters-49
1544
1562
 
1545
- [154]: #uipanic
1563
+ [154]: #uijson
1546
1564
 
1547
1565
  [155]: #parameters-50
1548
1566
 
1549
- [156]: #uiprogress
1567
+ [156]: #uipanic
1550
1568
 
1551
1569
  [157]: #parameters-51
1552
1570
 
1553
- [158]: #uiprompt
1571
+ [158]: #uiprogress
1554
1572
 
1555
1573
  [159]: #parameters-52
1556
1574
 
1557
- [160]: #uithrow
1575
+ [160]: #uiprompt
1558
1576
 
1559
1577
  [161]: #parameters-53
1560
1578
 
1561
- [162]: #uiwindow
1579
+ [162]: #uithrow
1562
1580
 
1563
1581
  [163]: #parameters-54
1564
1582
 
1565
- [164]: #uisplat
1583
+ [164]: #uiwindow
1566
1584
 
1567
1585
  [165]: #parameters-55
1568
1586
 
1569
- [166]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String
1587
+ [166]: #uisplat
1588
+
1589
+ [167]: #parameters-56
1590
+
1591
+ [168]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String
1570
1592
 
1571
- [167]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object
1593
+ [169]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object
1572
1594
 
1573
- [168]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Date
1595
+ [170]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Date
1574
1596
 
1575
- [169]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number
1597
+ [171]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number
1576
1598
 
1577
- [170]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean
1599
+ [172]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean
1578
1600
 
1579
- [171]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array
1601
+ [173]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array
1580
1602
 
1581
- [172]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise
1603
+ [174]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise
1582
1604
 
1583
- [173]: https://developer.mozilla.org/docs/Web/API/Blob
1605
+ [175]: https://developer.mozilla.org/docs/Web/API/Blob
1584
1606
 
1585
- [174]: https://developer.mozilla.org/docs/Web/API/FormData
1607
+ [176]: https://developer.mozilla.org/docs/Web/API/FormData
1586
1608
 
1587
- [175]: https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm
1609
+ [177]: https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm
1588
1610
 
1589
- [176]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function
1611
+ [178]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function
1590
1612
 
1591
- [177]: https://developer.mozilla.org/docs/Web/API/Window
1613
+ [179]: https://developer.mozilla.org/docs/Web/API/Window
1592
1614
 
1593
- [178]: https://developer.mozilla.org/docs/Web/API/MessageEvent
1615
+ [180]: https://developer.mozilla.org/docs/Web/API/MessageEvent
1594
1616
 
1595
- [179]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Error
1617
+ [181]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Error
1596
1618
 
1597
- [180]: https://tera-tools.com/api/logs.json
1619
+ [182]: https://tera-tools.com/api/logs.json