lilact 0.31.6 → 0.31.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/dist/lilact.development.js +61 -22
  2. package/dist/lilact.development.js.map +3 -3
  3. package/dist/lilact.development.min.js +26 -26
  4. package/dist/lilact.development.min.js.map +3 -3
  5. package/dist/lilact.production.min.js +26 -26
  6. package/docs/assets/navigation.js +1 -1
  7. package/docs/assets/search.js +1 -1
  8. package/docs/classes/accessories.ErrorBoundary.html +8 -8
  9. package/docs/classes/accessories.Suspense.html +7 -7
  10. package/docs/classes/components.Component.html +11 -11
  11. package/docs/classes/components.HTMLComponent.html +11 -11
  12. package/docs/classes/components.RootComponent.html +11 -11
  13. package/docs/functions/components.cloneComponent.html +1 -1
  14. package/docs/functions/components.createComponent.html +1 -1
  15. package/docs/functions/components.createPortal.html +1 -1
  16. package/docs/functions/components.createRoot.html +1 -1
  17. package/docs/functions/components.memo.html +1 -1
  18. package/docs/functions/components.render.html +1 -1
  19. package/docs/functions/components.replaceAllComponentInstances.html +1 -1
  20. package/docs/functions/components.replaceComponentEntity.html +1 -1
  21. package/docs/functions/hooks.startTransition.html +1 -1
  22. package/docs/functions/hooks.useCallback.html +2 -2
  23. package/docs/functions/hooks.useDebugValue.html +1 -1
  24. package/docs/functions/hooks.useDeferredValue.html +1 -1
  25. package/docs/functions/hooks.useEffect.html +1 -1
  26. package/docs/functions/hooks.useImperativeHandle.html +2 -2
  27. package/docs/functions/hooks.useInsertionEffect.html +1 -1
  28. package/docs/functions/hooks.useLayoutEffect.html +1 -1
  29. package/docs/functions/hooks.useMemo.html +1 -1
  30. package/docs/functions/hooks.useReducer.html +1 -1
  31. package/docs/functions/run.lazy.html +10 -1
  32. package/docs/functions/run.require.html +7 -1
  33. package/docs/functions/run.run.html +14 -1
  34. package/docs/functions/run.runScripts.html +8 -1
  35. package/docs/modules/run.html +1 -1
  36. package/docs/static/demos/error-callback.jsx +7 -9
  37. package/docs/static/lilact.development.js +61 -22
  38. package/docs/static/lilact.development.js.map +3 -3
  39. package/docs/static/lilact.development.min.js +26 -26
  40. package/docs/static/lilact.development.min.js.map +3 -3
  41. package/docs/static/lilact.production.min.js +26 -26
  42. package/docs/variables/components.cloneElement.html +1 -1
  43. package/examples/demos/error-callback.jsx +7 -9
  44. package/examples/lilact.development.js +61 -22
  45. package/examples/lilact.development.js.map +3 -3
  46. package/examples/lilact.development.min.js +26 -26
  47. package/examples/lilact.development.min.js.map +3 -3
  48. package/examples/lilact.production.min.js +26 -26
  49. package/package.json +1 -1
  50. package/src/components.jsx +83 -27
  51. package/src/hooks.jsx +7 -8
  52. package/src/run.jsx +62 -6
  53. package/src/symbols.jsx +2 -0
  54. package/docs/variables/run.required_scripts.html +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lilact",
3
- "version": "0.31.6",
3
+ "version": "0.31.8",
4
4
  "description": "A Little React/JSX Runtime Implementation for Browser",
5
5
  "repository": "github:arashkazemi/lilact",
6
6
  "homepage": "https://arashkazemi.github.io/lilact/",
@@ -30,7 +30,7 @@
30
30
 
31
31
  import Lilact from './lilact.jsx';
32
32
 
33
- import { CORE, COMPONENT, TEXT, IS_ZOMBIE, IDX, CHILD_CLASS_ADDENDUM, MEMOIZED, LOCATION } from "./symbols.jsx"
33
+ import { CORE, COMPONENT, TEXT, IS_ZOMBIE, IDX, CHILD_CLASS_ADDENDUM, MEMOIZED, LOCATION, CLONED_STYLE } from "./symbols.jsx"
34
34
  import { shallowEqual, toBool, isClass, isThenable } from "./misc.jsx";
35
35
 
36
36
  import { PropTypes } from './proptypes.jsx';
