jssm 5.162.8 → 5.162.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -18,10 +18,10 @@ Please edit the file it's derived from, instead: `./src/md/readme_base.md`
18
18
 
19
19
 
20
20
 
21
- * Generated for version 5.162.8 at 7/11/2026, 2:09:30 PM
21
+ * Generated for version 5.162.9 at 7/12/2026, 3:21:43 AM
22
22
 
23
23
  -->
24
- # jssm 5.162.8
24
+ # jssm 5.162.9
25
25
 
26
26
  [**Try the live editor**](https://stonecypher.github.io/jssm-viz-demo/graph_explorer.html) ·
27
27
  [Documentation](https://stonecypher.github.io/jssm/docs/) ·
@@ -333,7 +333,7 @@ That decision shows up everywhere downstream:
333
333
  or run `npm run benny` against your own machine.
334
334
 
335
335
  - **More thoroughly tested than any other JavaScript state-machine
336
- library.** 8,093 tests at 100.0% line coverage
336
+ library.** 8,151 tests at 100.0% line coverage
337
337
  ([report](https://coveralls.io/github/StoneCypher/jssm)), plus
338
338
  fuzz testing via `fast-check`, with parser test data across ten natural
339
339
  languages and Emoji.
@@ -466,10 +466,10 @@ If your contribution is missing here, please open an issue.
466
466
 
467
467
  <br/>
468
468
 
469
- ***8,093 tests***, run 83,531 times.
469
+ ***8,151 tests***, run 83,589 times.
470
470
 
471
- - 7,331 specs with 100.0% coverage
472
- - 762 fuzz tests with 47.8% coverage
471
+ - 7,389 specs with 100.0% coverage
472
+ - 762 fuzz tests with 47.9% coverage
473
473
  - 10,882 TypeScript lines - 0.7 tests per line, 7.7 generated tests per line
474
474
 
475
475
  [![Actions Status](https://github.com/StoneCypher/jssm/workflows/Node%20CI/badge.svg)](https://github.com/StoneCypher/jssm/actions)
@@ -353,11 +353,11 @@
353
353
  "description": "A JSON string (typically `JSON.stringify(value, null, 2)`)."
354
354
  }
355
355
  ],
356
- "description": "Split a pretty-printed JSON string into classified tokens for syntax\nhighlighting. A quoted run is a `key` when the next non-space character is\n`:`, otherwise a `string`; `true`/`false` are `bool`, `null` is `null`,\nnumbers are `number`, and everything between (braces, commas, whitespace) is\n`plain`. Driven by the text, not a JSON parse, so it never throws."
356
+ "description": "Split a pretty-printed JSON string into classified tokens for syntax\r\nhighlighting. A quoted run is a `key` when the next non-space character is\r\n`:`, otherwise a `string`; `true`/`false` are `bool`, `null` is `null`,\r\nnumbers are `number`, and everything between (braces, commas, whitespace) is\r\n`plain`. Driven by the text, not a JSON parse, so it never throws."
357
357
  },
358
358
  {
359
359
  "kind": "class",
360
- "description": "`<fsl-data-inspector>` — a syntax-highlighted view of a parent\n`<fsl-instance>`'s extended-state data. Re-reads `host.machine.data()` on the\nhost's transition / data-change / rebuild DOM events. The panel is bounded and\nscrolls internally (a self-contained vertical column). Renders `no data` when\nthe machine carries none; standalone (no host) renders empty.",
360
+ "description": "`<fsl-data-inspector>` — a syntax-highlighted view of a parent\r\n`<fsl-instance>`'s extended-state data. Re-reads `host.machine.data()` on the\r\nhost's transition / data-change / rebuild DOM events. The panel is bounded and\r\nscrolls internally (a self-contained vertical column). Renders `no data` when\r\nthe machine carries none; standalone (no host) renders empty.",
361
361
  "name": "FslDataInspector",
362
362
  "cssParts": [
363
363
  {
@@ -770,7 +770,7 @@
770
770
  "declarations": [
771
771
  {
772
772
  "kind": "class",
773
- "description": "`<fsl-editor>` — a CodeMirror-based FSL editor web component.\n\nBatteries-included: FSL highlighting (`jssm/cm6`), linting, a semantic\noverlay (color chips / state & enum marks), and context-aware completion —\neach toggleable via a `no-*` attribute. Light/dark via the reflected `theme`\nattribute (which also drives the `--fsl-*` token defaults). White-labeled\nthrough the shared appearance contract. Emits `change` on user edits.",
773
+ "description": "`<fsl-editor>` — a CodeMirror-based FSL editor web component.\r\n\r\nBatteries-included: FSL highlighting (`jssm/cm6`), linting, a semantic\r\noverlay (color chips / state & enum marks), and context-aware completion —\r\neach toggleable via a `no-*` attribute. Light/dark via the reflected `theme`\r\nattribute (which also drives the `--fsl-*` token defaults). White-labeled\r\nthrough the shared appearance contract. Emits `change` on user edits.",
774
774
  "name": "FslEditor",
775
775
  "cssParts": [
776
776
  {
@@ -1119,7 +1119,7 @@
1119
1119
  "declarations": [
1120
1120
  {
1121
1121
  "kind": "class",
1122
- "description": "`<fsl-export>` — export buttons for a parent `<fsl-instance>`. Each produces a\nstring from the host's machine and fires `fsl-export` with `{ format,\ncontent }`; the embedder decides what to do with it (copy, download, show).\nFormats: Graphviz `dot` (via `machine_to_dot`), `json` (the machine's\n`serialize()`), and `fsl` (the source). Standalone is inert.",
1122
+ "description": "`<fsl-export>` — export buttons for a parent `<fsl-instance>`. Each produces a\r\nstring from the host's machine and fires `fsl-export` with `{ format,\r\ncontent }`; the embedder decides what to do with it (copy, download, show).\r\nFormats: Graphviz `dot` (via `machine_to_dot`), `json` (the machine's\r\n`serialize()`), and `fsl` (the source). Standalone is inert.",
1123
1123
  "name": "FslExport",
1124
1124
  "cssParts": [
1125
1125
  {
@@ -1337,7 +1337,7 @@
1337
1337
  "declarations": [
1338
1338
  {
1339
1339
  "kind": "class",
1340
- "description": "`<fsl-help>` — a documentation drawer shell: a titled, scrollable panel with\na close button and a default slot for content (typically foldable\n`<details>` sections). Presentational and self-contained — it owns no machine\nbinding. The reflected `open` attribute drives visibility, so embedders can\nanimate it (e.g. a width transition on the host) purely from CSS.",
1340
+ "description": "`<fsl-help>` — a documentation drawer shell: a titled, scrollable panel with\r\na close button and a default slot for content (typically foldable\r\n`<details>` sections). Presentational and self-contained — it owns no machine\r\nbinding. The reflected `open` attribute drives visibility, so embedders can\r\nanimate it (e.g. a width transition on the host) purely from CSS.",
1341
1341
  "name": "FslHelp",
1342
1342
  "cssParts": [
1343
1343
  {
@@ -1446,7 +1446,7 @@
1446
1446
  "declarations": [
1447
1447
  {
1448
1448
  "kind": "class",
1449
- "description": "`<fsl-history>` — the visited-state timeline for a parent `<fsl-instance>`.\n\nListens to the host's `fsl-transition` DOM events (re-emitted once per\ntransition, #639) and records the host's reflected `current-state`, so it\ncaptures every transition and survives a live machine rebuild without a\nmachine subscription. Standalone (no host ancestor) renders empty.",
1449
+ "description": "`<fsl-history>` — the visited-state timeline for a parent `<fsl-instance>`.\r\n\r\nListens to the host's `fsl-transition` DOM events (re-emitted once per\r\ntransition, #639) and records the host's reflected `current-state`, so it\r\ncaptures every transition and survives a live machine rebuild without a\r\nmachine subscription. Standalone (no host ancestor) renders empty.",
1450
1450
  "name": "FslHistory",
1451
1451
  "cssParts": [
1452
1452
  {
@@ -1499,7 +1499,7 @@
1499
1499
  "declarations": [
1500
1500
  {
1501
1501
  "kind": "class",
1502
- "description": "`<fsl-hook-log>` — a running log of a parent `<fsl-instance>`'s machine\nevents, listening to the host's re-emitted `fsl-*` DOM events (#639). Keeps\nthe most recent MAX_ENTRIES. Standalone (no host ancestor) is empty.",
1502
+ "description": "`<fsl-hook-log>` — a running log of a parent `<fsl-instance>`'s machine\r\nevents, listening to the host's re-emitted `fsl-*` DOM events (#639). Keeps\r\nthe most recent MAX_ENTRIES. Standalone (no host ancestor) is empty.",
1503
1503
  "name": "FslHookLog",
1504
1504
  "cssParts": [
1505
1505
  {
@@ -3069,7 +3069,7 @@
3069
3069
  }
3070
3070
  }
3071
3071
  ],
3072
- "description": "URL-safe base64 (RFC 4648 §5) of raw bytes: standard base64 with `+`→`-`,\n`/`→`_`, and trailing `=` padding stripped."
3072
+ "description": "URL-safe base64 (RFC 4648 §5) of raw bytes: standard base64 with `+`→`-`,\r\n`/`→`_`, and trailing `=` padding stripped."
3073
3073
  },
3074
3074
  {
3075
3075
  "kind": "function",
@@ -3128,7 +3128,7 @@
3128
3128
  }
3129
3129
  }
3130
3130
  ],
3131
- "description": "Inverse of deflate_raw, reading the stream in chunks and aborting once\nthe inflated output would exceed MAX_PERMALINK_INFLATE_BYTES (a\ndecompression-bomb guard — see that constant)."
3131
+ "description": "Inverse of deflate_raw, reading the stream in chunks and aborting once\r\nthe inflated output would exceed MAX_PERMALINK_INFLATE_BYTES (a\r\ndecompression-bomb guard — see that constant)."
3132
3132
  },
3133
3133
  {
3134
3134
  "kind": "function",
@@ -3146,7 +3146,7 @@
3146
3146
  }
3147
3147
  }
3148
3148
  ],
3149
- "description": "Encode FSL to a `<scheme><payload>` segment value (the part after `key=`).\nDEFLATE is used (scheme `1`) only when it is strictly shorter than the raw\nbytes (scheme `0`)."
3149
+ "description": "Encode FSL to a `<scheme><payload>` segment value (the part after `key=`).\r\nDEFLATE is used (scheme `1`) only when it is strictly shorter than the raw\r\nbytes (scheme `0`)."
3150
3150
  },
3151
3151
  {
3152
3152
  "kind": "function",
@@ -3164,7 +3164,7 @@
3164
3164
  }
3165
3165
  }
3166
3166
  ],
3167
- "description": "Inverse of encode_machine: decode a `<scheme><payload>` segment back\nto FSL. Async because inflate is async."
3167
+ "description": "Inverse of encode_machine: decode a `<scheme><payload>` segment back\r\nto FSL. Async because inflate is async."
3168
3168
  },
3169
3169
  {
3170
3170
  "kind": "function",
@@ -3218,7 +3218,7 @@
3218
3218
  }
3219
3219
  }
3220
3220
  ],
3221
- "description": "Return a new fragment body (no leading `#`) with `key`'s segment set to\n`value`, preserving every other segment and its order; appends if absent."
3221
+ "description": "Return a new fragment body (no leading `#`) with `key`'s segment set to\r\n`value`, preserving every other segment and its order; appends if absent."
3222
3222
  },
3223
3223
  {
3224
3224
  "kind": "function",
@@ -3236,7 +3236,7 @@
3236
3236
  }
3237
3237
  }
3238
3238
  ],
3239
- "description": "The fragment key an element owns: its `uhash` attribute if set, else its\n`id`, else `null` (does not participate in URL sync). The single source of\nthis rule, shared by the toolbar export and the sync controller."
3239
+ "description": "The fragment key an element owns: its `uhash` attribute if set, else its\r\n`id`, else `null` (does not participate in URL sync). The single source of\r\nthis rule, shared by the toolbar export and the sync controller."
3240
3240
  },
3241
3241
  {
3242
3242
  "kind": "function",
@@ -3275,7 +3275,7 @@
3275
3275
  }
3276
3276
  }
3277
3277
  ],
3278
- "description": "A shareable URL for `fsl` under `key`, merging into `currentHash` so sibling\nmachines' segments survive. Browser-defaulted (`location`) but injectable for\ntests."
3278
+ "description": "A shareable URL for `fsl` under `key`, merging into `currentHash` so sibling\r\nmachines' segments survive. Browser-defaulted (`location`) but injectable for\r\ntests."
3279
3279
  },
3280
3280
  {
3281
3281
  "kind": "function",
@@ -3554,7 +3554,7 @@
3554
3554
  "declarations": [
3555
3555
  {
3556
3556
  "kind": "class",
3557
- "description": "`<fsl-simulation>` — a random-walk driver for a parent `<fsl-instance>`.\n\n`Step` fires one uniformly-random legal action; `Play` auto-steps every\nFslSimulation.interval ms and stops automatically when the machine\nreaches a terminal state (no legal actions). Standalone (no host ancestor)\nthe controls are disabled.",
3557
+ "description": "`<fsl-simulation>` — a random-walk driver for a parent `<fsl-instance>`.\r\n\r\n`Step` fires one uniformly-random legal action; `Play` auto-steps every\r\nFslSimulation.interval ms and stops automatically when the machine\r\nreaches a terminal state (no legal actions). Standalone (no host ancestor)\r\nthe controls are disabled.",
3558
3558
  "name": "FslSimulation",
3559
3559
  "cssParts": [
3560
3560
  {
@@ -3676,7 +3676,7 @@
3676
3676
  "declarations": [
3677
3677
  {
3678
3678
  "kind": "class",
3679
- "description": "`<fsl-stochastic>` — a statistical/Monte-Carlo explorer for a parent\n`<fsl-instance>` (fsl#1384). Builds its own throwaway machine from the\nhost's `.fsl` source (never touching the live machine) and renders\naggregate run statistics in-panel. Standalone (no host) the controls are\ndisabled.",
3679
+ "description": "`<fsl-stochastic>` — a statistical/Monte-Carlo explorer for a parent\r\n`<fsl-instance>` (fsl#1384). Builds its own throwaway machine from the\r\nhost's `.fsl` source (never touching the live machine) and renders\r\naggregate run statistics in-panel. Standalone (no host) the controls are\r\ndisabled.",
3680
3680
  "name": "FslStochastic",
3681
3681
  "cssParts": [
3682
3682
  {
@@ -3763,7 +3763,7 @@
3763
3763
  {
3764
3764
  "kind": "field",
3765
3765
  "name": "play",
3766
- "description": "Animate the batch: accumulate runs incrementally via `requestAnimationFrame`,\nredrawing as they land. Resolves when the batch completes or is paused-to-stop.\n\nFalls back to immediate (synchronous chunk) scheduling under jsdom where\n`requestAnimationFrame` is undefined."
3766
+ "description": "Animate the batch: accumulate runs incrementally via `requestAnimationFrame`,\r\nredrawing as they land. Resolves when the batch completes or is paused-to-stop.\r\n\r\nFalls back to immediate (synchronous chunk) scheduling under jsdom where\r\n`requestAnimationFrame` is undefined."
3767
3767
  },
3768
3768
  {
3769
3769
  "kind": "method",
@@ -3825,7 +3825,7 @@
3825
3825
  "description": "The effective RNG seed used for this batch."
3826
3826
  }
3827
3827
  ],
3828
- "description": "Fold accumulated counters into a rendered summary. Shared by play\nfor incremental rendering during animation."
3828
+ "description": "Fold accumulated counters into a rendered summary. Shared by play\r\nfor incremental rendering during animation."
3829
3829
  },
3830
3830
  {
3831
3831
  "kind": "field",
@@ -4661,7 +4661,7 @@
4661
4661
  "description": "SVG markup from the viz pipeline (`machine_to_svg_string`, etc.)."
4662
4662
  }
4663
4663
  ],
4664
- "description": "Reorder a graphviz-rendered SVG's paint stack so action labels can't be\npainted over by edges. Graphviz interleaves nodes and edges and keeps each\nedge's label `<text>` inside the edge group, so a later edge can draw over an\nearlier edge's label. This lifts the layers into a clean back-to-front order:\n\n background → edges → nodes → action (edge) labels\n\nEach edge's label text is hoisted out of its edge group to the very top.\nMarkup that isn't graphviz output (no `g.graph`) is returned untouched."
4664
+ "description": "Reorder a graphviz-rendered SVG's paint stack so action labels can't be\r\npainted over by edges. Graphviz interleaves nodes and edges and keeps each\r\nedge's label `<text>` inside the edge group, so a later edge can draw over an\r\nearlier edge's label. This lifts the layers into a clean back-to-front order:\r\n\r\n background → edges → nodes → action (edge) labels\r\n\r\nEach edge's label text is hoisted out of its edge group to the very top.\r\nMarkup that isn't graphviz output (no `g.graph`) is returned untouched."
4665
4665
  }
4666
4666
  ],
4667
4667
  "exports": [
@@ -4703,7 +4703,7 @@
4703
4703
  "description": "The suffix to match after the prefix (e.g. `\"viz\"`)."
4704
4704
  }
4705
4705
  ],
4706
- "description": "Returns true when `tag_name` is exactly `fsl-<suffix>` or `jssm-<suffix>`\n(case-insensitive)."
4706
+ "description": "Returns true when `tag_name` is exactly `fsl-<suffix>` or `jssm-<suffix>`\r\n(case-insensitive)."
4707
4707
  },
4708
4708
  {
4709
4709
  "kind": "function",
@@ -4729,7 +4729,7 @@
4729
4729
  "description": "The suffix to match (e.g. `\"instance\"`)."
4730
4730
  }
4731
4731
  ],
4732
- "description": "Returns the nearest ancestor of `el` (or `el` itself) whose tag is\n`fsl-<suffix>` or `jssm-<suffix>`, or `null` if none exists."
4732
+ "description": "Returns the nearest ancestor of `el` (or `el` itself) whose tag is\r\n`fsl-<suffix>` or `jssm-<suffix>`, or `null` if none exists."
4733
4733
  },
4734
4734
  {
4735
4735
  "kind": "function",
@@ -4769,7 +4769,7 @@
4769
4769
  "description": "Constructor to register under `synonym_tag`\r\n (must be a distinct class from `CanonicalClass`)."
4770
4770
  }
4771
4771
  ],
4772
- "description": "Registers a canonical custom-element tag and its synonym tag.\n\n`customElements.define` requires a distinct constructor per tag name, so\ncallers pass the canonical class and a thin subclass for the synonym.\nThe function is idempotent: if either tag is already registered it skips\nthat `define` call rather than throwing."
4772
+ "description": "Registers a canonical custom-element tag and its synonym tag.\r\n\r\n`customElements.define` requires a distinct constructor per tag name, so\r\ncallers pass the canonical class and a thin subclass for the synonym.\r\nThe function is idempotent: if either tag is already registered it skips\r\nthat `define` call rather than throwing."
4773
4773
  },
4774
4774
  {
4775
4775
  "kind": "function",
@@ -4795,7 +4795,7 @@
4795
4795
  "description": "Constructor to register under `canonical_tag`."
4796
4796
  }
4797
4797
  ],
4798
- "description": "Registers a single canonical `fsl-*` custom-element tag, with no `jssm-*`\nsynonym.\n\nThis is the registration path for **new** web components. The `jssm-*`\nprefix is a deprecated backward-compatibility alias retained only for the\ncomponents that shipped under that name (`<jssm-viz>`, `<jssm-instance>`,\n`<jssm-bind>`); new components are `fsl-*`-only for fsl.tools brand\nalignment, and the legacy synonyms are slated for removal in v6. Use\ndefine_with_synonym only when maintaining one of those pre-existing\ndual-named components.\n\nIdempotent: skips the `define` call when the tag is already registered."
4798
+ "description": "Registers a single canonical `fsl-*` custom-element tag, with no `jssm-*`\r\nsynonym.\r\n\r\nThis is the registration path for **new** web components. The `jssm-*`\r\nprefix is a deprecated backward-compatibility alias retained only for the\r\ncomponents that shipped under that name (`<jssm-viz>`, `<jssm-instance>`,\r\n`<jssm-bind>`); new components are `fsl-*`-only for fsl.tools brand\r\nalignment, and the legacy synonyms are slated for removal in v6. Use\r\ndefine_with_synonym only when maintaining one of those pre-existing\r\ndual-named components.\r\n\r\nIdempotent: skips the `define` call when the tag is already registered."
4799
4799
  }
4800
4800
  ],
4801
4801
  "exports": [