Full Code of mar10/wunderbaum for AI

main 6cb02df61ccd cached
305 files
4.9 MB
1.3M tokens
1449 symbols
1 requests
Download .txt
Showing preview only (5,168K chars total). Download the full file or copy to clipboard to get everything.
Repository: mar10/wunderbaum
Branch: main
Commit: 6cb02df61ccd
Files: 305
Total size: 4.9 MB

Directory structure:
gitextract_w7u9tx_n/

├── .editorconfig
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   └── feature_request.md
│   ├── SECURITY.md
│   └── workflows/
│       ├── codeql.yml
│       ├── mkdocs.yml
│       ├── node.js.yml
│       └── stale.yml
├── .gitignore
├── .hintrc
├── .prettierrc
├── .python-version
├── .vscode/
│   ├── launch.json
│   └── settings.json
├── .yarnrc.yml
├── CHANGELOG.md
├── Gruntfile.ts
├── LICENSE
├── Pipfile
├── README.md
├── dist/
│   ├── wunderbaum.css
│   ├── wunderbaum.d.ts
│   ├── wunderbaum.esm.js
│   └── wunderbaum.umd.js
├── docs/
│   ├── .nojekyll
│   ├── _config.yml
│   ├── api/
│   │   ├── .nojekyll
│   │   ├── assets/
│   │   │   ├── hierarchy.js
│   │   │   ├── highlight.css
│   │   │   ├── icons.js
│   │   │   ├── main.js
│   │   │   ├── navigation.js
│   │   │   ├── search.js
│   │   │   └── style.css
│   │   ├── classes/
│   │   │   ├── util.Deferred.html
│   │   │   ├── util.ValidationError.html
│   │   │   ├── wb_node.WunderbaumNode.html
│   │   │   └── wunderbaum.Wunderbaum.html
│   │   ├── enums/
│   │   │   ├── types.ChangeType.html
│   │   │   ├── types.NavModeEnum.html
│   │   │   ├── types.NodeRegion.html
│   │   │   ├── types.NodeStatusType.html
│   │   │   └── types.RenderFlag.html
│   │   ├── functions/
│   │   │   ├── common.decompressSourceData.html
│   │   │   ├── common.makeNodeTitleMatcher.html
│   │   │   ├── common.makeNodeTitleStartMatcher.html
│   │   │   ├── common.nodeTitleSorter.html
│   │   │   ├── util.adaptiveThrottle.html
│   │   │   ├── util.assert.html
│   │   │   ├── util.debounce.html
│   │   │   ├── util.documentReady.html
│   │   │   ├── util.documentReadyPromise.html
│   │   │   ├── util.each.html
│   │   │   ├── util.elemFromHtml.html
│   │   │   ├── util.elemFromSelector.html
│   │   │   ├── util.error.html
│   │   │   ├── util.escapeHtml.html
│   │   │   ├── util.escapeRegex.html
│   │   │   ├── util.escapeTooltip.html
│   │   │   ├── util.eventToString.html
│   │   │   ├── util.extend.html
│   │   │   ├── util.extractHtmlText.html
│   │   │   ├── util.getOption.html
│   │   │   ├── util.getValueFromElem.html
│   │   │   ├── util.intToBool.html
│   │   │   ├── util.isArray.html
│   │   │   ├── util.isEmptyObject.html
│   │   │   ├── util.isFunction.html
│   │   │   ├── util.isPlainObject.html
│   │   │   ├── util.murmurHash3.html
│   │   │   ├── util.noop.html
│   │   │   ├── util.onEvent.html
│   │   │   ├── util.overrideMethod.html
│   │   │   ├── util.rotate.html
│   │   │   ├── util.setElemDisplay.html
│   │   │   ├── util.setTimeoutPromise.html
│   │   │   ├── util.setValueToElem.html
│   │   │   ├── util.sleep.html
│   │   │   ├── util.throttle.html
│   │   │   ├── util.toBool.html
│   │   │   ├── util.toPixel.html
│   │   │   ├── util.toSet.html
│   │   │   ├── util.toggleCheckbox.html
│   │   │   ├── util.type.html
│   │   │   └── util.unsafeCast.html
│   │   ├── hierarchy.html
│   │   ├── index.html
│   │   ├── interfaces/
│   │   │   ├── types.AddChildrenOptions.html
│   │   │   ├── types.ApplyCommandOptions.html
│   │   │   ├── types.ColumnDefinition.html
│   │   │   ├── types.ColumnEventInfo.html
│   │   │   ├── types.DragEventType.html
│   │   │   ├── types.DropEventType.html
│   │   │   ├── types.ExpandAllOptions.html
│   │   │   ├── types.FilterConnectType.html
│   │   │   ├── types.FilterNodesOptions.html
│   │   │   ├── types.GetStateOptions.html
│   │   │   ├── types.IconMapType.html
│   │   │   ├── types.LoadLazyNodesOptions.html
│   │   │   ├── types.MakeVisibleOptions.html
│   │   │   ├── types.NavigateOptions.html
│   │   │   ├── types.NodeTypeDefinition.html
│   │   │   ├── types.ReloadOptions.html
│   │   │   ├── types.RenderOptions.html
│   │   │   ├── types.ResetOrderOptions.html
│   │   │   ├── types.ScrollIntoViewOptions.html
│   │   │   ├── types.ScrollToOptions.html
│   │   │   ├── types.SetActiveOptions.html
│   │   │   ├── types.SetColumnOptions.html
│   │   │   ├── types.SetExpandedOptions.html
│   │   │   ├── types.SetSelectedOptions.html
│   │   │   ├── types.SetStateOptions.html
│   │   │   ├── types.SetStatusOptions.html
│   │   │   ├── types.SortOptions.html
│   │   │   ├── types.SourceAjaxType.html
│   │   │   ├── types.SourceObjectType.html
│   │   │   ├── types.TreeStateDefinition.html
│   │   │   ├── types.UpdateOptions.html
│   │   │   ├── types.VisitRowsOptions.html
│   │   │   ├── types.WbActivateEventType.html
│   │   │   ├── types.WbButtonClickEventType.html
│   │   │   ├── types.WbChangeEventType.html
│   │   │   ├── types.WbClickEventType.html
│   │   │   ├── types.WbDeactivateEventType.html
│   │   │   ├── types.WbEditApplyEventType.html
│   │   │   ├── types.WbEditEditEventType.html
│   │   │   ├── types.WbErrorEventType.html
│   │   │   ├── types.WbEventInfo.html
│   │   │   ├── types.WbExpandEventType.html
│   │   │   ├── types.WbFocusEventType.html
│   │   │   ├── types.WbIconBadgeEventResultType.html
│   │   │   ├── types.WbIconBadgeEventType.html
│   │   │   ├── types.WbInitEventType.html
│   │   │   ├── types.WbKeydownEventType.html
│   │   │   ├── types.WbModifyChildEventType.html
│   │   │   ├── types.WbNodeData.html
│   │   │   ├── types.WbNodeEventType.html
│   │   │   ├── types.WbReceiveEventType.html
│   │   │   ├── types.WbRenderEventType.html
│   │   │   ├── types.WbSelectEventType.html
│   │   │   ├── types.WbTreeEventType.html
│   │   │   ├── wb_options.InitWunderbaumOptions.html
│   │   │   └── wb_options.WunderbaumOptions.html
│   │   ├── modules/
│   │   │   ├── common.html
│   │   │   ├── types.html
│   │   │   ├── util.html
│   │   │   ├── wb_node.html
│   │   │   ├── wb_options.html
│   │   │   └── wunderbaum.html
│   │   ├── modules.html
│   │   ├── types/
│   │   │   ├── types.ApplyCommandType.html
│   │   │   ├── types.BoolOptionResolver.html
│   │   │   ├── types.BoolOrStringOptionResolver.html
│   │   │   ├── types.CheckboxOption.html
│   │   │   ├── types.ColumnDefinitionList.html
│   │   │   ├── types.ColumnEventInfoMap.html
│   │   │   ├── types.DeprecationOptions.html
│   │   │   ├── types.DndOptionsType.html
│   │   │   ├── types.DropEffectAllowedType.html
│   │   │   ├── types.DropEffectType.html
│   │   │   ├── types.DropRegionType.html
│   │   │   ├── types.DropRegionTypeList.html
│   │   │   ├── types.DropRegionTypeSet.html
│   │   │   ├── types.DynamicBoolOption.html
│   │   │   ├── types.DynamicBoolOrStringOption.html
│   │   │   ├── types.DynamicCheckboxOption.html
│   │   │   ├── types.DynamicIconOption.html
│   │   │   ├── types.DynamicStringOption.html
│   │   │   ├── types.DynamicTooltipOption.html
│   │   │   ├── types.EditOptionsType.html
│   │   │   ├── types.FilterModeType.html
│   │   │   ├── types.FilterOptionsType.html
│   │   │   ├── types.GridOptionsType.html
│   │   │   ├── types.IconOption.html
│   │   │   ├── types.InsertNodeType.html
│   │   │   ├── types.KeynavOptionsType.html
│   │   │   ├── types.LoggerOptionsType.html
│   │   │   ├── types.MatcherCallback.html
│   │   │   ├── types.NavigationType.html
│   │   │   ├── types.NodeAnyCallback.html
│   │   │   ├── types.NodeFilterCallback.html
│   │   │   ├── types.NodeFilterResponse.html
│   │   │   ├── types.NodePropertyGetterCallback.html
│   │   │   ├── types.NodeSelectCallback.html
│   │   │   ├── types.NodeStringCallback.html
│   │   │   ├── types.NodeToDictCallback.html
│   │   │   ├── types.NodeTypeDefinitionMap.html
│   │   │   ├── types.NodeVisitCallback.html
│   │   │   ├── types.NodeVisitResponse.html
│   │   │   ├── types.SelectModeType.html
│   │   │   ├── types.SortByPropertyOptions.html
│   │   │   ├── types.SortCallback.html
│   │   │   ├── types.SortKeyCallback.html
│   │   │   ├── types.SortOrderType.html
│   │   │   ├── types.SourceListType.html
│   │   │   ├── types.SourceType.html
│   │   │   ├── types.TooltipOption.html
│   │   │   ├── types.TranslationsType.html
│   │   │   ├── types.TristateType.html
│   │   │   ├── types.WbCancelableEventResultType.html
│   │   │   ├── types.WbIconBadgeCallback.html
│   │   │   ├── util.EventCallbackType.html
│   │   │   ├── util.FunctionType.html
│   │   │   └── util.NotPromise.html
│   │   └── variables/
│   │       ├── common.DEFAULT_DEBUGLEVEL.html
│   │       ├── common.DEFAULT_MIN_COL_WIDTH.html
│   │       ├── common.DEFAULT_ROW_HEIGHT.html
│   │       ├── common.ICON_WIDTH.html
│   │       ├── common.INPUT_KEYS.html
│   │       ├── common.KEY_NODATA.html
│   │       ├── common.KEY_TO_COMMAND_MAP.html
│   │       ├── common.KEY_TO_NAVIGATION_MAP.html
│   │       ├── common.NODE_TYPE_FOLDER.html
│   │       ├── common.RENDER_MAX_PREFETCH.html
│   │       ├── common.RENDER_MIN_PREFETCH.html
│   │       ├── common.RESERVED_TREE_SOURCE_KEYS.html
│   │       ├── common.TEST_FILE_PATH.html
│   │       ├── common.TEST_HTML.html
│   │       ├── common.TITLE_SPAN_PAD_Y.html
│   │       ├── common.defaultIconMaps.html
│   │       ├── util.MAX_INT.html
│   │       ├── util.MOUSE_BUTTONS.html
│   │       └── util.isMac.html
│   ├── assets/
│   │   ├── favicon/
│   │   │   └── site.webmanifest
│   │   ├── json/
│   │   │   ├── ajax-lazy-products.json
│   │   │   ├── ajax-tree-products.json
│   │   │   ├── ajax-tree-products_t.json
│   │   │   ├── fixture_department_1k_3_6_p.json
│   │   │   ├── fixture_department_1k_3_6_t_c.json
│   │   │   └── tree_department_M_t_c.json
│   │   └── skeleton.html
│   ├── demo/
│   │   ├── demo-custom.js
│   │   ├── demo-editable.js
│   │   ├── demo-fixedcol.js
│   │   ├── demo-grid.js
│   │   ├── demo-large.js
│   │   ├── demo-minimal.js
│   │   ├── demo-plain.js
│   │   ├── demo-readonly.js
│   │   ├── demo-select.js
│   │   ├── demo-welcome.js
│   │   ├── index.html
│   │   ├── navigation.js
│   │   └── style.css
│   ├── googlecc7a2a5f2bb40f68.html
│   ├── index.md
│   ├── tutorial/
│   │   ├── concepts.md
│   │   ├── contribute.md
│   │   ├── migrate.md
│   │   ├── quick_start.md
│   │   ├── tutorial_api.md
│   │   ├── tutorial_dnd.md
│   │   ├── tutorial_edit.md
│   │   ├── tutorial_events.md
│   │   ├── tutorial_filter.md
│   │   ├── tutorial_grid.md
│   │   ├── tutorial_initialize.md
│   │   ├── tutorial_keyboard.md
│   │   ├── tutorial_render.md
│   │   ├── tutorial_select.md
│   │   ├── tutorial_source.md
│   │   └── tutorial_styling.md
│   └── unittest/
│       ├── ajax-simple-sub.json
│       ├── ajax-simple.json
│       ├── test-core-fixture1.js
│       ├── test-core.js
│       ├── test-dev.html
│       └── test-dist.html
├── eslint.config.mjs
├── mkdocs.yml
├── package.json
├── rollup.config.mjs
├── src/
│   ├── common.ts
│   ├── debounce.ts
│   ├── deferred.ts
│   ├── drag_observer.ts
│   ├── types.ts
│   ├── util.ts
│   ├── wb_ext_dnd.ts
│   ├── wb_ext_edit.ts
│   ├── wb_ext_filter.ts
│   ├── wb_ext_grid.ts
│   ├── wb_ext_keynav.ts
│   ├── wb_ext_logger.ts
│   ├── wb_extension_base.ts
│   ├── wb_node.ts
│   ├── wb_options.ts
│   ├── wunderbaum.scss
│   └── wunderbaum.ts
├── test/
│   ├── generator/
│   │   ├── README.txt
│   │   ├── __init__.py
│   │   ├── generator.py
│   │   └── make_fixture.py
│   ├── gui_test.ods
│   ├── playground.html
│   ├── playground.js
│   └── unit/
│       ├── ajax-simple-sub.json
│       ├── ajax-simple.json
│       ├── test-core-fixture1.js
│       ├── test-core.js
│       ├── test-dev.html
│       └── test-dist.html
├── tsconfig.json
└── typedoc.json

================================================
FILE CONTENTS
================================================

================================================
FILE: .editorconfig
================================================
; EditorConfig is awesome: http://EditorConfig.org

; top-most EditorConfig file
root = true

; Unix-style newlines with a newline ending every file
[*]
; end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true

; 4 space indentation
[*.py]
indent_style = space
indent_size = 4

; Tab indentation (no size specified)
[*.js]
; indent_style = tab
indent_style = space
indent_size = 2

; Indentation override for all JS under lib directory
[lib/**.js]
indent_style = space
indent_size = 2


================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms

github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
# custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
custom: ['https://www.paypal.com/donate/?hosted_button_id=RA6G29AZRUD44']


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: ""
labels: bug, need-triage
assignees: ""
---

Thank you for your contribution.

See [here](https://mar10.github.io/wunderbaum/index.html#/tutorial/contribute) for the contribution guidelines.

**Describe the bug**
A clear and concise description of what the bug is.

**To Reproduce**
Steps to reproduce the behavior:

1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error

**Expected behavior**
A clear and concise description of what you expected to happen.

**Screenshots**
If applicable, add screenshots to help explain your problem.

**Minimal Reproducible Example**
See here for an details and an
[HTML template](https://mar10.github.io/wunderbaum/index.html#/tutorial/contribute) or create one at [JS BIN](https://jsbin.com/lecasinava/edit?html,js,output)

**Desktop (please complete the following information):**

- OS: [e.g. iOS]
- Browser [e.g. chrome, safari]
- Version [e.g. 22]

**Smartphone (please complete the following information):**

- Device: [e.g. iPhone6]
- OS: [e.g. iOS8.1]
- Browser [e.g. stock browser, safari]
- Version [e.g. 22]

**Additional context**
Add any other context about the problem here.


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: enhancement
assignees: ''

---

Thank you for your contribution.

See [here](https://mar10.github.io/wunderbaum/index.html#/tutorial/contribute) for the contribution guidelines.

**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

**Describe the solution you'd like**
A clear and concise description of what you want to happen.

**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.

**Additional context**
Add any other context or screenshots about the feature request here.


================================================
FILE: .github/SECURITY.md
================================================
# Security Policy

## Supported Versions

These project versions are currently being supported with security updates:

| Version | Supported          |
| ------- | ------------------ |
| 1.0.x   | :white_check_mark: |

<!-- | < 4.0   | :x:                | -->


## Reporting a Vulnerability

<!--
Use this section to tell people how to report a vulnerability.

Tell them where to go, how often they can expect to get an update on a
reported vulnerability, what to expect if the vulnerability is accepted or
declined, etc.
-->

Thank you for reporting a security related issue using a private channel 
instead of opening a public issue!

The security team (i.e. me) will try to acknowledge and respond as quick as 
possible.

To report a security issue, please email 

> security(at)wwwendt.de

and, to your best knowledge, please

- Include your name and affiliation (if any).
- Include the scope of the vulnerability. Let us know who could use this exploit.
- Mention the affected versions.
- Document steps to identify the vulnerability. It is important that we can 
  reproduce your findings.
- Describe how to exploit vulnerability, give us an attack scenario.
- If known, describe mitigations for the issue.

This project follows a 90 day disclosure timeline.

(See also [Vulnerability Disclosure Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Vulnerability_Disclosure_Cheat_Sheet.html#initial-report).)


================================================
FILE: .github/workflows/codeql.yml
================================================
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"

on:
  push:
    branches: [ "main" ]
  pull_request:
    # The branches below must be a subset of the branches above
    branches: [ "main" ]
  schedule:
    - cron: '40 8 * * 3'

jobs:
  analyze:
    name: Analyze
    runs-on: ubuntu-latest
    permissions:
      actions: read
      contents: read
      security-events: write

    strategy:
      fail-fast: false
      matrix:
        language: [ 'javascript' ]
        # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
        # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
        paths:
          - src
        # paths-ignore:
        #   - src/node_modules
        #   - '**/*.test.js'

    steps:
    - name: Checkout repository
      uses: actions/checkout@v3

    # Initializes the CodeQL tools for scanning.
    - name: Initialize CodeQL
      uses: github/codeql-action/init@v2
      with:
        languages: ${{ matrix.language }}
        # If you wish to specify custom queries, you can do so here or in a config file.
        # By default, queries listed here will override any specified in a config file.
        # Prefix the list here with "+" to use these queries and those in the config file.

        # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
        # queries: security-extended,security-and-quality


    # Autobuild attempts to build any compiled languages  (C/C++, C#, Go, or Java).
    # If this step fails, then you should remove it and run the build manually (see below)
    - name: Autobuild
      uses: github/codeql-action/autobuild@v2

    # ℹ️ Command-line programs to run using the OS shell.
    # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun

    #   If the Autobuild fails above, remove it and uncomment the following three lines.
    #   modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.

    # - run: |
    #   echo "Run, Build Application using script"
    #   ./location_of_script_within_repo/buildscript.sh

    - name: Perform CodeQL Analysis
      uses: github/codeql-action/analyze@v2
      with:
        category: "/language:${{matrix.language}}"


================================================
FILE: .github/workflows/mkdocs.yml
================================================
name: mkdocs
on:
  push:
    branches:
      - master
      - main
permissions:
  contents: write
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Configure Git Credentials
        run: |
          git config user.name github-actions[bot]
          git config user.email 41898282+github-actions[bot]@users.noreply.github.com

      - uses: actions/setup-python@v5
        with:
          python-version: 3.x

      - run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV

      - uses: actions/cache@v4
        with:
          key: mkdocs-material-${{ env.cache_id }}
          path: .cache
          restore-keys: |
            mkdocs-material-

      - run: pip install mkdocs-material

      - run: mkdocs gh-deploy --force

      - name: Commit 'docs/unittest' folder to 'gh-pages'
        run: |
          git fetch
          git checkout gh-pages
          git checkout main -- docs/unittest
          mv docs/unittest unittest
          git add unittest
          git commit -m "Add '/docs/unittest' folder from 'main' branch to /unittest"
          git push origin gh-pages


================================================
FILE: .github/workflows/node.js.yml
================================================
# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-nodejs

name: Node.js CI

on:
  push:
    branches: ["main"]
  pull_request:
    branches: ["main"]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4
      - name: Enable Corepack
        run: corepack enable
      - name: Use Node.js 20.x
        uses: actions/setup-node@v4
        with:
          node-version: "20.x"
          cache: "yarn"
      - name: Install dependencies
        run: yarn install
        # run: yarn install --immutable
      - run: yarn add grunt-cli
      - name: Run lint
        run: yarn lint
      - name: Run tests
        run: yarn test
    # - name: Run build
    #   run: yarn build


================================================
FILE: .github/workflows/stale.yml
================================================
# This workflow warns and then closes issues and PRs that have had no activity for a specified amount of time.
#
# You can adjust the behavior by modifying this file.
# For more information, see:
# https://github.com/actions/stale
name: Mark stale issues and pull requests

on:
  schedule:
  - cron: '26 14 * * *'

jobs:
  stale:

    runs-on: ubuntu-latest
    permissions:
      issues: write
      pull-requests: write

    steps:
    - uses: actions/stale@v5
      with:
        repo-token: ${{ secrets.GITHUB_TOKEN }}
        
        days-before-stale: 90
        days-before-close: 14
        exempt-all-milestones: true
        operations-per-run: 5

        stale-issue-label: 'no-issue-activity'
        exempt-issue-labels: 'pinned,security'
        stale-issue-message: |
          This issue has been automatically marked as stale because it has not had
          recent activity. It will be closed if no further activity occurs.
          Thank you for your contributions.
        close-issue-reason: 'not_planned'
        
        stale-pr-label: 'no-pr-activity'
        exempt-pr-labels: 'pinned,security'
        stale-pr-message: |
          This pull request has been automatically marked as stale because it has not had
          recent activity. It will be closed if no further activity occurs.
          Thank you for your contributions.


================================================
FILE: .gitignore
================================================
__pycache__
.DS_Store
.pyftpsync-meta.json
.venv/
*.log
/.settings
/archive
/build
/node_modules
/site/
/test/triage
docs/tutorial/FT_*.md
playwright-report/
test-results/
/test/fixtures
test/issue_*.*
/.yarn
.pnp.cjs
.pnp.loader.mjs


================================================
FILE: .hintrc
================================================
{
  "extends": [
    "development"
  ]
}

================================================
FILE: .prettierrc
================================================
# Style guide rationale:
# Width 80 is default (and explicitly recommended) by prettier
# - 2 space indentation and trailing semicolons seem to be most popular
#     https://hackernoon.com/what-javascript-code-style-is-the-most-popular-5a3f5bec1f6f
#   It is also the prettier's default
# - Double quotes are default in prettier and mandatory in Black
# - Trailing comma produces smaller diffs
# BUT:
# As a first step, we keep the current whitespace setting:
# - use tabs
# - tabWitdh 4

printWidth: 80
useTabs: false
tabWidth: 2
semi: true
singleQuote: false
trailingComma: "es5"
bracketSpacing: true  # because it's prettier's default
#requirePragma: true
endOfLine: "auto"  # don't rewrite all lines with `yarn format` on Windows
#overrides:
#  - files: "*.test.js"
#    options:
#      semi: true


================================================
FILE: .python-version
================================================
3.12


================================================
FILE: .vscode/launch.json
================================================
{
  // Use IntelliSense to learn about possible attributes.
  // Hover to view descriptions of existing attributes.
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Python Debugger: Current File with Arguments",
      "type": "debugpy",
      "request": "launch",
      "program": "${file}",
      "console": "integratedTerminal",
      "args": ["${command:pickArgs}"]
    },
    {
      "type": "chrome",
      "request": "launch",
      "name": "Launch Chrome against localhost",
      "url": "http://localhost:8080",
      "webRoot": "${workspaceFolder}"
    }
  ]
}


================================================
FILE: .vscode/settings.json
================================================
{
  "python.formatting.provider": "black",
  "files.exclude": {
    "**/build": true,
    "**/dist": true,
    "**/docs/api": true
  },
  "explorer.excludeGitIgnore": false,
  "editor.formatOnSave": true,
  "black-formatter.importStrategy": "fromEnvironment",
  "eslint.useFlatConfig": true
}

================================================
FILE: .yarnrc.yml
================================================
nodeLinker: node-modules


================================================
FILE: CHANGELOG.md
================================================
# 1.0.0 / Unreleased

First release.

# Beta-Changes since v0.2.0

> This section will be removed after the beta phase. <br>
> Note that semantic versioning rules are not strictly followed during this phase.

- v0.14.1: Fix checkbox assignment bug in wb_node.ts where the value was not being assigned to this.checkbox.

- v0.14.0: Refactor sorting:
  - Deprecate `sortChildren()` and `sortByProperty()` in favor of `sort()`.
  - Add `key` callback argument and deprecate `cmp`.
  - Add `tree.options.sortFoldersFirst` option.
  - Add `tree.resort()`.
- v0.14.0: Add `tree.reload()`.
- v0.14.0: Add tree option `autoKeys`.
- v0.14.0: Don't open file in browser when dropped in empty area.
- v0.14.0: Fix icon when expanding an empty lazy node.
- v0.14.0: Fix [#129](https://github.com/mar10/wunderbaum/issues/129)
  Focus on click.
- v0.14.0: Fix [#136)(https://github.com/mar10/wunderbaum/issues/136)
  Fix behavior of setSelected in "single" selectMode.
- v0.14.0: Add `dataTransfer` to `DropEventType`.
- v0.14.0: Add `tree.children` and `tree.parent` getters.
- v0.14.0: Add `tree.getRefKeys(selected)` and `node.getRefKeys(selected)` methods.
- v0.14.0: Support HTML string for `iconMap.expander...` properties.
- v0.14.0: Expose `Wunderbaum.iconMaps` to be used as defaults for `iconMap` when
  passing partial maps.
  Deprecate `Wunderbaum.iconMap` getter in favor of `iconMaps`.

- v0.13.0: Add `tree.saveState()` and `tree.restoreState()` methods (experimental).
- v0.13.0: Breadcrumb:
  - Show node icons
  - Parts can be clicked to activate parent nodes
  - `connectTopBreadcrumb` can also be a selector
- v0.13.0: Filter:
  - BREAKING: Filter: changed `filter.connectInput` to `filter.connect: {...}`.
  - Add support for prev/next-match buttons and an info string.
  - New mode 'mark' (like 'dim' but does not gray out)
- v0.13.0: Add `tree.countUnique()` method.

- v0.12.1: Fix flat source format for positional args.

- v0.12.0: Add `deep`, `resetLazy`, and `collapseOthers` options to
  `node.` and `tree.expandAll()`.
- v0.12.0: Add `resetLazy` options to `tree.setExpanded(false, ...)`.
- v0.12.0: Fix [#107](https://github.com/mar10/wunderbaum/issues/107)
  Double click on expander is calling .setExpanded() twice.
- v0.12.0: Fix [#108](https://github.com/mar10/wunderbaum/issues/108)
  Exception when clicking a cell in rowmode.
- v0.12.0: Fix [#109](https://github.com/mar10/wunderbaum/issues/109)
  expandAll: 'depth' option ignored when flag is set to false.

- v0.11.1: Accept `0`/`1` for known boolean node property values (allowing for
  more compact JSON sources).
- v0.11.1: Fix passing `checkbox: 'radio'`.
- v0.11.1: Fix sorting boolean and undefined column values.
- v0.11.1: Prevent editing a status node title.
- v0.11.1: Improve random data generation in demos.
- v0.11.1: Fix drop effect on dragenter.

- v0.11.0: BREAKING
  Renamed `tree.options.resizableColumns` to `columnsResizable`.
- v0.11.0: Add support for icon buttons in column headers (menu, sort, filter).
- v0.11.0: Add `tree.options.columnsSortable` and `ColumnDefinition.sortable`.
- v0.11.0: Add `tree.options.columnsFilerable` and `ColumnDefinition.filterable`.
- v0.11.0: Add `tree.options.columnsMenu` and `ColumnDefinition.menu`.
- v0.11.0: Add `tree.sortByProperty()`.
- v0.11.0: Add `util.rotate()`.
- v0.11.0: Migrate documentation from docsify to MkDocs.

- v0.10.1: Fix column resizer for Edge.

- v0.10.0: Add `tree.options.resizableColumns` and `ColumnDefinition.resizable`.
- v0.10.0: Add `tree.resetColumns()`.

- v0.9.0: DEPRECATE `tree.filterBranches()`:
  use `tree.filterNodes(..., {matchBranch: true})` instead.
- v0.9.0: Allow to pass a RegEx to filterNodes()
- v0.9.0: Add `tree.countMatches()` method.
- v0.9.0: Add `node.hasFocus()` method.
- v0.9.0: Fix `tree.filter.hideExpanders` option.
- v0.9.0: Drop `tree.filter.count` and `hideExpandedCounter` options in favor of
  `tree.iconBadge` (see tutorial for an example).

- v0.8.4: Fix #90: Add tooltip functionality to node titles.

- v0.8.3: Fix #84: After editing a node title a javascript error
  "Cannot read properties of null (reading '\_render')" occurs (Chromium).

- v0.8.2: Fix #82: Drag/Drop of nodes does not work any more.

- v0.8.1: Distinguish between `.log()` and `.logDebug()`, which now call
  `console.log()` and `console.debug()` respectively.
- v0.8.1: Fix #72: DragEnter event does not provide the source node, only the target.
- v0.8.1: Fix #73: Fix typing of `tree.options.dnd.dropEffect` and others.
- v0.8.1: Fix #75: After reloading nodes with "resetLazy", wunderbaum is broken.
- v0.8.1: Fix #76: Lazyload could be called for the same node multiple times.
- v0.8.1: Fix #78: Add JS Bin template for reporting issues.
- v0.8.1: Fix #79: Improve logging when drop operation is prevented.
- Thanks to @jogibear9988 for the testing, opening, and contributing to most of
  these issues.

- v0.8.0: Add `expand(e)` and `beforeExpand(e)` events.
- v0.8.0: Add `tree.findByRefKey()`, `node.getCloneList()`, and `node.isClone()`.
- v0.8.0: Add `node.startEditTitle()`.
- v0.8.0: Fix #70: resetLazy does not remove sub childrens "key"s, so error
  occurs when re-adding.
- v0.8.0: Allow to `throw new ValidationError()` in `tree.change(e)` event.
- v0.8.0: `node.setActive()` allows to focus or edit a cell.
- v0.8.0: Rename `tree.isEditing()` to `.isEditingTitle()`
  and add `tree.isEditing()` to check for title _and_ grid cell editing.

- v0.7.0: #68 Always reset 'loading' status.
- v0.7.0: #69 prevent iOS browser from opening links on drop.
- v0.7.0: BREAKING CHANGE:
  Changed syntax format for compressed formats:

  - `_keyMap: {"t": "title", ...}` -> `_keyMap: {"title": "t", ...}`.
  - `_typeList: [...]` -> `_valueMap: {"type": [...]}`.
    This allows to compress values of other properties than `type`.

- v0.6.0: #61 Avoid race conditions in debounced 'change' event handler.
- v0.6.0: #63 Don't overwrite dataTransfer 'text/plain' on drag'n'drop.
- v0.6.0: #64 Accept Promise in `tree.load()`.

- v0.5.5: Rename `defaultDropMode` -> `suggestedDropMode`; add `suggestedDropEffect`
- v0.5.5: Work on drag'n'drop (dropEffects, cross-window, ...)

- v0.5.4: Use eslint
- v0.5.4: Removed deprecated `setModified()`

- v0.5.2: Improved typing and drag'n'drop behavior (@jogibear9988)
- v0.5.2: Add `tree.options.adjustHeight` (default: `true`)
- v0.5.2: Add `tree.options.scrollIntoViewOnExpandClick` (default: `true`)
- v0.5.2: Add `tree.options.dnd.serializeClipboardData` (default: `true`)

- v0.5.1: Add EXPERIMENTAL support for `tree.iconBadge` (allows to implement counter badges, ...)

- v0.5.0: Add support for Font Awesome icons (`options.iconMap: "fontawesome6"`)

- v0.4.0: Add support for hierarchical selection (`selectMode: "hier"`)
- v0.4.0: Add support for radio-groups

- v0.3.6: Remove import of wunderbaum.scss into TS modules
- v0.3.6: Renamed `setModified()` to `update()`
- v0.3.6: Removed `node.render()`: use `node.update()` instead
- v0.3.6: #26: New option `autoCollapse` and methods `node.collapseSiblings()`

- v0.3.5: #23: New `columns` option `headerClasses`

- v0.3.4: Add `tree.toDictArray()`
- v0.3.4: #21: Use CSS variables to allow dynamic custom themes
- v0.3.4: #22: Set box-sizing: border-box
- v0.3.4: #23: wb-helper-end is not applied to column header

- v0.3.2, v0.3.3: Improve distribution

- v0.3.1: #20: Fix sourcemaps
- v0.3.1: #19: Fix missing icons in deploymet by inlining
- v0.3.1: #19: Make options optional: debugLevel, edit, filter, grid
- v0.3.1: Update typescript to 5.x

- v0.3.0: new option `tree.options.emptyChildListExpandable` controls if
  parent nodes with `node.children === []` are still expandable
  (like macOS Finder). Defaults to false.
- v0.3.0: `load()`, `source` and `lazyLoad` now support an extended sytax :
  ```js
  source: {
    url: "path/to/request",
    params: {},  // key/value pairs converted to URL parameters
    body: {},    // key/value pairs converted to JSON body (defaults to method POST)
    options: {}, // passed to `fetch(url, OPTIONS)`
  }
  ```
- v0.3.0: Add `node.setIcon()`.
- v0.3.0: Add `tree.` and `node.sortChildren()`.
- v0.3.0: Removed `tree.updateColumns()`. Use `tree.setModified(ChangeType.colStructure)` instead.


================================================
FILE: Gruntfile.ts
================================================
/*
 * Build scripts for Wunderbaum
 */
module.exports = (grunt: any) => {
  grunt.initConfig({
    pkg: grunt.file.readJSON("package.json"),

    exec: {
      build: {
        stdin: true, // Allow interactive console
        cmd: "npm run build",
      },
      copy_dist: {
        stdin: true, // Allow interactive console
        cmd: "rm dist/*.* ; cp build/*.* dist",
      },
      make_docs: {
        stdin: true, // Allow interactive console
        cmd: "npm run api_docs",
      },
      make_dist: {
        stdin: true, // Allow interactive console
        cmd: "npm run make_dist",
      },
    },
    connect: {
      dev: {
        options: {
          port: 8088,
          base: "./",
          keepalive: false, // pass on, so subsequent tasks (like watch or qunit) can start
        },
      },
    },
    qunit: {
      options: {
        httpBase: "http://localhost:8088",
        //   timeout: 20000,
        //   "--cookies-file": "misc/cookies.txt",
      },
      dist: ["test/unit/test_dist.html"],
      // build: ["test/unit/test-build.html"],
      develop: ["test/unit/test-dev.html"],
    },
    yabs: {
      release: {
        common: {
          // defaults for all tools
          manifests: ["package.json"],
        },
        // The following tools are run in order:
        check: {
          branch: ["main"],
          canPush: true,
          clean: true,
          cmpVersion: "gte",
        },
        run_test: { tasks: ["test_dev"], always: true },
        bump: {}, // 'bump' also uses the increment mode `yabs:release:MODE`
        run_build: { tasks: ["exec:build"], always: true }, // TODO 'always' NYI
        run_copy_dist: { tasks: ["exec:copy_dist"] },
        run_make_docs: { tasks: ["exec:make_docs"] },
        run_test_dist: { tasks: ["test_dist"] },
        commit: { add: "." },
        tag: {},
        push: { tags: true, useFollowTags: true },
        githubRelease: {
          repo: "mar10/wunderbaum",
          draft: false,
        },
        npmPublish: {},
        bump_develop: { inc: "prepatch" },
        commit_develop: {
          message: "Bump prerelease ({%= version %}) [ci skip]",
        },
        push_develop: {},
      },
    },
  });

  // ----------------------------------------------------------------------------

  // Load "grunt*" dependencies
  for (const key in grunt.file.readJSON("package.json").devDependencies) {
    if (key !== "grunt" && key.indexOf("grunt") === 0) {
      grunt.loadNpmTasks(key);
    }
  }
  // Register tasks
  grunt.registerTask("test_dev", [
    "connect:dev", // start server
    "qunit:develop",
  ]);
  grunt.registerTask("test_dist", [
    "connect:dev", // start server
    "qunit:dist",
  ]);
  grunt.registerTask("ci", ["test_dev"]); // Called by 'npm test'
  grunt.registerTask("default", ["test_dev"]);
};


================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2021-2025 Martin Wendt

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: Pipfile
================================================
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
# fabulist = "*"
"nutree[all]" = ">=0.9"
mkdocs = "*"
mkdocs-material = "*"

[dev-packages]
black = "24.8"

[requires]
python_version = "3.12"

[pipenv]
# allow_prereleases = true


================================================
FILE: README.md
================================================
# ![](docs/assets/tree_logo_32.png) wunderbaum

[![GitHub version](https://img.shields.io/github/v/release/mar10/wunderbaum?display_name=tag&sort=semver)](https://github.com/mar10/wunderbaum/releases/latest)
[![Node.js CI](https://github.com/mar10/wunderbaum/actions/workflows/node.js.yml/badge.svg)](https://github.com/mar10/wunderbaum/actions/workflows/node.js.yml)
[![npm](https://img.shields.io/npm/dm/wunderbaum.svg)](https://www.npmjs.com/package/wunderbaum)
[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/wunderbaum/badge)](https://www.jsdelivr.com/package/npm/wunderbaum)
[![Released with: grunt-yabs](https://img.shields.io/badge/released%20with-grunt--yabs-yellowgreen)](https://github.com/mar10/grunt-yabs)
[![StackOverflow: wunderbaum](https://img.shields.io/badge/StackOverflow-wunderbaum-blue.svg)](https://stackoverflow.com/questions/tagged/wunderbaum)

> A modern tree/treegrid control for the web.

Designated successor of [Fancytree](https://github.com/mar10/fancytree).<br>
See the [upgrade guide](https://mar10.github.io/wunderbaum/tutorial/migrate/#what-has-changed)
for details.

[![Demo](https://mar10.github.io/wunderbaum/assets/teaser_2.png)](https://mar10.github.io/wunderbaum/demo/)

- Supports drag and drop, editing, filtering, sorting, and multi-selection.
- Written in TypeScript, transpiled to ES6 (esm & umd).
- Performant handling of big data structures.
- Provide an object oriented API.
- Framework agnostic.
- Zero dependencies.
- Keyboard support.

### Details

- [Online Demo](https://mar10.github.io/wunderbaum/demo/)
- [Documentation](https://mar10.github.io/wunderbaum/)
- [API Reference](https://mar10.github.io/wunderbaum/api/index.html)
- [Quick Start](https://mar10.github.io/wunderbaum/#/tutorial/quick_start)


================================================
FILE: dist/wunderbaum.css
================================================
@charset "UTF-8";
/*!
 * Wunderbaum style sheet (generated from wunderbaum.scss)
 * Copyright (c) 2021-2025, Martin Wendt. Released under the MIT license.
 * @VERSION, @DATE (https://github.com/mar10/wunderbaum)
 */
:root,
:host {
  --wb-font-stack: Helvetica, sans-serif;
  --wb-error-color: #b5373b;
  --wb-node-text-color: #56534c;
  --wb-border-color: #56534c;
  --wb-bg-highlight-color: #26a0da;
  --wb-header-color: #dedede;
  --wb-background-color: #ffffff;
  --wb-alternate-row-color: #f7f7f7;
  --wb-alternate-row-color-hover: #f3f3f3;
  --wb-focus-border-color: #275dc5;
  --wb-drop-source-color: rgb(211.3703703704, 209.6481481481, 205.6296296296);
  --wb-drop-target-color: rgb(212.2834645669, 236.2992125984, 247.7165354331);
  --wb-dim-color: rgb(139.5925925926, 135.037037037, 124.4074074074);
  --wb-error-background-color: rgb(244.6292372881, 220.8707627119, 221.625);
  --wb-hover-color: rgb(247.1401574803, 251.5590551181, 253.6598425197);
  --wb-hover-border-color: rgb(247.1401574803, 251.5590551181, 253.6598425197);
  --wb-grid-color: #dedede;
  --wb-active-color: #e5f3fb;
  --wb-active-cell-color: rgb(125.1417322835, 198.1496062992, 232.8582677165);
  --wb-active-border-color: #70c0e7;
  --wb-active-hover-color: #dceff8;
  --wb-active-hover-border-color: #26a0da;
  --wb-active-column-color: rgb(247.1401574803, 251.5590551181, 253.6598425197);
  --wb-active-header-column-color: rgb(196.5, 196.5, 196.5);
  --wb-active-color-grayscale: #f0f0f0;
  --wb-active-border-color-grayscale: rgb(171.5, 171.5, 171.5);
  --wb-active-hover-color-grayscale: #eaeaea;
  --wb-active-cell-color-grayscale: #b3b3b3;
  --wb-grid-color-grayscale: #dedede;
  --wb-filter-dim-color: #dedede;
  --wb-filter-submatch-color: #868581;
  --wb-row-outer-height: 22px;
  --wb-row-inner-height: 20px;
  --wb-row-padding-y: 1px;
  --wb-col-padding-x: 2px;
  --wb-icon-outer-height: 20px;
  --wb-icon-outer-width: 20px;
  --wb-icon-height: 16px;
  --wb-icon-width: 16px;
  --wb-icon-padding-y: 2px;
  --wb-icon-padding-x: 2px;
  --wb-header-height: 22px;
}

div.wunderbaum * {
  box-sizing: border-box;
}

div.wunderbaum {
  height: 100%;
  min-height: 4px;
  background-color: var(--wb-background-color);
  margin: 0;
  padding: 0;
  font-family: var(--wb-font-stack);
  font-size: 14px;
  color: var(--wb-node-text-color);
  border: 2px solid var(--wb-border-color);
  border-radius: 4px;
  background-clip: content-box;
  overflow-x: auto;
  overflow-y: scroll;
}
div.wunderbaum:focus, div.wunderbaum:focus-within {
  border-color: var(--wb-focus-border-color);
}
div.wunderbaum.wb-disabled {
  opacity: 0.7;
  pointer-events: none;
}
div.wunderbaum div.wb-list-container {
  position: relative;
  min-height: 4px;
}
div.wunderbaum {
  /* --- FIXED-COLUMN --- */
}
div.wunderbaum div.wb-header {
  position: sticky;
  top: 0;
  z-index: 2;
  -webkit-user-select: none; /* Safari */
  user-select: none;
}
div.wunderbaum div.wb-header,
div.wunderbaum div.wb-list-container {
  overflow: unset;
}
div.wunderbaum div.wb-row {
  position: absolute;
  width: 100%;
  height: var(--wb-row-outer-height);
  line-height: var(--wb-row-outer-height);
  border: 1px solid transparent;
}
div.wunderbaum {
  /* Fixed column must be opaque, i.e. have the bg color set. */
}
div.wunderbaum.wb-fixed-col span.wb-col:first-of-type {
  position: sticky;
  left: 0;
  z-index: 1;
  background-color: var(--wb-background-color);
}
div.wunderbaum.wb-fixed-col div.wb-header span.wb-col:first-of-type {
  background-color: var(--wb-header-color);
}
div.wunderbaum.wb-fixed-col div.wb-node-list div.wb-row.wb-active span.wb-col:first-of-type, div.wunderbaum.wb-fixed-col div.wb-node-list div.wb-row.wb-selected span.wb-col:first-of-type {
  background-color: var(--wb-active-color);
}
div.wunderbaum.wb-fixed-col div.wb-node-list div.wb-row.wb-active:hover span.wb-col:first-of-type, div.wunderbaum.wb-fixed-col div.wb-node-list div.wb-row.wb-selected:hover span.wb-col:first-of-type {
  background-color: var(--wb-active-hover-color);
}
div.wunderbaum.wb-fixed-col div.wb-node-list div.wb-row:hover span.wb-col:first-of-type {
  background-color: var(--wb-hover-color);
}
div.wunderbaum.wb-fixed-col:not(:focus-within) div.wb-node-list div.wb-row.wb-active span.wb-col:first-of-type, div.wunderbaum.wb-fixed-col:not(:focus-within) div.wb-node-list div.wb-row.wb-selected span.wb-col:first-of-type, div.wunderbaum.wb-fixed-col:not(:focus) div.wb-node-list div.wb-row.wb-active span.wb-col:first-of-type, div.wunderbaum.wb-fixed-col:not(:focus) div.wb-node-list div.wb-row.wb-selected span.wb-col:first-of-type {
  background-color: var(--wb-active-color-grayscale);
  border-color: var(--wb-active-border-color-grayscale);
}
div.wunderbaum.wb-fixed-col:not(:focus-within) div.wb-node-list div.wb-row.wb-active span.wb-col:first-of-type:hover span.wb-col:first-of-type, div.wunderbaum.wb-fixed-col:not(:focus-within) div.wb-node-list div.wb-row.wb-selected span.wb-col:first-of-type:hover span.wb-col:first-of-type, div.wunderbaum.wb-fixed-col:not(:focus) div.wb-node-list div.wb-row.wb-active span.wb-col:first-of-type:hover span.wb-col:first-of-type, div.wunderbaum.wb-fixed-col:not(:focus) div.wb-node-list div.wb-row.wb-selected span.wb-col:first-of-type:hover span.wb-col:first-of-type {
  background-color: var(--wb-active-hover-color-grayscale);
}
div.wunderbaum:not(:focus-within) div.wb-node-list div.wb-row.wb-active, div.wunderbaum:not(:focus-within) div.wb-node-list div.wb-row.wb-selected, div.wunderbaum:not(:focus) div.wb-node-list div.wb-row.wb-active, div.wunderbaum:not(:focus) div.wb-node-list div.wb-row.wb-selected {
  background-color: var(--wb-active-color-grayscale);
  border-color: var(--wb-active-border-color-grayscale);
}
div.wunderbaum:not(:focus-within) div.wb-node-list div.wb-row.wb-active:hover, div.wunderbaum:not(:focus-within) div.wb-node-list div.wb-row.wb-selected:hover, div.wunderbaum:not(:focus) div.wb-node-list div.wb-row.wb-active:hover, div.wunderbaum:not(:focus) div.wb-node-list div.wb-row.wb-selected:hover {
  background-color: var(--wb-active-hover-color-grayscale);
}
div.wunderbaum.wb-alternate div.wb-node-list div.wb-row:nth-of-type(even):not(.wb-active):not(.wb-selected) {
  background-color: var(--wb-alternate-row-color);
}
div.wunderbaum.wb-alternate div.wb-node-list div.wb-row:nth-of-type(even):not(.wb-active):not(.wb-selected):hover {
  background-color: var(--wb-alternate-row-color-hover);
}
div.wunderbaum div.wb-node-list div.wb-row:hover {
  background-color: var(--wb-hover-color);
}
div.wunderbaum div.wb-node-list div.wb-row.wb-active, div.wunderbaum div.wb-node-list div.wb-row.wb-selected {
  background-color: var(--wb-active-color);
}
div.wunderbaum div.wb-node-list div.wb-row.wb-active:hover, div.wunderbaum div.wb-node-list div.wb-row.wb-selected:hover {
  background-color: var(--wb-active-hover-color);
}
div.wunderbaum div.wb-node-list div.wb-row.wb-focus:not(.wb-active) {
  border-style: dotted;
  border-color: var(--wb-active-border-color);
}
div.wunderbaum div.wb-node-list div.wb-row.wb-active {
  border-style: solid;
  border-color: var(--wb-active-border-color);
}
div.wunderbaum div.wb-node-list div.wb-row.wb-active:hover {
  border-color: var(--wb-active-hover-border-color);
}
div.wunderbaum div.wb-node-list div.wb-row.wb-loading {
  font-style: italic;
}
div.wunderbaum div.wb-node-list div.wb-row.wb-busy,
div.wunderbaum div.wb-node-list div.wb-row i.wb-busy,
div.wunderbaum div.wb-node-list div.wb-row .wb-col.wb-busy {
  font-style: italic;
  background: repeating-linear-gradient(45deg, transparent, transparent 3.88px, var(--wb-grid-color) 3.88px, var(--wb-grid-color) 7.78px);
  animation: wb-busy-animation 2s linear infinite;
}
div.wunderbaum div.wb-node-list div.wb-row.wb-error, div.wunderbaum div.wb-node-list div.wb-row.wb-status-error {
  color: var(--wb-error-color);
}
div.wunderbaum div.wb-header {
  position: sticky;
  height: var(--wb-header-height);
  border-bottom: 1px solid var(--wb-border-color);
  padding: 0;
  background-color: var(--wb-header-color);
}
div.wunderbaum div.wb-header span.wb-col {
  font-weight: bold;
  overflow: visible;
}
div.wunderbaum div.wb-header span.wb-col-title {
  width: 100%;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}
div.wunderbaum div.wb-header span.wb-col-resizer {
  position: absolute;
  top: 0;
  right: -1px;
  width: 3px;
  border: none;
  border-right: 2px solid var(--wb-border-color);
  height: 100%;
  -webkit-user-select: none;
  user-select: none;
}
div.wunderbaum div.wb-header span.wb-col-resizer.wb-col-resizer-active {
  cursor: col-resize;
}
div.wunderbaum div.wb-header i.wb-col-icon {
  float: inline-end;
  padding-left: 2px;
}
div.wunderbaum div.wb-header i.wb-col-icon:hover {
  cursor: pointer;
  color: var(--wb-focus-border-color);
}
div.wunderbaum span.wb-col {
  position: absolute;
  display: inline-block;
  overflow: hidden;
  height: var(--wb-row-inner-height);
  line-height: var(--wb-row-inner-height);
  padding: 0 var(--wb-col-padding-x);
  border-right: 1px solid var(--wb-grid-color);
  white-space: nowrap;
}
div.wunderbaum span.wb-col:last-of-type {
  border-right: none;
}
div.wunderbaum span.wb-node {
  -webkit-user-select: none;
  user-select: none;
}
div.wunderbaum span.wb-node i.wb-checkbox,
div.wunderbaum span.wb-node i.wb-expander,
div.wunderbaum span.wb-node i.wb-icon,
div.wunderbaum span.wb-node i.wb-indent {
  height: var(--wb-icon-outer-height);
  width: var(--wb-icon-outer-width);
  padding: var(--wb-icon-padding-y) var(--wb-icon-padding-x);
  display: inline-block;
}
div.wunderbaum span.wb-node i.wb-expander,
div.wunderbaum span.wb-node i.wb-icon {
  background-repeat: no-repeat;
  background-size: contain;
}
div.wunderbaum span.wb-node {
  /* Fix Bootstrap Icon alignment */
}
div.wunderbaum span.wb-node i.bi::before {
  vertical-align: baseline;
}
div.wunderbaum span.wb-node img.wb-icon {
  width: var(--wb-icon-width);
  height: var(--wb-icon-height);
  padding: var(--wb-icon-padding-y) var(--wb-icon-padding-x);
}
div.wunderbaum span.wb-node i.wb-indent::before {
  content: " ";
}
div.wunderbaum span.wb-node i.wb-expander.wb-spin,
div.wunderbaum span.wb-node i.wb-icon.wb-spin {
  height: unset;
  width: unset;
  padding: 0 3px;
  animation: wb-spin-animation 2s linear infinite;
}
div.wunderbaum span.wb-node span.wb-title {
  min-width: 1em;
  vertical-align: top;
  overflow-x: hidden;
  display: inline-block;
  white-space: nowrap;
  text-overflow: ellipsis;
}
div.wunderbaum {
  /* --- GRID --- */
}
div.wunderbaum.wb-grid div.wb-header div.wb-row span.wb-col:hover {
  background-color: var(--wb-active-header-column-color);
}
div.wunderbaum.wb-grid.wb-cell-mode div.wb-header div.wb-row span.wb-col.wb-active {
  background-color: var(--wb-active-hover-color);
}
div.wunderbaum.wb-grid div.wb-node-list div.wb-row {
  border-bottom-color: var(--wb-grid-color);
}
div.wunderbaum.wb-grid div.wb-node-list div.wb-row:hover:not(.wb-active):not(.wb-selected) {
  background-color: var(--wb-hover-color);
}
div.wunderbaum.wb-grid div.wb-node-list div.wb-row.wb-active {
  border-bottom-color: var(--wb-active-border-color);
}
div.wunderbaum.wb-grid div.wb-node-list div.wb-row span.wb-col {
  border-right: 1px solid var(--wb-grid-color);
}
div.wunderbaum.wb-grid div.wb-node-list div.wb-row span.wb-col input.wb-input-edit,
div.wunderbaum.wb-grid div.wb-node-list div.wb-row span.wb-col > input[type=color],
div.wunderbaum.wb-grid div.wb-node-list div.wb-row span.wb-col > input[type=date],
div.wunderbaum.wb-grid div.wb-node-list div.wb-row span.wb-col > input[type=datetime],
div.wunderbaum.wb-grid div.wb-node-list div.wb-row span.wb-col > input[type=datetime-local],
div.wunderbaum.wb-grid div.wb-node-list div.wb-row span.wb-col > input[type=email],
div.wunderbaum.wb-grid div.wb-node-list div.wb-row span.wb-col > input[type=month],
div.wunderbaum.wb-grid div.wb-node-list div.wb-row span.wb-col > input[type=number],
div.wunderbaum.wb-grid div.wb-node-list div.wb-row span.wb-col > input[type=password],
div.wunderbaum.wb-grid div.wb-node-list div.wb-row span.wb-col > input[type=search],
div.wunderbaum.wb-grid div.wb-node-list div.wb-row span.wb-col > input[type=tel],
div.wunderbaum.wb-grid div.wb-node-list div.wb-row span.wb-col > input[type=text],
div.wunderbaum.wb-grid div.wb-node-list div.wb-row span.wb-col > input[type=time],
div.wunderbaum.wb-grid div.wb-node-list div.wb-row span.wb-col > input[type=url],
div.wunderbaum.wb-grid div.wb-node-list div.wb-row span.wb-col > input[type=week],
div.wunderbaum.wb-grid div.wb-node-list div.wb-row span.wb-col > select {
  width: 100%;
  max-height: var(--wb-row-inner-height);
  border: none;
}
div.wunderbaum.wb-grid div.wb-node-list div.wb-row span.wb-col > input:focus,
div.wunderbaum.wb-grid div.wb-node-list div.wb-row span.wb-col > select:focus {
  border: 1px dashed #70c0e7;
}
div.wunderbaum.wb-grid.wb-cell-mode div.wb-row:not(.wb-colspan).wb-active span.wb-col.wb-active {
  background-color: var(--wb-active-cell-color-grayscale);
}
div.wunderbaum.wb-grid.wb-cell-mode:focus-within div.wb-row:not(.wb-colspan):not(.wb-selected) span.wb-col.wb-active, div.wunderbaum.wb-grid.wb-cell-mode:focus div.wb-row:not(.wb-colspan):not(.wb-selected) span.wb-col.wb-active {
  background-color: var(--wb-active-column-color);
}
div.wunderbaum.wb-grid.wb-cell-mode:focus-within div.wb-row:not(.wb-colspan):not(.wb-selected).wb-active, div.wunderbaum.wb-grid.wb-cell-mode:focus div.wb-row:not(.wb-colspan):not(.wb-selected).wb-active {
  background-color: var(--wb-active-column-color);
}
div.wunderbaum.wb-grid.wb-cell-mode:focus-within div.wb-row:not(.wb-colspan):not(.wb-selected).wb-active span.wb-col.wb-active, div.wunderbaum.wb-grid.wb-cell-mode:focus div.wb-row:not(.wb-colspan):not(.wb-selected).wb-active span.wb-col.wb-active {
  background-color: var(--wb-active-cell-color);
}
div.wunderbaum.wb-grid.wb-alternate div.wb-node-list div.wb-row:nth-of-type(even):not(.wb-active):not(.wb-selected) {
  background-color: var(--wb-alternate-row-color);
}
div.wunderbaum.wb-grid.wb-alternate div.wb-node-list div.wb-row:nth-of-type(even):not(.wb-active):not(.wb-selected):hover {
  background-color: var(--wb-alternate-row-color-hover);
}
div.wunderbaum.wb-grid:not(:focus-within) div.wb-node-list div.wb-row, div.wunderbaum.wb-grid:not(:focus) div.wb-node-list div.wb-row {
  border-bottom-color: var(--wb-grid-color-grayscale);
}
div.wunderbaum {
  /* --- FILTER --- */
}
div.wunderbaum.wb-ext-filter-dim div.wb-node-list div.wb-row, div.wunderbaum.wb-ext-filter-hide div.wb-node-list div.wb-row {
  color: var(--wb-filter-dim-color);
}
div.wunderbaum.wb-ext-filter-dim div.wb-node-list div.wb-row.wb-submatch, div.wunderbaum.wb-ext-filter-hide div.wb-node-list div.wb-row.wb-submatch {
  color: var(--wb-filter-submatch-color);
}
div.wunderbaum.wb-ext-filter-dim div.wb-node-list div.wb-row.wb-match, div.wunderbaum.wb-ext-filter-hide div.wb-node-list div.wb-row.wb-match {
  color: var(--wb-node-text-color);
}
div.wunderbaum.wb-ext-filter-hide.wb-ext-filter-hide-expanders div.wb-node-list div.wb-row:not(.wb-submatch) i.wb-expander {
  visibility: hidden;
}
div.wunderbaum {
  /* --- DND --- */
}
div.wunderbaum div.wb-row.wb-drag-source {
  opacity: 0.5;
}
div.wunderbaum div.wb-row.wb-drag-source .wb-node {
  background-color: var(--wb-drop-source-color);
}
div.wunderbaum div.wb-row.wb-drop-target {
  overflow: visible;
}
div.wunderbaum div.wb-row.wb-drop-target .wb-node {
  background-color: var(--wb-drop-target-color);
  overflow: visible;
}
div.wunderbaum div.wb-row.wb-drop-target .wb-node .wb-icon {
  position: relative;
  overflow: visible;
}
div.wunderbaum div.wb-row.wb-drop-target .wb-node .wb-icon::after {
  position: absolute;
  z-index: 1000;
  content: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAMAAABA3o1rAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAACKUExURe/v9/f39+//7+f35+f/79bW5wgIawwYd97e55Tnpc731rjA2d7350LOY1LWa7Xvvf///wAQcyAze97e773vxnuczgA5pQBCpdb33rXvxu//9whjxgBaxlKU1oOz5ABz3gB73tbn99bW1rXe/wCM9xiU997v/97e3gCc/xil/9bv/wic/+/3/wAAALM9X5QAAAAudFJOU////////////////////////////////////////////////////////////wCCj3NVAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAqUlEQVQoU6WQ2w6CMAxA54agsCHq1HlFBREv/f/fs1tHAoaoiedlbXrWtGXwhV8FNqAXuAi4DwkShmE0cgGIcSwCCgkSkrAxpEonot0DhQxJptFsbnOpdNdgsFh6VtYwyqzTmG+oijDY7hr22E4qY7QybeGQe46nsxP0Wwc3Q1GWl+qKec8MlqKubxX+xzV7tkDuD1+3d+heigT2zGx/hCMUeUj4wL8CwAsW1kqCTugMCwAAAABJRU5ErkJggg==);
  left: 0;
  top: calc((22px - var(--wb-icon-height)) / 2);
}
div.wunderbaum div.wb-row.wb-drop-target.wb-drop-before .wb-node .wb-icon::after,
div.wunderbaum div.wb-row.wb-drop-target.wb-drop-after .wb-node .wb-icon::after {
  content: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAQCAMAAACROYkbAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAACNUExURe/v9/f39+//7+f35+f/79bW5wgIawwYd97e55Tnpc731rjA2d7350LOY1LWa7Xvvf///wAQcyAze97e773vxgAAAHuczgA5pQBCpdb33rXvxu//9whjxgBaxlKU1oOz5ABz3gB73tbn99bW1rXe/wCM9xiU997v/97e3gCc/xil/9bv/wic/+/3/wAAAParqS4AAAAvdFJOU/////////////////////////////////////////////////////////////8AWqU49wAAAAlwSFlzAAAOwwAADsMBx2+oZAAAALlJREFUOE/FktsSgiAQhglMS8WstKLzQTM77Ps/XguL16I208cFyzB8/LPAYCC/ErARzcCFx23pBgnGfjAxBYhpKDwq3SBB5DeGWCYz0SUDClIkmgeLpV7HMiNDbrbbYbBaWzbaoKTaJiHfQe5oYLA/NBwxTiyVyqTSghYwox4MTmfL5XozgqxjAtODoizv1QPXPXqgKer6WeH9+Iw9XgF5ve15/Q+6/SQSsE+q8yMcocoREgzg3wKAL4vrpBIKREShAAAAAElFTkSuQmCC);
  left: 0;
  top: calc((22px - var(--wb-icon-height)) / 2 - 11px);
}
div.wunderbaum div.wb-row.wb-drop-target.wb-drop-after .wb-node .wb-icon::after {
  top: calc((22px - var(--wb-icon-height)) / 2 + 11px);
}
div.wunderbaum {
  /* --- SPECIAL EFFECTS --- */
  /* Colorize indentation levels. */
}
div.wunderbaum.wb-rainbow i.wb-expander:nth-child(4n+1),
div.wunderbaum.wb-rainbow i.wb-indent:nth-child(4n+1) {
  background: rgb(255, 255, 201);
}
div.wunderbaum.wb-rainbow i.wb-expander:nth-child(4n+2),
div.wunderbaum.wb-rainbow i.wb-indent:nth-child(4n+2) {
  background: rgb(218, 255, 218);
}
div.wunderbaum.wb-rainbow i.wb-expander:nth-child(4n+3),
div.wunderbaum.wb-rainbow i.wb-indent:nth-child(4n+3) {
  background: rgb(255, 217, 254);
}
div.wunderbaum.wb-rainbow i.wb-expander:nth-child(4n+4),
div.wunderbaum.wb-rainbow i.wb-indent:nth-child(4n+4) {
  background: rgb(204, 250, 250);
}
div.wunderbaum {
  /* Fade out expanders, when container is not hovered or active */
}
div.wunderbaum.wb-fade-expander i.wb-expander {
  transition: color 1.5s;
  color: rgba(86, 83, 76, 0);
}
div.wunderbaum.wb-fade-expander div.wb-row.wb-loading i.wb-expander, div.wunderbaum.wb-fade-expander:hover i.wb-expander, div.wunderbaum.wb-fade-expander:focus i.wb-expander, div.wunderbaum.wb-fade-expander:focus-within i.wb-expander,
div.wunderbaum.wb-fade-expander [class*=wb-statusnode-] i.wb-expander {
  transition: color 0.6s;
  color: var(--wb-node-text-color);
}
div.wunderbaum {
  /* Skeleton */
}
div.wunderbaum div.wb-row.wb-skeleton span.wb-title,
div.wunderbaum div.wb-row.wb-skeleton i.wb-icon {
  animation: wb-skeleton-animation 1s linear infinite alternate;
  border-radius: 0.25em;
  color: transparent;
  opacity: 0.7;
}
div.wunderbaum {
  /* Auto-hide checkboxes unless selected or hovered */
}
div.wunderbaum.wb-checkbox-auto-hide i.wb-checkbox {
  visibility: hidden;
}
div.wunderbaum.wb-checkbox-auto-hide .wb-row:hover i.wb-checkbox,
div.wunderbaum.wb-checkbox-auto-hide .wb-row.wb-selected i.wb-checkbox {
  visibility: unset;
}
div.wunderbaum.wb-checkbox-auto-hide:focus .wb-row.wb-active i.wb-checkbox, div.wunderbaum.wb-checkbox-auto-hide:focus-within .wb-row.wb-active i.wb-checkbox {
  visibility: unset;
}

/* --- TOOL CLASSES --- */
a.wb-breadcrumb {
  cursor: pointer;
  text-decoration: none;
}

.wb-helper-center {
  text-align: center;
}

.wb-helper-disabled {
  color: var(--wb-dim-color);
}

.wb-helper-hidden {
  display: none;
}

.wb-helper-invalid {
  color: var(--wb-error-color);
}

.wb-helper-lazy-expander {
  color: var(--wb-bg-highlight-color);
}

.wb-helper-link {
  cursor: pointer;
}

.wb-no-select {
  -webkit-user-select: none;
  user-select: none;
}
.wb-no-select span.wb-title {
  -webkit-user-select: contain;
  user-select: contain;
}

button.wb-filter-hide {
  font-weight: bolder;
}

/* RTL support */
.wb-helper-start,
.wb-helper-start > input {
  text-align: left;
}

.wb-helper-end,
.wb-helper-end > input {
  text-align: right;
}

.wb-rtl .wb-helper-start,
.wb-rtl .wb-helper-start > input {
  text-align: right;
}
.wb-rtl .wb-helper-end,
.wb-rtl .wb-helper-end > input {
  text-align: left;
}

i.wb-icon {
  position: relative;
}
i.wb-icon > span.wb-badge {
  position: absolute;
  display: inline-block;
  top: 0;
  left: -0.6rem;
  color: white;
  background-color: var(--wb-bg-highlight-color);
  padding: 0.2em 0.3rem 0.1em 0.3rem;
  font-size: 60%;
  font-weight: 200;
  line-height: 1;
  text-align: center;
  white-space: nowrap;
  border-radius: 0.5rem;
  pointer-events: none;
}

/* Class 'wb-tristate' is used to mark checkboxes that should toggle like
 *   indeterminate -> checked -> unchecked -> indeterminate ...
 */
.wb-col input[type=checkbox]:indeterminate {
  color: var(--wb-dim-color);
  background-color: red;
}

.wb-col input:invalid {
  background-color: var(--wb-error-background-color);
}

.wb-col.wb-invalid {
  border: 1px dotted var(--wb-error-color);
}

@keyframes wb-spin-animation {
  0% {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(1turn);
  }
}
@keyframes wb-skeleton-animation {
  0% {
    background-color: hsl(200, 20%, 70%);
  }
  100% {
    background-color: hsl(200, 20%, 95%);
  }
}
@keyframes wb-busy-animation {
  0% {
    background-position: 0 0;
  }
  100% {
    background-position: 0 22px;
  }
}

/*# sourceMappingURL=wunderbaum.css.map */


================================================
FILE: dist/wunderbaum.d.ts
================================================
declare module "debounce" {
    /*!
     * Wunderbaum - debounce.ts
     * Copyright (c) 2021-2025, Martin Wendt. Released under the MIT license.
     * @VERSION, @DATE (https://github.com/mar10/wunderbaum)
     */
    type Procedure = (...args: any[]) => any;
    type DebounceOptions = {
        /** Specify invoking on the leading edge of the timeout. @default false */
        leading?: boolean;
        /** The maximum time `func` is allowed to be delayed before it's invoked.*/
        maxWait?: number;
        /**  Specify invoking on the trailing edge of the timeout. @default true */
        trailing?: boolean;
    };
    type ThrottleOptions = {
        /** Specify invoking on the leading edge of the timeout. @default true */
        leading?: boolean;
        /**  Specify invoking on the trailing edge of the timeout. @default true */
        trailing?: boolean;
    };
    export interface DebouncedFunction<F extends Procedure> {
        (this: ThisParameterType<F>, ...args: Parameters<F>): ReturnType<F>;
        cancel: () => void;
        flush: () => any;
        pending: () => boolean;
    }
    /**
     * Creates a debounced function that delays invoking `func` until after `wait`
     * milliseconds have elapsed since the last time the debounced function was
     * invoked, or until the next browser frame is drawn. The debounced function
     * comes with a `cancel` method to cancel delayed `func` invocations and a
     * `flush` method to immediately invoke them. Provide `options` to indicate
     * whether `func` should be invoked on the leading and/or trailing edge of the
     * `wait` timeout. The `func` is invoked with the last arguments provided to the
     * debounced function. Subsequent calls to the debounced function return the
     * result of the last `func` invocation.
     *
     * **Note:** If `leading` and `trailing` options are `true`, `func` is
     * invoked on the trailing edge of the timeout only if the debounced function
     * is invoked more than once during the `wait` timeout.
     *
     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
     * until the next tick, similar to `setTimeout` with a timeout of `0`.
     *
     * If `wait` is omitted in an environment with `requestAnimationFrame`, `func`
     * invocation will be deferred until the next frame is drawn (typically about
     * 16ms).
     *
     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
     * for details over the differences between `debounce` and `throttle`.
     *
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to debounce.
     * @param {number} [wait=0]
     *  The number of milliseconds to delay; if omitted, `requestAnimationFrame` is
     *  used (if available).
     * @param [options={}] The options object.
     * @returns {Function} Returns the new debounced function.
     * @example
     *
     * // Avoid costly calculations while the window size is in flux.
     * jQuery(window).on('resize', debounce(calculateLayout, 150))
     *
     * // Invoke `sendMail` when clicked, debouncing subsequent calls.
     * jQuery(element).on('click', debounce(sendMail, 300, {
     *   'leading': true,
     *   'trailing': false
     * }))
     *
     * // Ensure `batchLog` is invoked once after 1 second of debounced calls.
     * const debounced = debounce(batchLog, 250, { 'maxWait': 1000 })
     * const source = new EventSource('/stream')
     * jQuery(source).on('message', debounced)
     *
     * // Cancel the trailing debounced invocation.
     * jQuery(window).on('popstate', debounced.cancel)
     *
     * // Check for pending invocations.
     * const status = debounced.pending() ? "Pending..." : "Ready"
     */
    export function debounce<F extends Procedure>(func: F, wait?: number, options?: DebounceOptions): DebouncedFunction<F>;
    /**
     * Creates a throttled function that only invokes `func` at most once per
     * every `wait` milliseconds (or once per browser frame). The throttled function
     * comes with a `cancel` method to cancel delayed `func` invocations and a
     * `flush` method to immediately invoke them. Provide `options` to indicate
     * whether `func` should be invoked on the leading and/or trailing edge of the
     * `wait` timeout. The `func` is invoked with the last arguments provided to the
     * throttled function. Subsequent calls to the throttled function return the
     * result of the last `func` invocation.
     *
     * **Note:** If `leading` and `trailing` options are `true`, `func` is
     * invoked on the trailing edge of the timeout only if the throttled function
     * is invoked more than once during the `wait` timeout.
     *
     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
     * until the next tick, similar to `setTimeout` with a timeout of `0`.
     *
     * If `wait` is omitted in an environment with `requestAnimationFrame`, `func`
     * invocation will be deferred until the next frame is drawn (typically about
     * 16ms).
     *
     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
     * for details over the differences between `throttle` and `debounce`.
     *
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to throttle.
     * @param {number} [wait=0]
     *  The number of milliseconds to throttle invocations to; if omitted,
     *  `requestAnimationFrame` is used (if available).
     * @param [options={}] The options object.
     * @returns {Function} Returns the new throttled function.
     * @example
     *
     * // Avoid excessively updating the position while scrolling.
     * jQuery(window).on('scroll', throttle(updatePosition, 100))
     *
     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
     * const throttled = throttle(renewToken, 300000, { 'trailing': false })
     * jQuery(element).on('click', throttled)
     *
     * // Cancel the trailing throttled invocation.
     * jQuery(window).on('popstate', throttled.cancel)
     */
    export function throttle<F extends Procedure>(func: F, wait?: number, options?: ThrottleOptions): DebouncedFunction<F>;
}
declare module "util" {
    /*!
     * Wunderbaum - util
     * Copyright (c) 2021-2025, Martin Wendt. Released under the MIT license.
     * @VERSION, @DATE (https://github.com/mar10/wunderbaum)
     */
    /** @module util */
    import { DebouncedFunction, debounce, throttle } from "debounce";
    export { debounce, throttle };
    /** Readable names for `MouseEvent.button` */
    export const MOUSE_BUTTONS: {
        [key: number]: string;
    };
    export const MAX_INT = 9007199254740991;
    /**True if the client is using a macOS platform. */
    export const isMac: boolean;
    export type NotPromise<T> = T extends Promise<any> ? never : T;
    export type FunctionType = (...args: any[]) => any;
    export type EventCallbackType = (e: Event) => boolean | void;
    /** A generic error that can be thrown to indicate a validation error when
     * handling the `apply` event for a node title or the `change` event for a
     * grid cell.
     */
    export class ValidationError extends Error {
        constructor(message: string);
    }
    /**
     * A ES6 Promise, that exposes the resolve()/reject() methods.
     *
     * TODO: See [Promise.withResolvers()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/withResolvers#description)
     * , a proposed standard, but not yet implemented in any browser.
     */
    export class Deferred {
        private thens;
        private catches;
        private status;
        private resolvedValue;
        private rejectedError;
        constructor();
        resolve(value?: any): void;
        reject(error?: any): void;
        then(cb: any): void;
        catch(cb: any): void;
        promise(): {
            then: (cb: any) => void;
            catch: (cb: any) => void;
        };
    }
    /**Throw an `Error` if `cond` is falsey. */
    export function assert(cond: any, msg: string): void;
    /** Run `callback` when document was loaded. */
    export function documentReady(callback: () => void): void;
    /** Resolve when document was loaded. */
    export function documentReadyPromise(): Promise<void>;
    /**
     * Iterate over Object properties or array elements.
     *
     * @param obj `Object`, `Array` or null
     * @param callback called for every item.
     *  `this` also contains the item.
     *  Return `false` to stop the iteration.
     */
    export function each(obj: any, callback: (index: number | string, item: any) => void | boolean): any;
    /** Shortcut for `throw new Error(msg)`. */
    export function error(msg: string): void;
    /** Convert `<`, `>`, `&`, `"`, `'`, and `/` to the equivalent entities. */
    export function escapeHtml(s: string): string;
    /**Convert a regular expression string by escaping special characters (e.g. `"$"` -> `"\$"`) */
    export function escapeRegex(s: string): string;
    /** Convert `<`, `>`, `"`, `'`, and `/` (but not `&`) to the equivalent entities. */
    export function escapeTooltip(s: string): string;
    /** TODO */
    export function extractHtmlText(s: string): string;
    /**
     * Read the value from an HTML input element.
     *
     * If a `<span class="wb-col">` is passed, the first child input is used.
     * Depending on the target element type, `value` is interpreted accordingly.
     * For example for a checkbox, a value of true, false, or null is returned if
     * the element is checked, unchecked, or indeterminate.
     * For datetime input control a numerical value is assumed, etc.
     *
     * Common use case: store the new user input in a `change` event handler:
     *
     * ```ts
     *   change: (e) => {
     *     const tree = e.tree;
     *     const node = e.node;
     *     // Read the value from the input control that triggered the change event:
     *     let value = tree.getValueFromElem(e.element);
     *     // and store it to the node model (assuming the column id matches the property name)
     *     node.data[e.info.colId] = value;
     *   },
     * ```
     * @param elem `<input>` or `<select>` element. Also a parent `span.wb-col` is accepted.
     * @param coerce pass true to convert date/time inputs to `Date`.
     * @returns the value
     */
    export function getValueFromElem(elem: HTMLElement, coerce?: boolean): any;
    /**
     * Set the value of an HTML input element.
     *
     * If a `<span class="wb-col">` is passed, the first child input is used.
     * Depending on the target element type, `value` is interpreted accordingly.
     * For example a checkbox is set to checked, unchecked, or indeterminate if the
     * value is truethy, falsy, or `null`.
     * For datetime input control a numerical value is assumed, etc.
     *
     * Common use case: update embedded input controls in a `render` event handler:
     *
     * ```ts
     *   render: (e) => {
     *     // e.node.log(e.type, e, e.node.data);
     *
     *     for (const col of Object.values(e.renderColInfosById)) {
     *       switch (col.id) {
     *         default:
     *           // Assumption: we named column.id === node.data.NAME
     *           util.setValueToElem(col.elem, e.node.data[col.id]);
     *           break;
     *       }
     *     }
     *   },
     * ```
     *
     * @param elem `<input>` or `<select>` element Also a parent `span.wb-col` is accepted.
     * @param value a value that matches the target element.
     */
    export function setValueToElem(elem: HTMLElement, value: any): void;
    /** Show/hide element by setting the `display` style to 'none'. */
    export function setElemDisplay(elem: string | HTMLElement, flag: boolean): void;
    /** Create and return an unconnected `HTMLElement` from a HTML string. */
    export function elemFromHtml<T = HTMLElement>(html: string): T;
    /** Return a HtmlElement from selector or cast an existing element. */
    export function elemFromSelector<T = HTMLElement>(obj: string | T): T | null;
    /**
     * Return a canonical descriptive string for a keyboard or mouse event.
     *
     * The result also contains a prefix for modifiers if any, for example
     * `"x"`, `"F2"`, `"Control+Home"`, or `"Shift+clickright"`.
     * This is especially useful in `switch` statements, to make sure that modifier
     * keys are considered and handled correctly:
     * ```ts
     *   const eventName = util.eventToString(e);
     *   switch (eventName) {
     *     case "+":
     *     case "Add":
     *       ...
     *       break;
     *     case "Enter":
     *     case "End":
     *     case "Control+End":
     *     case "Meta+ArrowDown":
     *     case "PageDown":
     *       ...
     *       break;
     *   }
     * ```
     */
    export function eventToString(event: Event): string;
    /**
     * Copy allproperties from one or more source objects to a target object.
     *
     * @returns the modified target object.
     */
    export function extend(...args: any[]): any;
    /** Return true if `obj` is of type `array`. */
    export function isArray(obj: any): obj is any[];
    /** Return true if `obj` is of type `Object` and has no properties. */
    export function isEmptyObject(obj: any): boolean;
    /** Return true if `obj` is of type `function`. */
    export function isFunction(obj: any): boolean;
    /** Return true if `obj` is of type `Object`. */
    export function isPlainObject(obj: any): boolean;
    /** A dummy function that does nothing ('no operation'). */
    export function noop(...args: any[]): any;
    /**
     * Bind one or more event handlers directly to an [EventTarget](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget).
     *
     * @param rootTarget EventTarget or selector
     * @param eventNames
     * @param handler
     */
    export function onEvent(rootTarget: EventTarget | string, eventNames: string, handler: EventCallbackType): void;
    /**
     * Bind one or more event handlers using event delegation.
     *
     * E.g. handle all 'input' events for input and textarea elements of a given
     * form:
     * ```ts
     * onEvent("#form_1", "input", "input,textarea", function (e: Event) {
     *   console.log(e.type, e.target);
     * });
     * ```
     *
     * @param rootTarget EventTarget or selector
     * @param eventNames
     * @param selector
     * @param handler
     */
    export function onEvent(rootTarget: EventTarget | string, eventNames: string, selector: string, handler: EventCallbackType): void;
    /** Return a wrapped handler method, that provides `this._super` and `this._superApply`.
     *
     * ```ts
      // Implement `opts.createNode` event to add the 'draggable' attribute
      overrideMethod(ctx.options, "createNode", (event, data) => {
        // Default processing if any
        this._super.apply(this, event, data);
        // Add 'draggable' attribute
        data.node.span.draggable = true;
      });
      ```
      */
    export function overrideMethod(instance: any, methodName: string, handler: FunctionType, ctx?: any): void;
    /** Run function after ms milliseconds and return a promise that resolves when done. */
    export function setTimeoutPromise<T = unknown>(this: unknown, callback: (...args: any[]) => T, ms: number): Promise<T>;
    /**
     * Wait `ms` microseconds.
     *
     * Example:
     * ```js
     * await sleep(1000);
     * ```
     * @param ms duration
     * @returns
     */
    export function sleep(ms: number): Promise<unknown>;
    /**
     * Set or rotate checkbox status with support for tri-state.
     *
     * An initial 'indeterminate' state becomes 'checked' on the first call.
     *
     * If the input element has the class 'wb-tristate' assigned, the sequence is:<br>
     * 'indeterminate' -> 'checked' -> 'unchecked' -> 'indeterminate' -> ...<br>
     * Otherwise we toggle like <br>
     * 'checked' -> 'unchecked' -> 'checked' -> ...
     */
    export function toggleCheckbox(element: HTMLElement | string, value?: boolean | null, tristate?: boolean): void;
    /**
     * Return `opts.NAME` if opts is valid and
     *
     * @param opts dict, object, or null
     * @param name option name (use dot notation to access extension option, e.g. `filter.mode`)
     * @param defaultValue returned when `opts` is not an object, or does not have a NAME property
     */
    export function getOption(opts: any, name: string, defaultValue?: any): any;
    /** Return the next value from a list of values (rotating). @since 0.11 */
    export function rotate(value: any, values: any[]): any;
    /** Convert an Array or space-separated string to a Set. */
    export function toSet(val: any): Set<string>;
    /** Convert a pixel string to number.
     * We accept a number or a string like '123px'. If undefined, the first default
     * value that is a number or a string ending with 'px' is returned.
     *
     * Example:
     * ```js
     * let x = undefined;
     * let y = "123px";
     * const width = util.toPixel(x, y, 100);  // returns 123
     * ```
     */
    export function toPixel(...defaults: (string | number | undefined | null)[]): number;
    /** Cast any value to <T>. */
    export function unsafeCast<T>(value: any): T;
    /** Return the the boolean value of the first non-null element.
     * Example:
     * ```js
     * const opts = { flag: true };
     * const value = util.toBool(opts.foo, opts.flag, false);  // returns true
     * ```
     */
    export function toBool(...boolDefaults: (boolean | undefined | null)[]): boolean;
    /**
     * Return `val` unless `val` is a number in which case we convert to boolean.
     * This is useful when a boolean value is stored as a 0/1 (e.g. in JSON) and
     * we still want to maintain string values. null and undefined are returned as
     * is. E.g. `checkbox` may be boolean or 'radio'.
     */
    export function intToBool(val: boolean | number | string | undefined): boolean | string | undefined;
    /** Return a canonical string representation for an object's type (e.g. 'array', 'number', ...). */
    export function type(obj: any): string;
    /**
     * Return a function that can be called instead of `callback`, but guarantees
     * a limited execution rate.
     * The execution rate is calculated based on the runtime duration of the
     * previous call.
     * Example:
     * ```js
     * throttledFoo = util.adaptiveThrottle(foo.bind(this), {});
     * throttledFoo();
     * throttledFoo();
     * ```
     */
    export function adaptiveThrottle(this: unknown, callback: (...args: any[]) => void, options: object): DebouncedFunction<(...args: any[]) => void>;
    /**
     * MurmurHash3 implementation for strings.
     * @param key The input string to hash.
     * @param asString Optional convert result to zero-padded string of 8 characters.
     * @param seed Optional seed value.
     * @returns A 32-bit hash as a number or string.
     */
    export function murmurHash3(key: string, asString?: boolean, seed?: number): number | string;
}
declare module "common" {
    /*!
     * Wunderbaum - common
     * Copyright (c) 2021-2025, Martin Wendt. Released under the MIT license.
     * @VERSION, @DATE (https://github.com/mar10/wunderbaum)
     */
    import { ApplyCommandType, NavigationType, SourceObjectType, IconMapType, MatcherCallback } from "types";
    import { WunderbaumNode } from "wb_node";
    export const DEFAULT_DEBUGLEVEL = 4;
    /**
     * Fixed height of a row in pixel. Must match the SCSS variable `$row-outer-height`.
     */
    export const DEFAULT_ROW_HEIGHT = 22;
    /**
     * Fixed width of node icons in pixel. Must match the SCSS variable `$icon-outer-width`.
     */
    export const ICON_WIDTH = 20;
    /**
     * Adjust the width of the title span, so overflow ellipsis work.
     * (2 x `$col-padding-x` + 3px rounding errors).
     */
    export const TITLE_SPAN_PAD_Y = 7;
    /** Render row markup for N nodes above and below the visible viewport. */
    export const RENDER_MAX_PREFETCH = 5;
    /** Skip rendering new rows when we have at least N nodes rendeed above and below the viewport. */
    export const RENDER_MIN_PREFETCH = 5;
    /** Minimum column width if not set otherwise. */
    export const DEFAULT_MIN_COL_WIDTH = 4;
    /**
     * A value for `node.type` that by convention may be used to mark a node as directory.
     * It may be used to sort 'directories' to the top.
     */
    export const NODE_TYPE_FOLDER = "folder";
    /** Regular expression to detect if a string describes an image URL (in contrast
     * to a class name). Strings are considered image urls if they contain '.' or '/'.
     * `<` is ignored, because it is probably an html tag.
     */
    export const TEST_FILE_PATH: RegExp;
    /** Regular expression to detect if a string describes an HTML element. */
    export const TEST_HTML: RegExp;
    /** Currently supported default icon maps. */
    type IconLibrary = "bootstrap" | "fontawesome6";
    /**
     * Default node icons for icon libraries
     *
     *  - 'bootstrap': {@link https://icons.getbootstrap.com}
     *  - 'fontawesome6' {@link https://fontawesome.com/icons}
     *
     */
    export const defaultIconMaps: {
        [key in IconLibrary]: IconMapType;
    };
    export const KEY_NODATA = "__not_found__";
    /** Define which keys are handled by embedded <input> control, and should
     * *not* be passed to tree navigation handler in cell-edit mode.
     */
    export const INPUT_KEYS: {
        [key: string]: Array<string>;
    };
    /** Dict keys that are evaluated by source loader (others are added to `tree.data` instead). */
    export const RESERVED_TREE_SOURCE_KEYS: Set<string>;
    /** Map `KeyEvent.key` to navigation action. */
    export const KEY_TO_NAVIGATION_MAP: {
        [key: string]: NavigationType;
    };
    /** Map `KeyEvent.key` to navigation action. */
    export const KEY_TO_COMMAND_MAP: {
        [key: string]: ApplyCommandType;
    };
    /** Return a callback that returns true if the node title matches the string
     * or regular expression.
     * @see {@link WunderbaumNode.findAll}
     */
    export function makeNodeTitleMatcher(match: string | RegExp): MatcherCallback;
    /** Return a callback that returns true if the node title starts with a string (case-insensitive). */
    export function makeNodeTitleStartMatcher(s: string): MatcherCallback;
    /** Compare two nodes by title (case-insensitive).
     * @deprecated Use `key` option instead of `cmp` in sort methods.
     */
    export function nodeTitleSorter(a: WunderbaumNode, b: WunderbaumNode): number;
    /**
     * Decompresses the source data by
     * - converting from 'flat' to 'nested' format
     * - expanding short alias names to long names (if defined in _keyMap)
     * - resolving value indexes to value strings (if defined in _valueMap)
     *
     * @param source - The source object to be decompressed.
     * @returns void
     */
    export function decompressSourceData(source: SourceObjectType): void;
}
declare module "deferred" {
    /*!
     * Wunderbaum - deferred
     * Copyright (c) 2021-2025, Martin Wendt. Released under the MIT license.
     * @VERSION, @DATE (https://github.com/mar10/wunderbaum)
     */
    type PromiseCallbackType = (val: any) => void;
    type finallyCallbackType = () => void;
    /**
     * Implement a ES6 Promise, that exposes a resolve() and reject() method.
     *
     * Loosely mimics {@link https://api.jquery.com/category/deferred-object/ | jQuery.Deferred}.
     * Example:
     * ```js
     * function foo() {
     *   let dfd = new Deferred(),
     *   ...
     *   dfd.resolve('foo')
     *   ...
     *   return dfd.promise();
     * }
     * ```
     */
    export class Deferred<T> {
        private _promise;
        protected _resolve: any;
        protected _reject: any;
        constructor();
        /** Resolve the Promise. */
        resolve(value?: any): void;
        /** Reject the Promise. */
        reject(reason?: any): void;
        /** Return the native Promise instance.*/
        promise(): Promise<T>;
        /** Call Promise.then on the embedded promise instance.*/
        then(cb: PromiseCallbackType): Promise<void>;
        /** Call Promise.catch on the embedded promise instance.*/
        catch(cb: PromiseCallbackType): Promise<void | T>;
        /** Call Promise.finally on the embedded promise instance.*/
        finally(cb: finallyCallbackType): Promise<T>;
    }
}
declare module "wb_node" {
    import { Wunderbaum } from "wunderbaum";
    import { AddChildrenOptions, ApplyCommandOptions, ApplyCommandType, ChangeType, CheckboxOption, ExpandAllOptions, IconOption, InsertNodeType, MakeVisibleOptions, MatcherCallback, NavigateOptions, NavigationType, NodeAnyCallback, NodeStatusType, NodeStringCallback, NodeToDictCallback, NodeVisitCallback, NodeVisitResponse, RenderOptions, ResetOrderOptions, ScrollIntoViewOptions, SetActiveOptions, SetExpandedOptions, SetSelectedOptions, SetStatusOptions, SortByPropertyOptions, SortCallback, SortOptions, SourceType, TooltipOption, TristateType, WbNodeData } from "types";
    /**
     * A single tree node.
     *
     * **NOTE:** <br>
     * Generally you should not modify properties directly, since this may break
     * the internal bookkeeping.
     */
    export class WunderbaumNode {
        static sequence: number;
        /** Reference to owning tree. */
        tree: Wunderbaum;
        /** Parent node (null for the invisible root node `tree.root`). */
        parent: WunderbaumNode;
        /** Name of the node.
         * @see Use {@link setTitle} to modify. */
        title: string;
        /** Unique key. Passed with constructor or defaults to `SEQUENCE`.
         * @see Use {@link setKey} to modify. */
        readonly key: string;
        /** Reference key. Unlike {@link key}, a `refKey` may occur multiple
         * times within a tree (in this case we have 'clone nodes').
         * @see Use {@link setKey} to modify.
         */
        readonly refKey: string | undefined;
        /**
         * Array of child nodes (null for leaf nodes).
         * For lazy nodes, this is `null` or ùndefined` until the children are loaded
         * and leaf nodes may be `[]` (empty array).
         * @see {@link hasChildren}, {@link addChildren}, {@link lazy}.
         */
        children: WunderbaumNode[] | null;
        /** Render a checkbox or radio button @see {@link selected}. */
        checkbox?: CheckboxOption;
        /** If true, this node's children are considerd radio buttons.
         * @see {@link isRadio}.
         */
        radiogroup?: boolean;
        /** If true, (in grid mode) no cells are rendered, except for the node title.*/
        colspan?: boolean;
        /** Icon definition. */
        icon?: IconOption;
        /** Lazy loading flag.
         * @see {@link isLazy}, {@link isLoaded}, {@link isUnloaded}.
         */
        lazy?: boolean;
        /** Expansion state.
         * @see {@link isExpandable}, {@link isExpanded}, {@link setExpanded}. */
        expanded?: boolean;
        /** Selection state.
         * @see {@link isSelected}, {@link setSelected}, {@link toggleSelected}. */
        selected?: boolean;
        unselectable?: boolean;
        /** Node type (used for styling).
         * @see {@link Wunderbaum.types}.
         */
        type?: string;
        /** Tooltip definition (`true`: use node's title). */
        tooltip?: TooltipOption;
        /** Icon tooltip definition (`true`: use node's title). */
        iconTooltip?: TooltipOption;
        /** Additional classes added to `div.wb-row`.
         * @see {@link hasClass}, {@link setClass}. */
        classes: Set<string> | null;
        /** Custom data that was passed to the constructor */
        data: any;
        statusNodeType?: NodeStatusType;
        _isLoading: boolean;
        _requestId: number;
        _errorInfo: any | null;
        _partsel: boolean;
        _partload: boolean;
        /**
         * > 0 if matched (-1 to keep system nodes visible);
         * Added and removed by filter code.
         */
        match?: number;
        subMatchCount?: number;
        /** @internal */
        titleWithHighlight?: string;
        _filterAutoExpanded?: boolean;
        _rowIdx: number | undefined;
        _rowElem: HTMLDivElement | undefined;
        constructor(tree: Wunderbaum, parent: WunderbaumNode, data: WbNodeData);
        /**
         * Return readable string representation for this instance.
         * @internal
         */
        toString(): string;
        /**
         * Iterate all descendant nodes depth-first, pre-order using `for ... of ...` syntax.
         * More concise, but slightly slower than {@link WunderbaumNode.visit}.
         *
         * Example:
         * ```js
         * for(const n of node) {
         *   ...
         * }
         * ```
         */
        [Symbol.iterator](): IterableIterator<WunderbaumNode>;
        /** Call event handler if defined in tree.options.
         * Example:
         * ```js
         * node._callEvent("edit.beforeEdit", {foo: 42})
         * ```
         */
        _callEvent(type: string, extra?: any): any;
        /**
         * Append (or insert) a list of child nodes.
         *
         * Tip: pass `{ before: 0 }` to prepend new nodes as first children.
         *
         * @returns first child added
         */
        addChildren(nodeData: WbNodeData | WbNodeData[], options?: AddChildrenOptions): WunderbaumNode;
        /**
         * Append or prepend a node, or append a child node.
         *
         * This a convenience function that calls addChildren()
         *
         * @param nodeData node definition
         * @param [mode=child] 'before', 'after', 'firstChild', or 'child' ('over' is a synonym for 'child')
         * @returns new node
         */
        addNode(nodeData: WbNodeData, mode?: InsertNodeType): WunderbaumNode;
        /**
         * Apply a modification (or navigation) operation.
         *
         * @see {@link Wunderbaum.applyCommand}
         */
        applyCommand(cmd: ApplyCommandType, options: ApplyCommandOptions): any;
        /**
         * Collapse all expanded sibling nodes if any.
         * (Automatically called when `autoCollapse` is true.)
         */
        collapseSiblings(options?: SetExpandedOptions): any;
        /**
         * Add/remove one or more classes to `<div class='wb-row'>`.
         *
         * This also maintains `node.classes`, so the class will survive a re-render.
         *
         * @param className one or more class names. Multiple classes can be passed
         *     as space-separated string, array of strings, or set of strings.
         */
        setClass(className: string | string[] | Set<string>, flag?: boolean): void;
        /** Start editing this node's title. */
        startEditTitle(): void;
        /**
         * Call `setExpanded()` on all descendant nodes.
         *
         * @param flag true to expand, false to collapse.
         * @param options Additional options.
         * @see {@link Wunderbaum.expandAll}
         * @see {@link WunderbaumNode.setExpanded}
         */
        expandAll(flag?: boolean, options?: ExpandAllOptions): Promise<void>;
        /**
         * Find all descendant nodes that match condition (excluding self).
         *
         * If `match` is a string, search for exact node title.
         * If `match` is a RegExp expression, apply it to node.title, using
         * [RegExp.test()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test).
         * If `match` is a callback, match all nodes for that the callback(node) returns true.
         *
         * Returns an empty array if no nodes were found.
         *
         * Examples:
         * ```js
         * // Match all node titles that match exactly 'Joe':
         * nodeList = node.findAll("Joe")
         * // Match all node titles that start with 'Joe' case sensitive:
         * nodeList = node.findAll(/^Joe/)
         * // Match all node titles that contain 'oe', case insensitive:
         * nodeList = node.findAll(/oe/i)
         * // Match all nodes with `data.price` >= 99:
         * nodeList = node.findAll((n) => {
         *   return n.data.price >= 99;
         * })
         * ```
         */
        findAll(match: string | RegExp | MatcherCallback): WunderbaumNode[];
        /** Return the direct child with a given key, index or null. */
        findDirectChild(ptr: number | string | WunderbaumNode): WunderbaumNode | null;
        /**
         * Find first descendant node that matches condition (excluding self) or null.
         *
         * @see {@link WunderbaumNode.findAll} for examples.
         */
        findFirst(match: string | RegExp | MatcherCallback): WunderbaumNode | null;
        /** Find a node relative to self.
         *
         * @see {@link Wunderbaum.findRelatedNode|tree.findRelatedNode()}
         */
        findRelatedNode(where: NavigationType, includeHidden?: boolean): any;
        /**
         * Iterator version of {@link WunderbaumNode.format}.
         */
        format_iter(name_cb?: NodeStringCallback, connectors?: string[]): IterableIterator<string>;
        /**
         * Return a multiline string representation of a node/subnode hierarchy.
         * Mostly useful for debugging.
         *
         * Example:
         * ```js
         * console.info(tree.getActiveNode().format((n)=>n.title));
         * ```
         * logs
         * ```
         * Books
         *  ├─ Art of War
         *  ╰─ Don Quixote
         * ```
         * @see {@link WunderbaumNode.format_iter}
         */
        format(name_cb?: NodeStringCallback, connectors?: string[]): string;
        /** Return the `<span class='wb-col'>` element with a given index or id.
         * @returns {WunderbaumNode | null}
         */
        getColElem(colIdx: number | string): HTMLSpanElement;
        /**
         * Return all nodes with the same refKey.
         *
         * @param includeSelf Include this node itself.
         * @see {@link Wunderbaum.findByRefKey}
         */
        getCloneList(includeSelf?: boolean): WunderbaumNode[];
        /** Return the first child node or null.
         * @returns {WunderbaumNode | null}
         */
        getFirstChild(): WunderbaumNode;
        /** Return the last child node or null.
         * @returns {WunderbaumNode | null}
         */
        getLastChild(): WunderbaumNode;
        /** Return node depth (starting with 1 for top level nodes). */
        getLevel(): number;
        /** Return the successive node (under the same parent) or null. */
        getNextSibling(): WunderbaumNode | null;
        /** Return the parent node (null for the system root node). */
        getParent(): WunderbaumNode | null;
        /** Return an array of all parent nodes (top-down).
         * @param includeRoot Include the invisible system root node.
         * @param includeSelf Include the node itself.
         */
        getParentList(includeRoot?: boolean, includeSelf?: boolean): any[];
        /** Return a string representing the hierarchical node path, e.g. "a/b/c".
         * @param includeSelf
         * @param part property name or callback
         * @param separator
         */
        getPath(includeSelf?: boolean, part?: keyof WunderbaumNode | NodeAnyCallback, separator?: string): string;
        /** Return the preceding node (under the same parent) or null. */
        getPrevSibling(): WunderbaumNode | null;
        /** Return true if node has children.
         * Return undefined if not sure, i.e. the node is lazy and not yet loaded.
         */
        hasChildren(): boolean;
        /** Return true if node has className set. */
        hasClass(className: string): boolean;
        /** Return true if node is the currently focused node. @since 0.9.0 */
        hasFocus(): boolean;
        /** Return true if this node is the currently active tree node. */
        isActive(): boolean;
        /** Return true if this node is a direct or indirect parent of `other`.
         * @see {@link WunderbaumNode.isParentOf}
         */
        isAncestorOf(other: WunderbaumNode): boolean;
        /** Return true if this node is a **direct** subnode of `other`.
         * @see {@link WunderbaumNode.isDescendantOf}
         */
        isChildOf(other: WunderbaumNode): boolean;
        /** Return true if this node's refKey is used by at least one other node.
         */
        isClone(): boolean;
        /** Return true if this node's title spans all columns, i.e. the node has no
         * grid cells.
         */
        isColspan(): boolean;
        /** Return true if this node is a direct or indirect subnode of `other`.
         * @see {@link WunderbaumNode.isChildOf}
         */
        isDescendantOf(other: WunderbaumNode): boolean;
        /** Return true if this node has children, i.e. the node is generally expandable.
         * If `andCollapsed` is set, we also check if this node is collapsed, i.e.
         * an expand operation is currently possible.
         */
        isExpandable(andCollapsed?: boolean): boolean;
        /** Return true if _this_ node is currently in edit-title mode.
         *
         * See {@link WunderbaumNode.startEditTitle}.
         */
        isEditingTitle(): boolean;
        /** Return true if this node is currently expanded. */
        isExpanded(): boolean;
        /** Return true if this node is the first node of its parent's children. */
        isFirstSibling(): boolean;
        /** Return true if this node is the last node of its parent's children. */
        isLastSibling(): boolean;
        /** Return true if this node is lazy (even if data was already loaded) */
        isLazy(): boolean;
        /** Return true if node is lazy and loaded. For non-lazy nodes always return true. */
        isLoaded(): boolean;
        /** Return true if node is currently loading, i.e. a GET request is pending. */
        isLoading(): boolean;
        /** Return true if this node is a temporarily generated status node of type 'paging'. */
        isPagingNode(): boolean;
        /** Return true if this node is a **direct** parent of `other`.
         * @see {@link WunderbaumNode.isAncestorOf}
         */
        isParentOf(other: WunderbaumNode): boolean;
        /** Return true if this node is partially loaded. @experimental  */
        isPartload(): boolean;
        /** Return true if this node is partially selected (tri-state). */
        isPartsel(): boolean;
        /** Return true if this node has DOM representation, i.e. is displayed in the viewport. */
        isRadio(): boolean;
        /** Return true if this node has DOM representation, i.e. is displayed in the viewport. */
        isRendered(): boolean;
        /** Return true if this node is the (invisible) system root node.
         * @see {@link WunderbaumNode.isTopLevel}
         */
        isRootNode(): boolean;
        /** Return true if this node is selected, i.e. the checkbox is set.
         * `undefined` if partly selected (tri-state), false otherwise.
         */
        isSelected(): TristateType;
        /** Return true if this node is a temporarily generated system node like
         * 'loading', 'paging', or 'error' (node.statusNodeType contains the type).
         */
        isStatusNode(): boolean;
        /** Return true if this a top level node, i.e. a direct child of the (invisible) system root node. */
        isTopLevel(): boolean;
        /** Return true if node is marked lazy but not yet loaded.
         * For non-lazy nodes always return false.
         */
        isUnloaded(): boolean;
        /** Return true if all parent nodes are expanded. Note: this does not check
         * whether the node is scrolled into the visible part of the screen or viewport.
         */
        isVisible(): boolean;
        protected _loadSourceObject(source: any, level?: number): void;
        _fetchWithOptions(source: any): Promise<any>;
        /** Download  data from the cloud, then call `.update()`. */
        load(source: SourceType): Promise<void>;
        /**
         * Load content of a lazy node.
         * If the node is already loaded, nothing happens.
         * @param [forceReload=false] If true, reload even if already loaded.
         */
        loadLazy(forceReload?: boolean): Promise<void>;
        /** Write to `console.log` with node name as prefix if opts.debugLevel >= 4.
         * @see {@link WunderbaumNode.logDebug}
         */
        log(...args: any[]): void;
        /** Write to `console.debug` with node name as prefix if opts.debugLevel >= 4
         * and browser console level includes debug/verbose messages.
         * @see {@link WunderbaumNode.log}
         */
        logDebug(...args: any[]): void;
        /** Write to `console.error` with node name as prefix if opts.debugLevel >= 1. */
        logError(...args: any[]): void;
        /** Write to `console.info` with node name as prefix if opts.debugLevel >= 3. */
        logInfo(...args: any[]): void;
        /** Write to `console.warn` with node name as prefix if opts.debugLevel >= 2. */
        logWarn(...args: any[]): void;
        /** Expand all parents and optionally scroll into visible area as neccessary.
         * Promise is resolved, when lazy loading and animations are done.
         * @param {object} [options] passed to `setExpanded()`.
         *     Defaults to {noAnimation: false, noEvents: false, scrollIntoView: true}
         */
        makeVisible(options?: MakeVisibleOptions): Promise<unknown>;
        /** Move this node to targetNode. */
        moveTo(targetNode: WunderbaumNode, mode?: InsertNodeType, map?: NodeAnyCallback): void;
        /** Set focus relative to this node and optionally activate.
         *
         * 'left' collapses the node if it is expanded, or move to the parent
         * otherwise.
         * 'right' expands the node if it is collapsed, or move to the first
         * child otherwise.
         *
         * @param where 'down', 'first', 'last', 'left', 'parent', 'right', or 'up'.
         *   (Alternatively the `event.key` that would normally trigger this move,
         *   e.g. `ArrowLeft` = 'left'.
         * @param options
         */
        navigate(where: NavigationType | string, options?: NavigateOptions): Promise<any>;
        /** Delete this node and all descendants. */
        remove(): void;
        /** Remove all descendants of this node. */
        removeChildren(): void;
        /** Remove all HTML markup from the DOM. */
        removeMarkup(): void;
        protected _getRenderInfo(): any;
        protected _createIcon(parentElem: HTMLElement, replaceChild: HTMLElement | null, showLoading: boolean): HTMLElement | null;
        /**
         * Create a whole new `<div class="wb-row">` element.
         * @see {@link WunderbaumNode._render}
         */
        protected _render_markup(opts: RenderOptions): void;
        /**
         * Render `node.title`, `.icon` into an existing row.
         *
         * @see {@link WunderbaumNode._render}
         */
        protected _render_data(opts: RenderOptions): void;
        /**
         * Update row classes to reflect active, focuses, etc.
         * @see {@link WunderbaumNode._render}
         */
        protected _render_status(opts: RenderOptions): void;
        _render(options?: RenderOptions): void;
        /**
         * Remove all children, collapse, and set the lazy-flag, so that the lazyLoad
         * event is triggered on next expand.
         */
        resetLazy(): void;
        /** Convert node (or whole branch) into a plain object.
         *
         * The result is compatible with node.addChildren().
         *
         * @param recursive include child nodes
         * @param callback is called for every node, in order to allow
         *     modifications.
         *     Return `false` to ignore this node or `"skip"` to include this node
         *     without its children.
         * @see {@link Wunderbaum.toDictArray}.
         */
        toDict(recursive?: boolean, callback?: NodeToDictCallback): WbNodeData;
        /** Return an option value that has a default, but may be overridden by a
         * callback or a node instance attribute.
         *
         * Evaluation sequence:
         *
         * - If `tree.options.<name>` is a callback that returns something, use that.
         * - Else if `node.<name>` is defined, use that.
         * - Else if `tree.types[<node.type>]` is a value, use that.
         * - Else if `tree.options.<name>` is a value, use that.
         * - Else use `defaultValue`.
         *
         * @param name name of the option property (on node and tree)
         * @param defaultValue return this if nothing else matched
         * {@link Wunderbaum.getOption|Wunderbaum.getOption}
         */
        getOption(name: string, defaultValue?: any): any;
        /** Make sure that this node is visible in the viewport.
         * @see {@link Wunderbaum.scrollTo|Wunderbaum.scrollTo}
         */
        scrollIntoView(options?: ScrollIntoViewOptions): Promise<void>;
        /**
         * Activate this node, deactivate previous, send events, activate column and
         * scroll into viewport.
         */
        setActive(flag?: boolean, options?: SetActiveOptions): Promise<void>;
        /**
         * Expand or collapse this node.
         */
        setExpanded(flag?: boolean, options?: SetExpandedOptions): Promise<void>;
        /**
         * Set keyboard focus here.
         * @see {@link setActive}
         */
        setFocus(flag?: boolean): void;
        /** Set a new icon path or class. */
        setIcon(icon: string): void;
        /** Change node's {@link key} and/or {@link refKey}.  */
        setKey(key: string | null, refKey: string | null): void;
        /**
         * Trigger a repaint, typically after a status or data change.
         *
         * `change` defaults to 'data', which handles modifcations of title, icon,
         * and column content. It can be reduced to 'ChangeType.status' if only
         * active/focus/selected state has changed.
         *
         * This method will eventually call  {@link WunderbaumNode._render} with
         * default options, but may be more consistent with the tree's
         * {@link Wunderbaum.update} API.
         */
        update(change?: ChangeType): void;
        /**
         * Return an array of selected nodes.
         * @param stopOnParents only return the topmost selected node (useful with selectMode 'hier')
         */
        getSelectedNodes(stopOnParents?: boolean): WunderbaumNode[];
        /**
         * Return an array of refKey values.
         *
         * RefKeys are unique identifiers for a node data, and are used to identify
         * clones.
         * If more than one node has the same refKey, it is only returned once.
         * @param selected if true, only return refKeys of selected nodes.
         */
        getRefKeys(selected?: boolean): string[];
        /** Toggle the check/uncheck state. */
        toggleSelected(options?: SetSelectedOptions): TristateType;
        /** Return true if at least on selectable descendant end-node is unselected. @internal */
        _anySelectable(): boolean;
        protected _changeSelectStatusProps(state: TristateType): boolean;
        /**
         * Fix selection status, after this node was (de)selected in `selectMode: 'hier'`.
         * This includes (de)selecting all descendants.
         */
        fixSelection3AfterClick(opts?: SetSelectedOptions): void;
        /**
         * Fix selection status for multi-hier mode.
         * Only end-nodes are considered to update the descendants branch and parents.
         * Should be called after this node has loaded new children or after
         * children have been modified using the API.
         */
        fixSelection3FromEndNodes(opts?: SetSelectedOptions): void;
        /** Modify the check/uncheck state. */
        setSelected(flag?: boolean, options?: SetSelectedOptions): TristateType;
        /** Display node status (ok, loading, error, noData) using styles and a dummy child node. */
        setStatus(status: NodeStatusType, options?: SetStatusOptions): WunderbaumNode | null;
        /** Rename this node. */
        setTitle(title: string): void;
        /** Set the node tooltip. */
        setTooltip(tooltip: TooltipOption): void;
        /**
         * Sort child list by title or custom criteria.
         * @param {function} cmp custom compare function(a, b) that returns -1, 0, or 1
         *    (defaults to sorting by title).
         * @param {boolean} deep pass true to sort all descendant nodes recursively
         * @deprecated use {@link sort}
         */
        sortChildren(cmp?: SortCallback | null, deep?: boolean): void;
        /**
         * Renumber nodes `_nativeIndex`. This is useful to allow to restore the
         * order after sorting a column.
         * This method is automatically called after loading new child nodes.
         * @since 0.11.0
         */
        resetNativeChildOrder(options?: ResetOrderOptions): void;
        /**
         * Convenience method to implement column sorting.
         * @since 0.11.0
         * @deprecated use {@link sort}
         */
        sortByProperty(options: SortByPropertyOptions): void;
        /**
         * Implement column sorting.
         * @since 0.14.0
         */
        sort(options: SortOptions): void;
        /**
         * Re-apply current sorting if any (use after lazy load).
         * Example:
         * ```js
         * load: function (e) {
         *   // Whe loading a lazy branch, apply current sort order if any
         *   e.node.resort();
         * },
         * ```
         * @since 0.14.0
         */
        resort(options?: SortOptions): void;
        /**
         * Trigger `modifyChild` event on a parent to signal that a child was modified.
         * @param {string} operation Type of change: 'add', 'remove', 'rename', 'move', 'data', ...
         */
        triggerModifyChild(operation: string, child: WunderbaumNode | null, extra?: any): void;
        /**
         * Trigger `modifyChild` event on node.parent(!).
         * @param {string} operation Type of change: 'add', 'remove', 'rename', 'move', 'data', ...
         * @param {object} [extra]
         */
        triggerModify(operation: string, extra?: any): void;
        /**
         * Call `callback(node)` for all descendant nodes in hierarchical order (depth-first, pre-order).
         *
         * Stop iteration, if fn() returns false. Skip current branch, if fn()
         * returns "skip".<br>
         * Return false if iteration was stopped.
         *
         * @param {function} callback the callback function.
         *     Return false to stop iteration, return "skip" to skip this node and
         *     its children only.
         * @see `wb_node.WunderbaumNode.IterableIterator<WunderbaumNode>`
         * @see {@link Wunderbaum.visit}.
         */
        visit(callback: NodeVisitCallback, includeSelf?: boolean): NodeVisitResponse;
        /** Call fn(node) for all parent nodes, bottom-up, including invisible system root.<br>
         * Stop iteration, if callback() returns false.<br>
         * Return false if iteration was stopped.
         *
         * @param callback the callback function. Return false to stop iteration
         */
        visitParents(callback: (node: WunderbaumNode) => boolean | void, includeSelf?: boolean): boolean;
        /**
         * Call fn(node) for all sibling nodes.<br>
         * Stop iteration, if fn() returns false.<br>
         * Return false if iteration was stopped.
         *
         * @param callback the callback function.
         *     Return false to stop iteration.
         * @param includeSelf include this node in the iteration.
         */
        visitSiblings(callback: (node: WunderbaumNode) => boolean | void, includeSelf?: boolean): boolean;
        /**
         * [ext-filter] Return true if this node is matched by current filter (or no filter is active).
         */
        isMatched(): boolean;
    }
}
declare module "wb_options" {
    /*!
     * Wunderbaum - options
     * Copyright (c) 2021-2025, Martin Wendt. Released under the MIT license.
     * @VERSION, @DATE (https://github.com/mar10/wunderbaum)
     */
    import { ColumnDefinitionList, DndOptionsType, DynamicBoolOption, DynamicBoolOrStringOption, DynamicCheckboxOption, DynamicIconOption, EditOptionsType, FilterOptionsType, IconMapType, NavModeEnum, NodeTypeDefinitionMap, SelectModeType, SourceType, TranslationsType, WbActivateEventType, WbButtonClickEventType, WbCancelableEventResultType, WbChangeEventType, WbClickEventType, WbDeactivateEventType, WbErrorEventType, WbExpandEventType, WbIconBadgeCallback, WbIconBadgeEventResultType, WbInitEventType, WbKeydownEventType, WbNodeEventType, WbReceiveEventType, WbRenderEventType, WbSelectEventType, WbTreeEventType } from "types";
    /**
     * Properties of {@link wunderbaum.Wunderbaum.options}.
     *
     * This is similar, but not identical, to the options that can be passed to the
     * constructor(@see {@link InitWunderbaumOptions}).
     */
    export interface WunderbaumOptions {
        /**
         * If true, add a `wb-skeleton` class to all nodes, that will result in a
         * 'glow' effect. Typically used with initial dummy nodes, while loading the
         * real data.
         * @default false.
         */
        skeleton: boolean;
        /**
         * Translation map for some system messages.
         */
        strings: TranslationsType;
        /**
         * 0:quiet, 1:errors, 2:warnings, 3:info, 4:verbose
         * @default 3 (4 in local debug environment)
         */
        debugLevel: number;
        /**
         * Number of levels that are forced to be expanded, and have no expander icon.
         * E.g. 1 would keep all toplevel nodes expanded.
         * @default 0
         */
        minExpandLevel: number;
        /**
         * If true, allow to expand parent nodes, even if `node.children` conatains
         * an empty array (`[]`). This is the the behavior of macOS Finder, for example.
         * @default false
         */
        emptyChildListExpandable: boolean;
        /**
         * Height of a node row div.
         * @default 22
         */
        rowHeightPx: number;
        /**
         * Icon font definition. May be a string (e.g. "fontawesome6" or "bootstrap")
         * or a map of `iconName: iconClass` pairs.
         * Note: the icon font must be loaded separately.
         * In order to only override some defauöt icons, use this pattern:
         * ```js
         * const tree = new mar10.Wunderbaum({
         *   ...
         *   iconMap: Object.assign(Wunderbaum.iconMaps.bootstrap, {
         *     folder: "bi bi-archive",
         *   }),
         * });
         * ```
      
         * @default "bootstrap"
         */
        iconMap: string | IconMapType;
        /**
         * Collapse siblings when a node is expanded.
         * @default false
         */
        autoCollapse: boolean;
        /**
         * If true, the tree will automatically adjust its height to fit the parent
         * container. This is useful when the tree is embedded in a container with
         * a fixed or calculated sized.
         * If the parent container is unsized (e.g. grows with its content, `height: auto`),
         * then we can define a `height: ...` or `max_height: ...` style on the parent.
         * To avoid a recursive resize-loop, it may be helpful to set `overflow: hidden`
         * on the parent container.
         *
         * Set this option to `false` will disable auto-resizing.
         *
         * @default: true
         */
        adjustHeight: boolean;
        /**
         * HTMLElement or selector that receives the top nodes breadcrumb.
         * @default undefined
         */
        connectTopBreadcrumb: HTMLElement | string | null;
        /**
         * @default  NavModeEnum.startRow
         */
        navigationModeOption: NavModeEnum;
        /**
         * Show/hide header (default: null)
         * null: assume false for plain tree and true for grids.
         * string: use text as header (only for plain trees)
         * true: display a header (use tree's id as text for plain trees)
         * false: do not display a header
         */
        header: boolean | string | null;
        /**
         * Show a `<progress>` element while loading data.
         * @default false.
         */
        showSpinner: boolean;
        /**
         * Generate missing keys by hashing a combination of refKey (or title) and
         * the parent key. This is useful when the source data does not contain unique
         * keys but we want stable keys for persisting the active node, selection or
         * expansion state. Note that this still assumes that the same refKey must not
         * appear twice in the same parent node.
         * @default false.
         */
        autoKeys: boolean;
        /**
         * If true, render a checkbox before the node tile to allow selection with the
         * mouse. Pass `"radio"` to render a radio button instead.
         * @default false.
         */
        checkbox: DynamicCheckboxOption;
        /** Optional callback to render icons per node. */
        icon?: DynamicIconOption;
        /** Optional callback to render a tooltip for the icon. */
        iconTooltip?: DynamicBoolOrStringOption;
        /** Optional callback to render a tooltip for the node title.
         * Pass `true` to use the node's `title` property as tooltip.
         */
        tooltip?: DynamicBoolOrStringOption;
        /** Optional callback to make a node unselectable. */
        unselectable?: DynamicBoolOption;
        /**
         * @default true
         */
        enabled: boolean;
        /**
         *
         * @default false
         */
        fixedCol: boolean;
        /**
         * Default value for ColumnDefinition.filterable option.
         * @default false
         * @since 0.11.0
         */
        columnsFilterable: boolean;
        /**
         * Default value for ColumnDefinition.menu option.
         * @default false
         * @since 0.11.0
         */
        columnsMenu: boolean;
        /**
         * Default value for ColumnDefinition.resizable option.
         * @default false
         * @since 0.10.0
         */
        columnsResizable?: boolean;
        /**
         * Default value for ColumnDefinition.sortable option.
         * @default false
         * @since 0.11.0
         */
        columnsSortable?: boolean;
        /**
         * Group nodes with children or of `type: 'folder'` at the top when sorting.
         * If a function is passed, it is called with the node as argument to determine
         * whether the node is a folder or not. The function should return `true` for
         * folders.
         * and should return `true` for folders.
         * @default false
         * @since 0.14.0
         */
        sortFoldersFirst?: DynamicBoolOption;
        /**
         * @default "multi"
         */
        selectMode: SelectModeType;
        /**
         * @default true
         */
        quicksearch: boolean;
        /**
         * Scroll Node into view on Expand Click
         * @default true
         */
        scrollIntoViewOnExpandClick: boolean;
        /** Configuration options for the drag-and-drop extension. */
        dnd: DndOptionsType;
        /** Configuration options for the edit-title extension. */
        edit: EditOptionsType;
        /** Configuration options for the node-filter extension. */
        filter: FilterOptionsType;
        /**
         * `e.node` was activated.
         * @category Callback
         */
        activate?: (e: WbActivateEventType) => void;
        /**
         * `e.node` is about to be activated.
         * Return `false` to prevent default handling, i.e. activating the node.
         * See also `deactivate` event.
         * @category Callback
         */
        beforeActivate?: (e: WbActivateEventType) => WbCancelableEventResultType;
        /**
         * `e.node` is about to be expanded/collapsed.
         * Return `false` to prevent default handling, i.e. expanding/collapsing the node.
         * @category Callback
         */
        beforeExpand?: (e: WbExpandEventType) => WbCancelableEventResultType;
        /**
         * Return `false` to prevent default handling, i.e. (de)selecting the node.
         * @category Callback
         */
        beforeSelect?: (e: WbSelectEventType) => WbCancelableEventResultType;
        /**
         * Return `false` to prevent default handling, i.e. (de)selecting the node.
         * @category Callback
         */
        buttonClick?: (e: WbButtonClickEventType) => void;
        /**
         *
         * @category Callback
         */
        change?: (e: WbChangeEventType) => void;
        /**
         *
         * Return `false` to prevent default behavior, e.g. expand/collapse, (de)selection, or activation.
         * @category Callback
         */
        click?: (e: WbClickEventType) => WbCancelableEventResultType;
        /**
         * Return `false` to prevent default behavior, e.g. expand/collapse.
         * @category Callback
         */
        dblclick?: (e: WbClickEventType) => WbCancelableEventResultType;
        /**
         * `e.node` was deactivated.
         *
         * Return `false` to prevent default handling, e.g. deactivating the node
         * and activating the next.
         * See also `activate` event.
         * @category Callback
         */
        deactivate?: (e: WbDeactivateEventType) => WbCancelableEventResultType;
        /**
         * `e.node` was discarded from the viewport and its HTML markup removed.
         * @category Callback
         */
        discard?: (e: WbNodeEventType) => void;
        /**
         * `e.node` is about to be rendered. We can add a badge to the icon cell here.
         * @category Callback
         */
        iconBadge?: (e: WbIconBadgeCallback) => WbIconBadgeEventResultType;
        /**
         * An error occurred, e.g. during initialization or lazy loading.
         * @category Callback
         */
        error?: (e: WbErrorEventType) => void;
        /**
         * `e.node` was expanded (`e.flag === true`) or collapsed (`e.flag === false`)
         * @category Callback
         */
        expand?: (e: WbTreeEventType) => void;
        /**
         * The tree received or lost focus.
         * Check `e.flag` for status.
         * @category Callback
         */
        focus?: (e: WbTreeEventType) => void;
        /**
         * Fires when the tree markup was created and the initial source data was loaded.
         * Typical use cases would be activating a node, setting focus, enabling other
         * controls on the page, etc.<br>
         *  Also sent if an error occured during initialization (check `e.error` for status).
         * @category Callback
         */
        init?: (e: WbInitEventType) => void;
        /**
         * Fires when a key was pressed while the tree has focus.
         * `e.node` is set if a node is currently active.
         * Return `false` to prevent default navigation.
         * @category Callback
         */
        keydown?: (e: WbKeydownEventType) => WbCancelableEventResultType;
        /**
         * Fires when a node that was marked 'lazy', is expanded for the first time.
         * Typically we return an endpoint URL or the Promise of a fetch request that
         * provides a (potentially nested) list of child nodes.
         * @category Callback
         */
        lazyLoad?: (e: WbNodeEventType) => void;
        /**
         * Fires when data was loaded (initial request, reload, or lazy loading),
         * after the data is applied and rendered.
         * @category Callback
         */
        load?: (e: WbNodeEventType) => void;
        /**
         * @category Callback
         */
        modifyChild?: (e: WbNodeEventType) => void;
        /**
         * Fires when data was fetched (initial request, reload, or lazy loading),
         * but before the data is applied and rendered.
         * Here we can modify and adjust the received data, for example to convert an
         * external response to native Wunderbaum syntax.
         * @category Callback
         */
        receive?: (e: WbReceiveEventType) => void;
        /**
         * Fires when a node is about to be displayed.
         * The default HTML markup is already created, but not yet added to the DOM.
         * Now we can tweak the markup, create HTML elements in this node's column
         * cells, etc.
         * See also `Custom Rendering` for details.
         * @category Callback
         */
        render?: (e: WbRenderEventType) => void;
        /**
         * Same as `render(e)`, but for the status nodes, i.e. `e.node.statusNodeType`.
         * @category Callback
         */
        renderStatusNode?: (e: WbRenderEventType) => void;
        /**
         *`e.node` was selected (`e.flag === true`) or deselected (`e.flag === false`)
         * @category Callback
         */
        select?: (e: WbNodeEventType) => void;
        /**
         * Fires when the viewport content was updated, after scroling, expanding etc.
         * @category Callback
         */
        update?: (e: WbTreeEventType) => void;
    }
    /**
     * Available options for {@link wunderbaum.Wunderbaum}.
     *
     * Options are passed to the constructor as plain object:
     *
     * ```js
     * const tree = new mar10.Wunderbaum({
     *   id: "demo",
     *   element: document.getElementById("demo-tree"),
     *   source: "url/of/data/request",
     *   ...
     * });
     * ```
     *
     * Event handlers are also passed as callbacks
     *
     * ```js
     * const tree = new mar10.Wunderbaum({
     *   ...
     *   init: (e) => {
     *     console.log(`Tree ${e.tree} was initialized and loaded.`)
     *   },
     *   activate: (e) => {
     *     console.log(`Node ${e.node} was activated.`)
     *   },
     *   ...
     * });
     * ```
     *
     * Most of the properties are optional and have resonable default.
     * They are then available as {@link Wunderbaum.options} property and can be
     * changed at runtime. <br>
     * Only the `element` option is mandatory.
     *
     * Note that some options passed here, are *not* available as {@link Wunderbaum.options}.
     * They are moved to the `tree` instance instead:
     * - `tree.element`
     * - `tree.id`
     * - `tree.columns`
     * - `tree.types`
     * - ...
     *
     * Some options are only used during initialization and are not stored in the
     * tree instance:
     * - `source`
     *
     */
    export interface InitWunderbaumOptions extends Partial<WunderbaumOptions> {
        /**
         * The target `div` element (or selector) that shall become a Wunderbaum.
         */
        element: string | HTMLDivElement;
        /**
         * The identifier of this tree. Used to reference the instance, especially
         * when multiple trees are present (e.g. `tree = mar10.Wunderbaum.getTree("demo")`).
         *
         * @default `"wb_" + COUNTER`.
         */
        id?: string;
        /**
         * A list of maps that define column headers. If this option is set,
         * Wunderbaum becomes a treegrid control instead of a plain tree.
         * Column definitions can be passed as tree option, or be part of a `source`
         * response.
         * @default `[]` meaning this is a plain tree.
         */
        columns?: ColumnDefinitionList;
        /**
         * Define shared attributes for multiple nodes of the same type.
         * This allows for more compact data models. Type definitions can be passed
         * as tree option, or be part of a `source` response.
         *
         * @default `{}`.
         */
        types?: NodeTypeDefinitionMap;
        /**
         * Define the initial tree data. Typically a URL of an endpoint that serves
         * a JSON formatted structure, but also a callback, Promise, or static data
         * is allowed.
         *
         * @default `[]`.
         */
        source?: SourceType;
    }
}
declare module "types" {
    /*!
     * Wunderbaum - types
     * Copyright (c) 2021-2025, Martin Wendt. Released under the MIT license.
     * @VERSION, @DATE (https://github.com/mar10/wunderbaum)
     */
    import { WunderbaumNode } from "wb_node";
    import { Wunderbaum } from "wunderbaum";
    /** A value that can either be true, false, or undefined. */
    export type TristateType = boolean | undefined;
    /** Show/hide checkbox or display a radiobutton icon instead. */
    export type CheckboxOption = boolean | "radio";
    /** A value that can either be true, false, or undefined. */
    export type SortOrderType = "asc" | "desc" | undefined;
    /** An icon may either be
     * a string-tag that references an entry in the `iconMap` (e.g. `"folderOpen"`)),
     * an HTML string that contains a `<` and is used as-is,
     * an image URL string that contains a `.` or `/` and is rendered as `<img src='...'>`,
     * a class string such as `"bi bi-folder"`,
     * or a boolean value that indicates if the default icon should be used or hidden.
     */
    export type IconOption = boolean | string;
    /** Show/hide default tooltip or display a string. */
    export type TooltipOption = boolean | string;
    export interface SourceAjaxType {
        url: string;
        params?: any;
        body?: any;
        options?: RequestInit;
    }
    export type SourceListType = Array<WbNodeData>;
    export interface SourceObjectType {
        _format?: "nested" | "flat";
        _version?: number;
        types?: NodeTypeDefinitionMap;
        columns?: ColumnDefinitionList;
        children: SourceListType;
        _keyMap?: {
            [key: string]: string;
        };
        _positional?: Array<string>;
        _valueMap?: {
            [key: string]: Array<string>;
        };
    }
    /** Possible initilization for tree nodes. */
    export type SourceType = string | SourceListType | SourceAjaxType | SourceObjectType;
    /** Passed to `find...()` methods. Should return true if node matches. */
    export type MatcherCallback = (node: WunderbaumNode) => boolean;
    /** Used for `tree.iconBadge` event. */
    export type WbIconBadgeCallback = (e: WbIconBadgeEventType) => WbIconBadgeEventResultType;
    /**
     * Passed to `sort()` methods. Should return -1, 0, or 1.
     * @deprecated Use SortKeyCallback instead
     */
    export type SortCallback = (a: WunderbaumNode, b: WunderbaumNode) => number;
    /** Passed to `sort()` methods. Should return a representation that can be compared using `<`. */
    export type SortKeyCallback = (node: WunderbaumNode) => string | number | any[];
    /** When set as option, called when the value is needed (e.g. `colspan` type definition). */
    export type BoolOptionResolver = (node: WunderbaumNode) => boolean;
    /** When set as option, called when the value is needed (e.g. `icon` type definition). */
    export type BoolOrStringOptionResolver = (node: WunderbaumNode) => boolean | string;
    /** A callback that receives a node instance and returns an arbitrary value type. */
    export type NodeAnyCallback = (node: WunderbaumNode) => any;
    /** A callback that receives a node instance and returns a string value. */
    export type NodeStringCallback = (node: WunderbaumNode) => string;
    /** A callback that receives a node instance and property name returns a value. */
    export type NodePropertyGetterCallback = (node: WunderbaumNode, propName: string) => any;
    /** A callback that receives a node instance and returns an iteration modifier. */
    export type NodeVisitCallback = (node: WunderbaumNode) => NodeVisitResponse;
    /**
     * Returned by `NodeVisitCallback` to control iteration.
     * `false` stops iteration, `skip` skips descendants but continues.
     * All other values continue iteration.
     */
    export type NodeVisitResponse = "skip" | boolean | void;
    /**
     * A callback that receives a node-data dictionary and a node instance and
     * returns an iteration modifier.
     */
    export type NodeToDictCallback = (dict: WbNodeData, node: WunderbaumNode) => NodeVisitResponse;
    /**
     * A callback that receives a node instance and may returnsa `false` to prevent
     * (de)selection.
     */
    export type NodeSelectCallback = (node: WunderbaumNode) => boolean | void;
    /** @internal */
    export type DeprecationOptions = {
        since?: string;
        hint?: string;
    };
    /**
     * See also {@link WunderbaumNode.getOption|WunderbaumNode.getOption()}
     * to evaluate `node.NAME` setting and `tree.types[node.type].NAME`.
     */
    export type DynamicBoolOption = boolean | BoolOptionResolver;
    export type DynamicStringOption = string | BoolOptionResolver;
    export type DynamicBoolOrStringOption = boolean | string | BoolOrStringOptionResolver;
    export type DynamicCheckboxOption = CheckboxOption | BoolOrStringOptionResolver;
    export type DynamicIconOption = IconOption | BoolOrStringOptionResolver;
    export type DynamicTooltipOption = TooltipOption | BoolOrStringOptionResolver;
    /** A plain object (dictionary) that represents a node instance. */
    export interface WbNodeData {
        /** Defines if the `selected` state is displayed as checkbox, radio button,
         * or hidden.
         * Defaults to {@link WunderbaumOptions.checkbox}.
         */
        checkbox?: CheckboxOption;
        /** Optional list of child nodes.
         * If `children` is an empty array, the node is considered a leaf.
         * If `lazy` is true and `children is undefined or null, the node, is
         * considered unloaded. Otherwise, the node is considered a leaf.
         */
        children?: Array<WbNodeData>;
        /** Additional classes that are added to `<div class='wb-row'>`. */
        classes?: string;
        /** Only show title in a single, merged column. */
        colspan?: boolean;
        /** Expand this node. */
        expanded?: boolean;
        /** Defaults to standard icons (doc, folder, folderOpen, ...)
         * from {@link WunderbaumOptions.iconMap}.
         * Can be overridden by {@link WunderbaumOptions.icon}.
         */
        icon?: IconOption;
        /** Tooltip for the node icon only. Defaults to {@link WunderbaumOptions.iconTooltip}. */
        iconTooltip?: TooltipOption;
        /** The node's key. Must be unique for the whole tree. Defaults to a sequence number. */
        key?: string;
        /** If true (and children are undefined or null), the node is considered lazy
         * and {@link WunderbaumOptions.lazyLoad} is called when expanded.
         */
        lazy?: boolean;
        /** Make child nodes single-select radio buttons. */
        radiogroup?: boolean;
        /** Node's reference key. Unlike {@link WunderbaumNode.key}, this value
         * may be non-unique. Nodes within the tree that share the same refKey are considered
         * clones.
         */
        refKey?: string;
        /** The node's selection status, typically displayed as a checkbox. */
        selected?: boolean;
        /** The node's status, typically displayed as merged single row.
         * @see {@link Wunderbaum.setStatus}
         */
        statusNodeType?: NodeStatusType;
        /** The node's title. Will be html escaped to prevent XSS. */
        title: string;
        /** Pass true to set node tooltip to the node's title. Defaults to {@link WunderbaumOptions.tooltip}. */
        tooltip?: TooltipOption;
        /** Inherit shared settings from the matching entry in `InitWunderbaumOptions.types`. */
        type?: string;
        /** Set to `true` to prevent selection. Defaults to {@link WunderbaumOptions.unselectable}. */
        unselectable?: boolean;
        /** @internal */
        _treeId?: string;
        /** Other data is passed to `node.data` and can be accessed via `node.data.NAME` */
        [key: string]: unknown;
    }
    /** A plain object (dictionary) that defines node icons. */
    export interface IconMapType {
        error: string;
        loading: string;
        noData: string;
        expanderExpanded: string;
        expanderCollapsed: string;
        expanderLazy: string;
        checkChecked: string;
        checkUnchecked: string;
        checkUnknown: string;
        radioChecked: string;
        radioUnchecked: string;
        radioUnknown: string;
        folder: string;
        folderOpen: string;
        folderLazy: string;
        doc: string;
        colSortable: string;
        colSortAsc: string;
        colSortDesc: string;
        colFilter: string;
        colFilterActive: string;
        colMenu: string;
        [key: string]: string;
    }
    /** Retuen value of an event handler that can return `false` to prevent the default action. */
    export type WbCancelableEventResultType = false | void;
    export interface WbTreeEventType {
        /** Name of the event. */
        type: string;
        /** The affected tree instance. */
        tree: Wunderbaum;
        /** Exposed utility module methods
         * (see [API docs](https://mar10.github.io/wunderbaum/api/modules/util.html)).
         */
        util: any;
        /** Originating HTML event if any (e.g. `click`). */
        event?: Event;
    }
    export interface WbNodeEventType extends WbTreeEventType {
        /** The affected target node. */
        node: WunderbaumNode;
        /**
         * Contains the node's type information, i.e. `tree.types[node.type]` if
         * defined. Set to `{}` otherwise. @see {@link Wunderbaum.types}
         */
        typeInfo: NodeTypeDefinition;
    }
    export interface WbActivateEventType extends WbNodeEventType {
        prevNode: WunderbaumNode;
        /** The original event. */
        event: Event;
    }
    export interface WbChangeEventType extends WbNodeEventType {
        /** Additional information derived from the original change event. */
        info: WbEventInfo;
        /** The embedded element that fired the change event. */
        inputElem: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;
        /** The new value of the embedded element, depending on the input element type. */
        inputValue: any;
        /** Result of `inputElem.checkValidity()`. */
        inputValid: boolean;
    }
    export interface WbClickEventType extends WbTreeEventType {
        /** The original event. */
        event: MouseEvent;
        /** The clicked node if any. */
        node: WunderbaumNode;
        /** Additional information derived from the original mouse event. */
        info: WbEventInfo;
    }
    export interface WbDeactivateEventType extends WbNodeEventType {
        nextNode: WunderbaumNode;
        /** The original event. */
        event: Event;
    }
    export interface WbEditApplyEventType extends WbNodeEventType {
        /** Additional information derived from the original change event. */
        info: WbEventInfo;
        /** The input element of the node title that fired the change event. */
        inputElem: HTMLInputElement;
        /** The previous node title. */
        oldValue: string;
        /** The new node title. */
        newValue: string;
        /** Result of `inputElem.checkValidity()`. */
        inputValid: boolean;
    }
    export interface WbEditEditEventType extends WbNodeEventType {
        /** The input element of the node title that was just created. */
        inputElem: HTMLInputElement;
    }
    export interface WbErrorEventType extends WbNodeEventType {
        error: any;
    }
    export interface WbExpandEventType extends WbNodeEventType {
        flag: boolean;
    }
    export interface WbFocusEventType extends WbTreeEventType {
        /** The original event. */
        event: FocusEvent;
        /** True if `focusin`, false if `focusout`. */
        flag: boolean;
    }
    export interface WbIconBadgeEventType extends WbNodeEventType {
        iconSpan: HTMLElement;
    }
    export interface WbIconBadgeEventResultType {
        /** Content of the badge `<span class='wb-badge'>` if any. */
        badge: string | number | HTMLSpanElement | null | false;
        /** Additional class name(s), separate with space. */
        badgeClass?: string;
        /** Tooltip for the badge. */
        badgeTooltip?: string;
    }
    export interface WbInitEventType extends WbTreeEventType {
        error?: any;
    }
    export interface WbKeydownEventType extends WbTreeEventType {
        /** The original event. */
        event: KeyboardEvent;
        node: WunderbaumNode;
        /** Additional information derived from the original keyboard event. */
        info: WbEventInfo;
    }
    export interface WbModifyChildEventType extends WbNodeEventType {
        /** Type of change: 'add', 'remove', 'rename', 'move', 'data', ... */
        operation: string;
        child: WunderbaumNode;
    }
    export interface WbReceiveEventType extends WbNodeEventType {
        response: any;
    }
    export interface WbSelectEventType extends WbNodeEventType {
        flag: boolean;
    }
    export interface WbButtonClickEventType extends WbTreeEventType {
        info: WbEventInfo;
        /** The associated command, e.g. 'menu', 'sort', 'filter', ... */
        command: string;
    }
    export interface WbRenderEventType extends WbNodeEventType {
        /**
         * True if the node's markup was not yet created. In this case the render
         * event should create embedded input controls (in addition to update the
         * values according to to current node data). <br>
         * False if the node's markup was already created. In this case the render
         * event should only update the values according to to current node data.
         */
        isNew: boolean;
        /** The node's `<span class='wb-node'>` element. */
        nodeElem: HTMLSpanElement;
        /** True if the node only displays the title and is stretched over all remaining columns. */
        isColspan: boolean;
        /**
         * Array of node's `<span class='wb-col'>` elements.
         * The first element is `<span class='wb-node wb-col'>`, which contains the
         * node title and icon (`idx: 0`, id: '*'`).
         */
        allColInfosById: ColumnEventInfoMap;
        /**
         * Array of node's `<span class='wb-node'>` elements,
         * *that should be rendered by the event handler*.
         * In contrast to `allColInfosById`, the node title is not part of this array.
         * If node.isColspan() is true, this array is empty (`[]`).
         * This allows to iterate over all relevant in a simple loop:
         * ```
         * for (const col of Object.values(e.renderColInfosById)) {
         *   switch (col.id) {
         *     default:
         *       // Assumption: we named column.id === node.data.NAME
         *       col.elem.textContent = node.data[col.id];
         *       break;
         *   }
         * }
         */
        renderColInfosById: ColumnEventInfoMap;
    }
    /**
     * Contains the node's type information, i.e. `tree.types[node.type]` if
     * defined.
     * @see {@link Wunderbaum.types} and {@link WunderbaumNode.getOption|WunderbaumNode.getOption()}
     * to evaluate `node.NAME` setting and `tree.types[node.type].NAME`.
     */
    export interface NodeTypeDefinition {
        /** En/disable checkbox for matching nodes. */
        checkbox?: CheckboxOption;
        /** Optional class names that are added to all `div.wb-row` elements of matching nodes. */
        classes?: string;
        /** Only show title and hide other columns if any. */
        colspan?: boolean;
        /** Default icon for matching nodes. */
        icon?: IconOption;
        /** Default icon tooltip for matching nodes. */
        iconTooltip?: TooltipOption;
        [key: string]: unknown;
    }
    export type NodeTypeDefinitionMap = {
        [type: string]: NodeTypeDefinition;
    };
    /**
     * Column type definitions.
     * @see {@link Wunderbaum.columns}
     */
    export interface ColumnDefinition {
        /** Column ID as defined in `tree.columns` definition ("*" for title column). */
        id: string;
        /** Column header (defaults to id) */
        title: string;
        /** Column header tooltip (optional) */
        tooltip?: string;
        /** Column width or weight.
         * Either an absolute pixel value (e.g. `"50px"`) or a relative weight (e.g. `1`)
         * that is used to calculate the width  inside the remaining available space.
         * Default: `"*"`, which is interpreted as `1`.
         */
        width?: string | number;
        /** Only used for columns with a relative weight.
         * Default: `4px`.
         */
        minWidth?: string | number;
        /** Allow user to resize the column.
         * @default false (or global tree option `columnsSortable`)
         * @see {@link WunderbaumOptions.columnsResizable}.
         * @since 0.10.0
         */
        resizable?: boolean;
        /** Optional custom column width when user resized by mouse drag.
         * Default: unset.
         */
        customWidthPx?: number;
        /** Display a 'filter' button in the column header. Default: false. <br>
         * Note: The actual filtering must be implemented in the `buttonClick()` event.
         * @default false (or global tree option `columnsFilterable`)
         * @since 0.11.0
         */
        filterable?: boolean;
        /** .
         * Default: inactive. <br>
         * Note: The actual filtering must be implemented in the `buttonClick()` event.
         */
        filterActive?: boolean;
        /** Display a 'sort' button in the column header. Default: false. <br>
         * Note: The actual sorting must be implemented in the `buttonClick()` event.
         * @default false (or global tree option `columnsSortable`)
         * @see {@link WunderbaumOptions.columnsSortable}.
         * @since 0.11.0
         */
        sortable?: boolean;
        /** Optional custom column sort orde when user clicked the sort icon.
         * Default: unset, e.g. not sorted. <br>
         * Note: The actual sorting must be implemented in the `buttonClick()` event.
         * @since 0.11.0
         */
        sortOrder?: SortOrderType;
        /** Display a menu icon that may open a context menu for this column.
         * Note: The actual functionality must be implemented in the `buttonClick()` event.
         * @default false (or global tree option `columnsMenu`)
         * @see {@link WunderbaumOptions.columnsMenu}.
         * @since 0.11.0
         */
        menu?: boolean;
        /** Optional class names that are added to all `span.wb-col` header AND data
         * elements of that column. Separate multiple classes with space.
         */
        classes?: string;
        /** If `headerClasses` is a set, it will be used for the header element only
         * (unlike `classes`, which is used for body and header cells).
         * Separate multiple classes with space.
         */
        headerClasses?: string;
        /** Optional HTML content that is rendered into all `span.wb-col` elements of that column.*/
        html?: string;
        /** @internal */
        _weight?: number;
        /** @internal */
        _widthPx?: number;
        /** @internal */
        _ofsPx?: number;
        [key: string]: unknown;
    }
    export type ColumnDefinitionList = Array<ColumnDefinition>;
    /**
     * Column information (passed to the `render` event).
     */
    export interface ColumnEventInfo {
        /** Column ID as defined in `tree.columns` definition ("*" for title column). */
        id: string;
        /** Column index (0: leftmost title column). */
        idx: number;
        /** The cell's `<span class='wb-col'>` element (null for plain trees). */
        elem: HTMLSpanElement | null;
        /** The value of `tree.columns[]` for the current index. */
        info: ColumnDefinition;
    }
    export type ColumnEventInfoMap = {
        [colId: string]: ColumnEventInfo;
    };
    /**
     * Additional information derived from mouse or keyboard events.
     * @see {@link Wunderbaum.getEventInfo}
     */
    export interface WbEventInfo {
        /** The original HTTP Event.*/
        event: MouseEvent | KeyboardEvent;
        /** Canonical descriptive string of the event type including modifiers,
         * e.g. `Ctrl+Down`. @see {@link util.eventToString}
         */
        canonicalName: string;
        /** The tree instance. */
        tree: Wunderbaum;
        /** The affected node instance instance if any. */
        node: WunderbaumNode | null;
        /** The affected part of the node span (e.g. title, expander, ...). */
        region: NodeRegion;
        /** The definition of the affected column if any. */
        colDef?: ColumnDefinition;
        /** The index of affected column or -1. */
        colIdx: number;
        /** The column definition ID of affected column if any. */
        colId?: string;
        /** The affected column's span tag if any. */
        colElem?: HTMLSpanElement;
    }
    export type FilterModeType = null | "mark" | "dim" | "hide";
    export type SelectModeType = "single" | "multi" | "hier";
    export type NavigationType = "down" | "first" | "firstCol" | "last" | "lastCol" | "left" | "nextMatch" | "pageDown" | "pageUp" | "parent" | "prevMatch" | "right" | "up";
    export type ApplyCommandType = NavigationType | "addChild" | "addSibling" | "collapse" | "collapseAll" | "copy" | "cut" | "edit" | "expand" | "expandAll" | "indent" | "moveDown" | "moveUp" | "outdent" | "paste" | "remove" | "rename" | "toggleSelect";
    export type NodeFilterResponse = "skip" | "branch" | boolean | void;
    export type NodeFilterCallback = (node: WunderbaumNode) => NodeFilterResponse;
    /**
     * Possible values for {@link WunderbaumNode.update} and {@link Wunderbaum.update}.
     */
    export enum ChangeType {
        /** Re-render the whole viewport, headers, and all rows. */
        any = "any",
        /** A node's title, icon, columns, or status have changed. Update the existing row markup. */
        data = "data",
        /** The `tree.columns` definition has changed beyond simple width adjustments. */
        colStructure = "colStructure",
        /** The viewport/window was resized. Adjust layout attributes for all elements. */
        resize = "resize",
        /** A node's definition has changed beyond status and data. Re-render the whole row's markup. */
        row = "row",
        /** Nodes have been added, removed, etc. Update markup. */
        structure = "structure",
        /** A node's status has changed. Update current row's classes, to reflect active, selected, ... */
        status = "status",
        /** Vertical scroll event. Update the 'top' property of all rows. */
        scroll = "scroll"
    }
    /** @internal */
    export enum RenderFlag {
        clearMarkup = "clearMarkup",
        header = "header",
        redraw = "redraw",
        scroll = "scroll"
    }
    /** Possible values for {@link WunderbaumNode.setStatus}. */
    export enum NodeStatusType {
        ok = "ok",
        loading = "loading",
        error = "error",
        noData = "noData",
        paging = "paging"
    }
    /** Define the subregion of a node, where an event occurred. */
    export enum NodeRegion {
        unknown = "",
        checkbox = "checkbox",
        column = "column",
        expander = "expander",
        icon = "icon",
        prefix = "prefix",
        title = "title"
    }
    /** Initial navigation mode and possible transition. */
    export enum NavModeEnum {
        /** Start with row mode, but allow cell-nav mode */
        startRow = "startRow",
        /** Cell-nav mode only */
        cell = "cell",
        /** Start in cell-nav mode, but allow row mode */
        startCell = "startCell",
        /** Row mode only */
        row = "row"
    }
    /** Translatable strings. */
    export type TranslationsType = {
        /** @default "Loading..." */
        loading: string;
        /** @default "Error" */
        loadError: string;
        /** @default "No data" */
        noData: string;
        /** @default " » " */
        breadcrumbDelimiter: string;
        /** @default "Found ${matches} of ${count}" */
        queryResult: string;
        /** @default "No result" */
        noMatch: string;
        /** @default "${match} of ${matches}" */
        matchIndex: string;
    };
    /** Possible values for {@link WunderbaumNode.addChildren}. */
    export interface AddChildrenOptions {
        /** Insert children before this node (or index)
         * @default undefined or null:  append as last child
         */
        before?: WunderbaumNode | number | null;
        /**
         * Set `node.expanded = true` according to tree.options.minExpandLevel.
         * This does *not* load lazy nodes.
         * @default true
         */
        applyMinExpanLevel?: boolean;
        /** (@internal Internal use, do not set! ) */
        _level?: number;
    }
    /** Possible values for {@link Wunderbaum.applyCommand} and {@link WunderbaumNode.applyCommand}. */
    export interface ApplyCommandOptions {
        [key: string]: unknown;
    }
    /** Possible values for {@link Wunderbaum.expandAll} and {@link WunderbaumNode.expandAll}. */
    export interface ExpandAllOptions {
        /** Expand and load lazy nodes @default false  */
        loadLazy?: boolean;
        /** Unload lazily loaded children if any (if collapsing). @default false */
        resetLazy?: boolean;
        /** Ignore tree's `minExpandLevel` option @default false */
        force?: boolean;
        /** Restrict expand level.
         * Pass 0 to make only toplevel nodes visible, 1 to expand one level deeper, etc.
         * @default unset (unlimited)
         */
        depth?: number;
        /**
         * Also collapse child nodes beyond the `depth` level.
         * Otherwise only the `depth` level is collapsed and the expand state of the
         * descendants is retained.
         * Only in combination with collapse and `depth`.
         * Expanding with `deep` option is not supported as recursion depth implied by
         * the `depth` option. However a `deep` option will be considered if
         * `collapseOthers` is set.
         * @default false
         */
        deep?: boolean;
        /**
         * Expand up to level=depth and collapse all other branches.
         * Only in combination with `flag == true`, `depth > 0`.
         * @default false
         */
        collapseOthers?: boolean;
        /** Keep active node visible @default true */
        keepActiveNodeVisible?: boolean;
    }
    /**
     * Possible option values for {@link Wunderbaum.filterNodes}.
     * The defaults are inherited from the tree instances ´tree.options.filter`
     * settings (see also {@link FilterOptionsType}).
     */
    export interface FilterNodesOptions {
        /** Expand all branches that contain matches while filtered @default false */
        autoExpand?: boolean;
        /** Whether to implicitly match all children of matched nodes @default false */
        matchBranch?: boolean;
        /** Match single characters in order, e.g. 'fb' will match 'FooBar' @default false */
        fuzzy?: boolean;
        /**Hide expanders if all child nodes are hidden by filter @default false */
        hideExpanders?: boolean;
        /** Highlight matches by wrapping inside `<mark>` tags.
         * Does not work for filter callbacks.  @default true
         */
        highlight?: boolean;
        /** Match end nodes only @default false */
        leavesOnly?: boolean;
        /** Grayout unmatched nodes (pass 'hide' to remove instead) @default 'dim' */
        mode?: FilterModeType;
        /** Display a 'no data' status node if result is empty @default true */
        noData?: boolean | string;
    }
    /** Possible values for {@link Wunderbaum.getState}. */
    export interface GetStateOptions {
        /** Include the active node's key (and expand its parents). @default true */
        activeKey?: boolean;
        /** Include the expanded keys. @default false */
        expandedKeys?: boolean;
        /** Include the selected keys. @default false */
        selectedKeys?: boolean;
    }
    /** Possible values for {@link Wunderbaum.setState}. */
    export interface SetStateOptions {
        /** Recursively load lazy nodes as needed. @default false */
        expandLazy?: boolean;
    }
    /** Used by {@link Wunderbaum.getState} and {@link Wunderbaum.setState}. */
    export interface TreeStateDefinition {
        /** List of expanded node's keys. */
        expandedKeys: Array<string> | undefined;
        /** The active node's key if any. */
        activeKey: string | null;
        /** The active column index if any. */
        activeColIdx: number | null;
        /** List of selected node's keys. */
        selectedKeys: Array<string> | undefined;
    }
    /** Possible values for {@link Wunderbaum.loadLazyNodes} `options` argument. */
    export interface LoadLazyNodesOptions {
        /** Expand node (otherwise load, but keep collapsed). @default true */
        expand?: boolean;
        /** Force reloading even if already loaded. @default false */
        force?: boolean;
        /** Do not send events. @default false */
        noEvents?: boolean;
    }
    /** Possible values for {@link WunderbaumNode.makeVisible}. */
    export interface MakeVisibleOptions {
        /** Do not animate expand (currently not implemented). @default false */
        noAnimation?: boolean;
        /** Scroll node into visible viewport area if required. @default true */
        scrollIntoView?: boolean;
        /** Do not send events. @default false */
        noEvents?: boolean;
    }
    /** Possible values for {@link WunderbaumNode.navigate}. */
    export interface NavigateOptions {
        /** Activate the new node (otherwise focus only). @default true */
        activate?: boolean;
        /** Originating event (e.g. KeyboardEvent) if any. */
        event?: Event;
    }
    /** Possible values for {@link WunderbaumNode._render}. */
    export interface RenderOptions {
        /** Which parts need update? @default ChangeType.data */
        change?: ChangeType;
        /** Where to append a new node. @default 'last' */
        after?: any;
        /** @internal. @default false */
        isNew?: boolean;
        /** @internal. @default false */
        preventScroll?: boolean;
        /** @internal. @default false */
        isDataChange?: boolean;
        /** @internal. @default false */
        top?: number;
        /** @internal. @default true */
        resizeCols?: boolean;
    }
    /** Possible values for {@link WunderbaumNode.scrollIntoView} `options` argument. */
    export interface ScrollIntoViewOptions {
        /** Do not animate (currently not implemented). @default false */
        noAnimation?: boolean;
        /** Do not send events. @default false */
        noEvents?: boolean;
        /** Keep this node visible at the top in any case. */
        topNode?: WunderbaumNode;
        /** Add N pixel offset at top. */
        ofsY?: number;
    }
    /** Possible values for {@link Wunderbaum.scrollTo} `options` argument. */
    export interface ScrollToOptions extends ScrollIntoViewOptions {
        /** Which node to scroll into the viewport.*/
        node: WunderbaumNode;
    }
    /** Possible values for {@link WunderbaumNode.setActive} `options` argument. */
    export interface SetActiveOptions {
        /** Generate (de)activate event, even if node already has this status (@default: false). */
        retrigger?: boolean;
        /** Do not generate (de)activate event  (@default: false). */
        noEvents?: boolean;
        /** Call `tree.setFocus()` to acquire keyboard focus (@default: false). */
        focusTree?: boolean;
        /** Optional original event that will be passed to the (de)activate handler. */
        event?: Event;
        /** Also call {@link Wunderbaum.setColumn}. */
        colIdx?: number | string;
        /**
         * Focus embedded input control of the grid cell if any (requires colIdx >= 0).
         * If colIdx is 0 or '*', the node title is put into edit mode.
         * Implies `focusTree: true`, requires `colIdx`.
         */
        edit?: boolean;
    }
    /** Possible values for {@link Wunderbaum.setColumn} `options` argument. */
    export interface SetColumnOptions {
        /**
         * Focus embedded input control of the grid cell if any .
         * If colIdx is 0 or '*', the node title is put into edit mode.
         * @default false
         */
        edit?: boolean;
        /** Horizontically scroll into view. @default: true */
        scrollIntoView?: boolean;
    }
    /** Possible values for {@link WunderbaumNode.setExpanded} `options` argument. */
    export interface SetExpandedOptions {
        /** Ignore {@link WunderbaumOptions}.minExpandLevel. @default false */
        force?: boolean;
        /** Immediately update viewport (async otherwise). @default false */
        immediate?: boolean;
        /** Do not animate expand (currently not implemented). @default false */
        noAnimation?: boolean;
        /** Do not send events. @default false */
        noEvents?: boolean;
        /** Unload lazily loaded children if any (if collapsing). @default false */
        resetLazy?: boolean;
        /** Scroll up to bring expanded nodes into viewport. @default false */
        scrollIntoView?: boolean;
    }
    /** Possible values for {@link WunderbaumNode.update} `options` argument. */
    export interface UpdateOptions {
        /** Force immediate redraw instead of throttled/async mode. @default false */
        immediate?: boolean;
    }
    /** Possible values for {@link WunderbaumNode.setSelected} `options` argument. */
    export interface SetSelectedOptions {
        /** Ignore restrictions, e.g. (`unselectable`). @default false */
        force?: boolean;
        /** Do not send `beforeSelect` or `select` events. @default false */
        noEvents?: boolean;
        /** Apply to all descendant nodes (only for `selectMode: 'multi'`). @default false */
        propagateDown?: boolean;
        /** Called for every node. May return false to prevent action. @default null */
        callback?: NodeSelectCallback;
    }
    /** Possible values for {@link WunderbaumNode.setStatus} `options` argument. */
    export interface SetStatusOptions {
        /** Displayed as status node title. */
        message?: string;
        /** Used as tooltip. */
        details?: string;
    }
    /**
     * Possible values for {@link Wunderbaum.reload} `options` argument.
     */
    export interface ReloadOptions {
        /** Load this source instead. @default initial source (if loaded via ajax) */
        source?: SourceType;
        /** Reactivate currently active node if any. @default true */
        reactivate?: boolean;
    }
    /**
     * Possible values for {@link WunderbaumNode.resetNativeChildOrder} `options` argument.
     */
    export interface ResetOrderOptions {
        /** Sort descendants recursively. @default true */
        recursive?: boolean;
        /** The name of the node property that will be renumbered.
         * @default `_nativeIndex`.
         */
        propName?: string;
    }
    /**
     * Possible values for {@link Wunderbaum.sort} and {@link WunderbaumNode.sort}
     * `options` argument.
     */
    export interface SortOptions {
        /** The name of the node property that will be used for sorting.
         * Mandatory, unless  {@link key} or  {@link colId} are given.
         */
        propName?: string;
        /** Callback that determines a node representation for comparison.
         * @default {@link common.nodeTitleKeyGetter} */
        key?: SortKeyCallback;
        /** Callback that determines the order. @default {@link common.nodeTitleSorter}
         * @deprecated use {@link key} instead
         */
        cmp?: SortCallback;
        /** Sort order 'asc' or 'desc'.
         * @default 'asc' (or if `updateColInfo` is true, the rotated status of the
         * column definition.
         * See also {@link WunderbaumOptions.sortFoldersFirst}.
         */
        order?: SortOrderType;
        /** Sort descendants recursively. @default true */
        deep?: boolean;
        /** Sort string values case insensitive. @default false */
        caseInsensitive?: boolean;
        /**
         * Sort by this property if order is `undefined`.
         * See also {@link WunderbaumNode.resetNativeChildOrder}.
         * @default `_nativeIndex`.
         */
        nativeOrderPropName?: string;
        /**
         * Rotate sort order (asc -> desc -> none) before sorting.
         * Update the sort icons in the column header
         * Note:
         * Sorting is done in-place. There is no 'unsorted' state, but we can
         * call `setCurrentSortOrder()` to renumber the `node._sortIdx` property,
         * which will be used as sort key, when `order` is `undefined`.
         * @default false
         */
        updateColInfo?: boolean;
        /** Column ID as defined in `tree.columns` definition. Required if updateColInfo is true.*/
        colId?: string;
    }
    /**
     * Possible values for {@link WunderbaumNode.sortByProperty} `options` argument.
     * @deprecated
     */
    export type SortByPropertyOptions = SortOptions;
    /** Options passed to {@link Wunderbaum.visitRows}. */
    export interface VisitRowsOptions {
        /** Skip filtered nodes and children of collapsed nodes. @default false */
        includeHidden?: boolean;
        /** Return the start node as first result. @default true */
        includeSelf?: boolean;
        /** Traverse in opposite direction, i.e. bottom up. @default false */
        reverse?: boolean;
        /** Start traversal at this node @default first (topmost) tree node */
        start?: WunderbaumNode | null;
        /** Wrap around at last node and continue at the top,
         * until the start node is reached again @default false */
        wrap?: boolean;
    }
    /**
     * Passed as tree option.filer.connect to configure automatic integration of
     * filter UI controls. @experimental
     */
    export interface FilterConnectType {
        inputElem: string | HTMLInputElement | null;
        modeButton?: string | HTMLButtonElement | null;
        nextButton?: string | HTMLButtonElement | HTMLAnchorElement | null;
        prevButton?: string | HTMLButtonElement | HTMLAnchorElement | null;
        matchInfoElem?: string | HTMLElement | null;
    }
    /**
     * Passed as tree options to configure default filtering behavior.
     *
     * @see {@link Wunderbaum.filterNodes}
     * @see {@link FilterNodesOptions}
     */
    export type FilterOptionsType = {
        /**
         * Element or selector of input controls and buttons for filter query strings.
         * @experimental
         * @since 0.13
         * @default null
         */
        connect?: null | FilterConnectType;
        /**
         * Re-apply last filter if lazy data is loaded
         * @default true
         */
        autoApply?: boolean;
    } & FilterNodesOptions;
    /**
     * Note: <br>
     * This options are used for renaming node titles. <br>
     * There is also the `tree.change` event to handle modifying node data from
     * input controls that are embedded in grid cells.
     */
    export type EditOptionsType = {
        /**
         * Used to debounce the `change` event handler for grid cells [ms].
         * @default 100
         */
        debounce?: number;
        /**
         * Minimum number of characters required for node title input field.
         * @default 1
         */
        minlength?: number;
        /**
         * Maximum number of characters allowed for node title input field.
         * @default null;
         */
        maxlength?: null | number;
        /**
         * Array of strings to determine which user input should trigger edit mode.
         * E.g. `["clickActive", "F2", "macEnter"]`: <br>
         * 'clickActive': single click on active node title <br>
         * 'F2': press F2 key <br>
         * 'macEnter': press Enter (on macOS only) <br>
         * Pass an empty array to disable edit mode.
         * @default []
         */
        trigger?: string[];
        /**
         * Trim whitespace before saving a node title.
         * @default true
         */
        trim?: boolean;
        /**
         * Select all text of a node title, so it can be overwritten by typing.
         * @default true
         */
        select?: boolean;
        /**
         * Handle 'clickActive' only if last click is less than this ms old (0: always)
         * @default 1000
         */
        slowClickDelay?: number;
        /**
         * Permanently apply node title input validations (CSS and tooltip) on keydown.
         * @default true
         */
        validity?: boolean;
        /**
         * `beforeEdit(e)` may return an input HTML string. Otherwise use a default.
         * @category Callback
         */
        beforeEdit?: null | ((e: WbNodeEventType) => boolean) | string;
        /**
         *
         * @category Callback
         */
        edit?: null | ((e: WbNodeEventType & {
            inputElem: HTMLInputElement;
        }) => void);
        /**
         *
         * @category Callback
         */
        apply?: null | ((e: WbNodeEventType & {
            inputElem: HTMLInputElement;
        }) => any) | Promise<any>;
    };
    export type InsertNodeType = "before" | "after" | "prependChild" | "appendChild";
    export type DropEffectType = "none" | "copy" | "link" | "move";
    export type DropEffectAllowedType = "none" | "copy" | "copyLink" | "copyMove" | "link" | "linkMove" | "move" | "all";
    export type DropRegionType = "over" | "before" | "after";
    export type DropRegionTypeSet = Set<DropRegionType>;
    export type DropRegionTypeList = Array<DropRegionType>;
    export interface DragEventType extends WbNodeEventType {
        /** The original event. */
        event: DragEvent;
        /** The source node. */
        node: WunderbaumNode;
    }
    export interface DropEventType extends WbNodeEventType {
        /** The original event. */
        event: DragEvent;
        /** The target node. */
        node: WunderbaumNode;
        /** The source node if any. */
        sourceNode: WunderbaumNode;
        /** The DataTransfer object. */
        dataTransfer: DataTransfer;
    }
    export type DndOptionsType = {
        /**
         * Expand nodes after n milliseconds of hovering
         * @default 1500
         */
        autoExpandMS?: 1500;
        /**
         * true: Drag multiple (i.e. selected) nodes. Also a callback() is allowed
         * @default false
         */
        multiSource?: false;
        /**
         * Restrict the possible cursor shapes and modifier operations
         * (can also be set in the dragStart event)
         * @default "all"
         */
        effectAllowed?: DropEffectAllowedType;
        /**
         * Default dropEffect ('copy', 'link', or 'move') when no modifier is pressed.
         * Overidable in the dragEnter or dragOver event.
         * @default "move"
         */
        dropEffectDefault?: DropEffectType;
        /**
         * Use opinionated heuristics to determine the dropEffect ('copy', 'link', or 'move')
         * based on `effectAllowed`, `dropEffectDefault`, and modifier keys.
         * This is recalculated before each dragEnter and dragOver event and can be
         * overridden there.
         *
         * @default true
         */
        guessDropEffect: boolean;
        /**
         * Prevent dropping nodes from different Wunderbaum trees
         * @default false
         */
        preventForeignNodes?: boolean;
        /**
         * Prevent dropping items on unloaded lazy Wunderbaum tree nodes
         * @default true
         */
        preventLazyParents?: boolean;
        /**
         * Prevent dropping items other than Wunderbaum tree nodes
         * @default false
         */
        preventNonNodes?: boolean;
        /**
         * Prevent dropping nodes on own descendants
         * @default true
         */
        preventRecursion?: boolean;
        /**
         * Prevent dropping nodes under same direct parent
         * @default false
         */
        preventSameParent?: boolean;
        /**
         * Prevent dropping nodes 'before self', etc. (move only)
         * @default true
         */
        preventVoidMoves?: boolean;
        /**
         * Serialize Node Data to datatransfer object
         * @default true
         */
        serializeClipboardData?: boolean | ((nodeData: WbNodeData, node: WunderbaumNode) => string);
        /**
         * Enable auto-scrolling while dragging
         * @default true
         */
        scroll?: boolean;
        /**
         * Active top/bottom margin in pixel
         * @default 20
         */
        scrollSensitivity?: 20;
        /**
         * Pixel per event
         * @default 5
         */
        scrollSpeed?: 5;
        /**
         * Optional callback passed to `toDict` on dragStart
         * @default null
         * @category Callback
         */
        sourceCopyHook?: null;
        /**
         * Callback(sourceNode, data), return true, to enable dnd drag
         * @default null
         * @category Callback
         */
        dragStart?: null | ((e: DragEventType) => boolean);
        /**
         * Callback(sourceNode, data)
         * @default null
         * @category Callback
         */
        drag?: null | ((e: DragEventType) => void);
        /**
         * Callback(sourceNode, data)
         * @default null
         * @category Callback
         */
        dragEnd?: null | ((e: DragEventType) => void);
        /**
         * Callback(targetNode, data), return true, to enable dnd drop
         * @default null
         * @category Callback
         */
        dragEnter?: null | ((e: DropEventType) => DropRegionType | DropRegionTypeSet | DropRegionTypeList | boolean);
        /**
         * Callback(targetNode, data)
         * @default null
         * @category Callback
         */
        dragOver?: null | ((e: DropEventType) => void);
        /**
         * Callback(targetNode, data), return false to prevent autoExpand
         * @default null
         * @category Callback
         */
        dragExpand?: null | ((e: DropEventType) => boolean);
        /**
         * Callback(targetNode, data)
         * @default null
         * @category Callback
         */
        drop?: null | ((e: WbNodeEventType & {
            event: DragEvent;
            region: DropRegionType;
            suggestedDropMode: InsertNodeType;
            suggestedDropEffect: DropEffectType;
            sourceNode: WunderbaumNode;
            sourceNodeData: WbNodeData | null;
        }) => void);
        /**
         * Callback(targetNode, data)
         * @default null
         * @category Callback
         */
        dragLeave?: null | ((e: DropEventType) => void);
    };
    export type GridOptionsType = object;
    export type KeynavOptionsType = object;
    export type LoggerOptionsType = object;
}
declare module "wb_ext_dnd" {
    import { Wunderbaum } from "wunderbaum";
    import { WunderbaumExtension } from "wb_extension_base";
    import { WunderbaumNode } from "wb_node";
    import { DndOptionsType, DropEffectType, DropRegionType, DropRegionTypeSet } from "types";
    import { DebouncedFunction } from "debounce";
    export class DndExtension extends WunderbaumExtension<DndOptionsType> {
        protected srcNode: WunderbaumNode | null;
        protected lastTargetNode: WunderbaumNode | null;
        protected lastEnterStamp: number;
        protected lastAllowedDropRegions: DropRegionTypeSet | null;
        protected lastDropEffect: DropEffectType | null;
        protected lastDropRegion: DropRegionType | false;
        protected currentScrollDir: number;
        protected applyScrollDirThrottled: DebouncedFunction<() => void>;
        constructor(tree: Wunderbaum);
        init(): void;
        /** Cleanup classes after target node is no longer hovered. */
        protected _leaveNode(): void;
        /** */
        protected unifyDragover(res: any): DropRegionTypeSet | false;
        /**
         * Calculates the drop region based on the drag event and the allowed drop regions.
         */
        protected _calcDropRegion(e: DragEvent, allowed: DropRegionTypeSet | null): DropRegionType | false;
        /**
         * Guess drop effect (copy/link/move) using opinionated conventions.
         *
         * Default: dnd.dropEffectDefault
         */
        protected _guessDropEffect(e: DragEvent): DropEffectType;
        /** Don't allow void operation ('drop on self').*/
        protected _isVoidDrop(targetNode: WunderbaumNode, srcNode: WunderbaumNode | null, dropRegion: DropRegionType | false): boolean;
        protected _applyScrollDir(): void;
        protected _autoScroll(viewportY: number): number;
        /** Return true if a drag operation currently in progress. */
        isDragging(): boolean;
        /**
         * Handle dragstart, drag and dragend events for the source node.
         */
        protected onDragEvent(e: DragEvent): boolean;
        /**
         * Handle dragenter, dragover, dragleave, drop events.
         */
        protected onDropEvent(e: DragEvent): boolean;
    }
}
declare module "wb_ext_edit" {
    /*!
     * Wunderbaum - ext-edit
     * Copyright (c) 2021-2025, Martin Wendt. Released under the MIT license.
     * @VERSION, @DATE (https://github.com/mar10/wunderbaum)
     */
    import { Wunderbaum } from "wunderbaum";
    import { WunderbaumExtension } from "wb_extension_base";
    import { WunderbaumNode } from "wb_node";
    import { EditOptionsType, InsertNodeType, WbNodeData } from "types";
    export class EditExtension extends WunderbaumExtension<EditOptionsType> {
        protected debouncedOnChange: (e: Event) => void;
        protected curEditNode: WunderbaumNode | null;
        protected relatedNode: WunderbaumNode | null;
        constructor(tree: Wunderbaum);
        protected _applyChange(eventName: string, node: WunderbaumNode, colElem: HTMLElement, inputElem: HTMLInputElement, extra: any): Promise<any>;
        protected _onChange(e: Event): void;
        init(): void;
        _preprocessKeyEvent(data: any): boolean | undefined;
        /** Return true if a title is currently being edited. */
        isEditingTitle(node?: WunderbaumNode): boolean;
        /** Start renaming, i.e. replace the title with an embedded `<input>`. */
        startEditTitle(node?: WunderbaumNode | null): void;
        /**
         *
         * @param apply
         * @returns
         */
        stopEditTitle(apply: boolean): void;
        _stopEditTitle(apply: boolean, options: any): void;
        /**
         * Create a new child or sibling node and start edit mode.
         */
        createNode(mode?: InsertNodeType, node?: WunderbaumNode | null, init?: string | WbNodeData): void;
    }
}
declare module "drag_observer" {
    /*!
     * Wunderbaum - drag_observer
     * Copyright (c) 2021-2025, Martin Wendt. Released under the MIT license.
     * @VERSION, @DATE (https://github.com/mar10/wunderbaum)
     */
    export type DragCallbackArgType = {
        /** "dragstart", "drag", or "dragstop". */
        type: string;
        /** Original mousedown or touch event that triggered the dragstart event. */
        startEvent: MouseEvent | TouchEvent;
        /** Original mouse or touch event that triggered the current drag event.
         * Note that this is not the same as `startEvent`, but a mousemove in case of
         * a dragstart threshold.
         */
        event: MouseEvent | TouchEvent;
        /** Custom data that was passed to the DragObserver, typically on dragstart. */
        customData: any;
        /** Element which is currently dragged. */
        dragElem: HTMLElement | null;
        /** Relative horizontal drag distance since start. */
        dx: number;
        /** Relative vertical drag distance since start. */
        dy: number;
        /** False if drag was canceled. */
        apply?: boolean;
    };
    export type DragCallbackType = (e: DragCallbackArgType) => boolean | void;
    type DragObserverOptionsType = {
        /**Event target (typically `window.document`). */
        root: EventTarget;
        /**Event delegation selector.*/
        selector?: string;
        /**Minimum drag distance in px. */
        thresh?: number;
        /**Return `false` to cancel drag. */
        dragstart: DragCallbackType;
        drag?: DragCallbackType;
        dragstop?: DragCallbackType;
    };
    /**
     * Convert mouse- and touch events to 'dragstart', 'drag', and 'dragstop'.
     */
    export class DragObserver {
        protected _handler: any;
        protected root: EventTarget;
        protected start: {
            event: MouseEvent | TouchEvent | null;
            x: number;
            y: number;
            altKey: boolean;
            ctrlKey: boolean;
            metaKey: boolean;
            shiftKey: boolean;
        };
        protected dragElem: HTMLElement | null;
        protected dragging: boolean;
        protected customData: object;
        protected events: string[];
        protected opts: DragObserverOptionsType;
        constructor(opts: DragObserverOptionsType);
        /** Unregister all event listeners. */
        disconnect(): void;
        getDragElem(): HTMLElement | null;
        isDragging(): boolean;
        stopDrag(cb_event?: DragCallbackArgType): void;
        protected handleEvent(e: MouseEvent): boolean | void;
    }
}
declare module "wb_ext_grid" {
    /*!
     * Wunderbaum - ext-grid
     * Copyright (c) 2021-2025, Martin Wendt. Released under the MIT license.
     * @VERSION, @DATE (https://github.com/mar10/wunderbaum)
     */
    import { Wunderbaum } from "wunderbaum";
    import { WunderbaumExtension } from "wb_extension_base";
    import { DragCallbackArgType, DragObserver } from "drag_observer";
    import { GridOptionsType } from "types";
    export class GridExtension extends WunderbaumExtension<GridOptionsType> {
        protected observer: DragObserver;
        constructor(tree: Wunderbaum);
        init(): void;
        /**
         * Handles drag and sragstop events for column resizing.
         */
        protected handleDrag(e: DragCallbackArgType): void;
    }
}
declare module "wb_ext_keynav" {
    /*!
     * Wunderbaum - ext-keynav
     * Copyright (c) 2021-2025, Martin Wendt. Released under the MIT license.
     * @VERSION, @DATE (https://github.com/mar10/wunderbaum)
     */
    import { KeynavOptionsType } from "types";
    import { Wunderbaum } from "wunderbaum";
    import { WunderbaumExtension } from "wb_extension_base";
    export class KeynavExtension extends WunderbaumExtension<KeynavOptionsType> {
        constructor(tree: Wunderbaum);
        protected _getEmbeddedInputElem(elem: any): HTMLInputElement | null;
        protected _isCurInputFocused(): boolean;
        onKeyEvent(data: any): boolean | undefined;
    }
}
declare module "wb_ext_logger" {
    /*!
     * Wunderbaum - ext-logger
     * Copyright (c) 2021-2025, Martin Wendt. Released under the MIT license.
     * @VERSION, @DATE (https://github.com/mar10/wunderbaum)
     */
    import { LoggerOptionsType } from "types";
    import { WunderbaumExtension } from "wb_extension_base";
    import { Wunderbaum } from "wunderbaum";
    export class LoggerExtension extends WunderbaumExtension<LoggerOptionsType> {
        readonly prefix: string;
        protected ignoreEvents: Set<string>;
        constructor(tree: Wunderbaum);
        init(): void;
        onKeyEvent(data: any): boolean | undefined;
    }
}
declare module "wb_extension_base" {
    import { DndExtension } from "wb_ext_dnd";
    import { EditExtension } from "wb_ext_edit";
    import { FilterExtension } from "wb_ext_filter";
    import { GridExtension } from "wb_ext_grid";
    import { KeynavExtension } from "wb_ext_keynav";
    import { LoggerExtension } from "wb_ext_logger";
    import { WunderbaumOptions } from "wb_options";
    import { Wunderbaum } from "wunderbaum";
    export type ExtensionsDict = {
        dnd: DndExtension;
        edit: EditExtension;
        filter: FilterExtension;
        grid: GridExtension;
        keynav: KeynavExtension;
        logger: LoggerExtension;
        [key: string]: WunderbaumExtension<any>;
    };
    export abstract class WunderbaumExtension<TOptions> {
        enabled: boolean;
        readonly id: string;
        readonly tree: Wunderbaum;
        readonly treeOpts: WunderbaumOptions;
        readonly extensionOpts: any;
        constructor(tree: Wunderbaum, id: string, defaults: TOptions);
        /** Called on tree (re)init after all extensions are added, but before loading.*/
        init(): void;
        getPluginOption(name: string, defaultValue?: any): any;
        setPluginOption(name: string, value: any): void;
        setEnabled(flag?: boolean): void;
        onKeyEvent(data: any): boolean | undefined;
        onRender(data: any): boolean | undefined;
    }
}
declare module "wb_ext_filter" {
    import { FilterNodesOptions, FilterOptionsType, NodeFilterCallback } from "types";
    import { Wunderbaum } from "wunderbaum";
    import { WunderbaumExtension } from "wb_extension_base";
    export class FilterExtension extends WunderbaumExtension<FilterOptionsType> {
        queryInput: HTMLInputElement | null;
        prevButton: HTMLElement | HTMLAnchorElement | null;
        nextButton: HTMLElement | HTMLAnchorElement | null;
        modeButton: HTMLButtonElement | null;
        matchInfoElem: HTMLElement | null;
        lastFilterArgs: IArguments | null;
        constructor(tree: Wunderbaum);
        init(): void;
        setPluginOption(name: string, value: any): void;
        _updatedConnectedControls(): void;
        _connectControls(): void;
        _applyFilterNoUpdate(filter: string | RegExp | NodeFilterCallback, _opts: FilterNodesOptions): number;
        _applyFilterImpl(filter: string | RegExp | NodeFilterCallback, _opts: FilterNodesOptions): number;
        /**
         * [ext-filter] Dim or hide nodes.
         */
        filterNodes(filter: string | RegExp | NodeFilterCallback, options: FilterNodesOptions): number;
        /**
         * [ext-filter] Dim or hide whole branches.
         * @deprecated Use {@link filterNodes} instead and set `options.matchBranch: true`.
         */
        filterBranches(filter: string | NodeFilterCallback, options: FilterNodesOptions): number;
        /**
         * [ext-filter] Return the number of matched nodes.
         */
        countMatches(): number;
        /**
         * [ext-filter] Re-apply current filter.
         */
        updateFilter(): void;
        /**
         * [ext-filter] Reset the filter.
         */
        clearFilter(): void;
    }
}
declare module "wunderbaum" {
    /*!
     * wunderbaum.ts
     *
     * A treegrid control.
     *
     * Copyright (c) 2021-2025, Martin Wendt (https://wwWendt.de).
     * https://github.com/mar10/wunderbaum
     *
     * Released under the MIT license.
     * @version @VERSION
     * @date @DATE
     */
    import * as util from "util";
    import { ExtensionsDict, WunderbaumExtension } from "wb_extension_base";
    import { AddChildrenOptions, ApplyCommandOptions, ApplyCommandType, ChangeType, ColumnDefinitionList, ExpandAllOptions, FilterModeType, FilterNodesOptions, IconMapType, GetStateOptions, MatcherCallback, NavigationType, NavModeEnum, NodeFilterCallback, NodeStatusType, NodeStringCallback, NodeToDictCallback, NodeTypeDefinitionMap, NodeVisitCallback, RenderFlag, ScrollToOptions, SetActiveOptions, SetColumnOptions, SetStateOptions, SetStatusOptions, SortCallback, SourceType, TreeStateDefinition, UpdateOptions, VisitRowsOptions, WbEventInfo, WbNodeData, SortOptions, DeprecationOptions, SortByPropertyOptions, ReloadOptions, LoadLazyNodesOptions } from "types";
    import { WunderbaumNode } from "wb_node";
    import { InitWunderbaumOptions, WunderbaumOptions } from "wb_options";
    import { DebouncedFunction } from "debounce";
    /**
     * A persistent plain object or array.
     *
     * See also {@link WunderbaumOptions}.
     */
    export class Wunderbaum {
        protected static sequence: number;
        protected enabled: boolean;
        /** Wunderbaum release version number "MAJOR.MINOR.PATCH". */
        static version: string;
        /** The invisible root node, that holds all visible top level nodes. */
        readonly root: WunderbaumNode;
        /** Unique tree ID as passed to constructor. Defaults to `"wb_SEQUENCE"`. */
        readonly id: string;
        /** The `div` container element that was passed to the constructor. */
        readonly element: HTMLDivElement;
        /** The `div.wb-header` element if any. */
        readonly headerElement: HTMLDivElement;
        /** The `div.wb-list-container` element that contains the `nodeListElement`. */
        readonly listContainerElement: HTMLDivElement;
        /** The `div.wb-node-list` element that contains all visible div.wb-row child elements. */
        readonly nodeListElement: HTMLDivElement;
        /** Contains additional data that was sent as response to an Ajax source load request. */
        readonly data: {
            [key: string]: any;
        };
        protected readonly _updateViewportThrottled: DebouncedFunction<() => void>;
        protected extensionList: WunderbaumExtension<any>[];
        protected extensions: ExtensionsDict;
        /** Merged options from constructor args and tree- and extension defaults. */
        options: WunderbaumOptions;
        protected keyMap: Map<string, WunderbaumNode>;
        protected refKeyMap: Map<string, Set<WunderbaumNode>>;
        protected treeRowCount: number;
        protected _disableUpdateCount: number;
        protected _disableUpdateIgnoreCount: number;
        protected _activeNode: WunderbaumNode | null;
        protected _focusNode: WunderbaumNode | null;
        protected _initialSource: SourceType | null;
        /** Currently active node if any.
         * Use {@link WunderbaumNode.setActive|setActive} to modify.
         */
        get activeNode(): WunderbaumNode;
        /** Current node hat has keyboard focus if any.
         * Use {@link WunderbaumNode.setFocus|setFocus()} to modify.
         */
        get focusNode(): WunderbaumNode;
        /** Shared properties, referenced by `node.type`. */
        types: NodeTypeDefinitionMap;
        /** List of column definitions. */
        columns: ColumnDefinitionList;
        protected _columnsById: {
            [key: string]: any;
        };
        protected resizeObserver: ResizeObserver;
        protected pendingChangeTypes: Set<RenderFlag>;
        /** A Promise that is resolved when the tree was initialized (similar to `init(e)` event). */
        readonly ready: Promise<any>;
        /** Expose some useful methods of the util.ts module as `Wunderbaum.util`. */
        static util: typeof util;
        /** A map of default iconMaps.
         * May be used as default, when passing partial icon definition maps:
         * ```js
         * const tree = new mar10.Wunderbaum({
         *   ...
         *   iconMap: Object.assign(Wunderbaum.iconMaps.bootstrap, {
         *     folder: "bi bi-archive",
         *   }),
         * });
         * ```
         */
        static iconMaps: {
            bootstrap: IconMapType;
            fontawesome6: IconMapType;
        };
        /** Expose some useful methods of the util.ts module as `tree._util`. */
        _util: typeof util;
        /** Filter options (used as defaults for calls to {@link Wunderbaum.filterNodes} ) */
        breadcrumb: HTMLElement | null;
        /** Filter options (used as defaults for calls to {@link Wunderbaum.filterNodes} ) */
        filterMode: FilterModeType;
        /** @internal Use `setColumn()`/`getActiveColElem()` to access. */
        activeColIdx: number;
        /** @internal */
        _cellNavMode: boolean;
        /** @internal */
        lastQuicksearchTime: number;
        /** @internal */
        lastQuicksearchTerm: string;
        protected lastClickTime: number;
        constructor(options: InitWunderbaumOptions);
        private _registerEventHandlers;
        /**
         * Return a Wunderbaum instance, from element, id, index, or event.
         *
         * ```js
         * getTree();         // Get first Wunderbaum instance on page
         * getTree(1);        // Get second Wunderbaum instance on page
         * getTree(event);    // Get tree for this mouse- or keyboard event
         * getTree("foo");    // Get tree for this `tree.options.id`
         * getTree("#tree");  // Get tree for first matching element selector
         * ```
         */
        static getTree(el?: Element | Event | number | string | WunderbaumNode): Wunderbaum | null;
        /**
         * Return the icon-function -> icon-definition mapping.
         * @deprecated Use {@link Wunderbaum.iconMaps}
         */
        get iconMap(): IconMapType;
        /**
         * Return a WunderbaumNode instance from element or event.
         */
        static getNode(el: Element | Event): WunderbaumNode | null;
        /**
         * Iterate all descendant nodes depth-first, pre-order using `for ... of ...` syntax.
         * More concise, but slightly slower than {@link Wunderbaum.visit}.
         *
         * Example:
         * ```js
         * for(const node of tree) {
         *   ...
         * }
         * ```
         */
        [Symbol.iterator](): IterableIterator<WunderbaumNode>;
        /** @internal */
        protected _registerExtension(extension: WunderbaumExtension<any>): void;
        /** Called on tree (re)init after markup is created, before loading. */
        protected _initExtensions(): void;
        /**
         * Calculate a *stable*, unique key for a node from its refKey (or title).
         * We also add information from the parent, because a refKey may occur multiple
         * times in a tree (but not as child of the same parent).
         * @internal
         */
        _calculateKey(data: WbNodeData, parent?: WunderbaumNode): string;
        /** Add node to tree's bookkeeping data structures. @internal */
        _registerNode(node: WunderbaumNode): void;
        /** Remove node from tree's bookkeeping data structures. @internal  */
        _unregisterNode(node: WunderbaumNode): void;
        /** Call all hook methods of all registered extensions.*/
        protected _callHook(hook: keyof WunderbaumExtension<any>, data?: any): any;
        /**
         * Call tree method or extension method if defined.
         *
         * Example:
         * ```js
         * tree._callMethod("edit.startEdit", "arg1", "arg2")
         * ```
         */
        _callMethod(name: string, ...args: any[]): any;
        /**
         * Call event handler if defined in tree or tree.EXTENSION options.
         *
         * Example:
         * ```js
         * tree._callEvent("edit.beforeEdit", {foo: 42})
         * ```
         */
        _callEvent(type: string, extra?: any): any;
        /** Return the node for  given row index. */
        protected _getNodeByRowIdx(idx: number): WunderbaumNode | null;
        /** Return the topmost visible node in the viewport.
         * @param complete If `false`, the node is considered visible if at least one
         * pixel is visible.
         */
        getTopmostVpNode(complete?: boolean): WunderbaumNode;
        /** Return the lowest visible node in the viewport. */
        getLowestVpNode(complete?: boolean): WunderbaumNode;
        /** Return preceding visible node in the viewport. */
        protected _getPrevNodeInView(node?: WunderbaumNode, ofs?: number): WunderbaumNode;
        /** Return following visible node in the viewport. */
        protected _getNextNodeInView(node?: WunderbaumNode, options?: {
            ofs?: number;
            reverse?: boolean;
            cb?: (n: WunderbaumNode) => boolean;
        }): WunderbaumNode;
        /**
         * Append (or insert) a list of toplevel nodes.
         *
         * @see {@link WunderbaumNode.addChildren}
         */
        addChildren(nodeData: any, options?: AddChildrenOptions): WunderbaumNode;
        /**
         * Apply a modification (or navigation) operation on the **tree or active node**.
         */
        applyCommand(cmd: ApplyCommandType, options?: ApplyCommandOptions): any;
        /**
         * Apply a modification (or navigation) operation on a **node**.
         * @see {@link WunderbaumNode.applyCommand}
         */
        applyCommand(cmd: ApplyCommandType, node: WunderbaumNode, options?: ApplyCommandOptions): any;
        /** Delete all nodes. */
        clear(): void;
        /**
         * Clear nodes and markup and detach events and observers.
         *
         * This method may be useful to free up resources before re-creating a tree
         * on an existing div, for example in unittest suites.
         * Note that this Wunderbaum instance becomes unusable afterwards.
         */
        destroy(): void;
        /**
         * Return `tree.option.NAME` (also resolving if this is a callback).
         *
         * See also {@link WunderbaumNode.getOption|WunderbaumNode.getOption()}
         * to evaluate `node.NAME` setting and `tree.types[node.type].NAME`.
         *
         * @param name option name (use dot notation to access extension option, e.g.
         * `filter.mode`)
         */
        getOption(name: string, defaultValue?: any): any;
        /**
         * Set tree option.
         * Use dot notation to set plugin option, e.g. "filter.mode".
         */
        setOption(name: string, value: any): void;
        /** Return true if the tree (or one of its nodes) has the input focus. */
        hasFocus(): boolean;
        /**
         * Return true if the tree displays a header. Grids have a header unless the
         * `header` option is set to `false`. Plain trees have a header if the `header`
         * option is a string or `true`.
         */
        hasHeader(): boolean;
        /** Run code, but defer rendering of viewport until done.
         *
         * ```js
         * const res = tree.runWithDeferredUpdate(() => {
         *   return someFunctionThatWouldUpdateManyNodes();
         * });
         * ```
         */
        runWithDeferredUpdate<T>(func: () => util.NotPromise<T>): T;
        /** Run code, but defer rendering of viewport until done.
         *
         * ```js
         * const res = await tree.runWithDeferredUpdate(async () => {
         *   return someAsyncFunctionThatWouldUpdateManyNodes();
         * });
         * ```
         */
        runWithDeferredUpdateAsync<T>(func: () => Promise<T>): Promise<T>;
        /** Recursively expand all expandable nodes (triggers lazy load if needed). */
        expandAll(flag?: boolean, options?: ExpandAllOptions): Promise<void>;
        /** Recursively select all nodes. */
        selectAll(flag?: boolean): import("types").TristateType;
        /** Toggle select all nodes. */
        toggleSelect(): void;
        /**
         * Return an array of selected nodes.
         * @param stopOnParents only return the topmost selected node (useful with selectMode 'hier')
         */
        getSelectedNodes(stopOnParents?: boolean): WunderbaumNode[];
        /**
         * Return an array of refKey values.
         *
         * RefKeys are unique identifiers for a node data, and are used to identify
         * clones.
         * If more than one node has the same refKey, it is only returned once.
         * @param selected if true, only return refKeys of selected nodes.
         */
        getRefKeys(selected?: boolean): string[];
        protected _selectRange(eventInfo: WbEventInfo): false | void;
        /** Return the number of nodes in the data model.
         * @param visible if true, nodes that are hidden due to collapsed parents are ignored.
         */
        count(visible?: boolean): number;
        /** Return the number of *unique* nodes in the data model, i.e. unique `node.refKey`.
         */
        countUnique(): number;
        /** @internal sanity check. */
        _check(): void;
        /**
         * Find all nodes that match condition.
         *
         * @param match title string to search for, or a
         *     callback function that returns `true` if a node is matched.
         * @see {@link WunderbaumNode.findAll}
         */
        findAll(match: string | RegExp | MatcherCallback): WunderbaumNode[];
        /**
         * Find all nodes with a given _refKey_ (aka a list of clones).
         *
         * @param refKey a `node.refKey` value to search for.
         * @returns an array of matching nodes with at least two element or `[]`
         * if nothing found.
         *
         * @see {@link WunderbaumNode.getCloneList}
         */
        findByRefKey(refKey: string): WunderbaumNode[];
        /**
         * Find first node that matches condition.
         *
         * @param match title string to search for, or a
         *     callback function that returns `true` if a node is matched.
         * @see {@link WunderbaumNode.findFirst}
         */
        findFirst(match: string | RegExp | MatcherCallback): WunderbaumNode;
        /**
         * Find first node that matches condition.
         *
         * @see {@link WunderbaumNode.findFirst}
         *
         */
        findKey(key: string): WunderbaumNode | null;
        /**
         * Find the next visible node that starts with `match`, starting at `startNode`
         * and wrap-around at the end.
         * Used by quicksearch and keyboard navigation.
         */
        findNextNode(match: string | MatcherCallback, startNode?: WunderbaumNode | null, reverse?: boolean): WunderbaumNode | null;
        /**
         * Find a node relative to another node.
         *
         * @param node
         * @param where 'down', 'first', 'last', 'left', 'parent', 'right', or 'up'.
         *   (Alternatively the keyCode that would normally trigger this move,
         *   e.g. `$.ui.keyCode.LEFT` = 'left'.
         * @param includeHidden Not yet implemented
         */
        findRelatedNode(node: WunderbaumNode, where: NavigationType, includeHidden?: boolean): any;
        /**
         * Iterator version of {@link Wunderbaum.format}.
         */
        format_iter(name_cb?: NodeStringCallback, connectors?: string[]): IterableIterator<string>;
        /**
         * Return multiline string representation of the node hierarchy.
         * Mostly useful for debugging.
         *
         * Example:
         * ```js
         * console.info(tree.format((n)=>n.title));
         * ```
         * logs
         * ```
         * Playground
         * ├─ Books
         * |   ├─ Art of War
         * |   ╰─ Don Quixote
         * ├─ Music
         * ...
         * ```
         *
         * @see {@link Wunderbaum.format_iter} and {@link WunderbaumNode.format}.
         */
        format(name_cb?: NodeStringCallback, connectors?: string[]): string;
        /**
         * Always returns null (so a tree instance behaves as `tree.root`).
         */
        get parent(): null;
        /**
         * Return a list of top-level nodes.
         */
        get children(): WunderbaumNode[];
        /**
         * Return the active cell (`span.wb-col`) of the currently active node or null.
         */
        getActiveColElem(): HTMLSpanElement;
        /**
         * Return the currently active node or null (alias for `tree.activeNode`).
         * Alias for {@link Wunderbaum.activeNode}.
         *
         * @see {@link WunderbaumNode.setActive}
         * @see {@link WunderbaumNode.isActive}
         * @see {@link Wunderbaum.activeNode}
         * @see {@link Wunderbaum.focusNode}
         */
        getActiveNode(): WunderbaumNode;
        /**
         * Return the first top level node if any (not the invisible root node).
         */
        getFirstChild(): WunderbaumNode;
        /**
         * Return the last top level node if any (not the invisible root node).
         */
        getLastChild(): WunderbaumNode;
        /**
         * Return the node that currently has keyboard focus or null.
         * Alias for {@link Wunderbaum.focusNode}.
         * @see {@link WunderbaumNode.setFocus}
         * @see {@link WunderbaumNode.hasFocus}
         * @see {@link Wunderbaum.activeNode}
         * @see {@link Wunderbaum.focusNode}
         */
        getFocusNode(): WunderbaumNode;
        /** Return a {node: WunderbaumNode, region: TYPE} object for a mouse event.
         *
         * @param {Event} event Mouse event, e.g. click, ...
         * @returns {object} Return a {node: WunderbaumNode, region: TYPE} object
         *     TYPE: 'title' | 'prefix' | 'expander' | 'checkbox' | 'icon' | undefined
         */
        static getEventInfo(event: Event): WbEventInfo;
        /**
         * Return readable string representation for this instance.
         * @internal
         */
        toString(): string;
        /** Return true if any node title or grid cell is currently beeing edited.
         *
         * See also {@link isEditingTitle}.
         */
        isEditing(): boolean;
        /** Return true if any node is currently in edit-title mode.
         *
         * See also {@link WunderbaumNode.isEditingTitle} and {@link isEditing}.
         */
        isEditingTitle(): boolean;
        /**
         * Return true if any node is currently beeing loaded, i.e. a Ajax request is pending.
         */
        isLoading(): boolean;
        /** Write to `console.log` with tree name as prefix if opts.debugLevel >= 4.
         * @see {@link logDebug}
         */
        log(...args: any[]): void;
        /** Write to `console.debug`  with tree name as prefix if opts.debugLevel >= 4.
         * and browser console level includes debug/verbose messages.
         * @see {@link log}
         */
        logDebug(...args: any[]): void;
        /** Write to `console.error` with tree name as prefix. */
        logError(...args: any[]): void;
        /** Write to `console.info`  with tree name as prefix if opts.debugLevel >= 3. */
        logInfo(...args: any[]): void;
        /** @internal */
        logTime(label: string): string;
        /** @internal */
        logTimeEnd(label: string): void;
        /** Write to `console.warn` with tree name as prefix with if opts.debugLevel >= 2. */
        logWarn(...args: any[]): void;
        /** Emit a warning for deprecated methods. @internal */
        logDeprecate(method: string, options?: DeprecationOptions): void;
        /** Reset column widths to default. @since 0.10.0 */
        resetColumns(): void;
        /**
        
Download .txt
gitextract_w7u9tx_n/

├── .editorconfig
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   └── feature_request.md
│   ├── SECURITY.md
│   └── workflows/
│       ├── codeql.yml
│       ├── mkdocs.yml
│       ├── node.js.yml
│       └── stale.yml
├── .gitignore
├── .hintrc
├── .prettierrc
├── .python-version
├── .vscode/
│   ├── launch.json
│   └── settings.json
├── .yarnrc.yml
├── CHANGELOG.md
├── Gruntfile.ts
├── LICENSE
├── Pipfile
├── README.md
├── dist/
│   ├── wunderbaum.css
│   ├── wunderbaum.d.ts
│   ├── wunderbaum.esm.js
│   └── wunderbaum.umd.js
├── docs/
│   ├── .nojekyll
│   ├── _config.yml
│   ├── api/
│   │   ├── .nojekyll
│   │   ├── assets/
│   │   │   ├── hierarchy.js
│   │   │   ├── highlight.css
│   │   │   ├── icons.js
│   │   │   ├── main.js
│   │   │   ├── navigation.js
│   │   │   ├── search.js
│   │   │   └── style.css
│   │   ├── classes/
│   │   │   ├── util.Deferred.html
│   │   │   ├── util.ValidationError.html
│   │   │   ├── wb_node.WunderbaumNode.html
│   │   │   └── wunderbaum.Wunderbaum.html
│   │   ├── enums/
│   │   │   ├── types.ChangeType.html
│   │   │   ├── types.NavModeEnum.html
│   │   │   ├── types.NodeRegion.html
│   │   │   ├── types.NodeStatusType.html
│   │   │   └── types.RenderFlag.html
│   │   ├── functions/
│   │   │   ├── common.decompressSourceData.html
│   │   │   ├── common.makeNodeTitleMatcher.html
│   │   │   ├── common.makeNodeTitleStartMatcher.html
│   │   │   ├── common.nodeTitleSorter.html
│   │   │   ├── util.adaptiveThrottle.html
│   │   │   ├── util.assert.html
│   │   │   ├── util.debounce.html
│   │   │   ├── util.documentReady.html
│   │   │   ├── util.documentReadyPromise.html
│   │   │   ├── util.each.html
│   │   │   ├── util.elemFromHtml.html
│   │   │   ├── util.elemFromSelector.html
│   │   │   ├── util.error.html
│   │   │   ├── util.escapeHtml.html
│   │   │   ├── util.escapeRegex.html
│   │   │   ├── util.escapeTooltip.html
│   │   │   ├── util.eventToString.html
│   │   │   ├── util.extend.html
│   │   │   ├── util.extractHtmlText.html
│   │   │   ├── util.getOption.html
│   │   │   ├── util.getValueFromElem.html
│   │   │   ├── util.intToBool.html
│   │   │   ├── util.isArray.html
│   │   │   ├── util.isEmptyObject.html
│   │   │   ├── util.isFunction.html
│   │   │   ├── util.isPlainObject.html
│   │   │   ├── util.murmurHash3.html
│   │   │   ├── util.noop.html
│   │   │   ├── util.onEvent.html
│   │   │   ├── util.overrideMethod.html
│   │   │   ├── util.rotate.html
│   │   │   ├── util.setElemDisplay.html
│   │   │   ├── util.setTimeoutPromise.html
│   │   │   ├── util.setValueToElem.html
│   │   │   ├── util.sleep.html
│   │   │   ├── util.throttle.html
│   │   │   ├── util.toBool.html
│   │   │   ├── util.toPixel.html
│   │   │   ├── util.toSet.html
│   │   │   ├── util.toggleCheckbox.html
│   │   │   ├── util.type.html
│   │   │   └── util.unsafeCast.html
│   │   ├── hierarchy.html
│   │   ├── index.html
│   │   ├── interfaces/
│   │   │   ├── types.AddChildrenOptions.html
│   │   │   ├── types.ApplyCommandOptions.html
│   │   │   ├── types.ColumnDefinition.html
│   │   │   ├── types.ColumnEventInfo.html
│   │   │   ├── types.DragEventType.html
│   │   │   ├── types.DropEventType.html
│   │   │   ├── types.ExpandAllOptions.html
│   │   │   ├── types.FilterConnectType.html
│   │   │   ├── types.FilterNodesOptions.html
│   │   │   ├── types.GetStateOptions.html
│   │   │   ├── types.IconMapType.html
│   │   │   ├── types.LoadLazyNodesOptions.html
│   │   │   ├── types.MakeVisibleOptions.html
│   │   │   ├── types.NavigateOptions.html
│   │   │   ├── types.NodeTypeDefinition.html
│   │   │   ├── types.ReloadOptions.html
│   │   │   ├── types.RenderOptions.html
│   │   │   ├── types.ResetOrderOptions.html
│   │   │   ├── types.ScrollIntoViewOptions.html
│   │   │   ├── types.ScrollToOptions.html
│   │   │   ├── types.SetActiveOptions.html
│   │   │   ├── types.SetColumnOptions.html
│   │   │   ├── types.SetExpandedOptions.html
│   │   │   ├── types.SetSelectedOptions.html
│   │   │   ├── types.SetStateOptions.html
│   │   │   ├── types.SetStatusOptions.html
│   │   │   ├── types.SortOptions.html
│   │   │   ├── types.SourceAjaxType.html
│   │   │   ├── types.SourceObjectType.html
│   │   │   ├── types.TreeStateDefinition.html
│   │   │   ├── types.UpdateOptions.html
│   │   │   ├── types.VisitRowsOptions.html
│   │   │   ├── types.WbActivateEventType.html
│   │   │   ├── types.WbButtonClickEventType.html
│   │   │   ├── types.WbChangeEventType.html
│   │   │   ├── types.WbClickEventType.html
│   │   │   ├── types.WbDeactivateEventType.html
│   │   │   ├── types.WbEditApplyEventType.html
│   │   │   ├── types.WbEditEditEventType.html
│   │   │   ├── types.WbErrorEventType.html
│   │   │   ├── types.WbEventInfo.html
│   │   │   ├── types.WbExpandEventType.html
│   │   │   ├── types.WbFocusEventType.html
│   │   │   ├── types.WbIconBadgeEventResultType.html
│   │   │   ├── types.WbIconBadgeEventType.html
│   │   │   ├── types.WbInitEventType.html
│   │   │   ├── types.WbKeydownEventType.html
│   │   │   ├── types.WbModifyChildEventType.html
│   │   │   ├── types.WbNodeData.html
│   │   │   ├── types.WbNodeEventType.html
│   │   │   ├── types.WbReceiveEventType.html
│   │   │   ├── types.WbRenderEventType.html
│   │   │   ├── types.WbSelectEventType.html
│   │   │   ├── types.WbTreeEventType.html
│   │   │   ├── wb_options.InitWunderbaumOptions.html
│   │   │   └── wb_options.WunderbaumOptions.html
│   │   ├── modules/
│   │   │   ├── common.html
│   │   │   ├── types.html
│   │   │   ├── util.html
│   │   │   ├── wb_node.html
│   │   │   ├── wb_options.html
│   │   │   └── wunderbaum.html
│   │   ├── modules.html
│   │   ├── types/
│   │   │   ├── types.ApplyCommandType.html
│   │   │   ├── types.BoolOptionResolver.html
│   │   │   ├── types.BoolOrStringOptionResolver.html
│   │   │   ├── types.CheckboxOption.html
│   │   │   ├── types.ColumnDefinitionList.html
│   │   │   ├── types.ColumnEventInfoMap.html
│   │   │   ├── types.DeprecationOptions.html
│   │   │   ├── types.DndOptionsType.html
│   │   │   ├── types.DropEffectAllowedType.html
│   │   │   ├── types.DropEffectType.html
│   │   │   ├── types.DropRegionType.html
│   │   │   ├── types.DropRegionTypeList.html
│   │   │   ├── types.DropRegionTypeSet.html
│   │   │   ├── types.DynamicBoolOption.html
│   │   │   ├── types.DynamicBoolOrStringOption.html
│   │   │   ├── types.DynamicCheckboxOption.html
│   │   │   ├── types.DynamicIconOption.html
│   │   │   ├── types.DynamicStringOption.html
│   │   │   ├── types.DynamicTooltipOption.html
│   │   │   ├── types.EditOptionsType.html
│   │   │   ├── types.FilterModeType.html
│   │   │   ├── types.FilterOptionsType.html
│   │   │   ├── types.GridOptionsType.html
│   │   │   ├── types.IconOption.html
│   │   │   ├── types.InsertNodeType.html
│   │   │   ├── types.KeynavOptionsType.html
│   │   │   ├── types.LoggerOptionsType.html
│   │   │   ├── types.MatcherCallback.html
│   │   │   ├── types.NavigationType.html
│   │   │   ├── types.NodeAnyCallback.html
│   │   │   ├── types.NodeFilterCallback.html
│   │   │   ├── types.NodeFilterResponse.html
│   │   │   ├── types.NodePropertyGetterCallback.html
│   │   │   ├── types.NodeSelectCallback.html
│   │   │   ├── types.NodeStringCallback.html
│   │   │   ├── types.NodeToDictCallback.html
│   │   │   ├── types.NodeTypeDefinitionMap.html
│   │   │   ├── types.NodeVisitCallback.html
│   │   │   ├── types.NodeVisitResponse.html
│   │   │   ├── types.SelectModeType.html
│   │   │   ├── types.SortByPropertyOptions.html
│   │   │   ├── types.SortCallback.html
│   │   │   ├── types.SortKeyCallback.html
│   │   │   ├── types.SortOrderType.html
│   │   │   ├── types.SourceListType.html
│   │   │   ├── types.SourceType.html
│   │   │   ├── types.TooltipOption.html
│   │   │   ├── types.TranslationsType.html
│   │   │   ├── types.TristateType.html
│   │   │   ├── types.WbCancelableEventResultType.html
│   │   │   ├── types.WbIconBadgeCallback.html
│   │   │   ├── util.EventCallbackType.html
│   │   │   ├── util.FunctionType.html
│   │   │   └── util.NotPromise.html
│   │   └── variables/
│   │       ├── common.DEFAULT_DEBUGLEVEL.html
│   │       ├── common.DEFAULT_MIN_COL_WIDTH.html
│   │       ├── common.DEFAULT_ROW_HEIGHT.html
│   │       ├── common.ICON_WIDTH.html
│   │       ├── common.INPUT_KEYS.html
│   │       ├── common.KEY_NODATA.html
│   │       ├── common.KEY_TO_COMMAND_MAP.html
│   │       ├── common.KEY_TO_NAVIGATION_MAP.html
│   │       ├── common.NODE_TYPE_FOLDER.html
│   │       ├── common.RENDER_MAX_PREFETCH.html
│   │       ├── common.RENDER_MIN_PREFETCH.html
│   │       ├── common.RESERVED_TREE_SOURCE_KEYS.html
│   │       ├── common.TEST_FILE_PATH.html
│   │       ├── common.TEST_HTML.html
│   │       ├── common.TITLE_SPAN_PAD_Y.html
│   │       ├── common.defaultIconMaps.html
│   │       ├── util.MAX_INT.html
│   │       ├── util.MOUSE_BUTTONS.html
│   │       └── util.isMac.html
│   ├── assets/
│   │   ├── favicon/
│   │   │   └── site.webmanifest
│   │   ├── json/
│   │   │   ├── ajax-lazy-products.json
│   │   │   ├── ajax-tree-products.json
│   │   │   ├── ajax-tree-products_t.json
│   │   │   ├── fixture_department_1k_3_6_p.json
│   │   │   ├── fixture_department_1k_3_6_t_c.json
│   │   │   └── tree_department_M_t_c.json
│   │   └── skeleton.html
│   ├── demo/
│   │   ├── demo-custom.js
│   │   ├── demo-editable.js
│   │   ├── demo-fixedcol.js
│   │   ├── demo-grid.js
│   │   ├── demo-large.js
│   │   ├── demo-minimal.js
│   │   ├── demo-plain.js
│   │   ├── demo-readonly.js
│   │   ├── demo-select.js
│   │   ├── demo-welcome.js
│   │   ├── index.html
│   │   ├── navigation.js
│   │   └── style.css
│   ├── googlecc7a2a5f2bb40f68.html
│   ├── index.md
│   ├── tutorial/
│   │   ├── concepts.md
│   │   ├── contribute.md
│   │   ├── migrate.md
│   │   ├── quick_start.md
│   │   ├── tutorial_api.md
│   │   ├── tutorial_dnd.md
│   │   ├── tutorial_edit.md
│   │   ├── tutorial_events.md
│   │   ├── tutorial_filter.md
│   │   ├── tutorial_grid.md
│   │   ├── tutorial_initialize.md
│   │   ├── tutorial_keyboard.md
│   │   ├── tutorial_render.md
│   │   ├── tutorial_select.md
│   │   ├── tutorial_source.md
│   │   └── tutorial_styling.md
│   └── unittest/
│       ├── ajax-simple-sub.json
│       ├── ajax-simple.json
│       ├── test-core-fixture1.js
│       ├── test-core.js
│       ├── test-dev.html
│       └── test-dist.html
├── eslint.config.mjs
├── mkdocs.yml
├── package.json
├── rollup.config.mjs
├── src/
│   ├── common.ts
│   ├── debounce.ts
│   ├── deferred.ts
│   ├── drag_observer.ts
│   ├── types.ts
│   ├── util.ts
│   ├── wb_ext_dnd.ts
│   ├── wb_ext_edit.ts
│   ├── wb_ext_filter.ts
│   ├── wb_ext_grid.ts
│   ├── wb_ext_keynav.ts
│   ├── wb_ext_logger.ts
│   ├── wb_extension_base.ts
│   ├── wb_node.ts
│   ├── wb_options.ts
│   ├── wunderbaum.scss
│   └── wunderbaum.ts
├── test/
│   ├── generator/
│   │   ├── README.txt
│   │   ├── __init__.py
│   │   ├── generator.py
│   │   └── make_fixture.py
│   ├── gui_test.ods
│   ├── playground.html
│   ├── playground.js
│   └── unit/
│       ├── ajax-simple-sub.json
│       ├── ajax-simple.json
│       ├── test-core-fixture1.js
│       ├── test-core.js
│       ├── test-dev.html
│       └── test-dist.html
├── tsconfig.json
└── typedoc.json
Download .txt
SYMBOL INDEX (1449 symbols across 28 files)

FILE: dist/wunderbaum.d.ts
  type Procedure (line 7) | type Procedure = (...args: any[]) => any;
  type DebounceOptions (line 8) | type DebounceOptions = {
  type ThrottleOptions (line 16) | type ThrottleOptions = {
  type DebouncedFunction (line 22) | interface DebouncedFunction<F extends Procedure> {
  type NotPromise (line 146) | type NotPromise<T> = T extends Promise<any> ? never : T;
  type FunctionType (line 147) | type FunctionType = (...args: any[]) => any;
  type EventCallbackType (line 148) | type EventCallbackType = (e: Event) => boolean | void;
  class ValidationError (line 153) | class ValidationError extends Error {
  class Deferred (line 162) | class Deferred {
  type IconLibrary (line 474) | type IconLibrary = "bootstrap" | "fontawesome6";
  type PromiseCallbackType (line 530) | type PromiseCallbackType = (val: any) => void;
  type finallyCallbackType (line 531) | type finallyCallbackType = () => void;
  class Deferred (line 547) | class Deferred<T> {
  class WunderbaumNode (line 576) | class WunderbaumNode {
  type WunderbaumOptions (line 1185) | interface WunderbaumOptions {
  type InitWunderbaumOptions (line 1555) | interface InitWunderbaumOptions extends Partial<WunderbaumOptions> {
  type TristateType (line 1602) | type TristateType = boolean | undefined;
  type CheckboxOption (line 1604) | type CheckboxOption = boolean | "radio";
  type SortOrderType (line 1606) | type SortOrderType = "asc" | "desc" | undefined;
  type IconOption (line 1614) | type IconOption = boolean | string;
  type TooltipOption (line 1616) | type TooltipOption = boolean | string;
  type SourceAjaxType (line 1617) | interface SourceAjaxType {
  type SourceListType (line 1623) | type SourceListType = Array<WbNodeData>;
  type SourceObjectType (line 1624) | interface SourceObjectType {
  type SourceType (line 1639) | type SourceType = string | SourceListType | SourceAjaxType | SourceObjec...
  type MatcherCallback (line 1641) | type MatcherCallback = (node: WunderbaumNode) => boolean;
  type WbIconBadgeCallback (line 1643) | type WbIconBadgeCallback = (e: WbIconBadgeEventType) => WbIconBadgeEvent...
  type SortCallback (line 1648) | type SortCallback = (a: WunderbaumNode, b: WunderbaumNode) => number;
  type SortKeyCallback (line 1650) | type SortKeyCallback = (node: WunderbaumNode) => string | number | any[];
  type BoolOptionResolver (line 1652) | type BoolOptionResolver = (node: WunderbaumNode) => boolean;
  type BoolOrStringOptionResolver (line 1654) | type BoolOrStringOptionResolver = (node: WunderbaumNode) => boolean | st...
  type NodeAnyCallback (line 1656) | type NodeAnyCallback = (node: WunderbaumNode) => any;
  type NodeStringCallback (line 1658) | type NodeStringCallback = (node: WunderbaumNode) => string;
  type NodePropertyGetterCallback (line 1660) | type NodePropertyGetterCallback = (node: WunderbaumNode, propName: strin...
  type NodeVisitCallback (line 1662) | type NodeVisitCallback = (node: WunderbaumNode) => NodeVisitResponse;
  type NodeVisitResponse (line 1668) | type NodeVisitResponse = "skip" | boolean | void;
  type NodeToDictCallback (line 1673) | type NodeToDictCallback = (dict: WbNodeData, node: WunderbaumNode) => No...
  type NodeSelectCallback (line 1678) | type NodeSelectCallback = (node: WunderbaumNode) => boolean | void;
  type DeprecationOptions (line 1680) | type DeprecationOptions = {
  type DynamicBoolOption (line 1688) | type DynamicBoolOption = boolean | BoolOptionResolver;
  type DynamicStringOption (line 1689) | type DynamicStringOption = string | BoolOptionResolver;
  type DynamicBoolOrStringOption (line 1690) | type DynamicBoolOrStringOption = boolean | string | BoolOrStringOptionRe...
  type DynamicCheckboxOption (line 1691) | type DynamicCheckboxOption = CheckboxOption | BoolOrStringOptionResolver;
  type DynamicIconOption (line 1692) | type DynamicIconOption = IconOption | BoolOrStringOptionResolver;
  type DynamicTooltipOption (line 1693) | type DynamicTooltipOption = TooltipOption | BoolOrStringOptionResolver;
  type WbNodeData (line 1695) | interface WbNodeData {
  type IconMapType (line 1753) | interface IconMapType {
  type WbCancelableEventResultType (line 1779) | type WbCancelableEventResultType = false | void;
  type WbTreeEventType (line 1780) | interface WbTreeEventType {
  type WbNodeEventType (line 1792) | interface WbNodeEventType extends WbTreeEventType {
  type WbActivateEventType (line 1801) | interface WbActivateEventType extends WbNodeEventType {
  type WbChangeEventType (line 1806) | interface WbChangeEventType extends WbNodeEventType {
  type WbClickEventType (line 1816) | interface WbClickEventType extends WbTreeEventType {
  type WbDeactivateEventType (line 1824) | interface WbDeactivateEventType extends WbNodeEventType {
  type WbEditApplyEventType (line 1829) | interface WbEditApplyEventType extends WbNodeEventType {
  type WbEditEditEventType (line 1841) | interface WbEditEditEventType extends WbNodeEventType {
  type WbErrorEventType (line 1845) | interface WbErrorEventType extends WbNodeEventType {
  type WbExpandEventType (line 1848) | interface WbExpandEventType extends WbNodeEventType {
  type WbFocusEventType (line 1851) | interface WbFocusEventType extends WbTreeEventType {
  type WbIconBadgeEventType (line 1857) | interface WbIconBadgeEventType extends WbNodeEventType {
  type WbIconBadgeEventResultType (line 1860) | interface WbIconBadgeEventResultType {
  type WbInitEventType (line 1868) | interface WbInitEventType extends WbTreeEventType {
  type WbKeydownEventType (line 1871) | interface WbKeydownEventType extends WbTreeEventType {
  type WbModifyChildEventType (line 1878) | interface WbModifyChildEventType extends WbNodeEventType {
  type WbReceiveEventType (line 1883) | interface WbReceiveEventType extends WbNodeEventType {
  type WbSelectEventType (line 1886) | interface WbSelectEventType extends WbNodeEventType {
  type WbButtonClickEventType (line 1889) | interface WbButtonClickEventType extends WbTreeEventType {
  type WbRenderEventType (line 1894) | interface WbRenderEventType extends WbNodeEventType {
  type NodeTypeDefinition (line 1937) | interface NodeTypeDefinition {
  type NodeTypeDefinitionMap (line 1950) | type NodeTypeDefinitionMap = {
  type ColumnDefinition (line 1957) | interface ColumnDefinition {
  type ColumnDefinitionList (line 2034) | type ColumnDefinitionList = Array<ColumnDefinition>;
  type ColumnEventInfo (line 2038) | interface ColumnEventInfo {
  type ColumnEventInfoMap (line 2048) | type ColumnEventInfoMap = {
  type WbEventInfo (line 2055) | interface WbEventInfo {
  type FilterModeType (line 2077) | type FilterModeType = null | "mark" | "dim" | "hide";
  type SelectModeType (line 2078) | type SelectModeType = "single" | "multi" | "hier";
  type NavigationType (line 2079) | type NavigationType = "down" | "first" | "firstCol" | "last" | "lastCol"...
  type ApplyCommandType (line 2080) | type ApplyCommandType = NavigationType | "addChild" | "addSibling" | "co...
  type NodeFilterResponse (line 2081) | type NodeFilterResponse = "skip" | "branch" | boolean | void;
  type NodeFilterCallback (line 2082) | type NodeFilterCallback = (node: WunderbaumNode) => NodeFilterResponse;
  type ChangeType (line 2086) | enum ChangeType {
  type RenderFlag (line 2105) | enum RenderFlag {
  type NodeStatusType (line 2112) | enum NodeStatusType {
  type NodeRegion (line 2120) | enum NodeRegion {
  type NavModeEnum (line 2130) | enum NavModeEnum {
  type TranslationsType (line 2141) | type TranslationsType = {
  type AddChildrenOptions (line 2158) | interface AddChildrenOptions {
  type ApplyCommandOptions (line 2173) | interface ApplyCommandOptions {
  type ExpandAllOptions (line 2177) | interface ExpandAllOptions {
  type FilterNodesOptions (line 2214) | interface FilterNodesOptions {
  type GetStateOptions (line 2235) | interface GetStateOptions {
  type SetStateOptions (line 2244) | interface SetStateOptions {
  type TreeStateDefinition (line 2249) | interface TreeStateDefinition {
  type LoadLazyNodesOptions (line 2260) | interface LoadLazyNodesOptions {
  type MakeVisibleOptions (line 2269) | interface MakeVisibleOptions {
  type NavigateOptions (line 2278) | interface NavigateOptions {
  type RenderOptions (line 2285) | interface RenderOptions {
  type ScrollIntoViewOptions (line 2302) | interface ScrollIntoViewOptions {
  type ScrollToOptions (line 2313) | interface ScrollToOptions extends ScrollIntoViewOptions {
  type SetActiveOptions (line 2318) | interface SetActiveOptions {
  type SetColumnOptions (line 2337) | interface SetColumnOptions {
  type SetExpandedOptions (line 2348) | interface SetExpandedOptions {
  type UpdateOptions (line 2363) | interface UpdateOptions {
  type SetSelectedOptions (line 2368) | interface SetSelectedOptions {
  type SetStatusOptions (line 2379) | interface SetStatusOptions {
  type ReloadOptions (line 2388) | interface ReloadOptions {
  type ResetOrderOptions (line 2397) | interface ResetOrderOptions {
  type SortOptions (line 2409) | interface SortOptions {
  type SortByPropertyOptions (line 2454) | type SortByPropertyOptions = SortOptions;
  type VisitRowsOptions (line 2456) | interface VisitRowsOptions {
  type FilterConnectType (line 2473) | interface FilterConnectType {
  type FilterOptionsType (line 2486) | type FilterOptionsType = {
  type EditOptionsType (line 2506) | type EditOptionsType = {
  type InsertNodeType (line 2572) | type InsertNodeType = "before" | "after" | "prependChild" | "appendChild";
  type DropEffectType (line 2573) | type DropEffectType = "none" | "copy" | "link" | "move";
  type DropEffectAllowedType (line 2574) | type DropEffectAllowedType = "none" | "copy" | "copyLink" | "copyMove" |...
  type DropRegionType (line 2575) | type DropRegionType = "over" | "before" | "after";
  type DropRegionTypeSet (line 2576) | type DropRegionTypeSet = Set<DropRegionType>;
  type DropRegionTypeList (line 2577) | type DropRegionTypeList = Array<DropRegionType>;
  type DragEventType (line 2578) | interface DragEventType extends WbNodeEventType {
  type DropEventType (line 2584) | interface DropEventType extends WbNodeEventType {
  type DndOptionsType (line 2594) | type DndOptionsType = {
  type GridOptionsType (line 2738) | type GridOptionsType = object;
  type KeynavOptionsType (line 2739) | type KeynavOptionsType = object;
  type LoggerOptionsType (line 2740) | type LoggerOptionsType = object;
  class DndExtension (line 2748) | class DndExtension extends WunderbaumExtension<DndOptionsType> {
  class EditExtension (line 2799) | class EditExtension extends WunderbaumExtension<EditOptionsType> {
  type DragCallbackArgType (line 2831) | type DragCallbackArgType = {
  type DragCallbackType (line 2852) | type DragCallbackType = (e: DragCallbackArgType) => boolean | void;
  type DragObserverOptionsType (line 2853) | type DragObserverOptionsType = {
  class DragObserver (line 2868) | class DragObserver {
  class GridExtension (line 2904) | class GridExtension extends WunderbaumExtension<GridOptionsType> {
  class KeynavExtension (line 2923) | class KeynavExtension extends WunderbaumExtension<KeynavOptionsType> {
  class LoggerExtension (line 2939) | class LoggerExtension extends WunderbaumExtension<LoggerOptionsType> {
  type ExtensionsDict (line 2956) | type ExtensionsDict = {
  class FilterExtension (line 2985) | class FilterExtension extends WunderbaumExtension<FilterOptionsType> {
  class Wunderbaum (line 3046) | class Wunderbaum {

FILE: dist/wunderbaum.esm.js
  function isObject (line 49) | function isObject(value) {
  function debounce (line 108) | function debounce(func, wait = 0, options = {}) {
  function throttle (line 276) | function throttle(func, wait = 0, options = {}) {
  constant MOUSE_BUTTONS (line 300) | const MOUSE_BUTTONS = {
  constant MAX_INT (line 308) | const MAX_INT = 9007199254740991;
  constant REX_HTML (line 312) | const REX_HTML = /[&<>"'/]/g;
  constant REX_TOOLTIP (line 313) | const REX_TOOLTIP = /[<>"'/]/g;
  constant ENTITY_MAP (line 314) | const ENTITY_MAP = {
  class ValidationError (line 326) | class ValidationError extends Error {
    method constructor (line 327) | constructor(message) {
  method constructor (line 339) | constructor() {
  method resolve (line 344) | resolve(value) {
  method reject (line 353) | reject(error) {
  method then (line 362) | then(cb) {
  method catch (line 370) | catch(cb) {
  method promise (line 378) | promise() {
  function assert (line 386) | function assert(cond, msg) {
  function _getUserInfo (line 392) | function _getUserInfo() {
  function documentReady (line 401) | function documentReady(callback) {
  function documentReadyPromise (line 410) | function documentReadyPromise() {
  function each (line 423) | function each(obj, callback) {
  function error (line 447) | function error(msg) {
  function escapeHtml (line 451) | function escapeHtml(s) {
  function escapeRegex (line 460) | function escapeRegex(s) {
  function escapeTooltip (line 464) | function escapeTooltip(s) {
  function extractHtmlText (line 470) | function extractHtmlText(s) {
  function getValueFromElem (line 502) | function getValueFromElem(elem, coerce = false) {
  function setValueToElem (line 584) | function setValueToElem(elem, value) {
  function setElemDisplay (line 651) | function setElemDisplay(elem, flag) {
  function elemFromHtml (line 663) | function elemFromHtml(html) {
  function elemFromSelector (line 670) | function elemFromSelector(obj) {
  function eventToString (line 703) | function eventToString(event) {
  function extend (line 742) | function extend(...args) {
  function isArray (line 757) | function isArray(obj) {
  function isEmptyObject (line 761) | function isEmptyObject(obj) {
  function isFunction (line 765) | function isFunction(obj) {
  function isPlainObject (line 769) | function isPlainObject(obj) {
  function noop (line 773) | function noop(...args) { }
  function onEvent (line 774) | function onEvent(rootTarget, eventNames, selectorOrHandler, handlerOrNon...
  function overrideMethod (line 816) | function overrideMethod(instance, methodName, handler, ctx) {
  function setTimeoutPromise (line 842) | function setTimeoutPromise(callback, ms) {
  function sleep (line 864) | async function sleep(ms) {
  function toggleCheckbox (line 877) | function toggleCheckbox(element, value, tristate) {
  function getOption (line 905) | function getOption(opts, name, defaultValue = undefined) {
  function rotate (line 917) | function rotate(value, values) {
  function toSet (line 922) | function toSet(val) {
  function toPixel (line 949) | function toPixel(...defaults) {
  function unsafeCast (line 962) | function unsafeCast(value) {
  function toBool (line 972) | function toBool(...boolDefaults) {
  function intToBool (line 986) | function intToBool(val) {
  function type (line 1005) | function type(obj) {
  function adaptiveThrottle (line 1023) | function adaptiveThrottle(callback, options) {
  function murmurHash3 (line 1100) | function murmurHash3(key, asString = true, seed = 0) {
  class WunderbaumExtension (line 1268) | class WunderbaumExtension {
    method constructor (line 1269) | constructor(tree, id, defaults) {
    method init (line 1286) | init() {
    method getPluginOption (line 1303) | getPluginOption(name, defaultValue) {
    method setPluginOption (line 1307) | setPluginOption(name, value) {
    method setEnabled (line 1310) | setEnabled(flag = true) {
    method onKeyEvent (line 1314) | onKeyEvent(data) {
    method onRender (line 1317) | onRender(data) {
  constant START_MARKER (line 1327) | const START_MARKER = "\uFFF7";
  constant END_MARKER (line 1328) | const END_MARKER = "\uFFF8";
  constant RE_START_MARKER (line 1329) | const RE_START_MARKER = new RegExp(escapeRegex(START_MARKER), "g");
  constant RE_END_MARTKER (line 1330) | const RE_END_MARTKER = new RegExp(escapeRegex(END_MARKER), "g");
  class FilterExtension (line 1331) | class FilterExtension extends WunderbaumExtension {
    method constructor (line 1332) | constructor(tree) {
    method init (line 1352) | init() {
    method setPluginOption (line 1359) | setPluginOption(name, value) {
    method _updatedConnectedControls (line 1369) | _updatedConnectedControls() {
    method _connectControls (line 1410) | _connectControls() {
    method _applyFilterNoUpdate (line 1449) | _applyFilterNoUpdate(filter, _opts) {
    method _applyFilterImpl (line 1454) | _applyFilterImpl(filter, _opts) {
    method filterNodes (line 1604) | filterNodes(filter, options) {
    method filterBranches (line 1611) | filterBranches(filter, options) {
    method countMatches (line 1623) | countMatches() {
    method updateFilter (line 1635) | updateFilter() {
    method clearFilter (line 1652) | clearFilter() {
  function _markFuzzyMatchedChars (line 1687) | function _markFuzzyMatchedChars(text, matches, escapeTitles = true) {
  constant QUICKSEARCH_DELAY (line 1722) | const QUICKSEARCH_DELAY = 500;
  class KeynavExtension (line 1723) | class KeynavExtension extends WunderbaumExtension {
    method constructor (line 1724) | constructor(tree) {
    method _getEmbeddedInputElem (line 1727) | _getEmbeddedInputElem(elem) {
    method _isCurInputFocused (line 1750) | _isCurInputFocused() {
    method onKeyEvent (line 1756) | onKeyEvent(data) {
  class LoggerExtension (line 2086) | class LoggerExtension extends WunderbaumExtension {
    method constructor (line 2087) | constructor(tree) {
    method init (line 2097) | init() {
    method onKeyEvent (line 2116) | onKeyEvent(data) {
  class DndExtension (line 2129) | class DndExtension extends WunderbaumExtension {
    method constructor (line 2130) | constructor(tree) {
    method init (line 2175) | init() {
    method _leaveNode (line 2195) | _leaveNode() {
    method unifyDragover (line 2205) | unifyDragover(res) {
    method _calcDropRegion (line 2224) | _calcDropRegion(e, allowed) {
    method _guessDropEffect (line 2251) | _guessDropEffect(e) {
    method _isVoidDrop (line 2290) | _isVoidDrop(targetNode, srcNode, dropRegion) {
    method _applyScrollDir (line 2307) | _applyScrollDir() {
    method _autoScroll (line 2321) | _autoScroll(viewportY) {
    method isDragging (line 2354) | isDragging() {
    method onDragEvent (line 2360) | onDragEvent(e) {
    method onDropEvent (line 2431) | onDropEvent(e) {
  class DragObserver (line 2582) | class DragObserver {
    method constructor (line 2583) | constructor(opts) {
    method disconnect (line 2609) | disconnect() {
    method getDragElem (line 2614) | getDragElem() {
    method isDragging (line 2617) | isDragging() {
    method stopDrag (line 2620) | stopDrag(cb_event) {
    method handleEvent (line 2635) | handleEvent(e) {
  constant DEFAULT_DEBUGLEVEL (line 2728) | const DEFAULT_DEBUGLEVEL = 3;
  constant DEFAULT_ROW_HEIGHT (line 2732) | const DEFAULT_ROW_HEIGHT = 22;
  constant ICON_WIDTH (line 2736) | const ICON_WIDTH = 20;
  constant TITLE_SPAN_PAD_Y (line 2741) | const TITLE_SPAN_PAD_Y = 7;
  constant RENDER_MAX_PREFETCH (line 2743) | const RENDER_MAX_PREFETCH = 5;
  constant DEFAULT_MIN_COL_WIDTH (line 2745) | const DEFAULT_MIN_COL_WIDTH = 4;
  constant NODE_TYPE_FOLDER (line 2750) | const NODE_TYPE_FOLDER = "folder";
  constant TEST_FILE_PATH (line 2755) | const TEST_FILE_PATH = /^(?!.*<).*[/.]/;
  constant TEST_HTML (line 2757) | const TEST_HTML = /</;
  constant RESERVED_TREE_SOURCE_KEYS (line 2826) | const RESERVED_TREE_SOURCE_KEYS = new Set([
  constant KEY_TO_NAVIGATION_MAP (line 2845) | const KEY_TO_NAVIGATION_MAP = {
  function makeNodeTitleMatcher (line 2864) | function makeNodeTitleMatcher(match) {
  function makeNodeTitleStartMatcher (line 2879) | function makeNodeTitleStartMatcher(s) {
  function nodeTitleSorter (line 2889) | function nodeTitleSorter(a, b) {
  function unflattenSource (line 2914) | function unflattenSource(source) {
  function decompressSourceData (line 3012) | function decompressSourceData(source) {
  class GridExtension (line 3092) | class GridExtension extends WunderbaumExtension {
    method constructor (line 3093) | constructor(tree) {
    method init (line 3146) | init() {
    method handleDrag (line 3152) | handleDrag(e) {
  class Deferred (line 3198) | class Deferred {
    method constructor (line 3199) | constructor() {
    method resolve (line 3206) | resolve(value) {
    method reject (line 3210) | reject(reason) {
    method promise (line 3214) | promise() {
    method then (line 3218) | then(cb) {
    method catch (line 3222) | catch(cb) {
    method finally (line 3226) | finally(cb) {
  constant NODE_PROPS (line 3239) | const NODE_PROPS = new Set([
  constant NODE_DICT_PROPS (line 3259) | const NODE_DICT_PROPS = new Set(NODE_PROPS);
  class WunderbaumNode (line 3283) | class WunderbaumNode {
    method constructor (line 3284) | constructor(tree, parent, data) {
    method toString (line 3357) | toString() {
    method _callEvent (line 3410) | _callEvent(type, extra) {
    method addChildren (line 3424) | addChildren(nodeData, options) {
    method addNode (line 3496) | addNode(nodeData, mode = "appendChild") {
    method applyCommand (line 3522) | applyCommand(cmd, options) {
    method collapseSiblings (line 3529) | collapseSiblings(options) {
    method setClass (line 3544) | setClass(className, flag = true) {
    method startEditTitle (line 3571) | startEditTitle() {
    method expandAll (line 3582) | async expandAll(flag = true, options) {
    method findAll (line 3683) | findAll(match) {
    method findDirectChild (line 3694) | findDirectChild(ptr) {
    method findFirst (line 3720) | findFirst(match) {
    method findRelatedNode (line 3735) | findRelatedNode(where, includeHidden = false) {
    method format_iter (line 3741) | *format_iter(name_cb, connectors) {
    method format (line 3781) | format(name_cb, connectors) {
    method getColElem (line 3791) | getColElem(colIdx) {
    method getCloneList (line 3805) | getCloneList(includeSelf = false) {
    method getFirstChild (line 3818) | getFirstChild() {
    method getLastChild (line 3824) | getLastChild() {
    method getLevel (line 3828) | getLevel() {
    method getNextSibling (line 3837) | getNextSibling() {
    method getParent (line 3843) | getParent() {
    method getParentList (line 3851) | getParentList(includeRoot = false, includeSelf = false) {
    method getPath (line 3867) | getPath(includeSelf = true, part = "title", separator = "/") {
    method getPrevSibling (line 3883) | getPrevSibling() {
    method hasChildren (line 3891) | hasChildren() {
    method hasClass (line 3908) | hasClass(className) {
    method hasFocus (line 3912) | hasFocus() {
    method isActive (line 3916) | isActive() {
    method isAncestorOf (line 3922) | isAncestorOf(other) {
    method isChildOf (line 3928) | isChildOf(other) {
    method isClone (line 3933) | isClone() {
    method isColspan (line 3939) | isColspan() {
    method isDescendantOf (line 3945) | isDescendantOf(other) {
    method isExpandable (line 3965) | isExpandable(andCollapsed = false) {
    method isEditingTitle (line 3982) | isEditingTitle() {
    method isExpanded (line 3986) | isExpanded() {
    method isFirstSibling (line 3990) | isFirstSibling() {
    method isLastSibling (line 3995) | isLastSibling() {
    method isLazy (line 4000) | isLazy() {
    method isLoaded (line 4004) | isLoaded() {
    method isLoading (line 4008) | isLoading() {
    method isPagingNode (line 4012) | isPagingNode() {
    method isParentOf (line 4018) | isParentOf(other) {
    method isPartload (line 4022) | isPartload() {
    method isPartsel (line 4026) | isPartsel() {
    method isRadio (line 4030) | isRadio() {
    method isRendered (line 4034) | isRendered() {
    method isRootNode (line 4040) | isRootNode() {
    method isSelected (line 4046) | isSelected() {
    method isStatusNode (line 4052) | isStatusNode() {
    method isTopLevel (line 4056) | isTopLevel() {
    method isUnloaded (line 4062) | isUnloaded() {
    method isVisible (line 4069) | isVisible() {
    method _loadSourceObject (line 4093) | _loadSourceObject(source, level) {
    method _fetchWithOptions (line 4137) | async _fetchWithOptions(source) {
    method load (line 4178) | async load(source) {
    method loadLazy (line 4253) | async loadLazy(forceReload = false) {
    method log (line 4297) | log(...args) {
    method logDebug (line 4306) | logDebug(...args) {
    method logError (line 4312) | logError(...args) {
    method logInfo (line 4318) | logInfo(...args) {
    method logWarn (line 4324) | logWarn(...args) {
    method makeVisible (line 4334) | async makeVisible(options) {
    method moveTo (line 4367) | moveTo(targetNode, mode = "appendChild", map) {
    method navigate (line 4478) | async navigate(where, options) {
    method remove (line 4502) | remove() {
    method removeChildren (line 4514) | removeChildren() {
    method removeMarkup (line 4547) | removeMarkup() {
    method _getRenderInfo (line 4554) | _getRenderInfo() {
    method _createIcon (line 4580) | _createIcon(parentElem, replaceChild, showLoading) {
    method _render_markup (line 4596) | _render_markup(opts) {
    method _render_data (line 4710) | _render_data(opts) {
    method _render_status (line 4780) | _render_status(opts) {
    method _render (line 4912) | _render(options) {
    method resetLazy (line 4937) | resetLazy() {
    method toDict (line 4955) | toDict(recursive = false, callback) {
    method getOption (line 5017) | getOption(name, defaultValue) {
    method scrollIntoView (line 5053) | async scrollIntoView(options) {
    method setActive (line 5061) | async setActive(flag = true, options) {
    method setExpanded (line 5124) | async setExpanded(flag = true, options) {
    method setFocus (line 5170) | setFocus(flag = true) {
    method setIcon (line 5178) | setIcon(icon) {
    method setKey (line 5183) | setKey(key, refKey) {
    method update (line 5223) | update(change = ChangeType.data) {
    method getSelectedNodes (line 5231) | getSelectedNodes(stopOnParents = false) {
    method getRefKeys (line 5251) | getRefKeys(selected = false) {
    method toggleSelected (line 5261) | toggleSelected(options) {
    method _anySelectable (line 5272) | _anySelectable() {
    method _changeSelectStatusProps (line 5286) | _changeSelectStatusProps(state) {
    method fixSelection3AfterClick (line 5317) | fixSelection3AfterClick(opts) {
    method fixSelection3FromEndNodes (line 5336) | fixSelection3FromEndNodes(opts) {
    method setSelected (line 5400) | setSelected(flag = true, options) {
    method setStatus (line 5454) | setStatus(status, options) {
    method setTitle (line 5535) | setTitle(title) {
    method setTooltip (line 5541) | setTooltip(tooltip) {
    method sortChildren (line 5552) | sortChildren(cmp = nodeTitleSorter, deep = false) {
    method resetNativeChildOrder (line 5562) | resetNativeChildOrder(options) {
    method sortByProperty (line 5578) | sortByProperty(options) {
    method sort (line 5586) | sort(options) {
    method resort (line 5703) | resort(options = {}) {
    method triggerModifyChild (line 5717) | triggerModifyChild(operation, child, extra) {
    method triggerModify (line 5732) | triggerModify(operation, extra) {
    method visit (line 5751) | visit(callback, includeSelf = false) {
    method visitParents (line 5776) | visitParents(callback, includeSelf = false) {
    method visitSiblings (line 5798) | visitSiblings(callback, includeSelf = false) {
    method isMatched (line 5813) | isMatched() {
  method [Symbol.iterator] (line 3371) | *[Symbol.iterator]() {
  class EditExtension (line 5825) | class EditExtension extends WunderbaumExtension {
    method constructor (line 5826) | constructor(tree) {
    method _applyChange (line 5851) | async _applyChange(eventName, node, colElem, inputElem, extra) {
    method _onChange (line 5902) | _onChange(e) {
    method init (line 5919) | init() {
    method _preprocessKeyEvent (line 5931) | _preprocessKeyEvent(data) {
    method isEditingTitle (line 5975) | isEditingTitle(node) {
    method startEditTitle (line 5979) | startEditTitle(node) {
    method stopEditTitle (line 6037) | stopEditTitle(apply) {
    method _stopEditTitle (line 6045) | _stopEditTitle(apply, options) {
    method createNode (line 6114) | createNode(mode = "after", node, init) {
  class WbSystemRoot (line 6161) | class WbSystemRoot extends WunderbaumNode {
    method constructor (line 6162) | constructor(tree) {
    method toString (line 6168) | toString() {
  class Wunderbaum (line 6177) | class Wunderbaum {
    method activeNode (line 6181) | get activeNode() {
    method focusNode (line 6189) | get focusNode() {
    method constructor (line 6194) | constructor(options) {
    method _registerEventHandlers (line 6457) | _registerEventHandlers() {
    method getTree (line 6572) | static getTree(el) {
    method iconMap (line 6615) | get iconMap() {
    method getNode (line 6625) | static getNode(el) {
    method _registerExtension (line 6660) | _registerExtension(extension) {
    method _initExtensions (line 6666) | _initExtensions() {
    method _calculateKey (line 6677) | _calculateKey(data, parent) {
    method _registerNode (line 6703) | _registerNode(node) {
    method _unregisterNode (line 6720) | _unregisterNode(node) {
    method _callHook (line 6739) | _callHook(hook, data = {}) {
    method _callMethod (line 6761) | _callMethod(name, ...args) {
    method _callEvent (line 6780) | _callEvent(type, extra) {
    method _getNodeByRowIdx (line 6791) | _getNodeByRowIdx(idx) {
    method getTopmostVpNode (line 6806) | getTopmostVpNode(complete = true) {
    method getLowestVpNode (line 6822) | getLowestVpNode(complete = true) {
    method _getPrevNodeInView (line 6839) | _getPrevNodeInView(node, ofs = 1) {
    method _getNextNodeInView (line 6849) | _getNextNodeInView(node, options) {
    method addChildren (line 6868) | addChildren(nodeData, options) {
    method applyCommand (line 6887) | applyCommand(cmd, nodeOrOpts, options) {
    method clear (line 6993) | clear() {
    method destroy (line 7024) | destroy() {
    method getOption (line 7041) | getOption(name, defaultValue) {
    method setOption (line 7062) | setOption(name, value) {
    method hasFocus (line 7084) | hasFocus() {
    method hasHeader (line 7092) | hasHeader() {
    method runWithDeferredUpdate (line 7104) | runWithDeferredUpdate(func) {
    method runWithDeferredUpdateAsync (line 7123) | async runWithDeferredUpdateAsync(func) {
    method expandAll (line 7133) | async expandAll(flag = true, options) {
    method selectAll (line 7137) | selectAll(flag = true) {
    method toggleSelect (line 7141) | toggleSelect() {
    method getSelectedNodes (line 7148) | getSelectedNodes(stopOnParents = false) {
    method getRefKeys (line 7159) | getRefKeys(selected = false) {
    method _selectRange (line 7165) | _selectRange(eventInfo) {
    method count (line 7201) | count(visible = false) {
    method countUnique (line 7206) | countUnique() {
    method _check (line 7210) | _check() {
    method findAll (line 7227) | findAll(match) {
    method findByRefKey (line 7239) | findByRefKey(refKey) {
    method findFirst (line 7250) | findFirst(match) {
    method findKey (line 7259) | findKey(key) {
    method findNextNode (line 7267) | findNextNode(match, startNode, reverse = false) {
    method findRelatedNode (line 7308) | findRelatedNode(node, where, includeHidden = false) {
    method format_iter (line 7417) | *format_iter(name_cb, connectors) {
    method format (line 7440) | format(name_cb, connectors) {
    method parent (line 7446) | get parent() {
    method children (line 7452) | get children() {
    method getActiveColElem (line 7458) | getActiveColElem() {
    method getActiveNode (line 7473) | getActiveNode() {
    method getFirstChild (line 7479) | getFirstChild() {
    method getLastChild (line 7485) | getLastChild() {
    method getFocusNode (line 7496) | getFocusNode() {
    method getEventInfo (line 7505) | static getEventInfo(event) {
    method toString (line 7568) | toString() {
    method isEditing (line 7575) | isEditing() {
    method isEditingTitle (line 7583) | isEditingTitle() {
    method isLoading (line 7589) | isLoading() {
    method log (line 7603) | log(...args) {
    method logDebug (line 7612) | logDebug(...args) {
    method logError (line 7618) | logError(...args) {
    method logInfo (line 7624) | logInfo(...args) {
    method logTime (line 7630) | logTime(label) {
    method logTimeEnd (line 7637) | logTimeEnd(label) {
    method logWarn (line 7643) | logWarn(...args) {
    method logDeprecate (line 7649) | logDeprecate(method, options) {
    method resetColumns (line 7662) | resetColumns() {
    method scrollTo (line 7678) | scrollTo(nodeOrOpts) {
    method scrollToHorz (line 7730) | scrollToHorz() {
    method setColumn (line 7763) | setColumn(colIdx, options) {
    method _setActiveNode (line 7807) | _setActiveNode(node) {
    method setActiveNode (line 7811) | setActiveNode(key, flag = true, options) {
    method setFocus (line 7816) | setFocus(flag = true) {
    method _setFocusNode (line 7825) | _setFocusNode(node) {
    method getState (line 7829) | getState(options = {}) {
    method setState (line 7859) | async setState(state, options = {}) {
    method update (line 7891) | update(change, node, options) {
    method setEnabled (line 7957) | setEnabled(flag = true) {
    method isEnabled (line 7964) | isEnabled() {
    method isGrid (line 7968) | isGrid() {
    method isCellNav (line 7972) | isCellNav() {
    method isRowNav (line 7976) | isRowNav() {
    method setCellNav (line 7980) | setCellNav(flag = true) {
    method setNavigationOption (line 7995) | setNavigationOption(mode, reset = false) {
    method setStatus (line 8023) | setStatus(status, options) {
    method setTypes (line 8027) | setTypes(types, replace = true) {
    method sortChildren (line 8049) | sortChildren(cmp = nodeTitleSorter, deep = false) {
    method sortByProperty (line 8063) | sortByProperty(options) {
    method sort (line 8071) | sort(options) {
    method toDictArray (line 8082) | toDictArray(callback) {
    method _updateColumnWidths (line 8092) | _updateColumnWidths() {
    method _renderHeaderMarkup (line 8195) | _renderHeaderMarkup() {
    method updatePendingModifications (line 8284) | updatePendingModifications() {
    method _createNodeIcon (line 8290) | _createNodeIcon(node, showLoading, showBadge) {
    method _updateTopBreadcrumb (line 8362) | _updateTopBreadcrumb() {
    method _updateViewportImmediately (line 8394) | _updateViewportImmediately() {
    method _updateRows (line 8486) | _updateRows(options) {
    method visit (line 8574) | visit(callback) {
    method visitRows (line 8588) | visitRows(callback, options) {
    method _visitRowsUp (line 8663) | _visitRowsUp(callback, options) {
    method load (line 8713) | async load(source) {
    method reload (line 8725) | async reload(options = {}) {
    method _loadLazyNodes (line 8743) | async _loadLazyNodes(keyList, options = {}) {
    method enableUpdate (line 8790) | enableUpdate(flag) {
    method filterNodes (line 8833) | filterNodes(filter, options) {
    method countMatches (line 8841) | countMatches() {
    method filterBranches (line 8848) | filterBranches(filter, options) {
    method clearFilter (line 8854) | clearFilter() {
    method isFilterActive (line 8860) | isFilterActive() {
    method updateFilter (line 8866) | updateFilter() {
  method [Symbol.iterator] (line 6656) | *[Symbol.iterator]() {

FILE: dist/wunderbaum.umd.js
  function isObject (line 55) | function isObject(value) {
  function debounce (line 114) | function debounce(func, wait = 0, options = {}) {
  function throttle (line 282) | function throttle(func, wait = 0, options = {}) {
  class ValidationError (line 332) | class ValidationError extends Error {
    method constructor (line 333) | constructor(message) {
  method constructor (line 345) | constructor() {
  method resolve (line 350) | resolve(value) {
  method reject (line 359) | reject(error) {
  method then (line 368) | then(cb) {
  method catch (line 376) | catch(cb) {
  method promise (line 384) | promise() {
  function assert (line 392) | function assert(cond, msg) {
  function _getUserInfo (line 398) | function _getUserInfo() {
  function documentReady (line 407) | function documentReady(callback) {
  function documentReadyPromise (line 416) | function documentReadyPromise() {
  function each (line 429) | function each(obj, callback) {
  function error (line 453) | function error(msg) {
  function escapeHtml (line 457) | function escapeHtml(s) {
  function escapeRegex (line 466) | function escapeRegex(s) {
  function escapeTooltip (line 470) | function escapeTooltip(s) {
  function extractHtmlText (line 476) | function extractHtmlText(s) {
  function getValueFromElem (line 508) | function getValueFromElem(elem, coerce = false) {
  function setValueToElem (line 590) | function setValueToElem(elem, value) {
  function setElemDisplay (line 657) | function setElemDisplay(elem, flag) {
  function elemFromHtml (line 669) | function elemFromHtml(html) {
  function elemFromSelector (line 676) | function elemFromSelector(obj) {
  function eventToString (line 709) | function eventToString(event) {
  function extend (line 748) | function extend(...args) {
  function isArray (line 763) | function isArray(obj) {
  function isEmptyObject (line 767) | function isEmptyObject(obj) {
  function isFunction (line 771) | function isFunction(obj) {
  function isPlainObject (line 775) | function isPlainObject(obj) {
  function noop (line 779) | function noop(...args) { }
  function onEvent (line 780) | function onEvent(rootTarget, eventNames, selectorOrHandler, handlerOrNon...
  function overrideMethod (line 822) | function overrideMethod(instance, methodName, handler, ctx) {
  function setTimeoutPromise (line 848) | function setTimeoutPromise(callback, ms) {
  function sleep (line 870) | async function sleep(ms) {
  function toggleCheckbox (line 883) | function toggleCheckbox(element, value, tristate) {
  function getOption (line 911) | function getOption(opts, name, defaultValue = undefined) {
  function rotate (line 923) | function rotate(value, values) {
  function toSet (line 928) | function toSet(val) {
  function toPixel (line 955) | function toPixel(...defaults) {
  function unsafeCast (line 968) | function unsafeCast(value) {
  function toBool (line 978) | function toBool(...boolDefaults) {
  function intToBool (line 992) | function intToBool(val) {
  function type (line 1011) | function type(obj) {
  function adaptiveThrottle (line 1029) | function adaptiveThrottle(callback, options) {
  function murmurHash3 (line 1106) | function murmurHash3(key, asString = true, seed = 0) {
  class WunderbaumExtension (line 1274) | class WunderbaumExtension {
    method constructor (line 1275) | constructor(tree, id, defaults) {
    method init (line 1292) | init() {
    method getPluginOption (line 1309) | getPluginOption(name, defaultValue) {
    method setPluginOption (line 1313) | setPluginOption(name, value) {
    method setEnabled (line 1316) | setEnabled(flag = true) {
    method onKeyEvent (line 1320) | onKeyEvent(data) {
    method onRender (line 1323) | onRender(data) {
  class FilterExtension (line 1337) | class FilterExtension extends WunderbaumExtension {
    method constructor (line 1338) | constructor(tree) {
    method init (line 1358) | init() {
    method setPluginOption (line 1365) | setPluginOption(name, value) {
    method _updatedConnectedControls (line 1375) | _updatedConnectedControls() {
    method _connectControls (line 1416) | _connectControls() {
    method _applyFilterNoUpdate (line 1455) | _applyFilterNoUpdate(filter, _opts) {
    method _applyFilterImpl (line 1460) | _applyFilterImpl(filter, _opts) {
    method filterNodes (line 1610) | filterNodes(filter, options) {
    method filterBranches (line 1617) | filterBranches(filter, options) {
    method countMatches (line 1629) | countMatches() {
    method updateFilter (line 1641) | updateFilter() {
    method clearFilter (line 1658) | clearFilter() {
  function _markFuzzyMatchedChars (line 1693) | function _markFuzzyMatchedChars(text, matches, escapeTitles = true) {
  class KeynavExtension (line 1729) | class KeynavExtension extends WunderbaumExtension {
    method constructor (line 1730) | constructor(tree) {
    method _getEmbeddedInputElem (line 1733) | _getEmbeddedInputElem(elem) {
    method _isCurInputFocused (line 1756) | _isCurInputFocused() {
    method onKeyEvent (line 1762) | onKeyEvent(data) {
  class LoggerExtension (line 2092) | class LoggerExtension extends WunderbaumExtension {
    method constructor (line 2093) | constructor(tree) {
    method init (line 2103) | init() {
    method onKeyEvent (line 2122) | onKeyEvent(data) {
  class DndExtension (line 2135) | class DndExtension extends WunderbaumExtension {
    method constructor (line 2136) | constructor(tree) {
    method init (line 2181) | init() {
    method _leaveNode (line 2201) | _leaveNode() {
    method unifyDragover (line 2211) | unifyDragover(res) {
    method _calcDropRegion (line 2230) | _calcDropRegion(e, allowed) {
    method _guessDropEffect (line 2257) | _guessDropEffect(e) {
    method _isVoidDrop (line 2296) | _isVoidDrop(targetNode, srcNode, dropRegion) {
    method _applyScrollDir (line 2313) | _applyScrollDir() {
    method _autoScroll (line 2327) | _autoScroll(viewportY) {
    method isDragging (line 2360) | isDragging() {
    method onDragEvent (line 2366) | onDragEvent(e) {
    method onDropEvent (line 2437) | onDropEvent(e) {
  class DragObserver (line 2588) | class DragObserver {
    method constructor (line 2589) | constructor(opts) {
    method disconnect (line 2615) | disconnect() {
    method getDragElem (line 2620) | getDragElem() {
    method isDragging (line 2623) | isDragging() {
    method stopDrag (line 2626) | stopDrag(cb_event) {
    method handleEvent (line 2641) | handleEvent(e) {
  function makeNodeTitleMatcher (line 2870) | function makeNodeTitleMatcher(match) {
  function makeNodeTitleStartMatcher (line 2885) | function makeNodeTitleStartMatcher(s) {
  function nodeTitleSorter (line 2895) | function nodeTitleSorter(a, b) {
  function unflattenSource (line 2920) | function unflattenSource(source) {
  function decompressSourceData (line 3018) | function decompressSourceData(source) {
  class GridExtension (line 3098) | class GridExtension extends WunderbaumExtension {
    method constructor (line 3099) | constructor(tree) {
    method init (line 3152) | init() {
    method handleDrag (line 3158) | handleDrag(e) {
  class Deferred (line 3204) | class Deferred {
    method constructor (line 3205) | constructor() {
    method resolve (line 3212) | resolve(value) {
    method reject (line 3216) | reject(reason) {
    method promise (line 3220) | promise() {
    method then (line 3224) | then(cb) {
    method catch (line 3228) | catch(cb) {
    method finally (line 3232) | finally(cb) {
  class WunderbaumNode (line 3289) | class WunderbaumNode {
    method constructor (line 3290) | constructor(tree, parent, data) {
    method toString (line 3363) | toString() {
    method _callEvent (line 3416) | _callEvent(type, extra) {
    method addChildren (line 3430) | addChildren(nodeData, options) {
    method addNode (line 3502) | addNode(nodeData, mode = "appendChild") {
    method applyCommand (line 3528) | applyCommand(cmd, options) {
    method collapseSiblings (line 3535) | collapseSiblings(options) {
    method setClass (line 3550) | setClass(className, flag = true) {
    method startEditTitle (line 3577) | startEditTitle() {
    method expandAll (line 3588) | async expandAll(flag = true, options) {
    method findAll (line 3689) | findAll(match) {
    method findDirectChild (line 3700) | findDirectChild(ptr) {
    method findFirst (line 3726) | findFirst(match) {
    method findRelatedNode (line 3741) | findRelatedNode(where, includeHidden = false) {
    method format_iter (line 3747) | *format_iter(name_cb, connectors) {
    method format (line 3787) | format(name_cb, connectors) {
    method getColElem (line 3797) | getColElem(colIdx) {
    method getCloneList (line 3811) | getCloneList(includeSelf = false) {
    method getFirstChild (line 3824) | getFirstChild() {
    method getLastChild (line 3830) | getLastChild() {
    method getLevel (line 3834) | getLevel() {
    method getNextSibling (line 3843) | getNextSibling() {
    method getParent (line 3849) | getParent() {
    method getParentList (line 3857) | getParentList(includeRoot = false, includeSelf = false) {
    method getPath (line 3873) | getPath(includeSelf = true, part = "title", separator = "/") {
    method getPrevSibling (line 3889) | getPrevSibling() {
    method hasChildren (line 3897) | hasChildren() {
    method hasClass (line 3914) | hasClass(className) {
    method hasFocus (line 3918) | hasFocus() {
    method isActive (line 3922) | isActive() {
    method isAncestorOf (line 3928) | isAncestorOf(other) {
    method isChildOf (line 3934) | isChildOf(other) {
    method isClone (line 3939) | isClone() {
    method isColspan (line 3945) | isColspan() {
    method isDescendantOf (line 3951) | isDescendantOf(other) {
    method isExpandable (line 3971) | isExpandable(andCollapsed = false) {
    method isEditingTitle (line 3988) | isEditingTitle() {
    method isExpanded (line 3992) | isExpanded() {
    method isFirstSibling (line 3996) | isFirstSibling() {
    method isLastSibling (line 4001) | isLastSibling() {
    method isLazy (line 4006) | isLazy() {
    method isLoaded (line 4010) | isLoaded() {
    method isLoading (line 4014) | isLoading() {
    method isPagingNode (line 4018) | isPagingNode() {
    method isParentOf (line 4024) | isParentOf(other) {
    method isPartload (line 4028) | isPartload() {
    method isPartsel (line 4032) | isPartsel() {
    method isRadio (line 4036) | isRadio() {
    method isRendered (line 4040) | isRendered() {
    method isRootNode (line 4046) | isRootNode() {
    method isSelected (line 4052) | isSelected() {
    method isStatusNode (line 4058) | isStatusNode() {
    method isTopLevel (line 4062) | isTopLevel() {
    method isUnloaded (line 4068) | isUnloaded() {
    method isVisible (line 4075) | isVisible() {
    method _loadSourceObject (line 4099) | _loadSourceObject(source, level) {
    method _fetchWithOptions (line 4143) | async _fetchWithOptions(source) {
    method load (line 4184) | async load(source) {
    method loadLazy (line 4259) | async loadLazy(forceReload = false) {
    method log (line 4303) | log(...args) {
    method logDebug (line 4312) | logDebug(...args) {
    method logError (line 4318) | logError(...args) {
    method logInfo (line 4324) | logInfo(...args) {
    method logWarn (line 4330) | logWarn(...args) {
    method makeVisible (line 4340) | async makeVisible(options) {
    method moveTo (line 4373) | moveTo(targetNode, mode = "appendChild", map) {
    method navigate (line 4484) | async navigate(where, options) {
    method remove (line 4508) | remove() {
    method removeChildren (line 4520) | removeChildren() {
    method removeMarkup (line 4553) | removeMarkup() {
    method _getRenderInfo (line 4560) | _getRenderInfo() {
    method _createIcon (line 4586) | _createIcon(parentElem, replaceChild, showLoading) {
    method _render_markup (line 4602) | _render_markup(opts) {
    method _render_data (line 4716) | _render_data(opts) {
    method _render_status (line 4786) | _render_status(opts) {
    method _render (line 4918) | _render(options) {
    method resetLazy (line 4943) | resetLazy() {
    method toDict (line 4961) | toDict(recursive = false, callback) {
    method getOption (line 5023) | getOption(name, defaultValue) {
    method scrollIntoView (line 5059) | async scrollIntoView(options) {
    method setActive (line 5067) | async setActive(flag = true, options) {
    method setExpanded (line 5130) | async setExpanded(flag = true, options) {
    method setFocus (line 5176) | setFocus(flag = true) {
    method setIcon (line 5184) | setIcon(icon) {
    method setKey (line 5189) | setKey(key, refKey) {
    method update (line 5229) | update(change = ChangeType.data) {
    method getSelectedNodes (line 5237) | getSelectedNodes(stopOnParents = false) {
    method getRefKeys (line 5257) | getRefKeys(selected = false) {
    method toggleSelected (line 5267) | toggleSelected(options) {
    method _anySelectable (line 5278) | _anySelectable() {
    method _changeSelectStatusProps (line 5292) | _changeSelectStatusProps(state) {
    method fixSelection3AfterClick (line 5323) | fixSelection3AfterClick(opts) {
    method fixSelection3FromEndNodes (line 5342) | fixSelection3FromEndNodes(opts) {
    method setSelected (line 5406) | setSelected(flag = true, options) {
    method setStatus (line 5460) | setStatus(status, options) {
    method setTitle (line 5541) | setTitle(title) {
    method setTooltip (line 5547) | setTooltip(tooltip) {
    method sortChildren (line 5558) | sortChildren(cmp = nodeTitleSorter, deep = false) {
    method resetNativeChildOrder (line 5568) | resetNativeChildOrder(options) {
    method sortByProperty (line 5584) | sortByProperty(options) {
    method sort (line 5592) | sort(options) {
    method resort (line 5709) | resort(options = {}) {
    method triggerModifyChild (line 5723) | triggerModifyChild(operation, child, extra) {
    method triggerModify (line 5738) | triggerModify(operation, extra) {
    method visit (line 5757) | visit(callback, includeSelf = false) {
    method visitParents (line 5782) | visitParents(callback, includeSelf = false) {
    method visitSiblings (line 5804) | visitSiblings(callback, includeSelf = false) {
    method isMatched (line 5819) | isMatched() {
  method [Symbol.iterator] (line 3377) | *[Symbol.iterator]() {
  class EditExtension (line 5831) | class EditExtension extends WunderbaumExtension {
    method constructor (line 5832) | constructor(tree) {
    method _applyChange (line 5857) | async _applyChange(eventName, node, colElem, inputElem, extra) {
    method _onChange (line 5908) | _onChange(e) {
    method init (line 5925) | init() {
    method _preprocessKeyEvent (line 5937) | _preprocessKeyEvent(data) {
    method isEditingTitle (line 5981) | isEditingTitle(node) {
    method startEditTitle (line 5985) | startEditTitle(node) {
    method stopEditTitle (line 6043) | stopEditTitle(apply) {
    method _stopEditTitle (line 6051) | _stopEditTitle(apply, options) {
    method createNode (line 6120) | createNode(mode = "after", node, init) {
  class WbSystemRoot (line 6167) | class WbSystemRoot extends WunderbaumNode {
    method constructor (line 6168) | constructor(tree) {
    method toString (line 6174) | toString() {
  class Wunderbaum (line 6183) | class Wunderbaum {
    method activeNode (line 6187) | get activeNode() {
    method focusNode (line 6195) | get focusNode() {
    method constructor (line 6200) | constructor(options) {
    method _registerEventHandlers (line 6463) | _registerEventHandlers() {
    method getTree (line 6578) | static getTree(el) {
    method iconMap (line 6621) | get iconMap() {
    method getNode (line 6631) | static getNode(el) {
    method _registerExtension (line 6666) | _registerExtension(extension) {
    method _initExtensions (line 6672) | _initExtensions() {
    method _calculateKey (line 6683) | _calculateKey(data, parent) {
    method _registerNode (line 6709) | _registerNode(node) {
    method _unregisterNode (line 6726) | _unregisterNode(node) {
    method _callHook (line 6745) | _callHook(hook, data = {}) {
    method _callMethod (line 6767) | _callMethod(name, ...args) {
    method _callEvent (line 6786) | _callEvent(type, extra) {
    method _getNodeByRowIdx (line 6797) | _getNodeByRowIdx(idx) {
    method getTopmostVpNode (line 6812) | getTopmostVpNode(complete = true) {
    method getLowestVpNode (line 6828) | getLowestVpNode(complete = true) {
    method _getPrevNodeInView (line 6845) | _getPrevNodeInView(node, ofs = 1) {
    method _getNextNodeInView (line 6855) | _getNextNodeInView(node, options) {
    method addChildren (line 6874) | addChildren(nodeData, options) {
    method applyCommand (line 6893) | applyCommand(cmd, nodeOrOpts, options) {
    method clear (line 6999) | clear() {
    method destroy (line 7030) | destroy() {
    method getOption (line 7047) | getOption(name, defaultValue) {
    method setOption (line 7068) | setOption(name, value) {
    method hasFocus (line 7090) | hasFocus() {
    method hasHeader (line 7098) | hasHeader() {
    method runWithDeferredUpdate (line 7110) | runWithDeferredUpdate(func) {
    method runWithDeferredUpdateAsync (line 7129) | async runWithDeferredUpdateAsync(func) {
    method expandAll (line 7139) | async expandAll(flag = true, options) {
    method selectAll (line 7143) | selectAll(flag = true) {
    method toggleSelect (line 7147) | toggleSelect() {
    method getSelectedNodes (line 7154) | getSelectedNodes(stopOnParents = false) {
    method getRefKeys (line 7165) | getRefKeys(selected = false) {
    method _selectRange (line 7171) | _selectRange(eventInfo) {
    method count (line 7207) | count(visible = false) {
    method countUnique (line 7212) | countUnique() {
    method _check (line 7216) | _check() {
    method findAll (line 7233) | findAll(match) {
    method findByRefKey (line 7245) | findByRefKey(refKey) {
    method findFirst (line 7256) | findFirst(match) {
    method findKey (line 7265) | findKey(key) {
    method findNextNode (line 7273) | findNextNode(match, startNode, reverse = false) {
    method findRelatedNode (line 7314) | findRelatedNode(node, where, includeHidden = false) {
    method format_iter (line 7423) | *format_iter(name_cb, connectors) {
    method format (line 7446) | format(name_cb, connectors) {
    method parent (line 7452) | get parent() {
    method children (line 7458) | get children() {
    method getActiveColElem (line 7464) | getActiveColElem() {
    method getActiveNode (line 7479) | getActiveNode() {
    method getFirstChild (line 7485) | getFirstChild() {
    method getLastChild (line 7491) | getLastChild() {
    method getFocusNode (line 7502) | getFocusNode() {
    method getEventInfo (line 7511) | static getEventInfo(event) {
    method toString (line 7574) | toString() {
    method isEditing (line 7581) | isEditing() {
    method isEditingTitle (line 7589) | isEditingTitle() {
    method isLoading (line 7595) | isLoading() {
    method log (line 7609) | log(...args) {
    method logDebug (line 7618) | logDebug(...args) {
    method logError (line 7624) | logError(...args) {
    method logInfo (line 7630) | logInfo(...args) {
    method logTime (line 7636) | logTime(label) {
    method logTimeEnd (line 7643) | logTimeEnd(label) {
    method logWarn (line 7649) | logWarn(...args) {
    method logDeprecate (line 7655) | logDeprecate(method, options) {
    method resetColumns (line 7668) | resetColumns() {
    method scrollTo (line 7684) | scrollTo(nodeOrOpts) {
    method scrollToHorz (line 7736) | scrollToHorz() {
    method setColumn (line 7769) | setColumn(colIdx, options) {
    method _setActiveNode (line 7813) | _setActiveNode(node) {
    method setActiveNode (line 7817) | setActiveNode(key, flag = true, options) {
    method setFocus (line 7822) | setFocus(flag = true) {
    method _setFocusNode (line 7831) | _setFocusNode(node) {
    method getState (line 7835) | getState(options = {}) {
    method setState (line 7865) | async setState(state, options = {}) {
    method update (line 7897) | update(change, node, options) {
    method setEnabled (line 7963) | setEnabled(flag = true) {
    method isEnabled (line 7970) | isEnabled() {
    method isGrid (line 7974) | isGrid() {
    method isCellNav (line 7978) | isCellNav() {
    method isRowNav (line 7982) | isRowNav() {
    method setCellNav (line 7986) | setCellNav(flag = true) {
    method setNavigationOption (line 8001) | setNavigationOption(mode, reset = false) {
    method setStatus (line 8029) | setStatus(status, options) {
    method setTypes (line 8033) | setTypes(types, replace = true) {
    method sortChildren (line 8055) | sortChildren(cmp = nodeTitleSorter, deep = false) {
    method sortByProperty (line 8069) | sortByProperty(options) {
    method sort (line 8077) | sort(options) {
    method toDictArray (line 8088) | toDictArray(callback) {
    method _updateColumnWidths (line 8098) | _updateColumnWidths() {
    method _renderHeaderMarkup (line 8201) | _renderHeaderMarkup() {
    method updatePendingModifications (line 8290) | updatePendingModifications() {
    method _createNodeIcon (line 8296) | _createNodeIcon(node, showLoading, showBadge) {
    method _updateTopBreadcrumb (line 8368) | _updateTopBreadcrumb() {
    method _updateViewportImmediately (line 8400) | _updateViewportImmediately() {
    method _updateRows (line 8492) | _updateRows(options) {
    method visit (line 8580) | visit(callback) {
    method visitRows (line 8594) | visitRows(callback, options) {
    method _visitRowsUp (line 8669) | _visitRowsUp(callback, options) {
    method load (line 8719) | async load(source) {
    method reload (line 8731) | async reload(options = {}) {
    method _loadLazyNodes (line 8749) | async _loadLazyNodes(keyList, options = {}) {
    method enableUpdate (line 8796) | enableUpdate(flag) {
    method filterNodes (line 8839) | filterNodes(filter, options) {
    method countMatches (line 8847) | countMatches() {
    method filterBranches (line 8854) | filterBranches(filter, options) {
    method clearFilter (line 8860) | clearFilter() {
    method isFilterActive (line 8866) | isFilterActive() {
    method updateFilter (line 8872) | updateFilter() {
  method [Symbol.iterator] (line 6662) | *[Symbol.iterator]() {

FILE: docs/api/assets/icons.js
  function addIcons (line 3) | function addIcons() {
  function updateUseElements (line 11) | function updateUseElements() {

FILE: docs/api/assets/main.js
  function G (line 4) | function G(t,e){ce.push({selector:e,constructor:t})}
  method constructor (line 4) | constructor(){this.createComponents(document.body),this.ensureFocusedEle...
  method createComponents (line 4) | createComponents(e){ce.forEach(n=>{e.querySelectorAll(n.selector).forEac...
  method filterChanged (line 4) | filterChanged(){this.ensureFocusedElementVisible()}
  method showPage (line 4) | showPage(){document.body.style.display&&(document.body.style.removePrope...
  method scrollToHash (line 4) | scrollToHash(){if(location.hash){let e=document.getElementById(location....
  method ensureActivePageVisible (line 4) | ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation ...
  method updateIndexVisibility (line 4) | updateIndexVisibility(){let e=document.querySelector(".tsd-index-content...
  method ensureFocusedElementVisible (line 4) | ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysV...
  method listenForCodeCopies (line 4) | listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(...
  function ze (line 4) | function ze(t){let e=t.getBoundingClientRect(),n=Math.max(document.docum...
  function A (line 4) | async function A(t){let e=Uint8Array.from(atob(t),s=>s.charCodeAt(0)),r=...
  function fe (line 4) | async function fe(t,e){if(!window.searchData)return;let n=await A(window...
  function ve (line 4) | function ve(){let t=document.getElementById("tsd-search");if(!t)return;l...
  function We (line 4) | function We(t,e,n,r){n.addEventListener("input",ue(()=>{Ue(t,e,n,r)},200...
  function re (line 4) | function re(t){t.classList.remove("has-focus")}
  function Ue (line 4) | function Ue(t,e,n,r){if(!r.index||!r.data)return;e.textContent="";let i=...
  function me (line 5) | function me(t,e,n){let r=t.querySelector(".current");if(!r)r=t.querySele...
  function Je (line 5) | function Je(t,e){let n=t.querySelector(".current");if(n||(n=t.querySelec...
  function ye (line 5) | function ye(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLo...
  function ne (line 5) | function ne(t){return t.replace(/[&<>"'"]/g,e=>Ge[e])}
  method constructor (line 5) | constructor(e){this.el=e.el,this.app=e.app}
  method constructor (line 5) | constructor(e){super(e),this.className=this.el.dataset.toggle||"",this.e...
  method setActive (line 5) | setActive(e){if(this.active==e)return;this.active=e,document.documentEle...
  method onPointerUp (line 5) | onPointerUp(e){D||(this.setActive(!0),e.preventDefault())}
  method onDocumentPointerDown (line 5) | onDocumentPointerDown(e){if(this.active){if(e.target.closest(".col-sideb...
  method onDocumentPointerUp (line 5) | onDocumentPointerUp(e){if(!D&&this.active&&e.target.closest(".col-sideba...
  method getItem (line 5) | getItem(){return null}
  method setItem (line 5) | setItem(){}
  method constructor (line 5) | constructor(e){super(e),this.key=`filter-${this.el.name}`,this.value=thi...
  method fromLocalStorage (line 6) | fromLocalStorage(){let e=C.getItem(this.key);return e?e==="true":this.el...
  method setLocalStorage (line 6) | setLocalStorage(e){C.setItem(this.key,e.toString()),this.value=e,this.ha...
  method handleValueChange (line 6) | handleValueChange(){this.el.checked=this.value,document.documentElement....
  method constructor (line 6) | constructor(e,n){this.key=e,this.open=n}
  method add (line 6) | add(e){this.accordions.push(e),e.open=this.open,e.addEventListener("togg...
  method toggle (line 6) | toggle(e){for(let n of this.accordions)n.open=e;C.setItem(this.key,e.toS...
  method constructor (line 6) | constructor(e){super(e);let n=this.el.querySelector("summary"),r=n.query...
  function Se (line 6) | function Se(t){let e=C.getItem("tsd-theme")||"os";t.value=e,we(e),t.addE...
  function we (line 6) | function we(t){document.documentElement.dataset.theme=t}
  function Ce (line 6) | function Ce(){let t=document.getElementById("tsd-nav-script");t&&(t.addE...
  function Te (line 6) | async function Te(){let t=document.getElementById("tsd-nav-container");i...
  function Ie (line 6) | function Ie(t,e,n){let r=e.appendChild(document.createElement("li"));if(...
  function ke (line 6) | function ke(t,e,n){if(t.path){let r=e.appendChild(document.createElement...
  function Pe (line 6) | function Pe(){document.querySelector(".tsd-full-hierarchy")?Ye():documen...
  function Ye (line 6) | function Ye(){document.addEventListener("click",r=>{let i=r.target;for(;...
  function Ze (line 6) | function Ze(){let t=document.getElementById("tsd-hierarchy-script");t&&(...
  function Qe (line 6) | async function Qe(){let t=document.querySelector(".tsd-panel.tsd-hierarc...
  function Ke (line 6) | function Ke(t,e,n){let r=e.roots.filter(i=>et(e,i,n));for(let i of r)t.a...
  function _e (line 6) | function _e(t,e,n,r=new Set){if(r.has(e))return;r.add(e);let i=t.reflect...
  function et (line 6) | function et(t,e,n){if(e===n)return!0;let r=new Set,i=[t.reflections[e]];...
  function tt (line 6) | function tt(){let t=document.createElementNS("http://www.w3.org/2000/svg...

FILE: docs/demo/navigation.js
  function addCssImport (line 165) | function addCssImport(tag, url) {
  function toggleButtonCreate (line 180) | function toggleButtonCreate(selector, onChange) {
  function loadScript (line 195) | function loadScript(
  function reconfigureTree (line 241) | function reconfigureTree(tag = null) {
  function showStatus (line 322) | function showStatus(tree) {

FILE: docs/unittest/test-core-fixture1.js
  constant FIXTURE_1 (line 10) | const FIXTURE_1 = [

FILE: docs/unittest/test-core.js
  constant FIXTURE_1 (line 12) | const FIXTURE_1 = [

FILE: src/common.ts
  constant DEFAULT_DEBUGLEVEL (line 18) | const DEFAULT_DEBUGLEVEL = 4;
  constant DEFAULT_ROW_HEIGHT (line 22) | const DEFAULT_ROW_HEIGHT = 22;
  constant ICON_WIDTH (line 26) | const ICON_WIDTH = 20;
  constant TITLE_SPAN_PAD_Y (line 31) | const TITLE_SPAN_PAD_Y = 7;
  constant RENDER_MAX_PREFETCH (line 33) | const RENDER_MAX_PREFETCH = 5;
  constant RENDER_MIN_PREFETCH (line 35) | const RENDER_MIN_PREFETCH = 5;
  constant DEFAULT_MIN_COL_WIDTH (line 37) | const DEFAULT_MIN_COL_WIDTH = 4;
  constant NODE_TYPE_FOLDER (line 42) | const NODE_TYPE_FOLDER = "folder";
  constant TEST_FILE_PATH (line 47) | const TEST_FILE_PATH = /^(?!.*<).*[/.]/;
  constant TEST_HTML (line 49) | const TEST_HTML = /</;
  type IconLibrary (line 54) | type IconLibrary = "bootstrap" | "fontawesome6";
  constant KEY_NODATA (line 123) | const KEY_NODATA = "__not_found__";
  constant INPUT_KEYS (line 128) | const INPUT_KEYS: { [key: string]: Array<string> } = {
  constant RESERVED_TREE_SOURCE_KEYS (line 139) | const RESERVED_TREE_SOURCE_KEYS: Set<string> = new Set([
  constant KEY_TO_NAVIGATION_MAP (line 160) | const KEY_TO_NAVIGATION_MAP: { [key: string]: NavigationType } = {
  constant KEY_TO_COMMAND_MAP (line 177) | const KEY_TO_COMMAND_MAP: { [key: string]: ApplyCommandType } = {
  function makeNodeTitleMatcher (line 206) | function makeNodeTitleMatcher(match: string | RegExp): MatcherCallback {
  function makeNodeTitleStartMatcher (line 226) | function makeNodeTitleStartMatcher(s: string): MatcherCallback {
  function nodeTitleSorter (line 237) | function nodeTitleSorter(a: WunderbaumNode, b: WunderbaumNode): number {
  function unflattenSource (line 265) | function unflattenSource(source: SourceObjectType): void {
  function decompressSourceData (line 372) | function decompressSourceData(source: SourceObjectType): void {

FILE: src/debounce.ts
  type Procedure (line 13) | type Procedure = (...args: any[]) => any;
  type DebounceOptions (line 15) | type DebounceOptions = {
  type ThrottleOptions (line 24) | type ThrottleOptions = {
  type DebouncedFunction (line 31) | interface DebouncedFunction<F extends Procedure> {
  function isObject (line 84) | function isObject(value: any) {
  function debounce (line 144) | function debounce<F extends Procedure>(
  function throttle (line 346) | function throttle<F extends Procedure>(

FILE: src/deferred.ts
  type PromiseCallbackType (line 7) | type PromiseCallbackType = (val: any) => void;
  type finallyCallbackType (line 8) | type finallyCallbackType = () => void;
  class Deferred (line 25) | class Deferred<T> {
    method constructor (line 30) | constructor() {
    method resolve (line 37) | resolve(value?: any) {
    method reject (line 41) | reject(reason?: any) {
    method promise (line 45) | promise() {
    method then (line 49) | then(cb: PromiseCallbackType) {
    method catch (line 53) | catch(cb: PromiseCallbackType) {
    method finally (line 57) | finally(cb: finallyCallbackType) {

FILE: src/drag_observer.ts
  type DragCallbackArgType (line 7) | type DragCallbackArgType = {
  type DragCallbackType (line 28) | type DragCallbackType = (e: DragCallbackArgType) => boolean | void;
  type DragObserverOptionsType (line 29) | type DragObserverOptionsType = {
  class DragObserver (line 45) | class DragObserver {
    method constructor (line 72) | constructor(opts: DragObserverOptionsType) {
    method disconnect (line 84) | disconnect() {
    method getDragElem (line 90) | public getDragElem(): HTMLElement | null {
    method isDragging (line 94) | public isDragging(): boolean {
    method stopDrag (line 98) | public stopDrag(cb_event?: DragCallbackArgType): void {
    method handleEvent (line 113) | protected handleEvent(e: MouseEvent): boolean | void {

FILE: src/types.ts
  type TristateType (line 12) | type TristateType = boolean | undefined;
  type CheckboxOption (line 14) | type CheckboxOption = boolean | "radio";
  type SortOrderType (line 16) | type SortOrderType = "asc" | "desc" | undefined;
  type IconOption (line 24) | type IconOption = boolean | string;
  type TooltipOption (line 26) | type TooltipOption = boolean | string;
  type SourceAjaxType (line 31) | interface SourceAjaxType {
  type SourceListType (line 37) | type SourceListType = Array<WbNodeData>;
  type SourceObjectType (line 38) | interface SourceObjectType {
  type SourceType (line 51) | type SourceType =
  type MatcherCallback (line 58) | type MatcherCallback = (node: WunderbaumNode) => boolean;
  type WbIconBadgeCallback (line 60) | type WbIconBadgeCallback = (
  type SortCallback (line 67) | type SortCallback = (a: WunderbaumNode, b: WunderbaumNode) => number;
  type SortKeyCallback (line 69) | type SortKeyCallback = (node: WunderbaumNode) => string | number | any[];
  type BoolOptionResolver (line 71) | type BoolOptionResolver = (node: WunderbaumNode) => boolean;
  type BoolOrStringOptionResolver (line 73) | type BoolOrStringOptionResolver = (
  type NodeAnyCallback (line 77) | type NodeAnyCallback = (node: WunderbaumNode) => any;
  type NodeStringCallback (line 79) | type NodeStringCallback = (node: WunderbaumNode) => string;
  type NodePropertyGetterCallback (line 81) | type NodePropertyGetterCallback = (
  type NodeVisitCallback (line 86) | type NodeVisitCallback = (node: WunderbaumNode) => NodeVisitResponse;
  type NodeVisitResponse (line 92) | type NodeVisitResponse = "skip" | boolean | void;
  type NodeToDictCallback (line 97) | type NodeToDictCallback = (
  type NodeSelectCallback (line 105) | type NodeSelectCallback = (node: WunderbaumNode) => boolean | void;
  type DeprecationOptions (line 108) | type DeprecationOptions = {
  type DynamicBoolOption (line 117) | type DynamicBoolOption = boolean | BoolOptionResolver;
  type DynamicStringOption (line 118) | type DynamicStringOption = string | BoolOptionResolver;
  type DynamicBoolOrStringOption (line 119) | type DynamicBoolOrStringOption =
  type DynamicCheckboxOption (line 123) | type DynamicCheckboxOption = CheckboxOption | BoolOrStringOptionResolver;
  type DynamicIconOption (line 124) | type DynamicIconOption = IconOption | BoolOrStringOptionResolver;
  type DynamicTooltipOption (line 125) | type DynamicTooltipOption = TooltipOption | BoolOrStringOptionResolver;
  type WbNodeData (line 129) | interface WbNodeData {
  type IconMapType (line 188) | interface IconMapType {
  type WbCancelableEventResultType (line 218) | type WbCancelableEventResultType = false | void;
  type WbTreeEventType (line 220) | interface WbTreeEventType {
  type WbNodeEventType (line 234) | interface WbNodeEventType extends WbTreeEventType {
  type WbActivateEventType (line 244) | interface WbActivateEventType extends WbNodeEventType {
  type WbChangeEventType (line 250) | interface WbChangeEventType extends WbNodeEventType {
  type WbClickEventType (line 261) | interface WbClickEventType extends WbTreeEventType {
  type WbDeactivateEventType (line 270) | interface WbDeactivateEventType extends WbNodeEventType {
  type WbEditApplyEventType (line 276) | interface WbEditApplyEventType extends WbNodeEventType {
  type WbEditEditEventType (line 289) | interface WbEditEditEventType extends WbNodeEventType {
  type WbErrorEventType (line 298) | interface WbErrorEventType extends WbNodeEventType {
  type WbExpandEventType (line 302) | interface WbExpandEventType extends WbNodeEventType {
  type WbFocusEventType (line 306) | interface WbFocusEventType extends WbTreeEventType {
  type WbIconBadgeEventType (line 313) | interface WbIconBadgeEventType extends WbNodeEventType {
  type WbIconBadgeEventResultType (line 317) | interface WbIconBadgeEventResultType {
  type WbInitEventType (line 326) | interface WbInitEventType extends WbTreeEventType {
  type WbKeydownEventType (line 330) | interface WbKeydownEventType extends WbTreeEventType {
  type WbModifyChildEventType (line 338) | interface WbModifyChildEventType extends WbNodeEventType {
  type WbReceiveEventType (line 344) | interface WbReceiveEventType extends WbNodeEventType {
  type WbSelectEventType (line 348) | interface WbSelectEventType extends WbNodeEventType {
  type WbButtonClickEventType (line 352) | interface WbButtonClickEventType extends WbTreeEventType {
  type WbRenderEventType (line 358) | interface WbRenderEventType extends WbNodeEventType {
  type NodeTypeDefinition (line 402) | interface NodeTypeDefinition {
  type NodeTypeDefinitionMap (line 421) | type NodeTypeDefinitionMap = { [type: string]: NodeTypeDefinition };
  type ColumnDefinition (line 427) | interface ColumnDefinition {
  type ColumnDefinitionList (line 509) | type ColumnDefinitionList = Array<ColumnDefinition>;
  type ColumnEventInfo (line 514) | interface ColumnEventInfo {
  type ColumnEventInfoMap (line 525) | type ColumnEventInfoMap = { [colId: string]: ColumnEventInfo };
  type WbEventInfo (line 531) | interface WbEventInfo {
  type FilterModeType (line 558) | type FilterModeType = null | "mark" | "dim" | "hide";
  type SelectModeType (line 559) | type SelectModeType = "single" | "multi" | "hier";
  type NavigationType (line 561) | type NavigationType =
  type ApplyCommandType (line 576) | type ApplyCommandType =
  type NodeFilterResponse (line 596) | type NodeFilterResponse = "skip" | "branch" | boolean | void;
  type NodeFilterCallback (line 597) | type NodeFilterCallback = (node: WunderbaumNode) => NodeFilterResponse;
  type ChangeType (line 602) | enum ChangeType {
  type RenderFlag (line 622) | enum RenderFlag {
  type NodeStatusType (line 630) | enum NodeStatusType {
  type NodeRegion (line 639) | enum NodeRegion {
  type NavModeEnum (line 650) | enum NavModeEnum {
  type TranslationsType (line 662) | type TranslationsType = {
  type AddChildrenOptions (line 683) | interface AddChildrenOptions {
  type ApplyCommandOptions (line 699) | interface ApplyCommandOptions {
  type ExpandAllOptions (line 704) | interface ExpandAllOptions {
  type FilterNodesOptions (line 742) | interface FilterNodesOptions {
  type GetStateOptions (line 764) | interface GetStateOptions {
  type SetStateOptions (line 774) | interface SetStateOptions {
  type TreeStateDefinition (line 780) | interface TreeStateDefinition {
  type LoadLazyNodesOptions (line 792) | interface LoadLazyNodesOptions {
  type MakeVisibleOptions (line 802) | interface MakeVisibleOptions {
  type NavigateOptions (line 812) | interface NavigateOptions {
  type RenderOptions (line 820) | interface RenderOptions {
  type ScrollIntoViewOptions (line 838) | interface ScrollIntoViewOptions {
  type ScrollToOptions (line 850) | interface ScrollToOptions extends ScrollIntoViewOptions {
  type SetActiveOptions (line 856) | interface SetActiveOptions {
  type SetColumnOptions (line 880) | interface SetColumnOptions {
  type SetExpandedOptions (line 892) | interface SetExpandedOptions {
  type UpdateOptions (line 908) | interface UpdateOptions {
  type SetSelectedOptions (line 916) | interface SetSelectedOptions {
  type SetStatusOptions (line 930) | interface SetStatusOptions {
  type ReloadOptions (line 940) | interface ReloadOptions {
  type ResetOrderOptions (line 950) | interface ResetOrderOptions {
  type SortOptions (line 963) | interface SortOptions {
  type SortByPropertyOptions (line 1009) | type SortByPropertyOptions = SortOptions;
  type VisitRowsOptions (line 1012) | interface VisitRowsOptions {
  type FilterConnectType (line 1034) | interface FilterConnectType {
  type FilterOptionsType (line 1048) | type FilterOptionsType = {
  type EditOptionsType (line 1072) | type EditOptionsType = {
  type InsertNodeType (line 1147) | type InsertNodeType =
  type DropEffectType (line 1153) | type DropEffectType = "none" | "copy" | "link" | "move";
  type DropEffectAllowedType (line 1154) | type DropEffectAllowedType =
  type DropRegionType (line 1164) | type DropRegionType = "over" | "before" | "after";
  type DropRegionTypeSet (line 1165) | type DropRegionTypeSet = Set<DropRegionType>;
  type DropRegionTypeList (line 1166) | type DropRegionTypeList = Array<DropRegionType>;
  type DragEventType (line 1178) | interface DragEventType extends WbNodeEventType {
  type DropEventType (line 1185) | interface DropEventType extends WbNodeEventType {
  type DndOptionsType (line 1196) | type DndOptionsType = {
  type GridOptionsType (line 1382) | type GridOptionsType = object;
  type KeynavOptionsType (line 1387) | type KeynavOptionsType = object;
  type LoggerOptionsType (line 1392) | type LoggerOptionsType = object;

FILE: src/util.ts
  constant MOUSE_BUTTONS (line 14) | const MOUSE_BUTTONS: { [key: number]: string } = {
  constant MAX_INT (line 23) | const MAX_INT = 9007199254740991;
  constant REX_HTML (line 28) | const REX_HTML = /[&<>"'/]/g;
  constant REX_TOOLTIP (line 29) | const REX_TOOLTIP = /[<>"'/]/g;
  constant ENTITY_MAP (line 30) | const ENTITY_MAP: { [key: string]: string } = {
  type NotPromise (line 39) | type NotPromise<T> = T extends Promise<any> ? never : T;
  type FunctionType (line 41) | type FunctionType = (...args: any[]) => any;
  type EventCallbackType (line 42) | type EventCallbackType = (e: Event) => boolean | void;
  type PromiseCallbackType (line 43) | type PromiseCallbackType = (val: any) => void;
  class ValidationError (line 49) | class ValidationError extends Error {
    method constructor (line 50) | constructor(message: string) {
  class Deferred (line 62) | class Deferred {
    method constructor (line 70) | constructor() {}
    method resolve (line 72) | resolve(value?: any) {
    method reject (line 81) | reject(error?: any) {
    method then (line 90) | then(cb: any) {
    method catch (line 97) | catch(cb: any) {
    method promise (line 104) | promise() {
  function assert (line 113) | function assert(cond: any, msg: string) {
  function _getUserInfo (line 120) | function _getUserInfo() {
  function documentReady (line 130) | function documentReady(callback: () => void): void {
  function documentReadyPromise (line 139) | function documentReadyPromise(): Promise<void> {
  function each (line 153) | function each(
  function error (line 181) | function error(msg: string) {
  function escapeHtml (line 186) | function escapeHtml(s: string): string {
  function escapeRegex (line 197) | function escapeRegex(s: string) {
  function escapeTooltip (line 202) | function escapeTooltip(s: string): string {
  function extractHtmlText (line 209) | function extractHtmlText(s: string) {
  function getValueFromElem (line 242) | function getValueFromElem(elem: HTMLElement, coerce = false): any {
  function setValueToElem (line 328) | function setValueToElem(elem: HTMLElement, value: any): void {
  function setElemDisplay (line 395) | function setElemDisplay(
  function elemFromHtml (line 410) | function elemFromHtml<T = HTMLElement>(html: string): T {
  function elemFromSelector (line 419) | function elemFromSelector<T = HTMLElement>(obj: string | T): T | null {
  function eventToString (line 453) | function eventToString(event: Event): string {
  function extend (line 493) | function extend(...args: any[]) {
  function isArray (line 509) | function isArray(obj: any) {
  function isEmptyObject (line 514) | function isEmptyObject(obj: any) {
  function isFunction (line 519) | function isFunction(obj: any) {
  function isPlainObject (line 524) | function isPlainObject(obj: any) {
  function noop (line 529) | function noop(...args: any[]): any {}
  function onEvent (line 567) | function onEvent(
  function overrideMethod (line 615) | function overrideMethod(
  function setTimeoutPromise (line 647) | function setTimeoutPromise<T = unknown>(
  function sleep (line 673) | async function sleep(ms: number) {
  function toggleCheckbox (line 687) | function toggleCheckbox(
  function getOption (line 721) | function getOption(
  function rotate (line 739) | function rotate(value: any, values: any[]): any {
  function toSet (line 745) | function toSet(val: any): Set<string> {
  function toPixel (line 773) | function toPixel(
  function unsafeCast (line 789) | function unsafeCast<T>(value: any): T {
  function toBool (line 800) | function toBool(
  function intToBool (line 817) | function intToBool(
  function type (line 841) | function type(obj: any): string {
  function adaptiveThrottle (line 860) | function adaptiveThrottle(
  function murmurHash3 (line 950) | function murmurHash3(

FILE: src/wb_ext_dnd.ts
  class DndExtension (line 21) | class DndExtension extends WunderbaumExtension<DndOptionsType> {
    method constructor (line 33) | constructor(tree: Wunderbaum) {
    method init (line 71) | init() {
    method _leaveNode (line 102) | protected _leaveNode(): void {
    method unifyDragover (line 116) | protected unifyDragover(res: any): DropRegionTypeSet | false {
    method _calcDropRegion (line 133) | protected _calcDropRegion(
    method _guessDropEffect (line 161) | protected _guessDropEffect(e: DragEvent): DropEffectType {
    method _isVoidDrop (line 202) | protected _isVoidDrop(
    method _applyScrollDir (line 226) | protected _applyScrollDir(): void {
    method _autoScroll (line 239) | protected _autoScroll(viewportY: number): number {
    method isDragging (line 279) | isDragging(): boolean {
    method onDragEvent (line 286) | protected onDragEvent(e: DragEvent) {
    method onDropEvent (line 361) | protected onDropEvent(e: DragEvent) {

FILE: src/wb_ext_edit.ts
  class EditExtension (line 25) | class EditExtension extends WunderbaumExtension<EditOptionsType> {
    method constructor (line 30) | constructor(tree: Wunderbaum) {
    method _applyChange (line 58) | protected async _applyChange(
    method _onChange (line 121) | protected _onChange(e: Event) {
    method init (line 139) | init() {
    method _preprocessKeyEvent (line 156) | _preprocessKeyEvent(data: any): boolean | undefined {
    method isEditingTitle (line 203) | isEditingTitle(node?: WunderbaumNode): boolean {
    method startEditTitle (line 208) | startEditTitle(node?: WunderbaumNode | null) {
    method stopEditTitle (line 269) | stopEditTitle(apply: boolean) {
    method _stopEditTitle (line 277) | _stopEditTitle(apply: boolean, options: any) {
    method createNode (line 351) | createNode(

FILE: src/wb_ext_filter.ts
  constant START_MARKER (line 27) | const START_MARKER = "\uFFF7";
  constant END_MARKER (line 28) | const END_MARKER = "\uFFF8";
  constant RE_START_MARKER (line 29) | const RE_START_MARKER = new RegExp(escapeRegex(START_MARKER), "g");
  constant RE_END_MARTKER (line 30) | const RE_END_MARTKER = new RegExp(escapeRegex(END_MARKER), "g");
  class FilterExtension (line 32) | class FilterExtension extends WunderbaumExtension<FilterOptionsType> {
    method constructor (line 40) | constructor(tree: Wunderbaum) {
    method init (line 55) | init() {
    method setPluginOption (line 63) | setPluginOption(name: string, value: any): void {
    method _updatedConnectedControls (line 74) | _updatedConnectedControls() {
    method _connectControls (line 116) | _connectControls() {
    method _applyFilterNoUpdate (line 169) | _applyFilterNoUpdate(
    method _applyFilterImpl (line 178) | _applyFilterImpl(
    method filterNodes (line 347) | filterNodes(
    method filterBranches (line 358) | filterBranches(
    method countMatches (line 377) | countMatches(): number {
    method updateFilter (line 390) | updateFilter() {
    method clearFilter (line 408) | clearFilter() {
  function _markFuzzyMatchedChars (line 449) | function _markFuzzyMatchedChars(

FILE: src/wb_ext_grid.ts
  class GridExtension (line 13) | class GridExtension extends WunderbaumExtension<GridOptionsType> {
    method constructor (line 16) | constructor(tree: Wunderbaum) {
    method init (line 75) | init() {
    method handleDrag (line 82) | protected handleDrag(e: DragCallbackArgType): void {

FILE: src/wb_ext_keynav.ts
  constant QUICKSEARCH_DELAY (line 13) | const QUICKSEARCH_DELAY = 500;
  class KeynavExtension (line 15) | class KeynavExtension extends WunderbaumExtension<KeynavOptionsType> {
    method constructor (line 16) | constructor(tree: Wunderbaum) {
    method _getEmbeddedInputElem (line 20) | protected _getEmbeddedInputElem(elem: any): HTMLInputElement | null {
    method _isCurInputFocused (line 44) | protected _isCurInputFocused(): boolean {
    method onKeyEvent (line 51) | onKeyEvent(data: any): boolean | undefined {

FILE: src/wb_ext_logger.ts
  class LoggerExtension (line 12) | class LoggerExtension extends WunderbaumExtension<LoggerOptionsType> {
    method constructor (line 21) | constructor(tree: Wunderbaum) {
    method init (line 26) | init() {
    method onKeyEvent (line 52) | onKeyEvent(data: any): boolean | undefined {

FILE: src/wb_extension_base.ts
  type ExtensionsDict (line 17) | type ExtensionsDict = {
  method constructor (line 35) | constructor(tree: Wunderbaum, id: string, defaults: TOptions) {
  method init (line 53) | init() {
  method getPluginOption (line 72) | getPluginOption(name: string, defaultValue?: any): any {
  method setPluginOption (line 76) | setPluginOption(name: string, value: any): void {
  method setEnabled (line 80) | setEnabled(flag = true) {
  method onKeyEvent (line 85) | onKeyEvent(data: any): boolean | undefined {
  method onRender (line 89) | onRender(data: any): boolean | undefined {

FILE: src/wb_node.ts
  constant NODE_PROPS (line 63) | const NODE_PROPS = new Set<string>([
  constant NODE_DICT_PROPS (line 83) | const NODE_DICT_PROPS = new Set<string>(NODE_PROPS);
  class WunderbaumNode (line 109) | class WunderbaumNode {
    method constructor (line 190) | constructor(tree: Wunderbaum, parent: WunderbaumNode, data: WbNodeData) {
    method toString (line 243) | toString() {
    method _callEvent (line 300) | _callEvent(type: string, extra?: any): any {
    method addChildren (line 320) | addChildren(
    method addNode (line 402) | addNode(
    method applyCommand (line 432) | applyCommand(cmd: ApplyCommandType, options: ApplyCommandOptions): any {
    method collapseSiblings (line 440) | collapseSiblings(options?: SetExpandedOptions): any {
    method setClass (line 456) | setClass(
    method startEditTitle (line 484) | startEditTitle(): void {
    method expandAll (line 496) | async expandAll(flag: boolean = true, options?: ExpandAllOptions) {
    method findAll (line 616) | findAll(match: string | RegExp | MatcherCallback): WunderbaumNode[] {
    method findDirectChild (line 629) | findDirectChild(
    method findFirst (line 657) | findFirst(match: string | RegExp | MatcherCallback): WunderbaumNode | ...
    method findRelatedNode (line 674) | findRelatedNode(where: NavigationType, includeHidden = false) {
    method format_iter (line 681) | *format_iter(
    method format (line 728) | format(name_cb?: NodeStringCallback, connectors?: string[]): string {
    method getColElem (line 739) | getColElem(colIdx: number | string) {
    method getCloneList (line 752) | getCloneList(includeSelf = false): WunderbaumNode[] {
    method getFirstChild (line 766) | getFirstChild() {
    method getLastChild (line 773) | getLastChild() {
    method getLevel (line 778) | getLevel(): number {
    method getNextSibling (line 790) | getNextSibling(): WunderbaumNode | null {
    method getParent (line 797) | getParent(): WunderbaumNode | null {
    method getParentList (line 806) | getParentList(includeRoot = false, includeSelf = false) {
    method getPath (line 822) | getPath(
    method getPrevSibling (line 844) | getPrevSibling(): WunderbaumNode | null {
    method hasChildren (line 853) | hasChildren() {
    method hasClass (line 871) | hasClass(className: string): boolean {
    method hasFocus (line 876) | hasFocus(): boolean {
    method isActive (line 881) | isActive() {
    method isAncestorOf (line 888) | isAncestorOf(other: WunderbaumNode) {
    method isChildOf (line 895) | isChildOf(other: WunderbaumNode) {
    method isClone (line 901) | isClone() {
    method isColspan (line 907) | isColspan() {
    method isDescendantOf (line 914) | isDescendantOf(other: WunderbaumNode) {
    method isExpandable (line 935) | isExpandable(andCollapsed = false): boolean {
    method isEditingTitle (line 953) | isEditingTitle(): boolean {
    method isExpanded (line 958) | isExpanded(): boolean {
    method isFirstSibling (line 963) | isFirstSibling(): boolean {
    method isLastSibling (line 969) | isLastSibling(): boolean {
    method isLazy (line 975) | isLazy(): boolean {
    method isLoaded (line 980) | isLoaded(): boolean {
    method isLoading (line 985) | isLoading(): boolean {
    method isPagingNode (line 990) | isPagingNode(): boolean {
    method isParentOf (line 997) | isParentOf(other: WunderbaumNode) {
    method isPartload (line 1002) | isPartload(): boolean {
    method isPartsel (line 1007) | isPartsel(): boolean {
    method isRadio (line 1012) | isRadio(): boolean {
    method isRendered (line 1017) | isRendered(): boolean {
    method isRootNode (line 1024) | isRootNode(): boolean {
    method isSelected (line 1031) | isSelected(): TristateType {
    method isStatusNode (line 1038) | isStatusNode(): boolean {
    method isTopLevel (line 1043) | isTopLevel(): boolean {
    method isUnloaded (line 1050) | isUnloaded(): boolean {
    method isVisible (line 1058) | isVisible(): boolean {
    method _loadSourceObject (line 1086) | protected _loadSourceObject(source: any, level?: number) {
    method _fetchWithOptions (line 1148) | async _fetchWithOptions(source: any) {
    method load (line 1194) | async load(source: SourceType) {
    method loadLazy (line 1282) | async loadLazy(forceReload: boolean = false) {
    method log (line 1333) | log(...args: any[]) {
    method logDebug (line 1343) | logDebug(...args: any[]) {
    method logError (line 1350) | logError(...args: any[]) {
    method logInfo (line 1357) | logInfo(...args: any[]) {
    method logWarn (line 1364) | logWarn(...args: any[]) {
    method makeVisible (line 1375) | async makeVisible(options?: MakeVisibleOptions) {
    method moveTo (line 1409) | moveTo(
    method navigate (line 1523) | async navigate(where: NavigationType | string, options?: NavigateOptio...
    method remove (line 1547) | remove() {
    method removeChildren (line 1560) | removeChildren() {
    method removeMarkup (line 1593) | removeMarkup() {
    method _getRenderInfo (line 1601) | protected _getRenderInfo(): any {
    method _createIcon (line 1631) | protected _createIcon(
    method _render_markup (line 1651) | protected _render_markup(opts: RenderOptions) {
    method _render_data (line 1788) | protected _render_data(opts: RenderOptions) {
    method _render_status (line 1866) | protected _render_status(opts: RenderOptions) {
    method _render (line 2001) | _render(options?: RenderOptions) {
    method resetLazy (line 2027) | resetLazy() {
    method toDict (line 2046) | toDict(recursive = false, callback?: NodeToDictCallback): WbNodeData {
    method getOption (line 2110) | getOption(name: string, defaultValue?: any) {
    method scrollIntoView (line 2149) | async scrollIntoView(options?: ScrollIntoViewOptions) {
    method setActive (line 2158) | async setActive(flag: boolean = true, options?: SetActiveOptions) {
    method setExpanded (line 2226) | async setExpanded(flag: boolean = true, options?: SetExpandedOptions) {
    method setFocus (line 2278) | setFocus(flag: boolean = true) {
    method setIcon (line 2287) | setIcon(icon: string) {
    method setKey (line 2293) | setKey(key: string | null, refKey: string | null) {
    method update (line 2334) | update(change: ChangeType = ChangeType.data) {
    method getSelectedNodes (line 2346) | getSelectedNodes(stopOnParents: boolean = false): WunderbaumNode[] {
    method getRefKeys (line 2367) | getRefKeys(selected = false): string[] {
    method toggleSelected (line 2378) | toggleSelected(options?: SetSelectedOptions): TristateType {
    method _anySelectable (line 2389) | _anySelectable(): boolean {
    method _changeSelectStatusProps (line 2406) | protected _changeSelectStatusProps(state: TristateType): boolean {
    method fixSelection3AfterClick (line 2437) | fixSelection3AfterClick(opts?: SetSelectedOptions): void {
    method fixSelection3FromEndNodes (line 2458) | fixSelection3FromEndNodes(opts?: SetSelectedOptions): void {
    method setSelected (line 2533) | setSelected(
    method setStatus (line 2595) | setStatus(
    method setTitle (line 2693) | setTitle(title: string): void {
    method setTooltip (line 2700) | setTooltip(tooltip: TooltipOption): void {
    method sortChildren (line 2712) | sortChildren(
    method resetNativeChildOrder (line 2726) | resetNativeChildOrder(options?: ResetOrderOptions) {
    method sortByProperty (line 2744) | sortByProperty(options: SortByPropertyOptions) {
    method sort (line 2753) | sort(options: SortOptions) {
    method resort (line 2886) | resort(options: SortOptions = {}): void {
    method triggerModifyChild (line 2901) | triggerModifyChild(
    method triggerModify (line 2924) | triggerModify(operation: string, extra?: any) {
    method visit (line 2944) | visit(
    method visitParents (line 2974) | visitParents(
    method visitSiblings (line 3000) | visitSiblings(
    method isMatched (line 3019) | isMatched() {
  method [Symbol.iterator] (line 259) | *[Symbol.iterator](): IterableIterator<WunderbaumNode> {

FILE: src/wb_options.ts
  type WunderbaumOptions (line 50) | interface WunderbaumOptions {
  type InitWunderbaumOptions (line 445) | interface InitWunderbaumOptions extends Partial<WunderbaumOptions> {

FILE: src/wunderbaum.ts
  class WbSystemRoot (line 81) | class WbSystemRoot extends WunderbaumNode {
    method constructor (line 82) | constructor(tree: Wunderbaum) {
    method toString (line 88) | toString() {
  class Wunderbaum (line 98) | class Wunderbaum {
    method activeNode (line 140) | public get activeNode() {
    method focusNode (line 147) | public get focusNode() {
    method constructor (line 205) | constructor(options: InitWunderbaumOptions) {
    method _registerEventHandlers (line 478) | private _registerEventHandlers() {
    method getTree (line 609) | public static getTree(
    method iconMap (line 653) | get iconMap(): IconMapType {
    method getNode (line 664) | public static getNode(el: Element | Event): WunderbaumNode | null {
    method _registerExtension (line 700) | protected _registerExtension(extension: WunderbaumExtension<any>): void {
    method _initExtensions (line 707) | protected _initExtensions(): void {
    method _calculateKey (line 719) | _calculateKey(data: WbNodeData, parent?: WunderbaumNode): string {
    method _registerNode (line 749) | _registerNode(node: WunderbaumNode): void {
    method _unregisterNode (line 766) | _unregisterNode(node: WunderbaumNode): void {
    method _callHook (line 786) | protected _callHook(
    method _callMethod (line 817) | _callMethod(name: string, ...args: any[]): any {
    method _callEvent (line 836) | _callEvent(type: string, extra?: any): any {
    method _getNodeByRowIdx (line 851) | protected _getNodeByRowIdx(idx: number): WunderbaumNode | null {
    method getTopmostVpNode (line 867) | getTopmostVpNode(complete = true) {
    method getLowestVpNode (line 884) | getLowestVpNode(complete = true) {
    method _getPrevNodeInView (line 902) | protected _getPrevNodeInView(node?: WunderbaumNode, ofs = 1) {
    method _getNextNodeInView (line 916) | protected _getNextNodeInView(
    method addChildren (line 947) | addChildren(nodeData: any, options?: AddChildrenOptions): WunderbaumNo...
    method applyCommand (line 982) | applyCommand(
    method clear (line 1094) | clear() {
    method destroy (line 1130) | public destroy() {
    method getOption (line 1149) | getOption(name: string, defaultValue?: any): any {
    method setOption (line 1173) | setOption(name: string, value: any): void {
    method hasFocus (line 1196) | hasFocus() {
    method hasHeader (line 1205) | hasHeader() {
    method runWithDeferredUpdate (line 1218) | runWithDeferredUpdate<T>(func: () => util.NotPromise<T>): T {
    method runWithDeferredUpdateAsync (line 1239) | async runWithDeferredUpdateAsync<T>(func: () => Promise<T>): Promise<T> {
    method expandAll (line 1249) | async expandAll(flag: boolean = true, options?: ExpandAllOptions) {
    method selectAll (line 1254) | selectAll(flag: boolean = true) {
    method toggleSelect (line 1259) | toggleSelect() {
    method getSelectedNodes (line 1267) | getSelectedNodes(stopOnParents: boolean = false): WunderbaumNode[] {
    method getRefKeys (line 1279) | getRefKeys(selected = false): string[] {
    method _selectRange (line 1286) | protected _selectRange(eventInfo: WbEventInfo): false | void {
    method count (line 1324) | count(visible = false): number {
    method countUnique (line 1330) | countUnique(): number {
    method _check (line 1335) | _check() {
    method findAll (line 1353) | findAll(match: string | RegExp | MatcherCallback) {
    method findByRefKey (line 1366) | findByRefKey(refKey: string): WunderbaumNode[] {
    method findFirst (line 1378) | findFirst(match: string | RegExp | MatcherCallback) {
    method findKey (line 1388) | findKey(key: string): WunderbaumNode | null {
    method findNextNode (line 1397) | findNextNode(
    method findRelatedNode (line 1446) | findRelatedNode(
    method format_iter (line 1567) | *format_iter(
    method format (line 1594) | format(name_cb?: NodeStringCallback, connectors?: string[]): string {
    method parent (line 1601) | get parent(): null {
    method children (line 1608) | get children(): WunderbaumNode[] {
    method getActiveColElem (line 1615) | getActiveColElem() {
    method getActiveNode (line 1631) | getActiveNode() {
    method getFirstChild (line 1638) | getFirstChild() {
    method getLastChild (line 1645) | getLastChild() {
    method getFocusNode (line 1657) | getFocusNode() {
    method getEventInfo (line 1667) | static getEventInfo(event: Event): WbEventInfo {
    method toString (line 1728) | toString() {
    method isEditing (line 1736) | isEditing(): boolean {
    method isEditingTitle (line 1747) | isEditingTitle(): boolean {
    method isLoading (line 1754) | isLoading(): boolean {
    method log (line 1770) | log(...args: any[]) {
    method logDebug (line 1780) | logDebug(...args: any[]) {
    method logError (line 1787) | logError(...args: any[]) {
    method logInfo (line 1794) | logInfo(...args: any[]) {
    method logTime (line 1801) | logTime(label: string): string {
    method logTimeEnd (line 1809) | logTimeEnd(label: string): void {
    method logWarn (line 1816) | logWarn(...args: any[]) {
    method logDeprecate (line 1823) | logDeprecate(method: string, options?: DeprecationOptions) {
    method resetColumns (line 1837) | resetColumns() {
    method scrollTo (line 1855) | scrollTo(nodeOrOpts: ScrollToOptions | WunderbaumNode) {
    method scrollToHorz (line 1913) | protected scrollToHorz() {
    method setColumn (line 1948) | setColumn(colIdx: number | string, options?: SetColumnOptions) {
    method _setActiveNode (line 2002) | _setActiveNode(node: WunderbaumNode | null) {
    method setActiveNode (line 2007) | setActiveNode(key: string, flag: boolean = true, options?: SetActiveOp...
    method setFocus (line 2012) | setFocus(flag = true) {
    method _setFocusNode (line 2021) | _setFocusNode(node: WunderbaumNode | null) {
    method getState (line 2026) | getState(options: GetStateOptions = {}): TreeStateDefinition {
    method setState (line 2063) | async setState(state: TreeStateDefinition, options: SetStateOptions = ...
    method update (line 2115) | update(
    method setEnabled (line 2189) | setEnabled(flag: boolean = true): boolean {
    method isEnabled (line 2197) | isEnabled(): boolean {
    method isGrid (line 2202) | isGrid(): boolean {
    method isCellNav (line 2207) | isCellNav(): boolean {
    method isRowNav (line 2211) | isRowNav(): boolean {
    method setCellNav (line 2216) | setCellNav(flag: boolean = true) {
    method setNavigationOption (line 2231) | setNavigationOption(mode: NavModeEnum, reset = false) {
    method setStatus (line 2261) | setStatus(
    method setTypes (line 2269) | setTypes(types: any, replace = true) {
    method sortChildren (line 2291) | sortChildren(
    method sortByProperty (line 2309) | sortByProperty(options: SortByPropertyOptions) {
    method sort (line 2318) | sort(options: SortOptions): void {
    method toDictArray (line 2330) | toDictArray(callback?: NodeToDictCallback): Array<WbNodeData> {
    method _updateColumnWidths (line 2340) | _updateColumnWidths(): boolean {
    method _renderHeaderMarkup (line 2452) | protected _renderHeaderMarkup() {
    method updatePendingModifications (line 2545) | updatePendingModifications() {
    method _createNodeIcon (line 2552) | public _createNodeIcon(
    method _updateTopBreadcrumb (line 2631) | private _updateTopBreadcrumb() {
    method _updateViewportImmediately (line 2663) | protected _updateViewportImmediately() {
    method _updateRows (line 2765) | protected _updateRows(options?: any): boolean {
    method visit (line 2859) | visit(callback: (node: WunderbaumNode) => any) {
    method visitRows (line 2874) | visitRows(callback: NodeVisitCallback, options?: VisitRowsOptions): bo...
    method _visitRowsUp (line 2967) | protected _visitRowsUp(
    method load (line 3027) | async load(source: SourceType) {
    method reload (line 3040) | async reload(options: ReloadOptions = {}) {
    method _loadLazyNodes (line 3059) | protected async _loadLazyNodes(
    method enableUpdate (line 3110) | public enableUpdate(flag: boolean): void {
    method filterNodes (line 3158) | filterNodes(
    method countMatches (line 3170) | countMatches(): number {
    method filterBranches (line 3178) | filterBranches(
    method clearFilter (line 3188) | clearFilter() {
    method isFilterActive (line 3194) | isFilterActive() {
    method updateFilter (line 3200) | updateFilter() {
  method [Symbol.iterator] (line 695) | *[Symbol.iterator](): IterableIterator<WunderbaumNode> {

FILE: test/generator/generator.py
  class FileFormat (line 27) | class FileFormat(Enum):
  class Automatic (line 32) | class Automatic:
  function _rounded_number (line 62) | def _rounded_number(n: int) -> str:
  function generate_random_wb_source (line 74) | def generate_random_wb_source(structure_definition: dict):
  function _iter_dict_pre_order (line 99) | def _iter_dict_pre_order(child_list: list):
  function compress_child_list (line 118) | def compress_child_list(
  function compress_source_file (line 277) | def compress_source_file(file_path, *, key_map: dict) -> dict:

FILE: test/generator/make_fixture.py
  function _generate_fixture_store_XL (line 89) | def _generate_fixture_store_XL() -> dict:
  function _generate_fixture_department_M (line 189) | def _generate_fixture_department_M() -> dict:
  function _generate_fixture_fmea_XL (line 346) | def _generate_fixture_fmea_XL() -> dict:
  function _size_disp (line 446) | def _size_disp(path: Path) -> str:
  function _write_json (line 455) | def _write_json(path: Path, data: dict, *, debug: bool):
  function main (line 464) | def main(locals):

FILE: test/unit/test-core-fixture1.js
  constant FIXTURE_1 (line 10) | const FIXTURE_1 = [

FILE: test/unit/test-core.js
  constant FIXTURE_1 (line 12) | const FIXTURE_1 = [
Condensed preview — 305 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (5,415K chars).
[
  {
    "path": ".editorconfig",
    "chars": 507,
    "preview": "; EditorConfig is awesome: http://EditorConfig.org\n\n; top-most EditorConfig file\nroot = true\n\n; Unix-style newlines with"
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 879,
    "preview": "# These are supported funding model platforms\n\ngithub: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [u"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "chars": 1215,
    "preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: \"\"\nlabels: bug, need-triage\nassignees: \"\"\n---\n\nTha"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "chars": 751,
    "preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: enhancement\nassignees: ''\n\n---\n\nThan"
  },
  {
    "path": ".github/SECURITY.md",
    "chars": 1423,
    "preview": "# Security Policy\n\n## Supported Versions\n\nThese project versions are currently being supported with security updates:\n\n|"
  },
  {
    "path": ".github/workflows/codeql.yml",
    "chars": 2889,
    "preview": "# For most projects, this workflow file will not need changing; you simply need\n# to commit it to your repository.\n#\n# Y"
  },
  {
    "path": ".github/workflows/mkdocs.yml",
    "chars": 1138,
    "preview": "name: mkdocs\non:\n  push:\n    branches:\n      - master\n      - main\npermissions:\n  contents: write\njobs:\n  deploy:\n    ru"
  },
  {
    "path": ".github/workflows/node.js.yml",
    "chars": 927,
    "preview": "# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tes"
  },
  {
    "path": ".github/workflows/stale.yml",
    "chars": 1361,
    "preview": "# This workflow warns and then closes issues and PRs that have had no activity for a specified amount of time.\n#\n# You c"
  },
  {
    "path": ".gitignore",
    "chars": 234,
    "preview": "__pycache__\n.DS_Store\n.pyftpsync-meta.json\n.venv/\n*.log\n/.settings\n/archive\n/build\n/node_modules\n/site/\n/test/triage\ndoc"
  },
  {
    "path": ".hintrc",
    "chars": 40,
    "preview": "{\n  \"extends\": [\n    \"development\"\n  ]\n}"
  },
  {
    "path": ".prettierrc",
    "chars": 802,
    "preview": "# Style guide rationale:\n# Width 80 is default (and explicitly recommended) by prettier\n# - 2 space indentation and trai"
  },
  {
    "path": ".python-version",
    "chars": 5,
    "preview": "3.12\n"
  },
  {
    "path": ".vscode/launch.json",
    "chars": 667,
    "preview": "{\n  // Use IntelliSense to learn about possible attributes.\n  // Hover to view descriptions of existing attributes.\n  //"
  },
  {
    "path": ".vscode/settings.json",
    "chars": 292,
    "preview": "{\n  \"python.formatting.provider\": \"black\",\n  \"files.exclude\": {\n    \"**/build\": true,\n    \"**/dist\": true,\n    \"**/docs/"
  },
  {
    "path": ".yarnrc.yml",
    "chars": 25,
    "preview": "nodeLinker: node-modules\n"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 8225,
    "preview": "# 1.0.0 / Unreleased\n\nFirst release.\n\n# Beta-Changes since v0.2.0\n\n> This section will be removed after the beta phase. "
  },
  {
    "path": "Gruntfile.ts",
    "chars": 2841,
    "preview": "/*\n * Build scripts for Wunderbaum\n */\nmodule.exports = (grunt: any) => {\n  grunt.initConfig({\n    pkg: grunt.file.readJ"
  },
  {
    "path": "LICENSE",
    "chars": 1074,
    "preview": "MIT License\n\nCopyright (c) 2021-2025 Martin Wendt\n\nPermission is hereby granted, free of charge, to any person obtaining"
  },
  {
    "path": "Pipfile",
    "chars": 267,
    "preview": "[[source]]\nurl = \"https://pypi.org/simple\"\nverify_ssl = true\nname = \"pypi\"\n\n[packages]\n# fabulist = \"*\"\n\"nutree[all]\" = "
  },
  {
    "path": "README.md",
    "chars": 1764,
    "preview": "# ![](docs/assets/tree_logo_32.png) wunderbaum\n\n[![GitHub version](https://img.shields.io/github/v/release/mar10/wunderb"
  },
  {
    "path": "dist/wunderbaum.css",
    "chars": 21755,
    "preview": "@charset \"UTF-8\";\n/*!\n * Wunderbaum style sheet (generated from wunderbaum.scss)\n * Copyright (c) 2021-2025, Martin Wend"
  },
  {
    "path": "dist/wunderbaum.d.ts",
    "chars": 158547,
    "preview": "declare module \"debounce\" {\n    /*!\n     * Wunderbaum - debounce.ts\n     * Copyright (c) 2021-2025, Martin Wendt. Releas"
  },
  {
    "path": "dist/wunderbaum.esm.js",
    "chars": 336867,
    "preview": "/*!\n * Wunderbaum - debounce.ts\n * Copyright (c) 2021-2025, Martin Wendt. Released under the MIT license.\n * v0.14.1, Su"
  },
  {
    "path": "dist/wunderbaum.umd.js",
    "chars": 372689,
    "preview": "(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n    "
  },
  {
    "path": "docs/.nojekyll",
    "chars": 143,
    "preview": "TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `github"
  },
  {
    "path": "docs/_config.yml",
    "chars": 265,
    "preview": "theme: jekyll-theme-slate\ntitle: Wunderbaum\ndescription: A [Type|Java]Script [tree|grid|treegrid] control.\nshow_download"
  },
  {
    "path": "docs/api/.nojekyll",
    "chars": 143,
    "preview": "TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `github"
  },
  {
    "path": "docs/api/assets/hierarchy.js",
    "chars": 721,
    "preview": "window.hierarchyData = \"eJydll1v2yAUhv8L17QLYOzad/2aFE3bpDXaLqZceIY0qC5YmKSzqvz3iUWqcnAuDrmIYjl5/LyHg4F34p0LI2l+M8kLyvii"
  },
  {
    "path": "docs/api/assets/highlight.css",
    "chars": 3430,
    "preview": ":root {\n    --light-hl-0: #0000FF;\n    --dark-hl-0: #569CD6;\n    --light-hl-1: #000000;\n    --dark-hl-1: #D4D4D4;\n    --"
  },
  {
    "path": "docs/api/assets/icons.js",
    "chars": 12929,
    "preview": "(function() {\n    addIcons();\n    function addIcons() {\n        if (document.readyState === \"loading\") return document.a"
  },
  {
    "path": "docs/api/assets/main.js",
    "chars": 48653,
    "preview": "\"use strict\";\nwindow.translations={\"copy\":\"Copy\",\"copied\":\"Copied!\",\"normally_hidden\":\"This member is normally hidden du"
  },
  {
    "path": "docs/api/assets/navigation.js",
    "chars": 2918,
    "preview": "window.navigationData = \"eJydm1tv47YSgP+Ln4Netqc9p/vm2EpixDfYSnIWRSHQ0thWI4kCRTlxi/73QvJFpETNjPuwL+HHjzRJDUcU97e/Bho+9eD"
  },
  {
    "path": "docs/api/assets/search.js",
    "chars": 42739,
    "preview": "window.searchData = \"eJy8vVuT2ziWrv1f7Fvv2kmc2Xcu29Vd0eVyfWV39Z6omMhgSsxMjiVRTVE+9MT89y8ISEpw8SUIUMy5mIlqJ4H1klpYODwLwH+"
  },
  {
    "path": "docs/api/assets/style.css",
    "chars": 47384,
    "preview": "@layer typedoc {\n    :root {\n        /* Light */\n        --light-color-background: #f2f4f8;\n        --light-color-backgr"
  },
  {
    "path": "docs/api/classes/util.Deferred.html",
    "chars": 19992,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/classes/util.ValidationError.html",
    "chars": 25272,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/classes/wb_node.WunderbaumNode.html",
    "chars": 311062,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/classes/wunderbaum.Wunderbaum.html",
    "chars": 296272,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/enums/types.ChangeType.html",
    "chars": 16749,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/enums/types.NavModeEnum.html",
    "chars": 11382,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/enums/types.NodeRegion.html",
    "chars": 14086,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/enums/types.NodeStatusType.html",
    "chars": 12005,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/enums/types.RenderFlag.html",
    "chars": 10724,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/common.decompressSourceData.html",
    "chars": 6415,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/common.makeNodeTitleMatcher.html",
    "chars": 6672,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/common.makeNodeTitleStartMatcher.html",
    "chars": 6133,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/common.nodeTitleSorter.html",
    "chars": 6816,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/util.adaptiveThrottle.html",
    "chars": 9014,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/util.assert.html",
    "chars": 6109,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/util.debounce.html",
    "chars": 14047,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/util.documentReady.html",
    "chars": 6056,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/util.documentReadyPromise.html",
    "chars": 5767,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/util.each.html",
    "chars": 7768,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/util.elemFromHtml.html",
    "chars": 6563,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/util.elemFromSelector.html",
    "chars": 7093,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/util.error.html",
    "chars": 5804,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/util.escapeHtml.html",
    "chars": 5941,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/util.escapeRegex.html",
    "chars": 5933,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/util.escapeTooltip.html",
    "chars": 5971,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/util.eventToString.html",
    "chars": 8241,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/util.extend.html",
    "chars": 6041,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/util.extractHtmlText.html",
    "chars": 5831,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/util.getOption.html",
    "chars": 6969,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/util.getValueFromElem.html",
    "chars": 8985,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/util.intToBool.html",
    "chars": 7076,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/util.isArray.html",
    "chars": 6093,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/util.isEmptyObject.html",
    "chars": 5898,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/util.isFunction.html",
    "chars": 5857,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/util.isPlainObject.html",
    "chars": 5876,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/util.murmurHash3.html",
    "chars": 7166,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/util.noop.html",
    "chars": 5974,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/util.onEvent.html",
    "chars": 11096,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/util.overrideMethod.html",
    "chars": 8653,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/util.rotate.html",
    "chars": 6481,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/util.setElemDisplay.html",
    "chars": 6378,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/util.setTimeoutPromise.html",
    "chars": 8413,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/util.setValueToElem.html",
    "chars": 9070,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/util.sleep.html",
    "chars": 6445,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/util.throttle.html",
    "chars": 12348,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/util.toBool.html",
    "chars": 7285,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/util.toPixel.html",
    "chars": 7590,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/util.toSet.html",
    "chars": 6077,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/util.toggleCheckbox.html",
    "chars": 7336,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/util.type.html",
    "chars": 5840,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/functions/util.unsafeCast.html",
    "chars": 6326,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/hierarchy.html",
    "chars": 10616,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\".\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compati"
  },
  {
    "path": "docs/api/index.html",
    "chars": 7319,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\".\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compati"
  },
  {
    "path": "docs/api/interfaces/types.AddChildrenOptions.html",
    "chars": 13062,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.ApplyCommandOptions.html",
    "chars": 5484,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.ColumnDefinition.html",
    "chars": 40070,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.ColumnEventInfo.html",
    "chars": 12706,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.DragEventType.html",
    "chars": 17170,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.DropEventType.html",
    "chars": 20243,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.ExpandAllOptions.html",
    "chars": 20857,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.FilterConnectType.html",
    "chars": 16448,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.FilterNodesOptions.html",
    "chars": 22598,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.GetStateOptions.html",
    "chars": 12518,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.IconMapType.html",
    "chars": 36727,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.LoadLazyNodesOptions.html",
    "chars": 12347,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.MakeVisibleOptions.html",
    "chars": 12593,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.NavigateOptions.html",
    "chars": 10105,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.NodeTypeDefinition.html",
    "chars": 15900,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.ReloadOptions.html",
    "chars": 10934,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.RenderOptions.html",
    "chars": 19890,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.ResetOrderOptions.html",
    "chars": 10553,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.ScrollIntoViewOptions.html",
    "chars": 14191,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.ScrollToOptions.html",
    "chars": 16435,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.SetActiveOptions.html",
    "chars": 16243,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.SetColumnOptions.html",
    "chars": 10303,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.SetExpandedOptions.html",
    "chars": 18357,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.SetSelectedOptions.html",
    "chars": 14631,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.SetStateOptions.html",
    "chars": 8680,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.SetStatusOptions.html",
    "chars": 9725,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.SortOptions.html",
    "chars": 24549,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.SourceAjaxType.html",
    "chars": 11669,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.SourceObjectType.html",
    "chars": 19283,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.TreeStateDefinition.html",
    "chars": 13763,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.UpdateOptions.html",
    "chars": 8686,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.VisitRowsOptions.html",
    "chars": 16724,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.WbActivateEventType.html",
    "chars": 18784,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.WbButtonClickEventType.html",
    "chars": 16409,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.WbChangeEventType.html",
    "chars": 23859,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.WbClickEventType.html",
    "chars": 16396,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.WbDeactivateEventType.html",
    "chars": 18826,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.WbEditApplyEventType.html",
    "chars": 24923,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.WbEditEditEventType.html",
    "chars": 18978,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.WbErrorEventType.html",
    "chars": 18673,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.WbEventInfo.html",
    "chars": 21286,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.WbExpandEventType.html",
    "chars": 18692,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.WbFocusEventType.html",
    "chars": 14792,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.WbIconBadgeEventResultType.html",
    "chars": 11842,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.WbIconBadgeEventType.html",
    "chars": 18821,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.WbInitEventType.html",
    "chars": 14778,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.WbKeydownEventType.html",
    "chars": 16319,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.WbModifyChildEventType.html",
    "chars": 20415,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.WbNodeData.html",
    "chars": 36669,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.WbNodeEventType.html",
    "chars": 19065,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.WbReceiveEventType.html",
    "chars": 18745,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.WbRenderEventType.html",
    "chars": 27631,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.WbSelectEventType.html",
    "chars": 18692,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/types.WbTreeEventType.html",
    "chars": 13472,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/wb_options.InitWunderbaumOptions.html",
    "chars": 147914,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/interfaces/wb_options.WunderbaumOptions.html",
    "chars": 127530,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/modules/common.html",
    "chars": 20963,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/modules/types.html",
    "chars": 89308,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/modules/util.html",
    "chars": 38150,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/modules/wb_node.html",
    "chars": 6059,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/modules/wb_options.html",
    "chars": 6894,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/modules/wunderbaum.html",
    "chars": 6044,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/modules.html",
    "chars": 9156,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\".\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compati"
  },
  {
    "path": "docs/api/types/types.ApplyCommandType.html",
    "chars": 6848,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.BoolOptionResolver.html",
    "chars": 6379,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.BoolOrStringOptionResolver.html",
    "chars": 6689,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.CheckboxOption.html",
    "chars": 5085,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.ColumnDefinitionList.html",
    "chars": 4973,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.ColumnEventInfoMap.html",
    "chars": 5684,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.DeprecationOptions.html",
    "chars": 5890,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.DndOptionsType.html",
    "chars": 42599,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.DropEffectAllowedType.html",
    "chars": 5700,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.DropEffectType.html",
    "chars": 5142,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.DropRegionType.html",
    "chars": 5044,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.DropRegionTypeList.html",
    "chars": 4948,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.DropRegionTypeSet.html",
    "chars": 5034,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.DynamicBoolOption.html",
    "chars": 5307,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.DynamicBoolOrStringOption.html",
    "chars": 5144,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.DynamicCheckboxOption.html",
    "chars": 5087,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.DynamicIconOption.html",
    "chars": 5059,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.DynamicStringOption.html",
    "chars": 5006,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.DynamicTooltipOption.html",
    "chars": 5080,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.EditOptionsType.html",
    "chars": 20043,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.FilterModeType.html",
    "chars": 5127,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.FilterOptionsType.html",
    "chars": 8333,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.GridOptionsType.html",
    "chars": 4834,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.IconOption.html",
    "chars": 5463,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.InsertNodeType.html",
    "chars": 5160,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.KeynavOptionsType.html",
    "chars": 4844,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.LoggerOptionsType.html",
    "chars": 4844,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.MatcherCallback.html",
    "chars": 6345,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.NavigationType.html",
    "chars": 6222,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.NodeAnyCallback.html",
    "chars": 6333,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.NodeFilterCallback.html",
    "chars": 6371,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.NodeFilterResponse.html",
    "chars": 5141,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.NodePropertyGetterCallback.html",
    "chars": 6868,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.NodeSelectCallback.html",
    "chars": 6654,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.NodeStringCallback.html",
    "chars": 6348,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.NodeToDictCallback.html",
    "chars": 7280,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.NodeTypeDefinitionMap.html",
    "chars": 5709,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.NodeVisitCallback.html",
    "chars": 6533,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.NodeVisitResponse.html",
    "chars": 5319,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.SelectModeType.html",
    "chars": 5042,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.SortByPropertyOptions.html",
    "chars": 5513,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.SortCallback.html",
    "chars": 7306,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.SortKeyCallback.html",
    "chars": 7049,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.SortOrderType.html",
    "chars": 5177,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.SourceListType.html",
    "chars": 4929,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.SourceType.html",
    "chars": 5411,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.TooltipOption.html",
    "chars": 5058,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.TranslationsType.html",
    "chars": 11218,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  },
  {
    "path": "docs/api/types/types.TristateType.html",
    "chars": 5063,
    "preview": "<!DOCTYPE html><html class=\"default\" lang=\"en\" data-base=\"..\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"x-ua-compat"
  }
]

// ... and 105 more files (download for full content)

About this extraction

This page contains the full source code of the mar10/wunderbaum GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 305 files (4.9 MB), approximately 1.3M tokens, and a symbol index with 1449 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!