@@ -44,6 +44,26 @@ function getComponentEntity(entity) {
44
44
  }
45
45
 
46
46
  const hotEntityAliases = new Map();
47
+ const hotEntityCacheTokens = new WeakMap();
48
+
49
+ function getHotEntityCacheToken(entity) {
50
+ entity = getComponentEntity(entity);
51
+
52
+ if (typeof entity !== "function") {
53
+ return entity;
54
+ }
55
+
56
+ let token = hotEntityCacheTokens.get(entity);
57
+
58
+ if (!token) {
59
+ const resolved = resolveHotEntity(entity);
60
+ token = hotEntityCacheTokens.get(resolved) || {};
61
+ hotEntityCacheTokens.set(entity, token);
62
+ hotEntityCacheTokens.set(resolved, token);
63
+ }
64
+
65
+ return token;
66
+ }
47
67
 
48
68
  function resolveHotEntity(entity) {
49
69
  entity = getComponentEntity(entity);
@@ -127,6 +147,11 @@ export function replaceComponentEntity(componentCore, nextEntity) {
127
147
  const oldEntity = getComponentEntity(componentCore.entity);
128
148
  const newEntity = resolveHotEntity(nextEntity);
129
149
 
150
+ const cacheToken = hotEntityCacheTokens.get(oldEntity) || hotEntityCacheTokens.get(newEntity) || {};
151
+
152
+ hotEntityCacheTokens.set(oldEntity, cacheToken);
153
+ hotEntityCacheTokens.set(newEntity, cacheToken);
154
+
130
155
  if (oldEntity === newEntity) {
131
156
  return true;
132
157
  }
@@ -157,7 +182,8 @@ export function replaceComponentEntity(componentCore, nextEntity) {
157
182
  return true;
158
183
  }
159
184
 
160
- export function replaceAllComponentInstances(oldEntity, newEntity) {
185
+ export function replaceAllComponentInstances(oldEntity, newEntity)
186
+ {
161
187
  oldEntity = getComponentEntity(oldEntity);
162
188
  newEntity = getComponentEntity(newEntity);
163
189
 
@@ -174,8 +200,11 @@ export function replaceAllComponentInstances(oldEntity, newEntity) {
174
200
  return 0;
175
201
  }
176
202
 
177
- // Keep this alias even when there are currently no instances.
178
- // A future instance may still be created with oldEntity.
203
+ const cacheToken = hotEntityCacheTokens.get(oldEntity) || hotEntityCacheTokens.get(newEntity) || {};
204
+
205
+ hotEntityCacheTokens.set(oldEntity, cacheToken);
206
+ hotEntityCacheTokens.set(newEntity, cacheToken);
207
+
179
208
  hotEntityAliases.set(oldEntity, newEntity);
180
209
 
181
210
  const instances = componentInstances.get(oldEntity);
@@ -199,6 +228,7 @@ export function replaceAllComponentInstances(oldEntity, newEntity) {
199
228
  }
200
229
 
201
230
 
231
+
202
232
  /*
203
233
  ComponentCache is for internal use. It is the heart of the JSX runtime,
204
234
  it holds child components and detects which one is being rendered or updated.
@@ -268,7 +298,7 @@ class ComponentCache
268
298
  ex.cleanup();
269
299
  }
270
300
  else if(ex.element && !ex.portal) {
271
- ex.element.parentElement.removeChild(ex.element);
301
+ ex.element.parentElement?.removeChild?.(ex.element);
272
302
  }
273
303
  });
274
304
  });
@@ -351,20 +381,28 @@ class ComponentCore
351
381
 
352
382
  if(do_rerender) {
353
383
 
354
- if(DEBUG) {
355
-
356
- if(this.entity?.propTypes) {
357
- PropTypes.checkPropTypes(this.entity.propTypes, this.props, 'prop', this.entity.name);
358
- }
359
- else if(this.component?.propTypes) {
360
- PropTypes.checkPropTypes(this.component.propTypes, this.props, 'prop', this.component.name);
384
+ if(DEBUG) {
385
+ if(this.entity?.propTypes) {
386
+ PropTypes.checkPropTypes( this.entity.propTypes, next_props, 'prop', this.entity.name );
387
+ }
388
+ else if(this.component?.propTypes) {
389
+ PropTypes.checkPropTypes( this.component.propTypes, next_props, 'prop', this.component.name );
390
+ }
361
391
  }
362
392
 
363
- }
364
393
  if(typeof(next_state)==='function') next_state = next_state(this.state);
365
394
 
366
- if(this.component.constructor.defaultProps) {
367
- next_props = {...this.component.constructor.defaultProps, ...next_props};
395
+ const defaultProps = this.entity?.defaultProps || this.component?.constructor?.defaultProps;
396
+
397
+ if (defaultProps) {
398
+ next_props = {
399
+ ...defaultProps,
400
+ ...(next_props || {}),
401
+ };
402
+ }
403
+
404
+ if(next_props?.style && typeof next_props.style === 'object' && !next_props.style[CLONED_STYLE]) {
405
+ next_props.style = { ...next_props.style, [CLONED_STYLE]: true };
368
406
  }
369
407
 
370
408
  if(this?.parent?.component?.context || this?.parent?.component?.getChildContext ) {
@@ -519,7 +557,7 @@ class ComponentCore
519
557
  this.props.ref(null);
520
558
  }
521
559
  else {
522
- this.props.current = null;
560
+ this.props.ref.current = null;
523
561
  }
524
562
  }
525
563
 
@@ -645,7 +683,7 @@ class ComponentCore
645
683
  }
646
684
  else {
647
685
  for(let p in this.props.style) {
648
- if( !patch.style.hasOwnProperty(p) ) {
686
+ if( p!==CLONED_STYLE && !patch.style.hasOwnProperty(p) ) {
649
687
  this.element.style[p] = "";
650
688
  }
651
689
  }
@@ -671,7 +709,7 @@ class ComponentCore
671
709
  else if(a==='autoFocus') { // not lower cased(al), as it is set as a js property
672
710
  this.element['autofocus'] = toBool(patch[a]);
673
711
  }
674
- else if(a==='htmlFor') { // not lower cased(al), as it is set as a js property
712
+ else if(a==='htmlFor' || a==='for') { // not lower cased(al), as it is set as a js property
675
713
  this.element.setAttribute('for', patch[a]);
676
714
  }
677
715
  else if(al!=='value' || ['input', 'textarea', 'select'].indexOf(this.entity)===-1) {
@@ -939,24 +977,43 @@ function constructFunc(core, parent) {
939
977
  }
940
978
 
941
979
 
942
- function prepareCore(parent, core) {
980
+ function prepareCore(parent, core)
981
+ {
943
982
  try {
944
983
  parent.cache ??= new ComponentCache(parent);
945
984
 
946
985
  const isText = core[TEXT] !== undefined;
986
+ const isExistingCore = core instanceof ComponentCore;
987
+
988
+ const entity = isText || isExistingCore
989
+ ? undefined
990
+ : resolveHotEntity(core.entity);
947
991
 
948
- const key = isText
949
- ? ':text:'
950
- : core.props?.key;
992
+ const hasExplicitKey =
993
+ !isText &&
994
+ core.props &&
995
+ core.props.key !== undefined &&
996
+ core.props.key !== null;
951
997
 
952
- const entity = isText || core instanceof ComponentCore
953
- ? undefined
954
- : core.entity;
998
+ let key;
999
+
1000
+ if (isText) {
1001
+ key = ':text:';
1002
+ }
1003
+ else if (hasExplicitKey) {
1004
+ key = core.props.key;
1005
+ }
1006
+ else if (typeof entity === "function") {
1007
+ key = getHotEntityCacheToken(entity);
1008
+ }
1009
+ else {
1010
+ key = entity;
1011
+ }
955
1012
 
956
1013
  return parent.cache.pick(
957
1014
  key,
958
1015
  () => (
959
- isText || core instanceof ComponentCore
1016
+ isText || isExistingCore
960
1017
  ? core
961
1018
  : constructFunc(core, parent)[CORE]
962
1019
  ),
@@ -1352,7 +1409,6 @@ export class RootComponent extends HTMLComponent
1352
1409
 
1353
1410
  export function createComponent(entity, props={}, ...children)
1354
1411
  {
1355
-
1356
1412
  if (typeof(entity)!=='string' && typeof(entity)!=='function' )
1357
1413
  {
1358
1414
  if(typeof(entity)!=='object' || !entity[MEMOIZED]) {
package/src/hooks.jsx CHANGED
@@ -85,7 +85,7 @@ export function useState(initialValue)
85
85
  * @param {Array<any>} deps - Dependency list.
86
86
  * @returns {Function} Memoized callback.
87
87
  */
88
- export function useCallback(callback, deps=undefined)
88
+ export function useCallback(callback, deps)
89
89
  {
90
90
  if(
91
91
  deps !== undefined && !Array.isArray(deps) &&
@@ -270,7 +270,7 @@ export function useRef(initialValue = null)
270
270
  * used to determine when to re-run the effect.
271
271
  * @returns {void}
272
272
  */
273
- export async function useLayoutEffect(effect, deps=undefined)
273
+ export async function useLayoutEffect(effect, deps)
274
274
  {
275
275
  if(
276
276
  deps !== undefined && !Array.isArray(deps) &&
@@ -306,7 +306,7 @@ export async function useLayoutEffect(effect, deps=undefined)
306
306
  * used to determine when to re-run the effect.
307
307
  * @returns {void}
308
308
  */
309
- export async function useEffect(effect, deps=undefined)
309
+ export async function useEffect(effect, deps)
310
310
  {
311
311
  if(
312
312
  deps !== undefined && !Array.isArray(deps) &&
@@ -343,7 +343,7 @@ export async function useEffect(effect, deps=undefined)
343
343
  * used to determine when to re-run the effect.
344
344
  * @returns void
345
345
  */
346
- export async function useInsertionEffect(effect, deps=undefined)
346
+ export async function useInsertionEffect(effect, deps)
347
347
  {
348
348
  if(
349
349
  deps !== undefined && !Array.isArray(deps) &&
@@ -380,7 +380,7 @@ export async function useInsertionEffect(effect, deps=undefined)
380
380
  * used to determine when to recompute the value.
381
381
  * @returns {any} Memoized value.
382
382
  */
383
- export function useMemo(factory,deps=undefined)
383
+ export function useMemo(factory,deps)
384
384
  {
385
385
  if(
386
386
  deps !== undefined && !Array.isArray(deps) &&
@@ -427,8 +427,7 @@ export function useActionState(action, initialState)
427
427
  async ()=> {
428
428
  const form_data = new FormData(event.target, event.submitter);
429
429
  hk.state = await action(hk.state, form_data);
430
- },
431
- []
430
+ }
432
431
  );
433
432
 
434
433
  return false;
@@ -533,7 +532,7 @@ export function useDeferredValue(value, initialValue)
533
532
  * Dependency list that controls when the exposed value is recalculated.
534
533
  * @returns {void}
535
534
  */
536
- export function useImperativeHandle(ref, factory, deps=undefined)
535
+ export function useImperativeHandle(ref, factory, deps)
537
536
  {
538
537
  if(deps!==undefined && ref?.deps!==undefined && shallowEqual(deps, ref.deps)) return;
539
538
 
package/src/run.jsx CHANGED
@@ -107,6 +107,7 @@ function report(value, path) {
107
107
  return error;
108
108
  }
109
109
 
110
+ /** @ignore */
110
111
  export const required_scripts = {};
111
112
 
112
113
  function createModule(path, {
@@ -118,14 +119,8 @@ function createModule(path, {
118
119
  mappings: [],
119
120
  meta: {},
120
121
  exports: {},
121
-
122
- // True only after the module has been successfully evaluated.
123
122
  loaded: false,
124
-
125
- // The promise for the request currently loading this resource.
126
- // This is deliberately stored on the module to deduplicate requests.
127
123
  request: undefined,
128
-
129
124
  error: undefined,
130
125
  };
131
126
 
@@ -228,6 +223,23 @@ function loadModule(path, options = {}) {
228
223
  );
229
224
  }
230
225
 
226
+
227
+ /**
228
+ * Loads a module using Lilact's module loader.
229
+ *
230
+ * This function provides the runtime `require()` implementation used by
231
+ * transpiled Lilact modules.
232
+ *
233
+ * @param {string} path - Module path or URL to load.
234
+ * @param {object} [options] - Module-loading options.
235
+ * @param {{path: string}} [options.requirer] - Module that requested this
236
+ * resource.
237
+ * @param {boolean} [options.isLazy=false] - Forces asynchronous loading.
238
+ * @param {boolean} [options.forceReload=false] - Reloads the module even if
239
+ * it has already been evaluated.
240
+ * @returns {*} The module exports, or a Promise for asynchronous modules.
241
+ * @throws {Error} If the module cannot be loaded or evaluated.
242
+ */
231
243
  export function require(path)
232
244
  {
233
245
  let options = {};
@@ -318,6 +330,24 @@ function replaceReloadedExports(previousExports, nextExports) {
318
330
  }
319
331
 
320
332
 
333
+ /**
334
+ * Transpiles and evaluates JSX source code as a Lilact module.
335
+ *
336
+ * The source is registered under the supplied path, transpiled with source
337
+ * mappings and runtime tracing enabled, evaluated in the global Lilact
338
+ * runtime, and returned as module exports. Reloaded component exports are
339
+ * compared with their previous versions to support hot loading.
340
+ *
341
+ * @param {string} jsx - JSX or JavaScript source code to evaluate.
342
+ * @param {string} [path=`InlineJSX-${Lilact.eval_num + 1}`] - Module path
343
+ * used for caching, diagnostics, and source mapping.
344
+ * @param {object} [options] - Evaluation options.
345
+ * @param {boolean} [options.forceReload=false] - Forces dependent resources
346
+ * to reload when they are required.
347
+ * @returns {*} The evaluated module exports.
348
+ * @throws {Error} If transpilation or runtime evaluation fails.
349
+ */
350
+
321
351
  export function run(
322
352
  jsx,
323
353
  path = `InlineJSX-${++Lilact.eval_num}`,
@@ -371,6 +401,7 @@ export function run(
371
401
  throw error;
372
402
  }
373
403
 
404
+ // console.log(processed)
374
405
  if (typeof Lilact.scanBlockLabels === "function") {
375
406
  Lilact.scanBlockLabels(processed, path);
376
407
  }
@@ -473,6 +504,19 @@ function loadAsyncResource(path, module, options = {})
473
504
  return request;
474
505
  }
475
506
 
507
+ /**
508
+ * Creates a lazily evaluated component from a module or promise factory.
509
+ *
510
+ * The factory is executed while lazy-loading mode is enabled. The returned
511
+ * component suspends by throwing the pending promise until the factory
512
+ * resolves, or throws the loading error if the factory fails.
513
+ *
514
+ * @param {Function} factory - Function that returns a component, module,
515
+ * promise, or thenable resolving to a component or module.
516
+ * @returns {Function} A component that renders the resolved component.
517
+ * @throws {*} The pending promise or loading error while the component is
518
+ * unresolved.
519
+ */
476
520
  export function lazy(factory)
477
521
  {
478
522
  let status = "pending";
@@ -526,6 +570,18 @@ function scriptTags()
526
570
  }));
527
571
  }
528
572
 
573
+ /**
574
+ * Loads and evaluates every JSX script in the current document.
575
+ *
576
+ * External scripts are loaded through {@link require}. Inline scripts are
577
+ * evaluated directly through {@link run}. Scripts are processed in document
578
+ * order.
579
+ *
580
+ * @returns {Promise<void>} A promise that resolves after all scripts finish.
581
+ * @throws {Error} If an external or inline script cannot be loaded or
582
+ * evaluated.
583
+ */
584
+
529
585
  export async function runScripts() {
530
586
  for (const script of scriptTags()) {
531
587
  if (script.src) {
package/src/symbols.jsx CHANGED
@@ -40,6 +40,7 @@ export const [
40
40
  CHILD_CLASS_ADDENDUM,
41
41
  MEMOIZED,
42
42
  LAZY,
43
+ CLONED_STYLE,
43
44
 
44
45
  DUE,
45
46
  REPEAT,
@@ -59,6 +60,7 @@ export const [
59
60
  Symbol.for('LILACT:CHILD_CLASS_ADDENDUM'),
60
61
  Symbol.for('LILACT:MEMOIZED'),
61
62
  Symbol.for('LILACT:LAZY'),
63
+ Symbol.for('LILACT:CLONED_STYLE'),
62
64
 
63
65
  Symbol.for('LILACT:TIMERS:DUE'),
64
66
  Symbol.for('LILACT:TIMERS:REPEAT'),
@@ -1 +0,0 @@
1
- <!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>required_scripts | Lilact</title><meta name="description" content="Documentation for Lilact"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">Lilact</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="../modules/run.html">run</a></li><li><a href="" aria-current="page">required_scripts</a></li></ul><h1>Variable required_scripts<code class="tsd-tag">Const</code></h1></div><div class="tsd-signature"><span class="tsd-kind-variable">required_scripts</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{}</span><span class="tsd-signature-symbol"> = {}</span></div><div class="tsd-type-declaration"><h4>Type Declaration</h4><ul class="tsd-parameters"></ul></div><aside class="tsd-sources"><ul><li>Defined in run.jsx:110</li></ul></aside></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">Lilact</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>