[
  {
    "path": ".eslintignore",
    "content": "*.css\nregisterServiceWorker.js"
  },
  {
    "path": ".eslintrc",
    "content": "{\n  \"extends\": [\"eslint:recommended\", \"prettier\"],\n  \"parser\": \"babel-eslint\",\n  \"parserOptions\": {\n    \"ecmaVersion\": 6,\n    \"sourceType\": \"module\",\n    \"ecmaFeatures\": {\n      \"arrowFunctions\": true,\n      \"blockBindings\": true,\n      \"classes\": true,\n      \"defaultParams\": true,\n      \"destructuring\": true,\n      \"forOf\": true,\n      \"generators\": true,\n      \"modules\": true,\n      \"templateStrings\": true,\n      \"jsx\": true\n    }\n  },\n  \"env\": {\n    \"browser\": true,\n    \"es6\": true,\n    \"jasmine\": true,\n    \"jest\": true,\n    \"node\": true\n  },\n  \"globals\": {\n    \"jest\": true\n  },\n  \"plugins\": [\n    \"react\",\n    \"import\"\n  ],\n  \"rules\": {\n    \"accessor-pairs\": [\"error\"],\n    \"block-scoped-var\": [\"error\"],\n    \"consistent-return\": [\"error\"],\n    \"curly\": [\"error\", \"all\"],\n    \"default-case\": [\"error\"],\n    \"dot-location\": [\"off\"],\n    \"dot-notation\": [\"error\"],\n    \"eqeqeq\": [\"error\"],\n    \"guard-for-in\": [\"off\"],\n    \"import/named\": [\"off\"],\n    \"import/no-duplicates\": [\"error\"],\n    \"import/no-named-as-default\": [\"error\"],\n    \"new-cap\": [\"error\"],\n    \"no-alert\": [1],\n    \"no-caller\": [\"error\"],\n    \"no-case-declarations\": [\"error\"],\n    \"no-console\": [\"off\"],\n    \"no-div-regex\": [\"error\"],\n    \"no-dupe-keys\": [\"error\"],\n    \"no-else-return\": [\"error\"],\n    \"no-empty-pattern\": [\"error\"],\n    \"no-eq-null\": [\"error\"],\n    \"no-eval\": [\"error\"],\n    \"no-extend-native\": [\"error\"],\n    \"no-extra-bind\": [\"error\"],\n    \"no-extra-boolean-cast\": [\"error\"],\n    \"no-inline-comments\": [\"error\"],\n    \"no-implicit-coercion\": [\"error\"],\n    \"no-implied-eval\": [\"error\"],\n    \"no-inner-declarations\": [\"off\"],\n    \"no-invalid-this\": [\"error\"],\n    \"no-iterator\": [\"error\"],\n    \"no-labels\": [\"error\"],\n    \"no-lone-blocks\": [\"error\"],\n    \"no-loop-func\": [\"error\"],\n    \"no-multi-str\": [\"error\"],\n    \"no-native-reassign\": [\"error\"],\n    \"no-new\": [\"error\"],\n    \"no-new-func\": [\"error\"],\n    \"no-new-wrappers\": [\"error\"],\n    \"no-param-reassign\": [\"error\"],\n    \"no-process-env\": [\"warn\"],\n    \"no-proto\": [\"error\"],\n    \"no-redeclare\": [\"error\"],\n    \"no-return-assign\": [\"error\"],\n    \"no-script-url\": [\"error\"],\n    \"no-self-compare\": [\"error\"],\n    \"no-sequences\": [\"error\"],\n    \"no-shadow\": [\"off\"],\n    \"no-throw-literal\": [\"error\"],\n    \"no-undefined\": [\"error\"],\n    \"no-unused-expressions\": [\"error\"],\n    \"no-use-before-define\": [\"error\", \"nofunc\"],\n    \"no-useless-call\": [\"error\"],\n    \"no-useless-concat\": [\"error\"],\n    \"no-with\": [\"error\"],\n    \"prefer-const\": [\"error\"],\n    \"radix\": [\"error\"],\n    \"react/jsx-no-duplicate-props\": [\"error\"],\n    \"react/jsx-no-undef\": [\"error\"],\n    \"react/jsx-uses-react\": [\"error\"],\n    \"react/jsx-uses-vars\": [\"error\"],\n    \"react/no-did-update-set-state\": [\"error\"],\n    \"react/no-direct-mutation-state\": [\"error\"],\n    \"react/no-is-mounted\": [\"error\"],\n    \"react/no-unknown-property\": [\"error\"],\n    \"react/prefer-es6-class\": [\"error\", \"always\"],\n    \"react/prop-types\": \"error\",\n    \"valid-jsdoc\": [\"off\"],\n    \"yoda\": [\"error\"],\n    \"spaced-comment\": [\"error\", \"always\", {\n      \"block\": {\n        \"exceptions\": [\"*\"]\n      }\n    }],\n    \"no-unused-vars\": [\"error\", {\n        \"args\": \"after-used\",\n        \"argsIgnorePattern\": \"^_\",\n        \"caughtErrorsIgnorePattern\": \"^e$\"\n    }],\n    \"no-magic-numbers\": [\"error\", {\n      \"ignoreArrayIndexes\": true,\n        \"ignore\": [-1, 0, 1, 2, 3, 100, 10, 0.5]\n    }],\n    \"no-underscore-dangle\": [\"off\"]\n  }\n}\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "content": "github: [CNFeffery, insistence]"
  },
  {
    "path": ".github/workflows/test.yml",
    "content": "name: Test\n\non:\n  push:\n    branches: [ main ]\n  pull_request:\n    branches: [ main ]\n\njobs:\n  test:\n    runs-on: ubuntu-latest\n    strategy:\n      fail-fast: false\n      matrix:\n        python-version: [\"3.8\", \"3.9\", \"3.10\", \"3.11\", \"3.12\", \"3.13\"]\n    \n    steps:\n    - uses: actions/checkout@v5\n    \n    - name: Set up Node.js\n      uses: actions/setup-node@v5\n      with:\n        node-version: '16'\n    \n    - name: Set up Python ${{ matrix.python-version }}\n      uses: actions/setup-python@v5\n      with:\n        python-version: ${{ matrix.python-version }}\n    \n    - name: Install dependencies\n      run: |\n        npm install\n        python -m pip install --upgrade pip setuptools wheel\n        pip install -r requirements.txt\n\n    - name: Build package\n      run: |\n        npm run build\n        python -m build\n    \n    - name: Install browser for testing\n      run: |\n        sudo apt-get update\n        sudo apt-get install -y chromium-browser chromium-chromedriver xvfb\n\n    - name: Start virtual display\n      run: |\n        export DISPLAY=:99\n        Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &\n    \n    - name: Run tests\n      run: |\n        pip install -e .\n        python -m pytest tests/ -v\n      env:\n        DISPLAY: :99\n\n  lint-format:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v5\n\n      - name: Set up Node.js\n        uses: actions/setup-node@v5\n        with:\n          node-version: '16'\n\n      - name: Set up Python\n        uses: actions/setup-python@v5\n        with:\n          python-version: \"3.10\"\n\n      - name: Install dependencies\n        run: |\n          npm install\n          python -m pip install --upgrade pip\n          pip install ruff\n\n      - name: Run lint check\n        run: |\n          python -m ruff check . --exclude=node_modules,venv,build\n\n      - name: Run format check\n        run: |\n          npx prettier --check src/**/*.js src/**/*.react.js\n          python -m ruff format . --check --exclude=node_modules,venv,build\n"
  },
  {
    "path": ".gitignore",
    "content": "/.vscode\n/.build_cache\n/assets\n/build\n/deps\n/dist\n/feffery_antd_components/*.json\n/feffery_antd_components/*.js\n/feffery_antd_components/*.map\n/feffery_antd_components/__pycache__\n/feffery_antd_components.egg-info\n/inst\n/man\n/node_modules\n/R\n/src/demo\n/src/jl\n/src/*.jl\n.Rbuildignore\npackage-lock.json\n__pycache__/"
  },
  {
    "path": ".npmignore",
    "content": "/node_modules\n/.idea\n/build\n/deps\n/dist\n/feffery_antd_components.egg-info\n/inst\n/man\n/.git\n/_*\n/R\n/.vscode\n__pycache__\nindex.html\npackage-lock.json\n/.build_cache\n/jl\n*.jl\n.Rbuildignore\n/assets"
  },
  {
    "path": ".prettierrc",
    "content": "{\n    \"tabWidth\": 4,\n    \"singleQuote\": true,\n    \"bracketSpacing\": true,\n    \"trailingComma\": \"es5\"\n}\n"
  },
  {
    "path": ".pylintrc",
    "content": "[MASTER]\n\n# A comma-separated list of package or module names from where C extensions may\n# be loaded. Extensions are loading into the active Python interpreter and may\n# run arbitrary code\nextension-pkg-whitelist=\n\n# Add files or directories to the blacklist. They should be base names, not\n# paths.\nignore=CVS\n\n# Add files or directories matching the regex patterns to the blacklist. The\n# regex matches against base names, not paths.\nignore-patterns=\n\n# Python code to execute, usually for sys.path manipulation such as\n# pygtk.require().\n#init-hook=\n\n# Use multiple processes to speed up Pylint.\njobs=1\n\n# List of plugins (as comma separated values of python modules names) to load,\n# usually to register additional checkers.\nload-plugins=\n\n# Pickle collected data for later comparisons.\npersistent=yes\n\n# Specify a configuration file.\n#rcfile=\n\n# When enabled, pylint would attempt to guess common misconfiguration and emit\n# user-friendly hints instead of false-positive error messages\nsuggestion-mode=yes\n\n# Allow loading of arbitrary C extensions. Extensions are imported into the\n# active Python interpreter and may run arbitrary code.\nunsafe-load-any-extension=no\n\n\n[MESSAGES CONTROL]\n\n# Only show warnings with the listed confidence levels. Leave empty to show\n# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED\nconfidence=\n\n# Disable the message, report, category or checker with the given id(s). You\n# can either give multiple identifiers separated by comma (,) or put this\n# option multiple times (only on the command line, not in the configuration\n# file where it should appear only once).You can also use \"--disable=all\" to\n# disable everything first and then reenable specific checks. For example, if\n# you want to run only the similarities checker, you can use \"--disable=all\n# --enable=similarities\". If you want to run only the classes checker, but have\n# no Warning level messages displayed, use\"--disable=all --enable=classes\n# --disable=W\"\ndisable=print-statement,\n        parameter-unpacking,\n        unpacking-in-except,\n        old-raise-syntax,\n        backtick,\n        long-suffix,\n        old-ne-operator,\n        old-octal-literal,\n        import-star-module-level,\n        non-ascii-bytes-literal,\n        raw-checker-failed,\n        bad-inline-option,\n        locally-disabled,\n        locally-enabled,\n        file-ignored,\n        suppressed-message,\n        useless-suppression,\n        deprecated-pragma,\n        apply-builtin,\n        basestring-builtin,\n        buffer-builtin,\n        cmp-builtin,\n        coerce-builtin,\n        execfile-builtin,\n        file-builtin,\n        long-builtin,\n        raw_input-builtin,\n        reduce-builtin,\n        standarderror-builtin,\n        unicode-builtin,\n        xrange-builtin,\n        coerce-method,\n        delslice-method,\n        getslice-method,\n        setslice-method,\n        no-absolute-import,\n        old-division,\n        dict-iter-method,\n        dict-view-method,\n        next-method-called,\n        metaclass-assignment,\n        indexing-exception,\n        raising-string,\n        reload-builtin,\n        oct-method,\n        hex-method,\n        nonzero-method,\n        cmp-method,\n        input-builtin,\n        round-builtin,\n        intern-builtin,\n        unichr-builtin,\n        map-builtin-not-iterating,\n        zip-builtin-not-iterating,\n        range-builtin-not-iterating,\n        filter-builtin-not-iterating,\n        using-cmp-argument,\n        eq-without-hash,\n        div-method,\n        idiv-method,\n        rdiv-method,\n        exception-message-attribute,\n        invalid-str-codec,\n        sys-max-int,\n        bad-python3-import,\n        deprecated-string-function,\n        deprecated-str-translate-call,\n        deprecated-itertools-function,\n        deprecated-types-field,\n        next-method-defined,\n        dict-items-not-iterating,\n        dict-keys-not-iterating,\n        dict-values-not-iterating,\n        no-member,\n        missing-docstring,\n        invalid-name,\n        redefined-builtin,\n        wrong-import-order,\n        too-many-arguments,\n        too-many-locals,\n        consider-using-enumerate,\n        len-as-condition,\n        too-many-branches,\n        too-many-statements,\n        blacklisted-name,\n        line-too-long,\n        bare-except,\n        duplicate-code,\n        too-many-function-args,\n        attribute-defined-outside-init,\n        broad-except\n\n# Enable the message, report, category or checker with the given id(s). You can\n# either give multiple identifier separated by comma (,) or put this option\n# multiple time (only on the command line, not in the configuration file where\n# it should appear only once). See also the \"--disable\" option for examples.\nenable=c-extension-no-member\n\n\n[REPORTS]\n\n# Python expression which should return a note less than 10 (10 is the highest\n# note). You have access to the variables errors warning, statement which\n# respectively contain the number of errors / warnings messages and the total\n# number of statements analyzed. This is used by the global evaluation report\n# (RP0004).\nevaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)\n\n# Template used to display messages. This is a python new-style format string\n# used to format the message information. See doc for all details\n#msg-template=\n\n# Set the output format. Available formats are text, parseable, colorized, json\n# and msvs (visual studio).You can also give a reporter class, eg\n# mypackage.mymodule.MyReporterClass.\noutput-format=text\n\n# Tells whether to display a full report or only the messages\nreports=no\n\n# Activate the evaluation score.\nscore=yes\n\n\n[REFACTORING]\n\n# Maximum number of nested blocks for function / method body\nmax-nested-blocks=5\n\n# Complete name of functions that never returns. When checking for\n# inconsistent-return-statements if a never returning function is called then\n# it will be considered as an explicit return statement and no message will be\n# printed.\nnever-returning-functions=optparse.Values,sys.exit\n\n\n[BASIC]\n\n# Naming style matching correct argument names\nargument-naming-style=snake_case\n\n# Regular expression matching correct argument names. Overrides argument-\n# naming-style\n#argument-rgx=\n\n# Naming style matching correct attribute names\nattr-naming-style=snake_case\n\n# Regular expression matching correct attribute names. Overrides attr-naming-\n# style\n#attr-rgx=\n\n# Bad variable names which should always be refused, separated by a comma\nbad-names=foo,\n          bar,\n          baz,\n          toto,\n          tutu,\n          tata\n\n# Naming style matching correct class attribute names\nclass-attribute-naming-style=any\n\n# Regular expression matching correct class attribute names. Overrides class-\n# attribute-naming-style\n#class-attribute-rgx=\n\n# Naming style matching correct class names\nclass-naming-style=PascalCase\n\n# Regular expression matching correct class names. Overrides class-naming-style\n#class-rgx=\n\n# Naming style matching correct constant names\nconst-naming-style=UPPER_CASE\n\n# Regular expression matching correct constant names. Overrides const-naming-\n# style\n#const-rgx=\n\n# Minimum line length for functions/classes that require docstrings, shorter\n# ones are exempt.\ndocstring-min-length=-1\n\n# Naming style matching correct function names\nfunction-naming-style=snake_case\n\n# Regular expression matching correct function names. Overrides function-\n# naming-style\n#function-rgx=\n\n# Good variable names which should always be accepted, separated by a comma\ngood-names=i,\n           j,\n           k,\n           ex,\n           Run,\n           _\n\n# Include a hint for the correct naming format with invalid-name\ninclude-naming-hint=no\n\n# Naming style matching correct inline iteration names\ninlinevar-naming-style=any\n\n# Regular expression matching correct inline iteration names. Overrides\n# inlinevar-naming-style\n#inlinevar-rgx=\n\n# Naming style matching correct method names\nmethod-naming-style=snake_case\n\n# Regular expression matching correct method names. Overrides method-naming-\n# style\n#method-rgx=\n\n# Naming style matching correct module names\nmodule-naming-style=snake_case\n\n# Regular expression matching correct module names. Overrides module-naming-\n# style\n#module-rgx=\n\n# Colon-delimited sets of names that determine each other's naming style when\n# the name regexes allow several styles.\nname-group=\n\n# Regular expression which should only match function or class names that do\n# not require a docstring.\nno-docstring-rgx=^_\n\n# List of decorators that produce properties, such as abc.abstractproperty. Add\n# to this list to register other decorators that produce valid properties.\nproperty-classes=abc.abstractproperty\n\n# Naming style matching correct variable names\nvariable-naming-style=snake_case\n\n# Regular expression matching correct variable names. Overrides variable-\n# naming-style\n#variable-rgx=\n\n\n[FORMAT]\n\n# Expected format of line ending, e.g. empty (any line ending), LF or CRLF.\nexpected-line-ending-format=\n\n# Regexp for a line that is allowed to be longer than the limit.\nignore-long-lines=^\\s*(# )?<?https?://\\S+>?$\n\n# Number of spaces of indent required inside a hanging  or continued line.\nindent-after-paren=4\n\n# String used as indentation unit. This is usually \"    \" (4 spaces) or \"\\t\" (1\n# tab).\nindent-string='    '\n\n# Maximum number of characters on a single line.\nmax-line-length=100\n\n# Maximum number of lines in a module\nmax-module-lines=1000\n\n# List of optional constructs for which whitespace checking is disabled. `dict-\n# separator` is used to allow tabulation in dicts, etc.: {1  : 1,\\n222: 2}.\n# `trailing-comma` allows a space between comma and closing bracket: (a, ).\n# `empty-line` allows space-only lines.\nno-space-check=trailing-comma,\n               dict-separator\n\n# Allow the body of a class to be on the same line as the declaration if body\n# contains single statement.\nsingle-line-class-stmt=no\n\n# Allow the body of an if to be on the same line as the test if there is no\n# else.\nsingle-line-if-stmt=no\n\n\n[LOGGING]\n\n# Logging modules to check that the string format arguments are in logging\n# function parameter format\nlogging-modules=logging\n\n\n[MISCELLANEOUS]\n\n# List of note tags to take in consideration, separated by a comma.\nnotes=FIXME,\n      XXX,\n\n\n[SIMILARITIES]\n\n# Ignore comments when computing similarities.\nignore-comments=yes\n\n# Ignore docstrings when computing similarities.\nignore-docstrings=yes\n\n# Ignore imports when computing similarities.\nignore-imports=no\n\n# Minimum lines number of a similarity.\nmin-similarity-lines=4\n\n\n[SPELLING]\n\n# Limits count of emitted suggestions for spelling mistakes\nmax-spelling-suggestions=4\n\n# Spelling dictionary name. Available dictionaries: none. To make it working\n# install python-enchant package.\nspelling-dict=\n\n# List of comma separated words that should not be checked.\nspelling-ignore-words=\n\n# A path to a file that contains private dictionary; one word per line.\nspelling-private-dict-file=\n\n# Tells whether to store unknown words to indicated private dictionary in\n# --spelling-private-dict-file option instead of raising a message.\nspelling-store-unknown-words=no\n\n\n[TYPECHECK]\n\n# List of decorators that produce context managers, such as\n# contextlib.contextmanager. Add to this list to register other decorators that\n# produce valid context managers.\ncontextmanager-decorators=contextlib.contextmanager\n\n# List of members which are set dynamically and missed by pylint inference\n# system, and so shouldn't trigger E1101 when accessed. Python regular\n# expressions are accepted.\ngenerated-members=\n\n# Tells whether missing members accessed in mixin class should be ignored. A\n# mixin class is detected if its name ends with \"mixin\" (case insensitive).\nignore-mixin-members=yes\n\n# This flag controls whether pylint should warn about no-member and similar\n# checks whenever an opaque object is returned when inferring. The inference\n# can return multiple potential results while evaluating a Python object, but\n# some branches might not be evaluated, which results in partial inference. In\n# that case, it might be useful to still emit no-member and other checks for\n# the rest of the inferred objects.\nignore-on-opaque-inference=yes\n\n# List of class names for which member attributes should not be checked (useful\n# for classes with dynamically set attributes). This supports the use of\n# qualified names.\nignored-classes=optparse.Values,thread._local,_thread._local\n\n# List of module names for which member attributes should not be checked\n# (useful for modules/projects where namespaces are manipulated during runtime\n# and thus existing member attributes cannot be deduced by static analysis. It\n# supports qualified module names, as well as Unix pattern matching.\nignored-modules=\n\n# Show a hint with possible names when a member name was not found. The aspect\n# of finding the hint is based on edit distance.\nmissing-member-hint=yes\n\n# The minimum edit distance a name should have in order to be considered a\n# similar match for a missing member name.\nmissing-member-hint-distance=1\n\n# The total number of similar names that should be taken in consideration when\n# showing a hint for a missing member.\nmissing-member-max-choices=1\n\n\n[VARIABLES]\n\n# List of additional names supposed to be defined in builtins. Remember that\n# you should avoid to define new builtins when possible.\nadditional-builtins=\n\n# Tells whether unused global variables should be treated as a violation.\nallow-global-unused-variables=yes\n\n# List of strings which can identify a callback function by name. A callback\n# name must start or end with one of those strings.\ncallbacks=cb_,\n          _cb\n\n# A regular expression matching the name of dummy variables (i.e. expectedly\n# not used).\ndummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_\n\n# Argument names that match this expression will be ignored. Default to name\n# with leading underscore\nignored-argument-names=_.*|^ignored_|^unused_\n\n# Tells whether we should check for unused import in __init__ files.\ninit-import=no\n\n# List of qualified module names which can have objects that can redefine\n# builtins.\nredefining-builtins-modules=six.moves,past.builtins,future.builtins\n\n\n[CLASSES]\n\n# List of method names used to declare (i.e. assign) instance attributes.\ndefining-attr-methods=__init__,\n                      __new__,\n                      setUp\n\n# List of member names, which should be excluded from the protected access\n# warning.\nexclude-protected=_asdict,\n                  _fields,\n                  _replace,\n                  _source,\n                  _make\n\n# List of valid names for the first argument in a class method.\nvalid-classmethod-first-arg=cls\n\n# List of valid names for the first argument in a metaclass class method.\nvalid-metaclass-classmethod-first-arg=mcs\n\n\n[DESIGN]\n\n# Maximum number of arguments for function / method\nmax-args=5\n\n# Maximum number of attributes for a class (see R0902).\nmax-attributes=7\n\n# Maximum number of boolean expressions in a if statement\nmax-bool-expr=5\n\n# Maximum number of branch for function / method body\nmax-branches=12\n\n# Maximum number of locals for function / method body\nmax-locals=15\n\n# Maximum number of parents for a class (see R0901).\nmax-parents=7\n\n# Maximum number of public methods for a class (see R0904).\nmax-public-methods=20\n\n# Maximum number of return / yield for function / method body\nmax-returns=6\n\n# Maximum number of statements in function / method body\nmax-statements=50\n\n# Minimum number of public methods for a class (see R0903).\nmin-public-methods=2\n\n\n[IMPORTS]\n\n# Allow wildcard imports from modules that define __all__.\nallow-wildcard-with-all=no\n\n# Analyse import fallback blocks. This can be used to support both Python 2 and\n# 3 compatible code, which means that the block might have code that exists\n# only in one or another interpreter, leading to false positives when analysed.\nanalyse-fallback-blocks=no\n\n# Deprecated modules which should not be used, separated by a comma\ndeprecated-modules=optparse,tkinter.tix\n\n# Create a graph of external dependencies in the given file (report RP0402 must\n# not be disabled)\next-import-graph=\n\n# Create a graph of every (i.e. internal and external) dependencies in the\n# given file (report RP0402 must not be disabled)\nimport-graph=\n\n# Create a graph of internal dependencies in the given file (report RP0402 must\n# not be disabled)\nint-import-graph=\n\n# Force import order to recognize a module as part of the standard\n# compatibility libraries.\nknown-standard-library=\n\n# Force import order to recognize a module as part of a third party library.\nknown-third-party=enchant\n\n\n[EXCEPTIONS]\n\n# Exceptions that will emit a warning when being caught. Defaults to\n# \"Exception\"\novergeneral-exceptions=Exception\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# CONTRIBUTING\n\nThis project was generated by the [dash-component-boilerplate](https://github.com/plotly/dash-component-boilerplate) it contains the minimal set of code required to create your own custom Dash component.\n\n"
  },
  {
    "path": "DESCRIPTION",
    "content": "Package: fefferyAntdComponents\nTitle: Plotly Dash components based on Ant Design\nVersion: 0.4.6-rc1\nDescription: Plotly Dash components based on Ant Design\nDepends: R (>= 3.0.2)\nImports: \nSuggests: \nLicense: MIT + file LICENSE\nURL: http://fac.feffery.tech\nBugReports: https://github.com/CNFeffery/feffery-antd-components/issues\nEncoding: UTF-8\nLazyData: true\nKeepSource: true\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2026 CNFeffery\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "MANIFEST.in",
    "content": "include feffery_antd_components/*.js\ninclude feffery_antd_components/*.map\ninclude *.json\ninclude README.md\ninclude LICENSE\ninclude package.json\n"
  },
  {
    "path": "NAMESPACE",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nexport(''AntdAccordion)\nexport(''AntdAvatar)\nexport(''AntdAvatarGroup)\nexport(''AntdBadge)\nexport(''AntdCarousel)\nexport(''AntdCheckableTag)\nexport(''AntdCollapse)\nexport(''AntdComment)\nexport(''AntdCountdown)\nexport(''AntdCountup)\nexport(''AntdEmpty)\nexport(''AntdImage)\nexport(''AntdImageGroup)\nexport(''AntdPopover)\nexport(''AntdQRCode)\nexport(''AntdRibbon)\nexport(''AntdSegmented)\nexport(''AntdSpoiler)\nexport(''AntdStatistic)\nexport(''AntdTable)\nexport(''AntdTabs)\nexport(''AntdTag)\nexport(''AntdTimeline)\nexport(''AntdTooltip)\nexport(''AntdTree)\nexport(''AntdCard)\nexport(''AntdCardGrid)\nexport(''AntdCardMeta)\nexport(''AntdDescriptionItem)\nexport(''AntdDescriptions)\nexport(''AntdCalendar)\nexport(''AntdCascader)\nexport(''AntdCheckbox)\nexport(''AntdCheckboxGroup)\nexport(''AntdColorPicker)\nexport(''AntdDatePicker)\nexport(''AntdDateRangePicker)\nexport(''AntdInput)\nexport(''AntdInputNumber)\nexport(''AntdMentions)\nexport(''AntdOTP)\nexport(''AntdRadioGroup)\nexport(''AntdRate)\nexport(''AntdSegmentedColoring)\nexport(''AntdSelect)\nexport(''AntdSlider)\nexport(''AntdSwitch)\nexport(''AntdTimePicker)\nexport(''AntdTimeRangePicker)\nexport(''AntdTransfer)\nexport(''AntdTreeSelect)\nexport(''AntdCheckCard)\nexport(''AntdCheckCardGroup)\nexport(''AntdForm)\nexport(''AntdFormItem)\nexport(''AntdDraggerUpload)\nexport(''AntdPictureUpload)\nexport(''AntdUpload)\nexport(''AntdAlert)\nexport(''AntdDrawer)\nexport(''AntdMessage)\nexport(''AntdModal)\nexport(''AntdNotification)\nexport(''AntdPopconfirm)\nexport(''AntdPopupCard)\nexport(''AntdProgress)\nexport(''AntdResult)\nexport(''AntdSpin)\nexport(''AntdCustomSkeleton)\nexport(''AntdSkeleton)\nexport(''AntdSkeletonAvatar)\nexport(''AntdSkeletonButton)\nexport(''AntdSkeletonImage)\nexport(''AntdSkeletonInput)\nexport(''AntdFormRender)\nexport(''AntdButton)\nexport(''AntdFloatButton)\nexport(''AntdFloatButtonGroup)\nexport(''AntdIcon)\nexport(''AntdParagraph)\nexport(''AntdText)\nexport(''AntdTitle)\nexport(''AntdCenter)\nexport(''AntdCompact)\nexport(''AntdContent)\nexport(''AntdDivider)\nexport(''AntdFlex)\nexport(''AntdFooter)\nexport(''AntdHeader)\nexport(''AntdLayout)\nexport(''AntdSider)\nexport(''AntdSpace)\nexport(''AntdSplitter)\nexport(''AntdCol)\nexport(''AntdRow)\nexport(''AntdAnchor)\nexport(''AntdBreadcrumb)\nexport(''AntdDropdown)\nexport(''AntdMenu)\nexport(''AntdPageHeader)\nexport(''AntdPagination)\nexport(''AntdSteps)\nexport(''AntdAffix)\nexport(''AntdBackTop)\nexport(''AntdConfigProvider)\nexport(''AntdCopyText)\nexport(''AntdHappyProvider)\nexport(''AntdTour)\nexport(''AntdWatermark)\nexport(''Fragment)\n"
  },
  {
    "path": "Project.toml",
    "content": "\nname = \"FefferyAntdComponents\"\nuuid = \"1b08a953-4be3-4667-9a23-674b58f7de79\"\nauthors = [\"CNFeffery <fefferypzy@gmail.com>\"]\nversion = \"0.4.6-rc1\"\n\n[deps]\nDash = \"1b08a953-4be3-4667-9a23-3db579824955\"\n\n[compat]\njulia = \"1.2\"\nDash = \"0.1.3, 1.0\"\n"
  },
  {
    "path": "README-en_US.md",
    "content": "<p align=\"center\">\n\t<img src=\"./imgs/fac-logo.svg\" height=300></img>\n</p>\n<h1 align=\"center\">feffery-antd-components</h1>\n<div align=\"center\">\n\n[![GitHub](https://shields.io/badge/license-MIT-informational)](https://github.com/CNFeffery/feffery-antd-components/blob/master/LICENSE)\n[![PyPI](https://img.shields.io/pypi/v/feffery-antd-components.svg?color=dark-green)](https://pypi.org/project/feffery-antd-components/)\n[![Downloads](https://static.pepy.tech/badge/feffery-antd-components)](https://pepy.tech/project/feffery-antd-components)\n[![Downloads](https://static.pepy.tech/badge/feffery-antd-components/month)](https://pepy.tech/project/feffery-antd-components)\n[![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/CNFeffery/feffery-antd-components.svg)](http://isitmaintained.com/project/CNFeffery/feffery-antd-components \"Average time to resolve an issue\")\n[![Percentage of issues still open](http://isitmaintained.com/badge/open/CNFeffery/feffery-antd-components.svg)](http://isitmaintained.com/project/CNFeffery/feffery-antd-components \"Percentage of issues still open\")\n\n</div>\n\n[简体中文](./README.md) | English\n\nSubproject of `feffery-components` projects, third-party components library of `Plotly Dash`, based on the [Antd](https://github.com/ant-design/ant-design), brings many common and powerful components into `Dash`🥳, latest stable version: `0.4.5` (2026-02-12)\n\n## Dash Version Compatibility Notes\n\n| fac version | Compatible Dash Version |\n| :--------: | :---------------------: |\n| >=0.4.0    |        >=3.0.0          |\n| <0.4.0     |         <3.0.0          |\n\n## 1 Install\n\n```bash\npip install feffery-antd-components -U\n```\n\n## 2 Install the latest preview release version\n\n> [!NOTE]  \n> The latest preview release version (2026-03-12): `0.4.6rc1`\n\n```bash\npip install feffery-antd-components --pre -U\n```\n\n## 3 Use CDN\n\n```Python\n# just set serve_locally=False in dash.Dash()\napp = dash.Dash(serve_locally=False)\n```\n\n## 4 Documentation\n\n<a href='http://fac.feffery.tech/' target='_blank'>fac.feffery.tech</a>\n\n## 5 Internationalization\n\nSome components in `fac` have built-in copy information, and internationalization settings can be made through the parameter `locale`. The default is `'zh-cn'`, which is Simplified Chinese. You can set it to `'en-us'`, `'de-de'`, or `'ru-ru'` to use different languages, for example:\n\n```Python\nfac.AntdDatePicker(locale='en-us')\n```\n\n<img src=\"./imgs/国际化示例_en-us.png\" height=350></img>\n\n```Python\nfac.AntdDatePicker(locale='de-de')\n```\n\n<img src=\"./imgs/国际化示例_de-de.png\" height=350></img>\n\n## 6 Contributors\n\n<a href = \"https://github.com/CNFeffery/feffery-antd-components/graphs/contributors\">\n  <img src = \"https://contrib.rocks/image?repo=CNFeffery/feffery-antd-components\"/>\n</a>\n"
  },
  {
    "path": "README.md",
    "content": "<p align=\"center\">\n\t<img src=\"./imgs/fac-logo.svg\" height=300></img>\n</p>\n<h1 align=\"center\">feffery-antd-components</h1>\n<div align=\"center\">\n\n[![GitHub](https://shields.io/badge/license-MIT-informational)](https://github.com/CNFeffery/feffery-antd-components/blob/master/LICENSE)\n[![PyPI](https://img.shields.io/pypi/v/feffery-antd-components.svg?color=dark-green)](https://pypi.org/project/feffery-antd-components/)\n[![Downloads](https://static.pepy.tech/badge/feffery-antd-components)](https://pepy.tech/project/feffery-antd-components)\n[![Downloads](https://static.pepy.tech/badge/feffery-antd-components/month)](https://pepy.tech/project/feffery-antd-components)\n[![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/CNFeffery/feffery-antd-components.svg)](http://isitmaintained.com/project/CNFeffery/feffery-antd-components \"Average time to resolve an issue\")\n[![Percentage of issues still open](http://isitmaintained.com/badge/open/CNFeffery/feffery-antd-components.svg)](http://isitmaintained.com/project/CNFeffery/feffery-antd-components \"Percentage of issues still open\")\n\n</div>\n\n简体中文 | [English](./README-en_US.md)\n\n`feffery-components`计划子项目，`Plotly Dash`第三方组件库，基于`Antd`，将超多具有丰富功能的通用网页常用交互组件引入`Dash`的生态中 🥳，最新稳定版本：`0.4.5`（2026-02-12）\n\n## Dash版本兼容性说明\n\n| fac版本 | 适用Dash版本 |\n| :-----: | :----------: |\n| >=0.4.0 |   >=3.0.0    |\n| <0.4.0  |    <3.0.0    |\n\n## 1 最新版本安装方式\n\n```bash\npip install feffery-antd-components -U\n```\n\n## 2 最新预发布版本安装方式\n\n> [!NOTE]  \n> 最新预发布版本（2026-03-12）：`0.4.6rc1`\n\n```bash\npip install feffery-antd-components --pre -U\n```\n\n## 3 静态资源 CDN 加速方法\n\n```Python\n# 非debug模式下对Dash()传入参数serve_locally=False会强制浏览器端从unpkg cdn加载各个依赖的\n# xxx.min.js等静态资源，从而避免占用服务器带宽，适合中小型站点加速访问\napp = dash.Dash(serve_locally=False)\n```\n\n## 4 在线文档\n\n<a href='http://fac.feffery.tech/' target='_blank'>文档地址</a>\n\n## 5 国际化\n\n`fac`中的部分组件具有自带的文案信息，通过参数`locale`可以进行国际化设置，默认为`'zh-cn'`即简体中文，你可以设置为`'en-us'`、`'de-de'`、`'ru-ru'`来使用不同语言，譬如：\n\n```Python\nfac.AntdDatePicker(locale='en-us')\n```\n\n<img src=\"./imgs/国际化示例_en-us.png\" height=350></img>\n\n```Python\nfac.AntdDatePicker(locale='de-de')\n```\n\n<img src=\"./imgs/国际化示例_de-de.png\" height=350></img>\n\n## 6 贡献者\n\n<a href = \"https://github.com/CNFeffery/feffery-antd-components/graphs/contributors\">\n  <img src = \"https://contrib.rocks/image?repo=CNFeffery/feffery-antd-components\"/>\n</a>\n\n## 7 更多应用开发教程\n\n> 微信公众号「玩转 Dash」，欢迎扫码关注 👇\n\n<p align=\"center\" >\n  <img src=\"./imgs/公众号.png\" height=220 />\n</p>\n\n> 「玩转 Dash」知识星球，海量教程案例模板资源，专业的答疑咨询服务，欢迎扫码加入 👇\n\n<p align=\"center\" >\n  <img src=\"./imgs/知识星球.jpg\" height=220 />\n</p>"
  },
  {
    "path": "_validate_init.py",
    "content": "\"\"\"\nDO NOT MODIFY\nThis file is used to validate your publish settings.\n\"\"\"\n\nfrom __future__ import print_function\n\nimport importlib\nimport os\nimport sys\n\ncomponents_package = 'feffery_antd_components'\n\ncomponents_lib = importlib.import_module(components_package)\n\nmissing_dist_msg = 'Warning {} was not found in `{}.__init__.{}`!!!'\nmissing_manifest_msg = \"\"\"\nWarning {} was not found in `MANIFEST.in`!\nIt will not be included in the build!\n\"\"\"\n\nwith open('MANIFEST.in', 'r') as f:\n    manifest = f.read()\n\n\ndef check_dist(dist, filename):\n    # Support the dev bundle.\n    if filename.endswith('dev.js'):\n        return True\n\n    return any(\n        filename in x\n        for d in dist\n        for x in (\n            [d.get('relative_package_path')]\n            if not isinstance(d.get('relative_package_path'), list)\n            else d.get('relative_package_path')\n        )\n    )\n\n\ndef check_manifest(filename):\n    return filename in manifest\n\n\ndef check_file(dist, filename):\n    if not check_dist(dist, filename):\n        print(\n            missing_dist_msg.format(filename, components_package, '_js_dist'),\n            file=sys.stderr,\n        )\n    if not check_manifest(filename):\n        print(missing_manifest_msg.format(filename), file=sys.stderr)\n\n\nfor cur, _, files in os.walk(components_package):\n    for f in files:\n        if f.endswith('js'):\n            # noinspection PyProtectedMember\n            check_file(components_lib._js_dist, f)\n        elif f.endswith('css'):\n            # noinspection PyProtectedMember\n            check_file(components_lib._css_dist, f)\n        elif not f.endswith('py'):\n            check_manifest(f)\n"
  },
  {
    "path": "feffery_antd_components/AntdAccordion.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdAccordion(Component):\n    \"\"\"An AntdAccordion component.\n    手风琴组件AntdAccordion\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - styles (dict; optional):\n        细分控制子元素css样式.\n\n        `styles` is a dict with keys:\n\n        - header (dict; optional):\n            头部元素css样式.\n\n        - body (dict; optional):\n            内容元素css样式.\n\n    - classNames (dict; optional):\n        细分控制子元素css类名.\n\n        `classNames` is a dict with keys:\n\n        - header (string; optional):\n            头部元素css类名.\n\n        - body (string; optional):\n            内容元素css类名.\n\n    - items (list of dicts; optional):\n        定义手风琴子项.\n\n        `items` is a list of dicts with keys:\n\n        - children (a list of or a singular dash component, string or number; optional):\n            当前子项内部元素.\n\n        - className (string | dict; optional):\n            当前子项css类名，支持[动态css](/advanced-classname).\n\n        - style (dict; optional):\n            当前子项css样式.\n\n        - key (string | number; required):\n            必填，当前子项唯一key值.\n\n        - collapsible (a value equal to: 'header', 'disabled', 'icon'; optional):\n            当前子项折叠触发方式，可选项有`'header'`、`'disabled'`、`'icon'`.\n\n        - title (a list of or a singular dash component, string or number; optional):\n            当前子项标题元素.\n\n        - extra (a list of or a singular dash component, string or number; optional):\n            当前子项右上角额外元素.\n\n        - showArrow (boolean; optional):\n            是否展示当前手风琴项的箭头图标 默认值：`True`.\n\n        - forceRender (boolean; optional):\n            是否强制渲染内部元素 默认值：`False`.\n\n    - accordion (boolean; default True):\n        是否开启手风琴模式 默认值：`True`.\n\n    - activeKey (string | list of strings | number | list of numbers; optional):\n        监听或设置当前处于展开状态的手风琴项key值.\n\n    - defaultActiveKey (string | list of strings | number | list of numbers; optional):\n        设置初始化处于展开状态的手风琴项key值.\n\n    - bordered (boolean; default True):\n        是否渲染边框 默认值：`True`.\n\n    - size (a value equal to: 'large', 'middle', 'small'; default 'middle'):\n        组件尺寸规格，可选项有`'small'`、`'middle'`、`'large'` 默认值：`'middle'`.\n\n    - collapsible (a value equal to: 'header', 'disabled', 'icon'; optional):\n        设置所有子项折叠触发方式，可选项有`'header'`、`'disabled'`、`'icon'`.\n\n    - expandIconPosition (a value equal to: 'left', 'right'; default 'left'):\n        设置折叠图标位置，可选项有`'left'`、`'right'`.\n\n    - ghost (boolean; default False):\n        是否开启透明无边框模式 默认值：`False`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = ['items[].children', 'items[].title', 'items[].extra']\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdAccordion'\n    Styles = TypedDict('Styles', {'header': NotRequired[dict], 'body': NotRequired[dict]})\n\n    ClassNames = TypedDict('ClassNames', {'header': NotRequired[str], 'body': NotRequired[str]})\n\n    Items = TypedDict(\n        'Items',\n        {\n            'children': NotRequired[ComponentType],\n            'className': NotRequired[typing.Union[str, dict]],\n            'style': NotRequired[dict],\n            'key': typing.Union[str, NumberType],\n            'collapsible': NotRequired[Literal['header', 'disabled', 'icon']],\n            'title': NotRequired[ComponentType],\n            'extra': NotRequired[ComponentType],\n            'showArrow': NotRequired[bool],\n            'forceRender': NotRequired[bool],\n        },\n    )\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        styles: typing.Optional['Styles'] = None,\n        classNames: typing.Optional['ClassNames'] = None,\n        items: typing.Optional[typing.Sequence['Items']] = None,\n        accordion: typing.Optional[bool] = None,\n        activeKey: typing.Optional[\n            typing.Union[str, typing.Sequence[str], NumberType, typing.Sequence[NumberType]]\n        ] = None,\n        defaultActiveKey: typing.Optional[\n            typing.Union[str, typing.Sequence[str], NumberType, typing.Sequence[NumberType]]\n        ] = None,\n        bordered: typing.Optional[bool] = None,\n        size: typing.Optional[Literal['large', 'middle', 'small']] = None,\n        collapsible: typing.Optional[Literal['header', 'disabled', 'icon']] = None,\n        expandIconPosition: typing.Optional[Literal['left', 'right']] = None,\n        ghost: typing.Optional[bool] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'styles',\n            'classNames',\n            'items',\n            'accordion',\n            'activeKey',\n            'defaultActiveKey',\n            'bordered',\n            'size',\n            'collapsible',\n            'expandIconPosition',\n            'ghost',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'styles',\n            'classNames',\n            'items',\n            'accordion',\n            'activeKey',\n            'defaultActiveKey',\n            'bordered',\n            'size',\n            'collapsible',\n            'expandIconPosition',\n            'ghost',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdAccordion, self).__init__(**args)\n\n\nsetattr(AntdAccordion, '__init__', _explicitize_args(AntdAccordion.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdAffix.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdAffix(Component):\n    \"\"\"An AntdAffix component.\n    固钉组件AntdAffix\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，内嵌元素.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - offsetBottom (number; optional):\n        触发固钉效果的视窗底部距离像素阈值.\n\n    - offsetTop (number; default 0):\n        触发固钉效果的视窗顶部距离像素阈值 默认值：`0`.\n\n    - target (string; optional):\n        滚动事件监听的特定目标容器id.\n\n    - affixed (boolean; optional):\n        监听当前目标是否已触发固定.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = []\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdAffix'\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        offsetBottom: typing.Optional[NumberType] = None,\n        offsetTop: typing.Optional[NumberType] = None,\n        target: typing.Optional[str] = None,\n        affixed: typing.Optional[bool] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'offsetBottom',\n            'offsetTop',\n            'target',\n            'affixed',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'offsetBottom',\n            'offsetTop',\n            'target',\n            'affixed',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdAffix, self).__init__(children=children, **args)\n\n\nsetattr(AntdAffix, '__init__', _explicitize_args(AntdAffix.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdAlert.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdAlert(Component):\n    \"\"\"An AntdAlert component.\n    警告提示组件AntdAlert\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - message (a list of or a singular dash component, string or number; optional):\n        主要提示信息内容.\n\n    - description (a list of or a singular dash component, string or number; optional):\n        额外提示信息内容.\n\n    - type (a value equal to: 'success', 'info', 'warning', 'error'; default 'info'):\n        提示信息类型，可选项有`'success'`、`'info'`、`'warning'`、`'error'`\n        默认值：`'info'`.\n\n    - showIcon (boolean; default False):\n        是否显示额外图标 默认值：`False`.\n\n    - icon (a list of or a singular dash component, string or number; optional):\n        组件型，当`showIcon=True`时，用于自定义图标元素.\n\n    - closable (boolean; default False):\n        是否可关闭 默认值：`False`.\n\n    - messageRenderMode (a value equal to: 'default', 'loop-text', 'marquee'; default 'default'):\n        渲染模式，可选项有`'default'`、`'loop-text'`、`'marquee'` 默认值：`'default'`.\n\n    - action (a list of or a singular dash component, string or number; optional):\n        组件型，定义右上角额外操作区元素.\n\n    - banner (boolean; default False):\n        是否用作顶部公告 默认值：`False`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = ['message', 'description', 'icon', 'action']\n    _base_nodes = ['message', 'description', 'icon', 'action', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdAlert'\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        message: typing.Optional[ComponentType] = None,\n        description: typing.Optional[ComponentType] = None,\n        type: typing.Optional[Literal['success', 'info', 'warning', 'error']] = None,\n        showIcon: typing.Optional[bool] = None,\n        icon: typing.Optional[ComponentType] = None,\n        closable: typing.Optional[bool] = None,\n        messageRenderMode: typing.Optional[Literal['default', 'loop-text', 'marquee']] = None,\n        action: typing.Optional[ComponentType] = None,\n        banner: typing.Optional[bool] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'message',\n            'description',\n            'type',\n            'showIcon',\n            'icon',\n            'closable',\n            'messageRenderMode',\n            'action',\n            'banner',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'message',\n            'description',\n            'type',\n            'showIcon',\n            'icon',\n            'closable',\n            'messageRenderMode',\n            'action',\n            'banner',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdAlert, self).__init__(**args)\n\n\nsetattr(AntdAlert, '__init__', _explicitize_args(AntdAlert.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdAnchor.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdAnchor(Component):\n    \"\"\"An AntdAnchor component.\n    锚点组件AntdAnchor\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - linkDict (optional):\n        目录层次数据结构.\n\n    - direction (a value equal to: 'vertical', 'horizontal'; default 'vertical'):\n        导航方向，可选项有`'vertical'`、`'horizontal'`，其中`'horizontal'`方向下不支持子目录\n        默认值：`'vertical'`.\n\n    - align (a value equal to: 'left', 'right'; default 'right'):\n        锚点位置，可选项有`'left'`、`'right'` 默认值：`'right'`.\n\n    - containerId (string; optional):\n        锚点目标容器id.\n\n    - targetOffset (number; optional):\n        锚点位移偏移量，默认同参数offsetTop.\n\n    - affix (boolean; default True):\n        是否开启固定模式 默认值：`True`.\n\n    - bounds (number; default 5):\n        锚点像素边距 默认值：`5`.\n\n    - offsetTop (number; optional):\n        设置距离窗口顶部触发锚定效果的指定像素偏移量.\n\n    - replace (boolean; default False):\n        设置为`True`后，浏览器后退或前进时，不会跳转到锚点地址 默认值：`False`.\n\n    - currentAnchor (string; optional):\n        强制指定当前处于高亮状态的锚点链接.\n\n    - clickedLink (dict; optional):\n        监听锚点节点点击事件.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = []\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdAnchor'\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        linkDict: typing.Optional[typing.Any] = None,\n        direction: typing.Optional[Literal['vertical', 'horizontal']] = None,\n        align: typing.Optional[Literal['left', 'right']] = None,\n        containerId: typing.Optional[str] = None,\n        targetOffset: typing.Optional[NumberType] = None,\n        affix: typing.Optional[bool] = None,\n        bounds: typing.Optional[NumberType] = None,\n        offsetTop: typing.Optional[NumberType] = None,\n        replace: typing.Optional[bool] = None,\n        currentAnchor: typing.Optional[str] = None,\n        clickedLink: typing.Optional[dict] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'linkDict',\n            'direction',\n            'align',\n            'containerId',\n            'targetOffset',\n            'affix',\n            'bounds',\n            'offsetTop',\n            'replace',\n            'currentAnchor',\n            'clickedLink',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'linkDict',\n            'direction',\n            'align',\n            'containerId',\n            'targetOffset',\n            'affix',\n            'bounds',\n            'offsetTop',\n            'replace',\n            'currentAnchor',\n            'clickedLink',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdAnchor, self).__init__(**args)\n\n\nsetattr(AntdAnchor, '__init__', _explicitize_args(AntdAnchor.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdAvatar.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdAvatar(Component):\n    \"\"\"An AntdAvatar component.\n    头像组件AntdAvatar\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - mode (a value equal to: 'text', 'icon', 'image'; default 'icon'):\n        头像模式，可选项有`'text'`、`'icon'`、`'image'` 默认值：`'icon'`.\n\n    - gap (number; default 4):\n        `mode='text'`时，设置字符距离左右两侧边界的像素距离 默认值：`4`.\n\n    - text (string; optional):\n        `mode='text'`时，设置文字内容.\n\n    - icon (string; optional):\n        `mode='icon'`时，设置图标，同**AntdIcon**的`icon`参数.\n\n    - iconRenderer (a value equal to: 'AntdIcon', 'fontawesome'; default 'AntdIcon'):\n        `mode='icon'`时，设置图标渲染方式，可选项有`'AntdIcon'`、`'fontawesome'`.\n\n    - alt (string; optional):\n        `mode='image'`时，设置图像无法显示时的占位文字.\n\n    - src (string; optional):\n        `mode='image'`时，设置图片地址.\n\n    - srcSet (string; optional):\n        `mode='image'`时，设置图片base64地址.\n\n    - draggable (boolean | a value equal to: 'true', 'false'; optional):\n        `mode='image'`时，设置图片是否允许拖拽.\n\n    - crossOrigin (a value equal to: 'anonymous', 'use-credentials', ''; optional):\n        `mode='image'`时，设置图片的CORS属性，可选项有`'anonymous'`、`'use-credentials'`、`''`.\n\n    - size (dict; optional):\n        配置头像尺寸，可传入数值型代表像素尺寸（支持响应式），或传入字符型使用预设尺寸规格，可选项有`'large'`、`'small'`、`'default'`.\n\n        `size` is a number | a value equal to: 'large', 'small', 'default'\n        | dict with keys:\n\n        - xs (number; optional)\n\n        - sm (number; optional)\n\n        - md (number; optional)\n\n        - lg (number; optional)\n\n        - xl (number; optional)\n\n        - xxl (number; optional)\n\n    - shape (a value equal to: 'circle', 'square'; default 'circle'):\n        头像形状，可选项有`'circle'`、`'square'` 默认值：`'circle'`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = []\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdAvatar'\n    Size = TypedDict(\n        'Size',\n        {\n            'xs': NotRequired[NumberType],\n            'sm': NotRequired[NumberType],\n            'md': NotRequired[NumberType],\n            'lg': NotRequired[NumberType],\n            'xl': NotRequired[NumberType],\n            'xxl': NotRequired[NumberType],\n        },\n    )\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        mode: typing.Optional[Literal['text', 'icon', 'image']] = None,\n        gap: typing.Optional[NumberType] = None,\n        text: typing.Optional[str] = None,\n        icon: typing.Optional[str] = None,\n        iconRenderer: typing.Optional[Literal['AntdIcon', 'fontawesome']] = None,\n        alt: typing.Optional[str] = None,\n        src: typing.Optional[str] = None,\n        srcSet: typing.Optional[str] = None,\n        draggable: typing.Optional[typing.Union[bool, Literal['true', 'false']]] = None,\n        crossOrigin: typing.Optional[Literal['anonymous', 'use-credentials', '']] = None,\n        size: typing.Optional[\n            typing.Union[NumberType, Literal['large', 'small', 'default'], 'Size']\n        ] = None,\n        shape: typing.Optional[Literal['circle', 'square']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'mode',\n            'gap',\n            'text',\n            'icon',\n            'iconRenderer',\n            'alt',\n            'src',\n            'srcSet',\n            'draggable',\n            'crossOrigin',\n            'size',\n            'shape',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'mode',\n            'gap',\n            'text',\n            'icon',\n            'iconRenderer',\n            'alt',\n            'src',\n            'srcSet',\n            'draggable',\n            'crossOrigin',\n            'size',\n            'shape',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdAvatar, self).__init__(**args)\n\n\nsetattr(AntdAvatar, '__init__', _explicitize_args(AntdAvatar.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdAvatarGroup.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdAvatarGroup(Component):\n    \"\"\"An AntdAvatarGroup component.\n    头像组合组件AntdAvatarGroup\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，传入组内各`AntdAvatar`组件.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - max (dict; optional):\n        配置最多显示功能相关参数.\n\n        `max` is a dict with keys:\n\n        - count (number; optional):\n            最多显示的头像个数，默认无限制.\n\n        - style (dict; optional):\n            头像省略部分css样式.\n\n        - popover (dict; optional):\n            展开层相关配置参数.\n\n            `popover` is a dict with keys:\n\n            - placement (a value equal to: 'top', 'bottom', 'right'; optional):\n                超出`maxCount`数量限制之外的头像气泡卡片弹出方位，可选项有`'top'`、`'bottom'`、`'right'`\n                默认值：`'top'`.\n\n            - trigger (a value equal to: 'hover', 'click'; optional):\n                超出`maxCount`数量限制之外的头像气泡卡片弹出触发方式，可选项有`'hover'`、`'click'`\n                默认值：`'hover'`.\n\n    - size (dict; default 'default'):\n        统一设置内部头像尺寸规格，传入数值型表示像素尺寸，传入字符型表示内置规格，可选项有`'large'`、`'small'`、`'default'`，支持响应式断点\n        默认值：`'default'`.\n\n        `size` is a number | a value equal to: 'large', 'small', 'default'\n        | dict with keys:\n\n        - xs (number; optional)\n\n        - sm (number; optional)\n\n        - md (number; optional)\n\n        - lg (number; optional)\n\n        - xl (number; optional)\n\n        - xxl (number; optional)\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = []\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdAvatarGroup'\n    MaxPopover = TypedDict(\n        'MaxPopover',\n        {\n            'placement': NotRequired[Literal['top', 'bottom', 'right']],\n            'trigger': NotRequired[Literal['hover', 'click']],\n        },\n    )\n\n    Max = TypedDict(\n        'Max',\n        {\n            'count': NotRequired[NumberType],\n            'style': NotRequired[dict],\n            'popover': NotRequired['MaxPopover'],\n        },\n    )\n\n    Size = TypedDict(\n        'Size',\n        {\n            'xs': NotRequired[NumberType],\n            'sm': NotRequired[NumberType],\n            'md': NotRequired[NumberType],\n            'lg': NotRequired[NumberType],\n            'xl': NotRequired[NumberType],\n            'xxl': NotRequired[NumberType],\n        },\n    )\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        max: typing.Optional['Max'] = None,\n        size: typing.Optional[\n            typing.Union[NumberType, Literal['large', 'small', 'default'], 'Size']\n        ] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'max',\n            'size',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'max',\n            'size',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdAvatarGroup, self).__init__(children=children, **args)\n\n\nsetattr(AntdAvatarGroup, '__init__', _explicitize_args(AntdAvatarGroup.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdBackTop.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdBackTop(Component):\n    \"\"\"An AntdBackTop component.\n    回到顶部组件AntdBackTop\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - duration (number; default 0.45):\n        回到顶部过程耗时，单位：秒 默认值：`0.45`.\n\n    - visibilityHeight (number; default 400):\n        回到顶部按钮显示时对应的页面滚动像素高度阈值 默认值：`400`.\n\n    - containerId (string; optional):\n        滚动事件监听的特定目标容器id.\n\n    - containerSelector (string; optional):\n        滚动事件监听的特定目标容器js选择代码，优先级低于containerId.\n\n    - nClicks (number; default 0):\n        监听回到顶部按钮累计被点击次数 默认值：`0`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = []\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdBackTop'\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        duration: typing.Optional[NumberType] = None,\n        visibilityHeight: typing.Optional[NumberType] = None,\n        containerId: typing.Optional[str] = None,\n        containerSelector: typing.Optional[str] = None,\n        nClicks: typing.Optional[NumberType] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'duration',\n            'visibilityHeight',\n            'containerId',\n            'containerSelector',\n            'nClicks',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'duration',\n            'visibilityHeight',\n            'containerId',\n            'containerSelector',\n            'nClicks',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdBackTop, self).__init__(**args)\n\n\nsetattr(AntdBackTop, '__init__', _explicitize_args(AntdBackTop.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdBadge.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdBadge(Component):\n    \"\"\"An AntdBadge component.\n    徽标组件AntdBadge\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，定义徽标添加目标元素.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - styles (dict; optional):\n        细分控制子元素css样式.\n\n        `styles` is a dict with keys:\n\n        - root (dict; optional):\n            控制根元素css样式.\n\n        - indicator (dict; optional):\n            控制徽标元素css样式.\n\n    - classNames (dict; optional):\n        细分控制子元素css类.\n\n        `classNames` is a dict with keys:\n\n        - root (string; optional):\n            控制根元素css类.\n\n        - indicator (string; optional):\n            控制徽标元素css类.\n\n    - color (string; optional):\n        徽标颜色.\n\n    - count (number; optional):\n        徽标显示的数字.\n\n    - dot (boolean; default False):\n        是否用圆点代替数字显示 默认值：`False`.\n\n    - showZero (boolean; default False):\n        当`count=0`时，是否强制显示数字 默认值：`False`.\n\n    - overflowCount (number; default 99):\n        数字显示上限，超出会以显示`+`后缀 默认值：`99`.\n\n    - offset (list of numbers; optional):\n        徽标在水平、竖直方向上的像素偏移，格式为`[水平偏移, 竖直偏移]`.\n\n    - status (a value equal to: 'success', 'processing', 'default', 'error', 'warning'; optional):\n        徽标状态，可选项有`'success'`、`'processing'`、`'default'`、`'error'`、`'warning'`.\n\n    - text (string; optional):\n        参数`status`有效时，设置徽标文本内容.\n\n    - title (string; optional):\n        徽标鼠标悬停显示文字内容.\n\n    - size (a value equal to: 'default', 'small'; default 'default'):\n        徽标尺寸规格，可选项有`'default'`、`'small'`.\n\n    - nClicks (number; default 0):\n        监听徽标累计被点击次数 默认值：`0`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = []\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdBadge'\n    Styles = TypedDict('Styles', {'root': NotRequired[dict], 'indicator': NotRequired[dict]})\n\n    ClassNames = TypedDict('ClassNames', {'root': NotRequired[str], 'indicator': NotRequired[str]})\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        styles: typing.Optional['Styles'] = None,\n        classNames: typing.Optional['ClassNames'] = None,\n        color: typing.Optional[str] = None,\n        count: typing.Optional[NumberType] = None,\n        dot: typing.Optional[bool] = None,\n        showZero: typing.Optional[bool] = None,\n        overflowCount: typing.Optional[NumberType] = None,\n        offset: typing.Optional[typing.Sequence[NumberType]] = None,\n        status: typing.Optional[\n            Literal['success', 'processing', 'default', 'error', 'warning']\n        ] = None,\n        text: typing.Optional[str] = None,\n        title: typing.Optional[str] = None,\n        size: typing.Optional[Literal['default', 'small']] = None,\n        nClicks: typing.Optional[NumberType] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'styles',\n            'classNames',\n            'color',\n            'count',\n            'dot',\n            'showZero',\n            'overflowCount',\n            'offset',\n            'status',\n            'text',\n            'title',\n            'size',\n            'nClicks',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'styles',\n            'classNames',\n            'color',\n            'count',\n            'dot',\n            'showZero',\n            'overflowCount',\n            'offset',\n            'status',\n            'text',\n            'title',\n            'size',\n            'nClicks',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdBadge, self).__init__(children=children, **args)\n\n\nsetattr(AntdBadge, '__init__', _explicitize_args(AntdBadge.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdBreadcrumb.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdBreadcrumb(Component):\n    \"\"\"An AntdBreadcrumb component.\n    面包屑组件AntdBreadcrumb\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - items (list of dicts; optional):\n        面包屑节点数据结构.\n\n        `items` is a list of dicts with keys:\n\n        - title (string; optional):\n            节点标题.\n\n        - key (string; optional):\n            节点唯一key值.\n\n        - href (string; optional):\n            节点链接地址.\n\n        - target (string; optional):\n            节点链接跳转行为.\n\n        - icon (string; optional):\n            节点前缀图标名称，与`iconRenderer`方式相关联，`'AntdIcon'`方式下同AntdIcon的icon参数，`'fontawesome'`方式下代表图标的css类名.\n\n        - iconRenderer (a value equal to: 'AntdIcon', 'fontawesome'; optional):\n            前缀图标渲染方式，可选项有`'AntdIcon'`、`'fontawesome'` 默认值：`'AntdIcon'`.\n\n        - menuItems (list of dicts; optional):\n            为当前节点设置下拉菜单生成所需的数据结构.\n\n            `menuItems` is a list of dicts with keys:\n\n            - title (string; optional):\n\n                下拉菜单节点标题.\n\n            - key (string; optional):\n\n                下拉菜单节点唯一key值.\n\n            - href (string; optional):\n\n                下拉菜单节点链接地址.\n\n            - target (string; optional):\n\n                下拉菜单节点链接跳转方式.\n\n            - disabled (boolean; optional):\n\n                是否禁用当前下拉菜单节点.\n\n            - icon (string; optional):\n\n                下拉菜单节点前缀图标名称，与`iconRenderer`方式相关联，`'AntdIcon'`方式下同AntdIcon的icon参数，`'fontawesome'`方式下代表图标的css类名.\n\n            - iconRenderer (a value equal to: 'AntdIcon', 'fontawesome'; optional):\n\n                前缀图标渲染方式，可选项有`'AntdIcon'`、`'fontawesome'` 默认值：`'AntdIcon'`.\n\n    - separator (a list of or a singular dash component, string or number; default '/'):\n        组件型，分隔符 默认值：`'/'`.\n\n    - clickedItem (dict; optional):\n        监听面包屑节点点击事件.\n\n        `clickedItem` is a dict with keys:\n\n        - itemTitle (string; optional):\n            对应节点标题.\n\n        - itemKey (string; optional):\n            对应节点key值.\n\n        - menuItemTitle (string; optional):\n            对应下拉菜单节点标题.\n\n        - menuItemKey (string; optional):\n            对应下拉菜单节点key值.\n\n        - timestamp (number; optional):\n            点击事件时间戳.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = ['separator']\n    _base_nodes = ['separator', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdBreadcrumb'\n    ItemsMenuItems = TypedDict(\n        'ItemsMenuItems',\n        {\n            'title': NotRequired[str],\n            'key': NotRequired[str],\n            'href': NotRequired[str],\n            'target': NotRequired[str],\n            'disabled': NotRequired[bool],\n            'icon': NotRequired[str],\n            'iconRenderer': NotRequired[Literal['AntdIcon', 'fontawesome']],\n        },\n    )\n\n    Items = TypedDict(\n        'Items',\n        {\n            'title': NotRequired[str],\n            'key': NotRequired[str],\n            'href': NotRequired[str],\n            'target': NotRequired[str],\n            'icon': NotRequired[str],\n            'iconRenderer': NotRequired[Literal['AntdIcon', 'fontawesome']],\n            'menuItems': NotRequired[typing.Sequence['ItemsMenuItems']],\n        },\n    )\n\n    ClickedItem = TypedDict(\n        'ClickedItem',\n        {\n            'itemTitle': NotRequired[str],\n            'itemKey': NotRequired[str],\n            'menuItemTitle': NotRequired[str],\n            'menuItemKey': NotRequired[str],\n            'timestamp': NotRequired[NumberType],\n        },\n    )\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        items: typing.Optional[typing.Sequence['Items']] = None,\n        separator: typing.Optional[ComponentType] = None,\n        clickedItem: typing.Optional['ClickedItem'] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'items',\n            'separator',\n            'clickedItem',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'items',\n            'separator',\n            'clickedItem',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdBreadcrumb, self).__init__(**args)\n\n\nsetattr(AntdBreadcrumb, '__init__', _explicitize_args(AntdBreadcrumb.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdButton.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdButton(Component):\n    \"\"\"An AntdButton component.\n    按钮组件AntdButton\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，按钮内嵌元素.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - styles (dict; optional):\n        细分控制子元素css样式.\n\n        `styles` is a dict with keys:\n\n        - icon (dict; optional):\n            按钮图标元素css样式.\n\n    - classNames (dict; optional):\n        细分控制子元素css类名.\n\n        `classNames` is a dict with keys:\n\n        - icon (string; optional):\n            按钮图标元素css类名.\n\n    - loadingChildren (a list of or a singular dash component, string or number; optional):\n        组件型，按钮加载状态下显示的内嵌元素.\n\n    - type (a value equal to: 'default', 'primary', 'dashed', 'link', 'text'; default 'default'):\n        按钮类型，可选项有`'default'`、`'primary'`、`'dashed'`、`'link'`、`'text'`\n        默认值：`'default'`.\n\n    - href (string; optional):\n        按钮点击跳转链接地址.\n\n    - target (string; default '_blank'):\n        按钮点击跳转链接方式 默认值：`'_blank'`.\n\n    - autoInsertSpace (boolean; default True):\n        按钮两个汉字内是否插入空格 默认值：`True`.\n\n    - block (boolean; default False):\n        按钮是否渲染为块级元素（宽度撑满父容器） 默认值：`False`.\n\n    - danger (boolean; default False):\n        按钮是否呈现危险样式 默认值：`False`.\n\n    - disabled (boolean; default False):\n        按钮是否呈现禁用状态 默认值：`False`.\n\n    - ghost (boolean; default False):\n        按钮是否呈现透明背景状态 默认值：`False`.\n\n    - shape (a value equal to: 'default', 'circle', 'round'; default 'default'):\n        按钮形状，可选项有`'default'`、`'circle'`、`'round'` 默认值：`'default'`.\n\n    - size (a value equal to: 'small', 'middle', 'large'; default 'middle'):\n        按钮尺寸规格，可选项有`'small'`、`'middle'`、`'large'` 默认值：`'middle'`.\n\n    - nClicks (number; default 0):\n        按钮累计点击次数，用于监听按钮点击行为 默认值：`0`.\n\n    - clickExecuteJsString (string; optional):\n        按钮点击时需要附带执行的js程序字符串.\n\n    - debounceWait (number; default 0):\n        按钮点击事件监听防抖延时，单位：毫秒 默认值：`0`.\n\n    - icon (a list of or a singular dash component, string or number; optional):\n        组件型，按钮内嵌前缀图标元素.\n\n    - iconPosition (a value equal to: 'start', 'end'; default 'start'):\n        按钮图标组件的位置，可选项有`'start'`、`'end'` 默认值：`'start'`.\n\n    - loading (boolean; optional):\n        按钮是否呈现加载状态 默认值：`False`.\n\n    - autoSpin (boolean; default False):\n        当前按钮在每次点击后是否自动进入加载中状态 默认值：`False`.\n\n    - motionType (a value equal to: 'happy-work'; optional):\n        按钮额外的特殊交互类型，可选项有`'happy-work'`.\n\n    - color (a value equal to: 'default', 'primary', 'danger', 'blue', 'purple', 'cyan', 'green', 'magenta', 'pink', 'red', 'orange', 'yellow', 'volcano', 'geekblue', 'lime', 'gold'; optional):\n        按钮颜色风格，可选项有`'default'`、`'primary'`、`'danger'`，以及可用的一系列内置颜色：`'blue'`、`'purple'`、`'cyan'`、`'green'`、`'magenta'`、`'pink'`、`'red'`、`'orange'`、`'yellow'`、`'volcano'`、`'geekblue'`、`'lime'`、`'gold'`.\n\n    - variant (a value equal to: 'outlined', 'dashed', 'solid', 'filled', 'text', 'link'; optional):\n        形态变体类型，可选项有`'outlined'`、`'dashed'`、`'solid'`、`'filled'`、`'text'`、`'link'`.\n\n    - title (string; optional):\n        原生按钮title属性.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = ['loadingChildren', 'icon']\n    _base_nodes = ['loadingChildren', 'icon', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdButton'\n    Styles = TypedDict('Styles', {'icon': NotRequired[dict]})\n\n    ClassNames = TypedDict('ClassNames', {'icon': NotRequired[str]})\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        styles: typing.Optional['Styles'] = None,\n        classNames: typing.Optional['ClassNames'] = None,\n        loadingChildren: typing.Optional[ComponentType] = None,\n        type: typing.Optional[Literal['default', 'primary', 'dashed', 'link', 'text']] = None,\n        href: typing.Optional[str] = None,\n        target: typing.Optional[str] = None,\n        autoInsertSpace: typing.Optional[bool] = None,\n        block: typing.Optional[bool] = None,\n        danger: typing.Optional[bool] = None,\n        disabled: typing.Optional[bool] = None,\n        ghost: typing.Optional[bool] = None,\n        shape: typing.Optional[Literal['default', 'circle', 'round']] = None,\n        size: typing.Optional[Literal['small', 'middle', 'large']] = None,\n        nClicks: typing.Optional[NumberType] = None,\n        clickExecuteJsString: typing.Optional[str] = None,\n        debounceWait: typing.Optional[NumberType] = None,\n        icon: typing.Optional[ComponentType] = None,\n        iconPosition: typing.Optional[Literal['start', 'end']] = None,\n        loading: typing.Optional[bool] = None,\n        autoSpin: typing.Optional[bool] = None,\n        motionType: typing.Optional[Literal['happy-work']] = None,\n        color: typing.Optional[\n            Literal[\n                'default',\n                'primary',\n                'danger',\n                'blue',\n                'purple',\n                'cyan',\n                'green',\n                'magenta',\n                'pink',\n                'red',\n                'orange',\n                'yellow',\n                'volcano',\n                'geekblue',\n                'lime',\n                'gold',\n            ]\n        ] = None,\n        variant: typing.Optional[\n            Literal['outlined', 'dashed', 'solid', 'filled', 'text', 'link']\n        ] = None,\n        title: typing.Optional[str] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'styles',\n            'classNames',\n            'loadingChildren',\n            'type',\n            'href',\n            'target',\n            'autoInsertSpace',\n            'block',\n            'danger',\n            'disabled',\n            'ghost',\n            'shape',\n            'size',\n            'nClicks',\n            'clickExecuteJsString',\n            'debounceWait',\n            'icon',\n            'iconPosition',\n            'loading',\n            'autoSpin',\n            'motionType',\n            'color',\n            'variant',\n            'title',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'styles',\n            'classNames',\n            'loadingChildren',\n            'type',\n            'href',\n            'target',\n            'autoInsertSpace',\n            'block',\n            'danger',\n            'disabled',\n            'ghost',\n            'shape',\n            'size',\n            'nClicks',\n            'clickExecuteJsString',\n            'debounceWait',\n            'icon',\n            'iconPosition',\n            'loading',\n            'autoSpin',\n            'motionType',\n            'color',\n            'variant',\n            'title',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdButton, self).__init__(children=children, **args)\n\n\nsetattr(AntdButton, '__init__', _explicitize_args(AntdButton.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdCalendar.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdCalendar(Component):\n    \"\"\"An AntdCalendar component.\n    日历组件AntdCalendar\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - name (string; optional):\n        配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值.\n\n    - enableBatchControl (boolean; default True):\n        控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能 默认值：`True`.\n\n    - locale (a value equal to: 'zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr'; default 'zh-cn'):\n        组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n        默认值：`'zh-cn'`.\n\n    - format (string; default 'YYYY-MM-DD'):\n        日期显示格式，[参考资料](https://day.js.org/docs/en/display/format)\n        默认值：`'YYYY-MM-DD'`.\n\n    - size (a value equal to: 'default', 'large'; default 'default'):\n        日历尺寸规格，可选项有`'default'`、`'large'` 默认值：`'default'`.\n\n    - value (string; optional):\n        监听或设置当前选中日期值.\n\n    - defaultValue (string; optional):\n        初始化选中日期值.\n\n    - customCells (list of dicts; optional):\n        自定义对应月份、日期的单元格显示内容.\n\n        `customCells` is a list of dicts with keys:\n\n        - type (a value equal to: 'month', 'date'; required):\n            必填，当前项对应类型，可选项有`'month'`、`'date'`.\n\n        - year (number; optional):\n            当前项匹配的年份值.\n\n        - month (number; optional):\n            当前项匹配的月份值.\n\n        - date (number; optional):\n            当前项匹配的日期值.\n\n        - content (a list of or a singular dash component, string or number; optional):\n            自定义内容.\n\n    - cellClickEvent (dict; optional):\n        监听日期单元格点击事件.\n\n        `cellClickEvent` is a dict with keys:\n\n        - type (string; optional):\n            记录面板类型.\n\n        - timestamp (number; optional):\n            事件发生时间戳.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\n\n    - persistence (boolean | string | number; optional):\n        是否开启[属性持久化](/prop-persistence).\n\n    - persisted_props (list of a value equal to: 'value's; optional):\n        开启属性持久化功能的若干属性名，可选项有`'value'` 默认值：`['value']`.\n\n    - persistence_type (a value equal to: 'local', 'session', 'memory'; optional):\n        属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n        默认值：`'local'`.\"\"\"\n\n    _children_props: typing.List[str] = ['customCells[].content']\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdCalendar'\n    CustomCells = TypedDict(\n        'CustomCells',\n        {\n            'type': Literal['month', 'date'],\n            'year': NotRequired[NumberType],\n            'month': NotRequired[NumberType],\n            'date': NotRequired[NumberType],\n            'content': NotRequired[ComponentType],\n        },\n    )\n\n    CellClickEvent = TypedDict(\n        'CellClickEvent', {'type': NotRequired[str], 'timestamp': NotRequired[NumberType]}\n    )\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        name: typing.Optional[str] = None,\n        enableBatchControl: typing.Optional[bool] = None,\n        locale: typing.Optional[Literal['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']] = None,\n        format: typing.Optional[str] = None,\n        size: typing.Optional[Literal['default', 'large']] = None,\n        value: typing.Optional[str] = None,\n        defaultValue: typing.Optional[str] = None,\n        customCells: typing.Optional[typing.Sequence['CustomCells']] = None,\n        cellClickEvent: typing.Optional['CellClickEvent'] = None,\n        persistence: typing.Optional[typing.Union[bool, str, NumberType]] = None,\n        persisted_props: typing.Optional[typing.Sequence[Literal['value']]] = None,\n        persistence_type: typing.Optional[Literal['local', 'session', 'memory']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'name',\n            'enableBatchControl',\n            'locale',\n            'format',\n            'size',\n            'value',\n            'defaultValue',\n            'customCells',\n            'cellClickEvent',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'name',\n            'enableBatchControl',\n            'locale',\n            'format',\n            'size',\n            'value',\n            'defaultValue',\n            'customCells',\n            'cellClickEvent',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdCalendar, self).__init__(**args)\n\n\nsetattr(AntdCalendar, '__init__', _explicitize_args(AntdCalendar.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdCard.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdCard(Component):\n    \"\"\"An AntdCard component.\n\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，内嵌元素.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - styles (dict; optional):\n        细分控制子元素css样式.\n\n        `styles` is a dict with keys:\n\n        - header (dict; optional):\n            设置卡片头部区域css样式.\n\n        - title (dict; optional):\n            设置卡片标题css样式.\n\n        - extra (dict; optional):\n            设置卡片右上角的操作区域css样式.\n\n        - cover (dict; optional):\n            设置标题封面css样式.\n\n        - body (dict; optional):\n            设置卡片内容区域css样式.\n\n        - actions (dict; optional):\n            设置卡片底部操作组css样式.\n\n    - classNames (dict; optional):\n        细分控制子元素css类名.\n\n        `classNames` is a dict with keys:\n\n        - header (string; optional):\n            设置卡片头部区域css类名.\n\n        - title (string; optional):\n            设置卡片标题css类名.\n\n        - extra (string; optional):\n            设置卡片右上角的操作区域css类名.\n\n        - cover (string; optional):\n            设置标题封面css类名.\n\n        - body (string; optional):\n            设置卡片内容区域css类名.\n\n        - actions (string; optional):\n            设置卡片底部操作组css类名.\n\n    - actions (a list of or a singular dash component, string or number; optional):\n        组件型，底部操作区元素.\n\n    - title (a list of or a singular dash component, string or number; optional):\n        组件型，标题内容.\n\n    - extraLink (dict; optional):\n        配置卡片右上角额外链接相关参数.\n\n        `extraLink` is a dict with keys:\n\n        - content (string; optional):\n            链接文字内容.\n\n        - href (string; optional):\n            链接地址.\n\n        - target (string; optional):\n            链接跳转行为.\n\n        - className (string; optional):\n            链接css类名.\n\n        - style (dict; optional):\n            链接css样式.\n\n    - extra (a list of or a singular dash component, string or number; optional):\n        组件型，卡片右上角额外元素，优先级高于`extraLink`.\n\n    - coverImg (dict; optional):\n        配置封面图片相关参数.\n\n        `coverImg` is a dict with keys:\n\n        - src (string; optional):\n            图片资源地址.\n\n        - alt (string; optional):\n            图片alt信息.\n\n        - className (string; optional):\n            图片css类名.\n\n        - style (dict; optional):\n            图片css样式.\n\n    - variant (a value equal to: 'outlined', 'borderless'; default 'outlined'):\n        卡片形态变体，可选项有`'outlined'`、`'borderless'` 默认值：`'outlined'`.\n\n    - hoverable (boolean; default False):\n        是否在鼠标悬停时显示特殊样式 默认值：`False`.\n\n    - size (a value equal to: 'default', 'small'; default 'default'):\n        卡片尺寸规格，可选项有`'default'`、`'small'` 默认值：`'default'`.\n\n    - nClicks (number; default 0):\n        监听当前卡片累计点击次数 默认值：`0`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = ['actions', 'title', 'extra']\n    _base_nodes = ['actions', 'title', 'extra', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdCard'\n    Styles = TypedDict(\n        'Styles',\n        {\n            'header': NotRequired[dict],\n            'title': NotRequired[dict],\n            'extra': NotRequired[dict],\n            'cover': NotRequired[dict],\n            'body': NotRequired[dict],\n            'actions': NotRequired[dict],\n        },\n    )\n\n    ClassNames = TypedDict(\n        'ClassNames',\n        {\n            'header': NotRequired[str],\n            'title': NotRequired[str],\n            'extra': NotRequired[str],\n            'cover': NotRequired[str],\n            'body': NotRequired[str],\n            'actions': NotRequired[str],\n        },\n    )\n\n    ExtraLink = TypedDict(\n        'ExtraLink',\n        {\n            'content': NotRequired[str],\n            'href': NotRequired[str],\n            'target': NotRequired[str],\n            'className': NotRequired[str],\n            'style': NotRequired[dict],\n        },\n    )\n\n    CoverImg = TypedDict(\n        'CoverImg',\n        {\n            'src': NotRequired[str],\n            'alt': NotRequired[str],\n            'className': NotRequired[str],\n            'style': NotRequired[dict],\n        },\n    )\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        styles: typing.Optional['Styles'] = None,\n        classNames: typing.Optional['ClassNames'] = None,\n        actions: typing.Optional[ComponentType] = None,\n        title: typing.Optional[ComponentType] = None,\n        extraLink: typing.Optional['ExtraLink'] = None,\n        extra: typing.Optional[ComponentType] = None,\n        coverImg: typing.Optional['CoverImg'] = None,\n        variant: typing.Optional[Literal['outlined', 'borderless']] = None,\n        hoverable: typing.Optional[bool] = None,\n        size: typing.Optional[Literal['default', 'small']] = None,\n        nClicks: typing.Optional[NumberType] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'styles',\n            'classNames',\n            'actions',\n            'title',\n            'extraLink',\n            'extra',\n            'coverImg',\n            'variant',\n            'hoverable',\n            'size',\n            'nClicks',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'styles',\n            'classNames',\n            'actions',\n            'title',\n            'extraLink',\n            'extra',\n            'coverImg',\n            'variant',\n            'hoverable',\n            'size',\n            'nClicks',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdCard, self).__init__(children=children, **args)\n\n\nsetattr(AntdCard, '__init__', _explicitize_args(AntdCard.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdCardGrid.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdCardGrid(Component):\n    \"\"\"An AntdCardGrid component.\n    卡片网格组件AntdCardGrid\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，内嵌元素.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - hoverable (boolean; default True):\n        鼠标悬停时是否显示特殊样式 默认值：`True`.\n\n    - nClicks (number; default 0):\n        监听当前卡片网格累计点击次数 默认值：`0`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = []\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdCardGrid'\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        hoverable: typing.Optional[bool] = None,\n        nClicks: typing.Optional[NumberType] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'hoverable',\n            'nClicks',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'hoverable',\n            'nClicks',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdCardGrid, self).__init__(children=children, **args)\n\n\nsetattr(AntdCardGrid, '__init__', _explicitize_args(AntdCardGrid.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdCardMeta.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdCardMeta(Component):\n    \"\"\"An AntdCardMeta component.\n    结构化卡片组件AntdCardMeta\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - avatar (a list of or a singular dash component, string or number; optional):\n        组件型，头像元素.\n\n    - description (a list of or a singular dash component, string or number; optional):\n        组件型，描述内容.\n\n    - title (a list of or a singular dash component, string or number; optional):\n        组件型，标题内容.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = ['avatar', 'description', 'title']\n    _base_nodes = ['avatar', 'description', 'title', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdCardMeta'\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        avatar: typing.Optional[ComponentType] = None,\n        description: typing.Optional[ComponentType] = None,\n        title: typing.Optional[ComponentType] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'avatar',\n            'description',\n            'title',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'avatar',\n            'description',\n            'title',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdCardMeta, self).__init__(**args)\n\n\nsetattr(AntdCardMeta, '__init__', _explicitize_args(AntdCardMeta.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdCarousel.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdCarousel(Component):\n    \"\"\"An AntdCarousel component.\n    走马灯组件AntdCarousel\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，定义走马灯中需要轮播的若干元素.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - arrows (boolean; default False):\n        是否显示箭头 默认值：`False`.\n\n    - autoplay (dict; default False):\n        是否自动轮播，可传入字典型进行更多配置 默认值：`False`.\n\n        `autoplay` is a boolean | dict with keys:\n\n        - dotDuration (boolean; optional):\n            是否展示指示点进度条.\n\n    - dotPosition (a value equal to: 'top', 'bottom', 'left', 'right'; default 'bottom'):\n        面板指示器位置，可选项有`'top'`、`'bottom'`、`'left'`、`'right'` 默认值：`'bottom'`.\n\n    - easing (string; default 'linear'):\n        调整动画效果，同css中的`animation-timing-function` 默认值：'linear'.\n\n    - effect (a value equal to: 'scrollx', 'fade'; default 'scrollx'):\n        动化效果，可选项有`'scrollx'`、`'fade'` 默认值：'scrollx'.\n\n    - autoplaySpeed (number; default 3000):\n        轮播间隔时长，单位：毫秒 默认值：`3000`.\n\n    - speed (number; default 500):\n        轮播动画耗时，单位：毫秒 默认值：`500`.\n\n    - pauseOnHover (boolean; default False):\n        是否在鼠标悬停时暂停轮播 默认值：`False`.\n\n    - infinite (boolean; default True):\n        是否启用无限循环轮播 默认值：`True`.\n\n    - lazyLoad (boolean; default False):\n        是否针对走马灯中的子项实施懒加载效果 默认值：`False`.\n\n    - slidesToShow (number; default 1):\n        同时展示的子项数量 默认值：`1`.\n\n    - slidesToScroll (number; default 1):\n        一次轮播划过的子项数量 默认值：`1`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = []\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdCarousel'\n    Autoplay = TypedDict('Autoplay', {'dotDuration': NotRequired[bool]})\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        arrows: typing.Optional[bool] = None,\n        autoplay: typing.Optional[typing.Union[bool, 'Autoplay']] = None,\n        dotPosition: typing.Optional[Literal['top', 'bottom', 'left', 'right']] = None,\n        easing: typing.Optional[str] = None,\n        effect: typing.Optional[Literal['scrollx', 'fade']] = None,\n        autoplaySpeed: typing.Optional[NumberType] = None,\n        speed: typing.Optional[NumberType] = None,\n        pauseOnHover: typing.Optional[bool] = None,\n        infinite: typing.Optional[bool] = None,\n        lazyLoad: typing.Optional[bool] = None,\n        slidesToShow: typing.Optional[NumberType] = None,\n        slidesToScroll: typing.Optional[NumberType] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'arrows',\n            'autoplay',\n            'dotPosition',\n            'easing',\n            'effect',\n            'autoplaySpeed',\n            'speed',\n            'pauseOnHover',\n            'infinite',\n            'lazyLoad',\n            'slidesToShow',\n            'slidesToScroll',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'arrows',\n            'autoplay',\n            'dotPosition',\n            'easing',\n            'effect',\n            'autoplaySpeed',\n            'speed',\n            'pauseOnHover',\n            'infinite',\n            'lazyLoad',\n            'slidesToShow',\n            'slidesToScroll',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdCarousel, self).__init__(children=children, **args)\n\n\nsetattr(AntdCarousel, '__init__', _explicitize_args(AntdCarousel.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdCascader.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdCascader(Component):\n    \"\"\"An AntdCascader component.\n    级联选择组件AntdCascader\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - popupClassName (string; optional):\n        展开菜单css类名.\n\n    - name (string; optional):\n        配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值.\n\n    - enableBatchControl (boolean; default True):\n        控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能 默认值：`True`.\n\n    - locale (a value equal to: 'zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr'; default 'zh-cn'):\n        组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n        默认值：`'zh-cn'`.\n\n    - optionsMode (a value equal to: 'tree', 'flat'; default 'tree'):\n        对应`options`格式的渲染模式，可选项有`'tree'`（树形模式）、`'flat'`（扁平模式） 默认值：`'tree'`.\n\n    - options (list; required):\n        定义构造级联选择所需的数据结构，与`optionsMode`一致.\n\n    - optionsNodeKeyToLabel (dict with strings as keys and values of type a list of or a singular dash component, string or number; optional):\n        针对级联结构中的指定节点，定义作为标题的组件型内容，优先级高于`options`中对应的`label`值.\n\n    - optionFilterProp (a value equal to: 'value', 'label'; default 'label'):\n        选项关键词搜索时的目标字段，可选项有`'value'`、`'label'` 默认值：`'label'`.\n\n    - panelMode (boolean; default False):\n        是否开启内嵌面板模式 默认值：`False`.\n\n    - disabled (boolean; default False):\n        是否禁用当前组件 默认值：`False`.\n\n    - changeOnSelect (boolean; default False):\n        是否当级联选择中的任意节点被选择时均进行选中值更新 默认值：`False`.\n\n    - size (a value equal to: 'small', 'middle', 'large'; optional):\n        当前组件尺寸规格，可选项有`'small'`、`'middle'`、`'large'` 默认值：`'middle'`.\n\n    - bordered (boolean; default True):\n        是否显示边框，设置为`True`时等价于`variant='outlined'` 默认值：`True`.\n\n    - variant (a value equal to: 'outlined', 'borderless', 'filled', 'underlined'; optional):\n        形态变体类型，可选项有`'outlined'`、`'borderless'`、`'filled'`、`'underlined'`，其中`'outlined'`等价于`bordered=True`，但优先级更高.\n\n    - placeholder (string; optional):\n        输入框占位文字内容.\n\n    - placement (a value equal to: 'bottomLeft', 'bottomRight', 'topLeft', 'topRight'; default 'bottomLeft'):\n        选择菜单展开方向，可选项有`'bottomLeft'`、`'bottomRight'`、`'topLeft'`、`'topRight'`\n        默认值：`'bottomLeft'`.\n\n    - value (list of string | numbers | list of list of string | numberss; optional):\n        监听或设置已选值.\n\n    - defaultValue (list of string | numbers | list of list of string | numberss; optional):\n        初始化已选值.\n\n    - multiple (boolean; default False):\n        是否开启多选模式 默认值：`False`.\n\n    - maxTagCount (number | a value equal to: 'responsive'; optional):\n        当`multiple=True`时，已选值展示的最大数量.\n\n    - expandTrigger (a value equal to: 'click', 'hover'; default 'click'):\n        选择菜单展开触发方式，可选项有`'click'`、`'hover'` 默认值：`'click'`.\n\n    - status (a value equal to: 'error', 'warning'; optional):\n        控制校验状态，可选项有`'error'`、`'warning'`.\n\n    - allowClear (boolean; default True):\n        是否允许一键清空已选值 默认值：`True`.\n\n    - autoFocus (boolean; default False):\n        是否自动获取焦点 默认值：`False`.\n\n    - showCheckedStrategy (a value equal to: 'show-parent', 'show-child'; optional):\n        已选项回填策略，可选项有`'show-parent'`、`'show-child'`.\n\n    - prefix (a list of or a singular dash component, string or number; optional):\n        组件型，前缀内嵌内容.\n\n    - suffixIcon (a list of or a singular dash component, string or number; optional):\n        自定义选择框后缀图标内容.\n\n    - readOnly (boolean; optional):\n        是否渲染为只读状态 默认值：`False`.\n\n    - popupContainer (a value equal to: 'parent', 'body'; default 'body'):\n        相关展开层锚定策略，可选项有`'parent'`、`'body'` 默认值：`'body'`.\n\n    - batchPropsNames (list of strings; optional):\n        需要纳入[批量属性监听](/batch-props-values)的若干属性名.\n\n    - batchPropsValues (dict; optional):\n        监听`batchPropsNames`中指定的若干属性值.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\n\n    - persistence (boolean | string | number; optional):\n        是否开启[属性持久化](/prop-persistence).\n\n    - persisted_props (list of a value equal to: 'value's; optional):\n        开启属性持久化功能的若干属性名，可选项有`'value'` 默认值：`['value']`.\n\n    - persistence_type (a value equal to: 'local', 'session', 'memory'; optional):\n        属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n        默认值：`'local'`.\"\"\"\n\n    _children_props: typing.List[str] = ['optionsNodeKeyToLabel{}', 'prefix', 'suffixIcon']\n    _base_nodes = ['prefix', 'suffixIcon', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdCascader'\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        popupClassName: typing.Optional[str] = None,\n        name: typing.Optional[str] = None,\n        enableBatchControl: typing.Optional[bool] = None,\n        locale: typing.Optional[Literal['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']] = None,\n        optionsMode: typing.Optional[Literal['tree', 'flat']] = None,\n        options: typing.Optional[typing.Union[typing.Any, typing.Sequence[typing.Any]]] = None,\n        optionsNodeKeyToLabel: typing.Optional[\n            typing.Dict[typing.Union[str, float, int], ComponentType]\n        ] = None,\n        optionFilterProp: typing.Optional[Literal['value', 'label']] = None,\n        panelMode: typing.Optional[bool] = None,\n        disabled: typing.Optional[bool] = None,\n        changeOnSelect: typing.Optional[bool] = None,\n        size: typing.Optional[Literal['small', 'middle', 'large']] = None,\n        bordered: typing.Optional[bool] = None,\n        variant: typing.Optional[Literal['outlined', 'borderless', 'filled', 'underlined']] = None,\n        placeholder: typing.Optional[str] = None,\n        placement: typing.Optional[\n            Literal['bottomLeft', 'bottomRight', 'topLeft', 'topRight']\n        ] = None,\n        value: typing.Optional[\n            typing.Union[\n                typing.Sequence[typing.Union[str, NumberType]],\n                typing.Sequence[typing.Sequence[typing.Union[str, NumberType]]],\n            ]\n        ] = None,\n        defaultValue: typing.Optional[\n            typing.Union[\n                typing.Sequence[typing.Union[str, NumberType]],\n                typing.Sequence[typing.Sequence[typing.Union[str, NumberType]]],\n            ]\n        ] = None,\n        multiple: typing.Optional[bool] = None,\n        maxTagCount: typing.Optional[typing.Union[NumberType, Literal['responsive']]] = None,\n        expandTrigger: typing.Optional[Literal['click', 'hover']] = None,\n        status: typing.Optional[Literal['error', 'warning']] = None,\n        allowClear: typing.Optional[bool] = None,\n        autoFocus: typing.Optional[bool] = None,\n        showCheckedStrategy: typing.Optional[Literal['show-parent', 'show-child']] = None,\n        prefix: typing.Optional[ComponentType] = None,\n        suffixIcon: typing.Optional[ComponentType] = None,\n        readOnly: typing.Optional[bool] = None,\n        popupContainer: typing.Optional[Literal['parent', 'body']] = None,\n        batchPropsNames: typing.Optional[typing.Sequence[str]] = None,\n        batchPropsValues: typing.Optional[dict] = None,\n        persistence: typing.Optional[typing.Union[bool, str, NumberType]] = None,\n        persisted_props: typing.Optional[typing.Sequence[Literal['value']]] = None,\n        persistence_type: typing.Optional[Literal['local', 'session', 'memory']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'popupClassName',\n            'name',\n            'enableBatchControl',\n            'locale',\n            'optionsMode',\n            'options',\n            'optionsNodeKeyToLabel',\n            'optionFilterProp',\n            'panelMode',\n            'disabled',\n            'changeOnSelect',\n            'size',\n            'bordered',\n            'variant',\n            'placeholder',\n            'placement',\n            'value',\n            'defaultValue',\n            'multiple',\n            'maxTagCount',\n            'expandTrigger',\n            'status',\n            'allowClear',\n            'autoFocus',\n            'showCheckedStrategy',\n            'prefix',\n            'suffixIcon',\n            'readOnly',\n            'popupContainer',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'popupClassName',\n            'name',\n            'enableBatchControl',\n            'locale',\n            'optionsMode',\n            'options',\n            'optionsNodeKeyToLabel',\n            'optionFilterProp',\n            'panelMode',\n            'disabled',\n            'changeOnSelect',\n            'size',\n            'bordered',\n            'variant',\n            'placeholder',\n            'placement',\n            'value',\n            'defaultValue',\n            'multiple',\n            'maxTagCount',\n            'expandTrigger',\n            'status',\n            'allowClear',\n            'autoFocus',\n            'showCheckedStrategy',\n            'prefix',\n            'suffixIcon',\n            'readOnly',\n            'popupContainer',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        for k in ['options']:\n            if k not in args:\n                raise TypeError('Required argument `' + k + '` was not specified.')\n\n        super(AntdCascader, self).__init__(**args)\n\n\nsetattr(AntdCascader, '__init__', _explicitize_args(AntdCascader.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdCenter.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdCenter(Component):\n    \"\"\"An AntdCenter component.\n    居中组件AntdCenter\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，内嵌元素.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - inline (boolean; default False):\n        是否渲染为行内元素 默认值：`False`.\n\n    - inheritStyleToken (boolean; default False):\n        是否在背景色、字体颜色、字体大小等样式上联动`AntdConfigProvider`相关设置 默认值：`False`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = []\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdCenter'\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        inline: typing.Optional[bool] = None,\n        inheritStyleToken: typing.Optional[bool] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'inline',\n            'inheritStyleToken',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'inline',\n            'inheritStyleToken',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdCenter, self).__init__(children=children, **args)\n\n\nsetattr(AntdCenter, '__init__', _explicitize_args(AntdCenter.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdCheckCard.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdCheckCard(Component):\n    \"\"\"An AntdCheckCard component.\n    选择卡片组件AntdCheckCard\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，内嵌元素.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - name (string; optional):\n        配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值.\n\n    - enableBatchControl (boolean; default True):\n        控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能 默认值：`True`.\n\n    - checked (boolean; optional):\n        监听或设置是否被选中.\n\n    - defaultChecked (boolean; optional):\n        初始化是否被选中.\n\n    - bordered (boolean; default True):\n        是否显示边框 默认值：`True`.\n\n    - disabled (boolean; default False):\n        是否禁用当前组件 默认值：`False`.\n\n    - size (a value equal to: 'small', 'default', 'large'; default 'default'):\n        当前组件尺寸规格，可选项有`'small'`、`'default'`、`'large'` 默认值：`'default'`.\n\n    - value (number | string; optional):\n        当前选择卡片值.\n\n    - readOnly (boolean; default False):\n        是否渲染为只读状态 默认值：`False`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\n\n    - persistence (boolean | string | number; optional):\n        是否开启[属性持久化](/prop-persistence).\n\n    - persisted_props (list of a value equal to: 'checked's; optional):\n        开启属性持久化功能的若干属性名，可选项有`'checked'` 默认值：`['checked']`.\n\n    - persistence_type (a value equal to: 'local', 'session', 'memory'; optional):\n        属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n        默认值：`'local'`.\"\"\"\n\n    _children_props: typing.List[str] = []\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdCheckCard'\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        name: typing.Optional[str] = None,\n        enableBatchControl: typing.Optional[bool] = None,\n        checked: typing.Optional[bool] = None,\n        defaultChecked: typing.Optional[bool] = None,\n        bordered: typing.Optional[bool] = None,\n        disabled: typing.Optional[bool] = None,\n        size: typing.Optional[Literal['small', 'default', 'large']] = None,\n        value: typing.Optional[typing.Union[NumberType, str]] = None,\n        readOnly: typing.Optional[bool] = None,\n        persistence: typing.Optional[typing.Union[bool, str, NumberType]] = None,\n        persisted_props: typing.Optional[typing.Sequence[Literal['checked']]] = None,\n        persistence_type: typing.Optional[Literal['local', 'session', 'memory']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'name',\n            'enableBatchControl',\n            'checked',\n            'defaultChecked',\n            'bordered',\n            'disabled',\n            'size',\n            'value',\n            'readOnly',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'name',\n            'enableBatchControl',\n            'checked',\n            'defaultChecked',\n            'bordered',\n            'disabled',\n            'size',\n            'value',\n            'readOnly',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdCheckCard, self).__init__(children=children, **args)\n\n\nsetattr(AntdCheckCard, '__init__', _explicitize_args(AntdCheckCard.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdCheckCardGroup.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdCheckCardGroup(Component):\n    \"\"\"An AntdCheckCardGroup component.\n    组合选择卡片组件AntdCheckCardGroup\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，内嵌若干`AntdCheckCard`相关组件.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - name (string; optional):\n        配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值.\n\n    - enableBatchControl (boolean; default True):\n        控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能 默认值：`True`.\n\n    - multiple (boolean; default False):\n        是否开启多选 默认值：`False`.\n\n    - allowNoValue (boolean; default True):\n        是否允许当前组合选择卡片中仅剩的选项被取消选中 默认值：`True`.\n\n    - bordered (boolean; default True):\n        是否显示边框 默认值：`True`.\n\n    - value (number | string | list of number | strings; optional):\n        监听或设置已选中卡片值.\n\n    - defaultValue (number | string | list of number | strings; optional):\n        初始化已选中卡片值.\n\n    - disabled (boolean; default False):\n        是否禁用当前组件 默认值：`False`.\n\n    - size (a value equal to: 'small', 'default', 'large'; default 'default'):\n        当前组件尺寸规格，可选项有`'small'`、`'default'`、`'large'` 默认值：`'default'`.\n\n    - readOnly (boolean; default False):\n        是否渲染为只读状态 默认值：`False`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\n\n    - persistence (boolean | string | number; optional):\n        是否开启[属性持久化](/prop-persistence).\n\n    - persisted_props (list of a value equal to: 'value's; optional):\n        开启属性持久化功能的若干属性名，可选项有`'value'` 默认值：`['value']`.\n\n    - persistence_type (a value equal to: 'local', 'session', 'memory'; optional):\n        属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n        默认值：`'local'`.\"\"\"\n\n    _children_props: typing.List[str] = []\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdCheckCardGroup'\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        name: typing.Optional[str] = None,\n        enableBatchControl: typing.Optional[bool] = None,\n        multiple: typing.Optional[bool] = None,\n        allowNoValue: typing.Optional[bool] = None,\n        bordered: typing.Optional[bool] = None,\n        value: typing.Optional[\n            typing.Union[\n                typing.Union[NumberType, str], typing.Sequence[typing.Union[NumberType, str]]\n            ]\n        ] = None,\n        defaultValue: typing.Optional[\n            typing.Union[\n                typing.Union[NumberType, str], typing.Sequence[typing.Union[NumberType, str]]\n            ]\n        ] = None,\n        disabled: typing.Optional[bool] = None,\n        size: typing.Optional[Literal['small', 'default', 'large']] = None,\n        readOnly: typing.Optional[bool] = None,\n        persistence: typing.Optional[typing.Union[bool, str, NumberType]] = None,\n        persisted_props: typing.Optional[typing.Sequence[Literal['value']]] = None,\n        persistence_type: typing.Optional[Literal['local', 'session', 'memory']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'name',\n            'enableBatchControl',\n            'multiple',\n            'allowNoValue',\n            'bordered',\n            'value',\n            'defaultValue',\n            'disabled',\n            'size',\n            'readOnly',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'name',\n            'enableBatchControl',\n            'multiple',\n            'allowNoValue',\n            'bordered',\n            'value',\n            'defaultValue',\n            'disabled',\n            'size',\n            'readOnly',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdCheckCardGroup, self).__init__(children=children, **args)\n\n\nsetattr(AntdCheckCardGroup, '__init__', _explicitize_args(AntdCheckCardGroup.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdCheckableTag.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdCheckableTag(Component):\n    \"\"\"An AntdCheckableTag component.\n    可选择标签AntdCheckableTag\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - content (a list of or a singular dash component, string or number; optional):\n        组件型，标签内容.\n\n    - checkedContent (a list of or a singular dash component, string or number; optional):\n        组件型，选择状态下的标签内容.\n\n    - unCheckedContent (a list of or a singular dash component, string or number; optional):\n        组件型，未选择状态下的标签内容.\n\n    - checked (boolean; default False):\n        监听或设置当前标签的选择状态 默认值：`False`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = ['content', 'checkedContent', 'unCheckedContent']\n    _base_nodes = ['content', 'checkedContent', 'unCheckedContent', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdCheckableTag'\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        content: typing.Optional[ComponentType] = None,\n        checkedContent: typing.Optional[ComponentType] = None,\n        unCheckedContent: typing.Optional[ComponentType] = None,\n        checked: typing.Optional[bool] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'content',\n            'checkedContent',\n            'unCheckedContent',\n            'checked',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'content',\n            'checkedContent',\n            'unCheckedContent',\n            'checked',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdCheckableTag, self).__init__(**args)\n\n\nsetattr(AntdCheckableTag, '__init__', _explicitize_args(AntdCheckableTag.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdCheckbox.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdCheckbox(Component):\n    \"\"\"An AntdCheckbox component.\n    选择框组件AntdCheckbox\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - name (string; optional):\n        配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值.\n\n    - enableBatchControl (boolean; default True):\n        控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能 默认值：`True`.\n\n    - disabled (boolean; default False):\n        是否禁用当前组件 默认值：`False`.\n\n    - label (a list of or a singular dash component, string or number; optional):\n        组件型，标签内容.\n\n    - autoFocus (boolean; default False):\n        是否自动获取焦点 默认值：`False`.\n\n    - checked (boolean; default False):\n        监听或设置当前选择框是否选中 默认值：`False`.\n\n    - indeterminate (boolean; default False):\n        是否强制渲染为半选中状态，仅影响样式，与选中状态无关 默认值：`False`.\n\n    - readOnly (boolean; default False):\n        是否渲染为只读状态 默认值：`False`.\n\n    - batchPropsNames (list of strings; optional):\n        需要纳入[批量属性监听](/batch-props-values)的若干属性名.\n\n    - batchPropsValues (dict; optional):\n        监听`batchPropsNames`中指定的若干属性值.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\n\n    - persistence (boolean | string | number; optional):\n        是否开启[属性持久化](/prop-persistence).\n\n    - persisted_props (list of a value equal to: 'checked's; optional):\n        开启属性持久化功能的若干属性名，可选项有`'checked'` 默认值：`['checked']`.\n\n    - persistence_type (a value equal to: 'local', 'session', 'memory'; optional):\n        属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n        默认值：`'local'`.\"\"\"\n\n    _children_props: typing.List[str] = ['label']\n    _base_nodes = ['label', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdCheckbox'\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        name: typing.Optional[str] = None,\n        enableBatchControl: typing.Optional[bool] = None,\n        disabled: typing.Optional[bool] = None,\n        label: typing.Optional[ComponentType] = None,\n        autoFocus: typing.Optional[bool] = None,\n        checked: typing.Optional[bool] = None,\n        indeterminate: typing.Optional[bool] = None,\n        readOnly: typing.Optional[bool] = None,\n        batchPropsNames: typing.Optional[typing.Sequence[str]] = None,\n        batchPropsValues: typing.Optional[dict] = None,\n        persistence: typing.Optional[typing.Union[bool, str, NumberType]] = None,\n        persisted_props: typing.Optional[typing.Sequence[Literal['checked']]] = None,\n        persistence_type: typing.Optional[Literal['local', 'session', 'memory']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'name',\n            'enableBatchControl',\n            'disabled',\n            'label',\n            'autoFocus',\n            'checked',\n            'indeterminate',\n            'readOnly',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'name',\n            'enableBatchControl',\n            'disabled',\n            'label',\n            'autoFocus',\n            'checked',\n            'indeterminate',\n            'readOnly',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdCheckbox, self).__init__(**args)\n\n\nsetattr(AntdCheckbox, '__init__', _explicitize_args(AntdCheckbox.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdCheckboxGroup.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdCheckboxGroup(Component):\n    \"\"\"An AntdCheckboxGroup component.\n    组合选择框组件AntdCheckboxGroup\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - name (string; optional):\n        配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值.\n\n    - enableBatchControl (boolean; default True):\n        控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能 默认值：`True`.\n\n    - disabled (boolean; default False):\n        是否禁用当前组件 默认值：`False`.\n\n    - options (list of dicts; optional):\n        定义构造组合选择框所需的数据结构.\n\n        `options` is a list of string | number | dict with keys:\n\n        - label (a list of or a singular dash component, string or number; optional):\n            组件型，当前选择框标签内容.\n\n        - value (string | number; optional):\n            当前选择框对应值.\n\n        - disabled (boolean; optional):\n            是否禁用当前选择框 默认值：`False`.s\n\n    - value (list of string | numbers; optional):\n        监听或设置已选值.\n\n    - readOnly (boolean; default False):\n        是否渲染为只读状态 默认值：`False`.\n\n    - batchPropsNames (list of strings; optional):\n        需要纳入[批量属性监听](/batch-props-values)的若干属性名.\n\n    - batchPropsValues (dict; optional):\n        监听`batchPropsNames`中指定的若干属性值.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\n\n    - persistence (boolean | string | number; optional):\n        是否开启[属性持久化](/prop-persistence).\n\n    - persisted_props (list of a value equal to: 'value's; optional):\n        开启属性持久化功能的若干属性名，可选项有`'value'` 默认值：`['value']`.\n\n    - persistence_type (a value equal to: 'local', 'session', 'memory'; optional):\n        属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n        默认值：`'local'`.\"\"\"\n\n    _children_props: typing.List[str] = ['options[].label']\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdCheckboxGroup'\n    Options = TypedDict(\n        'Options',\n        {\n            'label': NotRequired[ComponentType],\n            'value': NotRequired[typing.Union[str, NumberType]],\n            'disabled': NotRequired[bool],\n        },\n    )\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        name: typing.Optional[str] = None,\n        enableBatchControl: typing.Optional[bool] = None,\n        disabled: typing.Optional[bool] = None,\n        options: typing.Optional[typing.Sequence[typing.Union[str, NumberType, 'Options']]] = None,\n        value: typing.Optional[typing.Sequence[typing.Union[str, NumberType]]] = None,\n        readOnly: typing.Optional[bool] = None,\n        batchPropsNames: typing.Optional[typing.Sequence[str]] = None,\n        batchPropsValues: typing.Optional[dict] = None,\n        persistence: typing.Optional[typing.Union[bool, str, NumberType]] = None,\n        persisted_props: typing.Optional[typing.Sequence[Literal['value']]] = None,\n        persistence_type: typing.Optional[Literal['local', 'session', 'memory']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'name',\n            'enableBatchControl',\n            'disabled',\n            'options',\n            'value',\n            'readOnly',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'name',\n            'enableBatchControl',\n            'disabled',\n            'options',\n            'value',\n            'readOnly',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdCheckboxGroup, self).__init__(**args)\n\n\nsetattr(AntdCheckboxGroup, '__init__', _explicitize_args(AntdCheckboxGroup.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdCol.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdCol(Component):\n    \"\"\"An AntdCol component.\n    列组件AntdCol\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，内嵌元素.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - span (number; optional):\n        列所占宽度份数.\n\n    - offset (number; default 0):\n        列左侧间隔宽度份数 默认值：`0`.\n\n    - order (number; default 0):\n        列顺序 默认值：`0`.\n\n    - pull (number; default 0):\n        列向左移动宽度份数 默认值：`0`.\n\n    - push (number; default 0):\n        列向右移动宽度份数 默认值：`0`.\n\n    - flex (string | number; optional):\n        同css中的flex.\n\n    - xs (dict; optional):\n        配置列在页面宽度小于567px时的布局参数，传入数值型时代表span参数，传入字典时分别设置各布局参数.\n\n        `xs` is a number | dict with keys:\n\n        - span (number; optional):\n            同span参数.\n\n        - offset (number; optional):\n            同offset参数.\n\n        - order (number; optional):\n            同order参数.\n\n        - pull (number; optional):\n            同pull参数.\n\n        - push (number; optional):\n            同push参数.\n\n    - sm (dict; optional):\n        配置列在页面宽度大于等于567px时的布局参数，传入数值型时代表span参数，传入字典时分别设置各布局参数.\n\n        `sm` is a number | dict with keys:\n\n        - span (number; optional):\n            同span参数.\n\n        - offset (number; optional):\n            同offset参数.\n\n        - order (number; optional):\n            同order参数.\n\n        - pull (number; optional):\n            同pull参数.\n\n        - push (number; optional):\n            同push参数.\n\n    - md (dict; optional):\n        配置列在页面宽度大于等于768px时的布局参数，传入数值型时代表span参数，传入字典时分别设置各布局参数.\n\n        `md` is a number | dict with keys:\n\n        - span (number; optional):\n            同span参数.\n\n        - offset (number; optional):\n            同offset参数.\n\n        - order (number; optional):\n            同order参数.\n\n        - pull (number; optional):\n            同pull参数.\n\n        - push (number; optional):\n            同push参数.\n\n    - lg (dict; optional):\n        配置列在页面宽度大于等于992px时的布局参数，传入数值型时代表span参数，传入字典时分别设置各布局参数.\n\n        `lg` is a number | dict with keys:\n\n        - span (number; optional):\n            同span参数.\n\n        - offset (number; optional):\n            同offset参数.\n\n        - order (number; optional):\n            同order参数.\n\n        - pull (number; optional):\n            同pull参数.\n\n        - push (number; optional):\n            同push参数.\n\n    - xl (dict; optional):\n        配置列在页面宽度大于等于1200px时的布局参数，传入数值型时代表span参数，传入字典时分别设置各布局参数.\n\n        `xl` is a number | dict with keys:\n\n        - span (number; optional):\n            同span参数.\n\n        - offset (number; optional):\n            同offset参数.\n\n        - order (number; optional):\n            同order参数.\n\n        - pull (number; optional):\n            同pull参数.\n\n        - push (number; optional):\n            同push参数.\n\n    - xxl (dict; optional):\n        配置列在页面宽度大于等于1600px时的布局参数，传入数值型时代表span参数，传入字典时分别设置各布局参数.\n\n        `xxl` is a number | dict with keys:\n\n        - span (number; optional):\n            同span参数.\n\n        - offset (number; optional):\n            同offset参数.\n\n        - order (number; optional):\n            同order参数.\n\n        - pull (number; optional):\n            同pull参数.\n\n        - push (number; optional):\n            同push参数.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = []\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdCol'\n    Xs = TypedDict(\n        'Xs',\n        {\n            'span': NotRequired[NumberType],\n            'offset': NotRequired[NumberType],\n            'order': NotRequired[NumberType],\n            'pull': NotRequired[NumberType],\n            'push': NotRequired[NumberType],\n        },\n    )\n\n    Sm = TypedDict(\n        'Sm',\n        {\n            'span': NotRequired[NumberType],\n            'offset': NotRequired[NumberType],\n            'order': NotRequired[NumberType],\n            'pull': NotRequired[NumberType],\n            'push': NotRequired[NumberType],\n        },\n    )\n\n    Md = TypedDict(\n        'Md',\n        {\n            'span': NotRequired[NumberType],\n            'offset': NotRequired[NumberType],\n            'order': NotRequired[NumberType],\n            'pull': NotRequired[NumberType],\n            'push': NotRequired[NumberType],\n        },\n    )\n\n    Lg = TypedDict(\n        'Lg',\n        {\n            'span': NotRequired[NumberType],\n            'offset': NotRequired[NumberType],\n            'order': NotRequired[NumberType],\n            'pull': NotRequired[NumberType],\n            'push': NotRequired[NumberType],\n        },\n    )\n\n    Xl = TypedDict(\n        'Xl',\n        {\n            'span': NotRequired[NumberType],\n            'offset': NotRequired[NumberType],\n            'order': NotRequired[NumberType],\n            'pull': NotRequired[NumberType],\n            'push': NotRequired[NumberType],\n        },\n    )\n\n    Xxl = TypedDict(\n        'Xxl',\n        {\n            'span': NotRequired[NumberType],\n            'offset': NotRequired[NumberType],\n            'order': NotRequired[NumberType],\n            'pull': NotRequired[NumberType],\n            'push': NotRequired[NumberType],\n        },\n    )\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        span: typing.Optional[NumberType] = None,\n        offset: typing.Optional[NumberType] = None,\n        order: typing.Optional[NumberType] = None,\n        pull: typing.Optional[NumberType] = None,\n        push: typing.Optional[NumberType] = None,\n        flex: typing.Optional[typing.Union[str, NumberType]] = None,\n        xs: typing.Optional[typing.Union[NumberType, 'Xs']] = None,\n        sm: typing.Optional[typing.Union[NumberType, 'Sm']] = None,\n        md: typing.Optional[typing.Union[NumberType, 'Md']] = None,\n        lg: typing.Optional[typing.Union[NumberType, 'Lg']] = None,\n        xl: typing.Optional[typing.Union[NumberType, 'Xl']] = None,\n        xxl: typing.Optional[typing.Union[NumberType, 'Xxl']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'span',\n            'offset',\n            'order',\n            'pull',\n            'push',\n            'flex',\n            'xs',\n            'sm',\n            'md',\n            'lg',\n            'xl',\n            'xxl',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'span',\n            'offset',\n            'order',\n            'pull',\n            'push',\n            'flex',\n            'xs',\n            'sm',\n            'md',\n            'lg',\n            'xl',\n            'xxl',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdCol, self).__init__(children=children, **args)\n\n\nsetattr(AntdCol, '__init__', _explicitize_args(AntdCol.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdCollapse.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdCollapse(Component):\n    \"\"\"An AntdCollapse component.\n    折叠面板组件AntdCollapse\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，内嵌元素.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - styles (dict; optional):\n        细分控制子元素css样式.\n\n        `styles` is a dict with keys:\n\n        - header (dict; optional):\n            头部元素css样式.\n\n        - body (dict; optional):\n            内容元素css样式.\n\n    - classNames (dict; optional):\n        细分控制子元素css类名.\n\n        `classNames` is a dict with keys:\n\n        - header (string; optional):\n            头部元素css类名.\n\n        - body (string; optional):\n            内容元素css类名.\n\n    - title (a list of or a singular dash component, string or number; optional):\n        组件型，标题内容.\n\n    - isOpen (boolean; default True):\n        是否展开 默认值：`True`.\n\n    - size (a value equal to: 'large', 'middle', 'small'; default 'middle'):\n        组件尺寸规格，可选项有`'small'`、`'middle'`、`'large'` 默认值：`'middle'`.\n\n    - bordered (boolean; default True):\n        是否渲染边框 默认值：`True`.\n\n    - showArrow (boolean; default True):\n        是否渲染箭头 默认值：`True`.\n\n    - ghost (boolean; default False):\n        是否开启透明背景模式 默认值：`False`.\n\n    - collapsible (a value equal to: 'header', 'disabled', 'icon'; optional):\n        折叠交互触发行为，可选项有`'header'`（仅标题区域）、`'disabled'`（禁用折叠）、`'icon'`（仅图标区域）.\n\n    - forceRender (boolean; default False):\n        初始化未展开时，是否强制渲染内部元素 默认值：`False`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\n\n    - persistence (boolean | string | number; optional):\n        是否开启[属性持久化](/prop-persistence).\n\n    - persisted_props (list of a value equal to: 'isOpen's; optional):\n        开启属性持久化功能的若干属性名，可选项有`'isOpen'` 默认值：`['isOpen']`.\n\n    - persistence_type (a value equal to: 'local', 'session', 'memory'; optional):\n        属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n        默认值：`'local'`.\"\"\"\n\n    _children_props: typing.List[str] = ['title']\n    _base_nodes = ['title', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdCollapse'\n    Styles = TypedDict('Styles', {'header': NotRequired[dict], 'body': NotRequired[dict]})\n\n    ClassNames = TypedDict('ClassNames', {'header': NotRequired[str], 'body': NotRequired[str]})\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        styles: typing.Optional['Styles'] = None,\n        classNames: typing.Optional['ClassNames'] = None,\n        title: typing.Optional[ComponentType] = None,\n        isOpen: typing.Optional[bool] = None,\n        size: typing.Optional[Literal['large', 'middle', 'small']] = None,\n        bordered: typing.Optional[bool] = None,\n        showArrow: typing.Optional[bool] = None,\n        ghost: typing.Optional[bool] = None,\n        collapsible: typing.Optional[Literal['header', 'disabled', 'icon']] = None,\n        forceRender: typing.Optional[bool] = None,\n        persistence: typing.Optional[typing.Union[bool, str, NumberType]] = None,\n        persisted_props: typing.Optional[typing.Sequence[Literal['isOpen']]] = None,\n        persistence_type: typing.Optional[Literal['local', 'session', 'memory']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'styles',\n            'classNames',\n            'title',\n            'isOpen',\n            'size',\n            'bordered',\n            'showArrow',\n            'ghost',\n            'collapsible',\n            'forceRender',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'styles',\n            'classNames',\n            'title',\n            'isOpen',\n            'size',\n            'bordered',\n            'showArrow',\n            'ghost',\n            'collapsible',\n            'forceRender',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdCollapse, self).__init__(children=children, **args)\n\n\nsetattr(AntdCollapse, '__init__', _explicitize_args(AntdCollapse.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdColorPicker.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdColorPicker(Component):\n    \"\"\"An AntdColorPicker component.\n    颜色选择器组件AntdColorPicker\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - locale (a value equal to: 'zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr'; default 'zh-cn'):\n        组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n        默认值：`'zh-cn'`.\n\n    - name (string; optional):\n        配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值.\n\n    - enableBatchControl (boolean; default True):\n        控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能 默认值：`True`.\n\n    - allowClear (boolean; default False):\n        是否允许清除已选颜色 默认值：`False`.\n\n    - arrow (dict; optional):\n        配置颜色选择面板额外箭头 默认值：`True`.\n\n        `arrow` is a boolean | dict with keys:\n\n        - pointAtCenter (boolean; optional):\n            箭头是否指向面板中心 默认值：`False`.\n\n    - defaultValue (string; optional):\n        初始化已输入值.\n\n    - value (string; optional):\n        监听或设置选中颜色值 默认值：`'#1677FF'`.\n\n    - format (a value equal to: 'rgb', 'hex', 'hsb'; default 'hex'):\n        监听或设置颜色格式，可选项有`'rgb'`、`'hex'`、`'hsb'` 默认值：`'hex'`.\n\n    - mode (a value equal to: 'single', 'gradient' | list of a value equal to: 'single', 'gradient's; default 'single'):\n        选择器模式，用于配置单色与渐变，可选项有`'single'`、`'gradient'`，支持单选项或多选项组合\n        默认值：`single`.\n\n    - disabled (boolean; default False):\n        是否禁用当前组件 默认值：`False`.\n\n    - disabledAlpha (boolean; default True):\n        是否禁用透明度选择 默认值：`True`.\n\n    - open (boolean; optional):\n        监听或设置颜色选择面板展开状态.\n\n    - presets (list of dicts; optional):\n        配置预设颜色选择项.\n\n        `presets` is a list of dicts with keys:\n\n        - label (a list of or a singular dash component, string or number; optional):\n            组件型，当前预设项标签内容.\n\n        - colors (list of strings; optional):\n            当前预设项所包含的颜色值数组.\n\n        - defaultOpen (boolean; optional):\n            当前预设项默认是否展开 默认值：`True`.\n\n    - placement (a value equal to: 'top', 'topLeft', 'topRight', 'bottom', 'bottomLeft', 'bottomRight'; default 'bottomLeft'):\n        颜色选择面板展开方向，可选项有`'top'`、`'topLeft'`、`'topRight'`、`'bottom'`、`'bottomLeft'`、`'bottomRight'`\n        默认值：`'bottomRight'`.\n\n    - showText (boolean; default False):\n        是否显示颜色值文本 默认值：`False`.\n\n    - size (a value equal to: 'large', 'middle', 'small'; default 'middle'):\n        设置触发控件尺寸规格，可选项有`'large'`、`'middle'`、`'small'` 默认值：`'middle'`.\n\n    - trigger (a value equal to: 'hover', 'click'; default 'click'):\n        颜色选择面板触发方式，可选项有`'hover'`、`'click'` 默认值：`'click'`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = ['presets[].label']\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdColorPicker'\n    Arrow = TypedDict('Arrow', {'pointAtCenter': NotRequired[bool]})\n\n    Presets = TypedDict(\n        'Presets',\n        {\n            'label': NotRequired[ComponentType],\n            'colors': NotRequired[typing.Sequence[str]],\n            'defaultOpen': NotRequired[bool],\n        },\n    )\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        locale: typing.Optional[Literal['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']] = None,\n        name: typing.Optional[str] = None,\n        enableBatchControl: typing.Optional[bool] = None,\n        allowClear: typing.Optional[bool] = None,\n        arrow: typing.Optional[typing.Union[bool, 'Arrow']] = None,\n        defaultValue: typing.Optional[str] = None,\n        value: typing.Optional[str] = None,\n        format: typing.Optional[Literal['rgb', 'hex', 'hsb']] = None,\n        mode: typing.Optional[\n            typing.Union[\n                Literal['single', 'gradient'], typing.Sequence[Literal['single', 'gradient']]\n            ]\n        ] = None,\n        disabled: typing.Optional[bool] = None,\n        disabledAlpha: typing.Optional[bool] = None,\n        open: typing.Optional[bool] = None,\n        presets: typing.Optional[typing.Sequence['Presets']] = None,\n        placement: typing.Optional[\n            Literal['top', 'topLeft', 'topRight', 'bottom', 'bottomLeft', 'bottomRight']\n        ] = None,\n        showText: typing.Optional[bool] = None,\n        size: typing.Optional[Literal['large', 'middle', 'small']] = None,\n        trigger: typing.Optional[Literal['hover', 'click']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'locale',\n            'name',\n            'enableBatchControl',\n            'allowClear',\n            'arrow',\n            'defaultValue',\n            'value',\n            'format',\n            'mode',\n            'disabled',\n            'disabledAlpha',\n            'open',\n            'presets',\n            'placement',\n            'showText',\n            'size',\n            'trigger',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'locale',\n            'name',\n            'enableBatchControl',\n            'allowClear',\n            'arrow',\n            'defaultValue',\n            'value',\n            'format',\n            'mode',\n            'disabled',\n            'disabledAlpha',\n            'open',\n            'presets',\n            'placement',\n            'showText',\n            'size',\n            'trigger',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdColorPicker, self).__init__(**args)\n\n\nsetattr(AntdColorPicker, '__init__', _explicitize_args(AntdColorPicker.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdComment.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdComment(Component):\n    \"\"\"An AntdComment component.\n    评论组件AntdComment\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        传入内部嵌套的评论组件.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - locale (a value equal to: 'zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr'; default 'zh-cn'):\n        组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n        默认值：`'zh-cn'`.\n\n    - commentId (string; optional):\n        评论唯一id，可用于数据库匹配等场景.\n\n    - authorName (string; optional):\n        评论发布用户名.\n\n    - authorNameHref (string; optional):\n        评论发布用户名附带链接地址.\n\n    - publishTime (dict; required):\n        必填，配置发布日期时间相关参数.\n\n        `publishTime` is a dict with keys:\n\n        - value (string; required):\n            必填，日期时间字符串.\n\n        - format (string; optional):\n            与日期时间字符串匹配的格式.\n\n    - fromNow (boolean; default False):\n        是否以相对时间格式呈现发布日期时间.\n\n    - showLikeDislike (boolean; default True):\n        是否显示“支持/反对”按钮 默认值：`True`.\n\n    - showReply (boolean; default True):\n        是否显示“添加回复”按钮 默认值：`True`.\n\n    - showDelete (boolean; default False):\n        是否显示“删除”按钮 默认值：`False`.\n\n    - replyClicks (number; default 0):\n        监听“添加回复”按钮累计点击次数 默认值：`0`.\n\n    - deleteClicks (number; default 0):\n        监听“删除”按钮累计点击次数 默认值：`0`.\n\n    - commentContent (a list of or a singular dash component, string or number; optional):\n        组件型，评论正文内容.\n\n    - likesCount (number; default 0):\n        监听或设置“支持”次数.\n\n    - dislikesCount (number; default 0):\n        监听或设置“反对”次数.\n\n    - action (a value equal to: 'liked', 'disliked', 'default'; optional):\n        监听或设置当前评论“支持/反对”状态，可选项有`'liked'`、`'disliked'`、`'default'`\n        默认值：`'default'`.\n\n    - defaultAction (a value equal to: 'liked', 'disliked', 'default'; optional):\n        设置当前评论初始化时的“支持/反对”状态，可选项有`'liked'`、`'disliked'`、`'default'`.\n\n    - avatarProps (dict; optional):\n        配置评论用户头像，同`AntdAvatar`.\n\n    - popupContainer (a value equal to: 'parent', 'body'; default 'body'):\n        相关展开层锚定策略，可选项有`'parent'`、`'body'` 默认值：`'body'`.\n\n    - batchPropsNames (list of strings; optional):\n        需要纳入[批量属性监听](/batch-props-values)的若干属性名.\n\n    - batchPropsValues (dict; optional):\n        监听`batchPropsNames`中指定的若干属性值.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\n\n    - loading_state (dict; optional)\n\n        `loading_state` is a dict with keys:\n\n        - is_loading (boolean; optional):\n            Determines if the component is loading or not.\n\n        - prop_name (string; optional):\n            Holds which property is loading.\n\n        - component_name (string; optional):\n            Holds the name of the component that is loading.\"\"\"\n\n    _children_props: typing.List[str] = ['commentContent']\n    _base_nodes = ['commentContent', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdComment'\n    PublishTime = TypedDict('PublishTime', {'value': str, 'format': NotRequired[str]})\n\n    LoadingState = TypedDict(\n        'LoadingState',\n        {\n            'is_loading': NotRequired[bool],\n            'prop_name': NotRequired[str],\n            'component_name': NotRequired[str],\n        },\n    )\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        locale: typing.Optional[Literal['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']] = None,\n        commentId: typing.Optional[str] = None,\n        authorName: typing.Optional[str] = None,\n        authorNameHref: typing.Optional[str] = None,\n        publishTime: typing.Optional['PublishTime'] = None,\n        fromNow: typing.Optional[bool] = None,\n        showLikeDislike: typing.Optional[bool] = None,\n        showReply: typing.Optional[bool] = None,\n        showDelete: typing.Optional[bool] = None,\n        replyClicks: typing.Optional[NumberType] = None,\n        deleteClicks: typing.Optional[NumberType] = None,\n        commentContent: typing.Optional[ComponentType] = None,\n        likesCount: typing.Optional[NumberType] = None,\n        dislikesCount: typing.Optional[NumberType] = None,\n        action: typing.Optional[Literal['liked', 'disliked', 'default']] = None,\n        defaultAction: typing.Optional[Literal['liked', 'disliked', 'default']] = None,\n        avatarProps: typing.Optional[dict] = None,\n        popupContainer: typing.Optional[Literal['parent', 'body']] = None,\n        batchPropsNames: typing.Optional[typing.Sequence[str]] = None,\n        batchPropsValues: typing.Optional[dict] = None,\n        loading_state: typing.Optional['LoadingState'] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'children',\n            'key',\n            'style',\n            'className',\n            'locale',\n            'commentId',\n            'authorName',\n            'authorNameHref',\n            'publishTime',\n            'fromNow',\n            'showLikeDislike',\n            'showReply',\n            'showDelete',\n            'replyClicks',\n            'deleteClicks',\n            'commentContent',\n            'likesCount',\n            'dislikesCount',\n            'action',\n            'defaultAction',\n            'avatarProps',\n            'popupContainer',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'loading_state',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'children',\n            'key',\n            'style',\n            'className',\n            'locale',\n            'commentId',\n            'authorName',\n            'authorNameHref',\n            'publishTime',\n            'fromNow',\n            'showLikeDislike',\n            'showReply',\n            'showDelete',\n            'replyClicks',\n            'deleteClicks',\n            'commentContent',\n            'likesCount',\n            'dislikesCount',\n            'action',\n            'defaultAction',\n            'avatarProps',\n            'popupContainer',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'loading_state',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        for k in ['publishTime']:\n            if k not in args:\n                raise TypeError('Required argument `' + k + '` was not specified.')\n\n        super(AntdComment, self).__init__(children=children, **args)\n\n\nsetattr(AntdComment, '__init__', _explicitize_args(AntdComment.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdCompact.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdCompact(Component):\n    \"\"\"An AntdCompact component.\n    紧凑排列组件AntdCompact\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，内嵌元素.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - direction (a value equal to: 'vertical', 'horizontal'; default 'horizontal'):\n        排列方向，可选项有`'vertical'`、`'horizontal'` 默认值：`'horizontal'`.\n\n    - block (boolean; default False):\n        是否渲染为块级元素（宽度撑满父容器） 默认值：`False`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = []\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdCompact'\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        direction: typing.Optional[Literal['vertical', 'horizontal']] = None,\n        block: typing.Optional[bool] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'direction',\n            'block',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'direction',\n            'block',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdCompact, self).__init__(children=children, **args)\n\n\nsetattr(AntdCompact, '__init__', _explicitize_args(AntdCompact.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdConfigProvider.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdConfigProvider(Component):\n    \"\"\"An AntdConfigProvider component.\n    参数配置组件AntdConfigProvider\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，内嵌元素.\n\n    - algorithm (a value equal to: 'default', 'dark', 'compact' | list of a value equal to: 'default', 'dark', 'compact's; default 'default'):\n        为内部组件设置快捷主题算法，支持多种主题组合，可选项有`'default'`、`'dark'`、`'compact'`\n        默认值：`'default'`.\n\n    - cssVar (dict; optional):\n        是否开启`CSS`变量模式，具体参考：https://ant-design.antgroup.com/docs/react/css-variables\n        默认值：`False`.\n\n        `cssVar` is a boolean | dict with keys:\n\n        - prefix (string; optional)\n\n        - key (string; optional)\n\n    - useOldTheme (a value equal to: 'default', 'dark'; optional):\n        是否强制使用`0.3.x`版本之前的主题样式，可选项有`'default'`、`'dark'`.\n\n    - primaryColor (string; optional):\n        主题色.\n\n    - componentDisabled (boolean; optional):\n        是否针后代元素中的所有组件强制设置禁用状态.\n\n    - componentSize (a value equal to: 'small', 'middle', 'large'; optional):\n        强制设置后代元素的尺寸规格，可选项有`'small'`、`'middle'`、`'large'`，其中`'default'`兼容`'middle'`.\n\n    - locale (a value equal to: 'zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr'; optional):\n        强制设置后代元素的语言，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）.\n\n    - wavesDisabled (boolean; default False):\n        是否禁用内部组件水波纹动效 默认值：`False`.\n\n    - token (dict; optional):\n        配置`design token`相关参数.\n\n        `token` is a dict with keys:\n\n        - motion (boolean; optional):\n            是否开启动画效果 默认值：`True`.\n\n    - componentsToken (dict; optional):\n        配置针对具体组件的`design token`相关参数.\n\n        `componentsToken` is a dict with strings as keys and values of\n        type dict with keys:\n\n        - algorithm (boolean; optional):\n            是否开启派生样式自动推导运算 默认值：`False`.\n\n    - compatibilityMode (boolean; default False):\n        是否开启针对`88`及以下版本`Chromium`内核浏览器的向下兼容模式 默认值：`False`.\n\n    - enableLayer (boolean; default False):\n        是否启用layer样式降权 默认值：`False`.\"\"\"\n\n    _children_props: typing.List[str] = []\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdConfigProvider'\n    CssVar = TypedDict('CssVar', {'prefix': NotRequired[str], 'key': NotRequired[str]})\n\n    Token = TypedDict('Token', {'motion': NotRequired[bool]})\n\n    ComponentsToken = TypedDict('ComponentsToken', {'algorithm': NotRequired[bool]})\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        algorithm: typing.Optional[\n            typing.Union[\n                Literal['default', 'dark', 'compact'],\n                typing.Sequence[Literal['default', 'dark', 'compact']],\n            ]\n        ] = None,\n        cssVar: typing.Optional[typing.Union[bool, 'CssVar']] = None,\n        useOldTheme: typing.Optional[Literal['default', 'dark']] = None,\n        primaryColor: typing.Optional[str] = None,\n        componentDisabled: typing.Optional[bool] = None,\n        componentSize: typing.Optional[Literal['small', 'middle', 'large']] = None,\n        locale: typing.Optional[Literal['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']] = None,\n        wavesDisabled: typing.Optional[bool] = None,\n        token: typing.Optional['Token'] = None,\n        componentsToken: typing.Optional[\n            typing.Dict[typing.Union[str, float, int], 'ComponentsToken']\n        ] = None,\n        compatibilityMode: typing.Optional[bool] = None,\n        enableLayer: typing.Optional[bool] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'algorithm',\n            'cssVar',\n            'useOldTheme',\n            'primaryColor',\n            'componentDisabled',\n            'componentSize',\n            'locale',\n            'wavesDisabled',\n            'token',\n            'componentsToken',\n            'compatibilityMode',\n            'enableLayer',\n        ]\n        self._valid_wildcard_attributes = []\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'algorithm',\n            'cssVar',\n            'useOldTheme',\n            'primaryColor',\n            'componentDisabled',\n            'componentSize',\n            'locale',\n            'wavesDisabled',\n            'token',\n            'componentsToken',\n            'compatibilityMode',\n            'enableLayer',\n        ]\n        self.available_wildcard_properties = []\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdConfigProvider, self).__init__(children=children, **args)\n\n\nsetattr(AntdConfigProvider, '__init__', _explicitize_args(AntdConfigProvider.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdContent.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdContent(Component):\n    \"\"\"An AntdContent component.\n    内容区组件AntdContent\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，内嵌元素.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = []\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdContent'\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        **kwargs,\n    ):\n        self._prop_names = ['id', 'key', 'children', 'style', 'className', 'data-*', 'aria-*']\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdContent, self).__init__(children=children, **args)\n\n\nsetattr(AntdContent, '__init__', _explicitize_args(AntdContent.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdCopyText.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdCopyText(Component):\n    \"\"\"An AntdCopyText component.\n    文字复制组件AntdCopyText\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - locale (a value equal to: 'zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr'; default 'zh-cn'):\n        组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n        默认值：`'zh-cn'`.\n\n    - text (string; default ''):\n        复制目标内容.\n\n    - format (a value equal to: 'text/plain', 'text/html'; default 'text/plain'):\n        剪切板内容的类型，可选项有`'text/plain'`、`text/html` 默认值：`'text/plain'`.\n\n    - tooltips (list of a list of or a singular dash component, string or numbers | boolean; optional):\n        设置复制前后的文字提示内容，格式为`[复制前内容, 复制后内容]`，设置为`False`时关闭文字提示.\n\n    - beforeIcon (a list of or a singular dash component, string or number; optional):\n        组件型，未复制状态图标.\n\n    - afterIcon (a list of or a singular dash component, string or number; optional):\n        组件型，完成复制状态图标.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = ['tooltips', 'beforeIcon', 'afterIcon']\n    _base_nodes = ['tooltips', 'beforeIcon', 'afterIcon', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdCopyText'\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        locale: typing.Optional[Literal['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']] = None,\n        text: typing.Optional[str] = None,\n        format: typing.Optional[Literal['text/plain', 'text/html']] = None,\n        tooltips: typing.Optional[typing.Union[typing.Sequence[ComponentType], bool]] = None,\n        beforeIcon: typing.Optional[ComponentType] = None,\n        afterIcon: typing.Optional[ComponentType] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'locale',\n            'text',\n            'format',\n            'tooltips',\n            'beforeIcon',\n            'afterIcon',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'locale',\n            'text',\n            'format',\n            'tooltips',\n            'beforeIcon',\n            'afterIcon',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdCopyText, self).__init__(**args)\n\n\nsetattr(AntdCopyText, '__init__', _explicitize_args(AntdCopyText.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdCountdown.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdCountdown(Component):\n    \"\"\"An AntdCountdown component.\n    倒计时组件AntdCountdown\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - format (string; optional):\n        日期时间显示格式，[参考资料](https://day.js.org/docs/en/display/format)，如`HH:mm:ss`代表`时:分:秒`.\n\n    - value (string; optional):\n        目标截止日期时间字符串，与`valueFormat`对应.\n\n    - valueFormat (string; default 'YYYY-MM-DD hh:mm:ss'):\n        针对`value`设置对应的日期时间解析格式，[参考资料](https://day.js.org/docs/en/display/format)\n        默认值：`'YYYY-MM-DD hh:mm:ss'`.\n\n    - prefix (a list of or a singular dash component, string or number; optional):\n        组件型，数值前缀内容.\n\n    - suffix (a list of or a singular dash component, string or number; optional):\n        组件型，数值后缀内容.\n\n    - title (a list of or a singular dash component, string or number; optional):\n        组件型，标题内容.\n\n    - titleTooltip (string; optional):\n        为标题内容添加额外鼠标悬停提示信息.\n\n    - valueStyle (dict; optional):\n        数值内容css样式.\n\n    - finishEvent (dict; optional):\n        监听倒计时结束事件.\n\n        `finishEvent` is a dict with keys:\n\n        - timestamp (number; optional):\n            事件时间戳.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = ['prefix', 'suffix', 'title']\n    _base_nodes = ['prefix', 'suffix', 'title', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdCountdown'\n    FinishEvent = TypedDict('FinishEvent', {'timestamp': NotRequired[NumberType]})\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        format: typing.Optional[str] = None,\n        value: typing.Optional[str] = None,\n        valueFormat: typing.Optional[str] = None,\n        prefix: typing.Optional[ComponentType] = None,\n        suffix: typing.Optional[ComponentType] = None,\n        title: typing.Optional[ComponentType] = None,\n        titleTooltip: typing.Optional[str] = None,\n        valueStyle: typing.Optional[dict] = None,\n        finishEvent: typing.Optional['FinishEvent'] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'format',\n            'value',\n            'valueFormat',\n            'prefix',\n            'suffix',\n            'title',\n            'titleTooltip',\n            'valueStyle',\n            'finishEvent',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'format',\n            'value',\n            'valueFormat',\n            'prefix',\n            'suffix',\n            'title',\n            'titleTooltip',\n            'valueStyle',\n            'finishEvent',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdCountdown, self).__init__(**args)\n\n\nsetattr(AntdCountdown, '__init__', _explicitize_args(AntdCountdown.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdCountup.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdCountup(Component):\n    \"\"\"An AntdCountup component.\n    正计时组件AntdCountup\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - format (string; optional):\n        日期时间显示格式，[参考资料](https://day.js.org/docs/en/display/format)，如`HH:mm:ss`代表`时:分:秒`.\n\n    - value (string; optional):\n        目标截止日期时间字符串，与`valueFormat`对应.\n\n    - valueFormat (string; default 'YYYY-MM-DD hh:mm:ss'):\n        针对`value`设置对应的日期时间解析格式，[参考资料](https://day.js.org/docs/en/display/format)\n        默认值：`'YYYY-MM-DD hh:mm:ss'`.\n\n    - prefix (a list of or a singular dash component, string or number; optional):\n        组件型，数值前缀内容.\n\n    - suffix (a list of or a singular dash component, string or number; optional):\n        组件型，数值后缀内容.\n\n    - title (a list of or a singular dash component, string or number; optional):\n        组件型，标题内容.\n\n    - titleTooltip (string; optional):\n        为标题内容添加额外鼠标悬停提示信息.\n\n    - valueStyle (dict; optional):\n        数值内容css样式.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = ['prefix', 'suffix', 'title']\n    _base_nodes = ['prefix', 'suffix', 'title', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdCountup'\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        format: typing.Optional[str] = None,\n        value: typing.Optional[str] = None,\n        valueFormat: typing.Optional[str] = None,\n        prefix: typing.Optional[ComponentType] = None,\n        suffix: typing.Optional[ComponentType] = None,\n        title: typing.Optional[ComponentType] = None,\n        titleTooltip: typing.Optional[str] = None,\n        valueStyle: typing.Optional[dict] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'format',\n            'value',\n            'valueFormat',\n            'prefix',\n            'suffix',\n            'title',\n            'titleTooltip',\n            'valueStyle',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'format',\n            'value',\n            'valueFormat',\n            'prefix',\n            'suffix',\n            'title',\n            'titleTooltip',\n            'valueStyle',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdCountup, self).__init__(**args)\n\n\nsetattr(AntdCountup, '__init__', _explicitize_args(AntdCountup.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdCustomSkeleton.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdCustomSkeleton(Component):\n    \"\"\"An AntdCustomSkeleton component.\n    自定义骨架屏组件AntdCustomSkeleton\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，内嵌元素.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - skeletonContent (a list of or a singular dash component, string or number; optional):\n        组件型，加载状态下显示的内容.\n\n    - loading (boolean; default False):\n        是否处于加载中状态.\n\n    - delay (number; optional):\n        加载动画渲染延时，单位：毫秒 默认值：`0`.\n\n    - debug (boolean; default False):\n        是否开启debug模式，开启后，每次动画加载都会在开发者工具的控制台打印相关`prop`信息 默认值：`False`.\n\n    - listenPropsMode (a value equal to: 'default', 'exclude', 'include'; default 'default'):\n        监听模式，可选项有`'default'`、`'exclude'`、`'include'` 默认值：`'default'`.\n\n    - excludeProps (list of strings; optional):\n        `listenPropsMode='exclude'`时，设置需要排除监听的回调目标列表，格式如`['组件id1.组件属性1',\n        '组件id2.组件属性2', ...]`.\n\n    - includeProps (list of strings; optional):\n        `listenPropsMode='include'`时，设置需要包含监听的回调目标列表，格式如`['组件id1.组件属性1',\n        '组件id2.组件属性2', ...]`.\n\n    - manual (boolean; default False):\n        是否开启手动控制模式，开启后是否处于加载状态将由`loading`参数控制，与内部元素参与的回调状态无关 默认值：`False`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = ['skeletonContent']\n    _base_nodes = ['skeletonContent', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdCustomSkeleton'\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        skeletonContent: typing.Optional[ComponentType] = None,\n        loading: typing.Optional[bool] = None,\n        delay: typing.Optional[NumberType] = None,\n        debug: typing.Optional[bool] = None,\n        listenPropsMode: typing.Optional[Literal['default', 'exclude', 'include']] = None,\n        excludeProps: typing.Optional[typing.Sequence[str]] = None,\n        includeProps: typing.Optional[typing.Sequence[str]] = None,\n        manual: typing.Optional[bool] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'skeletonContent',\n            'loading',\n            'delay',\n            'debug',\n            'listenPropsMode',\n            'excludeProps',\n            'includeProps',\n            'manual',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'skeletonContent',\n            'loading',\n            'delay',\n            'debug',\n            'listenPropsMode',\n            'excludeProps',\n            'includeProps',\n            'manual',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdCustomSkeleton, self).__init__(children=children, **args)\n\n\nsetattr(AntdCustomSkeleton, '__init__', _explicitize_args(AntdCustomSkeleton.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdDatePicker.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdDatePicker(Component):\n    \"\"\"An AntdDatePicker component.\n    日期选择组件AntdDatePicker\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - popupClassName (string; optional):\n        展开菜单css类名.\n\n    - name (string; optional):\n        配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值.\n\n    - enableBatchControl (boolean; default True):\n        控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能 默认值：`True`.\n\n    - locale (a value equal to: 'zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr'; default 'zh-cn'):\n        组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n        默认值：`'zh-cn'`.\n\n    - format (string; optional):\n        日期时间显示格式，[参考资料](https://day.js.org/docs/en/display/format)\n        默认值：`'YYYY-MM-DD'`.\n\n    - picker (a value equal to: 'date', 'week', 'month', 'quarter', 'year'; default 'date'):\n        日期选择粒度，可选项有`'date'`、`'week'`、`'month'`、`'quarter'`、`'year'`\n        默认值：`'date'`.\n\n    - firstDayOfWeek (number; optional):\n        自定义每周起始日下标.\n\n    - disabled (boolean; default False):\n        是否禁用当前组件 默认值：`False`.\n\n    - showTime (dict; default False):\n        配置时间选择面板相关参数 默认值：`False`.\n\n        `showTime` is a boolean | dict with keys:\n\n        - defaultValue (string; optional):\n            时间选择面板初始化选中时间字符串.\n\n        - format (string; optional):\n            与`defaultValue`对应的时间格式，[参考资料](https://day.js.org/docs/en/display/format)\n            默认值：`'HH:mm:ss'`.\n\n    - size (a value equal to: 'small', 'middle', 'large'; default 'middle'):\n        当前组件尺寸规格，可选项有`'small'`、`'middle'`、`'large'` 默认值：`'middle'`.\n\n    - bordered (boolean; default True):\n        是否显示边框，设置为`True`时等价于`variant='outlined'` 默认值：`True`.\n\n    - variant (a value equal to: 'outlined', 'borderless', 'filled', 'underlined'; optional):\n        形态变体类型，可选项有`'outlined'`、`'borderless'`、`'filled'`、`'underlined'`，其中`'outlined'`等价于`bordered=True`，但优先级更高.\n\n    - placeholder (string; optional):\n        输入框占位文字内容.\n\n    - placement (a value equal to: 'bottomLeft', 'bottomRight', 'topLeft', 'topRight'; default 'bottomLeft'):\n        选择面板展开方向，可选项有`'bottomLeft'`、`'bottomRight'`、`'topLeft'`、`'topRight'`\n        默认值：`'bottomLeft'`.\n\n    - value (string; optional):\n        监听或设置已选值，与`format`格式对应.\n\n    - defaultValue (string; optional):\n        初始化已选值，与`format`格式对应.\n\n    - pickerValue (string; optional):\n        监听或设置面板展开对应日期，与`format`格式对应.\n\n    - disabledDatesStrategy (list of dicts; optional):\n        配置日期禁用项策略数组，满足策略中至少一项规则的日期将会被禁止选中.\n\n        `disabledDatesStrategy` is a list of dicts with keys:\n\n        - mode (a value equal to: 'eq', 'ne', 'le', 'lt', 'ge', 'gt', 'in', 'not-in', 'in-enumerate-dates', 'not-in-enumerate-dates'; optional):\n            当前策略类型，可选项有`'eq'`（等于）、`'ne'`（不等于）、`'le'`（小于等于）、`'lt'`（小于）、`'ge'`（大于等于）\n            、`'gt'`（大于）、`'in'`（属于）、`'not-in'`（不属于）、`'in-enumerate-dates'`（属于日期字符串枚举数组），`'not-in-enumerate-dates'`（不属于日期字符串枚举数组）.\n\n        - target (a value equal to: 'day', 'month', 'quarter', 'year', 'dayOfYear', 'dayOfWeek', 'specific-date'; optional):\n            当前策略约束目标，可选项有`'dayOfYear'`（按年份天数）、`'dayOfWeek'`（按周天数）、`'day'`（按日）\n            、`'month'`（按月份）、`'quarter'`（按季度）、`'year'`（按年份）、`'specific-date'`（具体日期）\n            ，其中在`'specific-date'`目标下，`value`值将严格按照`'YYYY-MM-DD'`格式进行解析.\n\n        - value (number | string | list of numbers | list of strings; optional):\n            与策略类型、策略约束目标相对应的实际约束值.\n\n    - status (a value equal to: 'error', 'warning'; optional):\n        控制校验状态，可选项有`'error'`、`'warning'`.\n\n    - allowClear (boolean; default True):\n        是否允许一键清空已选值 默认值：`True`.\n\n    - autoFocus (boolean; default False):\n        是否自动获取焦点 默认值：`False`.\n\n    - readOnly (boolean; optional):\n        是否渲染为只读状态 默认值：`False`.\n\n    - extraFooter (a list of or a singular dash component, string or number; optional):\n        组件型，底部额外区域内容.\n\n    - showToday (boolean; default True):\n        是否显示“今天”快捷选择按钮 默认值：`True`.\n\n    - presets (list of dicts; optional):\n        配置预设项列表.\n\n        `presets` is a list of dicts with keys:\n\n        - label (a list of or a singular dash component, string or number; optional):\n            组件型，当前预设项标题.\n\n        - value (string; optional):\n            当前预设项对应值，与`format`格式对应.\n\n    - clickedPreset (dict; optional):\n        配合`presets`参数，监听最近一次预设项点击事件相关信息.\n\n        `clickedPreset` is a dict with keys:\n\n        - value (string | number; optional):\n            对应预设项值.\n\n        - timestamp (number; optional):\n            事件对应时间戳信息.\n\n    - needConfirm (boolean; default False):\n        是否需要点击按钮确认选值，传入`False`时失去焦点即代表选择 默认值：`False`.\n\n    - customCells (list of dicts; optional):\n        自定义对应日期的单元格样式.\n\n        `customCells` is a list of dicts with keys:\n\n        - year (number; optional):\n            当前项匹配的年份值.\n\n        - month (number; optional):\n            当前项匹配的月份值.\n\n        - date (number; optional):\n            当前项匹配的日期值.\n\n        - style (dict; optional):\n            自定义css样式.\n\n        - className (string; optional):\n            自定义css类名.\n\n    - prefix (a list of or a singular dash component, string or number; optional):\n        组件型，前缀内嵌内容.\n\n    - suffixIcon (a list of or a singular dash component, string or number; optional):\n        自定义选择框后缀图标内容.\n\n    - popupContainer (a value equal to: 'parent', 'body'; default 'body'):\n        相关展开层锚定策略，可选项有`'parent'`、`'body'` 默认值：`'body'`.\n\n    - batchPropsNames (list of strings; optional):\n        需要纳入[批量属性监听](/batch-props-values)的若干属性名.\n\n    - batchPropsValues (dict; optional):\n        监听`batchPropsNames`中指定的若干属性值.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\n\n    - persistence (boolean | string | number; optional):\n        是否开启[属性持久化](/prop-persistence).\n\n    - persisted_props (list of a value equal to: 'value's; optional):\n        开启属性持久化功能的若干属性名，可选项有`'value'` 默认值：`['value']`.\n\n    - persistence_type (a value equal to: 'local', 'session', 'memory'; optional):\n        属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n        默认值：`'local'`.\"\"\"\n\n    _children_props: typing.List[str] = ['extraFooter', 'presets[].label', 'prefix', 'suffixIcon']\n    _base_nodes = ['extraFooter', 'prefix', 'suffixIcon', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdDatePicker'\n    ShowTime = TypedDict('ShowTime', {'defaultValue': NotRequired[str], 'format': NotRequired[str]})\n\n    DisabledDatesStrategy = TypedDict(\n        'DisabledDatesStrategy',\n        {\n            'mode': NotRequired[\n                Literal[\n                    'eq',\n                    'ne',\n                    'le',\n                    'lt',\n                    'ge',\n                    'gt',\n                    'in',\n                    'not-in',\n                    'in-enumerate-dates',\n                    'not-in-enumerate-dates',\n                ]\n            ],\n            'target': NotRequired[\n                Literal[\n                    'day', 'month', 'quarter', 'year', 'dayOfYear', 'dayOfWeek', 'specific-date'\n                ]\n            ],\n            'value': NotRequired[\n                typing.Union[NumberType, str, typing.Sequence[NumberType], typing.Sequence[str]]\n            ],\n        },\n    )\n\n    Presets = TypedDict('Presets', {'label': NotRequired[ComponentType], 'value': NotRequired[str]})\n\n    ClickedPreset = TypedDict(\n        'ClickedPreset',\n        {'value': NotRequired[typing.Union[str, NumberType]], 'timestamp': NotRequired[NumberType]},\n    )\n\n    CustomCells = TypedDict(\n        'CustomCells',\n        {\n            'year': NotRequired[NumberType],\n            'month': NotRequired[NumberType],\n            'date': NotRequired[NumberType],\n            'style': NotRequired[dict],\n            'className': NotRequired[str],\n        },\n    )\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        popupClassName: typing.Optional[str] = None,\n        name: typing.Optional[str] = None,\n        enableBatchControl: typing.Optional[bool] = None,\n        locale: typing.Optional[Literal['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']] = None,\n        format: typing.Optional[str] = None,\n        picker: typing.Optional[Literal['date', 'week', 'month', 'quarter', 'year']] = None,\n        firstDayOfWeek: typing.Optional[NumberType] = None,\n        disabled: typing.Optional[bool] = None,\n        showTime: typing.Optional[typing.Union[bool, 'ShowTime']] = None,\n        size: typing.Optional[Literal['small', 'middle', 'large']] = None,\n        bordered: typing.Optional[bool] = None,\n        variant: typing.Optional[Literal['outlined', 'borderless', 'filled', 'underlined']] = None,\n        placeholder: typing.Optional[str] = None,\n        placement: typing.Optional[\n            Literal['bottomLeft', 'bottomRight', 'topLeft', 'topRight']\n        ] = None,\n        value: typing.Optional[str] = None,\n        defaultValue: typing.Optional[str] = None,\n        pickerValue: typing.Optional[str] = None,\n        disabledDatesStrategy: typing.Optional[typing.Sequence['DisabledDatesStrategy']] = None,\n        status: typing.Optional[Literal['error', 'warning']] = None,\n        allowClear: typing.Optional[bool] = None,\n        autoFocus: typing.Optional[bool] = None,\n        readOnly: typing.Optional[bool] = None,\n        extraFooter: typing.Optional[ComponentType] = None,\n        showToday: typing.Optional[bool] = None,\n        presets: typing.Optional[typing.Sequence['Presets']] = None,\n        clickedPreset: typing.Optional['ClickedPreset'] = None,\n        needConfirm: typing.Optional[bool] = None,\n        customCells: typing.Optional[typing.Sequence['CustomCells']] = None,\n        prefix: typing.Optional[ComponentType] = None,\n        suffixIcon: typing.Optional[ComponentType] = None,\n        popupContainer: typing.Optional[Literal['parent', 'body']] = None,\n        batchPropsNames: typing.Optional[typing.Sequence[str]] = None,\n        batchPropsValues: typing.Optional[dict] = None,\n        persistence: typing.Optional[typing.Union[bool, str, NumberType]] = None,\n        persisted_props: typing.Optional[typing.Sequence[Literal['value']]] = None,\n        persistence_type: typing.Optional[Literal['local', 'session', 'memory']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'popupClassName',\n            'name',\n            'enableBatchControl',\n            'locale',\n            'format',\n            'picker',\n            'firstDayOfWeek',\n            'disabled',\n            'showTime',\n            'size',\n            'bordered',\n            'variant',\n            'placeholder',\n            'placement',\n            'value',\n            'defaultValue',\n            'pickerValue',\n            'disabledDatesStrategy',\n            'status',\n            'allowClear',\n            'autoFocus',\n            'readOnly',\n            'extraFooter',\n            'showToday',\n            'presets',\n            'clickedPreset',\n            'needConfirm',\n            'customCells',\n            'prefix',\n            'suffixIcon',\n            'popupContainer',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'popupClassName',\n            'name',\n            'enableBatchControl',\n            'locale',\n            'format',\n            'picker',\n            'firstDayOfWeek',\n            'disabled',\n            'showTime',\n            'size',\n            'bordered',\n            'variant',\n            'placeholder',\n            'placement',\n            'value',\n            'defaultValue',\n            'pickerValue',\n            'disabledDatesStrategy',\n            'status',\n            'allowClear',\n            'autoFocus',\n            'readOnly',\n            'extraFooter',\n            'showToday',\n            'presets',\n            'clickedPreset',\n            'needConfirm',\n            'customCells',\n            'prefix',\n            'suffixIcon',\n            'popupContainer',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdDatePicker, self).__init__(**args)\n\n\nsetattr(AntdDatePicker, '__init__', _explicitize_args(AntdDatePicker.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdDateRangePicker.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdDateRangePicker(Component):\n    \"\"\"An AntdDateRangePicker component.\n    日期范围选择组件AntdDateRangePicker\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - popupClassName (string; optional):\n        展开菜单css类名.\n\n    - name (string; optional):\n        配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值.\n\n    - enableBatchControl (boolean; default True):\n        控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能 默认值：`True`.\n\n    - locale (a value equal to: 'zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr'; default 'zh-cn'):\n        组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n        默认值：`'zh-cn'`.\n\n    - format (string; optional):\n        日期时间显示格式，[参考资料](https://day.js.org/docs/en/display/format)\n        默认值：`'YYYY-MM-DD'`.\n\n    - picker (a value equal to: 'date', 'week', 'month', 'quarter', 'year'; default 'date'):\n        日期选择粒度，可选项有`'date'`、`'week'`、`'month'`、`'quarter'`、`'year'`\n        默认值：`'date'`.\n\n    - firstDayOfWeek (number; optional):\n        自定义每周起始日下标.\n\n    - disabled (list of booleans; default [False, False]):\n        是否禁用当前组件 默认值：`False`.\n\n    - showTime (dict; default False):\n        配置时间选择面板相关参数 默认值：`False`.\n\n        `showTime` is a boolean | dict with keys:\n\n        - defaultValue (list of strings; optional):\n            时间选择面板初始化选中时间字符串.\n\n        - format (string; optional):\n            与`defaultValue`对应的时间格式，[参考资料](https://day.js.org/docs/en/display/format)\n            默认值：`'HH:mm:ss'`.\n\n    - size (a value equal to: 'small', 'middle', 'large'; default 'middle'):\n        当前组件尺寸规格，可选项有`'small'`、`'middle'`、`'large'` 默认值：`'middle'`.\n\n    - bordered (boolean; default True):\n        是否显示边框，设置为`True`时等价于`variant='outlined'` 默认值：`True`.\n\n    - variant (a value equal to: 'outlined', 'borderless', 'filled', 'underlined'; optional):\n        形态变体类型，可选项有`'outlined'`、`'borderless'`、`'filled'`、`'underlined'`，其中`'outlined'`等价于`bordered=True`，但优先级更高.\n\n    - placeholder (list of strings; optional):\n        输入框占位文字内容.\n\n    - placement (a value equal to: 'bottomLeft', 'bottomRight', 'topLeft', 'topRight'; default 'bottomLeft'):\n        选择面板展开方向，可选项有`'bottomLeft'`、`'bottomRight'`、`'topLeft'`、`'topRight'`\n        默认值：`'bottomLeft'`.\n\n    - value (list of strings; optional):\n        监听或设置已选值，与`format`格式对应.\n\n    - defaultValue (list of strings; optional):\n        初始化已选值，与`format`格式对应.\n\n    - pickerValue (string | list of strings; optional):\n        监听或设置面板展开对应日期，与`format`格式对应.\n\n    - disabledDatesStrategy (list of dicts; optional):\n        配置日期禁用项策略数组，满足策略中至少一项规则的日期将会被禁止选中.\n\n        `disabledDatesStrategy` is a list of dicts with keys:\n\n        - mode (a value equal to: 'eq', 'ne', 'le', 'lt', 'ge', 'gt', 'in', 'not-in', 'in-enumerate-dates', 'not-in-enumerate-dates'; optional):\n            当前策略类型，可选项有`'eq'`（等于）、`'ne'`（不等于）、`'le'`（小于等于）、`'lt'`（小于）、`'ge'`（大于等于）\n            、`'gt'`（大于）、`'in'`（属于）、`'not-in'`（不属于）、`'in-enumerate-dates'`（属于日期字符串枚举数组），`'not-in-enumerate-dates'`（不属于日期字符串枚举数组）.\n\n        - target (a value equal to: 'day', 'month', 'quarter', 'year', 'dayOfYear', 'dayOfWeek', 'specific-date'; optional):\n            当前策略约束目标，可选项有`'dayOfYear'`（按年份天数）、`'dayOfWeek'`（按周天数）、`'day'`（按日）\n            、`'month'`（按月份）、`'quarter'`（按季度）、`'year'`（按年份）、`'specific-date'`（具体日期）\n            ，其中在`'specific-date'`目标下，`value`值将严格按照`'YYYY-MM-DD'`格式进行解析.\n\n        - value (number | string | list of numbers | list of strings; optional):\n            与策略类型、策略约束目标相对应的实际约束值.\n\n    - open (boolean; optional):\n        监听或设置当前日期范围选择面板是否展开.\n\n    - status (a value equal to: 'error', 'warning'; optional):\n        控制校验状态，可选项有`'error'`、`'warning'`.\n\n    - allowClear (boolean; default True):\n        是否允许一键清空已选值 默认值：`True`.\n\n    - autoFocus (boolean; default False):\n        是否自动获取焦点 默认值：`False`.\n\n    - readOnly (boolean; optional):\n        是否渲染为只读状态 默认值：`False`.\n\n    - extraFooter (a list of or a singular dash component, string or number; optional):\n        组件型，底部额外区域内容.\n\n    - presets (list of dicts; optional):\n        配置预设项列表.\n\n        `presets` is a list of dicts with keys:\n\n        - label (a list of or a singular dash component, string or number; optional):\n            组件型，当前预设项标题.\n\n        - value (list of strings; optional):\n            当前预设项对应值，与`format`格式对应.\n\n    - clickedPreset (dict; optional):\n        配合`presets`参数，监听最近一次预设项点击事件相关信息.\n\n        `clickedPreset` is a dict with keys:\n\n        - value (string | number; optional):\n            对应预设项值.\n\n        - timestamp (number; optional):\n            事件对应时间戳信息.\n\n    - needConfirm (boolean; default False):\n        是否需要点击按钮确认选值，传入`False`时失去焦点即代表选择 默认值：`False`.\n\n    - customCells (list of dicts; optional):\n        自定义对应日期的单元格样式.\n\n        `customCells` is a list of dicts with keys:\n\n        - year (number; optional):\n            当前项匹配的年份值.\n\n        - month (number; optional):\n            当前项匹配的月份值.\n\n        - date (number; optional):\n            当前项匹配的日期值.\n\n        - style (dict; optional):\n            自定义css样式.\n\n        - className (string; optional):\n            自定义css类名.\n\n    - prefix (a list of or a singular dash component, string or number; optional):\n        组件型，前缀内嵌内容.\n\n    - suffixIcon (a list of or a singular dash component, string or number; optional):\n        自定义选择框后缀图标内容.\n\n    - popupContainer (a value equal to: 'parent', 'body'; default 'body'):\n        相关展开层锚定策略，可选项有`'parent'`、`'body'` 默认值：`'body'`.\n\n    - batchPropsNames (list of strings; optional):\n        需要纳入[批量属性监听](/batch-props-values)的若干属性名.\n\n    - batchPropsValues (dict; optional):\n        监听`batchPropsNames`中指定的若干属性值.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\n\n    - persistence (boolean | string | number; optional):\n        是否开启[属性持久化](/prop-persistence).\n\n    - persisted_props (list of a value equal to: 'value's; optional):\n        开启属性持久化功能的若干属性名，可选项有`'value'` 默认值：`['value']`.\n\n    - persistence_type (a value equal to: 'local', 'session', 'memory'; optional):\n        属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n        默认值：`'local'`.\"\"\"\n\n    _children_props: typing.List[str] = ['extraFooter', 'presets[].label', 'prefix', 'suffixIcon']\n    _base_nodes = ['extraFooter', 'prefix', 'suffixIcon', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdDateRangePicker'\n    ShowTime = TypedDict(\n        'ShowTime', {'defaultValue': NotRequired[typing.Sequence[str]], 'format': NotRequired[str]}\n    )\n\n    DisabledDatesStrategy = TypedDict(\n        'DisabledDatesStrategy',\n        {\n            'mode': NotRequired[\n                Literal[\n                    'eq',\n                    'ne',\n                    'le',\n                    'lt',\n                    'ge',\n                    'gt',\n                    'in',\n                    'not-in',\n                    'in-enumerate-dates',\n                    'not-in-enumerate-dates',\n                ]\n            ],\n            'target': NotRequired[\n                Literal[\n                    'day', 'month', 'quarter', 'year', 'dayOfYear', 'dayOfWeek', 'specific-date'\n                ]\n            ],\n            'value': NotRequired[\n                typing.Union[NumberType, str, typing.Sequence[NumberType], typing.Sequence[str]]\n            ],\n        },\n    )\n\n    Presets = TypedDict(\n        'Presets', {'label': NotRequired[ComponentType], 'value': NotRequired[typing.Sequence[str]]}\n    )\n\n    ClickedPreset = TypedDict(\n        'ClickedPreset',\n        {'value': NotRequired[typing.Union[str, NumberType]], 'timestamp': NotRequired[NumberType]},\n    )\n\n    CustomCells = TypedDict(\n        'CustomCells',\n        {\n            'year': NotRequired[NumberType],\n            'month': NotRequired[NumberType],\n            'date': NotRequired[NumberType],\n            'style': NotRequired[dict],\n            'className': NotRequired[str],\n        },\n    )\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        popupClassName: typing.Optional[str] = None,\n        name: typing.Optional[str] = None,\n        enableBatchControl: typing.Optional[bool] = None,\n        locale: typing.Optional[Literal['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']] = None,\n        format: typing.Optional[str] = None,\n        picker: typing.Optional[Literal['date', 'week', 'month', 'quarter', 'year']] = None,\n        firstDayOfWeek: typing.Optional[NumberType] = None,\n        disabled: typing.Optional[typing.Sequence[bool]] = None,\n        showTime: typing.Optional[typing.Union[bool, 'ShowTime']] = None,\n        size: typing.Optional[Literal['small', 'middle', 'large']] = None,\n        bordered: typing.Optional[bool] = None,\n        variant: typing.Optional[Literal['outlined', 'borderless', 'filled', 'underlined']] = None,\n        placeholder: typing.Optional[typing.Sequence[str]] = None,\n        placement: typing.Optional[\n            Literal['bottomLeft', 'bottomRight', 'topLeft', 'topRight']\n        ] = None,\n        value: typing.Optional[typing.Sequence[str]] = None,\n        defaultValue: typing.Optional[typing.Sequence[str]] = None,\n        pickerValue: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,\n        disabledDatesStrategy: typing.Optional[typing.Sequence['DisabledDatesStrategy']] = None,\n        open: typing.Optional[bool] = None,\n        status: typing.Optional[Literal['error', 'warning']] = None,\n        allowClear: typing.Optional[bool] = None,\n        autoFocus: typing.Optional[bool] = None,\n        readOnly: typing.Optional[bool] = None,\n        extraFooter: typing.Optional[ComponentType] = None,\n        presets: typing.Optional[typing.Sequence['Presets']] = None,\n        clickedPreset: typing.Optional['ClickedPreset'] = None,\n        needConfirm: typing.Optional[bool] = None,\n        customCells: typing.Optional[typing.Sequence['CustomCells']] = None,\n        prefix: typing.Optional[ComponentType] = None,\n        suffixIcon: typing.Optional[ComponentType] = None,\n        popupContainer: typing.Optional[Literal['parent', 'body']] = None,\n        batchPropsNames: typing.Optional[typing.Sequence[str]] = None,\n        batchPropsValues: typing.Optional[dict] = None,\n        persistence: typing.Optional[typing.Union[bool, str, NumberType]] = None,\n        persisted_props: typing.Optional[typing.Sequence[Literal['value']]] = None,\n        persistence_type: typing.Optional[Literal['local', 'session', 'memory']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'popupClassName',\n            'name',\n            'enableBatchControl',\n            'locale',\n            'format',\n            'picker',\n            'firstDayOfWeek',\n            'disabled',\n            'showTime',\n            'size',\n            'bordered',\n            'variant',\n            'placeholder',\n            'placement',\n            'value',\n            'defaultValue',\n            'pickerValue',\n            'disabledDatesStrategy',\n            'open',\n            'status',\n            'allowClear',\n            'autoFocus',\n            'readOnly',\n            'extraFooter',\n            'presets',\n            'clickedPreset',\n            'needConfirm',\n            'customCells',\n            'prefix',\n            'suffixIcon',\n            'popupContainer',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'popupClassName',\n            'name',\n            'enableBatchControl',\n            'locale',\n            'format',\n            'picker',\n            'firstDayOfWeek',\n            'disabled',\n            'showTime',\n            'size',\n            'bordered',\n            'variant',\n            'placeholder',\n            'placement',\n            'value',\n            'defaultValue',\n            'pickerValue',\n            'disabledDatesStrategy',\n            'open',\n            'status',\n            'allowClear',\n            'autoFocus',\n            'readOnly',\n            'extraFooter',\n            'presets',\n            'clickedPreset',\n            'needConfirm',\n            'customCells',\n            'prefix',\n            'suffixIcon',\n            'popupContainer',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdDateRangePicker, self).__init__(**args)\n\n\nsetattr(AntdDateRangePicker, '__init__', _explicitize_args(AntdDateRangePicker.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdDescriptionItem.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdDescriptionItem(Component):\n    \"\"\"An AntdDescriptionItem component.\n    描述列表子项组件AntdDescriptionItem\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，内嵌元素.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - styles (dict; optional):\n        细分控制子元素css样式.\n\n        `styles` is a dict with keys:\n\n        - label (dict; optional):\n            标签元素css样式.\n\n        - content (dict; optional):\n            内容元素css样式.\n\n    - classNames (dict; optional):\n        细分控制子元素css类名.\n\n        `classNames` is a dict with keys:\n\n        - label (string; optional):\n            标签元素css类名.\n\n        - content (string; optional):\n            内容元素css类名.\n\n    - label (a list of or a singular dash component, string or number; optional):\n        组件型，标题内容.\n\n    - span (number; default 1):\n        所占宽度份数 默认值：`1`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = ['label']\n    _base_nodes = ['label', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdDescriptionItem'\n    Styles = TypedDict('Styles', {'label': NotRequired[dict], 'content': NotRequired[dict]})\n\n    ClassNames = TypedDict('ClassNames', {'label': NotRequired[str], 'content': NotRequired[str]})\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        styles: typing.Optional['Styles'] = None,\n        classNames: typing.Optional['ClassNames'] = None,\n        label: typing.Optional[ComponentType] = None,\n        span: typing.Optional[NumberType] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'styles',\n            'classNames',\n            'label',\n            'span',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'styles',\n            'classNames',\n            'label',\n            'span',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdDescriptionItem, self).__init__(children=children, **args)\n\n\nsetattr(AntdDescriptionItem, '__init__', _explicitize_args(AntdDescriptionItem.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdDescriptions.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdDescriptions(Component):\n    \"\"\"An AntdDescriptions component.\n    描述列表组件AntdDescriptions\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，传入内部各描述列表子项.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - styles (dict; optional):\n        细分控制子元素css样式.\n\n        `styles` is a dict with keys:\n\n        - root (dict; optional):\n            根元素css样式.\n\n        - header (dict; optional):\n            头部元素css样式.\n\n        - title (dict; optional):\n            标题元素css样式.\n\n        - extra (dict; optional):\n            额外内容css样式.\n\n        - label (dict; optional):\n            标签元素css样式.\n\n        - content (dict; optional):\n            内容元素css样式.\n\n    - classNames (dict; optional):\n        细分控制子元素css类名.\n\n        `classNames` is a dict with keys:\n\n        - root (string; optional):\n            根元素css类名.\n\n        - header (string; optional):\n            头部元素css类名.\n\n        - title (string; optional):\n            标题元素css类名.\n\n        - extra (string; optional):\n            额外内容css类名.\n\n        - label (string; optional):\n            标签元素css类名.\n\n        - content (string; optional):\n            内容元素css类名.\n\n    - items (list of dicts; optional):\n        配置描述列表子项，优先级高于`children`.\n\n        `items` is a list of dicts with keys:\n\n        - label (a list of or a singular dash component, string or number; optional):\n            组件型，子项标题内容.\n\n        - span (number | a value equal to: 'filled'; optional):\n            子项所占宽度份数，当设置为`'filled'`时会自适应占满当前行剩余可用空间 默认值：`1`.\n\n        - children (a list of or a singular dash component, string or number; optional):\n            组件型，子项内容.\n\n        - style (dict; optional):\n            子项css样式.\n\n        - className (string; optional):\n            子项css类名.\n\n    - title (a list of or a singular dash component, string or number; optional):\n        组件型，标题内容.\n\n    - column (dict; default 3):\n        每行显示的字段项数量，支持响应式 默认值：`3`.\n\n        `column` is a number | dict with keys:\n\n        - xxl (number; optional)\n\n        - xl (number; optional)\n\n        - lg (number; optional)\n\n        - md (number; optional)\n\n        - sm (number; optional)\n\n        - xs (number; optional)\n\n    - bordered (boolean; default False):\n        是否显示边框 默认值：`False`.\n\n    - size (a value equal to: 'small', 'default', 'large'; default 'default'):\n        整体尺寸规格，可选项有`'small'`、`'default'`、`'large'` 默认值：`'default'`.\n\n    - layout (a value equal to: 'horizontal', 'vertical'; default 'horizontal'):\n        布局方式，可选项有`'horizontal'`、`'vertical'` 默认值：`'horizontal'`.\n\n    - extra (a list of or a singular dash component, string or number; optional):\n        组件型，设置操作区域，显示在右上方.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = ['items[].label', 'items[].children', 'title', 'extra']\n    _base_nodes = ['title', 'extra', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdDescriptions'\n    Styles = TypedDict(\n        'Styles',\n        {\n            'root': NotRequired[dict],\n            'header': NotRequired[dict],\n            'title': NotRequired[dict],\n            'extra': NotRequired[dict],\n            'label': NotRequired[dict],\n            'content': NotRequired[dict],\n        },\n    )\n\n    ClassNames = TypedDict(\n        'ClassNames',\n        {\n            'root': NotRequired[str],\n            'header': NotRequired[str],\n            'title': NotRequired[str],\n            'extra': NotRequired[str],\n            'label': NotRequired[str],\n            'content': NotRequired[str],\n        },\n    )\n\n    Items = TypedDict(\n        'Items',\n        {\n            'label': NotRequired[ComponentType],\n            'span': NotRequired[typing.Union[NumberType, Literal['filled']]],\n            'children': NotRequired[ComponentType],\n            'style': NotRequired[dict],\n            'className': NotRequired[str],\n        },\n    )\n\n    Column = TypedDict(\n        'Column',\n        {\n            'xxl': NotRequired[NumberType],\n            'xl': NotRequired[NumberType],\n            'lg': NotRequired[NumberType],\n            'md': NotRequired[NumberType],\n            'sm': NotRequired[NumberType],\n            'xs': NotRequired[NumberType],\n        },\n    )\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        styles: typing.Optional['Styles'] = None,\n        classNames: typing.Optional['ClassNames'] = None,\n        items: typing.Optional[typing.Sequence['Items']] = None,\n        title: typing.Optional[ComponentType] = None,\n        column: typing.Optional[typing.Union[NumberType, 'Column']] = None,\n        bordered: typing.Optional[bool] = None,\n        size: typing.Optional[Literal['small', 'default', 'large']] = None,\n        layout: typing.Optional[Literal['horizontal', 'vertical']] = None,\n        extra: typing.Optional[ComponentType] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'styles',\n            'classNames',\n            'items',\n            'title',\n            'column',\n            'bordered',\n            'size',\n            'layout',\n            'extra',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'styles',\n            'classNames',\n            'items',\n            'title',\n            'column',\n            'bordered',\n            'size',\n            'layout',\n            'extra',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdDescriptions, self).__init__(children=children, **args)\n\n\nsetattr(AntdDescriptions, '__init__', _explicitize_args(AntdDescriptions.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdDivider.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdDivider(Component):\n    \"\"\"An AntdDivider component.\n    分割线组件AntdDivider\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，分割线内嵌元素.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - innerTextOrientation (a value equal to: 'left', 'center', 'right'; default 'center'):\n        内嵌元素对齐方式，可选项有`'left'`、`'center'`、`'right'` 默认值：`'center'`.\n\n    - isDashed (boolean; default False):\n        是否渲染为虚线形式 默认值：`False`.\n\n    - direction (a value equal to: 'horizontal', 'vertical'; default 'horizontal'):\n        分割线方向，可选项有`'horizontal'`、`'vertical'` 默认值：`'horizontal'`.\n\n    - fontSize (string | number; optional):\n        内嵌元素字体大小.\n\n    - lineColor (string; optional):\n        分割线颜色.\n\n    - fontStyle (string; optional):\n        内嵌元素字体风格.\n\n    - fontWeight (string; optional):\n        内嵌元素字重.\n\n    - fontFamily (string; optional):\n        内嵌元素字体.\n\n    - fontColor (string; optional):\n        内嵌元素字体颜色.\n\n    - variant (a value equal to: 'dashed', 'dotted', 'solid'; default 'solid'):\n        分割线变体，可选项有`'dashed'`（虚线）、`'dotted'`（点线）、`'solid'`（实线）\n        默认值：`'solid'`.\n\n    - plain (boolean; default True):\n        文字内容是否呈现为常规正文形式 默认值：`True`.\n\n    - size (a value equal to: 'small', 'middle', 'large'; optional):\n        间距大小，仅当``direction='horizontal'``时有效，可选项有`'small'`、`'middle'`、`'large'`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = []\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdDivider'\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        style: typing.Optional[typing.Any] = None,\n        innerTextOrientation: typing.Optional[Literal['left', 'center', 'right']] = None,\n        isDashed: typing.Optional[bool] = None,\n        direction: typing.Optional[Literal['horizontal', 'vertical']] = None,\n        fontSize: typing.Optional[typing.Union[str, NumberType]] = None,\n        lineColor: typing.Optional[str] = None,\n        fontStyle: typing.Optional[str] = None,\n        fontWeight: typing.Optional[str] = None,\n        fontFamily: typing.Optional[str] = None,\n        fontColor: typing.Optional[str] = None,\n        variant: typing.Optional[Literal['dashed', 'dotted', 'solid']] = None,\n        plain: typing.Optional[bool] = None,\n        size: typing.Optional[Literal['small', 'middle', 'large']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'className',\n            'style',\n            'innerTextOrientation',\n            'isDashed',\n            'direction',\n            'fontSize',\n            'lineColor',\n            'fontStyle',\n            'fontWeight',\n            'fontFamily',\n            'fontColor',\n            'variant',\n            'plain',\n            'size',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'className',\n            'style',\n            'innerTextOrientation',\n            'isDashed',\n            'direction',\n            'fontSize',\n            'lineColor',\n            'fontStyle',\n            'fontWeight',\n            'fontFamily',\n            'fontColor',\n            'variant',\n            'plain',\n            'size',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdDivider, self).__init__(children=children, **args)\n\n\nsetattr(AntdDivider, '__init__', _explicitize_args(AntdDivider.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdDraggerUpload.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdDraggerUpload(Component):\n    \"\"\"An AntdDraggerUpload component.\n    文件拖拽上传组件AntdDraggerUpload\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - name (string; optional):\n        配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值.\n\n    - enableBatchControl (boolean; default True):\n        控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能 默认值：`True`.\n\n    - draggerClassName (string | dict; optional):\n        拖拽区域css类名，支持[动态css](/advanced-classname).\n\n    - draggerStyle (dict; optional):\n        拖拽区域css样式.\n\n    - locale (a value equal to: 'zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr'; default 'zh-cn'):\n        组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n        默认值：`'zh-cn'`.\n\n    - apiUrl (string; optional):\n        文件上传服务接口地址.\n\n    - apiUrlExtraParams (dict; optional):\n        文件上传服务接口额外参数.\n\n    - headers (dict; optional):\n        文件上传服务接口额外headers参数.\n\n    - withCredentials (boolean; default False):\n        是否在请求上传服务接口时自动携带cookies等凭据信息 默认值：`False`.\n\n    - withOriginFileObj (boolean; default False):\n        `listUploadTaskRecord`监听结果中是否额外记录浏览器原生`originFileObj`相关信息\n        默认值：`False`.\n\n    - downloadUrl (string; optional):\n        对应已上传文件的`GET`类型下载服务接口地址，自带参数`taskId`、`filename`.\n\n    - downloadUrlExtraParams (dict; optional):\n        配合`downloadUrl`参数，设置文件下载服务接口额外参数.\n\n    - downloadUrlFromBackend (boolean; default False):\n        是否将文件上传接口返回信息中的`url`属性作为下载链接地址 默认值：`False`.\n\n    - icon (a list of or a singular dash component, string or number; optional):\n        组件型，自定义上传图标.\n\n    - text (a list of or a singular dash component, string or number; optional):\n        组件型，上传区域主要文字说明内容.\n\n    - hint (a list of or a singular dash component, string or number; optional):\n        组件型，上传区域次要文字说明内容.\n\n    - fileListMaxLength (number; optional):\n        限制已上传文件列表长度上限.\n\n    - fileTypes (list of strings; optional):\n        允许上传的文件后缀名列表，默认不限制.\n\n    - uploadId (string; optional):\n        自定义当前组件发起文件上传请求时携带的`uploadId`参数，可用于辅助后端创建文件上传所在文件夹.\n\n    - fileMaxSize (number; default 500):\n        文件上传尺寸上限，单位：兆.\n\n    - multiple (boolean; default False):\n        是否开启多文件上传模式 默认值：`False`.\n\n    - directory (boolean; default False):\n        是否开启文件夹上传模式 默认值：`False`.\n\n    - failedTooltipInfo (string; optional):\n        文件上传失败消息提示文字内容 默认值：`'上传失败'`.\n\n    - showUploadList (boolean; default True):\n        是否显示已上传文件列表 默认值：`True`.\n\n    - confirmBeforeDelete (boolean; default False):\n        是否为已上传文件删除操作添加二次确认模态框 默认值：`False`.\n\n    - showPercent (boolean; default False):\n        是否显示上传进度条 默认值：`False`.\n\n    - progressProps (dict; optional):\n        配置上传进度条相关参数.\n\n        `progressProps` is a dict with keys:\n\n        - strokeColor (dict; optional):\n            进度条颜色.\n\n            `strokeColor` is a string\n\n          Or dict with keys:\n\n            - from (string; optional):\n\n                渐变色开始颜色.\n\n            - to (string; optional):\n\n                渐变色结束颜色.\n\n        - strokeWidth (number; optional):\n            进度条像素宽度.\n\n        - format (dict; optional):\n            进度文字格式.\n\n            `format` is a dict with keys:\n\n            - prefix (string; optional):\n                进度文字前缀内容.\n\n            - suffix (string; optional):\n                进度文字后缀内容 默认值：`'%'`.\n\n    - showSuccessMessage (boolean; default True):\n        是否在每个文件上传成功后，分别弹出消息提示 默认值：`True`.\n\n    - showErrorMessage (boolean; default True):\n        是否在每个文件上传失败后，分别弹出消息提示 默认值：`True`.\n\n    - pastable (boolean; default False):\n        是否开启粘贴上传，即本地复制文件后，在页面任意位置粘贴即可完成上传 默认值：`False`.\n\n    - lastUploadTaskRecord (dict; optional):\n        监听最近一次文件上传任务相关信息.\n\n        `lastUploadTaskRecord` is a dict with keys:\n\n        - fileName (string; optional):\n            文件名称.\n\n        - fileSize (number; optional):\n            文件大小.\n\n        - completeTimestamp (number; optional):\n            上传完成时间戳.\n\n        - taskStatus (string; optional):\n            上传任务状态，`'success'`表示成功，`'failed'`表示失败.\n\n        - taskId (string; optional):\n            上传任务唯一识别id，当任务状态为`'failed'`时不会携带此信息.\n\n        - url (string; optional):\n            当前文件的下载链接.\n\n        - uploadResponse (boolean | number | string | dict | list; optional):\n            上传任务的接口响应信息. | list of dicts with keys:\n\n        - fileName (string; optional):\n            文件名称.\n\n        - fileSize (number; optional):\n            文件大小.\n\n        - completeTimestamp (number; optional):\n            上传完成时间戳.\n\n        - taskStatus (string; optional):\n            上传任务状态，`'success'`表示成功，`'failed'`表示失败.\n\n        - taskId (string; optional):\n            上传任务唯一识别id，当任务状态为`'failed'`时不会携带此信息.\n\n        - url (string; optional):\n            当前文件的下载链接.\n\n        - uploadResponse (boolean | number | string | dict | list; optional):\n            上传任务的接口响应信息.\n\n    - listUploadTaskRecord (list of dicts; optional):\n        监听当前已上传文件列表中上传任务相关信息.\n\n        `listUploadTaskRecord` is a list of dicts with keys:\n\n        - fileName (string; optional):\n            文件名称.\n\n        - fileSize (number; optional):\n            文件大小.\n\n        - completeTimestamp (number; optional):\n            上传完成时间戳.\n\n        - taskStatus (string; optional):\n            上传任务状态，`'success'`表示成功，`'failed'`表示失败.\n\n        - taskId (string; optional):\n            上传任务唯一识别id，当任务状态为`'failed'`时不会携带此信息.\n\n        - uid (string; optional):\n            当前文件上传唯一识别id，前端自动生成.\n\n        - url (string; optional):\n            当前文件下载链接.\n\n        - uploadResponse (boolean | number | string | dict | list; optional):\n            上传任务的接口响应信息.\n\n        - originFileObj (boolean | number | string | dict | list; optional):\n            当`withOriginFileObj=True`时，监听当前文件上传任务对应的`originFileObj`主要信息.\n\n    - defaultFileList (list of dicts; optional):\n        初始化文件列表展示信息.\n\n        `defaultFileList` is a list of dicts with keys:\n\n        - name (string; optional):\n            当前文件名称.\n\n        - status (a value equal to: 'done', 'error', 'removed'; optional):\n            当前文件展示状态，可选项有`'done'`、`'error'`、`'removed'`.\n\n        - uid (boolean | number | string | dict | list; optional):\n            当前文件唯一识别id.\n\n        - url (string; optional):\n            当前文件下载链接.\n\n        - taskId (string; optional):\n            若传入有效值，将作为当前组件的`uploadId`参数.\n\n        - fileSize (number; optional):\n            当前文件大小.\n\n    - disabled (boolean; default False):\n        是否禁用当前组件 默认值：`False`.\n\n    - status (a value equal to: 'error', 'warning'; optional):\n        控制校验状态，可选项有`'error'`、`'warning'`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = ['icon', 'text', 'hint']\n    _base_nodes = ['icon', 'text', 'hint', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdDraggerUpload'\n    ProgressPropsStrokeColor = TypedDict(\n        'ProgressPropsStrokeColor', {'from': NotRequired[str], 'to': NotRequired[str]}\n    )\n\n    ProgressPropsFormat = TypedDict(\n        'ProgressPropsFormat', {'prefix': NotRequired[str], 'suffix': NotRequired[str]}\n    )\n\n    ProgressProps = TypedDict(\n        'ProgressProps',\n        {\n            'strokeColor': NotRequired[typing.Union[str, 'ProgressPropsStrokeColor']],\n            'strokeWidth': NotRequired[NumberType],\n            'format': NotRequired['ProgressPropsFormat'],\n        },\n    )\n\n    LastUploadTaskRecord = TypedDict(\n        'LastUploadTaskRecord',\n        {\n            'fileName': NotRequired[str],\n            'fileSize': NotRequired[NumberType],\n            'completeTimestamp': NotRequired[NumberType],\n            'taskStatus': NotRequired[str],\n            'taskId': NotRequired[str],\n            'url': NotRequired[str],\n            'uploadResponse': NotRequired[typing.Any],\n        },\n    )\n\n    ListUploadTaskRecord = TypedDict(\n        'ListUploadTaskRecord',\n        {\n            'fileName': NotRequired[str],\n            'fileSize': NotRequired[NumberType],\n            'completeTimestamp': NotRequired[NumberType],\n            'taskStatus': NotRequired[str],\n            'taskId': NotRequired[str],\n            'uid': NotRequired[str],\n            'url': NotRequired[str],\n            'uploadResponse': NotRequired[typing.Any],\n            'originFileObj': NotRequired[typing.Any],\n        },\n    )\n\n    DefaultFileList = TypedDict(\n        'DefaultFileList',\n        {\n            'name': NotRequired[str],\n            'status': NotRequired[Literal['done', 'error', 'removed']],\n            'uid': NotRequired[typing.Any],\n            'url': NotRequired[str],\n            'taskId': NotRequired[str],\n            'fileSize': NotRequired[NumberType],\n        },\n    )\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        name: typing.Optional[str] = None,\n        enableBatchControl: typing.Optional[bool] = None,\n        draggerClassName: typing.Optional[typing.Union[str, dict]] = None,\n        draggerStyle: typing.Optional[dict] = None,\n        locale: typing.Optional[Literal['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']] = None,\n        apiUrl: typing.Optional[str] = None,\n        apiUrlExtraParams: typing.Optional[dict] = None,\n        headers: typing.Optional[dict] = None,\n        withCredentials: typing.Optional[bool] = None,\n        withOriginFileObj: typing.Optional[bool] = None,\n        downloadUrl: typing.Optional[str] = None,\n        downloadUrlExtraParams: typing.Optional[dict] = None,\n        downloadUrlFromBackend: typing.Optional[bool] = None,\n        icon: typing.Optional[ComponentType] = None,\n        text: typing.Optional[ComponentType] = None,\n        hint: typing.Optional[ComponentType] = None,\n        fileListMaxLength: typing.Optional[NumberType] = None,\n        fileTypes: typing.Optional[typing.Sequence[str]] = None,\n        uploadId: typing.Optional[str] = None,\n        fileMaxSize: typing.Optional[NumberType] = None,\n        multiple: typing.Optional[bool] = None,\n        directory: typing.Optional[bool] = None,\n        failedTooltipInfo: typing.Optional[str] = None,\n        showUploadList: typing.Optional[bool] = None,\n        confirmBeforeDelete: typing.Optional[bool] = None,\n        showPercent: typing.Optional[bool] = None,\n        progressProps: typing.Optional['ProgressProps'] = None,\n        showSuccessMessage: typing.Optional[bool] = None,\n        showErrorMessage: typing.Optional[bool] = None,\n        pastable: typing.Optional[bool] = None,\n        lastUploadTaskRecord: typing.Optional[\n            typing.Union['LastUploadTaskRecord', typing.Sequence['LastUploadTaskRecord']]\n        ] = None,\n        listUploadTaskRecord: typing.Optional[typing.Sequence['ListUploadTaskRecord']] = None,\n        defaultFileList: typing.Optional[typing.Sequence['DefaultFileList']] = None,\n        disabled: typing.Optional[bool] = None,\n        status: typing.Optional[Literal['error', 'warning']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'name',\n            'enableBatchControl',\n            'draggerClassName',\n            'draggerStyle',\n            'locale',\n            'apiUrl',\n            'apiUrlExtraParams',\n            'headers',\n            'withCredentials',\n            'withOriginFileObj',\n            'downloadUrl',\n            'downloadUrlExtraParams',\n            'downloadUrlFromBackend',\n            'icon',\n            'text',\n            'hint',\n            'fileListMaxLength',\n            'fileTypes',\n            'uploadId',\n            'fileMaxSize',\n            'multiple',\n            'directory',\n            'failedTooltipInfo',\n            'showUploadList',\n            'confirmBeforeDelete',\n            'showPercent',\n            'progressProps',\n            'showSuccessMessage',\n            'showErrorMessage',\n            'pastable',\n            'lastUploadTaskRecord',\n            'listUploadTaskRecord',\n            'defaultFileList',\n            'disabled',\n            'status',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'name',\n            'enableBatchControl',\n            'draggerClassName',\n            'draggerStyle',\n            'locale',\n            'apiUrl',\n            'apiUrlExtraParams',\n            'headers',\n            'withCredentials',\n            'withOriginFileObj',\n            'downloadUrl',\n            'downloadUrlExtraParams',\n            'downloadUrlFromBackend',\n            'icon',\n            'text',\n            'hint',\n            'fileListMaxLength',\n            'fileTypes',\n            'uploadId',\n            'fileMaxSize',\n            'multiple',\n            'directory',\n            'failedTooltipInfo',\n            'showUploadList',\n            'confirmBeforeDelete',\n            'showPercent',\n            'progressProps',\n            'showSuccessMessage',\n            'showErrorMessage',\n            'pastable',\n            'lastUploadTaskRecord',\n            'listUploadTaskRecord',\n            'defaultFileList',\n            'disabled',\n            'status',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdDraggerUpload, self).__init__(**args)\n\n\nsetattr(AntdDraggerUpload, '__init__', _explicitize_args(AntdDraggerUpload.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdDrawer.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdDrawer(Component):\n    \"\"\"An AntdDrawer component.\n    抽屉组件AntdDrawer\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，内嵌元素.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - classNames (dict; optional):\n        配置各子元素的css类名.\n\n        `classNames` is a dict with keys:\n\n        - header (string; optional):\n            头部元素css类名.\n\n        - body (string; optional):\n            内容元素css类名.\n\n        - footer (string; optional):\n            底部元素css类名.\n\n        - mask (string; optional):\n            遮罩层元素css类名.\n\n        - content (string; optional):\n            抽屉容器元素css类名.\n\n    - styles (dict; optional):\n        配置各子元素的css样式.\n\n        `styles` is a dict with keys:\n\n        - header (dict; optional):\n            头部元素css样式.\n\n        - body (dict; optional):\n            内容元素css样式.\n\n        - footer (dict; optional):\n            底部元素css样式.\n\n        - mask (dict; optional):\n            遮罩层元素css样式.\n\n        - content (dict; optional):\n            抽屉容器元素css样式.\n\n    - rootStyle (dict; optional):\n        抽屉根节点css样式（包含遮罩层），特殊的，当设置了`containerId`或`containerSelector`时，该参数会自动设置`position`为`absolute`.\n\n    - visible (boolean; default False):\n        监听或设置抽屉是否可见 默认值：`False`.\n\n    - title (a list of or a singular dash component, string or number; optional):\n        组件型，抽屉标题内容.\n\n    - placement (a value equal to: 'left', 'right', 'top', 'bottom'; default 'right'):\n        抽屉弹出位置，可选项有`'left'`、`'right'`、`'top'`、`'bottom'` 默认值：`'right'`.\n\n    - closable (boolean; default True):\n        是否显示关闭按钮 默认值：`True`.\n\n    - forceRender (boolean; default False):\n        是否对抽屉内的子元素进行预渲染 默认值：`False`.\n\n    - destroyOnClose (boolean; default False):\n        是否在关闭时销毁抽屉内的子元素 默认值：`False`.\n\n    - width (number | string; default 256):\n        抽屉像素宽度，`placement`为`'left'`、`'right'`时有效 默认值：`256`.\n\n    - height (number | string; default 256):\n        抽屉像素高度，`placement`为`'top'`、`'bottom'`时有效 默认值：`256`.\n\n    - mask (boolean; default True):\n        是否显示遮罩层 默认值：`True`.\n\n    - maskClosable (boolean; default True):\n        是否允许点击遮罩区域关闭抽屉 默认值：`True`.\n\n    - zIndex (number; default 1000):\n        抽屉整体`z-index` 默认值：`1000`.\n\n    - loading (boolean; default False):\n        是否渲染为加载中状态 默认值：`False`.\n\n    - extra (a list of or a singular dash component, string or number; optional):\n        组件型，额外操作区元素.\n\n    - footer (a list of or a singular dash component, string or number; optional):\n        组件型，底部元素.\n\n    - containerId (string; optional):\n        用于设置`position`为`relative`的局部容器id.\n\n    - containerSelector (string; optional):\n        当目标容器定位较为复杂时，可传入获取元素对应的js代码字符串，优先级低于`containerId`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = ['title', 'extra', 'footer']\n    _base_nodes = ['title', 'extra', 'footer', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdDrawer'\n    ClassNames = TypedDict(\n        'ClassNames',\n        {\n            'header': NotRequired[str],\n            'body': NotRequired[str],\n            'footer': NotRequired[str],\n            'mask': NotRequired[str],\n            'content': NotRequired[str],\n        },\n    )\n\n    Styles = TypedDict(\n        'Styles',\n        {\n            'header': NotRequired[dict],\n            'body': NotRequired[dict],\n            'footer': NotRequired[dict],\n            'mask': NotRequired[dict],\n            'content': NotRequired[dict],\n        },\n    )\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        classNames: typing.Optional['ClassNames'] = None,\n        styles: typing.Optional['Styles'] = None,\n        rootStyle: typing.Optional[dict] = None,\n        visible: typing.Optional[bool] = None,\n        title: typing.Optional[ComponentType] = None,\n        placement: typing.Optional[Literal['left', 'right', 'top', 'bottom']] = None,\n        closable: typing.Optional[bool] = None,\n        forceRender: typing.Optional[bool] = None,\n        destroyOnClose: typing.Optional[bool] = None,\n        width: typing.Optional[typing.Union[NumberType, str]] = None,\n        height: typing.Optional[typing.Union[NumberType, str]] = None,\n        mask: typing.Optional[bool] = None,\n        maskClosable: typing.Optional[bool] = None,\n        zIndex: typing.Optional[NumberType] = None,\n        loading: typing.Optional[bool] = None,\n        extra: typing.Optional[ComponentType] = None,\n        footer: typing.Optional[ComponentType] = None,\n        containerId: typing.Optional[str] = None,\n        containerSelector: typing.Optional[str] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'classNames',\n            'styles',\n            'rootStyle',\n            'visible',\n            'title',\n            'placement',\n            'closable',\n            'forceRender',\n            'destroyOnClose',\n            'width',\n            'height',\n            'mask',\n            'maskClosable',\n            'zIndex',\n            'loading',\n            'extra',\n            'footer',\n            'containerId',\n            'containerSelector',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'classNames',\n            'styles',\n            'rootStyle',\n            'visible',\n            'title',\n            'placement',\n            'closable',\n            'forceRender',\n            'destroyOnClose',\n            'width',\n            'height',\n            'mask',\n            'maskClosable',\n            'zIndex',\n            'loading',\n            'extra',\n            'footer',\n            'containerId',\n            'containerSelector',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdDrawer, self).__init__(children=children, **args)\n\n\nsetattr(AntdDrawer, '__init__', _explicitize_args(AntdDrawer.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdDropdown.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdDropdown(Component):\n    \"\"\"An AntdDropdown component.\n    下拉菜单组件AntdDropdown\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，下拉菜单触发锚定元素.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - wrapperStyle (dict; optional):\n        锚定元素父容器css样式.\n\n    - wrapperClassName (string | dict; optional):\n        锚定元素父容器css类名.\n\n    - title (string; optional):\n        下拉菜单触发元素标题内容，children参数未设置时有效.\n\n    - buttonMode (boolean; default False):\n        下拉菜单触发元素是否渲染为按钮形式，children参数未设置时有效 默认值：`False`.\n\n    - buttonProps (dict; optional):\n        针对下拉菜单触发元素的按钮形式进行进一步配置.\n\n        `buttonProps` is a dict with keys:\n\n        - icon (a list of or a singular dash component, string or number; optional):\n            组件型，按钮图标元素.\n\n        - size (a value equal to: 'small', 'middle', 'large'; optional):\n            按钮尺寸规格，可选项有`'small'`、`'middle'`、`'large'` 默认值：`'middle'`.\n\n        - type (a value equal to: 'default', 'primary', 'ghost', 'dashed', 'link', 'text'; optional):\n            按钮类型，可选项有`'default'`、`'primary'`、`'ghost'`、`'dashed'`、`'link'`、`'text'`\n            默认值：`'default'`.\n\n        - danger (boolean; optional):\n            按钮是否呈现危险样式 默认值：`False`.\n\n        - style (dict; optional):\n            按钮css样式.\n\n        - className (string; optional):\n            按钮css类名.\n\n    - freePosition (boolean; default False):\n        是否开启自由位置模式 默认值：`False`.\n\n    - freePositionStyle (dict; optional):\n        自由位置模式开启后，控制挂载位置对应css样式.\n\n    - freePositionClassName (string; optional):\n        自由位置模式开启后，控制挂载位置对应css类名.\n\n    - clickedKey (string; optional):\n        监听被点击的下拉菜单选项key值.\n\n    - nClicks (number; default 0):\n        监听下拉菜单选项累计被点击次数 默认值：`0`.\n\n    - menuItems (list of dicts; optional):\n        下拉菜单数据结构.\n\n        `menuItems` is a list of dicts with keys:\n\n        - title (a list of or a singular dash component, string or number; optional):\n            组件型，节点标题.\n\n        - extra (a list of or a singular dash component, string or number; optional):\n            组件型，额外内容.\n\n        - href (string; optional):\n            节点链接地址.\n\n        - target (string; optional):\n            节点链接跳转行为.\n\n        - disabled (boolean; optional):\n            是否禁用节点 默认值：`False`.\n\n        - icon (string; optional):\n            节点前缀图标名称，与`iconRenderer`方式相关联，`'AntdIcon'`方式下同AntdIcon的icon参数，`'fontawesome'`方式下代表图标的css类名.\n\n        - iconRenderer (a value equal to: 'AntdIcon', 'fontawesome'; optional):\n            前缀图标渲染方式，可选项有`'AntdIcon'`、`'fontawesome'` 默认值：`'AntdIcon'`.\n\n        - key (string; optional):\n            节点唯一key值.\n\n        - isDivider (boolean; optional):\n            节点是否渲染为分割线.\n\n        - children (list; optional):\n            子菜单项，用于构建级联菜单.\n\n    - selectable (boolean; default False):\n        菜单项是否可选择 默认值：`False`.\n\n    - multiple (boolean; default False):\n        菜单项是否可多选 默认值：`False`.\n\n    - selectedKeys (list of strings; optional):\n        设置或监听当前已选中菜单项key值.\n\n    - nonSelectableKeys (list of strings; optional):\n        设置不可选中项key值数组 默认值：`[]`.\n\n    - arrow (boolean; default False):\n        下拉菜单是否渲染指示箭头 默认值：`False`.\n\n    - disabled (boolean; default False):\n        是否禁用组件功能 默认值：`False`.\n\n    - overlayClassName (string | dict; optional):\n        下拉菜单容器css类名，支持[动态css](/advanced-classname).\n\n    - overlayStyle (dict; optional):\n        下拉菜单容器css样式.\n\n    - placement (a value equal to: 'bottomLeft', 'bottomCenter', 'bottomRight', 'topLeft', 'topCenter', 'topRight'; optional):\n        下拉菜单弹出方位，可选项有`'bottomLeft'`、`'bottomCenter'`、`'bottomRight'`、`'topLeft'`、`'topCenter'`、`'topRight'`.\n\n    - trigger (a value equal to: 'click', 'hover'; default 'hover'):\n        下拉菜单显示触发方式，可选项有`'click'`、`'hover'` 默认值：`'hover'`.\n\n    - autoAdjustOverflow (boolean; default True):\n        下拉菜单是否在被遮挡时自动调整位置 默认值：`True`.\n\n    - visible (boolean; default False):\n        监听或设置下拉菜单是否展开 默认值：`False`.\n\n    - popupContainer (a value equal to: 'parent', 'body'; default 'body'):\n        下拉菜单展开层锚定策略，可选项有`'parent'`、`'body'` 默认值：`'body'`.\n\n    - batchPropsNames (list of strings; optional):\n        需要纳入批属性监听的属性名 默认值：`[]`.\n\n    - batchPropsValues (dict; optional):\n        批量监听与当前batchPropsNames对应的属性值.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = [\n        'buttonProps.icon',\n        'menuItems[].title',\n        'menuItems[].extra',\n    ]\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdDropdown'\n    ButtonProps = TypedDict(\n        'ButtonProps',\n        {\n            'icon': NotRequired[ComponentType],\n            'size': NotRequired[Literal['small', 'middle', 'large']],\n            'type': NotRequired[Literal['default', 'primary', 'ghost', 'dashed', 'link', 'text']],\n            'danger': NotRequired[bool],\n            'style': NotRequired[dict],\n            'className': NotRequired[str],\n        },\n    )\n\n    MenuItems = TypedDict(\n        'MenuItems',\n        {\n            'title': NotRequired[ComponentType],\n            'extra': NotRequired[ComponentType],\n            'href': NotRequired[str],\n            'target': NotRequired[str],\n            'disabled': NotRequired[bool],\n            'icon': NotRequired[str],\n            'iconRenderer': NotRequired[Literal['AntdIcon', 'fontawesome']],\n            'key': NotRequired[str],\n            'isDivider': NotRequired[bool],\n            'children': NotRequired[typing.Sequence],\n        },\n    )\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        wrapperStyle: typing.Optional[dict] = None,\n        wrapperClassName: typing.Optional[typing.Union[str, dict]] = None,\n        title: typing.Optional[str] = None,\n        buttonMode: typing.Optional[bool] = None,\n        buttonProps: typing.Optional['ButtonProps'] = None,\n        freePosition: typing.Optional[bool] = None,\n        freePositionStyle: typing.Optional[dict] = None,\n        freePositionClassName: typing.Optional[str] = None,\n        clickedKey: typing.Optional[str] = None,\n        nClicks: typing.Optional[NumberType] = None,\n        menuItems: typing.Optional[typing.Sequence['MenuItems']] = None,\n        selectable: typing.Optional[bool] = None,\n        multiple: typing.Optional[bool] = None,\n        selectedKeys: typing.Optional[typing.Sequence[str]] = None,\n        nonSelectableKeys: typing.Optional[typing.Sequence[str]] = None,\n        arrow: typing.Optional[bool] = None,\n        disabled: typing.Optional[bool] = None,\n        overlayClassName: typing.Optional[typing.Union[str, dict]] = None,\n        overlayStyle: typing.Optional[dict] = None,\n        placement: typing.Optional[\n            Literal['bottomLeft', 'bottomCenter', 'bottomRight', 'topLeft', 'topCenter', 'topRight']\n        ] = None,\n        trigger: typing.Optional[Literal['click', 'hover']] = None,\n        autoAdjustOverflow: typing.Optional[bool] = None,\n        visible: typing.Optional[bool] = None,\n        popupContainer: typing.Optional[Literal['parent', 'body']] = None,\n        batchPropsNames: typing.Optional[typing.Sequence[str]] = None,\n        batchPropsValues: typing.Optional[dict] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'wrapperStyle',\n            'wrapperClassName',\n            'title',\n            'buttonMode',\n            'buttonProps',\n            'freePosition',\n            'freePositionStyle',\n            'freePositionClassName',\n            'clickedKey',\n            'nClicks',\n            'menuItems',\n            'selectable',\n            'multiple',\n            'selectedKeys',\n            'nonSelectableKeys',\n            'arrow',\n            'disabled',\n            'overlayClassName',\n            'overlayStyle',\n            'placement',\n            'trigger',\n            'autoAdjustOverflow',\n            'visible',\n            'popupContainer',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'wrapperStyle',\n            'wrapperClassName',\n            'title',\n            'buttonMode',\n            'buttonProps',\n            'freePosition',\n            'freePositionStyle',\n            'freePositionClassName',\n            'clickedKey',\n            'nClicks',\n            'menuItems',\n            'selectable',\n            'multiple',\n            'selectedKeys',\n            'nonSelectableKeys',\n            'arrow',\n            'disabled',\n            'overlayClassName',\n            'overlayStyle',\n            'placement',\n            'trigger',\n            'autoAdjustOverflow',\n            'visible',\n            'popupContainer',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdDropdown, self).__init__(children=children, **args)\n\n\nsetattr(AntdDropdown, '__init__', _explicitize_args(AntdDropdown.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdEmpty.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdEmpty(Component):\n    \"\"\"An AntdEmpty component.\n    空状态组件AntdEmpty\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，内嵌元素.\n\n    - styles (dict; optional):\n        细分控制子元素css样式.\n\n        `styles` is a dict with keys:\n\n        - root (dict; optional):\n            根元素css样式.\n\n        - image (dict; optional):\n            图标元素css样式.\n\n        - description (dict; optional):\n            描述元素css样式.\n\n        - footer (dict; optional):\n            底部元素css样式.\n\n    - classNames (dict; optional):\n        细分控制子元素css类名.\n\n        `classNames` is a dict with keys:\n\n        - root (string; optional):\n            根元素css类名.\n\n        - image (string; optional):\n            图标元素css类名.\n\n        - description (string; optional):\n            描述元素css类名.\n\n        - footer (string; optional):\n            底部元素css类名.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - locale (a value equal to: 'zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr'; default 'zh-cn'):\n        组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n        默认值：`'zh-cn'`.\n\n    - description (a list of or a singular dash component, string or number | boolean; optional):\n        描述信息内容.\n\n    - image (string | a value equal to: 'default', 'simple'; default 'default'):\n        状态图片地址，也可以使用内置图片，可选项有`'default'`、`'simple'` 默认值：`'default'`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = ['description']\n    _base_nodes = ['description', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdEmpty'\n    Styles = TypedDict(\n        'Styles',\n        {\n            'root': NotRequired[dict],\n            'image': NotRequired[dict],\n            'description': NotRequired[dict],\n            'footer': NotRequired[dict],\n        },\n    )\n\n    ClassNames = TypedDict(\n        'ClassNames',\n        {\n            'root': NotRequired[str],\n            'image': NotRequired[str],\n            'description': NotRequired[str],\n            'footer': NotRequired[str],\n        },\n    )\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        styles: typing.Optional['Styles'] = None,\n        classNames: typing.Optional['ClassNames'] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        locale: typing.Optional[Literal['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']] = None,\n        description: typing.Optional[typing.Union[ComponentType, bool]] = None,\n        image: typing.Optional[typing.Union[str, Literal['default', 'simple']]] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'styles',\n            'classNames',\n            'className',\n            'locale',\n            'description',\n            'image',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'styles',\n            'classNames',\n            'className',\n            'locale',\n            'description',\n            'image',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdEmpty, self).__init__(children=children, **args)\n\n\nsetattr(AntdEmpty, '__init__', _explicitize_args(AntdEmpty.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdFlex.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdFlex(Component):\n    \"\"\"An AntdFlex component.\n    弹性布局组件AntdFlex\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，内嵌元素.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - vertical (boolean; default False):\n        是否使用垂直主轴 默认值：`False`.\n\n    - wrap (string | boolean; default 'nowrap'):\n        子元素换行显示行为，同css中的flex-wrap，也可直接传入布尔型设置是否自动换行 默认值：`'nowrap'`.\n\n    - justify (string; default 'normal'):\n        子元素在主轴方向上的对齐方式，同css中的justify-content 默认值：`'normal'`.\n\n    - align (string; default 'normal'):\n        子元素在交叉轴方向上的对齐方式，同css中的align-items 默认值：`'normal'`.\n\n    - flex (string; default 'normal'):\n        同css中的flex 默认值：`'normal'`.\n\n    - gap (string | number | a value equal to: 'small', 'middle', 'large'; optional):\n        子元素之间的间隙，可选项有`'small'`、`'middle'`、`'large'`，也可传入字符型css宽度，或数值型像素宽度.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = []\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdFlex'\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        vertical: typing.Optional[bool] = None,\n        wrap: typing.Optional[typing.Union[str, bool]] = None,\n        justify: typing.Optional[str] = None,\n        align: typing.Optional[str] = None,\n        flex: typing.Optional[str] = None,\n        gap: typing.Optional[\n            typing.Union[str, NumberType, Literal['small', 'middle', 'large']]\n        ] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'vertical',\n            'wrap',\n            'justify',\n            'align',\n            'flex',\n            'gap',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'vertical',\n            'wrap',\n            'justify',\n            'align',\n            'flex',\n            'gap',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdFlex, self).__init__(children=children, **args)\n\n\nsetattr(AntdFlex, '__init__', _explicitize_args(AntdFlex.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdFloatButton.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdFloatButton(Component):\n    \"\"\"An AntdFloatButton component.\n    悬浮按钮组件AntdFloatButton\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - icon (a list of or a singular dash component, string or number; optional):\n        组件型，按钮内嵌前缀图标元素.\n\n    - description (a list of or a singular dash component, string or number; optional):\n        组件型，按钮内嵌元素，仅`shape='square'`时可用.\n\n    - tooltip (dict; optional):\n        组件型，按钮额外气泡卡片内容.\n\n        `tooltip` is a a list of or a singular dash component, string or\n        number | dict with keys:\n\n        - title (a list of or a singular dash component, string or number; optional):\n            气泡卡片内容.\n\n        - color (string; optional):\n            气泡卡片背景色.\n\n        - placement (a value equal to: 'top', 'left', 'right', 'bottom', 'topLeft', 'topRight', 'bottomLeft', 'bottomRight', 'leftTop', 'leftBottom', 'rightTop', 'rightBottom'; optional):\n            气泡卡片展开方向，可选项有`'top'`、`'left'`、`'right'`、`'bottom'`、`'topLeft'`、`'topRight'`、`'bottomLeft'`、`'bottomRight'`、`'leftTop'`、`'leftBottom'`、`'rightTop'`、`'rightBottom'`.\n\n    - type (a value equal to: 'default', 'primary'; default 'default'):\n        按钮类型，可选项有`'default'`、`'primary'` 默认值：`'default'`.\n\n    - shape (a value equal to: 'circle', 'square'; default 'circle'):\n        按钮形状，可选项有`'circle'`、`'square'` 默认值：`'circle'`.\n\n    - href (string; optional):\n        按钮点击跳转链接地址.\n\n    - target (string; default '_blank'):\n        按钮点击跳转链接方式 默认值：`'_blank'`.\n\n    - nClicks (number; default 0):\n        按钮累计点击次数，用于监听按钮点击行为 默认值：`0`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = ['icon', 'description', 'tooltip', 'tooltip.title']\n    _base_nodes = ['icon', 'description', 'tooltip', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdFloatButton'\n    Tooltip = TypedDict(\n        'Tooltip',\n        {\n            'title': NotRequired[ComponentType],\n            'color': NotRequired[str],\n            'placement': NotRequired[\n                Literal[\n                    'top',\n                    'left',\n                    'right',\n                    'bottom',\n                    'topLeft',\n                    'topRight',\n                    'bottomLeft',\n                    'bottomRight',\n                    'leftTop',\n                    'leftBottom',\n                    'rightTop',\n                    'rightBottom',\n                ]\n            ],\n        },\n    )\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        icon: typing.Optional[ComponentType] = None,\n        description: typing.Optional[ComponentType] = None,\n        tooltip: typing.Optional[typing.Union[ComponentType, 'Tooltip']] = None,\n        type: typing.Optional[Literal['default', 'primary']] = None,\n        shape: typing.Optional[Literal['circle', 'square']] = None,\n        href: typing.Optional[str] = None,\n        target: typing.Optional[str] = None,\n        nClicks: typing.Optional[NumberType] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'icon',\n            'description',\n            'tooltip',\n            'type',\n            'shape',\n            'href',\n            'target',\n            'nClicks',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'icon',\n            'description',\n            'tooltip',\n            'type',\n            'shape',\n            'href',\n            'target',\n            'nClicks',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdFloatButton, self).__init__(**args)\n\n\nsetattr(AntdFloatButton, '__init__', _explicitize_args(AntdFloatButton.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdFloatButtonGroup.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdFloatButtonGroup(Component):\n    \"\"\"An AntdFloatButtonGroup component.\n    悬浮按钮组组件AntdFloatButtonGroup\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        当前悬浮按钮组内悬浮按钮.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - icon (a list of or a singular dash component, string or number; optional):\n        图标元素.\n\n    - description (a list of or a singular dash component, string or number; optional):\n        描述内容.\n\n    - tooltip (dict; optional):\n        气泡卡片内容.\n\n        `tooltip` is a a list of or a singular dash component, string or\n        number | dict with keys:\n\n        - title (a list of or a singular dash component, string or number; optional):\n            气泡卡片内容.\n\n        - color (string; optional):\n            气泡卡片背景色.\n\n        - placement (a value equal to: 'top', 'left', 'right', 'bottom', 'topLeft', 'topRight', 'bottomLeft', 'bottomRight', 'leftTop', 'leftBottom', 'rightTop', 'rightBottom'; optional):\n            气泡卡片展开方向，可选项有`'top'`、`'left'`、`'right'`、`'bottom'`、`'topLeft'`、`'topRight'`、`'bottomLeft'`、`'bottomRight'`、`'leftTop'`、`'leftBottom'`、`'rightTop'`、`'rightBottom'`.\n\n    - type (a value equal to: 'default', 'primary'; default 'default'):\n        按钮类型，可选项有`'default'`、`'primary'` 默认值：`'default'`.\n\n    - shape (a value equal to: 'circle', 'square'; default 'circle'):\n        内部各悬浮按钮形状，可选项有`'circle'`、`'square'` 默认值：`'circle'`.\n\n    - trigger (a value equal to: 'click', 'hover'; optional):\n        菜单展开模式触发方式，可选项有`'click'`、`'hover'`.\n\n    - placement (a value equal to: 'top', 'right', 'bottom', 'left'; optional):\n        菜单展开方向，可选项有`'top'`、`'right'`、`'bottom'`、`'left'`.\n\n    - open (boolean; optional):\n        设置或监听当前悬浮按钮组展开状态.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = ['icon', 'description', 'tooltip', 'tooltip.title']\n    _base_nodes = ['icon', 'description', 'tooltip', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdFloatButtonGroup'\n    Tooltip = TypedDict(\n        'Tooltip',\n        {\n            'title': NotRequired[ComponentType],\n            'color': NotRequired[str],\n            'placement': NotRequired[\n                Literal[\n                    'top',\n                    'left',\n                    'right',\n                    'bottom',\n                    'topLeft',\n                    'topRight',\n                    'bottomLeft',\n                    'bottomRight',\n                    'leftTop',\n                    'leftBottom',\n                    'rightTop',\n                    'rightBottom',\n                ]\n            ],\n        },\n    )\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        icon: typing.Optional[ComponentType] = None,\n        description: typing.Optional[ComponentType] = None,\n        tooltip: typing.Optional[typing.Union[ComponentType, 'Tooltip']] = None,\n        type: typing.Optional[Literal['default', 'primary']] = None,\n        shape: typing.Optional[Literal['circle', 'square']] = None,\n        trigger: typing.Optional[Literal['click', 'hover']] = None,\n        placement: typing.Optional[Literal['top', 'right', 'bottom', 'left']] = None,\n        open: typing.Optional[bool] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'icon',\n            'description',\n            'tooltip',\n            'type',\n            'shape',\n            'trigger',\n            'placement',\n            'open',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'icon',\n            'description',\n            'tooltip',\n            'type',\n            'shape',\n            'trigger',\n            'placement',\n            'open',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdFloatButtonGroup, self).__init__(children=children, **args)\n\n\nsetattr(AntdFloatButtonGroup, '__init__', _explicitize_args(AntdFloatButtonGroup.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdFooter.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdFooter(Component):\n    \"\"\"An AntdFooter component.\n    页尾组件AntdFooter\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，内嵌元素.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = []\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdFooter'\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        **kwargs,\n    ):\n        self._prop_names = ['id', 'key', 'children', 'style', 'className', 'data-*', 'aria-*']\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdFooter, self).__init__(children=children, **args)\n\n\nsetattr(AntdFooter, '__init__', _explicitize_args(AntdFooter.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdForm.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdForm(Component):\n    \"\"\"An AntdForm component.\n    表单组件AntdForm\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，内嵌相关`AntdFormItem`组件或常用表单输入类组件.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - layout (a value equal to: 'horizontal', 'vertical', 'inline'; default 'horizontal'):\n        表单布局模式，可选项有`'horizontal'`、`'vertical'`、`'inline'`\n        默认值：`'horizontal'`.\n\n    - labelCol (dict; optional):\n        配置表单项标签部分相关参数.\n\n        `labelCol` is a dict with keys:\n\n        - span (number; optional):\n            标签部分所占宽度份数（总份数24）.\n\n        - offset (number; optional):\n            标签部分向右偏移宽度份数.\n\n        - flex (string | number; optional):\n            同css中的flex属性，用于更灵活的控制标签部分所占宽度.\n\n    - wrapperCol (dict; optional):\n        配置表单项控件部分相关参数.\n\n        `wrapperCol` is a dict with keys:\n\n        - span (number; optional):\n            控件部分所占宽度份数（总份数24）.\n\n        - offset (number; optional):\n            控件部分向右偏移宽度份数.\n\n        - flex (string | number; optional):\n            同css中的flex属性，用于更灵活的控制控件部分所占宽度.\n\n    - colon (boolean; default True):\n        当`layput='horizontal'`时，控制是否在表单项标签部分末尾添加冒号.\n\n    - labelAlign (a value equal to: 'left', 'right'; default 'right'):\n        表单项标签部分文本对齐方式，可选项有`'left'`、`'right'` 默认值：`'right'`.\n\n    - labelWrap (boolean; default False):\n        针对超长表单项标签是否允许换行 默认值：`False`.\n\n    - enableBatchControl (boolean; default False):\n        是否启用表单批量控制功能，开启后会导致部分性能的损耗 默认值：`False`.\n\n    - values (dict; optional):\n        当`enableBatchControl=True`时，可用于监听或设置搜集内部表单输入类组件的输入值变化情况，开启后内部表单输入类组件自身的`defaultValue`、`value`参数将会失效.\n\n    - validateStatuses (dict with strings as keys and values of type a value equal to: 'success', 'warning', 'error', 'validating'; optional):\n        当`enableBatchControl=True`时，可用于统一设置内部各`AntdFormItem`组件的`validateStatus`值，键为对应`AntdFormItem`组件的`label`值，优先级低于各`AntdFormItem`组件的`validateStatus`值.\n\n    - helps (dict with strings as keys and values of type a list of or a singular dash component, string or number; optional):\n        当`enableBatchControl=True`时，可用于统一设置内部各`AntdFormItem`组件的`help`值，键为对应`AntdFormItem`组件的`label`值，优先级低于各`AntdFormItem`组件的`help`值.\n\n    - tooltips (dict with strings as keys and values of type a list of or a singular dash component, string or number; optional):\n        当`enableBatchControl=True`时，可用于统一设置内部各`AntdFormItem`组件的`tooltip`值，键为对应`AntdFormItem`组件的`label`值，优先级低于各`AntdFormItem`组件的`tooltip`值.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = ['helps{}', 'tooltips{}']\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdForm'\n    LabelCol = TypedDict(\n        'LabelCol',\n        {\n            'span': NotRequired[NumberType],\n            'offset': NotRequired[NumberType],\n            'flex': NotRequired[typing.Union[str, NumberType]],\n        },\n    )\n\n    WrapperCol = TypedDict(\n        'WrapperCol',\n        {\n            'span': NotRequired[NumberType],\n            'offset': NotRequired[NumberType],\n            'flex': NotRequired[typing.Union[str, NumberType]],\n        },\n    )\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        layout: typing.Optional[Literal['horizontal', 'vertical', 'inline']] = None,\n        labelCol: typing.Optional['LabelCol'] = None,\n        wrapperCol: typing.Optional['WrapperCol'] = None,\n        colon: typing.Optional[bool] = None,\n        labelAlign: typing.Optional[Literal['left', 'right']] = None,\n        labelWrap: typing.Optional[bool] = None,\n        enableBatchControl: typing.Optional[bool] = None,\n        values: typing.Optional[dict] = None,\n        validateStatuses: typing.Optional[\n            typing.Dict[\n                typing.Union[str, float, int], Literal['success', 'warning', 'error', 'validating']\n            ]\n        ] = None,\n        helps: typing.Optional[typing.Dict[typing.Union[str, float, int], ComponentType]] = None,\n        tooltips: typing.Optional[typing.Dict[typing.Union[str, float, int], ComponentType]] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'layout',\n            'labelCol',\n            'wrapperCol',\n            'colon',\n            'labelAlign',\n            'labelWrap',\n            'enableBatchControl',\n            'values',\n            'validateStatuses',\n            'helps',\n            'tooltips',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'layout',\n            'labelCol',\n            'wrapperCol',\n            'colon',\n            'labelAlign',\n            'labelWrap',\n            'enableBatchControl',\n            'values',\n            'validateStatuses',\n            'helps',\n            'tooltips',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdForm, self).__init__(children=children, **args)\n\n\nsetattr(AntdForm, '__init__', _explicitize_args(AntdForm.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdFormItem.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdFormItem(Component):\n    \"\"\"An AntdFormItem component.\n    表单项组件AntdFormItem\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，内嵌相关常用表单输入类组件.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - required (boolean; default False):\n        是否显示表示必填项的额外“*”标识 默认值：`False`.\n\n    - labelCol (dict; optional):\n        配置表单项标签部分相关参数，优先级高于所属`AntdForm`中的`labelCol`参数.\n\n        `labelCol` is a dict with keys:\n\n        - span (number; optional):\n            标签部分所占宽度份数（总份数24）.\n\n        - offset (number; optional):\n            标签部分向右偏移宽度份数.\n\n        - flex (string | number; optional):\n            同css中的flex属性，用于更灵活的控制标签部分所占宽度.\n\n    - wrapperCol (dict; optional):\n        配置表单项控件部分相关参数，优先级高于所属`AntdForm`中的`labelCol`参数.\n\n        `wrapperCol` is a dict with keys:\n\n        - span (number; optional):\n            控件部分所占宽度份数（总份数24）.\n\n        - offset (number; optional):\n            控件部分向右偏移宽度份数.\n\n        - flex (string | number; optional):\n            同css中的flex属性，用于更灵活的控制控件部分所占宽度.\n\n    - colon (boolean; optional):\n        当`layout='horizontal'`时，控制是否在表单项标签部分末尾添加冒号，优先级高于所属`AntdForm`中的`colon`参数.\n\n    - label (a list of or a singular dash component, string or number; optional):\n        组件型，当前表单项标签内容.\n\n    - labelAlign (a value equal to: 'left', 'right'; optional):\n        表单项标签部分文本对齐方式，可选项有`'left'`、`'right'`，优先级高于所属`AntdForm`中的`labelAlign`参数\n        默认值：`'right'`.\n\n    - tooltip (a list of or a singular dash component, string or number; optional):\n        组件型，当前表单项标签内容后的额外文字提示信息.\n\n    - extra (a list of or a singular dash component, string or number; optional):\n        组件型，当前表单项额外提示信息.\n\n    - validateStatus (a value equal to: 'success', 'warning', 'error', 'validating'; optional):\n        控制校验状态，可选项有`'success'`、`'warning'`、`'error'`、`'validating'`.\n\n    - hasFeedback (boolean; default False):\n        与`validateStatus`设定的状态对应，用于控制是否显示额外的状态图标 默认值：`False`.\n\n    - help (a list of or a singular dash component, string or number; optional):\n        组件型，与`validateStatus`状态一致的额外说明内容.\n\n    - hidden (boolean; default False):\n        是否隐藏当前字段 默认值：`False`.\n\n    - layout (a value equal to: 'horizontal', 'vertical'; optional):\n        表单项布局模式，可选项有`'horizontal'`、`'vertical'`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = ['label', 'tooltip', 'extra', 'help']\n    _base_nodes = ['label', 'tooltip', 'extra', 'help', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdFormItem'\n    LabelCol = TypedDict(\n        'LabelCol',\n        {\n            'span': NotRequired[NumberType],\n            'offset': NotRequired[NumberType],\n            'flex': NotRequired[typing.Union[str, NumberType]],\n        },\n    )\n\n    WrapperCol = TypedDict(\n        'WrapperCol',\n        {\n            'span': NotRequired[NumberType],\n            'offset': NotRequired[NumberType],\n            'flex': NotRequired[typing.Union[str, NumberType]],\n        },\n    )\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        required: typing.Optional[bool] = None,\n        labelCol: typing.Optional['LabelCol'] = None,\n        wrapperCol: typing.Optional['WrapperCol'] = None,\n        colon: typing.Optional[bool] = None,\n        label: typing.Optional[ComponentType] = None,\n        labelAlign: typing.Optional[Literal['left', 'right']] = None,\n        tooltip: typing.Optional[ComponentType] = None,\n        extra: typing.Optional[ComponentType] = None,\n        validateStatus: typing.Optional[\n            Literal['success', 'warning', 'error', 'validating']\n        ] = None,\n        hasFeedback: typing.Optional[bool] = None,\n        help: typing.Optional[ComponentType] = None,\n        hidden: typing.Optional[bool] = None,\n        layout: typing.Optional[Literal['horizontal', 'vertical']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'required',\n            'labelCol',\n            'wrapperCol',\n            'colon',\n            'label',\n            'labelAlign',\n            'tooltip',\n            'extra',\n            'validateStatus',\n            'hasFeedback',\n            'help',\n            'hidden',\n            'layout',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'required',\n            'labelCol',\n            'wrapperCol',\n            'colon',\n            'label',\n            'labelAlign',\n            'tooltip',\n            'extra',\n            'validateStatus',\n            'hasFeedback',\n            'help',\n            'hidden',\n            'layout',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdFormItem, self).__init__(children=children, **args)\n\n\nsetattr(AntdFormItem, '__init__', _explicitize_args(AntdFormItem.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdFormRender.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdFormRender(Component):\n    \"\"\"An AntdFormRender component.\n\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件id.\n\n    - className (string | dict; optional):\n        css类名.\n\n    - key (string; optional):\n        辅助刷新用唯一标识key值.\n\n    - schema (dict; required):\n        必填，设置表单的schema.\n\n        `schema` is a dict with keys:\n\n        - type (a value equal to: 'object'; optional):\n            固定配置为type: 'object'.\n\n        - displayType (a value equal to: 'column', 'row', 'inline'; optional):\n            设置表单表单项label布局方式，可选的有'column'、'row'与'inline'，默认为'column'.\n\n        - column (number; optional):\n            设置表单布局，一行应该有几列，默认为3.\n\n        - labelWidth (number; optional):\n            设置表单项标签的宽度.\n\n        - maxWidth (number; optional):\n            设置表单项控件的最大宽度.\n\n        - labelCol (number; optional):\n            设置表单标签占位格数.\n\n        - fieldCol (number; optional):\n            设置表单控件占位格数.\n\n        - properties (dict; optional):\n            设置表单控件.\n\n            `properties` is a dict with strings as keys and values of type\n            dict with keys:\n\n            - type (a value equal to: 'string', 'number', 'boolean', 'array', 'range', 'html', 'block'; optional):\n\n                设置表单字段的类型，可选的有'string'、'number'、'boolean'、'array'、'range'、'html'、'block'.\n\n            - title (string; optional):\n\n                设置表单字段的标签.\n\n            - labelWidth (number\n\n                  Or string; optional):\n\n                设置表单项标签的宽度.\n\n            - maxWidth (number\n\n          Or string; optional):\n\n                设置表单项控件的最大宽度.\n\n            - labelCol (number | string; optional):\n\n                设置表单标签占位格数.\n\n            - fieldCol (number | string; optional):\n\n                设置表单控件占位格数.\n\n            - cellSpan (number | string; optional):\n\n                设置表单项跨列展示，目前需配合lableWidth来使用，否则无法与其他表单项在样式上对齐，通过配置单个表单项的labelCol、fieldCol勉强能改善.\n\n            - span (number | string; optional):\n\n                设置表单项列宽度，表单布局会被切割成 24 等份，可以通过设置 span 来自定义表单项所占的宽度.\n\n            - widget (a value equal to: 'input', 'inputNumber', 'select', 'multiSelect', 'radio', 'checkboxes', 'textArea', 'checkbox', 'switch', 'rate', 'slider', 'datePicker', 'dateRange', 'timePicker', 'timeRange', 'cascader', 'treeSelect', 'color', 'imageInput', 'urlInput', 'html'; optional):\n\n                设置指定渲染的控件名称.\n\n            - placeholder (string | list of strings; optional):\n\n                设置输入内容提示.\n\n            - description (string; optional):\n\n                设置副标题描述.\n\n            - tooltip (dict; optional):\n\n                设置气泡提示，支持html格式，可传入一个antd的tooltip配置对象支持更多配置.\n\n                `tooltip` is a string | dict with keys:\n\n                - title (boolean | number | string | dict | list; optional):\n\n                    设置显示的文字内容.\n\n                - placement (a value equal to: 'top', 'left', 'right', 'bottom', 'topLeft', 'topRight', 'bottomLeft', 'bottomRight'; optional):\n\n                    设置气泡框的位置，可选的有'top'、'left'、'right'、'bottom'、'topLeft'\n\n                    、'topRight'、'bottomLeft'、'bottomRight'、'leftTop'、'leftBottom'\n\n                    、'rightTop'、'rightBottom'，默认为'top'.\n\n                - color (string; optional):\n\n                    设置背景颜色.\n\n                - mouseEnterDelay (number; optional):\n\n                    设置鼠标移入后延时多少才显示 Tooltip，单位：秒，默认为0.1.\n\n                - mouseLeaveDelay (number; optional):\n\n                    设置鼠标移出后延时多少才隐藏 Tooltip，单位：秒，默认为0.1.\n\n                - overlayClassName (string | dict; optional):\n\n                    设置卡片css类.\n\n                - overlayStyle (dict; optional):\n\n                    设置卡片样式.\n\n                - overlayInnerStyle (dict; optional):\n\n                    设置卡片内容区域的样式.\n\n                - trigger (a value equal to: 'hover', 'focus', 'click' | list of a value equal to: 'hover', 'focus', 'click's; optional):\n\n                    设置触发行为，可选的有'hover'、'focus'、'click'，或是以上多个组成的数组，默认为'hover'.\n\n                - zIndex (number; optional):\n\n                    设置悬浮层zIndex.\n\n                - arrow (a value equal to: 'show', 'hide', 'center'; optional):\n\n                    设置修改箭头的显示状态以及修改箭头是否指向目标元素中心，默认为'show'.\n\n                - fresh (boolean; optional):\n\n                    用于设置是否始终保持更新内容，默认为False。默认情况下，Tooltip\n\n                    在关闭时会缓存内容，设置该属性后会始终保持更新。.\n\n                - open (boolean; optional):\n\n                    用于监听或控制当前tooltip的显隐，默认为False.\n\n                - autoAdjustOverflow (boolean; optional):\n\n                    用于设置气泡被遮挡时自动调整位置,默认为True.\n\n                - defaultOpen (boolean; optional):\n\n                    设置默认是否显隐，默认为False.\n\n                - destroyTooltipOnHide (boolean; optional):\n\n                    设置关闭后是否销毁Tooltip，默认为False.\n\n            - extra (string; optional):\n\n                设置更多的说明信息，支持html格式，会紧贴在元素下面一行展示.\n\n            - required (boolean | string; optional):\n\n                设置是否必填，默认为False.\n\n            - min (number | string; optional):\n\n                设置string类型为字符串最小长度；number类型时为最小值；array 类型时为数组最小长度.\n\n            - max (number | string; optional):\n\n                设置string类型为字符串最大长度；number类型时为最大值；array 类型时为数组最大长度.\n\n            - format (a value equal to: 'image', 'textarea', 'color', 'email', 'url', 'dateTime', 'date', 'time', 'upload'; optional):\n\n                在已设置的type下，如何处理这个type.\n\n            - rules (list of dicts; optional):\n\n                设置表单元素的校验规则.\n\n                `rules` is a list of dicts with keys:\n\n                - defaultField (dict; optional):\n\n                    仅在 type 为 array 类型时有效，用于指定数组元素的校验规则.\n\n                - enum (boolean | number | string | dict | list; optional):\n\n                    是否匹配枚举中的值（需要将 type 设置为 enum）.\n\n                - fields (boolean | number | string | dict | list; optional):\n\n                    仅在 type 为 array 或 object 类型时有效，用于指定子元素的校验规则.\n\n                - len (number; optional):\n\n                    string 类型时为字符串长度；number 类型时为确定数字； array 类型时为数组长度.\n\n                - max (number; optional):\n\n                    必须设置 type：string 类型为字符串最大长度；number 类型时为最大值；array 类型时为数组最大长度.\n\n                - message (string; optional):\n\n                    错误信息，不设置时会通过模板自动生成.\n\n                - min (number; optional):\n\n                    必须设置 type：string 类型为字符串最小长度；number 类型时为最小值；array 类型时为数组最小长度.\n\n                - pattern (string; optional):\n\n                    正则表达式匹配.\n\n                - required (boolean; optional):\n\n                    是否为必选字段.\n\n                - type (a value equal to: 'string', 'number', 'boolean', 'method', 'regexp', 'integer', 'float', 'array', 'object', 'enum', 'date', 'url', 'hex', 'email', 'any'; optional):\n\n                    类型，常见有 string |number |boolean |url | email等.\n\n                - validateTrigger (a value equal to: 'onChange', 'onBlur', 'onFocus'; optional):\n\n                    设置触发验证时机，可选值有onChange、onBlur、onFocus，默认为onChange.\n\n                - validator (string; optional):\n\n                    设置自定义校验，值需要是字符串格式的js函数.\n\n                - warningOnly (boolean; optional):\n\n                    仅警告，不阻塞表单提交.\n\n                - whitespace (boolean; optional):\n\n                    如果字段仅包含空格则校验不通过，只在 type: 'string' 时生效.\n\n            - hidden (boolean | string; optional):\n\n                设置是否隐藏，默认为False.\n\n            - disabled (boolean | string; optional):\n\n                设置是否禁用，默认为False.\n\n            - readOnly (boolean | string; optional):\n\n                设置是否为可读模式，默认为False.\n\n            - readOnlyWidget (string; optional):\n\n                指定只读渲染组件名称.\n\n            - dependencies (list of strings; optional):\n\n                设置表单依赖元素，当依赖的元素更新时，会触发本元素的重新渲染，用于复杂的表单联动.\n\n            - className (string; optional):\n\n                设置自定义控件class名称.\n\n            - reserveLabel (boolean | string; optional):\n\n                当title未设置时，通过配置reserveLabel:\n\n                True可以保留labelWidth占位，使得输入控件和其他控件上下对齐.\n\n            - props (dict; optional):\n\n                设置额外属性，如果使用的是antd组件，对应的就是antd组件的其他属性. | dict with keys:\n\n            - type (a value equal to: 'object'; optional):\n\n                固定配置为type: 'object'.\n\n            - title (string; optional):\n\n                设置标题.\n\n            - widget (a value equal to: 'collapse', 'card', 'lineTitle', 'subInline'; optional):\n\n                设置希望使用的嵌套组件名称，可选的有'collapse'、'card'、'lineTitle'、'subInline'，默认为'card'.\n\n            - properties (dict; optional):\n\n                设置表单元素集合.\n\n            - column (number | string; optional):\n\n                设置表单布局，一行应该有几列，默认为3.\n\n            - description (string; optional):\n\n                设置副标题描述.\n\n            - tooltip (dict; optional):\n\n                设置气泡提示，支持html格式，可传入一个antd的tooltip配置对象支持更多配置.\n\n                `tooltip` is a string | dict with keys:\n\n                - title (boolean | number | string | dict | list; optional):\n\n                    设置显示的文字内容.\n\n                - placement (a value equal to: 'top', 'left', 'right', 'bottom', 'topLeft', 'topRight', 'bottomLeft', 'bottomRight'; optional):\n\n                    设置气泡框的位置，可选的有'top'、'left'、'right'、'bottom'、'topLeft'\n\n                    、'topRight'、'bottomLeft'、'bottomRight'、'leftTop'、'leftBottom'\n\n                    、'rightTop'、'rightBottom'，默认为'top'.\n\n                - color (string; optional):\n\n                    设置背景颜色.\n\n                - mouseEnterDelay (number; optional):\n\n                    设置鼠标移入后延时多少才显示 Tooltip，单位：秒，默认为0.1.\n\n                - mouseLeaveDelay (number; optional):\n\n                    设置鼠标移出后延时多少才隐藏 Tooltip，单位：秒，默认为0.1.\n\n                - overlayClassName (string | dict; optional):\n\n                    设置卡片css类.\n\n                - overlayStyle (dict; optional):\n\n                    设置卡片样式.\n\n                - overlayInnerStyle (dict; optional):\n\n                    设置卡片内容区域的样式.\n\n                - trigger (a value equal to: 'hover', 'focus', 'click' | list of a value equal to: 'hover', 'focus', 'click's; optional):\n\n                    设置触发行为，可选的有'hover'、'focus'、'click'，或是以上多个组成的数组，默认为'hover'.\n\n                - zIndex (number; optional):\n\n                    设置悬浮层zIndex.\n\n                - arrow (a value equal to: 'show', 'hide', 'center'; optional):\n\n                    设置修改箭头的显示状态以及修改箭头是否指向目标元素中心，默认为'show'.\n\n                - fresh (boolean; optional):\n\n                    用于设置是否始终保持更新内容，默认为False。默认情况下，Tooltip\n\n                    在关闭时会缓存内容，设置该属性后会始终保持更新。.\n\n                - open (boolean; optional):\n\n                    用于监听或控制当前tooltip的显隐，默认为False.\n\n                - autoAdjustOverflow (boolean; optional):\n\n                    用于设置气泡被遮挡时自动调整位置,默认为True.\n\n                - defaultOpen (boolean; optional):\n\n                    设置默认是否显隐，默认为False.\n\n                - destroyTooltipOnHide (boolean; optional):\n\n                    设置关闭后是否销毁Tooltip，默认为False.\n\n            - props (dict; optional):\n\n                设置额外属性，透传到对应的嵌套组件中. | dict with keys:\n\n            - type (a value equal to: 'array'; optional):\n\n                固定配置为type: 'array'.\n\n            - title (string; optional):\n\n                设置标题.\n\n            - widget (a value equal to: 'cardList', 'simpleList', 'tableList', 'drawerList', 'virtualList'; optional):\n\n                设置希望使用的列表组件名称，可选的有'cardList'、'simpleList'、'tableList'、'drawerList'、'virtualList'，默认为'cardList'.\n\n            - max (number | string; optional):\n\n                设置列表的最大长度.\n\n            - min (number | string; optional):\n\n                设置列表的最小长度.\n\n            - props (dict; optional):\n\n                设置列表控件.\n\n                `props` is a dict with keys:\n\n                - addBtnProps (dict; optional):\n\n                    设置添加按钮属性，参考 Antd Button Props().\n\n                - delConfirmProps (dict; optional):\n\n                    设置删除确认弹窗属性，参考 Antd PopConfirm Props.\n\n                - actionColumnProps (dict; optional):\n\n                    设置tableList | drawerList | virtualList 中操作列的属性，参考 Antd\n\n                    Table ColumnType。 其中 title 使用 colHeaderText 代替。.\n\n                - hideAdd (boolean; optional):\n\n                    设置是否隐藏添加按钮.\n\n                - hideCopy (boolean; optional):\n\n                    设置是否隐藏复制按钮.\n\n                - hideMove (boolean; optional):\n\n                    设置是否隐藏移动按钮.\n\n                - hideDelete (boolean; optional):\n\n                    设置是否隐藏删除按钮.\n\n            - items (dict; optional):\n\n                动态项配置，可以是一个嵌套控件.\n\n    - displayType (a value equal to: 'column', 'row', 'inline'; default 'column'):\n        设置表单布局模式，表单元素与 label 同行 or 分两行展示, inline 则整个展示自然顺排，\n        可选的有'column'、'row'与'inline'，默认为'column'.\n\n    - labelAlign (a value equal to: 'left', 'right'; default 'right'):\n        设置label标签的文本对齐方式，可选的有'left'和'right'，默认为'right'.\n\n    - lableWidth (number; optional):\n        设置表单标签固定宽度.\n\n    - maxWidth (number; optional):\n        设置表单项控件的最大宽度.\n\n    - labelCol (number; optional):\n        设置表单标签占位格数.\n\n    - fieldCol (number; optional):\n        设置表单控件占位格数.\n\n    - colon (boolean; default True):\n        设置是否是否显示label后面的冒号，默认为True.\n\n    - globalConfig (dict; optional):\n        设置表单全局配置.\n\n        `globalConfig` is a dict with keys:\n\n        - mustacheDisabled (boolean; optional):\n            设置是否禁用表达式.\n\n        - listOperate (dict; optional):\n            设置列表表单配置.\n\n            `listOperate` is a dict with keys:\n\n            - btnType (a value equal to: 'icon', 'text'; optional):\n                设置列表表单操作按钮样式.\n\n            - hideMove (boolean; optional):\n                设置是否隐藏移动按钮.\n\n    - watch (dict with strings as keys and values of type string; optional):\n        监听表单的数据变化，属性值需要是字符串格式的js函数.\n\n    - removeHiddenData (boolean; default True):\n        设置提交数据的时候是否去掉已经被隐藏的元素的数据，默认为True.\n\n    - readOnly (boolean; default False):\n        设否开启只读模式，一般用于预览展示，全文text展示，默认为False.\n\n    - column (number; default 1):\n        设置一行展示多少列.\n\n    - disabled (boolean; default False):\n        设置是否禁用全部表单项，默认为False.\n\n    - scrollToFirstError (boolean; default False):\n        设置提交失败是否自动滚动到第一个错误字段，默认为False.\n\n    - locale (a value equal to: 'zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr'; default 'zh-CN'):\n        设置展示语言，目前只支持中文、英文， 可选的有'zh-CN'与'en-US'，默认为'zh-CN'.\n\n    - footer (dict; optional):\n        设置底部操作区域.\n\n        `footer` is a boolean | dict with keys:\n\n        - submit (dict; optional):\n            设置提交按钮.\n\n            `submit` is a dict with keys:\n\n            - text (string; optional):\n                设置按钮文字.\n\n            - hide (boolean; optional):\n                设置是否显示.\n\n            - btnProps (dict; optional):\n                设置其他按钮属性，参考 Antd Button Props().\n\n        - reset (dict; optional):\n            设置重置按钮.\n\n            `reset` is a dict with keys:\n\n            - text (string; optional):\n                设置按钮文字.\n\n            - hide (boolean; optional):\n                设置是否显示.\n\n            - btnProps (dict; optional):\n                设置其他按钮属性，参考 Antd Button Props(). | a list of or a singular dash component, string or number\n\n    - configProvider (dict; optional):\n        同antd的configProvider.\n\n    - validateMessages (dict; optional):\n        设置默认的校验提示信息.\n\n        `validateMessages` is a dict with keys:\n\n        - default (string; optional)\n\n        - required (string; optional)\n\n        - whitespace (string; optional)\n\n        - date (dict; optional)\n\n            `date` is a dict with keys:\n\n            - format (string; optional)\n\n            - parse (string; optional)\n\n            - invalid (string; optional)\n\n        - types (dict; optional)\n\n            `types` is a dict with keys:\n\n            - string (string; optional)\n\n            - method (string; optional)\n\n            - array (string; optional)\n\n            - object (string; optional)\n\n            - number (string; optional)\n\n            - date (string; optional)\n\n            - boolean (string; optional)\n\n            - integer (string; optional)\n\n            - float (string; optional)\n\n            - regexp (string; optional)\n\n            - email (string; optional)\n\n            - url (string; optional)\n\n            - hex (string; optional)\n\n        - string (dict; optional)\n\n            `string` is a dict with keys:\n\n            - len (string; optional)\n\n            - min (string; optional)\n\n            - max (string; optional)\n\n            - range (string; optional)\n\n        - number (dict; optional)\n\n            `number` is a dict with keys:\n\n            - len (string; optional)\n\n            - min (string; optional)\n\n            - max (string; optional)\n\n            - range (string; optional)\n\n        - array (dict; optional)\n\n            `array` is a dict with keys:\n\n            - len (string; optional)\n\n            - min (string; optional)\n\n            - max (string; optional)\n\n            - range (string; optional)\n\n        - pattern (dict; optional)\n\n            `pattern` is a dict with keys:\n\n            - mismatch (string; optional)\n\n    - values (dict; optional):\n        设置与监听表单数据.\n\n    - validateStatuses (boolean; optional):\n        监听表单校验结果.\n\n    - submitForm (boolean; optional):\n        控制参数，用于提交表单时手动搜集表单的校验结果，回调设置为True后会自动变为False.\n\n    - submitFormClicks (number; default 0):\n        辅助监听表单提交参数.\n\n    - resetForm (boolean; optional):\n        控制参数，用于重置表单项校验状态（不能重置表单项包裹的组件的值，需要通过回调重置表单项包裹的组件的值），回调设置为True后会自动变为False.\n\n    - resetFormClicks (number; default 0):\n        辅助监听表单重置参数.\n\n    - loading_state (dict; optional)\n\n        `loading_state` is a dict with keys:\n\n        - is_loading (boolean; optional):\n            Determines if the component is loading or not.\n\n        - prop_name (string; optional):\n            Holds which property is loading.\n\n        - component_name (string; optional):\n            Holds the name of the component that is loading.\"\"\"\n\n    _children_props: typing.List[str] = ['footer']\n    _base_nodes = ['footer', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdFormRender'\n    SchemaPropertiesTooltip = TypedDict(\n        'SchemaPropertiesTooltip',\n        {\n            'title': NotRequired[typing.Any],\n            'placement': NotRequired[\n                Literal[\n                    'top',\n                    'left',\n                    'right',\n                    'bottom',\n                    'topLeft',\n                    'topRight',\n                    'bottomLeft',\n                    'bottomRight',\n                ]\n            ],\n            'color': NotRequired[str],\n            'mouseEnterDelay': NotRequired[NumberType],\n            'mouseLeaveDelay': NotRequired[NumberType],\n            'overlayClassName': NotRequired[typing.Union[str, dict]],\n            'overlayStyle': NotRequired[dict],\n            'overlayInnerStyle': NotRequired[dict],\n            'trigger': NotRequired[\n                typing.Union[\n                    Literal['hover', 'focus', 'click'],\n                    typing.Sequence[Literal['hover', 'focus', 'click']],\n                ]\n            ],\n            'zIndex': NotRequired[NumberType],\n            'arrow': NotRequired[Literal['show', 'hide', 'center']],\n            'fresh': NotRequired[bool],\n            'open': NotRequired[bool],\n            'autoAdjustOverflow': NotRequired[bool],\n            'defaultOpen': NotRequired[bool],\n            'destroyTooltipOnHide': NotRequired[bool],\n        },\n    )\n\n    SchemaPropertiesRules = TypedDict(\n        'SchemaPropertiesRules',\n        {\n            'defaultField': NotRequired[dict],\n            'enum': NotRequired[typing.Any],\n            'fields': NotRequired[typing.Any],\n            'len': NotRequired[NumberType],\n            'max': NotRequired[NumberType],\n            'message': NotRequired[str],\n            'min': NotRequired[NumberType],\n            'pattern': NotRequired[typing.Union[str, typing.Any]],\n            'required': NotRequired[bool],\n            'type': NotRequired[\n                Literal[\n                    'string',\n                    'number',\n                    'boolean',\n                    'method',\n                    'regexp',\n                    'integer',\n                    'float',\n                    'array',\n                    'object',\n                    'enum',\n                    'date',\n                    'url',\n                    'hex',\n                    'email',\n                    'any',\n                ]\n            ],\n            'validateTrigger': NotRequired[Literal['onChange', 'onBlur', 'onFocus']],\n            'validator': NotRequired[str],\n            'warningOnly': NotRequired[bool],\n            'whitespace': NotRequired[bool],\n        },\n    )\n\n    SchemaProperties = TypedDict(\n        'SchemaProperties',\n        {\n            'type': NotRequired[Literal['array']],\n            'title': NotRequired[str],\n            'widget': NotRequired[\n                Literal['cardList', 'simpleList', 'tableList', 'drawerList', 'virtualList']\n            ],\n            'max': NotRequired[typing.Union[NumberType, str]],\n            'min': NotRequired[typing.Union[NumberType, str]],\n            'props': NotRequired['SchemaPropertiesProps'],\n            'items': NotRequired[dict],\n        },\n    )\n\n    SchemaPropertiesProps = TypedDict(\n        'SchemaPropertiesProps',\n        {\n            'addBtnProps': NotRequired[dict],\n            'delConfirmProps': NotRequired[dict],\n            'actionColumnProps': NotRequired[dict],\n            'hideAdd': NotRequired[bool],\n            'hideCopy': NotRequired[bool],\n            'hideMove': NotRequired[bool],\n            'hideDelete': NotRequired[bool],\n        },\n    )\n\n    Schema = TypedDict(\n        'Schema',\n        {\n            'type': NotRequired[Literal['object']],\n            'displayType': NotRequired[Literal['column', 'row', 'inline']],\n            'column': NotRequired[NumberType],\n            'labelWidth': NotRequired[NumberType],\n            'maxWidth': NotRequired[NumberType],\n            'labelCol': NotRequired[NumberType],\n            'fieldCol': NotRequired[NumberType],\n            'properties': NotRequired[\n                typing.Dict[typing.Union[str, float, int], typing.Union['SchemaProperties']]\n            ],\n        },\n    )\n\n    GlobalConfigListOperate = TypedDict(\n        'GlobalConfigListOperate',\n        {'btnType': NotRequired[Literal['icon', 'text']], 'hideMove': NotRequired[bool]},\n    )\n\n    GlobalConfig = TypedDict(\n        'GlobalConfig',\n        {\n            'mustacheDisabled': NotRequired[bool],\n            'listOperate': NotRequired['GlobalConfigListOperate'],\n        },\n    )\n\n    FooterSubmit = TypedDict(\n        'FooterSubmit',\n        {'text': NotRequired[str], 'hide': NotRequired[bool], 'btnProps': NotRequired[dict]},\n    )\n\n    FooterReset = TypedDict(\n        'FooterReset',\n        {'text': NotRequired[str], 'hide': NotRequired[bool], 'btnProps': NotRequired[dict]},\n    )\n\n    Footer = TypedDict(\n        'Footer', {'submit': NotRequired['FooterSubmit'], 'reset': NotRequired['FooterReset']}\n    )\n\n    ValidateMessagesDate = TypedDict(\n        'ValidateMessagesDate',\n        {'format': NotRequired[str], 'parse': NotRequired[str], 'invalid': NotRequired[str]},\n    )\n\n    ValidateMessagesTypes = TypedDict(\n        'ValidateMessagesTypes',\n        {\n            'string': NotRequired[str],\n            'method': NotRequired[str],\n            'array': NotRequired[str],\n            'object': NotRequired[str],\n            'number': NotRequired[str],\n            'date': NotRequired[str],\n            'boolean': NotRequired[str],\n            'integer': NotRequired[str],\n            'float': NotRequired[str],\n            'regexp': NotRequired[str],\n            'email': NotRequired[str],\n            'url': NotRequired[str],\n            'hex': NotRequired[str],\n        },\n    )\n\n    ValidateMessagesString = TypedDict(\n        'ValidateMessagesString',\n        {\n            'len': NotRequired[str],\n            'min': NotRequired[str],\n            'max': NotRequired[str],\n            'range': NotRequired[str],\n        },\n    )\n\n    ValidateMessagesNumber = TypedDict(\n        'ValidateMessagesNumber',\n        {\n            'len': NotRequired[str],\n            'min': NotRequired[str],\n            'max': NotRequired[str],\n            'range': NotRequired[str],\n        },\n    )\n\n    ValidateMessagesArray = TypedDict(\n        'ValidateMessagesArray',\n        {\n            'len': NotRequired[str],\n            'min': NotRequired[str],\n            'max': NotRequired[str],\n            'range': NotRequired[str],\n        },\n    )\n\n    ValidateMessagesPattern = TypedDict('ValidateMessagesPattern', {'mismatch': NotRequired[str]})\n\n    ValidateMessages = TypedDict(\n        'ValidateMessages',\n        {\n            'default': NotRequired[str],\n            'required': NotRequired[str],\n            'whitespace': NotRequired[str],\n            'date': NotRequired['ValidateMessagesDate'],\n            'types': NotRequired['ValidateMessagesTypes'],\n            'string': NotRequired['ValidateMessagesString'],\n            'number': NotRequired['ValidateMessagesNumber'],\n            'array': NotRequired['ValidateMessagesArray'],\n            'pattern': NotRequired['ValidateMessagesPattern'],\n        },\n    )\n\n    LoadingState = TypedDict(\n        'LoadingState',\n        {\n            'is_loading': NotRequired[bool],\n            'prop_name': NotRequired[str],\n            'component_name': NotRequired[str],\n        },\n    )\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        style: typing.Optional[typing.Any] = None,\n        key: typing.Optional[str] = None,\n        schema: typing.Optional['Schema'] = None,\n        displayType: typing.Optional[Literal['column', 'row', 'inline']] = None,\n        labelAlign: typing.Optional[Literal['left', 'right']] = None,\n        lableWidth: typing.Optional[NumberType] = None,\n        maxWidth: typing.Optional[NumberType] = None,\n        labelCol: typing.Optional[NumberType] = None,\n        fieldCol: typing.Optional[NumberType] = None,\n        colon: typing.Optional[bool] = None,\n        globalConfig: typing.Optional['GlobalConfig'] = None,\n        watch: typing.Optional[typing.Dict[typing.Union[str, float, int], str]] = None,\n        removeHiddenData: typing.Optional[bool] = None,\n        readOnly: typing.Optional[bool] = None,\n        column: typing.Optional[NumberType] = None,\n        disabled: typing.Optional[bool] = None,\n        scrollToFirstError: typing.Optional[bool] = None,\n        locale: typing.Optional[Literal['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']] = None,\n        footer: typing.Optional[typing.Union[bool, 'Footer', ComponentType]] = None,\n        configProvider: typing.Optional[dict] = None,\n        validateMessages: typing.Optional['ValidateMessages'] = None,\n        values: typing.Optional[dict] = None,\n        validateStatuses: typing.Optional[bool] = None,\n        submitForm: typing.Optional[bool] = None,\n        submitFormClicks: typing.Optional[NumberType] = None,\n        resetForm: typing.Optional[bool] = None,\n        resetFormClicks: typing.Optional[NumberType] = None,\n        loading_state: typing.Optional['LoadingState'] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'className',\n            'style',\n            'key',\n            'schema',\n            'displayType',\n            'labelAlign',\n            'lableWidth',\n            'maxWidth',\n            'labelCol',\n            'fieldCol',\n            'colon',\n            'globalConfig',\n            'watch',\n            'removeHiddenData',\n            'readOnly',\n            'column',\n            'disabled',\n            'scrollToFirstError',\n            'locale',\n            'footer',\n            'configProvider',\n            'validateMessages',\n            'values',\n            'validateStatuses',\n            'submitForm',\n            'submitFormClicks',\n            'resetForm',\n            'resetFormClicks',\n            'loading_state',\n        ]\n        self._valid_wildcard_attributes = []\n        self.available_properties = [\n            'id',\n            'className',\n            'style',\n            'key',\n            'schema',\n            'displayType',\n            'labelAlign',\n            'lableWidth',\n            'maxWidth',\n            'labelCol',\n            'fieldCol',\n            'colon',\n            'globalConfig',\n            'watch',\n            'removeHiddenData',\n            'readOnly',\n            'column',\n            'disabled',\n            'scrollToFirstError',\n            'locale',\n            'footer',\n            'configProvider',\n            'validateMessages',\n            'values',\n            'validateStatuses',\n            'submitForm',\n            'submitFormClicks',\n            'resetForm',\n            'resetFormClicks',\n            'loading_state',\n        ]\n        self.available_wildcard_properties = []\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        for k in ['schema']:\n            if k not in args:\n                raise TypeError('Required argument `' + k + '` was not specified.')\n\n        super(AntdFormRender, self).__init__(**args)\n\n\nsetattr(AntdFormRender, '__init__', _explicitize_args(AntdFormRender.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdHappyProvider.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdHappyProvider(Component):\n    \"\"\"An AntdHappyProvider component.\n    快乐工作特效组件AntdHappyProvider\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，内嵌元素.\n\n    - disabled (boolean; default False):\n        是否禁用当前特效 默认值：`False`.\"\"\"\n\n    _children_props: typing.List[str] = []\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdHappyProvider'\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        disabled: typing.Optional[bool] = None,\n        **kwargs,\n    ):\n        self._prop_names = ['id', 'key', 'children', 'disabled']\n        self._valid_wildcard_attributes = []\n        self.available_properties = ['id', 'key', 'children', 'disabled']\n        self.available_wildcard_properties = []\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdHappyProvider, self).__init__(children=children, **args)\n\n\nsetattr(AntdHappyProvider, '__init__', _explicitize_args(AntdHappyProvider.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdHeader.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdHeader(Component):\n    \"\"\"An AntdHeader component.\n    页首组件AntdHeader\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，内嵌元素.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = []\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdHeader'\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        **kwargs,\n    ):\n        self._prop_names = ['id', 'key', 'children', 'style', 'className', 'data-*', 'aria-*']\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdHeader, self).__init__(children=children, **args)\n\n\nsetattr(AntdHeader, '__init__', _explicitize_args(AntdHeader.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdIcon.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdIcon(Component):\n    \"\"\"An AntdIcon component.\n    图标组件AntdIcon\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - mode (a value equal to: 'default', 'iconfont'; default 'default'):\n        图标调用模式，可选项有`'default'`（内置图标）、`'iconfont'`（阿里巴巴矢量图标）\n        默认值：`'default'`.\n\n    - icon (string; optional):\n        当`mode='default'`时，设置内置图标名称，当`mode='iconfont'`时，设置自定义源图标名称.\n\n    - scriptUrl (string | list of strings; optional):\n        当`mode='iconfont'`时，设置单个或多个阿里巴巴矢量图标源（在iconfont.cn上制作）.\n\n    - nClicks (number; default 0):\n        图标累计点击次数，用于监听图标点击行为 默认值：`0`.\n\n    - debounceWait (number; default 0):\n        图标点击事件监听防抖延时，单位：毫秒 默认值：`0`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = []\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdIcon'\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        mode: typing.Optional[Literal['default', 'iconfont']] = None,\n        icon: typing.Optional[str] = None,\n        scriptUrl: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,\n        nClicks: typing.Optional[NumberType] = None,\n        debounceWait: typing.Optional[NumberType] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'mode',\n            'icon',\n            'scriptUrl',\n            'nClicks',\n            'debounceWait',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'mode',\n            'icon',\n            'scriptUrl',\n            'nClicks',\n            'debounceWait',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdIcon, self).__init__(**args)\n\n\nsetattr(AntdIcon, '__init__', _explicitize_args(AntdIcon.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdImage.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdImage(Component):\n    \"\"\"An AntdImage component.\n    图片组件AntdImage\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - locale (a value equal to: 'zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr'; default 'zh-cn'):\n        组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n        默认值：`'zh-cn'`.\n\n    - alt (string; optional):\n        图片alt信息.\n\n    - width (number | string; optional):\n        图片宽度.\n\n    - height (number | string; optional):\n        图片高度.\n\n    - src (string | list of strings; optional):\n        配置图片资源地址，当传入数组时为多图片模式.\n\n    - fallback (string; optional):\n        图片加载失败占位图资源地址.\n\n    - multiImageMode (a value equal to: 'fold', 'unfold'; default 'fold'):\n        多图片模式展示方式，可选项有`'fold'`、`'unfold'` 默认值：`'fold'`.\n\n    - previewVisible (boolean; optional):\n        监听或控制当前图片预览层是否处于打开状态.\n\n    - previewCurrent (number; optional):\n        监听或控制当前图片预览对应切换到的图片下标.\n\n    - preview (dict; default True):\n        配置图片预览相关功能，传入`False`时会禁用预览功能 默认值：`True`.\n\n        `preview` is a boolean | dict with keys:\n\n        - src (string; optional):\n            自定义预览图链接地址.\n\n        - movable (boolean; optional):\n            预览模式下是否可移动图片.\n\n        - mask (a list of or a singular dash component, string or number; optional):\n            组件型，用于自定义缩略图遮罩元素.\n\n        - maskClassName (string; optional):\n            缩略图遮罩元素css类名.\n\n        - rootClassName (string; optional):\n            缩略图根节点css类名.\n\n        - scaleStep (number; optional):\n            `1+scaleStep`值为每一步缩放的倍数 默认值：`0.5`.\n\n        - minScale (number; optional):\n            最小缩放倍数 默认值：`1`.\n\n        - maxScale (number; optional):\n            最大缩放倍数 默认值：`50`.\n\n    - toolbarExtra (a list of or a singular dash component, string or number; optional):\n        针对预览模式下的工具栏，末尾扩充自定义工具图标元素.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = ['preview.mask', 'toolbarExtra']\n    _base_nodes = ['toolbarExtra', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdImage'\n    Preview = TypedDict(\n        'Preview',\n        {\n            'src': NotRequired[str],\n            'movable': NotRequired[bool],\n            'mask': NotRequired[ComponentType],\n            'maskClassName': NotRequired[str],\n            'rootClassName': NotRequired[str],\n            'scaleStep': NotRequired[NumberType],\n            'minScale': NotRequired[NumberType],\n            'maxScale': NotRequired[NumberType],\n        },\n    )\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        locale: typing.Optional[Literal['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']] = None,\n        alt: typing.Optional[str] = None,\n        width: typing.Optional[typing.Union[NumberType, str]] = None,\n        height: typing.Optional[typing.Union[NumberType, str]] = None,\n        src: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,\n        fallback: typing.Optional[str] = None,\n        multiImageMode: typing.Optional[Literal['fold', 'unfold']] = None,\n        previewVisible: typing.Optional[bool] = None,\n        previewCurrent: typing.Optional[NumberType] = None,\n        preview: typing.Optional[typing.Union[bool, 'Preview']] = None,\n        toolbarExtra: typing.Optional[ComponentType] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'locale',\n            'alt',\n            'width',\n            'height',\n            'src',\n            'fallback',\n            'multiImageMode',\n            'previewVisible',\n            'previewCurrent',\n            'preview',\n            'toolbarExtra',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'locale',\n            'alt',\n            'width',\n            'height',\n            'src',\n            'fallback',\n            'multiImageMode',\n            'previewVisible',\n            'previewCurrent',\n            'preview',\n            'toolbarExtra',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdImage, self).__init__(**args)\n\n\nsetattr(AntdImage, '__init__', _explicitize_args(AntdImage.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdImageGroup.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdImageGroup(Component):\n    \"\"\"An AntdImageGroup component.\n    图片组合组件AntdImageGroup\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，定义组内需要嵌套的`AntdImage`组件.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - locale (a value equal to: 'zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr'; default 'zh-cn'):\n        组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n        默认值：`'zh-cn'`.\n\n    - items (list of strings; optional):\n        控制图片组合内部实际展示的图片资源地址数组，顺序依次展示.\n\n    - fallback (string; optional):\n        图片加载失败占位图资源地址.\n\n    - preview (dict; default True):\n        配置图片预览相关功能，传入`False`时会禁用预览功能 默认值：`True`.\n\n        `preview` is a boolean | dict with keys:\n\n        - src (string; optional):\n            自定义预览图链接地址.\n\n        - movable (boolean; optional):\n            预览模式下是否可移动图片.\n\n        - mask (a list of or a singular dash component, string or number; optional):\n            组件型，用于自定义缩略图遮罩元素.\n\n        - maskClassName (string; optional):\n            缩略图遮罩元素css类名.\n\n        - rootClassName (string; optional):\n            缩略图根节点css类名.\n\n        - scaleStep (number; optional):\n            `1+scaleStep`值为每一步缩放的倍数 默认值：`0.5`.\n\n        - minScale (number; optional):\n            最小缩放倍数 默认值：`1`.\n\n        - maxScale (number; optional):\n            最大缩放倍数 默认值：`50`.\n\n    - visible (boolean; optional):\n        监听或设置当前图片组是否处于全屏预览状态.\n\n    - current (number; optional):\n        监听或控制当前图片预览对应切换到的图片下标.\n\n    - disableCurrent (boolean; default True):\n        是否关闭基于`current`的当前图片下标受控功能 默认值：`True`.\n\n    - toolbarExtra (a list of or a singular dash component, string or number; optional):\n        针对预览模式下的工具栏，末尾扩充自定义工具图标元素.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = ['preview.mask', 'toolbarExtra']\n    _base_nodes = ['toolbarExtra', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdImageGroup'\n    Preview = TypedDict(\n        'Preview',\n        {\n            'src': NotRequired[str],\n            'movable': NotRequired[bool],\n            'mask': NotRequired[ComponentType],\n            'maskClassName': NotRequired[str],\n            'rootClassName': NotRequired[str],\n            'scaleStep': NotRequired[NumberType],\n            'minScale': NotRequired[NumberType],\n            'maxScale': NotRequired[NumberType],\n        },\n    )\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        locale: typing.Optional[Literal['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']] = None,\n        items: typing.Optional[typing.Sequence[str]] = None,\n        fallback: typing.Optional[str] = None,\n        preview: typing.Optional[typing.Union[bool, 'Preview']] = None,\n        visible: typing.Optional[bool] = None,\n        current: typing.Optional[NumberType] = None,\n        disableCurrent: typing.Optional[bool] = None,\n        toolbarExtra: typing.Optional[ComponentType] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'locale',\n            'items',\n            'fallback',\n            'preview',\n            'visible',\n            'current',\n            'disableCurrent',\n            'toolbarExtra',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'locale',\n            'items',\n            'fallback',\n            'preview',\n            'visible',\n            'current',\n            'disableCurrent',\n            'toolbarExtra',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdImageGroup, self).__init__(children=children, **args)\n\n\nsetattr(AntdImageGroup, '__init__', _explicitize_args(AntdImageGroup.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdInput.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdInput(Component):\n    \"\"\"An AntdInput component.\n    输入框组件AntdInput\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - styles (dict; optional):\n        细分控制子元素css样式.\n\n        `styles` is a dict with keys:\n\n        - input (dict; optional):\n            控制文本框元素css样式.\n\n        - prefix (dict; optional):\n            控制前缀容器css样式.\n\n        - suffix (dict; optional):\n            控制后缀容器css样式.\n\n        - count (dict; optional):\n            控制文字计数元素css样式.\n\n        - textarea (dict; optional):\n            控制文本域元素css样式.\n\n    - classNames (dict; optional):\n        细分控制子元素css类名.\n\n        `classNames` is a dict with keys:\n\n        - input (string; optional):\n            控制文本框元素css类名.\n\n        - prefix (string; optional):\n            控制前缀容器css类名.\n\n        - suffix (string; optional):\n            控制后缀容器css类名.\n\n        - count (string; optional):\n            控制文字计数元素css类名.\n\n        - textarea (string; optional):\n            控制文本域元素css类名.\n\n    - name (string; optional):\n        配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值.\n\n    - enableBatchControl (boolean; default True):\n        控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能 默认值：`True`.\n\n    - mode (a value equal to: 'default', 'search', 'text-area', 'password'; default 'default'):\n        输入框模式，可选项有`'default'`、`'search'`、`'text-area'`、`'password'`\n        默认值：`'default'`.\n\n    - autoComplete (a value equal to: 'off', 'on'; default 'on'):\n        是否开启浏览器自带的自动补全功能，可选项有`'off'`、`'on'` 默认值：`'on'`.\n\n    - disabled (boolean; default False):\n        是否禁用当前组件 默认值：`False`.\n\n    - size (a value equal to: 'small', 'middle', 'large'; default 'middle'):\n        当前组件尺寸规格，可选项有`'small'`、`'middle'`、`'large'` 默认值：`'middle'`.\n\n    - bordered (boolean; default True):\n        是否显示边框，设置为`True`时等价于`variant='outlined'` 默认值：`True`.\n\n    - variant (a value equal to: 'outlined', 'borderless', 'filled', 'underlined'; optional):\n        形态变体类型，可选项有`'outlined'`、`'borderless'`、`'filled'`、`'underlined'`，其中`'outlined'`等价于`bordered=True`，但优先级更高.\n\n    - placeholder (string; optional):\n        输入框占位文字内容.\n\n    - value (string; optional):\n        监听或设置已输入值.\n\n    - defaultValue (string; optional):\n        初始化已输入值.\n\n    - passwordUseMd5 (boolean; default False):\n        针对`'password'`模式，是否启用md5加密功能 默认值：`False`.\n\n    - md5Value (string; optional):\n        当`passwordUseMd5=True`时，监听已输入值md5编码结果.\n\n    - debounceValue (string; optional):\n        监听防抖版本的已输入值.\n\n    - debounceWait (number; default 0):\n        防抖延时时长，单位：毫秒 默认值：`0`.\n\n    - addonBefore (a list of or a singular dash component, string or number; optional):\n        组件型，前置标签内容.\n\n    - addonAfter (a list of or a singular dash component, string or number; optional):\n        组件型，后置标签内容.\n\n    - prefix (a list of or a singular dash component, string or number; optional):\n        组件型，前缀内嵌内容.\n\n    - suffix (a list of or a singular dash component, string or number; optional):\n        组件型，后缀内嵌内容.\n\n    - maxLength (number; optional):\n        限制输入框最大可输入字符数量.\n\n    - showCount (boolean; default False):\n        是否显示已输入字符计数 默认值：`False`.\n\n    - countFormat (string; optional):\n        正则表达式，用于配合字符计数相关功能，自定义计数规则.\n\n    - autoSize (dict; default False):\n        针对`'text-area'`模式，配置输入框高度自适应相关功能 默认值：`False`.\n\n        `autoSize` is a boolean | dict with keys:\n\n        - minRows (number; optional):\n            输入框最小行数.\n\n        - maxRows (number; optional):\n            输入框最大行数.\n\n    - nSubmit (number; default 0):\n        监听输入框聚焦状态下，键盘enter键累计点按次数 默认值：`0`.\n\n    - nClicksSearch (number; default 0):\n        针对`'search'`模式，监听搜索按钮累计点击次数 默认值：`0`.\n\n    - status (a value equal to: 'error', 'warning'; optional):\n        控制校验状态，可选项有`'error'`、`'warning'`.\n\n    - allowClear (boolean; default False):\n        是否允许一键清空已输入值 默认值：`False`.\n\n    - autoFocus (boolean; default False):\n        是否自动获取焦点 默认值：`False`.\n\n    - focusing (boolean; optional):\n        监听输入框是否聚焦.\n\n    - readOnly (boolean; optional):\n        是否渲染为只读状态 默认值：`False`.\n\n    - emptyAsNone (boolean; default False):\n        当输入框已输入值为空时，是否强制更新`value`为空值，从而统一空字符串与空值混合的情况 默认值：`False`.\n\n    - batchPropsNames (list of strings; optional):\n        需要纳入[批量属性监听](/batch-props-values)的若干属性名.\n\n    - batchPropsValues (dict; optional):\n        监听`batchPropsNames`中指定的若干属性值.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\n\n    - persistence (boolean | string | number; optional):\n        是否开启[属性持久化](/prop-persistence).\n\n    - persisted_props (list of a value equal to: 'value', 'md5Value's; optional):\n        开启属性持久化功能的若干属性名，可选项有`'value'`、`'md5Value'` 默认值：`['value',\n        'md5Value']`.\n\n    - persistence_type (a value equal to: 'local', 'session', 'memory'; optional):\n        属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n        默认值：`'local'`.\"\"\"\n\n    _children_props: typing.List[str] = ['addonBefore', 'addonAfter', 'prefix', 'suffix']\n    _base_nodes = ['addonBefore', 'addonAfter', 'prefix', 'suffix', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdInput'\n    Styles = TypedDict(\n        'Styles',\n        {\n            'input': NotRequired[dict],\n            'prefix': NotRequired[dict],\n            'suffix': NotRequired[dict],\n            'count': NotRequired[dict],\n            'textarea': NotRequired[dict],\n        },\n    )\n\n    ClassNames = TypedDict(\n        'ClassNames',\n        {\n            'input': NotRequired[str],\n            'prefix': NotRequired[str],\n            'suffix': NotRequired[str],\n            'count': NotRequired[str],\n            'textarea': NotRequired[str],\n        },\n    )\n\n    AutoSize = TypedDict(\n        'AutoSize', {'minRows': NotRequired[NumberType], 'maxRows': NotRequired[NumberType]}\n    )\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        styles: typing.Optional['Styles'] = None,\n        classNames: typing.Optional['ClassNames'] = None,\n        name: typing.Optional[str] = None,\n        enableBatchControl: typing.Optional[bool] = None,\n        mode: typing.Optional[Literal['default', 'search', 'text-area', 'password']] = None,\n        autoComplete: typing.Optional[Literal['off', 'on']] = None,\n        disabled: typing.Optional[bool] = None,\n        size: typing.Optional[Literal['small', 'middle', 'large']] = None,\n        bordered: typing.Optional[bool] = None,\n        variant: typing.Optional[Literal['outlined', 'borderless', 'filled', 'underlined']] = None,\n        placeholder: typing.Optional[str] = None,\n        value: typing.Optional[str] = None,\n        defaultValue: typing.Optional[str] = None,\n        passwordUseMd5: typing.Optional[bool] = None,\n        md5Value: typing.Optional[str] = None,\n        debounceValue: typing.Optional[str] = None,\n        debounceWait: typing.Optional[NumberType] = None,\n        addonBefore: typing.Optional[ComponentType] = None,\n        addonAfter: typing.Optional[ComponentType] = None,\n        prefix: typing.Optional[ComponentType] = None,\n        suffix: typing.Optional[ComponentType] = None,\n        maxLength: typing.Optional[NumberType] = None,\n        showCount: typing.Optional[bool] = None,\n        countFormat: typing.Optional[str] = None,\n        autoSize: typing.Optional[typing.Union[bool, 'AutoSize']] = None,\n        nSubmit: typing.Optional[NumberType] = None,\n        nClicksSearch: typing.Optional[NumberType] = None,\n        status: typing.Optional[Literal['error', 'warning']] = None,\n        allowClear: typing.Optional[bool] = None,\n        autoFocus: typing.Optional[bool] = None,\n        focusing: typing.Optional[bool] = None,\n        readOnly: typing.Optional[bool] = None,\n        emptyAsNone: typing.Optional[bool] = None,\n        batchPropsNames: typing.Optional[typing.Sequence[str]] = None,\n        batchPropsValues: typing.Optional[dict] = None,\n        persistence: typing.Optional[typing.Union[bool, str, NumberType]] = None,\n        persisted_props: typing.Optional[typing.Sequence[Literal['value', 'md5Value']]] = None,\n        persistence_type: typing.Optional[Literal['local', 'session', 'memory']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'styles',\n            'classNames',\n            'name',\n            'enableBatchControl',\n            'mode',\n            'autoComplete',\n            'disabled',\n            'size',\n            'bordered',\n            'variant',\n            'placeholder',\n            'value',\n            'defaultValue',\n            'passwordUseMd5',\n            'md5Value',\n            'debounceValue',\n            'debounceWait',\n            'addonBefore',\n            'addonAfter',\n            'prefix',\n            'suffix',\n            'maxLength',\n            'showCount',\n            'countFormat',\n            'autoSize',\n            'nSubmit',\n            'nClicksSearch',\n            'status',\n            'allowClear',\n            'autoFocus',\n            'focusing',\n            'readOnly',\n            'emptyAsNone',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'styles',\n            'classNames',\n            'name',\n            'enableBatchControl',\n            'mode',\n            'autoComplete',\n            'disabled',\n            'size',\n            'bordered',\n            'variant',\n            'placeholder',\n            'value',\n            'defaultValue',\n            'passwordUseMd5',\n            'md5Value',\n            'debounceValue',\n            'debounceWait',\n            'addonBefore',\n            'addonAfter',\n            'prefix',\n            'suffix',\n            'maxLength',\n            'showCount',\n            'countFormat',\n            'autoSize',\n            'nSubmit',\n            'nClicksSearch',\n            'status',\n            'allowClear',\n            'autoFocus',\n            'focusing',\n            'readOnly',\n            'emptyAsNone',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdInput, self).__init__(**args)\n\n\nsetattr(AntdInput, '__init__', _explicitize_args(AntdInput.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdInputNumber.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdInputNumber(Component):\n    \"\"\"An AntdInputNumber component.\n    数值输入框组件AntdInputNumber\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - name (string; optional):\n        配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值.\n\n    - enableBatchControl (boolean; default True):\n        控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能 默认值：`True`.\n\n    - addonBefore (a list of or a singular dash component, string or number; optional):\n        组件型，前置标签内容.\n\n    - addonAfter (a list of or a singular dash component, string or number; optional):\n        组件型，后置标签内容.\n\n    - prefix (a list of or a singular dash component, string or number; optional):\n        组件型，前缀内嵌内容.\n\n    - suffix (a list of or a singular dash component, string or number; optional):\n        组件型，后缀内嵌内容.\n\n    - autoFocus (boolean; default False):\n        是否自动获取焦点 默认值：`False`.\n\n    - controls (boolean; default True):\n        是否显示增减数值按钮 默认值：`True`.\n\n    - keyboard (boolean; default True):\n        是否允许通过键盘上下方向键控制数值 默认值：`True`.\n\n    - min (number | string; optional):\n        允许输入的数值下限，默认无限制.\n\n    - max (number | string; optional):\n        允许输入的数值上限，默认无限制.\n\n    - step (number | string; optional):\n        数值增减步长.\n\n    - precision (number; optional):\n        数值精度.\n\n    - stringMode (boolean; default False):\n        是否开启字符串模式，用于在接受超高精度数值输入时不丢失精度，开启后，参数`min`、`max`、`step`、`value`、`defaultValue`均需要设置为字符型\n        默认值：`False`.\n\n    - disabled (boolean; default False):\n        是否禁用当前组件 默认值：`False`.\n\n    - size (a value equal to: 'small', 'middle', 'large'; default 'middle'):\n        当前组件尺寸规格，可选项有`'small'`、`'middle'`、`'large'` 默认值：`'middle'`.\n\n    - bordered (boolean; default True):\n        是否显示边框，设置为`True`时等价于`variant='outlined'` 默认值：`True`.\n\n    - variant (a value equal to: 'outlined', 'borderless', 'filled', 'underlined'; optional):\n        形态变体类型，可选项有`'outlined'`、`'borderless'`、`'filled'`、`'underlined'`，其中`'outlined'`等价于`bordered=True`，但优先级更高.\n\n    - placeholder (string; optional):\n        输入框占位文字内容.\n\n    - value (number | string; optional):\n        监听或设置已输入值.\n\n    - defaultValue (number | string; optional):\n        初始化已输入值.\n\n    - debounceValue (number | string; optional):\n        监听防抖版本的已输入值.\n\n    - debounceWait (number; default 0):\n        防抖延时时长，单位：毫秒 默认值：`0`.\n\n    - nSubmit (number; default 0):\n        监听输入框聚焦状态下，键盘enter键累计点按次数 默认值：`0`.\n\n    - status (a value equal to: 'error', 'warning'; optional):\n        控制校验状态，可选项有`'error'`、`'warning'`.\n\n    - readOnly (boolean; optional):\n        是否渲染为只读状态 默认值：`False`.\n\n    - batchPropsNames (list of strings; optional):\n        需要纳入[批量属性监听](/batch-props-values)的若干属性名.\n\n    - batchPropsValues (dict; optional):\n        监听`batchPropsNames`中指定的若干属性值.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\n\n    - persistence (boolean | string | number; optional):\n        是否开启[属性持久化](/prop-persistence).\n\n    - persisted_props (list of a value equal to: 'value's; default ['value']):\n        开启属性持久化功能的若干属性名，可选项有`'md5Value'` 默认值：`['md5Value']`.\n\n    - persistence_type (a value equal to: 'local', 'session', 'memory'; default 'local'):\n        属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n        默认值：`'local'`.\"\"\"\n\n    _children_props: typing.List[str] = ['addonBefore', 'addonAfter', 'prefix', 'suffix']\n    _base_nodes = ['addonBefore', 'addonAfter', 'prefix', 'suffix', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdInputNumber'\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        name: typing.Optional[str] = None,\n        enableBatchControl: typing.Optional[bool] = None,\n        addonBefore: typing.Optional[ComponentType] = None,\n        addonAfter: typing.Optional[ComponentType] = None,\n        prefix: typing.Optional[ComponentType] = None,\n        suffix: typing.Optional[ComponentType] = None,\n        autoFocus: typing.Optional[bool] = None,\n        controls: typing.Optional[bool] = None,\n        keyboard: typing.Optional[bool] = None,\n        min: typing.Optional[typing.Union[NumberType, str]] = None,\n        max: typing.Optional[typing.Union[NumberType, str]] = None,\n        step: typing.Optional[typing.Union[NumberType, str]] = None,\n        precision: typing.Optional[NumberType] = None,\n        stringMode: typing.Optional[bool] = None,\n        disabled: typing.Optional[bool] = None,\n        size: typing.Optional[Literal['small', 'middle', 'large']] = None,\n        bordered: typing.Optional[bool] = None,\n        variant: typing.Optional[Literal['outlined', 'borderless', 'filled', 'underlined']] = None,\n        placeholder: typing.Optional[str] = None,\n        value: typing.Optional[typing.Union[NumberType, str]] = None,\n        defaultValue: typing.Optional[typing.Union[NumberType, str]] = None,\n        debounceValue: typing.Optional[typing.Union[NumberType, str]] = None,\n        debounceWait: typing.Optional[NumberType] = None,\n        nSubmit: typing.Optional[NumberType] = None,\n        status: typing.Optional[Literal['error', 'warning']] = None,\n        readOnly: typing.Optional[bool] = None,\n        batchPropsNames: typing.Optional[typing.Sequence[str]] = None,\n        batchPropsValues: typing.Optional[dict] = None,\n        persistence: typing.Optional[typing.Union[bool, str, NumberType]] = None,\n        persisted_props: typing.Optional[typing.Sequence[Literal['value']]] = None,\n        persistence_type: typing.Optional[Literal['local', 'session', 'memory']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'name',\n            'enableBatchControl',\n            'addonBefore',\n            'addonAfter',\n            'prefix',\n            'suffix',\n            'autoFocus',\n            'controls',\n            'keyboard',\n            'min',\n            'max',\n            'step',\n            'precision',\n            'stringMode',\n            'disabled',\n            'size',\n            'bordered',\n            'variant',\n            'placeholder',\n            'value',\n            'defaultValue',\n            'debounceValue',\n            'debounceWait',\n            'nSubmit',\n            'status',\n            'readOnly',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'name',\n            'enableBatchControl',\n            'addonBefore',\n            'addonAfter',\n            'prefix',\n            'suffix',\n            'autoFocus',\n            'controls',\n            'keyboard',\n            'min',\n            'max',\n            'step',\n            'precision',\n            'stringMode',\n            'disabled',\n            'size',\n            'bordered',\n            'variant',\n            'placeholder',\n            'value',\n            'defaultValue',\n            'debounceValue',\n            'debounceWait',\n            'nSubmit',\n            'status',\n            'readOnly',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdInputNumber, self).__init__(**args)\n\n\nsetattr(AntdInputNumber, '__init__', _explicitize_args(AntdInputNumber.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdLayout.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdLayout(Component):\n    \"\"\"An AntdLayout component.\n    布局容器组件AntdLayout\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，内嵌元素.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = []\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdLayout'\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        **kwargs,\n    ):\n        self._prop_names = ['id', 'key', 'children', 'style', 'className', 'data-*', 'aria-*']\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdLayout, self).__init__(children=children, **args)\n\n\nsetattr(AntdLayout, '__init__', _explicitize_args(AntdLayout.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdMentions.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdMentions(Component):\n    \"\"\"An AntdMentions component.\n    提及组件AntdMentions\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - popupClassName (string; optional):\n        展开菜单css类名.\n\n    - name (string; optional):\n        配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值.\n\n    - enableBatchControl (boolean; default True):\n        控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能 默认值：`True`.\n\n    - autoSize (dict; default False):\n        配置输入框高度自适应相关功能 默认值：`False`.\n\n        `autoSize` is a boolean | dict with keys:\n\n        - minRows (number; optional):\n            输入框最小行数.\n\n        - maxRows (number; optional):\n            输入框最大行数.\n\n    - prefix (string; default '@'):\n        触发选择菜单展开的关键字 默认值：`'@'`.\n\n    - value (string; optional):\n        监听或设置已输入值.\n\n    - defaultValue (string; optional):\n        初始化已输入值.\n\n    - options (list of dicts; required):\n        必填，配置选择菜单子项.\n\n        `options` is a list of dicts with keys:\n\n        - label (a list of or a singular dash component, string or number; optional):\n            组件型，当前选项标签内容.\n\n        - value (string; optional):\n            当前选项值.\n\n    - selectedOptions (list of strings; optional):\n        监听输入内容中对应的已选子项值.\n\n    - disabled (boolean; default False):\n        是否禁用当前组件 默认值：`False`.\n\n    - placement (a value equal to: 'top', 'bottom'; default 'bottom'):\n        选择菜单弹出方向，可选项有`'top'`、`'bottom'` 默认值：`'bottom'`.\n\n    - bordered (boolean; default True):\n        是否显示边框，设置为`True`时等价于`variant='outlined'` 默认值：`True`.\n\n    - variant (a value equal to: 'outlined', 'borderless', 'filled', 'underlined'; optional):\n        形态变体类型，可选项有`'outlined'`、`'borderless'`、`'filled'`、`'underlined'`，其中`'outlined'`等价于`bordered=True`，但优先级更高.\n\n    - placeholder (string; optional):\n        输入框占位文字内容.\n\n    - status (a value equal to: 'error', 'warning'; optional):\n        控制校验状态，可选项有`'error'`、`'warning'`.\n\n    - autoFocus (boolean; default False):\n        是否自动获取焦点 默认值：`False`.\n\n    - popupContainer (a value equal to: 'parent', 'body'; optional):\n        相关展开层锚定策略，可选项有`'parent'`、`'body'` 默认值：`'body'`.\n\n    - batchPropsNames (list of strings; optional):\n        需要纳入[批量属性监听](/batch-props-values)的若干属性名.\n\n    - batchPropsValues (dict; optional):\n        监听`batchPropsNames`中指定的若干属性值.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = ['options[].label']\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdMentions'\n    AutoSize = TypedDict(\n        'AutoSize', {'minRows': NotRequired[NumberType], 'maxRows': NotRequired[NumberType]}\n    )\n\n    Options = TypedDict('Options', {'label': NotRequired[ComponentType], 'value': NotRequired[str]})\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        popupClassName: typing.Optional[str] = None,\n        name: typing.Optional[str] = None,\n        enableBatchControl: typing.Optional[bool] = None,\n        autoSize: typing.Optional[typing.Union[bool, 'AutoSize']] = None,\n        prefix: typing.Optional[str] = None,\n        value: typing.Optional[str] = None,\n        defaultValue: typing.Optional[str] = None,\n        options: typing.Optional[typing.Sequence['Options']] = None,\n        selectedOptions: typing.Optional[typing.Sequence[str]] = None,\n        disabled: typing.Optional[bool] = None,\n        placement: typing.Optional[Literal['top', 'bottom']] = None,\n        bordered: typing.Optional[bool] = None,\n        variant: typing.Optional[Literal['outlined', 'borderless', 'filled', 'underlined']] = None,\n        placeholder: typing.Optional[str] = None,\n        status: typing.Optional[Literal['error', 'warning']] = None,\n        autoFocus: typing.Optional[bool] = None,\n        popupContainer: typing.Optional[Literal['parent', 'body']] = None,\n        batchPropsNames: typing.Optional[typing.Sequence[str]] = None,\n        batchPropsValues: typing.Optional[dict] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'popupClassName',\n            'name',\n            'enableBatchControl',\n            'autoSize',\n            'prefix',\n            'value',\n            'defaultValue',\n            'options',\n            'selectedOptions',\n            'disabled',\n            'placement',\n            'bordered',\n            'variant',\n            'placeholder',\n            'status',\n            'autoFocus',\n            'popupContainer',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'popupClassName',\n            'name',\n            'enableBatchControl',\n            'autoSize',\n            'prefix',\n            'value',\n            'defaultValue',\n            'options',\n            'selectedOptions',\n            'disabled',\n            'placement',\n            'bordered',\n            'variant',\n            'placeholder',\n            'status',\n            'autoFocus',\n            'popupContainer',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        for k in ['options']:\n            if k not in args:\n                raise TypeError('Required argument `' + k + '` was not specified.')\n\n        super(AntdMentions, self).__init__(**args)\n\n\nsetattr(AntdMentions, '__init__', _explicitize_args(AntdMentions.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdMenu.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdMenu(Component):\n    \"\"\"An AntdMenu component.\n    导航菜单组件AntdMenu\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - expandIcon (dict; optional):\n        自定义展开图标，建议仅在`mode='inline'`时使用字典类型.\n\n        `expandIcon` is a a list of or a singular dash component, string\n        or number | dict with keys:\n\n        - expand (a list of or a singular dash component, string or number; optional):\n            展开图标.\n\n        - collapse (a list of or a singular dash component, string or number; optional):\n            收起图标.\n\n    - menuItems (list; optional):\n        导航菜单数据结构.\n\n    - menuItemKeyToTitle (dict with strings as keys and values of type a list of or a singular dash component, string or number; optional):\n        为指定节点定义组件型菜单项标题，优先级高于menuItems中对应节点的title属性.\n\n    - menuItemKeyToIcon (dict with strings as keys and values of type a list of or a singular dash component, string or number; optional):\n        为指定节点定义组件型菜单项图标元素，优先级高于menuItems中对应节点的icon属性.\n\n    - mode (a value equal to: 'vertical', 'horizontal', 'inline'; default 'vertical'):\n        显示模式，可选项有`'vertical'`、`'horizontal'`、`'inline'` 默认值：`'vertical'`.\n\n    - theme (a value equal to: 'light', 'dark'; default 'light'):\n        主题，可选项有`'light'`、`'dark'` 默认值：`'light'`.\n\n    - currentKey (string; optional):\n        监听或设置当前已选中菜单项key值.\n\n    - currentItem (dict; optional):\n        监听当前已选中菜单项信息.\n\n    - currentKeyPath (list; optional):\n        监听当前已选中菜单项key值路径信息.\n\n    - currentItemPath (list; optional):\n        监听当前已选中菜单项路径信息.\n\n    - openKeys (list of strings; optional):\n        监听或设置当前已展开子菜单项key值.\n\n    - onlyExpandCurrentSubMenu (boolean; default False):\n        是否只展开当前选中项的父级菜单 默认值：`False`.\n\n    - defaultOpenKeys (list of strings; optional):\n        默认展开的菜单项key值.\n\n    - defaultSelectedKey (string; optional)\n\n    - renderCollapsedButton (boolean; default False):\n        是否渲染菜单折叠状态控制按钮 默认值：`False`.\n\n    - popupContainer (a value equal to: 'parent', 'body'; default 'body'):\n        菜单展开层锚定策略，可选项有`'parent'`、`'body'` 默认值：`'body'`.\n\n    - inlineCollapsed (boolean; optional):\n        当前菜单是否折叠，仅inline模式下有效 默认值：`False`.\n\n    - inlineIndent (number; default 24):\n        inline模式下，子菜单相对上一级的像素缩进宽度 默认值：`24`.\n\n    - triggerSubMenuAction (a value equal to: 'hover', 'click'; default 'hover'):\n        `SubMenu`展开/关闭的触发行为，可选项有`'hover'`、`'click'`，`mode='inline'`下无效\n        默认值：`'hover'`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\n\n    - persistence (boolean | string | number; optional):\n        是否为当前组件开启持久化功能.\n\n    - persisted_props (list of a value equal to: 'currentKey', 'openKeys's; optional):\n        当前组件启用持久化的属性值数组，可选项有`'currentKey'`、`'openKeys'`\n        默认值：`['currentKey', 'openKeys']`.\n\n    - persistence_type (a value equal to: 'local', 'session', 'memory'; optional):\n        当前组件的属性持久化存储类型 默认值：`'local'`.\"\"\"\n\n    _children_props: typing.List[str] = [\n        'expandIcon',\n        'expandIcon.expand',\n        'expandIcon.collapse',\n        'menuItemKeyToTitle{}',\n        'menuItemKeyToIcon{}',\n    ]\n    _base_nodes = ['expandIcon', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdMenu'\n    ExpandIcon = TypedDict(\n        'ExpandIcon', {'expand': NotRequired[ComponentType], 'collapse': NotRequired[ComponentType]}\n    )\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        expandIcon: typing.Optional[typing.Union[ComponentType, 'ExpandIcon']] = None,\n        menuItems: typing.Optional[typing.Sequence] = None,\n        menuItemKeyToTitle: typing.Optional[\n            typing.Dict[typing.Union[str, float, int], ComponentType]\n        ] = None,\n        menuItemKeyToIcon: typing.Optional[\n            typing.Dict[typing.Union[str, float, int], ComponentType]\n        ] = None,\n        mode: typing.Optional[Literal['vertical', 'horizontal', 'inline']] = None,\n        theme: typing.Optional[Literal['light', 'dark']] = None,\n        currentKey: typing.Optional[str] = None,\n        currentItem: typing.Optional[dict] = None,\n        currentKeyPath: typing.Optional[typing.Sequence] = None,\n        currentItemPath: typing.Optional[typing.Sequence] = None,\n        openKeys: typing.Optional[typing.Sequence[str]] = None,\n        onlyExpandCurrentSubMenu: typing.Optional[bool] = None,\n        defaultOpenKeys: typing.Optional[typing.Sequence[str]] = None,\n        defaultSelectedKey: typing.Optional[str] = None,\n        renderCollapsedButton: typing.Optional[bool] = None,\n        popupContainer: typing.Optional[Literal['parent', 'body']] = None,\n        inlineCollapsed: typing.Optional[bool] = None,\n        inlineIndent: typing.Optional[NumberType] = None,\n        triggerSubMenuAction: typing.Optional[Literal['hover', 'click']] = None,\n        persistence: typing.Optional[typing.Union[bool, str, NumberType]] = None,\n        persisted_props: typing.Optional[typing.Sequence[Literal['currentKey', 'openKeys']]] = None,\n        persistence_type: typing.Optional[Literal['local', 'session', 'memory']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'expandIcon',\n            'menuItems',\n            'menuItemKeyToTitle',\n            'menuItemKeyToIcon',\n            'mode',\n            'theme',\n            'currentKey',\n            'currentItem',\n            'currentKeyPath',\n            'currentItemPath',\n            'openKeys',\n            'onlyExpandCurrentSubMenu',\n            'defaultOpenKeys',\n            'defaultSelectedKey',\n            'renderCollapsedButton',\n            'popupContainer',\n            'inlineCollapsed',\n            'inlineIndent',\n            'triggerSubMenuAction',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'expandIcon',\n            'menuItems',\n            'menuItemKeyToTitle',\n            'menuItemKeyToIcon',\n            'mode',\n            'theme',\n            'currentKey',\n            'currentItem',\n            'currentKeyPath',\n            'currentItemPath',\n            'openKeys',\n            'onlyExpandCurrentSubMenu',\n            'defaultOpenKeys',\n            'defaultSelectedKey',\n            'renderCollapsedButton',\n            'popupContainer',\n            'inlineCollapsed',\n            'inlineIndent',\n            'triggerSubMenuAction',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdMenu, self).__init__(**args)\n\n\nsetattr(AntdMenu, '__init__', _explicitize_args(AntdMenu.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdMessage.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdMessage(Component):\n    \"\"\"An AntdMessage component.\n    全局提示组件AntdMessage\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string; optional):\n        当前组件css类名.\n\n    - content (string; optional):\n        提示信息内容.\n\n    - type (a value equal to: 'default', 'success', 'error', 'info', 'warning'; default 'default'):\n        提示信息类型，可选项有`'default'`、`'success'`、`'error'`、`'info'`、`'warning'`\n        默认值：'default'.\n\n    - duration (number; default 3):\n        提示信息自动消失对应的延时，单位：秒，设置为`0`时不会自动消失 默认值：`3`.\n\n    - top (number; default 8):\n        提示信息距离顶端的像素距离 默认值：`8`.\n\n    - maxCount (number; optional):\n        最多允许同时出现的提示信息数量.\n\n    - icon (string; optional):\n        自定义前缀图标，同`AntdIcon`的`icon`参数.\n\n    - iconRenderer (a value equal to: 'AntdIcon', 'fontawesome'; default 'AntdIcon'):\n        自定义前缀图标渲染方式，可选项有`'AntdIcon'`、`'fontawesome'`.\"\"\"\n\n    _children_props: typing.List[str] = []\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdMessage'\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[str] = None,\n        content: typing.Optional[str] = None,\n        type: typing.Optional[Literal['default', 'success', 'error', 'info', 'warning']] = None,\n        duration: typing.Optional[NumberType] = None,\n        top: typing.Optional[NumberType] = None,\n        maxCount: typing.Optional[NumberType] = None,\n        icon: typing.Optional[str] = None,\n        iconRenderer: typing.Optional[Literal['AntdIcon', 'fontawesome']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'content',\n            'type',\n            'duration',\n            'top',\n            'maxCount',\n            'icon',\n            'iconRenderer',\n        ]\n        self._valid_wildcard_attributes = []\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'content',\n            'type',\n            'duration',\n            'top',\n            'maxCount',\n            'icon',\n            'iconRenderer',\n        ]\n        self.available_wildcard_properties = []\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdMessage, self).__init__(**args)\n\n\nsetattr(AntdMessage, '__init__', _explicitize_args(AntdMessage.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdModal.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdModal(Component):\n    \"\"\"An AntdModal component.\n    对话框组件AntdModal\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，内嵌元素.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - styles (dict; optional):\n        细分控制子元素css样式.\n\n        `styles` is a dict with keys:\n\n        - mask (dict; optional):\n            遮罩层元素css样式.\n\n        - content (dict; optional):\n            容器元素css样式.\n\n        - wrapper (dict; optional):\n            包裹层元素css样式.\n\n        - header (dict; optional):\n            头部元素css样式.\n\n        - body (dict; optional):\n            内容元素css样式.\n\n        - footer (dict; optional):\n            底部元素css样式.\n\n    - classNames (dict; optional):\n        细分控制子元素css类名.\n\n        `classNames` is a dict with keys:\n\n        - mask (string; optional):\n            遮罩层元素css类名.\n\n        - content (string; optional):\n            容器元素css类名.\n\n        - wrapper (string; optional):\n            包裹层元素css类名.\n\n        - header (string; optional):\n            头部元素css类名.\n\n        - body (string; optional):\n            内容元素css类名.\n\n        - footer (string; optional):\n            底部元素css类名.\n\n    - locale (a value equal to: 'zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr'; default 'zh-cn'):\n        组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n        默认值：`'zh-cn'`.\n\n    - visible (boolean; default False):\n        监听或设置对话框是否可见 默认值：`False`.\n\n    - title (a list of or a singular dash component, string or number; optional):\n        组件型，标题内容.\n\n    - loadingTitle (a list of or a singular dash component, string or number; optional):\n        组件型，loading状态下的标题内容.\n\n    - renderFooter (boolean; default False):\n        是否渲染底部操作按钮 默认值：`False`.\n\n    - okText (a list of or a singular dash component, string or number; optional):\n        组件型，确认按钮内容.\n\n    - okButtonProps (dict; optional):\n        配置确认按钮相关参数.\n\n        `okButtonProps` is a dict with keys:\n\n        - size (a value equal to: 'small', 'middle', 'large'; optional):\n            按钮尺寸规格，可选项有`'small'`、`'middle'`、`'large'` 默认值：`'middle'`.\n\n        - type (a value equal to: 'primary', 'ghost', 'dashed', 'link', 'text', 'default'; optional):\n            按钮类型，可选项有`'default'`、`'primary'`、`'ghost'`、`'dashed'`、`'link'`、`'text'`\n            默认值：`'default'`.\n\n        - danger (boolean; optional):\n            按钮是否呈现危险样式 默认值：`False`.\n\n        - disabled (boolean; optional):\n            按钮是否呈现禁用状态 默认值：`False`.\n\n        - shape (a value equal to: 'circle', 'round'; optional):\n            按钮形状，可选项有`'default'`、`'circle'`、`'round'` 默认值：`'default'`.\n\n        - style (dict; optional):\n            按钮css样式.\n\n        - className (string; optional):\n            按钮css类名.\n\n    - cancelText (a list of or a singular dash component, string or number; optional):\n        组件型，取消按钮内容.\n\n    - cancelButtonProps (dict; optional):\n        配置取消按钮相关参数.\n\n        `cancelButtonProps` is a dict with keys:\n\n        - size (a value equal to: 'small', 'middle', 'large'; optional):\n            按钮尺寸规格，可选项有`'small'`、`'middle'`、`'large'` 默认值：`'middle'`.\n\n        - type (a value equal to: 'primary', 'ghost', 'dashed', 'link', 'text', 'default'; optional):\n            按钮类型，可选项有`'default'`、`'primary'`、`'ghost'`、`'dashed'`、`'link'`、`'text'`\n            默认值：`'default'`.\n\n        - danger (boolean; optional):\n            按钮是否呈现危险样式 默认值：`False`.\n\n        - disabled (boolean; optional):\n            按钮是否呈现禁用状态 默认值：`False`.\n\n        - shape (a value equal to: 'circle', 'round'; optional):\n            按钮形状，可选项有`'default'`、`'circle'`、`'round'` 默认值：`'default'`.\n\n        - style (dict; optional):\n            按钮css样式.\n\n        - className (string; optional):\n            按钮css类名.\n\n    - width (dict; default 520):\n        对话框像素宽度 默认值：`520`.\n\n        `width` is a number | string | dict with keys:\n\n        - xs (number | string; optional):\n            对应页面宽度<576px的响应式断点.\n\n        - sm (number | string; optional):\n            对应页面宽度≥576px的响应式断点.\n\n        - md (number | string; optional):\n            对应页面宽度≥768px的响应式断点.\n\n        - lg (number | string; optional):\n            对应页面宽度≥992px的响应式断点.\n\n        - xl (number | string; optional):\n            对应页面宽度≥1200px的响应式断点.\n\n        - xxl (number | string; optional):\n            对应页面宽度≥1600px的响应式断点.\n\n    - centered (boolean; default False):\n        是否垂直居中显示对话框 默认值：`False`.\n\n    - keyboard (boolean; default True):\n        是否支持键盘esc关闭对话框 默认值：`True`.\n\n    - closable (boolean; default True):\n        是否显示右上角的关闭按钮 默认值：`True`.\n\n    - mask (boolean; default True):\n        是否显示背景遮罩 默认值：`True`.\n\n    - maskClosable (boolean; default True):\n        是否允许点击遮罩层关闭对话框 默认值：`True`.\n\n    - okClickClose (boolean; default True):\n        是否点击确认按钮触发对话框关闭 默认值：`True`.\n\n    - preventClose (boolean; default False):\n        是否阻止通过点击关闭图标、点击遮罩层区域、点击取消、按下ESC等方式自动触发的对话框关闭行为 默认值：`False`.\n\n    - zIndex (number; default 1000):\n        模态框z-index 默认值：`1000`.\n\n    - okCounts (number; default 0):\n        监听确认按钮累计点击次数 默认值：`0`.\n\n    - cancelCounts (number; default 0):\n        监听取消按钮累计点击次数 默认值：`0`.\n\n    - closeCounts (number; default 0):\n        监听关闭按钮累计点击次数 默认值：`0`.\n\n    - confirmAutoSpin (boolean; default False):\n        是否在每次确认按钮点击之后，自动更新`confirmLoading=True` 默认值：`False`.\n\n    - loadingOkText (a list of or a singular dash component, string or number; optional):\n        组件型，`confirmLoading=True`时，确认按钮的内容.\n\n    - confirmLoading (boolean; default False):\n        底部确认按钮是否处于加载中状态 默认值：`False`.\n\n    - transitionType (a value equal to: 'none', 'fade', 'zoom', 'zoom-big', 'zoom-big-fast', 'slide-up', 'slide-down', 'slide-left', 'slide-right', 'move-up', 'move-down', 'move-left', 'move-right'; default 'zoom'):\n        模态框显隐动画类型，可选项有`'none'`、`'fade'`、`'zoom'`、`'zoom-big'`、`'zoom-big-fast'`、`'slide-up'`、`'slide-down'`、`'slide-left'`、`'slide-right'`、`'move-up'`、`'move-down'`、`'move-left'`、`'move-right'`\n        默认值：`'zoom'`.\n\n    - forceRender (boolean; default False):\n        是否在初始化模态框未显示时，强制渲染模态框内部元素 默认值：`False`.\n\n    - destroyOnClose (boolean; default True):\n        是否在模态框关闭后自动销毁内部元素 默认值：`True`.\n\n    - loading (boolean; default False):\n        是否整体渲染为加载中状态 默认值：`False`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = [\n        'title',\n        'loadingTitle',\n        'okText',\n        'cancelText',\n        'loadingOkText',\n    ]\n    _base_nodes = ['title', 'loadingTitle', 'okText', 'cancelText', 'loadingOkText', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdModal'\n    Styles = TypedDict(\n        'Styles',\n        {\n            'mask': NotRequired[dict],\n            'content': NotRequired[dict],\n            'wrapper': NotRequired[dict],\n            'header': NotRequired[dict],\n            'body': NotRequired[dict],\n            'footer': NotRequired[dict],\n        },\n    )\n\n    ClassNames = TypedDict(\n        'ClassNames',\n        {\n            'mask': NotRequired[str],\n            'content': NotRequired[str],\n            'wrapper': NotRequired[str],\n            'header': NotRequired[str],\n            'body': NotRequired[str],\n            'footer': NotRequired[str],\n        },\n    )\n\n    OkButtonProps = TypedDict(\n        'OkButtonProps',\n        {\n            'size': NotRequired[Literal['small', 'middle', 'large']],\n            'type': NotRequired[Literal['primary', 'ghost', 'dashed', 'link', 'text', 'default']],\n            'danger': NotRequired[bool],\n            'disabled': NotRequired[bool],\n            'shape': NotRequired[Literal['circle', 'round']],\n            'style': NotRequired[dict],\n            'className': NotRequired[str],\n        },\n    )\n\n    CancelButtonProps = TypedDict(\n        'CancelButtonProps',\n        {\n            'size': NotRequired[Literal['small', 'middle', 'large']],\n            'type': NotRequired[Literal['primary', 'ghost', 'dashed', 'link', 'text', 'default']],\n            'danger': NotRequired[bool],\n            'disabled': NotRequired[bool],\n            'shape': NotRequired[Literal['circle', 'round']],\n            'style': NotRequired[dict],\n            'className': NotRequired[str],\n        },\n    )\n\n    Width = TypedDict(\n        'Width',\n        {\n            'xs': NotRequired[typing.Union[NumberType, str]],\n            'sm': NotRequired[typing.Union[NumberType, str]],\n            'md': NotRequired[typing.Union[NumberType, str]],\n            'lg': NotRequired[typing.Union[NumberType, str]],\n            'xl': NotRequired[typing.Union[NumberType, str]],\n            'xxl': NotRequired[typing.Union[NumberType, str]],\n        },\n    )\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        styles: typing.Optional['Styles'] = None,\n        classNames: typing.Optional['ClassNames'] = None,\n        locale: typing.Optional[Literal['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']] = None,\n        visible: typing.Optional[bool] = None,\n        title: typing.Optional[ComponentType] = None,\n        loadingTitle: typing.Optional[ComponentType] = None,\n        renderFooter: typing.Optional[bool] = None,\n        okText: typing.Optional[ComponentType] = None,\n        okButtonProps: typing.Optional['OkButtonProps'] = None,\n        cancelText: typing.Optional[ComponentType] = None,\n        cancelButtonProps: typing.Optional['CancelButtonProps'] = None,\n        width: typing.Optional[typing.Union[NumberType, str, 'Width']] = None,\n        centered: typing.Optional[bool] = None,\n        keyboard: typing.Optional[bool] = None,\n        closable: typing.Optional[bool] = None,\n        mask: typing.Optional[bool] = None,\n        maskClosable: typing.Optional[bool] = None,\n        okClickClose: typing.Optional[bool] = None,\n        preventClose: typing.Optional[bool] = None,\n        zIndex: typing.Optional[NumberType] = None,\n        okCounts: typing.Optional[NumberType] = None,\n        cancelCounts: typing.Optional[NumberType] = None,\n        closeCounts: typing.Optional[NumberType] = None,\n        confirmAutoSpin: typing.Optional[bool] = None,\n        loadingOkText: typing.Optional[ComponentType] = None,\n        confirmLoading: typing.Optional[bool] = None,\n        transitionType: typing.Optional[\n            Literal[\n                'none',\n                'fade',\n                'zoom',\n                'zoom-big',\n                'zoom-big-fast',\n                'slide-up',\n                'slide-down',\n                'slide-left',\n                'slide-right',\n                'move-up',\n                'move-down',\n                'move-left',\n                'move-right',\n            ]\n        ] = None,\n        forceRender: typing.Optional[bool] = None,\n        destroyOnClose: typing.Optional[bool] = None,\n        loading: typing.Optional[bool] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'styles',\n            'classNames',\n            'locale',\n            'visible',\n            'title',\n            'loadingTitle',\n            'renderFooter',\n            'okText',\n            'okButtonProps',\n            'cancelText',\n            'cancelButtonProps',\n            'width',\n            'centered',\n            'keyboard',\n            'closable',\n            'mask',\n            'maskClosable',\n            'okClickClose',\n            'preventClose',\n            'zIndex',\n            'okCounts',\n            'cancelCounts',\n            'closeCounts',\n            'confirmAutoSpin',\n            'loadingOkText',\n            'confirmLoading',\n            'transitionType',\n            'forceRender',\n            'destroyOnClose',\n            'loading',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'styles',\n            'classNames',\n            'locale',\n            'visible',\n            'title',\n            'loadingTitle',\n            'renderFooter',\n            'okText',\n            'okButtonProps',\n            'cancelText',\n            'cancelButtonProps',\n            'width',\n            'centered',\n            'keyboard',\n            'closable',\n            'mask',\n            'maskClosable',\n            'okClickClose',\n            'preventClose',\n            'zIndex',\n            'okCounts',\n            'cancelCounts',\n            'closeCounts',\n            'confirmAutoSpin',\n            'loadingOkText',\n            'confirmLoading',\n            'transitionType',\n            'forceRender',\n            'destroyOnClose',\n            'loading',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdModal, self).__init__(children=children, **args)\n\n\nsetattr(AntdModal, '__init__', _explicitize_args(AntdModal.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdNotification.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdNotification(Component):\n    \"\"\"An AntdNotification component.\n    通知提醒框组件AntdNotification\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - message (a list of or a singular dash component, string or number; optional):\n        通知提醒主要信息.\n\n    - description (a list of or a singular dash component, string or number; optional):\n        通知提醒描述信息.\n\n    - type (a value equal to: 'default', 'success', 'error', 'info', 'warning'; default 'default'):\n        通知提醒类型，可选项有`'default'`、`'success'`、`'error'`、`'info'`、`'warning'`\n        默认值：`'default'`.\n\n    - placement (a value equal to: 'top', 'bottom', 'topLeft', 'topRight', 'bottomLeft', 'bottomRight'; default 'topRight'):\n        通知提醒框在屏幕中的弹出位置，可选项有`'top'`、`'bottom'`、`'topLeft'`、`'topRight'`、`'bottomLeft'`、`'bottomRight'`\n        默认值：`'topRight'`.\n\n    - top (number; default 24):\n        当通知从顶部弹出时，设置距离顶部的像素距离 默认值：`24`.\n\n    - bottom (number; default 24):\n        当通知从底部弹出时，设置距离底部的像素距离 默认值：`24`.\n\n    - duration (number; default 4.5):\n        通知从显示到自动消失的时长，单位：秒，当传入`None`时会一直显示 默认值：`4.5`.\n\n    - showProgress (boolean; default False):\n        是否显示自动关闭进度条 默认值：`False`.\n\n    - pauseOnHover (boolean; default True):\n        `showProgress=True`时，是否在鼠标移入时暂停进度条倒计时 默认值：`True`.\n\n    - closable (boolean; default True):\n        是否显示关闭按钮 默认值：`True`.\n\n    - closeButton (dict; optional):\n        配置右下方关闭按钮相关参数，默认不显示关闭按钮.\n\n        `closeButton` is a dict with keys:\n\n        - content (string; optional):\n            按钮内容.\n\n        - style (dict; optional):\n            按钮css样式.\n\n        - className (string; optional):\n            按钮css类名.\n\n        - type (a value equal to: 'default', 'primary', 'ghost', 'dashed', 'link', 'text'; optional):\n            按钮类型，可选项有`'default'`、`'primary'`、`'ghost'`、`'dashed'`、`'link'`、`'text'`\n            默认值：`'default'`.\n\n        - danger (boolean; optional):\n            按钮是否呈现危险状态 默认值：`False`.\n\n    - stack (dict; default False):\n        是否开启多通知自动折叠堆叠功能 默认值：`False`.\n\n        `stack` is a boolean | dict with keys:\n\n        - threshold (number; optional)\"\"\"\n\n    _children_props: typing.List[str] = ['message', 'description']\n    _base_nodes = ['message', 'description', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdNotification'\n    CloseButton = TypedDict(\n        'CloseButton',\n        {\n            'content': NotRequired[str],\n            'style': NotRequired[dict],\n            'className': NotRequired[str],\n            'type': NotRequired[Literal['default', 'primary', 'ghost', 'dashed', 'link', 'text']],\n            'danger': NotRequired[bool],\n        },\n    )\n\n    Stack = TypedDict('Stack', {'threshold': NotRequired[NumberType]})\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        message: typing.Optional[ComponentType] = None,\n        description: typing.Optional[ComponentType] = None,\n        type: typing.Optional[Literal['default', 'success', 'error', 'info', 'warning']] = None,\n        placement: typing.Optional[\n            Literal['top', 'bottom', 'topLeft', 'topRight', 'bottomLeft', 'bottomRight']\n        ] = None,\n        top: typing.Optional[NumberType] = None,\n        bottom: typing.Optional[NumberType] = None,\n        duration: typing.Optional[NumberType] = None,\n        showProgress: typing.Optional[bool] = None,\n        pauseOnHover: typing.Optional[bool] = None,\n        closable: typing.Optional[bool] = None,\n        closeButton: typing.Optional['CloseButton'] = None,\n        stack: typing.Optional[typing.Union[bool, 'Stack']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'message',\n            'description',\n            'type',\n            'placement',\n            'top',\n            'bottom',\n            'duration',\n            'showProgress',\n            'pauseOnHover',\n            'closable',\n            'closeButton',\n            'stack',\n        ]\n        self._valid_wildcard_attributes = []\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'message',\n            'description',\n            'type',\n            'placement',\n            'top',\n            'bottom',\n            'duration',\n            'showProgress',\n            'pauseOnHover',\n            'closable',\n            'closeButton',\n            'stack',\n        ]\n        self.available_wildcard_properties = []\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdNotification, self).__init__(**args)\n\n\nsetattr(AntdNotification, '__init__', _explicitize_args(AntdNotification.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdOTP.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdOTP(Component):\n    \"\"\"An AntdOTP component.\n    一次性密码框组件AntdOTP\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - name (string; optional):\n        配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值.\n\n    - enableBatchControl (boolean; default True):\n        控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能 默认值：`True`.\n\n    - value (string; optional):\n        监听或设置已选值.\n\n    - defaultValue (string; optional):\n        初始化已选值.\n\n    - disabled (boolean; default False):\n        是否禁用当前组件 默认值：`False`.\n\n    - length (number; default 6):\n        单体输入框数量 默认值：`6`.\n\n    - mask (boolean | string; default False):\n        自定义遮罩字符 默认值：`False`.\n\n    - status (a value equal to: 'error', 'warning'; optional):\n        控制校验状态，可选项有`'error'`、`'warning'`.\n\n    - size (a value equal to: 'small', 'middle', 'large'; default 'middle'):\n        当前组件尺寸规格，可选项有`'small'`、`'middle'`、`'large'` 默认值：`'middle'`.\n\n    - variant (a value equal to: 'outlined', 'borderless', 'filled', 'underlined'; default 'outlined'):\n        形态变体类型，可选项有`'outlined'`、`'borderless'`、`'filled'`、`'underlined'`，其中`'outlined'`等价于`bordered=True`，但优先级更高.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\n\n    - persistence (boolean | string | number; optional):\n        是否开启[属性持久化](/prop-persistence).\n\n    - persisted_props (list of a value equal to: 'value's; optional):\n        开启属性持久化功能的若干属性名，可选项有`'value'` 默认值：`['value']`.\n\n    - persistence_type (a value equal to: 'local', 'session', 'memory'; optional):\n        属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n        默认值：`'local'`.\"\"\"\n\n    _children_props: typing.List[str] = []\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdOTP'\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        name: typing.Optional[str] = None,\n        enableBatchControl: typing.Optional[bool] = None,\n        value: typing.Optional[str] = None,\n        defaultValue: typing.Optional[str] = None,\n        disabled: typing.Optional[bool] = None,\n        length: typing.Optional[NumberType] = None,\n        mask: typing.Optional[typing.Union[bool, str]] = None,\n        status: typing.Optional[Literal['error', 'warning']] = None,\n        size: typing.Optional[Literal['small', 'middle', 'large']] = None,\n        variant: typing.Optional[Literal['outlined', 'borderless', 'filled', 'underlined']] = None,\n        persistence: typing.Optional[typing.Union[bool, str, NumberType]] = None,\n        persisted_props: typing.Optional[typing.Sequence[Literal['value']]] = None,\n        persistence_type: typing.Optional[Literal['local', 'session', 'memory']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'name',\n            'enableBatchControl',\n            'value',\n            'defaultValue',\n            'disabled',\n            'length',\n            'mask',\n            'status',\n            'size',\n            'variant',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'name',\n            'enableBatchControl',\n            'value',\n            'defaultValue',\n            'disabled',\n            'length',\n            'mask',\n            'status',\n            'size',\n            'variant',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdOTP, self).__init__(**args)\n\n\nsetattr(AntdOTP, '__init__', _explicitize_args(AntdOTP.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdPageHeader.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdPageHeader(Component):\n    \"\"\"An AntdPageHeader component.\n    页头组件AntdPageHeader\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，内嵌元素.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - title (a list of or a singular dash component, string or number; optional):\n        组件型，页头标题内容.\n\n    - subTitle (a list of or a singular dash component, string or number; optional):\n        组件型，页头副标题内容.\n\n    - showBackIcon (boolean; default True):\n        是否渲染返回按钮 默认值：`True`.\n\n    - historyBackDisabled (boolean; default False):\n        是否禁用点击返回按钮回退上一地址的功能 默认值：`False`.\n\n    - backClicks (number; default 0):\n        返回按钮累计点击次数，用于监听返回按钮点击行为 默认值：`0`.\n\n    - ghost (boolean; default False):\n        是否开启透明背景模式 默认值：`False`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = ['title', 'subTitle']\n    _base_nodes = ['title', 'subTitle', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdPageHeader'\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        title: typing.Optional[ComponentType] = None,\n        subTitle: typing.Optional[ComponentType] = None,\n        showBackIcon: typing.Optional[bool] = None,\n        historyBackDisabled: typing.Optional[bool] = None,\n        backClicks: typing.Optional[NumberType] = None,\n        ghost: typing.Optional[bool] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'title',\n            'subTitle',\n            'showBackIcon',\n            'historyBackDisabled',\n            'backClicks',\n            'ghost',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'title',\n            'subTitle',\n            'showBackIcon',\n            'historyBackDisabled',\n            'backClicks',\n            'ghost',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdPageHeader, self).__init__(children=children, **args)\n\n\nsetattr(AntdPageHeader, '__init__', _explicitize_args(AntdPageHeader.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdPagination.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdPagination(Component):\n    \"\"\"An AntdPagination component.\n    分页组件AntdPagination\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - locale (a value equal to: 'zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr'; default 'zh-cn'):\n        组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n        默认值：`'zh-cn'`.\n\n    - align (a value equal to: 'start', 'center', 'end'; default 'start'):\n        组件尺寸规格，可选项有`'start'`、`'center'`、`'end'` 默认值：`'start'`.\n\n    - defaultCurrent (number; default 1):\n        初始化时的当前页码 默认值：`1`.\n\n    - defaultPageSize (number; default 10):\n        初始化时的每页条数 默认值：`10`.\n\n    - current (number; optional):\n        监听或设置当前页码.\n\n    - disabled (boolean; default False):\n        是否禁用当前组件功能 默认值：`False`.\n\n    - hideOnSinglePage (boolean; default False):\n        仅有一页时是否隐藏分页器 默认值：`False`.\n\n    - pageSize (number; optional):\n        监听或设置每页条数.\n\n    - pageSizeOptions (list of numbers; optional):\n        每页条数切换可选项.\n\n    - showSizeChanger (boolean; default False):\n        是否渲染每页条数切换器 默认值：`False`.\n\n    - showQuickJumper (boolean; default False):\n        是否渲染快捷跳页控件 默认值：`False`.\n\n    - showTotalPrefix (string; optional):\n        总记录数描述前缀内容.\n\n    - showTotalSuffix (string; optional):\n        总记录数描述后缀内容.\n\n    - simple (boolean; default False):\n        是否启用简洁模式 默认值：`False`.\n\n    - size (a value equal to: 'default', 'small'; default 'default'):\n        组件尺寸规格，可选项有`'default'`、`'small'` 默认值：`'default'`.\n\n    - total (number; optional):\n        总记录数.\n\n    - showTotal (boolean; default True):\n        是否渲染总记录数描述内容 默认值：`True`.\n\n    - showLessItems (boolean; default False):\n        是否显示较少的跳页按钮 默认值：`False`.\n\n    - batchPropsNames (list of strings; optional):\n        需要纳入批属性监听的属性名 默认值：`[]`.\n\n    - batchPropsValues (dict; optional):\n        批量监听与当前batchPropsNames对应的属性值.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\n\n    - persistence (boolean | string | number; optional):\n        是否为当前组件开启持久化功能.\n\n    - persisted_props (list of a value equal to: 'current', 'pageSize's; optional):\n        当前组件启用持久化的属性值数组，可选项有`'current'`、`'pageSize'` 默认值：`['current',\n        'pageSize']`.\n\n    - persistence_type (a value equal to: 'local', 'session', 'memory'; optional):\n        当前组件的属性持久化存储类型 默认值：`'local'`.\"\"\"\n\n    _children_props: typing.List[str] = []\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdPagination'\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        locale: typing.Optional[Literal['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']] = None,\n        align: typing.Optional[Literal['start', 'center', 'end']] = None,\n        defaultCurrent: typing.Optional[NumberType] = None,\n        defaultPageSize: typing.Optional[NumberType] = None,\n        current: typing.Optional[NumberType] = None,\n        disabled: typing.Optional[bool] = None,\n        hideOnSinglePage: typing.Optional[bool] = None,\n        pageSize: typing.Optional[NumberType] = None,\n        pageSizeOptions: typing.Optional[typing.Sequence[NumberType]] = None,\n        showSizeChanger: typing.Optional[bool] = None,\n        showQuickJumper: typing.Optional[bool] = None,\n        showTotalPrefix: typing.Optional[str] = None,\n        showTotalSuffix: typing.Optional[str] = None,\n        simple: typing.Optional[bool] = None,\n        size: typing.Optional[Literal['default', 'small']] = None,\n        total: typing.Optional[NumberType] = None,\n        showTotal: typing.Optional[bool] = None,\n        showLessItems: typing.Optional[bool] = None,\n        batchPropsNames: typing.Optional[typing.Sequence[str]] = None,\n        batchPropsValues: typing.Optional[dict] = None,\n        persistence: typing.Optional[typing.Union[bool, str, NumberType]] = None,\n        persisted_props: typing.Optional[typing.Sequence[Literal['current', 'pageSize']]] = None,\n        persistence_type: typing.Optional[Literal['local', 'session', 'memory']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'locale',\n            'align',\n            'defaultCurrent',\n            'defaultPageSize',\n            'current',\n            'disabled',\n            'hideOnSinglePage',\n            'pageSize',\n            'pageSizeOptions',\n            'showSizeChanger',\n            'showQuickJumper',\n            'showTotalPrefix',\n            'showTotalSuffix',\n            'simple',\n            'size',\n            'total',\n            'showTotal',\n            'showLessItems',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'locale',\n            'align',\n            'defaultCurrent',\n            'defaultPageSize',\n            'current',\n            'disabled',\n            'hideOnSinglePage',\n            'pageSize',\n            'pageSizeOptions',\n            'showSizeChanger',\n            'showQuickJumper',\n            'showTotalPrefix',\n            'showTotalSuffix',\n            'simple',\n            'size',\n            'total',\n            'showTotal',\n            'showLessItems',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdPagination, self).__init__(**args)\n\n\nsetattr(AntdPagination, '__init__', _explicitize_args(AntdPagination.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdParagraph.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdParagraph(Component):\n    \"\"\"An AntdParagraph component.\n    段落组件AntdParagraph\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，内嵌元素.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - locale (a value equal to: 'zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr'; default 'zh-cn'):\n        组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n        默认值：`'zh-cn'`.\n\n    - code (boolean; optional):\n        是否渲染为代码形式.\n\n    - copyable (boolean; optional):\n        是否开启快捷复制功能.\n\n    - strikethrough (boolean; optional):\n        是否渲染为删除线形式.\n\n    - disabled (boolean; optional):\n        是否渲染为禁用形式.\n\n    - mark (boolean; optional):\n        是否渲染为高亮形式.\n\n    - strong (boolean; optional):\n        是否渲染为加粗形式.\n\n    - italic (boolean; optional):\n        是否渲染为斜体形式.\n\n    - underline (boolean; optional):\n        是否渲染为下划线形式.\n\n    - type (a value equal to: 'secondary', 'success', 'warning', 'danger'; optional):\n        设置内容特殊状态形式，可选项有`'secondary'`、`'success'`、`'warning'`、`'danger'`.\n\n    - ellipsis (dict; default False):\n        配置内容省略相关功能，设置为`False`则不开启 默认值：`False`.\n\n        `ellipsis` is a boolean | dict with keys:\n\n        - expandable (boolean | a value equal to: 'collapsible'; optional):\n            是否可展开.\n\n        - rows (number; optional):\n            最大显示行数.\n\n        - suffix (string; optional):\n            自定义内容省略后缀.\n\n        - symbol (a list of or a singular dash component, string or number; optional):\n            组件型，自定义内容展开控件.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = ['ellipsis.symbol']\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdParagraph'\n    Ellipsis = TypedDict(\n        'Ellipsis',\n        {\n            'expandable': NotRequired[typing.Union[bool, Literal['collapsible']]],\n            'rows': NotRequired[NumberType],\n            'suffix': NotRequired[str],\n            'symbol': NotRequired[ComponentType],\n        },\n    )\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        locale: typing.Optional[Literal['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']] = None,\n        code: typing.Optional[bool] = None,\n        copyable: typing.Optional[bool] = None,\n        strikethrough: typing.Optional[bool] = None,\n        disabled: typing.Optional[bool] = None,\n        mark: typing.Optional[bool] = None,\n        strong: typing.Optional[bool] = None,\n        italic: typing.Optional[bool] = None,\n        underline: typing.Optional[bool] = None,\n        type: typing.Optional[Literal['secondary', 'success', 'warning', 'danger']] = None,\n        ellipsis: typing.Optional[typing.Union[bool, 'Ellipsis']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'locale',\n            'code',\n            'copyable',\n            'strikethrough',\n            'disabled',\n            'mark',\n            'strong',\n            'italic',\n            'underline',\n            'type',\n            'ellipsis',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'locale',\n            'code',\n            'copyable',\n            'strikethrough',\n            'disabled',\n            'mark',\n            'strong',\n            'italic',\n            'underline',\n            'type',\n            'ellipsis',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdParagraph, self).__init__(children=children, **args)\n\n\nsetattr(AntdParagraph, '__init__', _explicitize_args(AntdParagraph.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdPictureUpload.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdPictureUpload(Component):\n    \"\"\"An AntdPictureUpload component.\n    图片上传组件AntdPictureUpload\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - name (string; optional):\n        配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值.\n\n    - enableBatchControl (boolean; default True):\n        控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能 默认值：`True`.\n\n    - locale (a value equal to: 'zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr'; default 'zh-cn'):\n        组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n        默认值：`'zh-cn'`.\n\n    - apiUrl (string; optional):\n        文件上传服务接口地址.\n\n    - apiUrlExtraParams (dict; optional):\n        文件上传服务接口额外参数.\n\n    - headers (dict; optional):\n        文件上传服务接口额外headers参数.\n\n    - withCredentials (boolean; default False):\n        是否在请求上传服务接口时自动携带cookies等凭据信息 默认值：`False`.\n\n    - downloadUrl (string; optional):\n        对应已上传文件的`GET`类型下载服务接口地址，自带参数`taskId`、`filename`.\n\n    - downloadUrlExtraParams (dict; optional):\n        配合`downloadUrl`参数，设置文件下载服务接口额外参数.\n\n    - downloadUrlFromBackend (boolean; default False):\n        是否将文件上传接口返回信息中的`url`属性作为下载链接地址 默认值：`False`.\n\n    - editable (boolean; default False):\n        是否为图片上传过程添加裁切、旋转等预处理功能 默认值：`False`.\n\n    - editConfig (dict; optional):\n        当`editable=True`时，配置图片编辑相关功能.\n\n        `editConfig` is a dict with keys:\n\n        - aspect (number; optional):\n            裁切区域宽高比 默认值：`1`.\n\n        - shape (a value equal to: 'rect', 'round'; optional):\n            裁切区域形状，可选项有`'rect'`、`'round'` 默认值：`'rect'`.\n\n        - grid (boolean; optional):\n            是否显示裁切区域辅助网格线 默认值：`False`.\n\n        - quality (number; optional):\n            图片质量，取值应在0到1之间 默认值：`0.4`.\n\n        - zoom (boolean; optional):\n            是否启用图片缩放功能 默认值：`True`.\n\n        - rotate (boolean; optional):\n            是否启用图片旋转功能 默认值：`False`.\n\n        - minZoom (number; optional):\n            开启缩放功能时，设置最小缩放倍数 默认值：`1`.\n\n        - maxZoom (number; optional):\n            开启缩放功能时，设置最大缩放倍数 默认值：`3`.\n\n        - modalTitle (a list of or a singular dash component, string or number; optional):\n            组件型，图片编辑模态框的标题 默认值：`'编辑图片'`.\n\n        - modalWidth (number; optional):\n            图片编辑模态框像素宽度 默认值：`520`.\n\n        - modalOk (a list of or a singular dash component, string or number; optional):\n            组件型，图片编辑模态框确认按钮内容 默认值：`'确定'`.\n\n        - modalCancel (a list of or a singular dash component, string or number; optional):\n            组件型，图片编辑模态框取消按钮内容 默认值：`'取消'`.\n\n    - fileListMaxLength (number; optional):\n        限制已上传文件列表长度上限.\n\n    - fileTypes (list of strings; default [    'tiff',    'bmp',    'gif',    'png',    'jpeg',    'jpg',    'webp',    'ico',    'tif',]):\n        允许上传的文件后缀名列表 默认值：`['tiff', 'bmp', 'gif', 'png', 'jpeg', 'jpg',\n        'webp', 'ico', 'tif']`.\n\n    - buttonContent (a list of or a singular dash component, string or number; optional):\n        组件型，上传按钮内容.\n\n    - uploadId (string; optional):\n        自定义当前组件发起文件上传请求时携带的`uploadId`参数，可用于辅助后端创建文件上传所在文件夹.\n\n    - fileMaxSize (number; default 10):\n        文件上传尺寸上限，单位：兆.\n\n    - failedTooltipInfo (string; optional):\n        文件上传失败消息提示文字内容 默认值：`'上传失败'`.\n\n    - showRemoveIcon (boolean; default True):\n        已上传图片是否显示删除按钮 默认值：`True`.\n\n    - showPreviewIcon (boolean; default True):\n        已上传图片是否显示预览按钮 默认值：`True`.\n\n    - confirmBeforeDelete (boolean; default False):\n        是否为已上传文件删除操作添加二次确认模态框 默认值：`False`.\n\n    - showPercent (boolean; default False):\n        是否显示上传进度条 默认值：`False`.\n\n    - progressProps (dict; optional):\n        配置上传进度条相关参数.\n\n        `progressProps` is a dict with keys:\n\n        - strokeColor (dict; optional):\n            进度条颜色.\n\n            `strokeColor` is a string\n\n          Or dict with keys:\n\n            - from (string; optional):\n\n                渐变色开始颜色.\n\n            - to (string; optional):\n\n                渐变色结束颜色.\n\n        - strokeWidth (number; optional):\n            进度条像素宽度.\n\n        - format (dict; optional):\n            进度文字格式.\n\n            `format` is a dict with keys:\n\n            - prefix (string; optional):\n                进度文字前缀内容.\n\n            - suffix (string; optional):\n                进度文字后缀内容 默认值：`'%'`.\n\n    - showSuccessMessage (boolean; default True):\n        是否在每个文件上传成功后，分别弹出消息提示 默认值：`True`.\n\n    - showErrorMessage (boolean; default True):\n        是否在每个文件上传失败后，分别弹出消息提示 默认值：`True`.\n\n    - pastable (boolean; default False):\n        是否开启粘贴上传，即本地复制文件后，在页面任意位置粘贴即可完成上传 默认值：`False`.\n\n    - lastUploadTaskRecord (dict; optional):\n        监听最近一次文件上传任务相关信息.\n\n        `lastUploadTaskRecord` is a dict with keys:\n\n        - fileName (string; optional):\n            文件名称.\n\n        - fileSize (number; optional):\n            文件大小.\n\n        - completeTimestamp (number; optional):\n            上传完成时间戳.\n\n        - taskStatus (string; optional):\n            上传任务状态，`'success'`表示成功，`'failed'`表示失败.\n\n        - taskId (string; optional):\n            上传任务唯一识别id，当任务状态为`'failed'`时不会携带此信息.\n\n        - url (string; optional):\n            当前文件的下载链接.\n\n        - uploadResponse (boolean | number | string | dict | list; optional):\n            上传任务的接口响应信息. | list of dicts with keys:\n\n        - fileName (string; optional):\n            文件名称.\n\n        - fileSize (number; optional):\n            文件大小.\n\n        - completeTimestamp (number; optional):\n            上传完成时间戳.\n\n        - taskStatus (string; optional):\n            上传任务状态，`'success'`表示成功，`'failed'`表示失败.\n\n        - taskId (string; optional):\n            上传任务唯一识别id，当任务状态为`'failed'`时不会携带此信息.\n\n        - url (string; optional):\n            当前文件的下载链接.\n\n        - uploadResponse (boolean | number | string | dict | list; optional):\n            上传任务的接口响应信息.\n\n    - listUploadTaskRecord (list of dicts; optional):\n        监听当前已上传文件列表中上传任务相关信息.\n\n        `listUploadTaskRecord` is a list of dicts with keys:\n\n        - fileName (string; optional):\n            文件名称.\n\n        - fileSize (number; optional):\n            文件大小.\n\n        - completeTimestamp (number; optional):\n            上传完成时间戳.\n\n        - taskStatus (string; optional):\n            上传任务状态，`'success'`表示成功，`'failed'`表示失败.\n\n        - taskId (string; optional):\n            上传任务唯一识别id，当任务状态为`'failed'`时不会携带此信息.\n\n        - uid (string; optional):\n            当前文件上传唯一识别id，前端自动生成.\n\n        - url (string; optional):\n            当前文件下载链接.\n\n        - uploadResponse (boolean | number | string | dict | list; optional):\n            上传任务的接口响应信息.\n\n    - defaultFileList (list of dicts; optional):\n        初始化文件列表展示信息.\n\n        `defaultFileList` is a list of dicts with keys:\n\n        - name (string; optional):\n            当前文件名称.\n\n        - status (a value equal to: 'done', 'error', 'removed'; optional):\n            当前文件展示状态，可选项有`'done'`、`'error'`、`'removed'`.\n\n        - uid (boolean | number | string | dict | list; optional):\n            当前文件唯一识别id.\n\n        - url (string; optional):\n            当前文件下载链接.\n\n        - taskId (string; optional):\n            若传入有效值，将作为当前组件的`uploadId`参数.\n\n        - fileSize (number; optional):\n            当前文件大小.\n\n    - disabled (boolean; default False):\n        是否禁用当前组件 默认值：`False`.\n\n    - status (a value equal to: 'error', 'warning'; optional):\n        控制校验状态，可选项有`'error'`、`'warning'`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = [\n        'editConfig.modalTitle',\n        'editConfig.modalOk',\n        'editConfig.modalCancel',\n        'buttonContent',\n    ]\n    _base_nodes = ['buttonContent', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdPictureUpload'\n    EditConfig = TypedDict(\n        'EditConfig',\n        {\n            'aspect': NotRequired[NumberType],\n            'shape': NotRequired[Literal['rect', 'round']],\n            'grid': NotRequired[bool],\n            'quality': NotRequired[NumberType],\n            'zoom': NotRequired[bool],\n            'rotate': NotRequired[bool],\n            'minZoom': NotRequired[NumberType],\n            'maxZoom': NotRequired[NumberType],\n            'modalTitle': NotRequired[ComponentType],\n            'modalWidth': NotRequired[NumberType],\n            'modalOk': NotRequired[ComponentType],\n            'modalCancel': NotRequired[ComponentType],\n        },\n    )\n\n    ProgressPropsStrokeColor = TypedDict(\n        'ProgressPropsStrokeColor', {'from': NotRequired[str], 'to': NotRequired[str]}\n    )\n\n    ProgressPropsFormat = TypedDict(\n        'ProgressPropsFormat', {'prefix': NotRequired[str], 'suffix': NotRequired[str]}\n    )\n\n    ProgressProps = TypedDict(\n        'ProgressProps',\n        {\n            'strokeColor': NotRequired[typing.Union[str, 'ProgressPropsStrokeColor']],\n            'strokeWidth': NotRequired[NumberType],\n            'format': NotRequired['ProgressPropsFormat'],\n        },\n    )\n\n    LastUploadTaskRecord = TypedDict(\n        'LastUploadTaskRecord',\n        {\n            'fileName': NotRequired[str],\n            'fileSize': NotRequired[NumberType],\n            'completeTimestamp': NotRequired[NumberType],\n            'taskStatus': NotRequired[str],\n            'taskId': NotRequired[str],\n            'url': NotRequired[str],\n            'uploadResponse': NotRequired[typing.Any],\n        },\n    )\n\n    ListUploadTaskRecord = TypedDict(\n        'ListUploadTaskRecord',\n        {\n            'fileName': NotRequired[str],\n            'fileSize': NotRequired[NumberType],\n            'completeTimestamp': NotRequired[NumberType],\n            'taskStatus': NotRequired[str],\n            'taskId': NotRequired[str],\n            'uid': NotRequired[str],\n            'url': NotRequired[str],\n            'uploadResponse': NotRequired[typing.Any],\n        },\n    )\n\n    DefaultFileList = TypedDict(\n        'DefaultFileList',\n        {\n            'name': NotRequired[str],\n            'status': NotRequired[Literal['done', 'error', 'removed']],\n            'uid': NotRequired[typing.Any],\n            'url': NotRequired[str],\n            'taskId': NotRequired[str],\n            'fileSize': NotRequired[NumberType],\n        },\n    )\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        name: typing.Optional[str] = None,\n        enableBatchControl: typing.Optional[bool] = None,\n        locale: typing.Optional[Literal['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']] = None,\n        apiUrl: typing.Optional[str] = None,\n        apiUrlExtraParams: typing.Optional[dict] = None,\n        headers: typing.Optional[dict] = None,\n        withCredentials: typing.Optional[bool] = None,\n        downloadUrl: typing.Optional[str] = None,\n        downloadUrlExtraParams: typing.Optional[dict] = None,\n        downloadUrlFromBackend: typing.Optional[bool] = None,\n        editable: typing.Optional[bool] = None,\n        editConfig: typing.Optional['EditConfig'] = None,\n        fileListMaxLength: typing.Optional[NumberType] = None,\n        fileTypes: typing.Optional[typing.Sequence[str]] = None,\n        buttonContent: typing.Optional[ComponentType] = None,\n        uploadId: typing.Optional[str] = None,\n        fileMaxSize: typing.Optional[NumberType] = None,\n        failedTooltipInfo: typing.Optional[str] = None,\n        showRemoveIcon: typing.Optional[bool] = None,\n        showPreviewIcon: typing.Optional[bool] = None,\n        confirmBeforeDelete: typing.Optional[bool] = None,\n        showPercent: typing.Optional[bool] = None,\n        progressProps: typing.Optional['ProgressProps'] = None,\n        showSuccessMessage: typing.Optional[bool] = None,\n        showErrorMessage: typing.Optional[bool] = None,\n        pastable: typing.Optional[bool] = None,\n        lastUploadTaskRecord: typing.Optional[\n            typing.Union['LastUploadTaskRecord', typing.Sequence['LastUploadTaskRecord']]\n        ] = None,\n        listUploadTaskRecord: typing.Optional[typing.Sequence['ListUploadTaskRecord']] = None,\n        defaultFileList: typing.Optional[typing.Sequence['DefaultFileList']] = None,\n        disabled: typing.Optional[bool] = None,\n        status: typing.Optional[Literal['error', 'warning']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'name',\n            'enableBatchControl',\n            'locale',\n            'apiUrl',\n            'apiUrlExtraParams',\n            'headers',\n            'withCredentials',\n            'downloadUrl',\n            'downloadUrlExtraParams',\n            'downloadUrlFromBackend',\n            'editable',\n            'editConfig',\n            'fileListMaxLength',\n            'fileTypes',\n            'buttonContent',\n            'uploadId',\n            'fileMaxSize',\n            'failedTooltipInfo',\n            'showRemoveIcon',\n            'showPreviewIcon',\n            'confirmBeforeDelete',\n            'showPercent',\n            'progressProps',\n            'showSuccessMessage',\n            'showErrorMessage',\n            'pastable',\n            'lastUploadTaskRecord',\n            'listUploadTaskRecord',\n            'defaultFileList',\n            'disabled',\n            'status',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'name',\n            'enableBatchControl',\n            'locale',\n            'apiUrl',\n            'apiUrlExtraParams',\n            'headers',\n            'withCredentials',\n            'downloadUrl',\n            'downloadUrlExtraParams',\n            'downloadUrlFromBackend',\n            'editable',\n            'editConfig',\n            'fileListMaxLength',\n            'fileTypes',\n            'buttonContent',\n            'uploadId',\n            'fileMaxSize',\n            'failedTooltipInfo',\n            'showRemoveIcon',\n            'showPreviewIcon',\n            'confirmBeforeDelete',\n            'showPercent',\n            'progressProps',\n            'showSuccessMessage',\n            'showErrorMessage',\n            'pastable',\n            'lastUploadTaskRecord',\n            'listUploadTaskRecord',\n            'defaultFileList',\n            'disabled',\n            'status',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdPictureUpload, self).__init__(**args)\n\n\nsetattr(AntdPictureUpload, '__init__', _explicitize_args(AntdPictureUpload.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdPopconfirm.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdPopconfirm(Component):\n    \"\"\"An AntdPopconfirm component.\n    气泡确认框组件AntdPopconfirm\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，气泡确认框挂载元素.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - styles (dict; optional):\n        细分控制子元素css样式.\n\n        `styles` is a dict with keys:\n\n        - root (dict; optional):\n            根元素（包含箭头、内容元素）css样式.\n\n        - body (dict; optional):\n            内容元素css样式.\n\n    - classNames (dict; optional):\n        细分控制子元素css类名.\n\n        `classNames` is a dict with keys:\n\n        - root (string; optional):\n            根元素（包含箭头、内容元素）css类名.\n\n        - body (string; optional):\n            内容元素css类名.\n\n    - locale (a value equal to: 'zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr'; default 'zh-cn'):\n        组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n        默认值：`'zh-cn'`.\n\n    - icon (a list of or a singular dash component, string or number; optional):\n        组件型，提示图标.\n\n    - title (a list of or a singular dash component, string or number; optional):\n        组件型，标题内容.\n\n    - description (a list of or a singular dash component, string or number; optional):\n        组件型，描述内容.\n\n    - disabled (boolean; default False):\n        是否禁用当前组件 默认值：`False`.\n\n    - placement (a value equal to: 'top', 'left', 'right', 'bottom', 'topLeft', 'topRight', 'bottomLeft', 'bottomRight', 'leftTop', 'leftBottom', 'rightTop', 'rightBottom'; default 'top'):\n        气泡确认框弹出位置，可选项有`'top'`、`'left'`、`'right'`、`'bottom'`、`'topLeft'`、`'topRight'`、`'bottomLeft'`、`'bottomRight'`、`'leftTop'`、`'leftBottom'`、`'rightTop'`、`'rightBottom'`\n        默认值：`'top'`.\n\n    - mouseEnterDelay (number; default 0.1):\n        从鼠标移入挂载元素，到气泡确认框显示的延时，单位：秒 默认值：`0.1`.\n\n    - mouseLeaveDelay (number; default 0.1):\n        从鼠标移出挂载元素，到气泡确认框消失的延时，单位：秒 默认值：`0.1`.\n\n    - okText (a list of or a singular dash component, string or number; optional):\n        组件型，确认按钮内容.\n\n    - okButtonProps (dict; optional):\n        配置确认按钮相关参数.\n\n        `okButtonProps` is a dict with keys:\n\n        - size (a value equal to: 'small', 'middle', 'large'; optional):\n            按钮尺寸规格，可选项有`'small'`、`'middle'`、`'large'` 默认值：`'middle'`.\n\n        - type (a value equal to: 'primary', 'ghost', 'dashed', 'link', 'text', 'default'; optional):\n            按钮类型，可选项有`'default'`、`'primary'`、`'ghost'`、`'dashed'`、`'link'`、`'text'`\n            默认值：`'default'`.\n\n        - danger (boolean; optional):\n            按钮是否呈现危险样式 默认值：`False`.\n\n        - disabled (boolean; optional):\n            按钮是否呈现禁用状态 默认值：`False`.\n\n        - shape (a value equal to: 'circle', 'round'; optional):\n            按钮形状，可选项有`'default'`、`'circle'`、`'round'` 默认值：`'default'`.\n\n        - style (dict; optional):\n            按钮css样式.\n\n        - className (string; optional):\n            按钮css类名.\n\n    - cancelText (a list of or a singular dash component, string or number; optional):\n        组件型，取消按钮内容.\n\n    - cancelButtonProps (dict; optional):\n        配置取消按钮相关参数.\n\n        `cancelButtonProps` is a dict with keys:\n\n        - size (a value equal to: 'small', 'middle', 'large'; optional):\n            按钮尺寸规格，可选项有`'small'`、`'middle'`、`'large'` 默认值：`'middle'`.\n\n        - type (a value equal to: 'primary', 'ghost', 'dashed', 'link', 'text', 'default'; optional):\n            按钮类型，可选项有`'default'`、`'primary'`、`'ghost'`、`'dashed'`、`'link'`、`'text'`\n            默认值：`'default'`.\n\n        - danger (boolean; optional):\n            按钮是否呈现危险样式 默认值：`False`.\n\n        - disabled (boolean; optional):\n            按钮是否呈现禁用状态 默认值：`False`.\n\n        - shape (a value equal to: 'circle', 'round'; optional):\n            按钮形状，可选项有`'default'`、`'circle'`、`'round'` 默认值：`'default'`.\n\n        - style (dict; optional):\n            按钮css样式.\n\n        - className (string; optional):\n            按钮css类名.\n\n    - showCancel (boolean; default True):\n        是否显示取消按钮 默认值：`True`.\n\n    - confirmCounts (number; default 0):\n        监听确认按钮累计点击次数 默认值：`0`.\n\n    - cancelCounts (number; default 0):\n        监听取消按钮累计点击次数 默认值：`0`.\n\n    - trigger (a value equal to: 'hover', 'focus', 'click' | list of a value equal to: 'hover', 'focus', 'click's; default 'click'):\n        气泡确认框触发行为，可选项有`'hover'`、`'focus'`、`'click'`，可多选组合 默认值：`'click'`.\n\n    - zIndex (number; optional):\n        气泡确认框z-index.\n\n    - arrow (a value equal to: 'show', 'hide', 'center'; default 'show'):\n        指示箭头显示形式，可选项有`'show'`、`'hide'`、`'center'` 默认值：`'show'`.\n\n    - fresh (boolean; default False):\n        是否保持内容更新 默认值：`False`.\n\n    - open (boolean; default False):\n        监听或设置气泡确认框的显示状态 默认值：`False`.\n\n    - permanent (boolean; default False):\n        是否保持气泡确认框显示/隐藏 默认值：`False`.\n\n    - popupContainer (a value equal to: 'parent', 'body'; default 'body'):\n        悬浮层渲染挂载父节点策略，可选项有`'parent'`、`'body'` 默认值：`'body'`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\n\n    - loading_state (dict; optional)\n\n        `loading_state` is a dict with keys:\n\n        - is_loading (boolean; optional):\n            Determines if the component is loading or not.\n\n        - prop_name (string; optional):\n            Holds which property is loading.\n\n        - component_name (string; optional):\n            Holds the name of the component that is loading.\"\"\"\n\n    _children_props: typing.List[str] = ['icon', 'title', 'description', 'okText', 'cancelText']\n    _base_nodes = ['icon', 'title', 'description', 'okText', 'cancelText', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdPopconfirm'\n    Styles = TypedDict('Styles', {'root': NotRequired[dict], 'body': NotRequired[dict]})\n\n    ClassNames = TypedDict('ClassNames', {'root': NotRequired[str], 'body': NotRequired[str]})\n\n    OkButtonProps = TypedDict(\n        'OkButtonProps',\n        {\n            'size': NotRequired[Literal['small', 'middle', 'large']],\n            'type': NotRequired[Literal['primary', 'ghost', 'dashed', 'link', 'text', 'default']],\n            'danger': NotRequired[bool],\n            'disabled': NotRequired[bool],\n            'shape': NotRequired[Literal['circle', 'round']],\n            'style': NotRequired[dict],\n            'className': NotRequired[str],\n        },\n    )\n\n    CancelButtonProps = TypedDict(\n        'CancelButtonProps',\n        {\n            'size': NotRequired[Literal['small', 'middle', 'large']],\n            'type': NotRequired[Literal['primary', 'ghost', 'dashed', 'link', 'text', 'default']],\n            'danger': NotRequired[bool],\n            'disabled': NotRequired[bool],\n            'shape': NotRequired[Literal['circle', 'round']],\n            'style': NotRequired[dict],\n            'className': NotRequired[str],\n        },\n    )\n\n    LoadingState = TypedDict(\n        'LoadingState',\n        {\n            'is_loading': NotRequired[bool],\n            'prop_name': NotRequired[str],\n            'component_name': NotRequired[str],\n        },\n    )\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        styles: typing.Optional['Styles'] = None,\n        classNames: typing.Optional['ClassNames'] = None,\n        locale: typing.Optional[Literal['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']] = None,\n        icon: typing.Optional[ComponentType] = None,\n        title: typing.Optional[ComponentType] = None,\n        description: typing.Optional[ComponentType] = None,\n        disabled: typing.Optional[bool] = None,\n        placement: typing.Optional[\n            Literal[\n                'top',\n                'left',\n                'right',\n                'bottom',\n                'topLeft',\n                'topRight',\n                'bottomLeft',\n                'bottomRight',\n                'leftTop',\n                'leftBottom',\n                'rightTop',\n                'rightBottom',\n            ]\n        ] = None,\n        mouseEnterDelay: typing.Optional[NumberType] = None,\n        mouseLeaveDelay: typing.Optional[NumberType] = None,\n        okText: typing.Optional[ComponentType] = None,\n        okButtonProps: typing.Optional['OkButtonProps'] = None,\n        cancelText: typing.Optional[ComponentType] = None,\n        cancelButtonProps: typing.Optional['CancelButtonProps'] = None,\n        showCancel: typing.Optional[bool] = None,\n        confirmCounts: typing.Optional[NumberType] = None,\n        cancelCounts: typing.Optional[NumberType] = None,\n        trigger: typing.Optional[\n            typing.Union[\n                Literal['hover', 'focus', 'click'],\n                typing.Sequence[Literal['hover', 'focus', 'click']],\n            ]\n        ] = None,\n        zIndex: typing.Optional[NumberType] = None,\n        arrow: typing.Optional[Literal['show', 'hide', 'center']] = None,\n        fresh: typing.Optional[bool] = None,\n        open: typing.Optional[bool] = None,\n        permanent: typing.Optional[bool] = None,\n        popupContainer: typing.Optional[Literal['parent', 'body']] = None,\n        loading_state: typing.Optional['LoadingState'] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'styles',\n            'classNames',\n            'locale',\n            'icon',\n            'title',\n            'description',\n            'disabled',\n            'placement',\n            'mouseEnterDelay',\n            'mouseLeaveDelay',\n            'okText',\n            'okButtonProps',\n            'cancelText',\n            'cancelButtonProps',\n            'showCancel',\n            'confirmCounts',\n            'cancelCounts',\n            'trigger',\n            'zIndex',\n            'arrow',\n            'fresh',\n            'open',\n            'permanent',\n            'popupContainer',\n            'data-*',\n            'aria-*',\n            'loading_state',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'styles',\n            'classNames',\n            'locale',\n            'icon',\n            'title',\n            'description',\n            'disabled',\n            'placement',\n            'mouseEnterDelay',\n            'mouseLeaveDelay',\n            'okText',\n            'okButtonProps',\n            'cancelText',\n            'cancelButtonProps',\n            'showCancel',\n            'confirmCounts',\n            'cancelCounts',\n            'trigger',\n            'zIndex',\n            'arrow',\n            'fresh',\n            'open',\n            'permanent',\n            'popupContainer',\n            'data-*',\n            'aria-*',\n            'loading_state',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdPopconfirm, self).__init__(children=children, **args)\n\n\nsetattr(AntdPopconfirm, '__init__', _explicitize_args(AntdPopconfirm.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdPopover.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdPopover(Component):\n    \"\"\"An AntdPopover component.\n    气泡卡片组件Popover\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，气泡卡片触发目标元素.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - styles (dict; optional):\n        细分控制子元素css样式.\n\n        `styles` is a dict with keys:\n\n        - root (dict; optional):\n            根元素（包含箭头、内容元素）css样式.\n\n        - body (dict; optional):\n            内容元素css样式.\n\n    - classNames (dict; optional):\n        细分控制子元素css类名.\n\n        `classNames` is a dict with keys:\n\n        - root (string; optional):\n            根元素（包含箭头、内容元素）css类名.\n\n        - body (string; optional):\n            内容元素css类名.\n\n    - title (a list of or a singular dash component, string or number; optional):\n        组件型，标题内容.\n\n    - content (a list of or a singular dash component, string or number; optional):\n        组件型，内容区元素.\n\n    - placement (a value equal to: 'top', 'left', 'right', 'bottom', 'topLeft', 'topRight', 'bottomLeft', 'bottomRight', 'leftTop', 'leftBottom', 'rightTop', 'rightBottom'; default 'top'):\n        气泡卡片展开方向，可选项有`'top'`、`'left'`、`'right'`、`'bottom'`、`'topLeft'`、`'topRight'`、`'bottomLeft'`、`'bottomRight'`、`'leftTop'`、`'leftBottom'`、`'rightTop'`、`'rightBottom'`\n        默认值：`top'`.\n\n    - color (string; optional):\n        背景颜色.\n\n    - mouseEnterDelay (number; default 0.1):\n        鼠标移入到气泡卡片弹出延时，单位：秒 默认值：`0.1`.\n\n    - mouseLeaveDelay (number; default 0.1):\n        鼠标移出到气泡卡片消失延时，单位：秒 默认值：`0.1`.\n\n    - trigger (a value equal to: 'hover', 'focus', 'click' | list of a value equal to: 'hover', 'focus', 'click's; default 'hover'):\n        触发方式，可选项有`'hover'`、`'focus'`、`'click'`，可多选 默认值：`'hover'`.\n\n    - zIndex (number; optional):\n        气泡卡片z-index.\n\n    - arrow (a value equal to: 'show', 'hide', 'center'; default 'show'):\n        控制气泡卡片附带箭头显示形式，可选项有`'show'`、`'hide'`、`'center'` 默认值：`'show'`.\n\n    - fresh (boolean; default False):\n        是否始终保持更新内容 默认值：`False`.\n\n    - open (boolean; default False):\n        监听或设置当前气泡卡片的展开状态 默认值：`False`.\n\n    - permanent (boolean; default False):\n        是否保持气泡卡片处于`open`对应状态不变 默认值：`False`.\n\n    - popupContainer (a value equal to: 'parent', 'body'; default 'body'):\n        气泡卡片展开层锚定策略，可选项有`'parent'`、`'body'` 默认值：`'body'`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = ['title', 'content']\n    _base_nodes = ['title', 'content', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdPopover'\n    Styles = TypedDict('Styles', {'root': NotRequired[dict], 'body': NotRequired[dict]})\n\n    ClassNames = TypedDict('ClassNames', {'root': NotRequired[str], 'body': NotRequired[str]})\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        styles: typing.Optional['Styles'] = None,\n        classNames: typing.Optional['ClassNames'] = None,\n        title: typing.Optional[ComponentType] = None,\n        content: typing.Optional[ComponentType] = None,\n        placement: typing.Optional[\n            Literal[\n                'top',\n                'left',\n                'right',\n                'bottom',\n                'topLeft',\n                'topRight',\n                'bottomLeft',\n                'bottomRight',\n                'leftTop',\n                'leftBottom',\n                'rightTop',\n                'rightBottom',\n            ]\n        ] = None,\n        color: typing.Optional[str] = None,\n        mouseEnterDelay: typing.Optional[NumberType] = None,\n        mouseLeaveDelay: typing.Optional[NumberType] = None,\n        trigger: typing.Optional[\n            typing.Union[\n                Literal['hover', 'focus', 'click'],\n                typing.Sequence[Literal['hover', 'focus', 'click']],\n            ]\n        ] = None,\n        zIndex: typing.Optional[NumberType] = None,\n        arrow: typing.Optional[Literal['show', 'hide', 'center']] = None,\n        fresh: typing.Optional[bool] = None,\n        open: typing.Optional[bool] = None,\n        permanent: typing.Optional[bool] = None,\n        popupContainer: typing.Optional[Literal['parent', 'body']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'styles',\n            'classNames',\n            'title',\n            'content',\n            'placement',\n            'color',\n            'mouseEnterDelay',\n            'mouseLeaveDelay',\n            'trigger',\n            'zIndex',\n            'arrow',\n            'fresh',\n            'open',\n            'permanent',\n            'popupContainer',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'styles',\n            'classNames',\n            'title',\n            'content',\n            'placement',\n            'color',\n            'mouseEnterDelay',\n            'mouseLeaveDelay',\n            'trigger',\n            'zIndex',\n            'arrow',\n            'fresh',\n            'open',\n            'permanent',\n            'popupContainer',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdPopover, self).__init__(children=children, **args)\n\n\nsetattr(AntdPopover, '__init__', _explicitize_args(AntdPopover.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdPopupCard.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdPopupCard(Component):\n    \"\"\"An AntdPopupCard component.\n    弹出式卡片组件AntdPopupCard\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，内嵌元素.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - styles (dict; optional):\n        细分控制子元素css样式.\n\n        `styles` is a dict with keys:\n\n        - mask (dict; optional):\n            遮罩层元素css样式.\n\n        - content (dict; optional):\n            容器元素css样式.\n\n        - wrapper (dict; optional):\n            包裹层元素css样式.\n\n        - header (dict; optional):\n            头部元素css样式.\n\n        - body (dict; optional):\n            内容元素css样式.\n\n        - footer (dict; optional):\n            底部元素css样式.\n\n    - classNames (dict; optional):\n        细分控制子元素css类名.\n\n        `classNames` is a dict with keys:\n\n        - mask (string; optional):\n            遮罩层元素css类名.\n\n        - content (string; optional):\n            容器元素css类名.\n\n        - wrapper (string; optional):\n            包裹层元素css类名.\n\n        - header (string; optional):\n            头部元素css类名.\n\n        - body (string; optional):\n            内容元素css类名.\n\n        - footer (string; optional):\n            底部元素css类名.\n\n    - title (a list of or a singular dash component, string or number; optional):\n        组件型，标题内容.\n\n    - visible (boolean; default True):\n        设置或监听当前弹出式卡片是否显示 默认值：`True`.\n\n    - width (number | string; optional):\n        弹出式卡片像素宽度.\n\n    - transitionType (a value equal to: 'none', 'fade', 'zoom', 'zoom-big', 'zoom-big-fast', 'slide-up', 'slide-down', 'slide-left', 'slide-right', 'move-up', 'move-down', 'move-left', 'move-right'; default 'fade'):\n        卡片显隐动画类型，可选项有`'none'`、`'fade'`、`'zoom'`、`'zoom-big'`、`'zoom-big-fast'`、`'slide-up'`、`'slide-down'`、`'slide-left'`、`'slide-right'`、`'move-up'`、`'move-down'`、`'move-left'`、`'move-right'`\n        默认值：`'zoom'`.\n\n    - forceRender (boolean; default False):\n        是否在初始化卡片未显示时，强制渲染卡片内部元素 默认值：`False`.\n\n    - destroyOnClose (boolean; default True):\n        是否在卡片关闭后自动销毁内部元素 默认值：`True`.\n\n    - closable (boolean; default True):\n        是否显示右上角的关闭按钮 默认值：`True`.\n\n    - closeIconType (a value equal to: 'default', 'outlined', 'two-tone'; default 'default'):\n        关闭按钮类型，可选项有`'default'`、`'outlined'`、`'two-tone'` 默认值：`'default'`.\n\n    - draggable (boolean; default False):\n        是否可拖拽 默认值：`False`.\n\n    - dragClassName (string | dict; optional):\n        顶部可拖拽区域css类名.\n\n    - zIndex (number; default 1000):\n        弹出式卡片z-index 默认值：`1000`.\n\n    - loading (boolean; default False):\n        是否整体渲染为加载中状态 默认值：`False`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = ['title']\n    _base_nodes = ['title', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdPopupCard'\n    Styles = TypedDict(\n        'Styles',\n        {\n            'mask': NotRequired[dict],\n            'content': NotRequired[dict],\n            'wrapper': NotRequired[dict],\n            'header': NotRequired[dict],\n            'body': NotRequired[dict],\n            'footer': NotRequired[dict],\n        },\n    )\n\n    ClassNames = TypedDict(\n        'ClassNames',\n        {\n            'mask': NotRequired[str],\n            'content': NotRequired[str],\n            'wrapper': NotRequired[str],\n            'header': NotRequired[str],\n            'body': NotRequired[str],\n            'footer': NotRequired[str],\n        },\n    )\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        styles: typing.Optional['Styles'] = None,\n        classNames: typing.Optional['ClassNames'] = None,\n        title: typing.Optional[ComponentType] = None,\n        visible: typing.Optional[bool] = None,\n        width: typing.Optional[typing.Union[NumberType, str]] = None,\n        transitionType: typing.Optional[\n            Literal[\n                'none',\n                'fade',\n                'zoom',\n                'zoom-big',\n                'zoom-big-fast',\n                'slide-up',\n                'slide-down',\n                'slide-left',\n                'slide-right',\n                'move-up',\n                'move-down',\n                'move-left',\n                'move-right',\n            ]\n        ] = None,\n        forceRender: typing.Optional[bool] = None,\n        destroyOnClose: typing.Optional[bool] = None,\n        closable: typing.Optional[bool] = None,\n        closeIconType: typing.Optional[Literal['default', 'outlined', 'two-tone']] = None,\n        draggable: typing.Optional[bool] = None,\n        dragClassName: typing.Optional[typing.Union[str, dict]] = None,\n        zIndex: typing.Optional[NumberType] = None,\n        loading: typing.Optional[bool] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'styles',\n            'classNames',\n            'title',\n            'visible',\n            'width',\n            'transitionType',\n            'forceRender',\n            'destroyOnClose',\n            'closable',\n            'closeIconType',\n            'draggable',\n            'dragClassName',\n            'zIndex',\n            'loading',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'styles',\n            'classNames',\n            'title',\n            'visible',\n            'width',\n            'transitionType',\n            'forceRender',\n            'destroyOnClose',\n            'closable',\n            'closeIconType',\n            'draggable',\n            'dragClassName',\n            'zIndex',\n            'loading',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdPopupCard, self).__init__(children=children, **args)\n\n\nsetattr(AntdPopupCard, '__init__', _explicitize_args(AntdPopupCard.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdProgress.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdProgress(Component):\n    \"\"\"An AntdProgress component.\n    进度条组件AntdProgress\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - type (a value equal to: 'line', 'circle', 'dashboard'; default 'line'):\n        进度条类型，可选项有`'line'`、`'circle'`、`'dashboard'` 默认值：`'line'`.\n\n    - size (dict; default 'default'):\n        进度条尺寸规格，可选项有`'small'`、`'default'`、`'large'`，传入数值型表示像素尺寸，传入字典型可分别控制宽度和高度\n        默认值：`'default'`.\n\n        `size` is a number | list of number | strings | a value equal to:\n        'small', 'default' | dict with keys:\n\n        - width (number; optional):\n            像素宽度.\n\n        - height (number; optional):\n            像素高度.\n\n    - percent (number; default 0):\n        进度条进度，取值应在`0`到`100`之间，当`100`时默认会渲染为完成状态 默认值：`0`.\n\n    - success (dict; optional):\n        配置进度条完成状态相关参数.\n\n        `success` is a dict with keys:\n\n        - percent (number; optional):\n            达到完成状态对应的进度，取值应在`0`到`100`之间 默认值：`100`.\n\n        - strokeColor (dict; optional):\n            完成状态进度条颜色，支持渐变色.\n\n            `strokeColor` is a string\n\n          Or dict with keys:\n\n            - from (string; optional):\n\n                渐变色开端颜色.\n\n            - to (string; optional):\n\n                渐变色末端颜色.\n\n    - format (dict; optional):\n        配置进度提示相关参数.\n\n        `format` is a dict with keys:\n\n        - prefix (string; optional):\n            进度提示前缀文字 默认值：`''`.\n\n        - suffix (string; optional):\n            进度提示后缀文字 默认值：`'%'`.\n\n        - content (a list of or a singular dash component, string or number; optional):\n            组件型，强制设置显示内容.\n\n    - status (a value equal to: 'success', 'exception', 'normal', 'active'; optional):\n        进度条状态，可选项有`'success'`、`'exception'`、`'normal'`、`'active'`，其中`'active'`仅在`type='line'`时生效\n        默认值：`'normal'`.\n\n    - showInfo (boolean; default True):\n        是否显示进度数值或状态图标 默认值：`True`.\n\n    - percentPosition (dict; optional):\n        适用于`'line'`型进度条，配置进度条附带进度数值信息显示位置.\n\n        `percentPosition` is a dict with keys:\n\n        - align (a value equal to: 'start', 'center', 'end'; optional):\n            对齐方式，可选项有`'start'`、`'center'`、`'end'`.\n\n        - type (a value equal to: 'inner', 'outer'; optional):\n            内外位置，可选项有`'inner'`、`'outer'`.\n\n    - strokeColor (dict; optional):\n        配置进度条颜色，支持渐变色.\n\n        `strokeColor` is a string | list of strings | dict with keys:\n\n        - from (string; optional):\n            渐变色开端颜色.\n\n        - to (string; optional):\n            渐变色末端颜色. | dict with strings as keys and values of type string\n\n    - strokeLinecap (a value equal to: 'round', 'butt', 'square'; optional):\n        进度条线型，可选项有`'round'`、`'butt'`、`'square'` 默认值：`'round'`.\n\n    - strokeWidth (number; optional):\n        进度条线的宽度，单位是进度条画布宽度的百分比.\n\n    - trailColor (string; optional):\n        未完成分段部分的颜色，默认无颜色.\n\n    - gapDegree (number; optional):\n        进度条缺口角度，取值应在`0`到`295`之间，仅`type='dashboard'`时可用 默认值：`75`.\n\n    - gapPosition (a value equal to: 'top', 'bottom', 'left', 'right'; default 'bottom'):\n        仪表盘缺口方向，可选项有`'top'`、`'bottom'`、`'left'`、`'right'`，仅`type='dashboard'`时可用\n        默认值：`'bottom'`.\n\n    - steps (dict; optional):\n        配置进度条分段数量，针对`'circle'`、`'dashboard'`型进度条支持传入字典型进行更详细的配置.\n\n        `steps` is a number | dict with keys:\n\n        - count (number; optional):\n            分段数量.\n\n        - gap (number; optional):\n            分段间隔像素大小.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = ['format.content']\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdProgress'\n    Size = TypedDict('Size', {'width': NotRequired[NumberType], 'height': NotRequired[NumberType]})\n\n    SuccessStrokeColor = TypedDict(\n        'SuccessStrokeColor', {'from': NotRequired[str], 'to': NotRequired[str]}\n    )\n\n    Success = TypedDict(\n        'Success',\n        {\n            'percent': NotRequired[NumberType],\n            'strokeColor': NotRequired[typing.Union[str, 'SuccessStrokeColor']],\n        },\n    )\n\n    Format = TypedDict(\n        'Format',\n        {\n            'prefix': NotRequired[str],\n            'suffix': NotRequired[str],\n            'content': NotRequired[ComponentType],\n        },\n    )\n\n    PercentPosition = TypedDict(\n        'PercentPosition',\n        {\n            'align': NotRequired[Literal['start', 'center', 'end']],\n            'type': NotRequired[Literal['inner', 'outer']],\n        },\n    )\n\n    StrokeColor = TypedDict('StrokeColor', {'from': NotRequired[str], 'to': NotRequired[str]})\n\n    Steps = TypedDict('Steps', {'count': NotRequired[NumberType], 'gap': NotRequired[NumberType]})\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        type: typing.Optional[Literal['line', 'circle', 'dashboard']] = None,\n        size: typing.Optional[\n            typing.Union[\n                NumberType,\n                typing.Sequence[typing.Union[NumberType, str]],\n                Literal['small', 'default'],\n                'Size',\n            ]\n        ] = None,\n        percent: typing.Optional[NumberType] = None,\n        success: typing.Optional['Success'] = None,\n        format: typing.Optional['Format'] = None,\n        status: typing.Optional[Literal['success', 'exception', 'normal', 'active']] = None,\n        showInfo: typing.Optional[bool] = None,\n        percentPosition: typing.Optional['PercentPosition'] = None,\n        strokeColor: typing.Optional[\n            typing.Union[\n                str,\n                typing.Sequence[str],\n                'StrokeColor',\n                typing.Dict[typing.Union[str, float, int], str],\n            ]\n        ] = None,\n        strokeLinecap: typing.Optional[Literal['round', 'butt', 'square']] = None,\n        strokeWidth: typing.Optional[NumberType] = None,\n        trailColor: typing.Optional[str] = None,\n        gapDegree: typing.Optional[NumberType] = None,\n        gapPosition: typing.Optional[Literal['top', 'bottom', 'left', 'right']] = None,\n        steps: typing.Optional[typing.Union[NumberType, 'Steps']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'type',\n            'size',\n            'percent',\n            'success',\n            'format',\n            'status',\n            'showInfo',\n            'percentPosition',\n            'strokeColor',\n            'strokeLinecap',\n            'strokeWidth',\n            'trailColor',\n            'gapDegree',\n            'gapPosition',\n            'steps',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'type',\n            'size',\n            'percent',\n            'success',\n            'format',\n            'status',\n            'showInfo',\n            'percentPosition',\n            'strokeColor',\n            'strokeLinecap',\n            'strokeWidth',\n            'trailColor',\n            'gapDegree',\n            'gapPosition',\n            'steps',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdProgress, self).__init__(**args)\n\n\nsetattr(AntdProgress, '__init__', _explicitize_args(AntdProgress.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdQRCode.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdQRCode(Component):\n    \"\"\"An AntdQRCode component.\n    二维码组件AntdQRCode\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - locale (a value equal to: 'zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr'; default 'zh-cn'):\n        组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n        默认值：`'zh-cn'`.\n\n    - value (string; optional):\n        二维码解析结果.\n\n    - type (a value equal to: 'canvas', 'svg'; default 'canvas'):\n        渲染方式，可选项有`'canvas'`、`'svg'` 默认值：`'canvas'`.\n\n    - icon (string; optional):\n        二维码内嵌图片地址.\n\n    - size (number; default 160):\n        二维码像素边长 默认值：`160`.\n\n    - iconSize (dict; default 40):\n        二维码内嵌图片像素边长 默认值：`40`.\n\n        `iconSize` is a number | dict with keys:\n\n        - width (number; optional)\n\n        - height (number; optional)\n\n    - color (string; default '#000'):\n        二维码颜色 默认值：`'#000'`.\n\n    - bgColor (string; default 'transparent'):\n        二维码背景颜色 默认值：`'transparent'`.\n\n    - bordered (boolean; default True):\n        二维码是否渲染边框 默认值：`True`.\n\n    - errorLevel (a value equal to: 'L', 'M', 'Q', 'H'; default 'M'):\n        二维码纠错级别，可选项有`'L'`、`'M'`、`'Q'`、`'H'` 默认值：`'M'`.\n\n    - status (a value equal to: 'active', 'expired', 'loading', 'scanned'; default 'active'):\n        二维码状态，可选项有`'active'`、`'expired'`、`'loading'`、`'scanned'`\n        默认值：`'active'`.\n\n    - expires (number; optional):\n        当前二维码过期时间，单位：秒，到期后二维码状态将会被强制更新为`'expired'`.\n\n    - autoSpin (boolean; default False):\n        是否在`value`处于回调更新中时，自动切换为`loading`状态 默认值：`False`.\n\n    - refreshClicks (number; default 0):\n        监听当前\\\"点击刷新\\\"按钮累计点击次数，仅在`status`为`'expired'`时有效 默认值：`0`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = []\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdQRCode'\n    IconSize = TypedDict(\n        'IconSize', {'width': NotRequired[NumberType], 'height': NotRequired[NumberType]}\n    )\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        locale: typing.Optional[Literal['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']] = None,\n        value: typing.Optional[str] = None,\n        type: typing.Optional[Literal['canvas', 'svg']] = None,\n        icon: typing.Optional[str] = None,\n        size: typing.Optional[NumberType] = None,\n        iconSize: typing.Optional[typing.Union[NumberType, 'IconSize']] = None,\n        color: typing.Optional[str] = None,\n        bgColor: typing.Optional[str] = None,\n        bordered: typing.Optional[bool] = None,\n        errorLevel: typing.Optional[Literal['L', 'M', 'Q', 'H']] = None,\n        status: typing.Optional[Literal['active', 'expired', 'loading', 'scanned']] = None,\n        expires: typing.Optional[NumberType] = None,\n        autoSpin: typing.Optional[bool] = None,\n        refreshClicks: typing.Optional[NumberType] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'locale',\n            'value',\n            'type',\n            'icon',\n            'size',\n            'iconSize',\n            'color',\n            'bgColor',\n            'bordered',\n            'errorLevel',\n            'status',\n            'expires',\n            'autoSpin',\n            'refreshClicks',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'locale',\n            'value',\n            'type',\n            'icon',\n            'size',\n            'iconSize',\n            'color',\n            'bgColor',\n            'bordered',\n            'errorLevel',\n            'status',\n            'expires',\n            'autoSpin',\n            'refreshClicks',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdQRCode, self).__init__(**args)\n\n\nsetattr(AntdQRCode, '__init__', _explicitize_args(AntdQRCode.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdRadioGroup.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdRadioGroup(Component):\n    \"\"\"An AntdRadioGroup component.\n    单选框组件AntdRadioGroup\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - name (string; optional):\n        配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值.\n\n    - enableBatchControl (boolean; default True):\n        控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能 默认值：`True`.\n\n    - direction (a value equal to: 'horizontal', 'vertical'; default 'horizontal'):\n        单选框排列方向，可选项有`'horizontal'`、`'vertical'` 默认值：`'horizontal'`.\n\n    - options (list of dicts; optional):\n        配置选项.\n\n        `options` is a list of string | number | dict with keys:\n\n        - label (a list of or a singular dash component, string or number; optional):\n            组件型，当前选项标签内容.\n\n        - value (string | number; optional):\n            当前选项值.\n\n        - disabled (boolean; optional):\n            是否禁用当前选项 默认值：`False`.s\n\n    - block (boolean; default False):\n        是否撑满父容器 默认值：`False`.\n\n    - disabled (boolean; default False):\n        是否禁用当前组件 默认值：`False`.\n\n    - size (a value equal to: 'small', 'middle', 'large'; default 'middle'):\n        当`optionType='button'`时，控制各选项按钮尺寸规格，可选项有`'small'`、`'middle'`、`'large'`\n        默认值：`'middle'`.\n\n    - value (string | number; optional):\n        监听或设置已选值，与`format`格式对应.\n\n    - defaultValue (string | number; optional):\n        初始化已选值，与`format`格式对应.\n\n    - optionType (a value equal to: 'default', 'button'; default 'default'):\n        选项形式，可选项有`'default'`、`'button'` 默认值：`'default'`.\n\n    - buttonStyle (a value equal to: 'outline', 'solid'; default 'outline'):\n        当`optionType='button'`时，设置按钮风格，可选项有`'outline'`、`'solid'`\n        默认值：`'outline'`.\n\n    - readOnly (boolean; default False):\n        是否渲染为只读状态 默认值：`False`.\n\n    - batchPropsNames (list of strings; optional):\n        需要纳入[批量属性监听](/batch-props-values)的若干属性名.\n\n    - batchPropsValues (dict; optional):\n        监听`batchPropsNames`中指定的若干属性值.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\n\n    - persistence (boolean | string | number; optional):\n        是否开启[属性持久化](/prop-persistence).\n\n    - persisted_props (list of a value equal to: 'value's; optional):\n        开启属性持久化功能的若干属性名，可选项有`'value'` 默认值：`['value']`.\n\n    - persistence_type (a value equal to: 'local', 'session', 'memory'; optional):\n        属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n        默认值：`'local'`.\"\"\"\n\n    _children_props: typing.List[str] = ['options[].label']\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdRadioGroup'\n    Options = TypedDict(\n        'Options',\n        {\n            'label': NotRequired[ComponentType],\n            'value': NotRequired[typing.Union[str, NumberType]],\n            'disabled': NotRequired[bool],\n        },\n    )\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        name: typing.Optional[str] = None,\n        enableBatchControl: typing.Optional[bool] = None,\n        direction: typing.Optional[Literal['horizontal', 'vertical']] = None,\n        options: typing.Optional[typing.Sequence[typing.Union[str, NumberType, 'Options']]] = None,\n        block: typing.Optional[bool] = None,\n        disabled: typing.Optional[bool] = None,\n        size: typing.Optional[Literal['small', 'middle', 'large']] = None,\n        value: typing.Optional[typing.Union[str, NumberType]] = None,\n        defaultValue: typing.Optional[typing.Union[str, NumberType]] = None,\n        optionType: typing.Optional[Literal['default', 'button']] = None,\n        buttonStyle: typing.Optional[Literal['outline', 'solid']] = None,\n        readOnly: typing.Optional[bool] = None,\n        batchPropsNames: typing.Optional[typing.Sequence[str]] = None,\n        batchPropsValues: typing.Optional[dict] = None,\n        persistence: typing.Optional[typing.Union[bool, str, NumberType]] = None,\n        persisted_props: typing.Optional[typing.Sequence[Literal['value']]] = None,\n        persistence_type: typing.Optional[Literal['local', 'session', 'memory']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'name',\n            'enableBatchControl',\n            'direction',\n            'options',\n            'block',\n            'disabled',\n            'size',\n            'value',\n            'defaultValue',\n            'optionType',\n            'buttonStyle',\n            'readOnly',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'name',\n            'enableBatchControl',\n            'direction',\n            'options',\n            'block',\n            'disabled',\n            'size',\n            'value',\n            'defaultValue',\n            'optionType',\n            'buttonStyle',\n            'readOnly',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdRadioGroup, self).__init__(**args)\n\n\nsetattr(AntdRadioGroup, '__init__', _explicitize_args(AntdRadioGroup.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdRate.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdRate(Component):\n    \"\"\"An AntdRate component.\n    评分组件AntdRate\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - name (string; optional):\n        配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值.\n\n    - enableBatchControl (boolean; default True):\n        控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能 默认值：`True`.\n\n    - allowClear (boolean; default True):\n        是否允许通过再次点击清除已选分值 默认值：`True`.\n\n    - allowHalf (boolean; default False):\n        是否允许半星选择 默认值：`False`.\n\n    - count (number; default 5):\n        总分值 默认值：`5`.\n\n    - tooltips (list of strings; optional):\n        为各分值设置提示文字信息.\n\n    - disabled (boolean; default False):\n        是否渲染为只读评分形式 默认值：`False`.\n\n    - autoFocus (boolean; default False):\n        是否自动获取焦点 默认值：`False`.\n\n    - value (number; optional):\n        监听或设置已选值.\n\n    - defaultValue (number; default 0):\n        初始化已选值 默认值：`0`.\n\n    - batchPropsNames (list of strings; optional):\n        需要纳入[批量属性监听](/batch-props-values)的若干属性名.\n\n    - batchPropsValues (dict; optional):\n        监听`batchPropsNames`中指定的若干属性值.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\n\n    - persistence (boolean | string | number; optional):\n        是否开启[属性持久化](/prop-persistence).\n\n    - persisted_props (list of a value equal to: 'value's; default ['value']):\n        开启属性持久化功能的若干属性名，可选项有`'value'` 默认值：`['value']`.\n\n    - persistence_type (a value equal to: 'local', 'session', 'memory'; default 'local'):\n        属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n        默认值：`'local'`.\"\"\"\n\n    _children_props: typing.List[str] = []\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdRate'\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        name: typing.Optional[str] = None,\n        enableBatchControl: typing.Optional[bool] = None,\n        allowClear: typing.Optional[bool] = None,\n        allowHalf: typing.Optional[bool] = None,\n        count: typing.Optional[NumberType] = None,\n        tooltips: typing.Optional[typing.Sequence[str]] = None,\n        disabled: typing.Optional[bool] = None,\n        autoFocus: typing.Optional[bool] = None,\n        value: typing.Optional[NumberType] = None,\n        defaultValue: typing.Optional[NumberType] = None,\n        batchPropsNames: typing.Optional[typing.Sequence[str]] = None,\n        batchPropsValues: typing.Optional[dict] = None,\n        persistence: typing.Optional[typing.Union[bool, str, NumberType]] = None,\n        persisted_props: typing.Optional[typing.Sequence[Literal['value']]] = None,\n        persistence_type: typing.Optional[Literal['local', 'session', 'memory']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'name',\n            'enableBatchControl',\n            'allowClear',\n            'allowHalf',\n            'count',\n            'tooltips',\n            'disabled',\n            'autoFocus',\n            'value',\n            'defaultValue',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'name',\n            'enableBatchControl',\n            'allowClear',\n            'allowHalf',\n            'count',\n            'tooltips',\n            'disabled',\n            'autoFocus',\n            'value',\n            'defaultValue',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdRate, self).__init__(**args)\n\n\nsetattr(AntdRate, '__init__', _explicitize_args(AntdRate.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdResult.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdResult(Component):\n    \"\"\"An AntdResult component.\n    结果组件AntdResult\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - extra (a list of or a singular dash component, string or number; optional):\n        组件型，操作区域.\n\n    - status (a value equal to: 'success', 'error', 'info', 'warning', '404', '403', '500', 'loading'; default 'info'):\n        状态，可选项有`'success'`、`'error'`、`'info'`、`'warning'`、`'404'`、`'403'`、`'500'`\n        默认值：`'info'`.\n\n    - title (a list of or a singular dash component, string or number; optional):\n        组件型，标题内容.\n\n    - subTitle (a list of or a singular dash component, string or number; optional):\n        组件型，副标题内容.\n\n    - icon (a list of or a singular dash component, string or number; optional):\n        组件型，图标内容.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = ['extra', 'title', 'subTitle', 'icon']\n    _base_nodes = ['extra', 'title', 'subTitle', 'icon', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdResult'\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        extra: typing.Optional[ComponentType] = None,\n        status: typing.Optional[\n            Literal['success', 'error', 'info', 'warning', '404', '403', '500', 'loading']\n        ] = None,\n        title: typing.Optional[ComponentType] = None,\n        subTitle: typing.Optional[ComponentType] = None,\n        icon: typing.Optional[ComponentType] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'extra',\n            'status',\n            'title',\n            'subTitle',\n            'icon',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'extra',\n            'status',\n            'title',\n            'subTitle',\n            'icon',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdResult, self).__init__(**args)\n\n\nsetattr(AntdResult, '__init__', _explicitize_args(AntdResult.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdRibbon.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdRibbon(Component):\n    \"\"\"An AntdRibbon component.\n    缎带组件AntdRibbon\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，添加徽标的目标元素.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - color (string; optional):\n        缎带颜色.\n\n    - placement (a value equal to: 'start', 'end'; default 'end'):\n        缎带显示位置，可选项有`'start'`、`'end'` 默认值：`'end'`.\n\n    - text (a list of or a singular dash component, string or number; optional):\n        组件型，缎带内容.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = ['text']\n    _base_nodes = ['text', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdRibbon'\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        color: typing.Optional[str] = None,\n        placement: typing.Optional[Literal['start', 'end']] = None,\n        text: typing.Optional[ComponentType] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'color',\n            'placement',\n            'text',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'color',\n            'placement',\n            'text',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdRibbon, self).__init__(children=children, **args)\n\n\nsetattr(AntdRibbon, '__init__', _explicitize_args(AntdRibbon.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdRow.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdRow(Component):\n    \"\"\"An AntdRow component.\n    行组件AntdRow\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，内嵌元素.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - align (a value equal to: 'top', 'middle', 'bottom'; default 'top'):\n        竖直方向对齐方式，可选项有`'top'`、`'middle'`、`'bottom'` 默认值：`'top'`.\n\n    - gutter (dict; default 0):\n        网格间隔，传入数值型时为水平像素间隔，传入数组时分别设置水平、垂直像素间隔，传入字典时可为响应式各断点设置水平像素间隔.\n\n        `gutter` is a number | list of numbers | dict with keys:\n\n        - xs (number; optional):\n            页面宽度小于567px时的水平像素间隔.\n\n        - sm (number; optional):\n            页面宽度大于等于567px时的水平像素间隔.\n\n        - md (number; optional):\n            页面宽度大于等于768px时的水平像素间隔.\n\n        - lg (number; optional):\n            页面宽度大于等于992px时的水平像素间隔.\n\n        - xl (number; optional):\n            页面宽度大于等于1200px时的水平像素间隔.\n\n        - xxl (number; optional):\n            页面宽度大于等于1600px时的水平像素间隔.\n\n    - justify (a value equal to: 'start', 'end', 'center', 'space-around', 'space-between'; default 'start'):\n        水平排列方式，可选项有`'start'`、`'end'`、`'center'`、`'space-around'`、`'space-between'`\n        默认值：`'start'`.\n\n    - wrap (boolean; default True):\n        是否允许自动换行 默认值：`True`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = []\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdRow'\n    Gutter = TypedDict(\n        'Gutter',\n        {\n            'xs': NotRequired[NumberType],\n            'sm': NotRequired[NumberType],\n            'md': NotRequired[NumberType],\n            'lg': NotRequired[NumberType],\n            'xl': NotRequired[NumberType],\n            'xxl': NotRequired[NumberType],\n        },\n    )\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        align: typing.Optional[Literal['top', 'middle', 'bottom']] = None,\n        gutter: typing.Optional[\n            typing.Union[NumberType, typing.Sequence[NumberType], 'Gutter']\n        ] = None,\n        justify: typing.Optional[\n            Literal['start', 'end', 'center', 'space-around', 'space-between']\n        ] = None,\n        wrap: typing.Optional[bool] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'align',\n            'gutter',\n            'justify',\n            'wrap',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'align',\n            'gutter',\n            'justify',\n            'wrap',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdRow, self).__init__(children=children, **args)\n\n\nsetattr(AntdRow, '__init__', _explicitize_args(AntdRow.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdSegmented.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdSegmented(Component):\n    \"\"\"An AntdSegmented component.\n    分段控制器组件AntdSegmented\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - options (list of dicts; optional):\n        配置选项相关参数.\n\n        `options` is a list of string | number | dict with keys:\n\n        - label (a list of or a singular dash component, string or number; optional):\n            组件型，选项标题内容.\n\n        - value (string | number; required):\n            必填，选项值.\n\n        - disabled (boolean; optional):\n            是否禁用当前选项 默认值：`False`.\n\n        - icon (string; optional):\n            选项前缀图标，`iconRenderer='AntdIcon'`时同`AntdIcon`，`iconRenderer='fontawesome'`时表示css类名.\n\n        - iconRenderer (a value equal to: 'AntdIcon', 'fontawesome'; optional):\n            选项前缀图标类型，可选项有`'AntdIcon'`、`'fontawesome'` 默认值：`'AntdIcon'`.s\n\n    - value (string | number; optional):\n        监听或设置当前选中值.\n\n    - defaultValue (string | number; optional):\n        设置初始化选中值.\n\n    - block (boolean; default False):\n        是否撑满父容器 默认值：`False`.\n\n    - shape (a value equal to: 'default', 'round'; default 'default'):\n        形状，可选项有`'default'`、`'round'` 默认值：`'default'`.\n\n    - vertical (boolean; default False):\n        是否垂直展示 默认值：`False`.\n\n    - disabled (boolean; default False):\n        是否禁用当前组件 默认值：`False`.\n\n    - size (a value equal to: 'large', 'middle', 'small'; default 'middle'):\n        组件尺寸规格，可选项有`'small'`、`'middle'`、`'large'` 默认值：`'middle'`.\n\n    - batchPropsNames (list of strings; optional):\n        需要纳入[批量属性监听](/batch-props-values)的若干属性名.\n\n    - batchPropsValues (dict; optional):\n        监听`batchPropsNames`中指定的若干属性值.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\n\n    - loading_state (dict; optional)\n\n        `loading_state` is a dict with keys:\n\n        - is_loading (boolean; optional):\n            Determines if the component is loading or not.\n\n        - prop_name (string; optional):\n            Holds which property is loading.\n\n        - component_name (string; optional):\n            Holds the name of the component that is loading.\n\n    - persistence (boolean | string | number; optional):\n        是否开启[属性持久化](/prop-persistence).\n\n    - persisted_props (list of a value equal to: 'value's; optional):\n        开启属性持久化功能的若干属性名，可选项有`'value'` 默认值：`['value']`.\n\n    - persistence_type (a value equal to: 'local', 'session', 'memory'; optional):\n        属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n        默认值：`'local'`.\"\"\"\n\n    _children_props: typing.List[str] = ['options[].label']\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdSegmented'\n    Options = TypedDict(\n        'Options',\n        {\n            'label': NotRequired[ComponentType],\n            'value': typing.Union[str, NumberType],\n            'disabled': NotRequired[bool],\n            'icon': NotRequired[str],\n            'iconRenderer': NotRequired[Literal['AntdIcon', 'fontawesome']],\n        },\n    )\n\n    LoadingState = TypedDict(\n        'LoadingState',\n        {\n            'is_loading': NotRequired[bool],\n            'prop_name': NotRequired[str],\n            'component_name': NotRequired[str],\n        },\n    )\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        options: typing.Optional[typing.Sequence[typing.Union[str, NumberType, 'Options']]] = None,\n        value: typing.Optional[typing.Union[str, NumberType]] = None,\n        defaultValue: typing.Optional[typing.Union[str, NumberType]] = None,\n        block: typing.Optional[bool] = None,\n        shape: typing.Optional[Literal['default', 'round']] = None,\n        vertical: typing.Optional[bool] = None,\n        disabled: typing.Optional[bool] = None,\n        size: typing.Optional[Literal['large', 'middle', 'small']] = None,\n        batchPropsNames: typing.Optional[typing.Sequence[str]] = None,\n        batchPropsValues: typing.Optional[dict] = None,\n        loading_state: typing.Optional['LoadingState'] = None,\n        persistence: typing.Optional[typing.Union[bool, str, NumberType]] = None,\n        persisted_props: typing.Optional[typing.Sequence[Literal['value']]] = None,\n        persistence_type: typing.Optional[Literal['local', 'session', 'memory']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'options',\n            'value',\n            'defaultValue',\n            'block',\n            'shape',\n            'vertical',\n            'disabled',\n            'size',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'loading_state',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'options',\n            'value',\n            'defaultValue',\n            'block',\n            'shape',\n            'vertical',\n            'disabled',\n            'size',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'loading_state',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdSegmented, self).__init__(**args)\n\n\nsetattr(AntdSegmented, '__init__', _explicitize_args(AntdSegmented.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdSegmentedColoring.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdSegmentedColoring(Component):\n    \"\"\"An AntdSegmentedColoring component.\n    分段着色组件AntdSegmentedColoring\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - breakpoints (list of numbers; required):\n        必填，监听或设置分段断点数组.\n\n    - colors (list of strings; required):\n        必填，为各分段设置颜色，数组长度应为`breakpoints`长度减1.\n\n    - controls (boolean; default True):\n        是否为各分段数值输入框添加增减按钮 默认值：`True`.\n\n    - keyboard (boolean; default True):\n        是否可通过键盘上下方向键增减各分段数值输入框数值 默认值：`True`.\n\n    - min (number; optional):\n        各分段数值输入框允许输入数值下限，默认无限制.\n\n    - max (number; optional):\n        各分段数值输入框允许输入数值上限，默认无限制.\n\n    - step (number; default 0.01):\n        各分段数值输入框数值调整步长 默认值：`0.01`.\n\n    - precision (number; default 2):\n        各分段数值输入框数值精度 默认值：`2`.\n\n    - disabled (boolean; default False):\n        是否禁用当前组件 默认值：`False`.\n\n    - size (a value equal to: 'small', 'middle', 'large'; default 'middle'):\n        当前组件尺寸规格，可选项有`'small'`、`'middle'`、`'large'` 默认值：`'middle'`.\n\n    - bordered (boolean; default True):\n        是否显示边框，设置为`True`时等价于`variant='outlined'` 默认值：`True`.\n\n    - variant (a value equal to: 'outlined', 'borderless', 'filled', 'underlined'; optional):\n        形态变体类型，可选项有`'outlined'`、`'borderless'`、`'filled'`、`'underlined'`，其中`'outlined'`等价于`bordered=True`，但优先级更高.\n\n    - placeholder (string; optional):\n        各分段数值输入框占位文字内容.\n\n    - readOnly (boolean; optional):\n        是否渲染为只读状态 默认值：`False`.\n\n    - pureLegend (boolean; default False):\n        是否开启纯图例模式 默认值：`False`.\n\n    - inputNumberStyle (dict; optional):\n        各分段数值输入框统一css样式.\n\n    - colorBlockStyle (dict; optional):\n        色块css样式.\n\n    - colorBlockPosition (a value equal to: 'left', 'right'; default 'right'):\n        色块显示方位，可选项有`'left'`、`'right'` 默认值：`'right'`.\n\n    - colorBlockClickEvent (dict; optional):\n        监听分段色块点击事件.\n\n        `colorBlockClickEvent` is a dict with keys:\n\n        - color (string; optional):\n            被点击色块的颜色值.\n\n        - range (list of numbers; optional):\n            被点击色块对应范围值.\n\n        - timestamp (number; optional):\n            事件对应时间戳.\n\n    - pureLegendLabelStyle (dict; optional):\n        当`pureLegend=True`时，设置各分段数值统一css样式.\n\n    - batchPropsNames (list of strings; optional):\n        需要纳入[批量属性监听](/batch-props-values)的若干属性名.\n\n    - batchPropsValues (dict; optional):\n        监听`batchPropsNames`中指定的若干属性值.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = []\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdSegmentedColoring'\n    ColorBlockClickEvent = TypedDict(\n        'ColorBlockClickEvent',\n        {\n            'color': NotRequired[str],\n            'range': NotRequired[typing.Sequence[NumberType]],\n            'timestamp': NotRequired[NumberType],\n        },\n    )\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        breakpoints: typing.Optional[typing.Sequence[NumberType]] = None,\n        colors: typing.Optional[typing.Sequence[str]] = None,\n        controls: typing.Optional[bool] = None,\n        keyboard: typing.Optional[bool] = None,\n        min: typing.Optional[NumberType] = None,\n        max: typing.Optional[NumberType] = None,\n        step: typing.Optional[NumberType] = None,\n        precision: typing.Optional[NumberType] = None,\n        disabled: typing.Optional[bool] = None,\n        size: typing.Optional[Literal['small', 'middle', 'large']] = None,\n        bordered: typing.Optional[bool] = None,\n        variant: typing.Optional[Literal['outlined', 'borderless', 'filled', 'underlined']] = None,\n        placeholder: typing.Optional[str] = None,\n        readOnly: typing.Optional[bool] = None,\n        pureLegend: typing.Optional[bool] = None,\n        inputNumberStyle: typing.Optional[dict] = None,\n        colorBlockStyle: typing.Optional[dict] = None,\n        colorBlockPosition: typing.Optional[Literal['left', 'right']] = None,\n        colorBlockClickEvent: typing.Optional['ColorBlockClickEvent'] = None,\n        pureLegendLabelStyle: typing.Optional[dict] = None,\n        batchPropsNames: typing.Optional[typing.Sequence[str]] = None,\n        batchPropsValues: typing.Optional[dict] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'breakpoints',\n            'colors',\n            'controls',\n            'keyboard',\n            'min',\n            'max',\n            'step',\n            'precision',\n            'disabled',\n            'size',\n            'bordered',\n            'variant',\n            'placeholder',\n            'readOnly',\n            'pureLegend',\n            'inputNumberStyle',\n            'colorBlockStyle',\n            'colorBlockPosition',\n            'colorBlockClickEvent',\n            'pureLegendLabelStyle',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'breakpoints',\n            'colors',\n            'controls',\n            'keyboard',\n            'min',\n            'max',\n            'step',\n            'precision',\n            'disabled',\n            'size',\n            'bordered',\n            'variant',\n            'placeholder',\n            'readOnly',\n            'pureLegend',\n            'inputNumberStyle',\n            'colorBlockStyle',\n            'colorBlockPosition',\n            'colorBlockClickEvent',\n            'pureLegendLabelStyle',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        for k in ['breakpoints', 'colors']:\n            if k not in args:\n                raise TypeError('Required argument `' + k + '` was not specified.')\n\n        super(AntdSegmentedColoring, self).__init__(**args)\n\n\nsetattr(AntdSegmentedColoring, '__init__', _explicitize_args(AntdSegmentedColoring.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdSelect.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdSelect(Component):\n    \"\"\"An AntdSelect component.\n    下拉选择组件AntdSelect\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果F.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - popupClassName (string; optional):\n        展开菜单css类名.\n\n    - name (string; optional):\n        配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值.\n\n    - enableBatchControl (boolean; default True):\n        控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能 默认值：`True`.\n\n    - locale (a value equal to: 'zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr'; default 'zh-cn'):\n        组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n        默认值：`'zh-cn'`.\n\n    - options (list of dicts; optional):\n        配置下拉选项.\n\n        `options` is a list of string | number | dict with keys:\n\n        - label (a list of or a singular dash component, string or number; required):\n            组件型，当前选项标签内容.\n\n        - value (string\n\n          Or number; required):\n            当前选项值.\n\n        - disabled (boolean; optional):\n            是否禁用当前选项 默认值：`False`.\n\n        - colors (list of strings; optional):\n            针对色带特殊渲染模式，设置生成渐变色带所需的色彩值数组. | dict with keys:\n\n        - group (a list of or a singular dash component, string or number; optional):\n            组件型，当前分组标签内容.\n\n        - options (list of dicts; optional):\n            配置当前分组内选项.\n\n            `options` is a list of dicts with keys:\n\n            - label (a list of or a singular dash component, string or number; required):\n\n                组件型，当前选项标签内容.\n\n            - value (string | number; required):\n\n                当前选项值.\n\n            - disabled (boolean; optional):\n\n                是否禁用当前选项 默认值：`False`.\n\n            - colors (list of strings; optional):\n\n                针对色带特殊渲染模式，设置生成渐变色带所需的色彩值数组.s\n\n    - listHeight (number; default 256):\n        下拉菜单最大像素高度.\n\n    - colorsMode (a value equal to: 'sequential', 'diverging'; default 'sequential'):\n        色带特殊渲染模式下，设置渲染形式，可选项有`'sequential'`、`'diverging'`.\n\n    - colorsNameWidth (number; default 40):\n        色带特殊渲染模式下，设置各选项名称部分像素宽度 默认值：`40`.\n\n    - mode (a value equal to: 'multiple', 'tags'; optional):\n        选择模式，可选项有`'multiple'`（多选）、`'tags'`（自由新增）.\n\n    - disabled (boolean; optional):\n        是否禁用当前组件 默认值：`False`.\n\n    - size (a value equal to: 'small', 'middle', 'large'; default 'middle'):\n        当前组件尺寸规格，可选项有`'small'`、`'middle'`、`'large'` 默认值：`'middle'`.\n\n    - bordered (boolean; default True):\n        是否显示边框，设置为`True`时等价于`variant='outlined'` 默认值：`True`.\n\n    - variant (a value equal to: 'outlined', 'borderless', 'filled', 'underlined'; optional):\n        形态变体类型，可选项有`'outlined'`、`'borderless'`、`'filled'`、`'underlined'`，其中`'outlined'`等价于`bordered=True`，但优先级更高.\n\n    - placeholder (string; optional):\n        输入框占位文字内容.\n\n    - placement (a value equal to: 'bottomLeft', 'bottomRight', 'topLeft', 'topRight'; default 'bottomLeft'):\n        选择面板展开方向，可选项有`'bottomLeft'`、`'bottomRight'`、`'topLeft'`、`'topRight'`\n        默认值：`'bottomLeft'`.\n\n    - value (string | number | list of string | numbers; optional):\n        监听或设置已选值.\n\n    - defaultValue (string | number | list of string | numbers; optional):\n        初始化已选值.\n\n    - maxTagCount (number | a value equal to: 'responsive'; default 5):\n        当`multiple=True`时，已选值展示的最大数量 默认值：`5`.\n\n    - status (a value equal to: 'error', 'warning'; optional):\n        控制校验状态，可选项有`'error'`、`'warning'`.\n\n    - optionFilterProp (a value equal to: 'value', 'label'; default 'value'):\n        基于搜索框中输入内容进行搜索的目标字段，可选项有`'value'`、`'label'` 默认值：`'value'`.\n\n    - searchValue (string; optional):\n        监听搜索框已输入内容.\n\n    - optionFilterMode (a value equal to: 'case-insensitive', 'case-sensitive', 'regex', 'remote-match'; default 'case-insensitive'):\n        搜索匹配模式，可选项有`'case-insensitive'`（大小写不敏感）、`'case-sensitive'`（大小写敏感）、`'regex'`（正则表达式）、`'remote-match'`（远程匹配模式）\n        默认值：`'case-insensitive'`.\n\n    - debounceSearchValue (string; optional):\n        以防抖延时的方式监听搜索框已输入内容.\n\n    - debounceWait (number; default 0):\n        防抖延时时长，单位：毫秒 默认值：`0`.\n\n    - autoSpin (boolean; default False):\n        是否在当前组件相关属性处理回调更新中状态时，以加载中状态进行渲染 默认值：`False`.\n\n    - autoClearSearchValue (boolean; default True):\n        当`mode`为`'multiple'`或`'tags'`时，设置是否在选中项后自动清空搜索框中的内容 默认值：`True`.\n\n    - emptyContent (a list of or a singular dash component, string or number; optional):\n        组件型，自定义空数据状态提示内容.\n\n    - loadingEmptyContent (a list of or a singular dash component, string or number; optional):\n        组件型，自定义加载中状态下的空数据状态提示内容.\n\n    - dropdownBefore (a list of or a singular dash component, string or number; optional):\n        组件型，选择菜单前缀内容.\n\n    - dropdownAfter (a list of or a singular dash component, string or number; optional):\n        组件型，选择菜单后缀内容.\n\n    - prefix (a list of or a singular dash component, string or number; optional):\n        组件型，前缀内嵌内容.\n\n    - suffixIcon (a list of or a singular dash component, string or number; optional):\n        自定义选择框后缀图标内容.\n\n    - allowClear (boolean; default True):\n        是否允许一键清空已选值 默认值：`True`.\n\n    - autoFocus (boolean; default False):\n        是否自动获取焦点 默认值：`False`.\n\n    - popupMatchSelectWidth (boolean; default True):\n        选择菜单是否与选择框同宽，设置为`False`时将关闭虚拟滚动功能 默认值：`True`.\n\n    - readOnly (boolean; optional):\n        是否渲染为只读状态 默认值：`False`.\n\n    - maxCount (number; optional):\n        `'multiple'`及 `'tags'`模式下有效，限制已选项数量上限.\n\n    - showSearch (boolean; optional):\n        是否开启输入框可搜索功能.\n\n    - popupContainer (a value equal to: 'parent', 'body'; default 'body'):\n        相关展开层锚定策略，可选项有`'parent'`、`'body'` 默认值：`'body'`.\n\n    - batchPropsNames (list of strings; optional):\n        需要纳入[批量属性监听](/batch-props-values)的若干属性名.\n\n    - batchPropsValues (dict; optional):\n        监听`batchPropsNames`中指定的若干属性值.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\n\n    - persistence (boolean | string | number; optional):\n        是否开启[属性持久化](/prop-persistence).\n\n    - persisted_props (list of a value equal to: 'value's; optional):\n        开启属性持久化功能的若干属性名，可选项有`'value'` 默认值：`['value']`.\n\n    - persistence_type (a value equal to: 'local', 'session', 'memory'; optional):\n        属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n        默认值：`'local'`.\"\"\"\n\n    _children_props: typing.List[str] = [\n        'options[].label',\n        'options[].group',\n        'options[].options[].label',\n        'emptyContent',\n        'loadingEmptyContent',\n        'dropdownBefore',\n        'dropdownAfter',\n        'prefix',\n        'suffixIcon',\n    ]\n    _base_nodes = [\n        'emptyContent',\n        'loadingEmptyContent',\n        'dropdownBefore',\n        'dropdownAfter',\n        'prefix',\n        'suffixIcon',\n        'children',\n    ]\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdSelect'\n    Options = TypedDict(\n        'Options',\n        {\n            'group': NotRequired[ComponentType],\n            'options': NotRequired[typing.Sequence['OptionsOptions']],\n        },\n    )\n\n    OptionsOptions = TypedDict(\n        'OptionsOptions',\n        {\n            'label': ComponentType,\n            'value': typing.Union[str, NumberType],\n            'disabled': NotRequired[bool],\n            'colors': NotRequired[typing.Sequence[str]],\n        },\n    )\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        popupClassName: typing.Optional[str] = None,\n        name: typing.Optional[str] = None,\n        enableBatchControl: typing.Optional[bool] = None,\n        locale: typing.Optional[Literal['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']] = None,\n        options: typing.Optional[typing.Sequence[typing.Union[str, NumberType, 'Options']]] = None,\n        listHeight: typing.Optional[NumberType] = None,\n        colorsMode: typing.Optional[Literal['sequential', 'diverging']] = None,\n        colorsNameWidth: typing.Optional[NumberType] = None,\n        mode: typing.Optional[Literal['multiple', 'tags']] = None,\n        disabled: typing.Optional[bool] = None,\n        size: typing.Optional[Literal['small', 'middle', 'large']] = None,\n        bordered: typing.Optional[bool] = None,\n        variant: typing.Optional[Literal['outlined', 'borderless', 'filled', 'underlined']] = None,\n        placeholder: typing.Optional[str] = None,\n        placement: typing.Optional[\n            Literal['bottomLeft', 'bottomRight', 'topLeft', 'topRight']\n        ] = None,\n        value: typing.Optional[\n            typing.Union[\n                typing.Union[str, NumberType], typing.Sequence[typing.Union[str, NumberType]]\n            ]\n        ] = None,\n        defaultValue: typing.Optional[\n            typing.Union[\n                typing.Union[str, NumberType], typing.Sequence[typing.Union[str, NumberType]]\n            ]\n        ] = None,\n        maxTagCount: typing.Optional[typing.Union[NumberType, Literal['responsive']]] = None,\n        status: typing.Optional[Literal['error', 'warning']] = None,\n        optionFilterProp: typing.Optional[Literal['value', 'label']] = None,\n        searchValue: typing.Optional[str] = None,\n        optionFilterMode: typing.Optional[\n            Literal['case-insensitive', 'case-sensitive', 'regex', 'remote-match']\n        ] = None,\n        debounceSearchValue: typing.Optional[str] = None,\n        debounceWait: typing.Optional[NumberType] = None,\n        autoSpin: typing.Optional[bool] = None,\n        autoClearSearchValue: typing.Optional[bool] = None,\n        emptyContent: typing.Optional[ComponentType] = None,\n        loadingEmptyContent: typing.Optional[ComponentType] = None,\n        dropdownBefore: typing.Optional[ComponentType] = None,\n        dropdownAfter: typing.Optional[ComponentType] = None,\n        prefix: typing.Optional[ComponentType] = None,\n        suffixIcon: typing.Optional[ComponentType] = None,\n        allowClear: typing.Optional[bool] = None,\n        autoFocus: typing.Optional[bool] = None,\n        popupMatchSelectWidth: typing.Optional[bool] = None,\n        readOnly: typing.Optional[bool] = None,\n        maxCount: typing.Optional[NumberType] = None,\n        showSearch: typing.Optional[bool] = None,\n        popupContainer: typing.Optional[Literal['parent', 'body']] = None,\n        batchPropsNames: typing.Optional[typing.Sequence[str]] = None,\n        batchPropsValues: typing.Optional[dict] = None,\n        persistence: typing.Optional[typing.Union[bool, str, NumberType]] = None,\n        persisted_props: typing.Optional[typing.Sequence[Literal['value']]] = None,\n        persistence_type: typing.Optional[Literal['local', 'session', 'memory']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'popupClassName',\n            'name',\n            'enableBatchControl',\n            'locale',\n            'options',\n            'listHeight',\n            'colorsMode',\n            'colorsNameWidth',\n            'mode',\n            'disabled',\n            'size',\n            'bordered',\n            'variant',\n            'placeholder',\n            'placement',\n            'value',\n            'defaultValue',\n            'maxTagCount',\n            'status',\n            'optionFilterProp',\n            'searchValue',\n            'optionFilterMode',\n            'debounceSearchValue',\n            'debounceWait',\n            'autoSpin',\n            'autoClearSearchValue',\n            'emptyContent',\n            'loadingEmptyContent',\n            'dropdownBefore',\n            'dropdownAfter',\n            'prefix',\n            'suffixIcon',\n            'allowClear',\n            'autoFocus',\n            'popupMatchSelectWidth',\n            'readOnly',\n            'maxCount',\n            'showSearch',\n            'popupContainer',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'popupClassName',\n            'name',\n            'enableBatchControl',\n            'locale',\n            'options',\n            'listHeight',\n            'colorsMode',\n            'colorsNameWidth',\n            'mode',\n            'disabled',\n            'size',\n            'bordered',\n            'variant',\n            'placeholder',\n            'placement',\n            'value',\n            'defaultValue',\n            'maxTagCount',\n            'status',\n            'optionFilterProp',\n            'searchValue',\n            'optionFilterMode',\n            'debounceSearchValue',\n            'debounceWait',\n            'autoSpin',\n            'autoClearSearchValue',\n            'emptyContent',\n            'loadingEmptyContent',\n            'dropdownBefore',\n            'dropdownAfter',\n            'prefix',\n            'suffixIcon',\n            'allowClear',\n            'autoFocus',\n            'popupMatchSelectWidth',\n            'readOnly',\n            'maxCount',\n            'showSearch',\n            'popupContainer',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdSelect, self).__init__(**args)\n\n\nsetattr(AntdSelect, '__init__', _explicitize_args(AntdSelect.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdSider.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdSider(Component):\n    \"\"\"An AntdSider component.\n    侧边栏组件AntdSider\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，内嵌元素.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - collapsed (boolean; optional):\n        当前是否收起.\n\n    - collapsedWidth (number; default 80):\n        收起后呈现的像素宽度，设置为0时会额外渲染特殊触发组件 默认值：`80`.\n\n    - collapsible (boolean; default False):\n        是否可收起 默认值：`False`.\n\n    - reverseArrow (boolean; default False):\n        是否翻转收起箭头的方向，通常在Sider位于右侧时使用 默认值：`False`.\n\n    - theme (a value equal to: 'light', 'dark'; default 'dark'):\n        主题，可选项有`'light'`、`'dark'` 默认值：`'dark'`.\n\n    - width (number | string; default 200):\n        侧边栏像素宽度 默认值：`200`.\n\n    - trigger (a list of or a singular dash component, string or number; optional):\n        设置为`None`时不渲染自带的特殊触发组件.\n\n    - breakpoint (a value equal to: 'xs', 'sm', 'md', 'lg', 'xl', 'xxl'; optional):\n        侧边栏自动收起对应的响应式断点.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = ['trigger']\n    _base_nodes = ['trigger', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdSider'\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        collapsed: typing.Optional[bool] = None,\n        collapsedWidth: typing.Optional[NumberType] = None,\n        collapsible: typing.Optional[bool] = None,\n        reverseArrow: typing.Optional[bool] = None,\n        theme: typing.Optional[Literal['light', 'dark']] = None,\n        width: typing.Optional[typing.Union[NumberType, str]] = None,\n        trigger: typing.Optional[ComponentType] = None,\n        breakpoint: typing.Optional[Literal['xs', 'sm', 'md', 'lg', 'xl', 'xxl']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'collapsed',\n            'collapsedWidth',\n            'collapsible',\n            'reverseArrow',\n            'theme',\n            'width',\n            'trigger',\n            'breakpoint',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'collapsed',\n            'collapsedWidth',\n            'collapsible',\n            'reverseArrow',\n            'theme',\n            'width',\n            'trigger',\n            'breakpoint',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdSider, self).__init__(children=children, **args)\n\n\nsetattr(AntdSider, '__init__', _explicitize_args(AntdSider.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdSkeleton.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdSkeleton(Component):\n    \"\"\"An AntdSkeleton component.\n    骨架屏组件AntdSkeleton\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，内嵌元素.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - loading (boolean; default False):\n        是否处于加载中状态.\n\n    - active (boolean; default False):\n        是否显示动画 默认值：`False`.\n\n    - delay (number; default 0):\n        加载动画渲染延时，单位：毫秒 默认值：`0`.\n\n    - avatar (dict; default False):\n        配置头像占位图相关参数，设置为`False`时不显示 默认值：`True`.\n\n        `avatar` is a boolean | dict with keys:\n\n        - active (boolean; optional):\n            头像占位图是否显示动画 默认值：`False`.\n\n        - shape (a value equal to: 'circle', 'square'; optional):\n            头像占位图形状，可选项有`'circle'`、`'square'`.\n\n        - size (number | a value equal to: 'large', 'small', 'default'; optional):\n            头像占位图尺寸，传入数值型表示像素尺寸，也可传入预设的尺寸规格，可选项有`'large'`、`'small'`、`'default'`\n            默认值：`'default'`.\n\n    - paragraph (dict; default True):\n        配置段落占位图相关参数，设置为`False`时不显示 默认值：`True`.\n\n        `paragraph` is a boolean | dict with keys:\n\n        - rows (number; optional):\n            段落占位图行数.\n\n        - width (number | string | list of number | strings; optional):\n            段落占位图宽度，当传入*int*或*string*型时，用于设置段落占位图最后一行的宽度，当传入*list*型时，用于逐行设置宽度.\n\n    - title (dict; default True):\n        是否显示标题占位图 默认值：`True`.\n\n        `title` is a boolean | dict with keys:\n\n        - width (number | string; optional):\n            标题占位图宽度.\n\n    - round (boolean; default False):\n        段落、标题占位图是否渲染圆角 默认值：`False`.\n\n    - debug (boolean; default False):\n        是否开启debug模式，开启后，每次动画加载都会在开发者工具的控制台打印相关`prop`信息 默认值：`False`.\n\n    - listenPropsMode (a value equal to: 'default', 'exclude', 'include'; default 'default'):\n        监听模式，可选项有`'default'`、`'exclude'`、`'include'` 默认值：`'default'`.\n\n    - excludeProps (list of strings; optional):\n        `listenPropsMode='exclude'`时，设置需要排除监听的回调目标列表，格式如`['组件id1.组件属性1',\n        '组件id2.组件属性2', ...]`.\n\n    - includeProps (list of strings; optional):\n        `listenPropsMode='include'`时，设置需要包含监听的回调目标列表，格式如`['组件id1.组件属性1',\n        '组件id2.组件属性2', ...]`.\n\n    - manual (boolean; default False):\n        是否开启手动控制模式，开启后是否处于加载状态将由`loading`参数控制，与内部元素参与的回调状态无关 默认值：`False`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = []\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdSkeleton'\n    Avatar = TypedDict(\n        'Avatar',\n        {\n            'active': NotRequired[bool],\n            'shape': NotRequired[Literal['circle', 'square']],\n            'size': NotRequired[typing.Union[NumberType, Literal['large', 'small', 'default']]],\n        },\n    )\n\n    Paragraph = TypedDict(\n        'Paragraph',\n        {\n            'rows': NotRequired[NumberType],\n            'width': NotRequired[\n                typing.Union[NumberType, str, typing.Sequence[typing.Union[NumberType, str]]]\n            ],\n        },\n    )\n\n    Title = TypedDict('Title', {'width': NotRequired[typing.Union[NumberType, str]]})\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        loading: typing.Optional[bool] = None,\n        active: typing.Optional[bool] = None,\n        delay: typing.Optional[NumberType] = None,\n        avatar: typing.Optional[typing.Union[bool, 'Avatar']] = None,\n        paragraph: typing.Optional[typing.Union[bool, 'Paragraph']] = None,\n        title: typing.Optional[typing.Union[bool, 'Title']] = None,\n        round: typing.Optional[bool] = None,\n        debug: typing.Optional[bool] = None,\n        listenPropsMode: typing.Optional[Literal['default', 'exclude', 'include']] = None,\n        excludeProps: typing.Optional[typing.Sequence[str]] = None,\n        includeProps: typing.Optional[typing.Sequence[str]] = None,\n        manual: typing.Optional[bool] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'loading',\n            'active',\n            'delay',\n            'avatar',\n            'paragraph',\n            'title',\n            'round',\n            'debug',\n            'listenPropsMode',\n            'excludeProps',\n            'includeProps',\n            'manual',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'loading',\n            'active',\n            'delay',\n            'avatar',\n            'paragraph',\n            'title',\n            'round',\n            'debug',\n            'listenPropsMode',\n            'excludeProps',\n            'includeProps',\n            'manual',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdSkeleton, self).__init__(children=children, **args)\n\n\nsetattr(AntdSkeleton, '__init__', _explicitize_args(AntdSkeleton.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdSkeletonAvatar.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdSkeletonAvatar(Component):\n    \"\"\"An AntdSkeletonAvatar component.\n    骨骼屏头像占位图组件AntdSkeletonAvatar\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - active (boolean; default False):\n        是否显示动画 默认值：`False`.\n\n    - shape (a value equal to: 'circle', 'square'; default 'circle'):\n        头像占位图形状，可选项有`'circle'`、`'square'` 默认值：`'circle'`.\n\n    - size (number | a value equal to: 'large', 'small', 'default'; default 'default'):\n        头像占位图尺寸，传入数值型表示像素尺寸，也可传入预设的尺寸规格，可选项有`'large'`、`'small'`、`'default'`\n        默认值：`'default'`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = []\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdSkeletonAvatar'\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        active: typing.Optional[bool] = None,\n        shape: typing.Optional[Literal['circle', 'square']] = None,\n        size: typing.Optional[\n            typing.Union[NumberType, Literal['large', 'small', 'default']]\n        ] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'active',\n            'shape',\n            'size',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'active',\n            'shape',\n            'size',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdSkeletonAvatar, self).__init__(**args)\n\n\nsetattr(AntdSkeletonAvatar, '__init__', _explicitize_args(AntdSkeletonAvatar.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdSkeletonButton.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdSkeletonButton(Component):\n    \"\"\"An AntdSkeletonButton component.\n    骨骼屏按钮占位图组件AntdSkeletonButton\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - active (boolean; default False):\n        是否显示动画 默认值：`False`.\n\n    - block (boolean; default False):\n        是否撑满父容器 默认值：`False`.\n\n    - shape (a value equal to: 'circle', 'round', 'default'; default 'default'):\n        按钮占位图形状，可选项有`'circle'`、`'round'`、`'default'` 默认值：`'default'`.\n\n    - size (a value equal to: 'large', 'small', 'default'; default 'default'):\n        按钮占位图尺寸，可选项有`'large'`、`'small'`、`'default'` 默认值：`'default'`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = []\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdSkeletonButton'\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        active: typing.Optional[bool] = None,\n        block: typing.Optional[bool] = None,\n        shape: typing.Optional[Literal['circle', 'round', 'default']] = None,\n        size: typing.Optional[Literal['large', 'small', 'default']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'active',\n            'block',\n            'shape',\n            'size',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'active',\n            'block',\n            'shape',\n            'size',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdSkeletonButton, self).__init__(**args)\n\n\nsetattr(AntdSkeletonButton, '__init__', _explicitize_args(AntdSkeletonButton.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdSkeletonImage.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdSkeletonImage(Component):\n    \"\"\"An AntdSkeletonImage component.\n    骨骼屏图片占位图组件AntdSkeletonImage\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = []\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdSkeletonImage'\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        **kwargs,\n    ):\n        self._prop_names = ['id', 'key', 'style', 'className', 'data-*', 'aria-*']\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = ['id', 'key', 'style', 'className', 'data-*', 'aria-*']\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdSkeletonImage, self).__init__(**args)\n\n\nsetattr(AntdSkeletonImage, '__init__', _explicitize_args(AntdSkeletonImage.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdSkeletonInput.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdSkeletonInput(Component):\n    \"\"\"An AntdSkeletonInput component.\n    骨骼屏输入框占位图组件AntdSkeletonInput\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - active (boolean; default False):\n        是否显示动画 默认值：`False`.\n\n    - size (a value equal to: 'large', 'small', 'default'; default 'default'):\n        输入框占位图尺寸，可选项有`'large'`、`'small'`、`'default'` 默认值：`'default'`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = []\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdSkeletonInput'\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        active: typing.Optional[bool] = None,\n        size: typing.Optional[Literal['large', 'small', 'default']] = None,\n        **kwargs,\n    ):\n        self._prop_names = ['id', 'key', 'style', 'className', 'active', 'size', 'data-*', 'aria-*']\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'active',\n            'size',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdSkeletonInput, self).__init__(**args)\n\n\nsetattr(AntdSkeletonInput, '__init__', _explicitize_args(AntdSkeletonInput.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdSlider.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdSlider(Component):\n    \"\"\"An AntdSlider component.\n    滑动输入条组件AntdSlider\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - styles (dict; optional):\n        细分控制子元素css样式.\n\n        `styles` is a dict with keys:\n\n        - root (dict; optional):\n            根元素css样式.\n\n        - track (dict; optional):\n            范围选择下，点和点之间单个选取条css样式.\n\n        - tracks (dict; optional):\n            范围选择下，整个范围选取条css样式.\n\n        - rail (dict; optional):\n            背景条css样式.\n\n        - handle (dict; optional):\n            抓取点元素css样式.\n\n    - classNames (dict; optional):\n        细分控制子元素css类名.\n\n        `classNames` is a dict with keys:\n\n        - root (string; optional):\n            根元素css类名.\n\n        - track (string; optional):\n            范围选择下，点和点之间单个选取条css类名.\n\n        - tracks (string; optional):\n            范围选择下，整个范围选取条css类名.\n\n        - rail (string; optional):\n            背景条css类名.\n\n        - handle (string; optional):\n            抓取点元素css类名.\n\n    - name (string; optional):\n        配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值.\n\n    - enableBatchControl (boolean; default True):\n        控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能 默认值：`True`.\n\n    - vertical (boolean; default False):\n        是否以垂直模式显示 默认值：`False`.\n\n    - range (dict; default False):\n        是否以范围模式显示.\n\n        `range` is a boolean | dict with keys:\n\n        - editable (boolean; optional):\n            是否开启节点动态增减功能 默认值：`False`.\n\n        - minCount (number; optional):\n            开启节点动态增减功能后，允许的最小节点数量 默认值：`0`.\n\n        - maxCount (number; optional):\n            开启节点动态增减功能后，允许的最大节点数量.\n\n    - min (number; default 0):\n        必填，可滑动范围下限.\n\n    - max (number; default 100):\n        必填，可滑动范围上限.\n\n    - step (number; default 1):\n        滑动步长.\n\n    - marks (dict with strings as keys and values of type a list of or a singular dash component, string or number; optional):\n        为部分数值设置刻度信息.\n\n    - tooltipVisible (boolean; optional):\n        滑动数值文字提示显示策略，`True`表示持续显示，`False`表示始终不显示.\n\n    - tooltipPrefix (string; default ''):\n        滑动数值文字提示前缀信息.\n\n    - tooltipSuffix (string; default ''):\n        滑动数值文字提示后缀信息.\n\n    - disabled (boolean; default False):\n        是否禁用当前组件 默认值：`False`.\n\n    - value (number | list of numbers; optional):\n        监听或设置已选值.\n\n    - defaultValue (number | list of numbers; optional):\n        初始化已选值.\n\n    - autoFocus (boolean; default False):\n        是否允许一键清空已选值 默认值：`True`.\n\n    - popupContainer (a value equal to: 'parent', 'body'; default 'body'):\n        相关展开层锚定策略，可选项有`'parent'`、`'body'` 默认值：`'body'`.\n\n    - readOnly (boolean; default False):\n        是否渲染为只读状态 默认值：`False`.\n\n    - batchPropsNames (list of strings; optional):\n        需要纳入[批量属性监听](/batch-props-values)的若干属性名.\n\n    - batchPropsValues (dict; optional):\n        监听`batchPropsNames`中指定的若干属性值.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\n\n    - persistence (boolean | string | number; optional):\n        是否开启[属性持久化](/prop-persistence).\n\n    - persisted_props (list of a value equal to: 'value's; optional):\n        开启属性持久化功能的若干属性名，可选项有`'value'` 默认值：`['value']`.\n\n    - persistence_type (a value equal to: 'local', 'session', 'memory'; optional):\n        属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n        默认值：`'local'`.\"\"\"\n\n    _children_props: typing.List[str] = ['marks{}']\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdSlider'\n    Styles = TypedDict(\n        'Styles',\n        {\n            'root': NotRequired[dict],\n            'track': NotRequired[dict],\n            'tracks': NotRequired[dict],\n            'rail': NotRequired[dict],\n            'handle': NotRequired[dict],\n        },\n    )\n\n    ClassNames = TypedDict(\n        'ClassNames',\n        {\n            'root': NotRequired[str],\n            'track': NotRequired[str],\n            'tracks': NotRequired[str],\n            'rail': NotRequired[str],\n            'handle': NotRequired[str],\n        },\n    )\n\n    Range = TypedDict(\n        'Range',\n        {\n            'editable': NotRequired[bool],\n            'minCount': NotRequired[NumberType],\n            'maxCount': NotRequired[NumberType],\n        },\n    )\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        styles: typing.Optional['Styles'] = None,\n        classNames: typing.Optional['ClassNames'] = None,\n        name: typing.Optional[str] = None,\n        enableBatchControl: typing.Optional[bool] = None,\n        vertical: typing.Optional[bool] = None,\n        range: typing.Optional[typing.Union[bool, 'Range']] = None,\n        min: typing.Optional[NumberType] = None,\n        max: typing.Optional[NumberType] = None,\n        step: typing.Optional[NumberType] = None,\n        marks: typing.Optional[typing.Dict[typing.Union[str, float, int], ComponentType]] = None,\n        tooltipVisible: typing.Optional[bool] = None,\n        tooltipPrefix: typing.Optional[str] = None,\n        tooltipSuffix: typing.Optional[str] = None,\n        disabled: typing.Optional[bool] = None,\n        value: typing.Optional[typing.Union[NumberType, typing.Sequence[NumberType]]] = None,\n        defaultValue: typing.Optional[typing.Union[NumberType, typing.Sequence[NumberType]]] = None,\n        autoFocus: typing.Optional[bool] = None,\n        popupContainer: typing.Optional[Literal['parent', 'body']] = None,\n        readOnly: typing.Optional[bool] = None,\n        batchPropsNames: typing.Optional[typing.Sequence[str]] = None,\n        batchPropsValues: typing.Optional[dict] = None,\n        persistence: typing.Optional[typing.Union[bool, str, NumberType]] = None,\n        persisted_props: typing.Optional[typing.Sequence[Literal['value']]] = None,\n        persistence_type: typing.Optional[Literal['local', 'session', 'memory']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'styles',\n            'classNames',\n            'name',\n            'enableBatchControl',\n            'vertical',\n            'range',\n            'min',\n            'max',\n            'step',\n            'marks',\n            'tooltipVisible',\n            'tooltipPrefix',\n            'tooltipSuffix',\n            'disabled',\n            'value',\n            'defaultValue',\n            'autoFocus',\n            'popupContainer',\n            'readOnly',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'styles',\n            'classNames',\n            'name',\n            'enableBatchControl',\n            'vertical',\n            'range',\n            'min',\n            'max',\n            'step',\n            'marks',\n            'tooltipVisible',\n            'tooltipPrefix',\n            'tooltipSuffix',\n            'disabled',\n            'value',\n            'defaultValue',\n            'autoFocus',\n            'popupContainer',\n            'readOnly',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdSlider, self).__init__(**args)\n\n\nsetattr(AntdSlider, '__init__', _explicitize_args(AntdSlider.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdSpace.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdSpace(Component):\n    \"\"\"An AntdSpace component.\n    排列组件AntdSpace\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，内嵌元素.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - styles (dict; optional):\n        细分控制子元素css样式.\n\n        `styles` is a dict with keys:\n\n        - item (dict; optional):\n            控制子项容器元素css样式.\n\n    - classNames (dict; optional):\n        细分控制子元素css类.\n\n        `classNames` is a dict with keys:\n\n        - item (string; optional):\n            控制子项容器元素css类.\n\n    - align (a value equal to: 'start', 'end', 'center', 'baseline'; optional):\n        对齐方式，可选项有`'start'`、`'end'`、`'center'`、`'baseline'`.\n\n    - direction (a value equal to: 'vertical', 'horizontal'; default 'horizontal'):\n        排列方向，可选项有`'vertical'`、`'horizontal'` 默认值：`'horizontal'`.\n\n    - size (a value equal to: 'small', 'middle', 'large' | number; default 'small'):\n        子元素间隔大小，可选项有`'small'`、`'middle'`、`'large'`，或直接设置数值型代表像素间隔\n        默认值：`'small'`.\n\n    - addSplitLine (boolean; default False):\n        是否添加分隔线 默认值：`False`.\n\n    - customSplit (a list of or a singular dash component, string or number; optional):\n        自定义分隔线元素.\n\n    - wrap (boolean; default False):\n        子元素是否自动换行，仅`direction='horizontal'`时有效 默认值：`False`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = ['customSplit']\n    _base_nodes = ['customSplit', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdSpace'\n    Styles = TypedDict('Styles', {'item': NotRequired[dict]})\n\n    ClassNames = TypedDict('ClassNames', {'item': NotRequired[str]})\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        styles: typing.Optional['Styles'] = None,\n        classNames: typing.Optional['ClassNames'] = None,\n        align: typing.Optional[Literal['start', 'end', 'center', 'baseline']] = None,\n        direction: typing.Optional[Literal['vertical', 'horizontal']] = None,\n        size: typing.Optional[typing.Union[Literal['small', 'middle', 'large'], NumberType]] = None,\n        addSplitLine: typing.Optional[bool] = None,\n        customSplit: typing.Optional[ComponentType] = None,\n        wrap: typing.Optional[bool] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'styles',\n            'classNames',\n            'align',\n            'direction',\n            'size',\n            'addSplitLine',\n            'customSplit',\n            'wrap',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'styles',\n            'classNames',\n            'align',\n            'direction',\n            'size',\n            'addSplitLine',\n            'customSplit',\n            'wrap',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdSpace, self).__init__(children=children, **args)\n\n\nsetattr(AntdSpace, '__init__', _explicitize_args(AntdSpace.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdSpin.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdSpin(Component):\n    \"\"\"An AntdSpin component.\n    加载动画组件AntdSpin\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，内嵌元素.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - wrapperClassName (string | dict; optional):\n        外层容器css类名.\n\n    - spinning (boolean; default False):\n        是否处于加载中状态.\n\n    - size (a value equal to: 'small', 'middle', 'large'; default 'middle'):\n        默认加载状态图标的尺寸，可选项有`'small'`、`'middle'`、`'large'` 默认值：`'middle'`.\n\n    - delay (number; optional):\n        加载动画渲染延时，单位：毫秒 默认值：`0`.\n\n    - text (string; optional):\n        加载动画提示文字.\n\n    - fullscreen (boolean; default False):\n        是否开启全屏模式 默认值：`False`.\n\n    - debug (boolean; default False):\n        是否开启debug模式，开启后，每次动画加载都会在开发者工具的控制台打印相关`prop`信息 默认值：`False`.\n\n    - listenPropsMode (a value equal to: 'default', 'exclude', 'include'; default 'default'):\n        监听模式，可选项有`'default'`、`'exclude'`、`'include'` 默认值：`'default'`.\n\n    - excludeProps (list of strings; optional):\n        `listenPropsMode='exclude'`时，设置需要排除监听的回调目标列表，格式如`['组件id1.组件属性1',\n        '组件id2.组件属性2', ...]`.\n\n    - includeProps (list of strings; optional):\n        `listenPropsMode='include'`时，设置需要包含监听的回调目标列表，格式如`['组件id1.组件属性1',\n        '组件id2.组件属性2', ...]`.\n\n    - indicator (a list of or a singular dash component, string or number; optional):\n        组件型，自定义加载状态图标.\n\n    - manual (boolean; default False):\n        是否开启手动控制模式，开启后是否处于加载状态将由`spinning`参数控制，与内部元素参与的回调状态无关 默认值：`False`.\n\n    - percent (number | a value equal to: 'auto'; optional):\n        控制加载中状态下的环状进度渲染形式，传入0到100之间数值型时表示实际进度，传入`'auto'`时会预估一个永远不会停止的进度.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = ['indicator']\n    _base_nodes = ['indicator', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdSpin'\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        wrapperClassName: typing.Optional[typing.Union[str, dict]] = None,\n        spinning: typing.Optional[bool] = None,\n        size: typing.Optional[Literal['small', 'middle', 'large']] = None,\n        delay: typing.Optional[NumberType] = None,\n        text: typing.Optional[str] = None,\n        fullscreen: typing.Optional[bool] = None,\n        debug: typing.Optional[bool] = None,\n        listenPropsMode: typing.Optional[Literal['default', 'exclude', 'include']] = None,\n        excludeProps: typing.Optional[typing.Sequence[str]] = None,\n        includeProps: typing.Optional[typing.Sequence[str]] = None,\n        indicator: typing.Optional[ComponentType] = None,\n        manual: typing.Optional[bool] = None,\n        percent: typing.Optional[typing.Union[NumberType, Literal['auto']]] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'wrapperClassName',\n            'spinning',\n            'size',\n            'delay',\n            'text',\n            'fullscreen',\n            'debug',\n            'listenPropsMode',\n            'excludeProps',\n            'includeProps',\n            'indicator',\n            'manual',\n            'percent',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'wrapperClassName',\n            'spinning',\n            'size',\n            'delay',\n            'text',\n            'fullscreen',\n            'debug',\n            'listenPropsMode',\n            'excludeProps',\n            'includeProps',\n            'indicator',\n            'manual',\n            'percent',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdSpin, self).__init__(children=children, **args)\n\n\nsetattr(AntdSpin, '__init__', _explicitize_args(AntdSpin.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdSplitter.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdSplitter(Component):\n    \"\"\"An AntdSplitter component.\n    分隔面板组件AntdSplitter\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - layout (a value equal to: 'horizontal', 'vertical'; default 'horizontal'):\n        布局方向，可选项有`'horizontal'`、`'vertical'` 默认值：`'horizontal'`.\n\n    - items (list of dicts; required):\n        配置分隔面板子项.\n\n        `items` is a list of dicts with keys:\n\n        - key (string; optional):\n            当前子项唯一识别`key`.\n\n        - children (a list of or a singular dash component, string or number; optional):\n            组件型，内嵌元素.\n\n        - style (dict; optional):\n            当前子项`css`样式.\n\n        - className (string; optional):\n            当前子项`css`类名.\n\n        - defaultSize (number\n\n          Or string; optional):\n            初始面板尺寸，支持数字`px`或者文字`'百分比%'`类型.\n\n        - size (number | string; optional):\n            面板尺寸，支持数字`px`或者文字`'百分比%'`类型.\n\n        - min (number | string; optional):\n            最小尺寸，支持数字`px`或者文字`'百分比%'`类型.\n\n        - max (number | string; optional):\n            最大尺寸，支持数字`px`或者文字`'百分比%'`类型.\n\n        - collapsible (dict; optional):\n            是否可折叠 默认值：`False`.\n\n            `collapsible` is a boolean | dict with keys:\n\n            - start (boolean; optional)\n\n            - end (boolean; optional)\n\n        - resizable (boolean; optional):\n            是否开启拖拽伸缩 默认值：`True`.\n\n    - lazy (boolean; default False):\n        是否开启延迟渲染模式，开启后面板将在拖拽调整完成后才进行更新渲染 默认值：`False`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = ['items[].children']\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdSplitter'\n    ItemsCollapsible = TypedDict(\n        'ItemsCollapsible', {'start': NotRequired[bool], 'end': NotRequired[bool]}\n    )\n\n    Items = TypedDict(\n        'Items',\n        {\n            'key': NotRequired[str],\n            'children': NotRequired[ComponentType],\n            'style': NotRequired[dict],\n            'className': NotRequired[str],\n            'defaultSize': NotRequired[typing.Union[NumberType, str]],\n            'size': NotRequired[typing.Union[NumberType, str]],\n            'min': NotRequired[typing.Union[NumberType, str]],\n            'max': NotRequired[typing.Union[NumberType, str]],\n            'collapsible': NotRequired[typing.Union[bool, 'ItemsCollapsible']],\n            'resizable': NotRequired[bool],\n        },\n    )\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        layout: typing.Optional[Literal['horizontal', 'vertical']] = None,\n        items: typing.Optional[typing.Sequence['Items']] = None,\n        lazy: typing.Optional[bool] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'layout',\n            'items',\n            'lazy',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'layout',\n            'items',\n            'lazy',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        for k in ['items']:\n            if k not in args:\n                raise TypeError('Required argument `' + k + '` was not specified.')\n\n        super(AntdSplitter, self).__init__(**args)\n\n\nsetattr(AntdSplitter, '__init__', _explicitize_args(AntdSplitter.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdSpoiler.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdSpoiler(Component):\n    \"\"\"An AntdSpoiler component.\n    展开收起组件AntdSpoiler\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，内嵌元素.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - contentClassName (string | dict; optional):\n        内容区css类名，支持[动态css](/advanced-classname).\n\n    - contentStyle (dict; optional):\n        内容区css样式.\n\n    - locale (a value equal to: 'zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr'; default 'zh-cn'):\n        组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n        默认值：`'zh-cn'`.\n\n    - hideLabel (a list of or a singular dash component, string or number; optional):\n        组件型，展开状态下，收起按钮的文案内容.\n\n    - showLabel (a list of or a singular dash component, string or number; optional):\n        组件型，收起状态下，展开按钮的文案内容.\n\n    - labelPosition (a value equal to: 'left', 'right'; default 'left'):\n        展开/收起按钮的位置，可选项有`'left'`、`'right'` 默认值：`'left'`.\n\n    - open (boolean; default False):\n        监听或设置是否处于展开状态 默认值：`False`.\n\n    - maxHeight (number; default 50):\n        收起状态下，内容区域最大像素高度 默认值：`50`.\n\n    - transitionDuration (number; default 0.1):\n        展开/收起过渡动画耗时，单位：秒 默认值：`0.1`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = ['hideLabel', 'showLabel']\n    _base_nodes = ['hideLabel', 'showLabel', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdSpoiler'\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        contentClassName: typing.Optional[typing.Union[str, dict]] = None,\n        contentStyle: typing.Optional[dict] = None,\n        locale: typing.Optional[Literal['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']] = None,\n        hideLabel: typing.Optional[ComponentType] = None,\n        showLabel: typing.Optional[ComponentType] = None,\n        labelPosition: typing.Optional[Literal['left', 'right']] = None,\n        open: typing.Optional[bool] = None,\n        maxHeight: typing.Optional[NumberType] = None,\n        transitionDuration: typing.Optional[NumberType] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'contentClassName',\n            'contentStyle',\n            'locale',\n            'hideLabel',\n            'showLabel',\n            'labelPosition',\n            'open',\n            'maxHeight',\n            'transitionDuration',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'contentClassName',\n            'contentStyle',\n            'locale',\n            'hideLabel',\n            'showLabel',\n            'labelPosition',\n            'open',\n            'maxHeight',\n            'transitionDuration',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdSpoiler, self).__init__(children=children, **args)\n\n\nsetattr(AntdSpoiler, '__init__', _explicitize_args(AntdSpoiler.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdStatistic.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdStatistic(Component):\n    \"\"\"An AntdStatistic component.\n    统计数值组件AntdStatistic\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - value (number | string | a list of or a singular dash component, string or number; optional):\n        支持组件型，要展示的数值.\n\n    - showGroupSeparator (boolean; default True):\n        是否为数值型`value`添加千分位符 默认值：`True`.\n\n    - precision (number; optional):\n        针对数值型`value`，设置数值精度.\n\n    - prefix (a list of or a singular dash component, string or number; optional):\n        组件型，数值前缀内容.\n\n    - suffix (a list of or a singular dash component, string or number; optional):\n        组件型，数值后缀内容.\n\n    - title (a list of or a singular dash component, string or number; optional):\n        组件型，标题内容.\n\n    - titleTooltip (string; optional):\n        为标题内容添加额外鼠标悬停提示信息.\n\n    - valueStyle (dict; optional):\n        数值内容css样式.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\n\n    - loading_state (dict; optional)\n\n        `loading_state` is a dict with keys:\n\n        - is_loading (boolean; optional):\n            Determines if the component is loading or not.\n\n        - prop_name (string; optional):\n            Holds which property is loading.\n\n        - component_name (string; optional):\n            Holds the name of the component that is loading.\"\"\"\n\n    _children_props: typing.List[str] = ['value', 'prefix', 'suffix', 'title']\n    _base_nodes = ['value', 'prefix', 'suffix', 'title', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdStatistic'\n    LoadingState = TypedDict(\n        'LoadingState',\n        {\n            'is_loading': NotRequired[bool],\n            'prop_name': NotRequired[str],\n            'component_name': NotRequired[str],\n        },\n    )\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        value: typing.Optional[typing.Union[NumberType, str, ComponentType]] = None,\n        showGroupSeparator: typing.Optional[bool] = None,\n        precision: typing.Optional[NumberType] = None,\n        prefix: typing.Optional[ComponentType] = None,\n        suffix: typing.Optional[ComponentType] = None,\n        title: typing.Optional[ComponentType] = None,\n        titleTooltip: typing.Optional[str] = None,\n        valueStyle: typing.Optional[dict] = None,\n        loading_state: typing.Optional['LoadingState'] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'value',\n            'showGroupSeparator',\n            'precision',\n            'prefix',\n            'suffix',\n            'title',\n            'titleTooltip',\n            'valueStyle',\n            'data-*',\n            'aria-*',\n            'loading_state',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'value',\n            'showGroupSeparator',\n            'precision',\n            'prefix',\n            'suffix',\n            'title',\n            'titleTooltip',\n            'valueStyle',\n            'data-*',\n            'aria-*',\n            'loading_state',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdStatistic, self).__init__(**args)\n\n\nsetattr(AntdStatistic, '__init__', _explicitize_args(AntdStatistic.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdSteps.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdSteps(Component):\n    \"\"\"An AntdSteps component.\n    步骤条组件AntdSteps\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - steps (list of dicts; required):\n        必填，步骤内容定义数据结构.\n\n        `steps` is a list of dicts with keys:\n\n        - title (a list of or a singular dash component, string or number; required):\n            步骤标题.\n\n        - subTitle (a list of or a singular dash component, string or number; optional):\n            步骤子标题.\n\n        - description (a list of or a singular dash component, string or number; optional):\n            步骤描述内容.\n\n        - icon (a list of or a singular dash component, string or number; optional):\n            步骤自定义图标.\n\n        - disabled (boolean; optional):\n            是否禁用当前步骤.\n\n        - status (a value equal to: 'wait', 'process', 'finish', 'error'; optional):\n            强制设置当前步骤状态，同参数status.\n\n    - current (number; default 0):\n        当前所处的步骤序号 默认值：`0`.\n\n    - direction (a value equal to: 'horizontal', 'vertical'; default 'horizontal'):\n        步骤条显示方向，可选项有`'horizontal'`、`'vertical'` 默认值：`'horizontal'`.\n\n    - labelPlacement (a value equal to: 'horizontal', 'vertical'; optional):\n        标签内容显示方位，可选项有`'horizontal'`、`'vertical'`.\n\n    - progressDot (boolean; default False):\n        是否渲染为点状步骤条 默认值：`False`.\n\n    - size (a value equal to: 'default', 'small'; default 'default'):\n        步骤条尺寸规格，可选项有`'default'`、`'small'` 默认值：`'default'`.\n\n    - status (a value equal to: 'wait', 'process', 'finish', 'error'; default 'process'):\n        步骤条状态，可选项有`'wait'`、`'process'`、`'finish'`、`'error'`\n        默认值：`'process'`.\n\n    - type (a value equal to: 'default', 'navigation', 'inline'; default 'default'):\n        步骤条类型，可选项有`'default'`、`'navigation'`、`'inline'` 默认值：`'default'`.\n\n    - allowClick (boolean; default False):\n        是否可点击切换步骤 默认值：`False`.\n\n    - responsive (boolean; default True):\n        是否在页面宽度小于532px时自动强制垂直显示 默认值：`True`.\n\n    - percent (number; optional):\n        当前步骤进度，取值应在0到100之间，适用于常规步骤条.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = [\n        'steps[].title',\n        'steps[].subTitle',\n        'steps[].description',\n        'steps[].icon',\n    ]\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdSteps'\n    Steps = TypedDict(\n        'Steps',\n        {\n            'title': ComponentType,\n            'subTitle': NotRequired[ComponentType],\n            'description': NotRequired[ComponentType],\n            'icon': NotRequired[ComponentType],\n            'disabled': NotRequired[bool],\n            'status': NotRequired[Literal['wait', 'process', 'finish', 'error']],\n        },\n    )\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        steps: typing.Optional[typing.Sequence['Steps']] = None,\n        current: typing.Optional[NumberType] = None,\n        direction: typing.Optional[Literal['horizontal', 'vertical']] = None,\n        labelPlacement: typing.Optional[Literal['horizontal', 'vertical']] = None,\n        progressDot: typing.Optional[bool] = None,\n        size: typing.Optional[Literal['default', 'small']] = None,\n        status: typing.Optional[Literal['wait', 'process', 'finish', 'error']] = None,\n        type: typing.Optional[Literal['default', 'navigation', 'inline']] = None,\n        allowClick: typing.Optional[bool] = None,\n        responsive: typing.Optional[bool] = None,\n        percent: typing.Optional[NumberType] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'steps',\n            'current',\n            'direction',\n            'labelPlacement',\n            'progressDot',\n            'size',\n            'status',\n            'type',\n            'allowClick',\n            'responsive',\n            'percent',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'steps',\n            'current',\n            'direction',\n            'labelPlacement',\n            'progressDot',\n            'size',\n            'status',\n            'type',\n            'allowClick',\n            'responsive',\n            'percent',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        for k in ['steps']:\n            if k not in args:\n                raise TypeError('Required argument `' + k + '` was not specified.')\n\n        super(AntdSteps, self).__init__(**args)\n\n\nsetattr(AntdSteps, '__init__', _explicitize_args(AntdSteps.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdSwitch.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdSwitch(Component):\n    \"\"\"An AntdSwitch component.\n    开关组件AntdSwitch\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - name (string; optional):\n        配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值.\n\n    - enableBatchControl (boolean; default True):\n        控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能 默认值：`True`.\n\n    - disabled (boolean; default False):\n        是否禁用当前组件 默认值：`False`.\n\n    - autoFocus (boolean; default False):\n        是否自动获取焦点 默认值：`False`.\n\n    - checked (boolean; optional):\n        监听或设置当前开关是否打开.\n\n    - checkedChildren (a list of or a singular dash component, string or number; optional):\n        组件型，打开状态下内嵌内容.\n\n    - unCheckedChildren (a list of or a singular dash component, string or number; optional):\n        组件型，关闭状态下内嵌内容.\n\n    - size (a value equal to: 'default', 'small'; default 'default'):\n        当前组件尺寸规格，可选项有`'small'`、`'middle'` 默认值：`'default'`.\n\n    - loading (boolean; default False):\n        是否渲染加载中状态 默认值：`False`.\n\n    - readOnly (boolean; default False):\n        是否渲染为只读状态 默认值：`False`.\n\n    - batchPropsNames (list of strings; optional):\n        需要纳入[批量属性监听](/batch-props-values)的若干属性名.\n\n    - batchPropsValues (dict; optional):\n        监听`batchPropsNames`中指定的若干属性值.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\n\n    - loading_state (dict; optional)\n\n        `loading_state` is a dict with keys:\n\n        - is_loading (boolean; optional):\n            Determines if the component is loading or not.\n\n        - prop_name (string; optional):\n            Holds which property is loading.\n\n        - component_name (string; optional):\n            Holds the name of the component that is loading.\n\n    - persistence (boolean | string | number; optional):\n        是否开启[属性持久化](/prop-persistence).\n\n    - persisted_props (list of a value equal to: 'checked's; optional):\n        开启属性持久化功能的若干属性名，可选项有`'checked'` 默认值：`['checked']`.\n\n    - persistence_type (a value equal to: 'local', 'session', 'memory'; optional):\n        属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n        默认值：`'local'`.\"\"\"\n\n    _children_props: typing.List[str] = ['checkedChildren', 'unCheckedChildren']\n    _base_nodes = ['checkedChildren', 'unCheckedChildren', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdSwitch'\n    LoadingState = TypedDict(\n        'LoadingState',\n        {\n            'is_loading': NotRequired[bool],\n            'prop_name': NotRequired[str],\n            'component_name': NotRequired[str],\n        },\n    )\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        name: typing.Optional[str] = None,\n        enableBatchControl: typing.Optional[bool] = None,\n        disabled: typing.Optional[bool] = None,\n        autoFocus: typing.Optional[bool] = None,\n        checked: typing.Optional[bool] = None,\n        checkedChildren: typing.Optional[ComponentType] = None,\n        unCheckedChildren: typing.Optional[ComponentType] = None,\n        size: typing.Optional[Literal['default', 'small']] = None,\n        loading: typing.Optional[bool] = None,\n        readOnly: typing.Optional[bool] = None,\n        batchPropsNames: typing.Optional[typing.Sequence[str]] = None,\n        batchPropsValues: typing.Optional[dict] = None,\n        loading_state: typing.Optional['LoadingState'] = None,\n        persistence: typing.Optional[typing.Union[bool, str, NumberType]] = None,\n        persisted_props: typing.Optional[typing.Sequence[Literal['checked']]] = None,\n        persistence_type: typing.Optional[Literal['local', 'session', 'memory']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'name',\n            'enableBatchControl',\n            'disabled',\n            'autoFocus',\n            'checked',\n            'checkedChildren',\n            'unCheckedChildren',\n            'size',\n            'loading',\n            'readOnly',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'loading_state',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'name',\n            'enableBatchControl',\n            'disabled',\n            'autoFocus',\n            'checked',\n            'checkedChildren',\n            'unCheckedChildren',\n            'size',\n            'loading',\n            'readOnly',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'loading_state',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdSwitch, self).__init__(**args)\n\n\nsetattr(AntdSwitch, '__init__', _explicitize_args(AntdSwitch.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdTable.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdTable(Component):\n    \"\"\"An AntdTable component.\n    表格组件AntdTable\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string; optional):\n        当前组件css类名.\n\n    - locale (a value equal to: 'zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr'; default 'zh-cn'):\n        组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n        默认值：`'zh-cn'`.\n\n    - containerId (string; optional):\n        当表格渲染在具有滚动条的局部容器中时，指定该容器id，可避免出现部分表格内部展开层随滚动条滚动显示异常的问题.\n\n    - columns (list of dicts; optional):\n        配置字段定义相关参数.\n\n        `columns` is a list of dicts with keys:\n\n        - title (a list of or a singular dash component, string or number; required):\n            必填，当前字段标题.\n\n        - dataIndex (string; required):\n            必填，当前字段唯一识别id.\n\n        - group (string | list of strings; optional):\n            当前字段所属分组信息，用于渲染多级表头.\n\n        - renderOptions (dict; optional):\n            配置字段[再渲染模式](/AntdTable-rerender)相关参数.\n\n            `renderOptions` is a dict with keys:\n\n            - renderType (a value equal to: 'link', 'ellipsis', 'copyable', 'ellipsis-copyable', 'tags', 'status-badge', 'image', 'custom-format', 'corner-mark', 'row-merge', 'dropdown', 'dropdown-links', 'image-avatar', 'mini-line', 'mini-bar', 'mini-progress', 'mini-ring-progress', 'mini-area', 'button', 'checkbox', 'switch', 'select'; optional):\n                再渲染类型，可选项有`'link'`、`'ellipsis'`、`'copyable'`、`'ellipsis-copyable'`、`'tags'`、`'status-badge'`、`'image'`\n                、`'custom-format'`、`'corner-mark'`、`'row-merge'`、`'dropdown'`、`'dropdown-links'`、`'image-avatar'`\n                、`'mini-line'`、`'mini-bar'`、`'mini-progress'`、`'mini-ring-progress'`、`'mini-area'`\n                、`'button'`、`'checkbox'`、`'switch'`、`'select'`.\n\n            - renderLinkText (string; optional):\n                当`renderType='link'`时，统一设置渲染链接文本内容.\n\n            - likeDccLink (boolean; optional):\n                当`renderType`为`'link'`、`'button'`时，统一设置链接跳转行为是否采用`dcc.Link`模式\n                默认值：`False`.\n\n            - renderButtonSplit (boolean; optional):\n                当`renderType='button'`时，控制多个按钮之间是否添加分割线.\n\n            - renderButtonPopConfirmProps (dict; optional):\n                当`renderType='button'`时，配置气泡确认框相关参数.\n\n                `renderButtonPopConfirmProps` is a dict with keys:\n\n                - title (string; optional):\n                    气泡确认框标题.\n\n                - okText (string; optional):\n                    气泡确认框确认按钮文案.\n\n                - cancelText (string; optional):\n                    气泡确认框取消按钮文案.\n\n            - miniChartColor (string; optional):\n                当`renderType`为`'mini-line'`、`'mini-area'`、`'mini-bar'`时，设置图表颜色.\n\n            - tooltipCustomContent (string; optional):\n                当`renderType`为`'mini-line'`、`'mini-area'`、`'mini-bar'`时，设置用于渲染信息卡片的`javascript`函数字符串.\n\n            - progressOneHundredPercentColor (string; optional):\n                当`renderType`为`'mini-progress'`、`'mini-ring-progress'`时，设置进度完成状态下的填充色.\n\n            - progressShowPercent (boolean; optional):\n                当`renderType`为`'mini-progress'`时，设置进度条是否附带进度数值信息\n                默认值：`False`.\n\n            - progressPercentPrecision (number; optional):\n                当`renderType`为`'mini-progress'`时，设置进度条附带进度数值信息的小数位数，默认保持原始数值的精度.\n\n            - progressPercentPosition (dict; optional):\n                当`renderType`为`'mini-progress'`时，设置进度条附带进度数值信息显示的位置.\n\n                `progressPercentPosition` is a dict with keys:\n\n                - align (a value equal to: 'start', 'center', 'end'; optional):\n                    对齐方式，可选项有`'start'`、`'center'`、`'end'`.\n\n                - type (a value equal to: 'inner', 'outer'; optional):\n                    内外位置，可选项有`'inner'`、`'outer'`.\n\n            - progressStrokeLinecap (a value equal to: 'square', 'round'; optional):\n                当`renderType`为`'mini-progress'`时，设置进度条形状类型，可选项有`'square'`、`'round'`\n                默认值：`'square'`.\n\n            - progressSize (number; optional):\n                当`renderType`为`'mini-progress'`时，设置进度条像素尺寸.\n\n            - progressColor (dict; optional):\n                当`renderType`为`'mini-progress'`时，设置进度条主体部分颜色，支持通过字段`'from'`、`'to'`配置渐变色.\n\n                `progressColor` is a string\n\n              Or dict with keys:\n\n        - from (string; optional):\n            渐变色起始颜色.\n\n        - to (string; optional):\n            渐变色结束颜色.\n\n            - ringProgressFontSize (number; optional):\n                当`renderType='mini-ring-progress'`时，设置进度数值像素大小.\n\n            - dropdownProps (dict; optional):\n                当`renderType`为`'dropdown'`、`'dropdown-links'`时，配置下拉菜单相关参数.\n\n                `dropdownProps` is a dict with keys:\n\n                - title (string; optional):\n                    下拉菜单锚点标题内容.\n\n                - arrow (boolean; optional):\n                    下拉菜单是否显示指示箭头 默认值：`False`.\n\n                - disabled (boolean; optional):\n                    是否整体禁用下拉菜单功能，优先级低于各记录值内部参数.\n\n                - overlayClassName (string; optional):\n                    下拉菜单容器css类名.\n\n                - overlayStyle (dict; optional):\n                    下拉菜单容器css样式.\n\n                - placement (a value equal to: 'bottomLeft', 'bottomCenter', 'bottomRight', 'topLeft', 'topCenter', 'topRight'; optional):\n                    下拉菜单展开方向，可选项有`'bottomLeft'`、`'bottomCenter'`、`'bottomRight'`、`'topLeft'`、`'topCenter'`、`'topRight'`.\n\n        - fixed (a value equal to: 'left', 'right' | boolean; optional):\n            当前字段冻结方向，可选项有`'left'`、`'right'`，设置为`True`时等价于`'left'`.\n\n        - editable (boolean; optional):\n            当前字段是否可编辑 默认值：`False`.\n\n        - editOptions (dict; optional):\n            配置可编辑模式下输入框相关参数.\n\n            `editOptions` is a dict with keys:\n\n            - mode (a value equal to: 'default', 'text-area'; optional):\n                编辑框模式，可选项有`'default'`、`'text-area'` 默认值：`'default'`.\n\n            - autoSize (dict; optional):\n                当`mode='textarea'`时，配置文本框自适应高度相关功能，同`AntdInput`\n                默认值：`False`.\n\n                `autoSize` is a boolean\n\n              Or dict with keys:\n\n        - minRows (number; optional)\n\n        - maxRows (number; optional)\n\n            - maxLength (number; optional):\n                限制当前字段可编辑模式下，输入框内最多可输入的字符数量，默认无限制.\n\n            - placeholder (string; optional):\n                输入框无输入值时的占位提示信息.\n\n            - disabledKeys (list of strings; optional):\n                当前字段下需进行输入框禁用的行记录`key`值列表.\n\n        - align (a value equal to: 'left', 'center', 'right'; optional):\n            当前字段对齐方式，可选项有`'left'`、`'center'`、`'right'` 默认值：`'center'`.\n\n        - headerAlign (a value equal to: 'left', 'center', 'right'; optional):\n            当前表头对齐方式，默认跟随当前字段对齐方式，可选项有`'left'`、`'center'`、`'right'`\n            默认值：`'center'`.\n\n        - width (number | string; optional):\n            当前字段宽度.\n\n        - minWidth (number | string; optional):\n            控制当前字段最小宽度，仅当`tableLayout=\\\"auto\\\"`时有效.\n\n        - hidden (boolean; optional):\n            是否隐藏当前字段 默认值：`False`.\n\n        - className (string; optional):\n            当前字段css类名.\n\n        - defaultSortOrder (a value equal to: 'ascend', 'descend'; optional):\n            当前字段初始化时的默认排序状态，可选项有`'ascend'`、`'descend'`.\n\n        - filterResetToDefaultFilteredValue (boolean; optional):\n            若当前字段通过参数`defaultFilteredValues`设置了初始化默认选中的筛选值，用于设置是否在用户点击重置按钮后恢复默认选中筛选项\n            默认值：`False`.\n\n    - showHeader (boolean; default True):\n        是否显示表头 默认值：`True`.\n\n    - rowHoverable (boolean; default True):\n        表格行是否开启鼠标悬停样式效果 默认值：`True`.\n\n    - tableLayout (a value equal to: 'auto', 'fixed'; optional):\n        当`columns`中各字段未设置`width`时，用于控制整体字段宽度分配方式，可选项有`'auto'`、`'fixed'`.\n\n    - data (list of dicts; optional):\n        定义表格数据源，与`columns`对应.\n\n        `data` is a list of dicts with strings as keys and values of type\n        list of boolean | number | string | dict | lists | a list of or a\n        singular dash component, string or number | string | number |\n        boolean | dict with keys:\n\n        - content (string; optional):\n            适用于`'link'`模式，链接显示的文字内容，优先级高于字段配置信息中的`renderLinkText`参数.\n\n        - href (string; optional):\n            适用于`'link'`模式，链接地址.\n\n        - target (string; optional):\n            适用于`'link'`模式，链接跳转行为 默认值：`'_blank'`.\n\n        - disabled (boolean; optional):\n            适用于`'link'`模式，是否禁用当前链接 默认值：`False`.\n\n          Or list of numbers | dict with keys:\n\n        - color (string; optional):\n            适用于`'tags'`模式，标签颜色.\n\n        - tag (string | number; optional):\n            适用于`'tags'`模式，标签内容.\n\n        - tooltip (dict; optional):\n            适用于`'tags'`模式，为当前标签添加额外的文字提示功能.\n\n            `tooltip` is a dict with keys:\n\n            - title (string; optional):\n                文字提示内容.\n\n            - placement (a value equal to: 'top', 'left', 'right', 'bottom', 'topLeft', 'topRight', 'bottomLeft', 'bottomRight'; optional):\n                文字提示弹出方向，可选项有`'top'`、`'left'`、`'right'`、`'bottom'`、`'topLeft'`、`'topRight'`、`'bottomLeft'`、`'bottomRight'`、`'leftTop'`、`'leftBottom'`、`'rightTop'`、`'rightBottom'`\n                默认值：`'top'`. | list of dicts with keys:\n\n        - color (string; optional):\n            适用于`'tags'`模式，当前标签颜色.\n\n        - tag (string | number; optional):\n            适用于`'tags'`模式，当前标签内容.\n\n        - tooltip (dict; optional):\n            适用于`'tags'`模式，为当前标签添加额外的文字提示功能.\n\n            `tooltip` is a dict with keys:\n\n            - title (string; optional):\n                文字提示内容.\n\n            - placement (a value equal to: 'top', 'left', 'right', 'bottom', 'topLeft', 'topRight', 'bottomLeft', 'bottomRight'; optional):\n                文字提示弹出方向，可选项有`'top'`、`'left'`、`'right'`、`'bottom'`、`'topLeft'`、`'topRight'`、`'bottomLeft'`、`'bottomRight'`、`'leftTop'`、`'leftBottom'`、`'rightTop'`、`'rightBottom'`\n                默认值：`'top'`. | dict with keys:\n\n        - disabled (boolean; optional):\n            适用于`'button'`模式，同`AntdButton`中的同名参数.\n\n        - type (a value equal to: 'primary', 'ghost', 'dashed', 'link', 'text', 'default'; optional):\n            适用于`'button'`模式，同`AntdButton`中的同名参数.\n\n        - color (a value equal to: 'default', 'primary', 'danger', 'blue', 'purple', 'cyan', 'green', 'magenta', 'pink', 'red', 'orange', 'yellow', 'volcano', 'geekblue', 'lime', 'gold'; optional):\n            适用于`'button'`模式，同`AntdButton`中的同名参数.\n\n        - variant (a value equal to: 'outlined', 'dashed', 'solid', 'filled', 'text', 'link'; optional):\n            适用于`'button'`模式，同`AntdButton`中的同名参数.\n\n        - danger (boolean; optional):\n            适用于`'button'`模式，同`AntdButton`中的同名参数.\n\n        - style (dict; optional):\n            适用于`'button'`模式，同`AntdButton`中的同名参数.\n\n        - content (string; optional):\n            适用于`'button'`模式，按钮内容.\n\n        - href (string; optional):\n            适用于`'button'`模式，同`AntdButton`中的同名参数.\n\n        - target (string; optional):\n            适用于`'button'`模式，同`AntdButton`中的同名参数.\n\n        - popConfirmProps (dict; optional):\n            适用于`'button'`模式，用于为当前按钮配置气泡确认框相关参数，优先级更高.\n\n            `popConfirmProps` is a dict with keys:\n\n            - title (string; optional):\n                气泡确认框标题.\n\n            - okText (string; optional):\n                气泡确认框确认按钮文案.\n\n            - cancelText (string; optional):\n                气泡确认框取消按钮文案.\n\n        - icon (string; optional):\n            适用于`'button'`模式，按钮前缀图标类型，`iconRenderer`为`'AntdIcon'`时同`AntdIcon`同名参数，`iconRenderer`为`'fontawesome'`时为css类名.\n\n        - iconRenderer (a value equal to: 'AntdIcon', 'fontawesome'; optional):\n            适用于`'button'`模式，按钮前缀图标渲染方式，可选项有`'AntdIcon'`、`'fontawesome'`.\n\n        - tooltip (dict; optional):\n            适用于`'button'`模式，为当前按钮添加额外的文字提示功能.\n\n            `tooltip` is a dict with keys:\n\n            - title (string; optional):\n                文字提示内容.\n\n            - placement (a value equal to: 'top', 'left', 'right', 'bottom', 'topLeft', 'topRight', 'bottomLeft', 'bottomRight'; optional):\n                文字提示弹出方向，可选项有`'top'`、`'left'`、`'right'`、`'bottom'`、`'topLeft'`、`'topRight'`、`'bottomLeft'`、`'bottomRight'`、`'leftTop'`、`'leftBottom'`、`'rightTop'`、`'rightBottom'`\n                默认值：`'top'`.\n\n        - custom (boolean | number | string | dict | list; optional):\n            适用于`'button'`模式，额外补充信息. | list of dicts with keys:\n\n        - disabled (boolean; optional):\n            适用于`'button'`模式，同`AntdButton`中的同名参数.\n\n        - type (a value equal to: 'primary', 'ghost', 'dashed', 'link', 'text', 'default'; optional):\n            适用于`'button'`模式，同`AntdButton`中的同名参数.\n\n        - danger (boolean; optional):\n            适用于`'button'`模式，同`AntdButton`中的同名参数.\n\n        - style (dict; optional):\n            适用于`'button'`模式，同`AntdButton`中的同名参数.\n\n        - content (string; optional):\n            适用于`'button'`模式，按钮内容.\n\n        - href (string; optional):\n            适用于`'button'`模式，同`AntdButton`中的同名参数.\n\n        - target (string; optional):\n            适用于`'button'`模式，同`AntdButton`中的同名参数.\n\n        - icon (string; optional):\n            适用于`'button'`模式，当前按钮前缀图标类型，`iconRenderer`为`'AntdIcon'`时同`AntdIcon`同名参数，`iconRenderer`为`'fontawesome'`时为css类名.\n\n        - iconRenderer (a value equal to: 'AntdIcon', 'fontawesome'; optional):\n            适用于`'button'`模式，当前按钮前缀图标渲染方式，可选项有`'AntdIcon'`、`'fontawesome'`.\n\n        - custom (boolean | number | string | dict | list; optional):\n            适用于`'button'`模式，额外补充信息. | dict with keys:\n\n        - status (a value equal to: 'success', 'processing', 'default', 'error', 'warning'; optional):\n            适用于`'status-badge'`模式，状态徽标状态，可选项有`'success'`、`'processing'`、`'default'`、`'error'`、`'warning'`.\n\n        - text (string | number; optional):\n            适用于`'status-badge'`模式，状态徽标标签内容. | dict with keys:\n\n        - src (string; optional):\n            适用于`'image'`模式，图片资源地址.\n\n        - height (string | number; optional):\n            适用于`'image'`模式，图片高度.\n\n        - preview (boolean; optional):\n            适用于`'image'`模式，图片是否可交互预览 默认值：`True`. | dict with keys:\n\n        - placement (a value equal to: 'top-left', 'top-right', 'bottom-left', 'bottom-right'; optional):\n            适用于`'corner-mark'`模式，角标显示方位，可选项有`'top-left'`、`'top-right'`、`'bottom-left'`、`'bottom-right'`.\n\n        - color (string; optional):\n            适用于`'corner-mark'`模式，角标颜色 默认值：`'#1890ff'`.\n\n        - content (number | string; optional):\n            适用于`'corner-mark'`模式，单元格数值内容.\n\n        - offsetX (number; optional):\n            适用于`'corner-mark'`模式，角标水平方向像素偏移量.\n\n        - offsetY (number; optional):\n            适用于`'corner-mark'`模式，角标竖直方向像素偏移量.\n\n        - hide (boolean; optional):\n            适用于`'corner-mark'`模式，是否隐藏当前角标 默认值：`False`. | dict with keys:\n\n        - checked (boolean; optional):\n            适用于`'checkbox'`模式，当前勾选框状态.\n\n        - disabled (boolean; optional):\n            适用于`'checkbox'`模式，是否禁用当前勾选框.\n\n        - label (string; optional):\n            适用于`'checkbox'`模式，当前勾选框标签内容.\n\n        - custom (boolean | number | string | dict | list; optional):\n            适用于`'checkbox'`模式，额外补充信息. | dict with keys:\n\n        - checked (boolean; optional):\n            适用于`'switch'`模式，当前开关状态.\n\n        - disabled (boolean; optional):\n            适用于`'switch'`模式，是否禁用当前开关.\n\n        - checkedChildren (string; optional):\n            适用于`'switch'`模式，“开”状态标签内容.\n\n        - unCheckedChildren (string; optional):\n            适用于`'switch'`模式，“关”状态标签内容.\n\n        - custom (boolean | number | string | dict | list; optional):\n            适用于`'switch'`模式，额外补充信息. | dict with keys:\n\n        - content (number | string; optional):\n            适用于`'row-merge'`模式，单元格数值内容.\n\n        - rowSpan (number; optional):\n            适用于`'row-merge'`模式，从当前单元格开始，向后合并的其他单元格数量. | list of dicts with keys:\n\n        - title (string; optional):\n            适用于`'dropdown'`模式，当前下拉菜单项锚点内容.\n\n        - disabled (boolean; optional):\n            适用于`'dropdown'`模式，是否禁用当前下拉菜单项.\n\n        - icon (string; optional):\n            适用于`'dropdown'`模式，当前按钮前缀图标类型，`iconRenderer`为`'AntdIcon'`时同`AntdIcon`同名参数，`iconRenderer`为`'fontawesome'`时为css类名.\n\n        - iconRenderer (a value equal to: 'AntdIcon', 'fontawesome'; optional):\n            适用于`'dropdown'`模式，当前按钮前缀图标渲染方式，可选项有`'AntdIcon'`、`'fontawesome'`.\n\n        - custom (boolean | number | string | dict | list; optional):\n            适用于`'dropdown'`模式，额外补充信息.\n\n        - isDivider (boolean; optional):\n            适用于`'dropdown'`模式，当前项是否渲染为分割线 默认值：`False`. | list of dicts with keys:\n\n        - title (string; optional):\n            适用于`'dropdown-links'`模式，当前下拉菜单项锚点内容.\n\n        - href (string; optional):\n            适用于`'dropdown-links'`模式，当前下拉菜单项链接地址.\n\n        - disabled (boolean; optional):\n            适用于`'dropdown-links'`模式，是否禁用当前下拉菜单项.\n\n        - icon (string; optional):\n            适用于`'dropdown-links'`模式，当前按钮前缀图标类型，`iconRenderer`为`'AntdIcon'`时同`AntdIcon`同名参数，`iconRenderer`为`'fontawesome'`时为css类名.\n\n        - iconRenderer (a value equal to: 'AntdIcon', 'fontawesome'; optional):\n            适用于`'dropdown-links'`模式，当前按钮前缀图标渲染方式，可选项有`'AntdIcon'`、`'fontawesome'`.\n\n        - isDivider (boolean; optional):\n            适用于`'dropdown-links'`模式，当前项是否渲染为分割线 默认值：`False`. | dict with keys:\n\n        - src (string; optional):\n            适用于`'image-avatar'`模式，头像图片资源链接.\n\n        - size (dict; optional):\n            适用于`'image-avatar'`模式，头像尺寸规格，传入数值型时表示像素大小，传入字符型时可使用内置尺寸规格，可选项有`'small'`、`'default'`、`'large'`，支持响应式\n            默认值：`'default'`.\n\n            `size` is a number | a value equal to: 'large', 'small',\n            'default' | dict with keys:\n\n            - xs (number; optional)\n\n            - sm (number; optional)\n\n            - md (number; optional)\n\n            - lg (number; optional)\n\n            - xl (number; optional)\n\n            - xxl (number; optional)\n\n        - shape (a value equal to: 'circle', 'square'; optional):\n            适用于`'image-avatar'`模式，头像形状，可选项有`'circle'`、`'square'`\n            默认值：`'circle'`. | dict with keys:\n\n        - className (string; optional):\n            适用于`'select'`模式，下拉选择css类名.\n\n        - style (dict; optional):\n            适用于`'select'`模式，下拉选择css样式，其中`width`默认为`'100%'`.\n\n        - options (list of dicts; optional):\n            适用于`'select'`模式，定义下拉选择选项.\n\n            `options` is a list of dicts with keys:\n\n            - label (string; optional):\n\n                当前选项标题.\n\n            - value (string | number; optional):\n\n                当前选项值.\n\n        - listHeight (number; optional):\n            适用于`'select'`模式，下拉选择菜单像素高度 默认值：`256`.\n\n        - mode (a value equal to: 'multiple', 'tags'; optional):\n            适用于`'select'`模式，选择模式，可选项有`'multiple'`、`'tags'`，默认为单选模式.\n\n        - disabled (boolean; optional):\n            适用于`'select'`模式，是否禁用当前下拉选择.\n\n        - size (a value equal to: 'small', 'middle', 'large'; optional):\n            适用于`'select'`模式，下拉选择尺寸规格，可选项有`'small'`、`'middle'`、`'large'`\n            默认值：`'middle'`.\n\n        - bordered (boolean; optional):\n            适用于`'select'`模式，是否渲染边框 默认值：`True`.\n\n        - placeholder (string; optional):\n            适用于`'select'`模式，选择框占位内容.\n\n        - placement (a value equal to: 'bottomLeft', 'bottomRight', 'topLeft', 'topRight'; optional):\n            适用于`'select'`模式，下拉菜单展开方向，可选项有`'bottomLeft'`、`'bottomRight'`、`'topLeft'`、`'topRight'`\n            默认值：`'bottomLeft'`.\n\n        - value (string | number | list of string | numbers; optional):\n            适用于`'select'`模式，下拉选择已选中值.\n\n        - maxTagCount (number | a value equal to: 'responsive'; optional):\n            适用于`'select'`模式，最多显示的已选中选项数量，超出部分将会自动省略 默认值：`5`.\n\n        - optionFilterProp (a value equal to: 'value', 'label'; optional):\n            适用于`'select'`模式，选择框内搜索对应的目标字段，可选项有`'value'`、`'label'`\n            默认值：`'value'`.\n\n        - allowClear (boolean; optional):\n            适用于`'select'`模式，是否允许快捷清空已选项 默认值：`True`.\n\n        - showSearch (boolean; optional):\n            适用于`'select'`模式，是否开启输入框可搜索功能. | dict\n\n    - bordered (boolean; default False):\n        是否渲染框线 默认值：`False`.\n\n    - maxHeight (number | string; optional):\n        表格最大像素高度，当实际表格高度超出限制时，会自动渲染竖直滚动条.\n\n    - maxWidth (number | string | boolean; optional):\n        表格最大宽度，当实际表格宽度超出限制时，会自动渲染水平滚动条.\n\n    - scrollToFirstRowOnChange (boolean; default True):\n        当分页、排序、筛选操作触发表格变化后，是否滚动到表格顶部 默认值：`True`.\n\n    - size (a value equal to: 'small', 'middle', 'large'; default 'middle'):\n        表格单元格尺寸规格，可选项有`'small'`、`'middle'`、`'large'`.\n\n    - rowSelectionType (a value equal to: 'checkbox', 'radio'; optional):\n        行选择模式，可选项有`'checkbox'`（多选）、`'radio'`（单选），默认不开启行选择功能.\n\n    - selectedRowKeys (list of string | numbers; optional):\n        监听已选行对应`key`值.\n\n    - selectedRows (list; optional):\n        监听已选行记录.\n\n    - rowSelectionWidth (string | number; default 32):\n        行选择控件所在列宽度 默认值：`32`.\n\n    - rowSelectionCheckStrictly (boolean; optional):\n        针对嵌套行，各行与其所嵌套的内部行之间的行选择行为是否互相独立 默认值：`True`.\n\n    - rowSelectionIgnoreRowKeys (list of string | numbers; optional):\n        指定不可被选中的行对应`key`值.\n\n    - selectedRowsSyncWithData (boolean; default False):\n        当表格数据源`data`更新时，是否根据当前有效的`selectedRowKeys`参数对`selectedRows`中的数据进行同步更新\n        默认值：`False`.\n\n    - sticky (dict; default False):\n        配置粘性表头相关功能 默认值：`False`.\n\n        `sticky` is a boolean | dict with keys:\n\n        - belowSelector (string | list of strings; optional):\n            粘性表头附着目标元素对应的选择器规则字符串，设置后，粘性表头激活后将附着在目标元素下方.\n\n        - offsetHeader (number; optional):\n            粘性表头竖直方向上的像素偏移量.\n\n        - offsetScroll (number; optional):\n            粘性表头底部横向滚动条竖直方向上的像素偏移量.\n\n    - enableHoverListen (boolean; default False):\n        是否启用行鼠标移入/移出事件监听，开启后可能会影响到部分其他功能，请根据实际情况进行使用 默认值：`False`.\n\n    - recentlyMouseEnterColumnDataIndex (string; optional):\n        当`enableHoverListen=True`时，监听最近一次鼠标移入的字段对应`dataIndex`信息.\n\n    - recentlyMouseEnterRowKey (string | number; optional):\n        当`enableHoverListen=True`时，监听最近一次鼠标移入的行对应`key`信息.\n\n    - recentlyMouseEnterRow (dict; optional):\n        当`enableHoverListen=True`时，监听最近一次鼠标移入的行数据信息.\n\n    - titlePopoverInfo (dict; optional):\n        配置各字段标题额外气泡说明卡片信息相关参数.\n\n        `titlePopoverInfo` is a dict with strings as keys and values of\n        type dict with keys:\n\n        - title (string; optional):\n            气泡卡片标题，支持字符串或组件型.\n\n        - content (string; optional):\n            气泡卡片内容，支持字符串或组件型.\n\n        - placement (a value equal to: 'top', 'left', 'right', 'bottom', 'topLeft', 'topRight', 'bottomLeft', 'bottomRight', 'leftTop', 'leftBottom', 'rightTop', 'rightBottom'; optional):\n            气泡卡片弹出方位，可选项有`'top'`、`'left'`、`'right'`、`'bottom'`、`'topLeft'`、`'topRight'`、`'bottomLeft'`、`'bottomRight'`、`'leftTop'`、`'leftBottom'`、`'rightTop'`、`'rightBottom'`\n            默认值：`'bottom'`.\n\n        - overlayStyle (dict; optional):\n            气泡卡片展开层css样式.\n\n    - columnsFormatConstraint (dict; optional):\n        针对开启了可编辑模式的字段，配置基于正则表达式的输入内容格式校验约束规则.\n\n        `columnsFormatConstraint` is a dict with strings as keys and\n        values of type dict with keys:\n\n        - rule (string; optional):\n            正则表达式，用于校验输入内容是否符合格式要求.\n\n        - content (string; optional):\n            用户输入内容校验失败时的提示说明信息.\n\n    - sortOptions (dict; optional):\n        配置表格字段排序相关功能.\n\n        `sortOptions` is a dict with keys:\n\n        - sortDataIndexes (list of strings; optional):\n            参与排序的若干字段`dataIndex`数组，多字段组合排序时，数组顺序即为组合排序优先级顺序，由高到低.\n\n        - multiple (boolean | a value equal to: 'auto'; optional):\n            是否启用多字段组合排序，当设置为`'auto'`时表示自动组合排序，此时组合排序的字段优先级顺序与用户依次点击排序字段的顺序对应\n            默认值：`False``.\n\n        - forceCompareModes (dict with strings as keys and values of type a value equal to: 'number', 'custom'; optional):\n            为各字段指定排序比较模式，可选项有`'number'`（强制数值型排序）、`'custom'`（自定义排序）.\n\n        - customOrders (dict with strings as keys and values of type list; optional):\n            当`forceCompareModes`为`'custom'`时，用于为相应字段设置自定义排序对应的元素顺序.\n\n    - showSorterTooltip (boolean; default True):\n        针对可排序字段是否在鼠标移入表头后展示额外信息提示 默认值：`True`.\n\n    - showSorterTooltipTarget (a value equal to: 'full-header', 'sorter-icon'; default 'full-header'):\n        控制可排序字段表头额外信息提示的鼠标移入触发目标，可选项有`'full-header'`、`'sorter-icon'`\n        默认值：`'full-header'`.\n\n    - filterOptions (dict; optional):\n        配置表格字段筛选相关功能.\n\n        `filterOptions` is a dict with strings as keys and values of type\n        dict with keys:\n\n        - filterMode (a value equal to: 'checkbox', 'keyword', 'tree'; optional):\n            筛选模式，可选项有`'checkbox'`、`'keyword'`、`'tree'`，其中`'tree'`模式需要依赖相应的`'filterCustomTreeItems'`参数进行自定义树形菜单结构的构造\n            默认值：`'checkbox'`.\n\n        - filterCustomItems (list | boolean | number | string | dict | list; optional):\n            `filterMode`为`'checkbox'`时，用于自定义筛选菜单项.\n\n        - filterCustomTreeItems (list of dicts; optional):\n            `filterMode`为`'tree'`时，用于构造自定义树形菜单结构.\n\n        - filterMultiple (boolean; optional):\n            `filterMode`为`'checkbox'`时，是否开启多选模式 默认值：`True`.\n\n        - filterSearch (boolean; optional):\n            `filterMode`为`'checkbox'`时，是否开启搜索框 默认值：`False`.\n\n    - defaultFilteredValues (dict with strings as keys and values of type list; optional):\n        字段筛选相关字段默认选中的筛选值.\n\n    - pagination (dict; optional):\n        配置表格翻页相关功能，设置为`False`时将关闭分页相关功能.\n\n        `pagination` is a dict with keys:\n\n        - position (a value equal to: 'topLeft', 'topCenter', 'topRight', 'bottomLeft', 'bottomCenter', 'bottomRight'; optional):\n            分页组件渲染方位，可选项有`'topLeft'`、`'topCenter'`、`'topRight'`、`'bottomLeft'`、`'bottomCenter'`、`'bottomRight'`\n            默认值：`'bottomRight'`.\n\n        - pageSize (number; optional):\n            监听或设置每页允许显示的最大行记录数量.\n\n        - current (number; optional):\n            监听或设置当前页码.\n\n        - showSizeChanger (boolean; optional):\n            是否显示`pageSize`切换控件，当表格总记录数量大于50时默认为`True`.\n\n        - pageSizeOptions (list of numbers; optional):\n            `pageSize`切换控件的可选项.\n\n        - showTitle (boolean; optional):\n            各页码在鼠标移入时，是否显示浏览器原生提示信息 默认值：`True`.\n\n        - showQuickJumper (boolean; optional):\n            是否渲染快捷跳页控件 默认值：`False`.\n\n        - showTotalPrefix (string; optional):\n            总记录描述文案前缀文字.\n\n        - showTotalSuffix (string; optional):\n            总记录描述文案后缀文字.\n\n        - hideOnSinglePage (boolean; optional):\n            是否在数据行数量不足一页时，自动隐藏分页相关控件 默认值：`False`.\n\n        - simple (boolean; optional):\n            是否开启简洁模式 默认值：`False`.\n\n        - disabled (boolean; optional):\n            是否禁用分页相关控件 默认值：`False`.\n\n        - size (a value equal to: 'default', 'small'; optional):\n            分页控件尺寸规格，可选项有`'small'`、`'default'` 默认值：`'default'`.\n\n        - total (number; optional):\n            手动设置总记录数量，通常配合[服务端数据加载模式](/AntdTable-server-side-mode)使用.\n\n        - showLessItems (boolean; optional):\n            是否优先展示较少的跳页项 默认值：`False`. | boolean\n\n    - currentData (list; optional):\n        监听经过编辑修改操作后，最新状态下的表格数据源.\n\n    - recentlyChangedRow (dict; optional):\n        监听最近一次编辑修改操作，对应的被修改行记录数据.\n\n    - recentlyChangedColumn (string; optional):\n        监听最近一次编辑修改操作，对应的被修改字段`dataIndex`信息.\n\n    - sorter (dict; optional):\n        监听排序操作相关行为参数.\n\n        `sorter` is a dict with keys:\n\n        - columns (list of strings; optional):\n            监听排序涉及的字段`dataIndex`信息.\n\n        - orders (list of a value equal to: 'ascend', 'descend's; optional):\n            监听排序涉及的字段对应排序方式，其中`'ascend'`表示升序，`'descend'`表示降序.\n\n    - filter (dict; optional):\n        监听筛选操作相关行为参数.\n\n    - mode (a value equal to: 'client-side', 'server-side'; default 'client-side'):\n        表格数据加载控制方式，可选项有`'client-side'`（客户端加载）、`'server-side'`（服务端），其中服务端模式适用于大量数据展示需求，具体请参考[服务端数据加载模式](/AntdTable-server-side-mode)\n        默认值：`'client-side'`.\n\n    - summaryRowContents (list of dicts; optional):\n        配置总结栏内容，按数组顺序渲染.\n\n        `summaryRowContents` is a list of dicts with keys:\n\n        - content (a list of or a singular dash component, string or number; optional):\n            组件型，当前总结栏单元格内容.\n\n        - colSpan (number; optional):\n            当前总结栏单元格横跨占据的字段数量 默认值：`1`.\n\n        - align (a value equal to: 'left', 'center', 'right'; optional):\n            当前总结栏列对齐方式，可选项有`'left'`、`'center'`、`'right'`.\n\n    - summaryRowBlankColumns (number; default 0):\n        总结栏每行用于占位的列数，适用于同时使用行选择等功能的场景 默认值：`0`.\n\n    - summaryRowFixed (boolean | a value equal to: 'top', 'bottom'; default False):\n        总结栏是否启用固定布局功能，也可设置为`'top'`、`'bottom'`控制总结栏固定在顶部或底部 默认值：`False`.\n\n    - conditionalStyleFuncs (dict with strings as keys and values of type string; optional):\n        配置各字段条件格式化渲染对应的`javascript`函数字符串.\n\n    - expandedRowKeyToContent (list of dicts; optional):\n        配置各数据行的行展开内容，键为数据行`key`值，值为对应行的展开内容.\n\n        `expandedRowKeyToContent` is a list of dicts with keys:\n\n        - key (string | number; required)\n\n        - content (a list of or a singular dash component, string or number; optional)\n\n    - expandedRowWidth (string | number; optional):\n        行展开控件所在列宽度.\n\n    - expandRowByClick (boolean; default False):\n        是否允许通过直接点击行的方式展开对应行 默认值：`False`.\n\n    - defaultExpandedRowKeys (list of strings; optional):\n        初始化处于展开状态的行对应`key`值.\n\n    - expandedRowKeys (list of strings; optional):\n        监听或设置处于展开状态的行对应`key`值.\n\n    - enableCellClickListenColumns (list of strings; optional):\n        是否启用单元格单击、双击、右键相关事件的监听，开启后可能会影响到部分其他功能，请根据实际情况进行使用 默认值：`False`.\n\n    - recentlyCellClickColumn (string; optional):\n        当`enableCellClickListenColumns=True`时，监听最近一次单元格单击事件对应的字段`dataIndex`.\n\n    - recentlyCellClickRecord (dict; optional):\n        当`enableCellClickListenColumns=True`时，监听最近一次单元格单击事件对应的行记录信息.\n\n    - nClicksCell (number; default 0):\n        当`enableCellClickListenColumns=True`时，监听表格单元格单击事件累计发生次数 默认值：`0`.\n\n    - cellClickEvent (dict; optional):\n        当`enableCellClickListenColumns=True`时，监听最近一次表格单元格单击事件详细参数.\n\n        `cellClickEvent` is a dict with keys:\n\n        - pageX (number; optional):\n            以页面整体左上角为原点，记录x坐标.\n\n        - pageY (number; optional):\n            以页面整体左上角为原点，记录y坐标.\n\n        - clientX (number; optional):\n            以浏览器窗口左上角为原点，记录x坐标.\n\n        - clientY (number; optional):\n            以浏览器窗口左上角为原点，记录y坐标.\n\n        - screenX (number; optional):\n            以屏幕左上角为原点，记录x坐标.\n\n        - screenY (number; optional):\n            以屏幕左上角为原点，记录y坐标.\n\n        - timestamp (number; optional):\n            事件对应的时间戳.\n\n    - recentlyCellDoubleClickColumn (string; optional):\n        当`enableCellClickListenColumns=True`时，监听最近一次单元格双击事件对应的字段`dataIndex`.\n\n    - recentlyCellDoubleClickRecord (dict; optional):\n        当`enableCellClickListenColumns=True`时，监听最近一次单元格双击事件对应的行记录信息.\n\n    - nDoubleClicksCell (number; default 0):\n        当`enableCellClickListenColumns=True`时，监听表格单元格双击事件累计发生次数 默认值：`0`.\n\n    - cellDoubleClickEvent (dict; optional):\n        当`enableCellClickListenColumns=True`时，监听最近一次表格单元格双击事件详细参数.\n\n        `cellDoubleClickEvent` is a dict with keys:\n\n        - pageX (number; optional):\n            以页面整体左上角为原点，记录x坐标.\n\n        - pageY (number; optional):\n            以页面整体左上角为原点，记录y坐标.\n\n        - clientX (number; optional):\n            以浏览器窗口左上角为原点，记录x坐标.\n\n        - clientY (number; optional):\n            以浏览器窗口左上角为原点，记录y坐标.\n\n        - screenX (number; optional):\n            以屏幕左上角为原点，记录x坐标.\n\n        - screenY (number; optional):\n            以屏幕左上角为原点，记录y坐标.\n\n        - timestamp (number; optional):\n            事件对应的时间戳.\n\n    - recentlyContextMenuClickColumn (string; optional):\n        当`enableCellClickListenColumns=True`时，监听最近一次单元格右键事件对应的字段`dataIndex`.\n\n    - recentlyContextMenuClickRecord (dict; optional):\n        当`enableCellClickListenColumns=True`时，监听最近一次单元格右键事件对应的行记录信息.\n\n    - nContextMenuClicksCell (number; default 0):\n        当`enableCellClickListenColumns=True`时，监听表格单元格右键事件累计发生次数 默认值：`0`.\n\n    - cellContextMenuClickEvent (dict; optional):\n        当`enableCellClickListenColumns=True`时，监听最近一次表格单元格右键事件详细参数.\n\n        `cellContextMenuClickEvent` is a dict with keys:\n\n        - pageX (number; optional):\n            以页面整体左上角为原点，记录x坐标.\n\n        - pageY (number; optional):\n            以页面整体左上角为原点，记录y坐标.\n\n        - clientX (number; optional):\n            以浏览器窗口左上角为原点，记录x坐标.\n\n        - clientY (number; optional):\n            以浏览器窗口左上角为原点，记录y坐标.\n\n        - screenX (number; optional):\n            以屏幕左上角为原点，记录x坐标.\n\n        - screenY (number; optional):\n            以屏幕左上角为原点，记录y坐标.\n\n        - timestamp (number; optional):\n            事件对应的时间戳.\n\n    - emptyContent (a list of or a singular dash component, string or number; optional):\n        组件型，自定义空数据状态下，表格内的显示内容.\n\n    - cellUpdateOptimize (boolean; default False):\n        是否严格启用单元格内容渲染优化，开启后，会基于单元格数据对单元格内容进行渲染优化，减少渲染次数 默认值：`False`.\n\n    - miniChartHeight (number; default 30):\n        针对再渲染模式中的各迷你图模式，统一设置相关单元格像素高度 默认值：`30`.\n\n    - miniChartAnimation (boolean; default False):\n        针对再渲染模式中的各迷你图模式，是否启用出场动画 默认值：`False`.\n\n    - recentlyButtonClickedRow (dict; optional):\n        针对再渲染模式中的`'button'`模式，监听最近一次按钮点击对应的行记录信息.\n\n    - nClicksButton (number; default 0):\n        针对再渲染模式中的`'button'`模式，监听表格中按钮点击累计次数 默认值：`0`.\n\n    - clickedContent (string; optional):\n        针对再渲染模式中的`'button'`模式，监听最近一次按钮点击对应的按钮文字内容.\n\n    - clickedCustom (boolean | number | string | dict | list; optional):\n        针对再渲染模式中的`'button'`模式，监听最近一次按钮点击对应的按钮数据项对应`'custom'`字段内容.\n\n    - recentlyButtonClickedDataIndex (string; optional):\n        针对再渲染模式中的`'button'`模式，监听最近一次按钮点击对应的字段`dataIndex`.\n\n    - customFormatFuncs (dict with strings as keys and values of type string; optional):\n        针对再渲染模式中的`'custom-format'`模式，键为对应字段`dataIndex`信息，值为对应的预处理`javascript`函数字符串.\n\n    - recentlyCheckedRow (dict; optional):\n        针对再渲染模式中的`'checkbox'`模式，监听最近发生勾选事件的记录行.\n\n    - recentlyCheckedLabel (string; optional):\n        针对再渲染模式中的`'checkbox'`模式，监听最近发生勾选事件的勾选框标签内容.\n\n    - recentlyCheckedDataIndex (string; optional):\n        针对再渲染模式中的`'checkbox'`模式，监听最近发生勾选事件的字段`dataIndex`信息.\n\n    - recentlyCheckedStatus (boolean; optional):\n        针对再渲染模式中的`'checkbox'`模式，监听最近发生勾选事件对应的勾选状态.\n\n    - recentlySwitchRow (dict; optional):\n        针对再渲染模式中的`'switch'`模式，监听最近发生开关切换事件的记录行.\n\n    - recentlySwitchDataIndex (string; optional):\n        针对再渲染模式中的`'switch'`模式，监听最近发生开关切换事件对应的开关状态.\n\n    - recentlySwitchStatus (boolean; optional):\n        针对再渲染模式中的`'switch'`模式，监听最近发生开关切换事件对应的开关状态.\n\n    - nClicksDropdownItem (number; default 0):\n        针对再渲染模式中的`'dropdown'`模式，监听表格中各下拉菜单项累计点击次数.\n\n    - recentlyClickedDropdownItemTitle (string; optional):\n        针对再渲染模式中的`'dropdown'`模式，监听最近一次被点击的下拉菜单项`title`值.\n\n    - recentlyDropdownItemClickedDataIndex (string; optional):\n        针对再渲染模式中的`'dropdown'`模式，监听最近一次被点击的下拉菜单项对应的字段dataIndex.\n\n    - recentlyDropdownItemClickedRow (dict; optional):\n        针对再渲染模式中的`'dropdown'`模式，监听最近一次被点击的下拉菜单项对应的行记录.\n\n    - recentlySelectRow (dict; optional):\n        针对再渲染模式中的`'select'`模式，监听最近发生下拉选项值更新的记录行.\n\n    - recentlySelectDataIndex (string; optional):\n        针对再渲染模式中的`'select'`模式，监听最近发生下拉选项值更新对应的字段`dataIndex`.\n\n    - recentlySelectValue (number | string | list of number | strings; optional):\n        针对再渲染模式中的`'select'`模式，监听最近发生下拉选项值更新对应的选项值.\n\n    - hiddenRowKeys (list of strings; optional):\n        需要进行隐藏的行记录`key`值数组 默认值：`[]`.\n\n    - dataDeepCompare (boolean; optional):\n        是否在表格底层进行重绘时，通过深度比较数据源`data`变化情况，来进行表格重绘优化，适用于中小数据量表格 默认值：`False`.\n\n    - virtual (boolean; default False):\n        是否开启虚拟滚动模式 默认值：`False`.\n\n    - title (a list of or a singular dash component, string or number; optional):\n        组件型，表格整体标题内容.\n\n    - footer (a list of or a singular dash component, string or number; optional):\n        组件型，表格整体页脚内容.\n\n    - loading (boolean; default False):\n        是否启用表格自带加载中状态 默认值：`False`.\n\n    - rowClassName (dict; optional):\n        表格行css类名，支持通过`func`字段定义`javascript`函数动态计算.\n\n        `rowClassName` is a string | dict with keys:\n\n        - func (string; optional):\n            字符串形式的`javascript`函数.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = [\n        'columns[].title',\n        'data[]{}',\n        'summaryRowContents[].content',\n        'expandedRowKeyToContent[].content',\n        'emptyContent',\n        'title',\n        'footer',\n    ]\n    _base_nodes = ['emptyContent', 'title', 'footer', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdTable'\n    ColumnsRenderOptionsRenderButtonPopConfirmProps = TypedDict(\n        'ColumnsRenderOptionsRenderButtonPopConfirmProps',\n        {'title': NotRequired[str], 'okText': NotRequired[str], 'cancelText': NotRequired[str]},\n    )\n\n    ColumnsRenderOptionsProgressPercentPosition = TypedDict(\n        'ColumnsRenderOptionsProgressPercentPosition',\n        {\n            'align': NotRequired[Literal['start', 'center', 'end']],\n            'type': NotRequired[Literal['inner', 'outer']],\n        },\n    )\n\n    ColumnsRenderOptionsProgressColor = TypedDict(\n        'ColumnsRenderOptionsProgressColor', {'from': NotRequired[str], 'to': NotRequired[str]}\n    )\n\n    ColumnsRenderOptionsDropdownProps = TypedDict(\n        'ColumnsRenderOptionsDropdownProps',\n        {\n            'title': NotRequired[str],\n            'arrow': NotRequired[bool],\n            'disabled': NotRequired[bool],\n            'overlayClassName': NotRequired[str],\n            'overlayStyle': NotRequired[dict],\n            'placement': NotRequired[\n                Literal[\n                    'bottomLeft', 'bottomCenter', 'bottomRight', 'topLeft', 'topCenter', 'topRight'\n                ]\n            ],\n        },\n    )\n\n    ColumnsRenderOptions = TypedDict(\n        'ColumnsRenderOptions',\n        {\n            'renderType': NotRequired[\n                Literal[\n                    'link',\n                    'ellipsis',\n                    'copyable',\n                    'ellipsis-copyable',\n                    'tags',\n                    'status-badge',\n                    'image',\n                    'custom-format',\n                    'corner-mark',\n                    'row-merge',\n                    'dropdown',\n                    'dropdown-links',\n                    'image-avatar',\n                    'mini-line',\n                    'mini-bar',\n                    'mini-progress',\n                    'mini-ring-progress',\n                    'mini-area',\n                    'button',\n                    'checkbox',\n                    'switch',\n                    'select',\n                ]\n            ],\n            'renderLinkText': NotRequired[str],\n            'likeDccLink': NotRequired[bool],\n            'renderButtonSplit': NotRequired[bool],\n            'renderButtonPopConfirmProps': NotRequired[\n                'ColumnsRenderOptionsRenderButtonPopConfirmProps'\n            ],\n            'miniChartColor': NotRequired[str],\n            'tooltipCustomContent': NotRequired[str],\n            'progressOneHundredPercentColor': NotRequired[str],\n            'progressShowPercent': NotRequired[bool],\n            'progressPercentPrecision': NotRequired[NumberType],\n            'progressPercentPosition': NotRequired['ColumnsRenderOptionsProgressPercentPosition'],\n            'progressStrokeLinecap': NotRequired[Literal['square', 'round']],\n            'progressSize': NotRequired[NumberType],\n            'progressColor': NotRequired[typing.Union[str, 'ColumnsRenderOptionsProgressColor']],\n            'ringProgressFontSize': NotRequired[NumberType],\n            'dropdownProps': NotRequired['ColumnsRenderOptionsDropdownProps'],\n        },\n    )\n\n    ColumnsEditOptionsAutoSize = TypedDict(\n        'ColumnsEditOptionsAutoSize',\n        {'minRows': NotRequired[NumberType], 'maxRows': NotRequired[NumberType]},\n    )\n\n    ColumnsEditOptions = TypedDict(\n        'ColumnsEditOptions',\n        {\n            'mode': NotRequired[Literal['default', 'text-area']],\n            'autoSize': NotRequired[typing.Union[bool, 'ColumnsEditOptionsAutoSize']],\n            'maxLength': NotRequired[NumberType],\n            'placeholder': NotRequired[str],\n            'disabledKeys': NotRequired[typing.Sequence[str]],\n        },\n    )\n\n    Columns = TypedDict(\n        'Columns',\n        {\n            'title': typing.Union[typing.Any, ComponentType],\n            'dataIndex': str,\n            'group': NotRequired[typing.Union[str, typing.Sequence[str]]],\n            'renderOptions': NotRequired['ColumnsRenderOptions'],\n            'fixed': NotRequired[typing.Union[Literal['left', 'right'], bool]],\n            'editable': NotRequired[bool],\n            'editOptions': NotRequired['ColumnsEditOptions'],\n            'align': NotRequired[Literal['left', 'center', 'right']],\n            'headerAlign': NotRequired[Literal['left', 'center', 'right']],\n            'width': NotRequired[typing.Union[NumberType, str]],\n            'minWidth': NotRequired[typing.Union[NumberType, str]],\n            'hidden': NotRequired[bool],\n            'className': NotRequired[str],\n            'defaultSortOrder': NotRequired[Literal['ascend', 'descend']],\n            'filterResetToDefaultFilteredValue': NotRequired[bool],\n        },\n    )\n\n    Data = TypedDict(\n        'Data',\n        {\n            'className': NotRequired[str],\n            'style': NotRequired[dict],\n            'options': NotRequired[typing.Sequence['DataOptions']],\n            'listHeight': NotRequired[NumberType],\n            'mode': NotRequired[Literal['multiple', 'tags']],\n            'disabled': NotRequired[bool],\n            'size': NotRequired[Literal['small', 'middle', 'large']],\n            'bordered': NotRequired[bool],\n            'placeholder': NotRequired[str],\n            'placement': NotRequired[Literal['bottomLeft', 'bottomRight', 'topLeft', 'topRight']],\n            'value': NotRequired[\n                typing.Union[\n                    typing.Union[str, NumberType], typing.Sequence[typing.Union[str, NumberType]]\n                ]\n            ],\n            'maxTagCount': NotRequired[typing.Union[NumberType, Literal['responsive']]],\n            'optionFilterProp': NotRequired[Literal['value', 'label']],\n            'allowClear': NotRequired[bool],\n            'showSearch': NotRequired[bool],\n        },\n    )\n\n    DataTooltip = TypedDict(\n        'DataTooltip',\n        {\n            'title': NotRequired[str],\n            'placement': NotRequired[\n                Literal[\n                    'top',\n                    'left',\n                    'right',\n                    'bottom',\n                    'topLeft',\n                    'topRight',\n                    'bottomLeft',\n                    'bottomRight',\n                ]\n            ],\n        },\n    )\n\n    DataPopConfirmProps = TypedDict(\n        'DataPopConfirmProps',\n        {'title': NotRequired[str], 'okText': NotRequired[str], 'cancelText': NotRequired[str]},\n    )\n\n    DataSize = TypedDict(\n        'DataSize',\n        {\n            'xs': NotRequired[NumberType],\n            'sm': NotRequired[NumberType],\n            'md': NotRequired[NumberType],\n            'lg': NotRequired[NumberType],\n            'xl': NotRequired[NumberType],\n            'xxl': NotRequired[NumberType],\n        },\n    )\n\n    DataOptions = TypedDict(\n        'DataOptions',\n        {'label': NotRequired[str], 'value': NotRequired[typing.Union[str, NumberType]]},\n    )\n\n    Sticky = TypedDict(\n        'Sticky',\n        {\n            'belowSelector': NotRequired[typing.Union[str, typing.Sequence[str]]],\n            'offsetHeader': NotRequired[NumberType],\n            'offsetScroll': NotRequired[NumberType],\n        },\n    )\n\n    TitlePopoverInfo = TypedDict(\n        'TitlePopoverInfo',\n        {\n            'title': NotRequired[str],\n            'content': NotRequired[str],\n            'placement': NotRequired[\n                Literal[\n                    'top',\n                    'left',\n                    'right',\n                    'bottom',\n                    'topLeft',\n                    'topRight',\n                    'bottomLeft',\n                    'bottomRight',\n                    'leftTop',\n                    'leftBottom',\n                    'rightTop',\n                    'rightBottom',\n                ]\n            ],\n            'overlayStyle': NotRequired[dict],\n        },\n    )\n\n    ColumnsFormatConstraint = TypedDict(\n        'ColumnsFormatConstraint', {'rule': NotRequired[str], 'content': NotRequired[str]}\n    )\n\n    SortOptions = TypedDict(\n        'SortOptions',\n        {\n            'sortDataIndexes': NotRequired[typing.Sequence[str]],\n            'multiple': NotRequired[typing.Union[bool, Literal['auto']]],\n            'forceCompareModes': NotRequired[\n                typing.Dict[typing.Union[str, float, int], Literal['number', 'custom']]\n            ],\n            'customOrders': NotRequired[\n                typing.Dict[typing.Union[str, float, int], typing.Sequence]\n            ],\n        },\n    )\n\n    FilterOptions = TypedDict(\n        'FilterOptions',\n        {\n            'filterMode': NotRequired[Literal['checkbox', 'keyword', 'tree']],\n            'filterCustomItems': NotRequired[typing.Union[typing.Sequence[typing.Any], typing.Any]],\n            'filterCustomTreeItems': NotRequired[typing.Sequence[dict]],\n            'filterMultiple': NotRequired[bool],\n            'filterSearch': NotRequired[bool],\n        },\n    )\n\n    Pagination = TypedDict(\n        'Pagination',\n        {\n            'position': NotRequired[\n                Literal[\n                    'topLeft', 'topCenter', 'topRight', 'bottomLeft', 'bottomCenter', 'bottomRight'\n                ]\n            ],\n            'pageSize': NotRequired[NumberType],\n            'current': NotRequired[NumberType],\n            'showSizeChanger': NotRequired[bool],\n            'pageSizeOptions': NotRequired[typing.Sequence[NumberType]],\n            'showTitle': NotRequired[bool],\n            'showQuickJumper': NotRequired[bool],\n            'showTotalPrefix': NotRequired[str],\n            'showTotalSuffix': NotRequired[str],\n            'hideOnSinglePage': NotRequired[bool],\n            'simple': NotRequired[bool],\n            'disabled': NotRequired[bool],\n            'size': NotRequired[Literal['default', 'small']],\n            'total': NotRequired[NumberType],\n            'showLessItems': NotRequired[bool],\n        },\n    )\n\n    Sorter = TypedDict(\n        'Sorter',\n        {\n            'columns': NotRequired[typing.Sequence[str]],\n            'orders': NotRequired[typing.Sequence[Literal['ascend', 'descend']]],\n        },\n    )\n\n    SummaryRowContents = TypedDict(\n        'SummaryRowContents',\n        {\n            'content': NotRequired[ComponentType],\n            'colSpan': NotRequired[NumberType],\n            'align': NotRequired[Literal['left', 'center', 'right']],\n        },\n    )\n\n    ExpandedRowKeyToContent = TypedDict(\n        'ExpandedRowKeyToContent',\n        {'key': typing.Union[str, NumberType], 'content': NotRequired[ComponentType]},\n    )\n\n    CellClickEvent = TypedDict(\n        'CellClickEvent',\n        {\n            'pageX': NotRequired[NumberType],\n            'pageY': NotRequired[NumberType],\n            'clientX': NotRequired[NumberType],\n            'clientY': NotRequired[NumberType],\n            'screenX': NotRequired[NumberType],\n            'screenY': NotRequired[NumberType],\n            'timestamp': NotRequired[NumberType],\n        },\n    )\n\n    CellDoubleClickEvent = TypedDict(\n        'CellDoubleClickEvent',\n        {\n            'pageX': NotRequired[NumberType],\n            'pageY': NotRequired[NumberType],\n            'clientX': NotRequired[NumberType],\n            'clientY': NotRequired[NumberType],\n            'screenX': NotRequired[NumberType],\n            'screenY': NotRequired[NumberType],\n            'timestamp': NotRequired[NumberType],\n        },\n    )\n\n    CellContextMenuClickEvent = TypedDict(\n        'CellContextMenuClickEvent',\n        {\n            'pageX': NotRequired[NumberType],\n            'pageY': NotRequired[NumberType],\n            'clientX': NotRequired[NumberType],\n            'clientY': NotRequired[NumberType],\n            'screenX': NotRequired[NumberType],\n            'screenY': NotRequired[NumberType],\n            'timestamp': NotRequired[NumberType],\n        },\n    )\n\n    RowClassName = TypedDict('RowClassName', {'func': NotRequired[str]})\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[str] = None,\n        locale: typing.Optional[Literal['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']] = None,\n        containerId: typing.Optional[str] = None,\n        columns: typing.Optional[typing.Sequence['Columns']] = None,\n        showHeader: typing.Optional[bool] = None,\n        rowHoverable: typing.Optional[bool] = None,\n        tableLayout: typing.Optional[Literal['auto', 'fixed']] = None,\n        data: typing.Optional[\n            typing.Sequence[\n                typing.Dict[\n                    typing.Union[str, float, int],\n                    typing.Union[\n                        typing.Sequence[typing.Any],\n                        ComponentType,\n                        str,\n                        NumberType,\n                        bool,\n                        'Data',\n                        typing.Sequence[NumberType],\n                        typing.Union['Data', typing.Sequence['Data']],\n                        typing.Sequence['Data'],\n                        dict,\n                    ],\n                ]\n            ]\n        ] = None,\n        bordered: typing.Optional[bool] = None,\n        maxHeight: typing.Optional[typing.Union[NumberType, str]] = None,\n        maxWidth: typing.Optional[typing.Union[NumberType, str, bool]] = None,\n        scrollToFirstRowOnChange: typing.Optional[bool] = None,\n        size: typing.Optional[Literal['small', 'middle', 'large']] = None,\n        rowSelectionType: typing.Optional[Literal['checkbox', 'radio']] = None,\n        selectedRowKeys: typing.Optional[typing.Sequence[typing.Union[str, NumberType]]] = None,\n        selectedRows: typing.Optional[typing.Sequence] = None,\n        rowSelectionWidth: typing.Optional[typing.Union[str, NumberType]] = None,\n        rowSelectionCheckStrictly: typing.Optional[bool] = None,\n        rowSelectionIgnoreRowKeys: typing.Optional[\n            typing.Sequence[typing.Union[str, NumberType]]\n        ] = None,\n        selectedRowsSyncWithData: typing.Optional[bool] = None,\n        sticky: typing.Optional[typing.Union[bool, 'Sticky']] = None,\n        enableHoverListen: typing.Optional[bool] = None,\n        recentlyMouseEnterColumnDataIndex: typing.Optional[str] = None,\n        recentlyMouseEnterRowKey: typing.Optional[typing.Union[str, NumberType]] = None,\n        recentlyMouseEnterRow: typing.Optional[dict] = None,\n        titlePopoverInfo: typing.Optional[\n            typing.Dict[typing.Union[str, float, int], 'TitlePopoverInfo']\n        ] = None,\n        columnsFormatConstraint: typing.Optional[\n            typing.Dict[typing.Union[str, float, int], 'ColumnsFormatConstraint']\n        ] = None,\n        sortOptions: typing.Optional['SortOptions'] = None,\n        showSorterTooltip: typing.Optional[bool] = None,\n        showSorterTooltipTarget: typing.Optional[Literal['full-header', 'sorter-icon']] = None,\n        filterOptions: typing.Optional[\n            typing.Dict[typing.Union[str, float, int], 'FilterOptions']\n        ] = None,\n        defaultFilteredValues: typing.Optional[\n            typing.Dict[typing.Union[str, float, int], typing.Sequence]\n        ] = None,\n        pagination: typing.Optional[typing.Union['Pagination', bool]] = None,\n        currentData: typing.Optional[typing.Sequence] = None,\n        recentlyChangedRow: typing.Optional[dict] = None,\n        recentlyChangedColumn: typing.Optional[str] = None,\n        sorter: typing.Optional['Sorter'] = None,\n        filter: typing.Optional[dict] = None,\n        mode: typing.Optional[Literal['client-side', 'server-side']] = None,\n        summaryRowContents: typing.Optional[typing.Sequence['SummaryRowContents']] = None,\n        summaryRowBlankColumns: typing.Optional[NumberType] = None,\n        summaryRowFixed: typing.Optional[typing.Union[bool, Literal['top', 'bottom']]] = None,\n        conditionalStyleFuncs: typing.Optional[\n            typing.Dict[typing.Union[str, float, int], str]\n        ] = None,\n        expandedRowKeyToContent: typing.Optional[typing.Sequence['ExpandedRowKeyToContent']] = None,\n        expandedRowWidth: typing.Optional[typing.Union[str, NumberType]] = None,\n        expandRowByClick: typing.Optional[bool] = None,\n        defaultExpandedRowKeys: typing.Optional[typing.Sequence[str]] = None,\n        expandedRowKeys: typing.Optional[typing.Sequence[str]] = None,\n        enableCellClickListenColumns: typing.Optional[typing.Sequence[str]] = None,\n        recentlyCellClickColumn: typing.Optional[str] = None,\n        recentlyCellClickRecord: typing.Optional[dict] = None,\n        nClicksCell: typing.Optional[NumberType] = None,\n        cellClickEvent: typing.Optional['CellClickEvent'] = None,\n        recentlyCellDoubleClickColumn: typing.Optional[str] = None,\n        recentlyCellDoubleClickRecord: typing.Optional[dict] = None,\n        nDoubleClicksCell: typing.Optional[NumberType] = None,\n        cellDoubleClickEvent: typing.Optional['CellDoubleClickEvent'] = None,\n        recentlyContextMenuClickColumn: typing.Optional[str] = None,\n        recentlyContextMenuClickRecord: typing.Optional[dict] = None,\n        nContextMenuClicksCell: typing.Optional[NumberType] = None,\n        cellContextMenuClickEvent: typing.Optional['CellContextMenuClickEvent'] = None,\n        emptyContent: typing.Optional[ComponentType] = None,\n        cellUpdateOptimize: typing.Optional[bool] = None,\n        miniChartHeight: typing.Optional[NumberType] = None,\n        miniChartAnimation: typing.Optional[bool] = None,\n        recentlyButtonClickedRow: typing.Optional[dict] = None,\n        nClicksButton: typing.Optional[NumberType] = None,\n        clickedContent: typing.Optional[str] = None,\n        clickedCustom: typing.Optional[typing.Any] = None,\n        recentlyButtonClickedDataIndex: typing.Optional[str] = None,\n        customFormatFuncs: typing.Optional[typing.Dict[typing.Union[str, float, int], str]] = None,\n        recentlyCheckedRow: typing.Optional[dict] = None,\n        recentlyCheckedLabel: typing.Optional[str] = None,\n        recentlyCheckedDataIndex: typing.Optional[str] = None,\n        recentlyCheckedStatus: typing.Optional[bool] = None,\n        recentlySwitchRow: typing.Optional[dict] = None,\n        recentlySwitchDataIndex: typing.Optional[str] = None,\n        recentlySwitchStatus: typing.Optional[bool] = None,\n        nClicksDropdownItem: typing.Optional[NumberType] = None,\n        recentlyClickedDropdownItemTitle: typing.Optional[str] = None,\n        recentlyDropdownItemClickedDataIndex: typing.Optional[str] = None,\n        recentlyDropdownItemClickedRow: typing.Optional[dict] = None,\n        recentlySelectRow: typing.Optional[dict] = None,\n        recentlySelectDataIndex: typing.Optional[str] = None,\n        recentlySelectValue: typing.Optional[\n            typing.Union[\n                typing.Union[NumberType, str], typing.Sequence[typing.Union[NumberType, str]]\n            ]\n        ] = None,\n        hiddenRowKeys: typing.Optional[typing.Sequence[str]] = None,\n        dataDeepCompare: typing.Optional[bool] = None,\n        virtual: typing.Optional[bool] = None,\n        title: typing.Optional[ComponentType] = None,\n        footer: typing.Optional[ComponentType] = None,\n        loading: typing.Optional[bool] = None,\n        rowClassName: typing.Optional[typing.Union[str, 'RowClassName']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'locale',\n            'containerId',\n            'columns',\n            'showHeader',\n            'rowHoverable',\n            'tableLayout',\n            'data',\n            'bordered',\n            'maxHeight',\n            'maxWidth',\n            'scrollToFirstRowOnChange',\n            'size',\n            'rowSelectionType',\n            'selectedRowKeys',\n            'selectedRows',\n            'rowSelectionWidth',\n            'rowSelectionCheckStrictly',\n            'rowSelectionIgnoreRowKeys',\n            'selectedRowsSyncWithData',\n            'sticky',\n            'enableHoverListen',\n            'recentlyMouseEnterColumnDataIndex',\n            'recentlyMouseEnterRowKey',\n            'recentlyMouseEnterRow',\n            'titlePopoverInfo',\n            'columnsFormatConstraint',\n            'sortOptions',\n            'showSorterTooltip',\n            'showSorterTooltipTarget',\n            'filterOptions',\n            'defaultFilteredValues',\n            'pagination',\n            'currentData',\n            'recentlyChangedRow',\n            'recentlyChangedColumn',\n            'sorter',\n            'filter',\n            'mode',\n            'summaryRowContents',\n            'summaryRowBlankColumns',\n            'summaryRowFixed',\n            'conditionalStyleFuncs',\n            'expandedRowKeyToContent',\n            'expandedRowWidth',\n            'expandRowByClick',\n            'defaultExpandedRowKeys',\n            'expandedRowKeys',\n            'enableCellClickListenColumns',\n            'recentlyCellClickColumn',\n            'recentlyCellClickRecord',\n            'nClicksCell',\n            'cellClickEvent',\n            'recentlyCellDoubleClickColumn',\n            'recentlyCellDoubleClickRecord',\n            'nDoubleClicksCell',\n            'cellDoubleClickEvent',\n            'recentlyContextMenuClickColumn',\n            'recentlyContextMenuClickRecord',\n            'nContextMenuClicksCell',\n            'cellContextMenuClickEvent',\n            'emptyContent',\n            'cellUpdateOptimize',\n            'miniChartHeight',\n            'miniChartAnimation',\n            'recentlyButtonClickedRow',\n            'nClicksButton',\n            'clickedContent',\n            'clickedCustom',\n            'recentlyButtonClickedDataIndex',\n            'customFormatFuncs',\n            'recentlyCheckedRow',\n            'recentlyCheckedLabel',\n            'recentlyCheckedDataIndex',\n            'recentlyCheckedStatus',\n            'recentlySwitchRow',\n            'recentlySwitchDataIndex',\n            'recentlySwitchStatus',\n            'nClicksDropdownItem',\n            'recentlyClickedDropdownItemTitle',\n            'recentlyDropdownItemClickedDataIndex',\n            'recentlyDropdownItemClickedRow',\n            'recentlySelectRow',\n            'recentlySelectDataIndex',\n            'recentlySelectValue',\n            'hiddenRowKeys',\n            'dataDeepCompare',\n            'virtual',\n            'title',\n            'footer',\n            'loading',\n            'rowClassName',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'locale',\n            'containerId',\n            'columns',\n            'showHeader',\n            'rowHoverable',\n            'tableLayout',\n            'data',\n            'bordered',\n            'maxHeight',\n            'maxWidth',\n            'scrollToFirstRowOnChange',\n            'size',\n            'rowSelectionType',\n            'selectedRowKeys',\n            'selectedRows',\n            'rowSelectionWidth',\n            'rowSelectionCheckStrictly',\n            'rowSelectionIgnoreRowKeys',\n            'selectedRowsSyncWithData',\n            'sticky',\n            'enableHoverListen',\n            'recentlyMouseEnterColumnDataIndex',\n            'recentlyMouseEnterRowKey',\n            'recentlyMouseEnterRow',\n            'titlePopoverInfo',\n            'columnsFormatConstraint',\n            'sortOptions',\n            'showSorterTooltip',\n            'showSorterTooltipTarget',\n            'filterOptions',\n            'defaultFilteredValues',\n            'pagination',\n            'currentData',\n            'recentlyChangedRow',\n            'recentlyChangedColumn',\n            'sorter',\n            'filter',\n            'mode',\n            'summaryRowContents',\n            'summaryRowBlankColumns',\n            'summaryRowFixed',\n            'conditionalStyleFuncs',\n            'expandedRowKeyToContent',\n            'expandedRowWidth',\n            'expandRowByClick',\n            'defaultExpandedRowKeys',\n            'expandedRowKeys',\n            'enableCellClickListenColumns',\n            'recentlyCellClickColumn',\n            'recentlyCellClickRecord',\n            'nClicksCell',\n            'cellClickEvent',\n            'recentlyCellDoubleClickColumn',\n            'recentlyCellDoubleClickRecord',\n            'nDoubleClicksCell',\n            'cellDoubleClickEvent',\n            'recentlyContextMenuClickColumn',\n            'recentlyContextMenuClickRecord',\n            'nContextMenuClicksCell',\n            'cellContextMenuClickEvent',\n            'emptyContent',\n            'cellUpdateOptimize',\n            'miniChartHeight',\n            'miniChartAnimation',\n            'recentlyButtonClickedRow',\n            'nClicksButton',\n            'clickedContent',\n            'clickedCustom',\n            'recentlyButtonClickedDataIndex',\n            'customFormatFuncs',\n            'recentlyCheckedRow',\n            'recentlyCheckedLabel',\n            'recentlyCheckedDataIndex',\n            'recentlyCheckedStatus',\n            'recentlySwitchRow',\n            'recentlySwitchDataIndex',\n            'recentlySwitchStatus',\n            'nClicksDropdownItem',\n            'recentlyClickedDropdownItemTitle',\n            'recentlyDropdownItemClickedDataIndex',\n            'recentlyDropdownItemClickedRow',\n            'recentlySelectRow',\n            'recentlySelectDataIndex',\n            'recentlySelectValue',\n            'hiddenRowKeys',\n            'dataDeepCompare',\n            'virtual',\n            'title',\n            'footer',\n            'loading',\n            'rowClassName',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdTable, self).__init__(**args)\n\n\nsetattr(AntdTable, '__init__', _explicitize_args(AntdTable.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdTabs.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdTabs(Component):\n    \"\"\"An AntdTabs component.\n    标签页组件AntdTabs\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - type (a value equal to: 'line', 'card', 'editable-card'; default 'line'):\n        标签页类型，可选项有`'line'`、`'card'`、`'editable-card'` 默认值：`'line'`.\n\n    - items (list of dicts; optional):\n        定义标签项.\n\n        `items` is a list of dicts with keys:\n\n        - label (a list of or a singular dash component, string or number; optional):\n            组件型，标签页标题.\n\n        - key (string; optional):\n            标签页唯一识别id.\n\n        - children (a list of or a singular dash component, string or number; optional):\n            组件型，标签页内部元素.\n\n        - icon (a list of or a singular dash component, string or number; optional):\n            组件型，标签页图标元素.\n\n        - closeIcon (boolean | a list of or a singular dash component, string or number; optional):\n            `'editable-card'`型标签页可用，用于自定义关闭按钮，设置为`None`或`False`时会隐藏默认的关闭按钮.\n\n        - destroyInactiveTabPane (boolean; optional):\n            是否在当前标签页隐藏时，自动销毁当前标签页内部元素 默认值：`False`.\n\n        - disabled (boolean; optional):\n            是否禁用当前标签页 默认值：`False`.\n\n        - forceRender (boolean; optional):\n            初始化是否强制渲染当前标签页内部元素 默认值：`False`.\n\n        - closable (boolean; optional):\n            `'editable-card'`型标签页可用，控制当前标签页是否可被关闭 默认值：`True`.\n\n        - contextMenu (list of dicts; optional):\n            为当前标签页标题配置右键菜单相关参数.\n\n            `contextMenu` is a list of dicts with keys:\n\n            - key (string; optional):\n\n                当前右键菜单项唯一标识id.\n\n            - label (string; optional):\n\n                当前右键菜单项标题.\n\n            - icon (string; optional):\n\n                当前右键菜单项前缀图标类型，`iconRenderer`为`'AntdIcon'`时同`AntdIcon`同名参数，`iconRenderer`为`'fontawesome'`时为css类名.\n\n            - iconRenderer (a value equal to: 'AntdIcon', 'fontawesome'; optional):\n\n                当前右键菜单项前缀图标渲染方式，可选项有`'AntdIcon'`、`'fontawesome'`.\n\n    - itemKeys (list of strings; optional):\n        监听当前各标签页`key`值，顺序与`items`一致.\n\n    - activeKey (string; optional):\n        监听或设置当前激活的标签页对应`key`值.\n\n    - defaultActiveKey (string; optional):\n        初始化激活的标签页对应`key`值.\n\n    - disabledTabKeys (list of strings; optional):\n        呈现禁用状态的标签页`key`值数组，优先级高于`items`中各标签页的`disabled`设定.\n\n    - tabPosition (a value equal to: 'top', 'left', 'right', 'bottom'; default 'top'):\n        标签页切换控件显示方位，可选项有`'top'`、`'left'`、`'right'`、`'bottom'` 默认值：`'top'`.\n\n    - size (a value equal to: 'small', 'default', 'large'; default 'default'):\n        当前组件尺寸规格，可选项有`'small'`、`'default'`、`'large'` 默认值：'default'.\n\n    - centered (boolean; default False):\n        是否居中显示标签页切换控件 默认值：`False`.\n\n    - indicator (dict; optional):\n        配置指示条长度及对齐方式.\n\n        `indicator` is a dict with keys:\n\n        - size (number; optional):\n            指示条像素宽度，当传入负数时，表示在完整宽度基础上应减去的像素宽度，默认与标签卡片同宽.\n\n        - align (a value equal to: 'start', 'center', 'end'; optional):\n            指示条对齐方式，可选项有`'start'`、`'center'`、`'end'`.\n\n    - tabBarGutter (number; optional):\n        标签卡片之间的像素间距.\n\n    - tabBarStyle (dict; optional):\n        标签卡片css样式.\n\n    - inkBarAnimated (boolean; default True):\n        标签卡片切换是否添加动画效果 默认值：`True`.\n\n    - tabPaneAnimated (boolean; default False):\n        标签内容切换是否添加动画效果 默认值：`False`.\n\n    - latestDeletePane (string; optional):\n        监听最近一次删除操作对应的标签页`key`值.\n\n    - tabCloseCounts (number; default 0):\n        标签页关闭按钮累计点击次数 默认值：`0`.\n\n    - tabBarLeftExtraContent (a list of or a singular dash component, string or number; optional):\n        组件型，第一方位额外元素.\n\n    - tabBarRightExtraContent (a list of or a singular dash component, string or number; optional):\n        组件型，第二方位额外元素.\n\n    - tabCount (number; optional):\n        监听标签页数量.\n\n    - destroyInactiveTabPane (boolean; default False):\n        统一设置是否自动销毁取消激活状态的标签页内部元素.\n\n    - clickedContextMenu (dict; optional):\n        监听标签页标题右键菜单项相关点击事件.\n\n        `clickedContextMenu` is a dict with keys:\n\n        - tabKey (string; optional):\n            被点击的右键菜单项对应标签页`key`值.\n\n        - menuKey (string; optional):\n            被点击的右键菜单项对应`key`值.\n\n        - timestamp (number; optional):\n            事件对应时间戳信息.\n\n    - placeholder (a list of or a singular dash component, string or number; optional):\n        当`items`为空或长度为`0`时，替代进行占位显示的内容.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\n\n    - persistence (boolean | string | number; optional):\n        是否开启[属性持久化](/prop-persistence).\n\n    - persisted_props (list of a value equal to: 'activeKey's; optional):\n        开启属性持久化功能的若干属性名，可选项有`'activeKey'` 默认值：`['activeKey']`.\n\n    - persistence_type (a value equal to: 'local', 'session', 'memory'; optional):\n        属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n        默认值：`'local'`.\"\"\"\n\n    _children_props: typing.List[str] = [\n        'items[].label',\n        'items[].children',\n        'items[].icon',\n        'items[].closeIcon',\n        'tabBarLeftExtraContent',\n        'tabBarRightExtraContent',\n        'placeholder',\n    ]\n    _base_nodes = ['tabBarLeftExtraContent', 'tabBarRightExtraContent', 'placeholder', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdTabs'\n    ItemsContextMenu = TypedDict(\n        'ItemsContextMenu',\n        {\n            'key': NotRequired[str],\n            'label': NotRequired[str],\n            'icon': NotRequired[str],\n            'iconRenderer': NotRequired[Literal['AntdIcon', 'fontawesome']],\n        },\n    )\n\n    Items = TypedDict(\n        'Items',\n        {\n            'label': NotRequired[ComponentType],\n            'key': NotRequired[str],\n            'children': NotRequired[ComponentType],\n            'icon': NotRequired[ComponentType],\n            'closeIcon': NotRequired[typing.Union[bool, ComponentType]],\n            'destroyInactiveTabPane': NotRequired[bool],\n            'disabled': NotRequired[bool],\n            'forceRender': NotRequired[bool],\n            'closable': NotRequired[bool],\n            'contextMenu': NotRequired[typing.Sequence['ItemsContextMenu']],\n        },\n    )\n\n    Indicator = TypedDict(\n        'Indicator',\n        {'size': NotRequired[NumberType], 'align': NotRequired[Literal['start', 'center', 'end']]},\n    )\n\n    ClickedContextMenu = TypedDict(\n        'ClickedContextMenu',\n        {\n            'tabKey': NotRequired[str],\n            'menuKey': NotRequired[str],\n            'timestamp': NotRequired[NumberType],\n        },\n    )\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        type: typing.Optional[Literal['line', 'card', 'editable-card']] = None,\n        items: typing.Optional[typing.Sequence['Items']] = None,\n        itemKeys: typing.Optional[typing.Sequence[str]] = None,\n        activeKey: typing.Optional[str] = None,\n        defaultActiveKey: typing.Optional[str] = None,\n        disabledTabKeys: typing.Optional[typing.Sequence[str]] = None,\n        tabPosition: typing.Optional[Literal['top', 'left', 'right', 'bottom']] = None,\n        size: typing.Optional[Literal['small', 'default', 'large']] = None,\n        centered: typing.Optional[bool] = None,\n        indicator: typing.Optional['Indicator'] = None,\n        tabBarGutter: typing.Optional[NumberType] = None,\n        tabBarStyle: typing.Optional[dict] = None,\n        inkBarAnimated: typing.Optional[bool] = None,\n        tabPaneAnimated: typing.Optional[bool] = None,\n        latestDeletePane: typing.Optional[str] = None,\n        tabCloseCounts: typing.Optional[NumberType] = None,\n        tabBarLeftExtraContent: typing.Optional[ComponentType] = None,\n        tabBarRightExtraContent: typing.Optional[ComponentType] = None,\n        tabCount: typing.Optional[NumberType] = None,\n        destroyInactiveTabPane: typing.Optional[bool] = None,\n        clickedContextMenu: typing.Optional['ClickedContextMenu'] = None,\n        placeholder: typing.Optional[ComponentType] = None,\n        persistence: typing.Optional[typing.Union[bool, str, NumberType]] = None,\n        persisted_props: typing.Optional[typing.Sequence[Literal['activeKey']]] = None,\n        persistence_type: typing.Optional[Literal['local', 'session', 'memory']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'type',\n            'items',\n            'itemKeys',\n            'activeKey',\n            'defaultActiveKey',\n            'disabledTabKeys',\n            'tabPosition',\n            'size',\n            'centered',\n            'indicator',\n            'tabBarGutter',\n            'tabBarStyle',\n            'inkBarAnimated',\n            'tabPaneAnimated',\n            'latestDeletePane',\n            'tabCloseCounts',\n            'tabBarLeftExtraContent',\n            'tabBarRightExtraContent',\n            'tabCount',\n            'destroyInactiveTabPane',\n            'clickedContextMenu',\n            'placeholder',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'type',\n            'items',\n            'itemKeys',\n            'activeKey',\n            'defaultActiveKey',\n            'disabledTabKeys',\n            'tabPosition',\n            'size',\n            'centered',\n            'indicator',\n            'tabBarGutter',\n            'tabBarStyle',\n            'inkBarAnimated',\n            'tabPaneAnimated',\n            'latestDeletePane',\n            'tabCloseCounts',\n            'tabBarLeftExtraContent',\n            'tabBarRightExtraContent',\n            'tabCount',\n            'destroyInactiveTabPane',\n            'clickedContextMenu',\n            'placeholder',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdTabs, self).__init__(**args)\n\n\nsetattr(AntdTabs, '__init__', _explicitize_args(AntdTabs.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdTag.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdTag(Component):\n    \"\"\"An AntdTag component.\n    标签组件AntdTag\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - content (a list of or a singular dash component, string or number; optional):\n        组件型，标签内容.\n\n    - icon (a list of or a singular dash component, string or number; optional):\n        组件型，标签前缀图标.\n\n    - color (string; optional):\n        标签颜色，可使用内置的若干种颜色主题，也可使用任何合法的css颜色值.\n\n    - href (string; optional):\n        标签点击跳转链接地址.\n\n    - target (string; default '_blank'):\n        标签链接跳转行为.\n\n    - bordered (boolean; default True):\n        是否渲染边框 默认值：`True`.\n\n    - closeIcon (boolean; default False):\n        是否渲染关闭按钮 默认值：`False`.\n\n    - closeCounts (number; default 0):\n        `closeIcon=True`时，监听关闭按钮累计点击次数 默认值：`0`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = ['content', 'icon']\n    _base_nodes = ['content', 'icon', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdTag'\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        content: typing.Optional[ComponentType] = None,\n        icon: typing.Optional[ComponentType] = None,\n        color: typing.Optional[str] = None,\n        href: typing.Optional[str] = None,\n        target: typing.Optional[str] = None,\n        bordered: typing.Optional[bool] = None,\n        closeIcon: typing.Optional[bool] = None,\n        closeCounts: typing.Optional[NumberType] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'content',\n            'icon',\n            'color',\n            'href',\n            'target',\n            'bordered',\n            'closeIcon',\n            'closeCounts',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'content',\n            'icon',\n            'color',\n            'href',\n            'target',\n            'bordered',\n            'closeIcon',\n            'closeCounts',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdTag, self).__init__(**args)\n\n\nsetattr(AntdTag, '__init__', _explicitize_args(AntdTag.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdText.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdText(Component):\n    \"\"\"An AntdText component.\n    文字组件AntdText\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，内嵌元素.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - locale (a value equal to: 'zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr'; default 'zh-cn'):\n        组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n        默认值：`'zh-cn'`.\n\n    - code (boolean; optional):\n        是否渲染为代码形式.\n\n    - copyable (boolean; optional):\n        是否开启快捷复制功能.\n\n    - strikethrough (boolean; optional):\n        是否渲染为删除线形式.\n\n    - disabled (boolean; optional):\n        是否渲染为禁用形式.\n\n    - mark (boolean; optional):\n        是否渲染为高亮形式.\n\n    - strong (boolean; optional):\n        是否渲染为加粗形式.\n\n    - italic (boolean; optional):\n        是否渲染为斜体形式.\n\n    - underline (boolean; optional):\n        是否渲染为下划线形式.\n\n    - keyboard (boolean; optional):\n        是否渲染为键盘形式.\n\n    - type (a value equal to: 'secondary', 'success', 'warning', 'danger'; optional):\n        设置内容特殊状态形式，可选项有`'secondary'`、`'success'`、`'warning'`、`'danger'`.\n\n    - ellipsis (dict; default False):\n        配置内容省略相关功能，设置为`False`则不开启 默认值：`False`.\n\n        `ellipsis` is a boolean | dict with keys:\n\n        - suffix (string; optional):\n            自定义内容省略后缀.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = []\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdText'\n    Ellipsis = TypedDict('Ellipsis', {'suffix': NotRequired[str]})\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        locale: typing.Optional[Literal['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']] = None,\n        code: typing.Optional[bool] = None,\n        copyable: typing.Optional[bool] = None,\n        strikethrough: typing.Optional[bool] = None,\n        disabled: typing.Optional[bool] = None,\n        mark: typing.Optional[bool] = None,\n        strong: typing.Optional[bool] = None,\n        italic: typing.Optional[bool] = None,\n        underline: typing.Optional[bool] = None,\n        keyboard: typing.Optional[bool] = None,\n        type: typing.Optional[Literal['secondary', 'success', 'warning', 'danger']] = None,\n        ellipsis: typing.Optional[typing.Union[bool, 'Ellipsis']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'locale',\n            'code',\n            'copyable',\n            'strikethrough',\n            'disabled',\n            'mark',\n            'strong',\n            'italic',\n            'underline',\n            'keyboard',\n            'type',\n            'ellipsis',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'locale',\n            'code',\n            'copyable',\n            'strikethrough',\n            'disabled',\n            'mark',\n            'strong',\n            'italic',\n            'underline',\n            'keyboard',\n            'type',\n            'ellipsis',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdText, self).__init__(children=children, **args)\n\n\nsetattr(AntdText, '__init__', _explicitize_args(AntdText.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdTimePicker.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdTimePicker(Component):\n    \"\"\"An AntdTimePicker component.\n    时间选择组件AntdTimePicker\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - popupClassName (string; optional):\n        展开菜单css类名.\n\n    - name (string; optional):\n        配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值.\n\n    - enableBatchControl (boolean; default True):\n        控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能 默认值：`True`.\n\n    - locale (a value equal to: 'zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr'; default 'zh-cn'):\n        组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n        默认值：`'zh-cn'`.\n\n    - format (string; default 'HH:mm:ss'):\n        时间显示格式，[参考资料](https://day.js.org/docs/en/display/format)\n        默认值：`'HH:mm:ss'`.\n\n    - disabled (boolean; default False):\n        是否禁用当前组件 默认值：`False`.\n\n    - hourStep (number; default 1):\n        小时选项间隔 默认值：`1`.\n\n    - minuteStep (number; default 1):\n        分钟选项间隔 默认值：`1`.\n\n    - secondStep (number; default 1):\n        秒选项间隔 默认值：`1`.\n\n    - use12Hours (boolean; default False):\n        是否使用12小时制，当设置为`True`时，`format`参数默认值变更为`'h:mm:ss a'` 默认值：`False`.\n\n    - size (a value equal to: 'small', 'middle', 'large'; default 'middle'):\n        当前组件尺寸规格，可选项有`'small'`、`'middle'`、`'large'` 默认值：`'middle'`.\n\n    - bordered (boolean; default True):\n        是否显示边框，设置为`True`时等价于`variant='outlined'` 默认值：`True`.\n\n    - variant (a value equal to: 'outlined', 'borderless', 'filled', 'underlined'; optional):\n        形态变体类型，可选项有`'outlined'`、`'borderless'`、`'filled'`、`'underlined'`，其中`'outlined'`等价于`bordered=True`，但优先级更高.\n\n    - placeholder (string; optional):\n        输入框占位文字内容.\n\n    - placement (a value equal to: 'bottomLeft', 'bottomRight', 'topLeft', 'topRight'; default 'bottomLeft'):\n        选择面板展开方向，可选项有`'bottomLeft'`、`'bottomRight'`、`'topLeft'`、`'topRight'`\n        默认值：`'bottomLeft'`.\n\n    - value (string; optional):\n        监听或设置已选值，与`format`格式对应.\n\n    - defaultValue (string; optional):\n        初始化已选值，与`format`格式对应.\n\n    - status (a value equal to: 'error', 'warning'; optional):\n        控制校验状态，可选项有`'error'`、`'warning'`.\n\n    - allowClear (boolean; default True):\n        是否允许一键清空已选值 默认值：`True`.\n\n    - autoFocus (boolean; default False):\n        是否自动获取焦点 默认值：`False`.\n\n    - readOnly (boolean; optional):\n        是否渲染为只读状态 默认值：`False`.\n\n    - extraFooter (a list of or a singular dash component, string or number; optional):\n        组件型，底部额外区域内容.\n\n    - showNow (boolean; default True):\n        是否显示“此刻”快捷选择按钮 默认值：`True`.\n\n    - prefix (a list of or a singular dash component, string or number; optional):\n        组件型，前缀内嵌内容.\n\n    - suffixIcon (a list of or a singular dash component, string or number; optional):\n        自定义选择框后缀图标内容.\n\n    - popupContainer (a value equal to: 'parent', 'body'; default 'body'):\n        相关展开层锚定策略，可选项有`'parent'`、`'body'` 默认值：`'body'`.\n\n    - batchPropsNames (list of strings; optional):\n        需要纳入[批量属性监听](/batch-props-values)的若干属性名.\n\n    - batchPropsValues (dict; optional):\n        监听`batchPropsNames`中指定的若干属性值.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\n\n    - needConfirm (boolean; default False):\n        是否需要确认按钮，为`False`时失去焦点即代表选择 默认值：`False`.\n\n    - loading_state (dict; optional):\n        Object that holds the loading state object coming from\n        dash-renderer.\n\n        `loading_state` is a dict with keys:\n\n        - is_loading (boolean; optional):\n            Determines if the component is loading or not.\n\n        - prop_name (string; optional):\n            Holds which property is loading.\n\n        - component_name (string; optional):\n            Holds the name of the component that is loading.\n\n    - persistence (boolean | string | number; optional):\n        是否开启[属性持久化](/prop-persistence).\n\n    - persisted_props (list of a value equal to: 'value's; optional):\n        开启属性持久化功能的若干属性名，可选项有`'value'` 默认值：`['value']`.\n\n    - persistence_type (a value equal to: 'local', 'session', 'memory'; optional):\n        属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n        默认值：`'local'`.\"\"\"\n\n    _children_props: typing.List[str] = ['extraFooter', 'prefix', 'suffixIcon']\n    _base_nodes = ['extraFooter', 'prefix', 'suffixIcon', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdTimePicker'\n    LoadingState = TypedDict(\n        'LoadingState',\n        {\n            'is_loading': NotRequired[bool],\n            'prop_name': NotRequired[str],\n            'component_name': NotRequired[str],\n        },\n    )\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        popupClassName: typing.Optional[str] = None,\n        name: typing.Optional[str] = None,\n        enableBatchControl: typing.Optional[bool] = None,\n        locale: typing.Optional[Literal['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']] = None,\n        format: typing.Optional[str] = None,\n        disabled: typing.Optional[bool] = None,\n        hourStep: typing.Optional[NumberType] = None,\n        minuteStep: typing.Optional[NumberType] = None,\n        secondStep: typing.Optional[NumberType] = None,\n        use12Hours: typing.Optional[bool] = None,\n        size: typing.Optional[Literal['small', 'middle', 'large']] = None,\n        bordered: typing.Optional[bool] = None,\n        variant: typing.Optional[Literal['outlined', 'borderless', 'filled', 'underlined']] = None,\n        placeholder: typing.Optional[str] = None,\n        placement: typing.Optional[\n            Literal['bottomLeft', 'bottomRight', 'topLeft', 'topRight']\n        ] = None,\n        value: typing.Optional[str] = None,\n        defaultValue: typing.Optional[str] = None,\n        status: typing.Optional[Literal['error', 'warning']] = None,\n        allowClear: typing.Optional[bool] = None,\n        autoFocus: typing.Optional[bool] = None,\n        readOnly: typing.Optional[bool] = None,\n        extraFooter: typing.Optional[ComponentType] = None,\n        showNow: typing.Optional[bool] = None,\n        prefix: typing.Optional[ComponentType] = None,\n        suffixIcon: typing.Optional[ComponentType] = None,\n        popupContainer: typing.Optional[Literal['parent', 'body']] = None,\n        batchPropsNames: typing.Optional[typing.Sequence[str]] = None,\n        batchPropsValues: typing.Optional[dict] = None,\n        needConfirm: typing.Optional[bool] = None,\n        loading_state: typing.Optional['LoadingState'] = None,\n        persistence: typing.Optional[typing.Union[bool, str, NumberType]] = None,\n        persisted_props: typing.Optional[typing.Sequence[Literal['value']]] = None,\n        persistence_type: typing.Optional[Literal['local', 'session', 'memory']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'popupClassName',\n            'name',\n            'enableBatchControl',\n            'locale',\n            'format',\n            'disabled',\n            'hourStep',\n            'minuteStep',\n            'secondStep',\n            'use12Hours',\n            'size',\n            'bordered',\n            'variant',\n            'placeholder',\n            'placement',\n            'value',\n            'defaultValue',\n            'status',\n            'allowClear',\n            'autoFocus',\n            'readOnly',\n            'extraFooter',\n            'showNow',\n            'prefix',\n            'suffixIcon',\n            'popupContainer',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'needConfirm',\n            'loading_state',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'popupClassName',\n            'name',\n            'enableBatchControl',\n            'locale',\n            'format',\n            'disabled',\n            'hourStep',\n            'minuteStep',\n            'secondStep',\n            'use12Hours',\n            'size',\n            'bordered',\n            'variant',\n            'placeholder',\n            'placement',\n            'value',\n            'defaultValue',\n            'status',\n            'allowClear',\n            'autoFocus',\n            'readOnly',\n            'extraFooter',\n            'showNow',\n            'prefix',\n            'suffixIcon',\n            'popupContainer',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'needConfirm',\n            'loading_state',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdTimePicker, self).__init__(**args)\n\n\nsetattr(AntdTimePicker, '__init__', _explicitize_args(AntdTimePicker.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdTimeRangePicker.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdTimeRangePicker(Component):\n    \"\"\"An AntdTimeRangePicker component.\n    时间范围选择组件AntdTimeRangePicker\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - popupClassName (string; optional):\n        展开菜单css类名.\n\n    - name (string; optional):\n        配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值.\n\n    - enableBatchControl (boolean; default True):\n        控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能 默认值：`True`.\n\n    - locale (a value equal to: 'zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr'; default 'zh-cn'):\n        组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n        默认值：`'zh-cn'`.\n\n    - format (string; default 'HH:mm:ss'):\n        时间显示格式，[参考资料](https://day.js.org/docs/en/display/format)\n        默认值：`'HH:mm:ss'`.\n\n    - hourStep (number; default 1):\n        小时选项间隔 默认值：`1`.\n\n    - minuteStep (number; default 1):\n        分钟选项间隔 默认值：`1`.\n\n    - secondStep (number; default 1):\n        秒选项间隔 默认值：`1`.\n\n    - use12Hours (boolean; default False):\n        是否使用12小时制，当设置为`True`时，`format`参数默认值变更为`'h:mm:ss a'` 默认值：`False`.\n\n    - allowClear (boolean; default True):\n        是否允许一键清空已选值 默认值：`True`.\n\n    - autoFocus (boolean; default False):\n        是否自动获取焦点 默认值：`False`.\n\n    - placeholder (list of strings; optional):\n        输入框占位文字内容.\n\n    - placement (a value equal to: 'bottomLeft', 'bottomRight', 'topLeft', 'topRight'; default 'bottomLeft'):\n        选择面板展开方向，可选项有`'bottomLeft'`、`'bottomRight'`、`'topLeft'`、`'topRight'`\n        默认值：`'bottomLeft'`.\n\n    - disabled (list of booleans; default [False, False]):\n        是否禁用当前组件 默认值：`False`.\n\n    - value (list of strings; optional):\n        监听或设置已选值，与`format`格式对应.\n\n    - defaultValue (list of strings; optional):\n        初始化已选值，与`format`格式对应.\n\n    - bordered (boolean; default True):\n        是否显示边框，设置为`True`时等价于`variant='outlined'` 默认值：`True`.\n\n    - variant (a value equal to: 'outlined', 'borderless', 'filled', 'underlined'; optional):\n        形态变体类型，可选项有`'outlined'`、`'borderless'`、`'filled'`、`'underlined'`，其中`'outlined'`等价于`bordered=True`，但优先级更高.\n\n    - size (a value equal to: 'small', 'middle', 'large'; default 'middle'):\n        当前组件尺寸规格，可选项有`'small'`、`'middle'`、`'large'` 默认值：`'middle'`.\n\n    - open (boolean; optional):\n        监听或设置当前选择面板是否展开.\n\n    - status (a value equal to: 'error', 'warning'; optional):\n        控制校验状态，可选项有`'error'`、`'warning'`.\n\n    - readOnly (boolean; optional):\n        是否渲染为只读状态 默认值：`False`.\n\n    - extraFooter (a list of or a singular dash component, string or number; optional):\n        组件型，底部额外区域内容.\n\n    - prefix (a list of or a singular dash component, string or number; optional):\n        组件型，前缀内嵌内容.\n\n    - suffixIcon (a list of or a singular dash component, string or number; optional):\n        自定义选择框后缀图标内容.\n\n    - popupContainer (a value equal to: 'parent', 'body'; default 'body'):\n        相关展开层锚定策略，可选项有`'parent'`、`'body'` 默认值：`'body'`.\n\n    - batchPropsNames (list of strings; optional):\n        需要纳入[批量属性监听](/batch-props-values)的若干属性名.\n\n    - batchPropsValues (dict; optional):\n        监听`batchPropsNames`中指定的若干属性值.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\n\n    - needConfirm (boolean; default False):\n        是否需要确认按钮，为`False`时失去焦点即代表选择 默认值：`False`.\n\n    - persistence (boolean | string | number; optional):\n        是否开启[属性持久化](/prop-persistence).\n\n    - persisted_props (list of a value equal to: 'value's; optional):\n        开启属性持久化功能的若干属性名，可选项有`'value'` 默认值：`['value']`.\n\n    - persistence_type (a value equal to: 'local', 'session', 'memory'; optional):\n        属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n        默认值：`'local'`.\"\"\"\n\n    _children_props: typing.List[str] = ['extraFooter', 'prefix', 'suffixIcon']\n    _base_nodes = ['extraFooter', 'prefix', 'suffixIcon', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdTimeRangePicker'\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        popupClassName: typing.Optional[str] = None,\n        name: typing.Optional[str] = None,\n        enableBatchControl: typing.Optional[bool] = None,\n        locale: typing.Optional[Literal['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']] = None,\n        format: typing.Optional[str] = None,\n        hourStep: typing.Optional[NumberType] = None,\n        minuteStep: typing.Optional[NumberType] = None,\n        secondStep: typing.Optional[NumberType] = None,\n        use12Hours: typing.Optional[bool] = None,\n        allowClear: typing.Optional[bool] = None,\n        autoFocus: typing.Optional[bool] = None,\n        placeholder: typing.Optional[typing.Sequence[str]] = None,\n        placement: typing.Optional[\n            Literal['bottomLeft', 'bottomRight', 'topLeft', 'topRight']\n        ] = None,\n        disabled: typing.Optional[typing.Sequence[bool]] = None,\n        value: typing.Optional[typing.Sequence[str]] = None,\n        defaultValue: typing.Optional[typing.Sequence[str]] = None,\n        bordered: typing.Optional[bool] = None,\n        variant: typing.Optional[Literal['outlined', 'borderless', 'filled', 'underlined']] = None,\n        size: typing.Optional[Literal['small', 'middle', 'large']] = None,\n        open: typing.Optional[bool] = None,\n        status: typing.Optional[Literal['error', 'warning']] = None,\n        readOnly: typing.Optional[bool] = None,\n        extraFooter: typing.Optional[ComponentType] = None,\n        prefix: typing.Optional[ComponentType] = None,\n        suffixIcon: typing.Optional[ComponentType] = None,\n        popupContainer: typing.Optional[Literal['parent', 'body']] = None,\n        batchPropsNames: typing.Optional[typing.Sequence[str]] = None,\n        batchPropsValues: typing.Optional[dict] = None,\n        needConfirm: typing.Optional[bool] = None,\n        persistence: typing.Optional[typing.Union[bool, str, NumberType]] = None,\n        persisted_props: typing.Optional[typing.Sequence[Literal['value']]] = None,\n        persistence_type: typing.Optional[Literal['local', 'session', 'memory']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'popupClassName',\n            'name',\n            'enableBatchControl',\n            'locale',\n            'format',\n            'hourStep',\n            'minuteStep',\n            'secondStep',\n            'use12Hours',\n            'allowClear',\n            'autoFocus',\n            'placeholder',\n            'placement',\n            'disabled',\n            'value',\n            'defaultValue',\n            'bordered',\n            'variant',\n            'size',\n            'open',\n            'status',\n            'readOnly',\n            'extraFooter',\n            'prefix',\n            'suffixIcon',\n            'popupContainer',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'needConfirm',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'popupClassName',\n            'name',\n            'enableBatchControl',\n            'locale',\n            'format',\n            'hourStep',\n            'minuteStep',\n            'secondStep',\n            'use12Hours',\n            'allowClear',\n            'autoFocus',\n            'placeholder',\n            'placement',\n            'disabled',\n            'value',\n            'defaultValue',\n            'bordered',\n            'variant',\n            'size',\n            'open',\n            'status',\n            'readOnly',\n            'extraFooter',\n            'prefix',\n            'suffixIcon',\n            'popupContainer',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'needConfirm',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdTimeRangePicker, self).__init__(**args)\n\n\nsetattr(AntdTimeRangePicker, '__init__', _explicitize_args(AntdTimeRangePicker.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdTimeline.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdTimeline(Component):\n    \"\"\"An AntdTimeline component.\n    时间轴组件AntdTimeline\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - items (list of dicts; required):\n        必填，定义时间轴节点.\n\n        `items` is a list of dicts with keys:\n\n        - content (a list of or a singular dash component, string or number; optional):\n            组件型，当前节点正文内容.\n\n        - color (string; optional):\n            当前节点颜色，可用于表达节点状态，常用方案有`'blue'`（进行中或默认状态）、`'green'`（已完成状态）、`'red'`（警告或错误状态）、`'grey'`（未完成或失效状态）.\n\n        - icon (a list of or a singular dash component, string or number; optional):\n            组件型，自定义作为图标的元素.\n\n        - label (a list of or a singular dash component, string or number; optional):\n            组件型，当前节点标签内容.\n\n        - position (a value equal to: 'left', 'right'; optional):\n            当前节点位置，可选项有`'left'`、`'right'`.\n\n    - mode (a value equal to: 'left', 'alternate', 'right'; default 'left'):\n        时间轴与内容的相对位置，可选项有`'left'`、`'alternate'`、`'right'`.\n\n    - pending (a list of or a singular dash component, string or number; optional):\n        组件型，设置时间轴末尾额外幽灵节点标题内容，默认不添加.\n\n    - pendingDot (a list of or a singular dash component, string or number; optional):\n        组件型，自定义幽灵节点图标.\n\n    - reverse (boolean; default False):\n        是否逆序排列时间轴 默认值：`False`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = [\n        'items[].content',\n        'items[].icon',\n        'items[].label',\n        'pending',\n        'pendingDot',\n    ]\n    _base_nodes = ['pending', 'pendingDot', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdTimeline'\n    Items = TypedDict(\n        'Items',\n        {\n            'content': NotRequired[ComponentType],\n            'color': NotRequired[str],\n            'icon': NotRequired[ComponentType],\n            'label': NotRequired[ComponentType],\n            'position': NotRequired[Literal['left', 'right']],\n        },\n    )\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        items: typing.Optional[typing.Sequence['Items']] = None,\n        mode: typing.Optional[Literal['left', 'alternate', 'right']] = None,\n        pending: typing.Optional[ComponentType] = None,\n        pendingDot: typing.Optional[ComponentType] = None,\n        reverse: typing.Optional[bool] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'items',\n            'mode',\n            'pending',\n            'pendingDot',\n            'reverse',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'items',\n            'mode',\n            'pending',\n            'pendingDot',\n            'reverse',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        for k in ['items']:\n            if k not in args:\n                raise TypeError('Required argument `' + k + '` was not specified.')\n\n        super(AntdTimeline, self).__init__(**args)\n\n\nsetattr(AntdTimeline, '__init__', _explicitize_args(AntdTimeline.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdTitle.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdTitle(Component):\n    \"\"\"An AntdTitle component.\n    标题组件AntdTitle\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，内嵌元素.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - locale (a value equal to: 'zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr'; default 'zh-cn'):\n        组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n        默认值：`'zh-cn'`.\n\n    - level (number; default 1):\n        标题级别，可选项有`1`、`2`、`3`、`4`、`5` 默认值：`1`.\n\n    - code (boolean; optional):\n        是否渲染为代码形式.\n\n    - copyable (boolean; optional):\n        是否开启快捷复制功能.\n\n    - strikethrough (boolean; optional):\n        是否渲染为删除线形式.\n\n    - disabled (boolean; optional):\n        是否渲染为禁用形式.\n\n    - mark (boolean; optional):\n        是否渲染为高亮形式.\n\n    - strong (boolean; optional):\n        是否渲染为加粗形式.\n\n    - italic (boolean; optional):\n        是否渲染为斜体形式.\n\n    - underline (boolean; optional):\n        是否渲染为下划线形式.\n\n    - keyboard (boolean; optional):\n        是否渲染为键盘形式.\n\n    - type (a value equal to: 'secondary', 'success', 'warning', 'danger'; optional):\n        设置内容特殊状态形式，可选项有`'secondary'`、`'success'`、`'warning'`、`'danger'`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = []\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdTitle'\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        locale: typing.Optional[Literal['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']] = None,\n        level: typing.Optional[NumberType] = None,\n        code: typing.Optional[bool] = None,\n        copyable: typing.Optional[bool] = None,\n        strikethrough: typing.Optional[bool] = None,\n        disabled: typing.Optional[bool] = None,\n        mark: typing.Optional[bool] = None,\n        strong: typing.Optional[bool] = None,\n        italic: typing.Optional[bool] = None,\n        underline: typing.Optional[bool] = None,\n        keyboard: typing.Optional[bool] = None,\n        type: typing.Optional[Literal['secondary', 'success', 'warning', 'danger']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'locale',\n            'level',\n            'code',\n            'copyable',\n            'strikethrough',\n            'disabled',\n            'mark',\n            'strong',\n            'italic',\n            'underline',\n            'keyboard',\n            'type',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'locale',\n            'level',\n            'code',\n            'copyable',\n            'strikethrough',\n            'disabled',\n            'mark',\n            'strong',\n            'italic',\n            'underline',\n            'keyboard',\n            'type',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdTitle, self).__init__(children=children, **args)\n\n\nsetattr(AntdTitle, '__init__', _explicitize_args(AntdTitle.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdTooltip.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdTooltip(Component):\n    \"\"\"An AntdTooltip component.\n    文字提示组件AntdTooltip\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，文字提示挂载目标.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - styles (dict; optional):\n        细分控制子元素css样式.\n\n        `styles` is a dict with keys:\n\n        - root (dict; optional):\n            根元素（包含箭头、内容元素）css样式.\n\n        - body (dict; optional):\n            内容元素css样式.\n\n    - classNames (dict; optional):\n        细分控制子元素css类名.\n\n        `classNames` is a dict with keys:\n\n        - root (string; optional):\n            根元素（包含箭头、内容元素）css类名.\n\n        - body (string; optional):\n            内容元素css类名.\n\n    - title (a list of or a singular dash component, string or number; optional):\n        组件型，文字提示内容.\n\n    - placement (a value equal to: 'top', 'left', 'right', 'bottom', 'topLeft', 'topRight', 'bottomLeft', 'bottomRight'; default 'top'):\n        文字提示弹出方向，可选项有`'top'`、`'left'`、`'right'`、`'bottom'`、`'topLeft'`、`'topRight'`、`'bottomLeft'`、`'bottomRight'`、`'leftTop'`、`'leftBottom'`、`'rightTop'`、`'rightBottom'`\n        默认值：`'top'`.\n\n    - color (string; optional):\n        背景颜色.\n\n    - mouseEnterDelay (number; default 0.1):\n        鼠标移入到文字提示弹出延时，单位：秒 默认值：`0.1`.\n\n    - mouseLeaveDelay (number; default 0.1):\n        鼠标移出到文字提示消失延时，单位：秒 默认值：`0.1`.\n\n    - trigger (a value equal to: 'hover', 'focus', 'click' | list of a value equal to: 'hover', 'focus', 'click's; default 'hover'):\n        触发方式，可选项有`'hover'`、`'focus'`、`'click'`，可多选 默认值：`'hover'`.\n\n    - zIndex (number; optional):\n        文字提示卡片z-index.\n\n    - arrow (a value equal to: 'show', 'hide', 'center'; default 'show'):\n        文字提示卡片附带箭头显示形式，可选项有`'show'`、`'hide'`、`'center'` 默认值：`'show'`.\n\n    - fresh (boolean; default False):\n        是否始终保持更新内容 默认值：`False`.\n\n    - open (boolean; default False):\n        监听或设置当前文字提示卡片的展开状态 默认值：`False`.\n\n    - permanent (boolean; default False):\n        是否保持文字提示卡片处于`open`对应状态不变 默认值：`False`.\n\n    - popupContainer (a value equal to: 'parent', 'body'; default 'body'):\n        文字提示卡片展开层锚定策略，可选项有`'parent'`、`'body'` 默认值：`'body'`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\n\n    - loading_state (dict; optional)\n\n        `loading_state` is a dict with keys:\n\n        - is_loading (boolean; optional):\n            Determines if the component is loading or not.\n\n        - prop_name (string; optional):\n            Holds which property is loading.\n\n        - component_name (string; optional):\n            Holds the name of the component that is loading.\"\"\"\n\n    _children_props: typing.List[str] = ['title']\n    _base_nodes = ['title', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdTooltip'\n    Styles = TypedDict('Styles', {'root': NotRequired[dict], 'body': NotRequired[dict]})\n\n    ClassNames = TypedDict('ClassNames', {'root': NotRequired[str], 'body': NotRequired[str]})\n\n    LoadingState = TypedDict(\n        'LoadingState',\n        {\n            'is_loading': NotRequired[bool],\n            'prop_name': NotRequired[str],\n            'component_name': NotRequired[str],\n        },\n    )\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        styles: typing.Optional['Styles'] = None,\n        classNames: typing.Optional['ClassNames'] = None,\n        title: typing.Optional[ComponentType] = None,\n        placement: typing.Optional[\n            Literal[\n                'top', 'left', 'right', 'bottom', 'topLeft', 'topRight', 'bottomLeft', 'bottomRight'\n            ]\n        ] = None,\n        color: typing.Optional[str] = None,\n        mouseEnterDelay: typing.Optional[NumberType] = None,\n        mouseLeaveDelay: typing.Optional[NumberType] = None,\n        trigger: typing.Optional[\n            typing.Union[\n                Literal['hover', 'focus', 'click'],\n                typing.Sequence[Literal['hover', 'focus', 'click']],\n            ]\n        ] = None,\n        zIndex: typing.Optional[NumberType] = None,\n        arrow: typing.Optional[Literal['show', 'hide', 'center']] = None,\n        fresh: typing.Optional[bool] = None,\n        open: typing.Optional[bool] = None,\n        permanent: typing.Optional[bool] = None,\n        popupContainer: typing.Optional[Literal['parent', 'body']] = None,\n        loading_state: typing.Optional['LoadingState'] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'styles',\n            'classNames',\n            'title',\n            'placement',\n            'color',\n            'mouseEnterDelay',\n            'mouseLeaveDelay',\n            'trigger',\n            'zIndex',\n            'arrow',\n            'fresh',\n            'open',\n            'permanent',\n            'popupContainer',\n            'data-*',\n            'aria-*',\n            'loading_state',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'styles',\n            'classNames',\n            'title',\n            'placement',\n            'color',\n            'mouseEnterDelay',\n            'mouseLeaveDelay',\n            'trigger',\n            'zIndex',\n            'arrow',\n            'fresh',\n            'open',\n            'permanent',\n            'popupContainer',\n            'data-*',\n            'aria-*',\n            'loading_state',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdTooltip, self).__init__(children=children, **args)\n\n\nsetattr(AntdTooltip, '__init__', _explicitize_args(AntdTooltip.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdTour.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdTour(Component):\n    \"\"\"An AntdTour component.\n    漫游式引导组件AntdTour\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - locale (a value equal to: 'zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr'; default 'zh-cn'):\n        组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n        默认值：`'zh-cn'`.\n\n    - steps (list of dicts; optional):\n        配置引导步骤.\n\n        `steps` is a list of dicts with keys:\n\n        - targetId (string; optional):\n            当前步骤目标元素id，优先级高于`targetSelector`.\n\n        - targetSelector (string; optional):\n            定位当前步骤目标元素的javascript代码字符串.\n\n        - arrow (dict; optional):\n            配置当前步骤箭头 默认值：`True`.\n\n            `arrow` is a boolean\n\n          Or dict with keys:\n\n            - pointAtCenter (boolean; optional):\n\n                箭头是否指向目标中心.\n\n        - cover (a list of or a singular dash component, string or number; optional):\n            组件型，当前步骤弹框的封面内容.\n\n        - title (a list of or a singular dash component, string or number; optional):\n            组件型，当前步骤弹框的标题内容.\n\n        - description (a list of or a singular dash component, string or number; optional):\n            组件型，当前步骤弹框的描述内容.\n\n        - placement (a value equal to: 'center', 'left', 'leftTop', 'leftBottom', 'right', 'rightTop', 'rightBottom', 'top', 'topLeft', 'topRight', 'bottom', 'bottomLeft', 'bottomRight'; optional):\n            当前引导步骤弹框相对目标元素的位置，可选项有`'center'`、`'left'`、`'leftTop'`、`'leftBottom'`、`'right'`、`'rightTop'`、`'rightBottom'`、`'top'`、`'topLeft'`、`'topRight'`、`'bottom'`、`'bottomLeft'`、`'bottomRight'`.\n\n        - mask (dict; optional):\n            配置当前步骤蒙版层 默认值：`True`.\n\n            `mask` is a boolean | dict with keys:\n\n            - style (dict; optional):\n\n                当前步骤蒙版层css样式.\n\n            - color (string; optional):\n\n                当前步骤蒙版层颜色.\n\n        - type (a value equal to: 'default', 'primary'; optional):\n            当前步骤弹框类型，可选项有`'default'`、`'primary'` 默认值：`'default'`.\n\n        - nextButtonProps (dict; optional):\n            配置当前步骤下一步按钮.\n\n            `nextButtonProps` is a dict with keys:\n\n            - children (a list of or a singular dash component, string or number; optional):\n                组件型，按钮内嵌元素.\n\n        - prevButtonProps (dict; optional):\n            配置当前步骤上一步按钮.\n\n            `prevButtonProps` is a dict with keys:\n\n            - children (a list of or a singular dash component, string or number; optional):\n                组件型，按钮内嵌元素.\n\n    - arrow (dict; default True):\n        统一配置引导步骤弹框箭头 默认值：`True`.\n\n        `arrow` is a boolean | dict with keys:\n\n        - pointAtCenter (boolean; optional):\n            箭头是否指向目标中心.\n\n    - placement (a value equal to: 'center', 'left', 'leftTop', 'leftBottom', 'right', 'rightTop', 'rightBottom', 'top', 'topLeft', 'topRight', 'bottom', 'bottomLeft', 'bottomRight'; default 'bottom'):\n        统一配置引导步骤弹框相对于目标元素的展开方向，可选项有`'center'`、`'left'`、`'leftTop'`、`'leftBottom'`、`'right'`、`'rightTop'`、`'rightBottom'`、`'top'`、`'topLeft'`、`'topRight'`、`'bottom'`、`'bottomLeft'`、`'bottomRight'`\n        默认值：`'bottom'`.\n\n    - mask (dict; default True):\n        统一配置引导弹框蒙版 默认值：`True`.\n\n        `mask` is a boolean | dict with keys:\n\n        - style (dict; optional):\n            蒙版层css样式.\n\n        - color (string; optional):\n            蒙版层颜色.\n\n    - type (a value equal to: 'default', 'primary'; default 'default'):\n        统一设置引导步骤弹框类型，可选项有`'default'`、`'primary'` 默认值：`'default'`.\n\n    - open (boolean; default False):\n        监听或设置当前漫游式引导的打开状态 默认值：`False`.\n\n    - current (number; optional):\n        监听或设置当前漫游式引导所在步骤序号.\n\n    - zIndex (number; default 1001):\n        当前漫游式引导z-index 默认值：`1001`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = [\n        'steps[].cover',\n        'steps[].title',\n        'steps[].description',\n        'steps[].nextButtonProps.children',\n        'steps[].prevButtonProps.children',\n    ]\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdTour'\n    StepsArrow = TypedDict('StepsArrow', {'pointAtCenter': NotRequired[bool]})\n\n    StepsMask = TypedDict('StepsMask', {'style': NotRequired[dict], 'color': NotRequired[str]})\n\n    StepsNextButtonProps = TypedDict(\n        'StepsNextButtonProps', {'children': NotRequired[ComponentType]}\n    )\n\n    StepsPrevButtonProps = TypedDict(\n        'StepsPrevButtonProps', {'children': NotRequired[ComponentType]}\n    )\n\n    Steps = TypedDict(\n        'Steps',\n        {\n            'targetId': NotRequired[str],\n            'targetSelector': NotRequired[str],\n            'arrow': NotRequired[typing.Union[bool, 'StepsArrow']],\n            'cover': NotRequired[ComponentType],\n            'title': NotRequired[ComponentType],\n            'description': NotRequired[ComponentType],\n            'placement': NotRequired[\n                Literal[\n                    'center',\n                    'left',\n                    'leftTop',\n                    'leftBottom',\n                    'right',\n                    'rightTop',\n                    'rightBottom',\n                    'top',\n                    'topLeft',\n                    'topRight',\n                    'bottom',\n                    'bottomLeft',\n                    'bottomRight',\n                ]\n            ],\n            'mask': NotRequired[typing.Union[bool, 'StepsMask']],\n            'type': NotRequired[Literal['default', 'primary']],\n            'nextButtonProps': NotRequired['StepsNextButtonProps'],\n            'prevButtonProps': NotRequired['StepsPrevButtonProps'],\n        },\n    )\n\n    Arrow = TypedDict('Arrow', {'pointAtCenter': NotRequired[bool]})\n\n    Mask = TypedDict('Mask', {'style': NotRequired[dict], 'color': NotRequired[str]})\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        locale: typing.Optional[Literal['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']] = None,\n        steps: typing.Optional[typing.Sequence['Steps']] = None,\n        arrow: typing.Optional[typing.Union[bool, 'Arrow']] = None,\n        placement: typing.Optional[\n            Literal[\n                'center',\n                'left',\n                'leftTop',\n                'leftBottom',\n                'right',\n                'rightTop',\n                'rightBottom',\n                'top',\n                'topLeft',\n                'topRight',\n                'bottom',\n                'bottomLeft',\n                'bottomRight',\n            ]\n        ] = None,\n        mask: typing.Optional[typing.Union[bool, 'Mask']] = None,\n        type: typing.Optional[Literal['default', 'primary']] = None,\n        open: typing.Optional[bool] = None,\n        current: typing.Optional[NumberType] = None,\n        zIndex: typing.Optional[NumberType] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'locale',\n            'steps',\n            'arrow',\n            'placement',\n            'mask',\n            'type',\n            'open',\n            'current',\n            'zIndex',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'locale',\n            'steps',\n            'arrow',\n            'placement',\n            'mask',\n            'type',\n            'open',\n            'current',\n            'zIndex',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdTour, self).__init__(**args)\n\n\nsetattr(AntdTour, '__init__', _explicitize_args(AntdTour.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdTransfer.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdTransfer(Component):\n    \"\"\"An AntdTransfer component.\n    穿梭框组件AntdTransfer\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - name (string; optional):\n        配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值.\n\n    - enableBatchControl (boolean; default True):\n        控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能 默认值：`True`.\n\n    - locale (a value equal to: 'zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr'; default 'zh-cn'):\n        组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n        默认值：`'zh-cn'`.\n\n    - dataSource (list of dicts; optional):\n        配置选项.\n\n        `dataSource` is a list of dicts with keys:\n\n        - key (string | number; optional):\n            当前选项唯一识别id.\n\n        - title (a list of or a singular dash component, string or number; optional):\n            组件型，当前选项标题内容.\n\n        - disabled (boolean; optional):\n            是否禁用当前选项 默认值：`False`.\n\n    - selectionsIcon (a list of or a singular dash component, string or number; optional):\n        组件型，自定义下拉菜单图标.\n\n    - height (string | number; optional):\n        穿梭框整体高度.\n\n    - pagination (dict; default False):\n        选项分页展示配置 默认值：`False`.\n\n        `pagination` is a boolean | dict with keys:\n\n        - pageSize (number; optional):\n            每页最大选项数.\n\n    - oneWay (boolean; default False):\n        是否启用单向模式 默认值：`False`.\n\n    - operations (list of a list of or a singular dash component, string or numbers; default ['', '']):\n        左右移动操作按钮内容 默认值：`'['', '']'`.\n\n    - showSearch (boolean; default False):\n        是否显示搜索框 默认值：`False`.\n\n    - optionFilterMode (a value equal to: 'case-insensitive', 'case-sensitive', 'regex'; default 'case-insensitive'):\n        搜索匹配模式，可选项有`'case-insensitive'`（大小写不敏感）、`'case-sensitive'`（大小写敏感）、`'regex'`（正则表达式）\n        默认值：`'case-insensitive'`.\n\n    - showSelectAll (boolean; default True):\n        是否显示全选勾选框 默认值：`True`.\n\n    - titles (list of a list of or a singular dash component, string or numbers; optional):\n        左右标题内容.\n\n    - targetKeys (list of number | strings; optional):\n        监听或设置右侧区域已选项`key`值.\n\n    - moveDirection (a value equal to: 'left', 'right'; optional):\n        监听最近一次选项移动对应方向，可选项有`'left'`、`'right'`.\n\n    - moveKeys (list of number | strings; optional):\n        监听最近一次选项移动涉及的选项`key`值.\n\n    - disabled (boolean; default False):\n        是否禁用当前组件 默认值：`False`.\n\n    - status (a value equal to: 'error', 'warning'; optional):\n        控制校验状态，可选项有`'error'`、`'warning'`.\n\n    - readOnly (boolean; default False):\n        是否渲染为只读状态 默认值：`False`.\n\n    - batchPropsNames (list of strings; optional):\n        需要纳入[批量属性监听](/batch-props-values)的若干属性名.\n\n    - batchPropsValues (dict; optional):\n        监听`batchPropsNames`中指定的若干属性值.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\n\n    - loading_state (dict; optional)\n\n        `loading_state` is a dict with keys:\n\n        - is_loading (boolean; optional):\n            Determines if the component is loading or not.\n\n        - prop_name (string; optional):\n            Holds which property is loading.\n\n        - component_name (string; optional):\n            Holds the name of the component that is loading.\n\n    - persistence (boolean | string | number; optional):\n        是否开启[属性持久化](/prop-persistence).\n\n    - persisted_props (list of a value equal to: 'targetKeys's; optional):\n        开启属性持久化功能的若干属性名，可选项有`'targetKeys'` 默认值：`['targetKeys']`.\n\n    - persistence_type (a value equal to: 'local', 'session', 'memory'; optional):\n        属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n        默认值：`'local'`.\"\"\"\n\n    _children_props: typing.List[str] = [\n        'dataSource[].title',\n        'selectionsIcon',\n        'operations',\n        'titles',\n    ]\n    _base_nodes = ['selectionsIcon', 'operations', 'titles', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdTransfer'\n    DataSource = TypedDict(\n        'DataSource',\n        {\n            'key': NotRequired[typing.Union[str, NumberType]],\n            'title': NotRequired[ComponentType],\n            'disabled': NotRequired[bool],\n        },\n    )\n\n    Pagination = TypedDict('Pagination', {'pageSize': NotRequired[NumberType]})\n\n    LoadingState = TypedDict(\n        'LoadingState',\n        {\n            'is_loading': NotRequired[bool],\n            'prop_name': NotRequired[str],\n            'component_name': NotRequired[str],\n        },\n    )\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        name: typing.Optional[str] = None,\n        enableBatchControl: typing.Optional[bool] = None,\n        locale: typing.Optional[Literal['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']] = None,\n        dataSource: typing.Optional[typing.Sequence['DataSource']] = None,\n        selectionsIcon: typing.Optional[ComponentType] = None,\n        height: typing.Optional[typing.Union[str, NumberType]] = None,\n        pagination: typing.Optional[typing.Union[bool, 'Pagination']] = None,\n        oneWay: typing.Optional[bool] = None,\n        operations: typing.Optional[typing.Sequence[ComponentType]] = None,\n        showSearch: typing.Optional[bool] = None,\n        optionFilterMode: typing.Optional[\n            Literal['case-insensitive', 'case-sensitive', 'regex']\n        ] = None,\n        showSelectAll: typing.Optional[bool] = None,\n        titles: typing.Optional[typing.Sequence[ComponentType]] = None,\n        targetKeys: typing.Optional[typing.Sequence[typing.Union[NumberType, str]]] = None,\n        moveDirection: typing.Optional[Literal['left', 'right']] = None,\n        moveKeys: typing.Optional[typing.Sequence[typing.Union[NumberType, str]]] = None,\n        disabled: typing.Optional[bool] = None,\n        status: typing.Optional[Literal['error', 'warning']] = None,\n        readOnly: typing.Optional[bool] = None,\n        batchPropsNames: typing.Optional[typing.Sequence[str]] = None,\n        batchPropsValues: typing.Optional[dict] = None,\n        loading_state: typing.Optional['LoadingState'] = None,\n        persistence: typing.Optional[typing.Union[bool, str, NumberType]] = None,\n        persisted_props: typing.Optional[typing.Sequence[Literal['targetKeys']]] = None,\n        persistence_type: typing.Optional[Literal['local', 'session', 'memory']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'name',\n            'enableBatchControl',\n            'locale',\n            'dataSource',\n            'selectionsIcon',\n            'height',\n            'pagination',\n            'oneWay',\n            'operations',\n            'showSearch',\n            'optionFilterMode',\n            'showSelectAll',\n            'titles',\n            'targetKeys',\n            'moveDirection',\n            'moveKeys',\n            'disabled',\n            'status',\n            'readOnly',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'loading_state',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'name',\n            'enableBatchControl',\n            'locale',\n            'dataSource',\n            'selectionsIcon',\n            'height',\n            'pagination',\n            'oneWay',\n            'operations',\n            'showSearch',\n            'optionFilterMode',\n            'showSelectAll',\n            'titles',\n            'targetKeys',\n            'moveDirection',\n            'moveKeys',\n            'disabled',\n            'status',\n            'readOnly',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'loading_state',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdTransfer, self).__init__(**args)\n\n\nsetattr(AntdTransfer, '__init__', _explicitize_args(AntdTransfer.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdTree.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdTree(Component):\n    \"\"\"An AntdTree component.\n    树形控件组件AntdTree\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - treeDataMode (a value equal to: 'tree', 'flat'; default 'tree'):\n        对应`treeData`格式的渲染模式，可选项有`'tree'`（树形模式）、`'flat'`（扁平模式）\n        默认值：`'tree'`.\n\n    - treeData (list; optional):\n        定义构造树所需的数据结构，与`treeDataMode`一致.\n\n    - treeNodeKeyToTitle (dict with strings as keys and values of type a list of or a singular dash component, string or number; optional):\n        针对树结构中的指定节点，定义作为标题的组件型内容，优先级高于`treeData`中对应的`title`值.\n\n    - showIcon (boolean; default False):\n        是否渲染节点额外图标 默认值：`False`.\n\n    - selectable (boolean; default True):\n        节点是否可点击选择 默认值：`True`.\n\n    - multiple (boolean; default False):\n        节点是否允许多选 默认值：`False`.\n\n    - checkable (boolean; default False):\n        节点是否可勾选 默认值：`False`.\n\n    - defaultExpandAll (boolean; default False):\n        初始化是否展开全部节点 默认值：`False`.\n\n    - expandedKeys (list of strings; optional):\n        监听或设置已展开节点`key`值数组.\n\n    - defaultExpandedKeys (list of strings; optional):\n        初始化已展开节点`key`值数组.\n\n    - defaultExpandParent (boolean; default False):\n        初始化是否展开处于展开状态节点的父节点 默认值：`True`.\n\n    - selectedKeys (list of strings; optional):\n        监听或设置已选择节点`key`值数组.\n\n    - defaultSelectedKeys (list of strings; optional):\n        初始化已选择节点`key`值数组.\n\n    - checkedKeys (list of strings; optional):\n        监听或设置已勾选节点`key`值数组.\n\n    - defaultCheckedKeys (list of strings; optional):\n        初始化已勾选节点`key`值数组.\n\n    - halfCheckedKeys (list of strings; optional):\n        监听或设置处于半勾选状态下的节点`key`值数组.\n\n    - checkStrictly (boolean; default False):\n        节点与其后代节点之间的选择行为是否彼此独立 默认值：`False`.\n\n    - showLine (dict; default { showLeafIcon: False }):\n        是否显示连接线.\n\n        `showLine` is a boolean | dict with keys:\n\n        - showLeafIcon (boolean; optional):\n            叶节点是否渲染前缀图标.\n\n    - switcherIcon (a list of or a singular dash component, string or number; optional):\n        组件型，自定义树节点的展开/折叠图标.\n\n    - height (number; optional):\n        虚拟滚动模式下的组件最大像素高度，未设置时则不启用虚拟滚动功能.\n\n    - draggable (boolean; default False):\n        节点是否可拖拽 默认值：`False`.\n\n    - showDragIcon (boolean; default True):\n        开启节点拖拽功能后，是否为节点渲染拖拽图标 默认值：`True`.\n\n    - dragInSameLevel (boolean; default False):\n        当`draggable=True`时，是否仅允许同级拖拽 默认值：`False`.\n\n    - dragDisabledKeys (list of strings; optional):\n        禁止进行拖拽调整的节点`key`值数组 默认值：`[]`.\n\n    - dropDisabledKeys (list of strings; optional):\n        禁止进行拖拽放置的节点`key`值数组 默认值：`[]`.\n\n    - draggedNodeKey (string; optional):\n        监听最近一次被拖拽节点`key`值信息.\n\n    - clickedContextMenu (dict; optional):\n        监听节点右键菜单项点击事件.\n\n        `clickedContextMenu` is a dict with keys:\n\n        - nodeKey (string; optional):\n            事件对应节点`key`值.\n\n        - menuKey (string; optional):\n            事件对应右键菜单项`key`值.\n\n        - timestamp (number; optional):\n            事件对应时间戳信息.\n\n    - enableNodeFavorites (boolean; default False):\n        是否启用节点收藏功能 默认值：`False`.\n\n    - favoritedKeys (list of strings; optional):\n        监听或设置已收藏节点`key`值数组.\n\n    - scrollTarget (dict; optional):\n        执行滚动到指定节点的动作，每次执行完毕后会重置为空值.\n\n        `scrollTarget` is a dict with keys:\n\n        - key (string; required):\n            滚动目标节点`key`值.\n\n        - align (a value equal to: 'top', 'bottom', 'auto'; optional):\n            滚动目标节点对齐位置，可选项有`'top'`、`'bottom'`、`'auto'` 默认值：`'auto'`.\n\n        - offset (number; optional):\n            滚动后的像素偏移量.\n\n    - searchKeyword (string | list of strings; optional):\n        快捷树搜索功能对应的单个关键词，或由多个关键词构成的数组.\n\n    - caseSensitive (boolean; default True):\n        针对`searchKeyword`，是否大小写敏感 默认值：`True`.\n\n    - highlightStyle (dict; default {    fontWeight: 'bold',    backgroundColor: 'transparent',    padding: 0,    color: '#ff5500',}):\n        快捷树搜索关键词匹配部分的高亮样式.\n\n    - nodeCheckedSuffix (a list of or a singular dash component, string or number; optional):\n        组件型，节点勾选状态下的后缀元素.\n\n    - nodeUncheckedSuffix (a list of or a singular dash component, string or number; optional):\n        组件型，节点非勾选状态下的后缀元素.\n\n    - nodeCheckedStyle (dict; optional):\n        节点勾选状态下的css样式.\n\n    - nodeUncheckedStyle (dict; optional):\n        节点非勾选状态下的css样式.\n\n    - enableAsyncLoad (boolean; default False):\n        是否开启子节点异步加载功能，开启后无`children`属性，且未设置`isLeaf`为`True`的节点将可展开并触发`loadingNode`事件更新\n        默认值：`False`.\n\n    - loadingNode (dict; optional):\n        监听触发异步数据加载的节点展开事件信息.\n\n    - batchPropsNames (list of strings; optional):\n        需要纳入[批量属性监听](/batch-props-values)的若干属性名.\n\n    - batchPropsValues (dict; optional):\n        监听`batchPropsNames`中指定的若干属性值.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\n\n    - persistence (boolean | string | number; optional):\n        是否开启[属性持久化](/prop-persistence).\n\n    - persisted_props (list of a value equal to: 'selectedKeys', 'checkedKeys', 'expandedKeys', 'halfCheckedKeys's; optional):\n        开启属性持久化功能的若干属性名，可选项有`'selectedKeys'`、`'checkedKeys'`、`'expandedKeys'`、`'halfCheckedKeys'`\n        默认值：`['selectedKeys', 'checkedKeys', 'expandedKeys',\n        'halfCheckedKeys']`.\n\n    - persistence_type (a value equal to: 'local', 'session', 'memory'; optional):\n        属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n        默认值：`'local'`.\"\"\"\n\n    _children_props: typing.List[str] = [\n        'treeNodeKeyToTitle{}',\n        'switcherIcon',\n        'nodeCheckedSuffix',\n        'nodeUncheckedSuffix',\n    ]\n    _base_nodes = ['switcherIcon', 'nodeCheckedSuffix', 'nodeUncheckedSuffix', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdTree'\n    ShowLine = TypedDict('ShowLine', {'showLeafIcon': NotRequired[bool]})\n\n    ClickedContextMenu = TypedDict(\n        'ClickedContextMenu',\n        {\n            'nodeKey': NotRequired[str],\n            'menuKey': NotRequired[str],\n            'timestamp': NotRequired[NumberType],\n        },\n    )\n\n    ScrollTarget = TypedDict(\n        'ScrollTarget',\n        {\n            'key': str,\n            'align': NotRequired[Literal['top', 'bottom', 'auto']],\n            'offset': NotRequired[NumberType],\n        },\n    )\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        treeDataMode: typing.Optional[Literal['tree', 'flat']] = None,\n        treeData: typing.Optional[typing.Union[typing.Any, typing.Sequence[typing.Any]]] = None,\n        treeNodeKeyToTitle: typing.Optional[\n            typing.Dict[typing.Union[str, float, int], ComponentType]\n        ] = None,\n        showIcon: typing.Optional[bool] = None,\n        selectable: typing.Optional[bool] = None,\n        multiple: typing.Optional[bool] = None,\n        checkable: typing.Optional[bool] = None,\n        defaultExpandAll: typing.Optional[bool] = None,\n        expandedKeys: typing.Optional[typing.Sequence[str]] = None,\n        defaultExpandedKeys: typing.Optional[typing.Sequence[str]] = None,\n        defaultExpandParent: typing.Optional[bool] = None,\n        selectedKeys: typing.Optional[typing.Sequence[str]] = None,\n        defaultSelectedKeys: typing.Optional[typing.Sequence[str]] = None,\n        checkedKeys: typing.Optional[typing.Sequence[str]] = None,\n        defaultCheckedKeys: typing.Optional[typing.Sequence[str]] = None,\n        halfCheckedKeys: typing.Optional[typing.Sequence[str]] = None,\n        checkStrictly: typing.Optional[bool] = None,\n        showLine: typing.Optional[typing.Union[bool, 'ShowLine']] = None,\n        switcherIcon: typing.Optional[ComponentType] = None,\n        height: typing.Optional[NumberType] = None,\n        draggable: typing.Optional[bool] = None,\n        showDragIcon: typing.Optional[bool] = None,\n        dragInSameLevel: typing.Optional[bool] = None,\n        dragDisabledKeys: typing.Optional[typing.Sequence[str]] = None,\n        dropDisabledKeys: typing.Optional[typing.Sequence[str]] = None,\n        draggedNodeKey: typing.Optional[str] = None,\n        clickedContextMenu: typing.Optional['ClickedContextMenu'] = None,\n        enableNodeFavorites: typing.Optional[bool] = None,\n        favoritedKeys: typing.Optional[typing.Sequence[str]] = None,\n        scrollTarget: typing.Optional['ScrollTarget'] = None,\n        searchKeyword: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,\n        caseSensitive: typing.Optional[bool] = None,\n        highlightStyle: typing.Optional[dict] = None,\n        nodeCheckedSuffix: typing.Optional[ComponentType] = None,\n        nodeUncheckedSuffix: typing.Optional[ComponentType] = None,\n        nodeCheckedStyle: typing.Optional[dict] = None,\n        nodeUncheckedStyle: typing.Optional[dict] = None,\n        enableAsyncLoad: typing.Optional[bool] = None,\n        loadingNode: typing.Optional[dict] = None,\n        batchPropsNames: typing.Optional[typing.Sequence[str]] = None,\n        batchPropsValues: typing.Optional[dict] = None,\n        persistence: typing.Optional[typing.Union[bool, str, NumberType]] = None,\n        persisted_props: typing.Optional[\n            typing.Sequence[\n                Literal['selectedKeys', 'checkedKeys', 'expandedKeys', 'halfCheckedKeys']\n            ]\n        ] = None,\n        persistence_type: typing.Optional[Literal['local', 'session', 'memory']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'treeDataMode',\n            'treeData',\n            'treeNodeKeyToTitle',\n            'showIcon',\n            'selectable',\n            'multiple',\n            'checkable',\n            'defaultExpandAll',\n            'expandedKeys',\n            'defaultExpandedKeys',\n            'defaultExpandParent',\n            'selectedKeys',\n            'defaultSelectedKeys',\n            'checkedKeys',\n            'defaultCheckedKeys',\n            'halfCheckedKeys',\n            'checkStrictly',\n            'showLine',\n            'switcherIcon',\n            'height',\n            'draggable',\n            'showDragIcon',\n            'dragInSameLevel',\n            'dragDisabledKeys',\n            'dropDisabledKeys',\n            'draggedNodeKey',\n            'clickedContextMenu',\n            'enableNodeFavorites',\n            'favoritedKeys',\n            'scrollTarget',\n            'searchKeyword',\n            'caseSensitive',\n            'highlightStyle',\n            'nodeCheckedSuffix',\n            'nodeUncheckedSuffix',\n            'nodeCheckedStyle',\n            'nodeUncheckedStyle',\n            'enableAsyncLoad',\n            'loadingNode',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'treeDataMode',\n            'treeData',\n            'treeNodeKeyToTitle',\n            'showIcon',\n            'selectable',\n            'multiple',\n            'checkable',\n            'defaultExpandAll',\n            'expandedKeys',\n            'defaultExpandedKeys',\n            'defaultExpandParent',\n            'selectedKeys',\n            'defaultSelectedKeys',\n            'checkedKeys',\n            'defaultCheckedKeys',\n            'halfCheckedKeys',\n            'checkStrictly',\n            'showLine',\n            'switcherIcon',\n            'height',\n            'draggable',\n            'showDragIcon',\n            'dragInSameLevel',\n            'dragDisabledKeys',\n            'dropDisabledKeys',\n            'draggedNodeKey',\n            'clickedContextMenu',\n            'enableNodeFavorites',\n            'favoritedKeys',\n            'scrollTarget',\n            'searchKeyword',\n            'caseSensitive',\n            'highlightStyle',\n            'nodeCheckedSuffix',\n            'nodeUncheckedSuffix',\n            'nodeCheckedStyle',\n            'nodeUncheckedStyle',\n            'enableAsyncLoad',\n            'loadingNode',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdTree, self).__init__(**args)\n\n\nsetattr(AntdTree, '__init__', _explicitize_args(AntdTree.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdTreeSelect.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdTreeSelect(Component):\n    \"\"\"An AntdTreeSelect component.\n    树选择组件AntdTreeSelect\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - popupClassName (string; optional):\n        展开菜单css类名.\n\n    - name (string; optional):\n        配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值.\n\n    - enableBatchControl (boolean; default True):\n        控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能 默认值：`True`.\n\n    - locale (a value equal to: 'zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr'; default 'zh-cn'):\n        组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n        默认值：`'zh-cn'`.\n\n    - treeDataMode (a value equal to: 'tree', 'flat'; default 'tree'):\n        对应`treeData`格式的渲染模式，可选项有`'tree'`（树形模式）、`'flat'`（扁平模式）\n        默认值：`'tree'`.\n\n    - treeData (list; required):\n        定义构造树所需的数据结构，与`treeDataMode`一致.\n\n    - treeNodeKeyToTitle (dict with strings as keys and values of type a list of or a singular dash component, string or number; optional):\n        针对树结构中的指定节点，定义作为标题的组件型内容，优先级高于`treeData`中对应的`title`值.\n\n    - disabled (boolean; default False):\n        是否禁用当前组件 默认值：`False`.\n\n    - size (a value equal to: 'small', 'middle', 'large'; default 'middle'):\n        当前组件尺寸规格，可选项有`'small'`、`'middle'`、`'large'` 默认值：`'middle'`.\n\n    - bordered (boolean; default True):\n        是否显示边框，设置为`True`时等价于`variant='outlined'` 默认值：`True`.\n\n    - variant (a value equal to: 'outlined', 'borderless', 'filled', 'underlined'; optional):\n        设置形态变体类型，可选的有'outlined'、'borderless'、'filled'、`'underlined'`，其中'outlined'等价于bordered=True，优先级高于bordered.\n\n    - placeholder (string; optional):\n        输入框占位文字内容.\n\n    - placement (a value equal to: 'bottomLeft', 'bottomRight', 'topLeft', 'topRight'; default 'bottomLeft'):\n        选择菜单展开方向，可选项有`'bottomLeft'`、`'bottomRight'`、`'topLeft'`、`'topRight'`\n        默认值：`'bottomLeft'`.\n\n    - treeLine (boolean; default False):\n        是否显示连接线 默认值：`False`.\n\n    - value (string | number | list of string | numbers; optional):\n        监听或设置已选值.\n\n    - defaultValue (string | number | list of string | numbers; optional):\n        初始化已选值.\n\n    - maxCount (number; optional):\n        当`multiple=True`时，可选中的最大数量\n        如果`showCheckedStrategy='show-all'`且`treeCheckStrictly=False`，或者`showCheckedStrategy='show-parent'`，则`maxCount`无效.\n\n    - maxTagCount (number | a value equal to: 'responsive'; optional):\n        当`multiple=True`时，已选值tag展示的最大数量.\n\n    - maxTagPlaceholder (a list of or a singular dash component, string or number; optional):\n        当`multiple=True`时，隐藏已选值tag时显示的内容.\n\n    - maxTagTextLength (number; optional):\n        当`multiple=True`时，最大显示的已选值tag文本长度.\n\n    - listHeight (number; default 256):\n        选择菜单最大像素高度 默认值：`256`.\n\n    - multiple (boolean; default False):\n        是否开启多选模式 默认值：`False`.\n\n    - suffixIcon (a list of or a singular dash component, string or number; optional):\n        组件型，自定义的选择框后缀图标.\n\n    - switcherIcon (a list of or a singular dash component, string or number; optional):\n        组件型，自定义树节点的展开/折叠图标.\n\n    - treeCheckable (boolean; default False):\n        树节点是否可勾选 默认值：`False`.\n\n    - treeCheckStrictly (boolean; default False):\n        节点与其后代节点之间的选择行为是否彼此独立 默认值：`False`.\n\n    - treeDefaultExpandAll (boolean; default False):\n        初始化是否展开全部节点 默认值：`False`.\n\n    - treeDefaultExpandedKeys (list of strings; optional):\n        初始化已展开节点`key`值数组.\n\n    - treeExpandedKeys (list of strings; optional):\n        监听或设置已展开节点`key`值数组.\n\n    - virtual (boolean; default True):\n        是否开启虚拟滚动 默认值：`True`.\n\n    - status (a value equal to: 'error', 'warning'; optional):\n        控制校验状态，可选项有`'error'`、`'warning'`.\n\n    - allowClear (boolean; default True):\n        是否允许一键清空已选值 默认值：`True`.\n\n    - treeNodeFilterProp (a value equal to: 'title', 'value'; default 'value'):\n        基于搜索框中输入内容进行搜索的目标字段，可选项有`'value'`、`'title'` 默认值：`'value'`.\n\n    - treeNodeFilterMode (a value equal to: 'case-insensitive', 'case-sensitive', 'regex'; default 'case-insensitive'):\n        搜索匹配模式，可选项有`'case-insensitive'`（大小写不敏感）、`'case-sensitive'`（大小写敏感）、`'regex'`（正则表达式）\n        默认值：`'case-insensitive'`.\n\n    - autoClearSearchValue (boolean; default True):\n        当`multiple=True`时，设置是否在选中项后自动清空搜索框中的内容 默认值：`True`.\n\n    - showCheckedStrategy (a value equal to: 'show-all', 'show-parent', 'show-child'; default 'show-all'):\n        已选项回填搜索框策略，可选项有`'show-all'`、`'show-parent'`、`'show-child'`\n        默认值：`'show-all'`.\n\n    - dropdownBefore (a list of or a singular dash component, string or number; optional):\n        组件型，选择菜单前缀内容.\n\n    - dropdownAfter (a list of or a singular dash component, string or number; optional):\n        组件型，选择菜单后缀内容.\n\n    - prefix (a list of or a singular dash component, string or number; optional):\n        组件型，前缀内嵌内容.\n\n    - readOnly (boolean; optional):\n        是否渲染为只读状态 默认值：`False`.\n\n    - enableAsyncLoad (boolean; default False):\n        是否开启子节点异步加载功能，开启后无`children`属性，且未设置`isLeaf`为`True`的节点将可展开并触发`loadingNode`事件更新\n        默认值：`False`.\n\n    - loadingNode (dict; optional):\n        监听触发异步数据加载的节点展开事件信息.\n\n    - popupContainer (a value equal to: 'parent', 'body'; default 'body'):\n        相关展开层锚定策略，可选项有`'parent'`、`'body'` 默认值：`'body'`.\n\n    - batchPropsNames (list of strings; optional):\n        需要纳入[批量属性监听](/batch-props-values)的若干属性名.\n\n    - batchPropsValues (dict; optional):\n        监听`batchPropsNames`中指定的若干属性值.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\n\n    - loading_state (dict; optional)\n\n        `loading_state` is a dict with keys:\n\n        - is_loading (boolean; optional):\n            Determines if the component is loading or not.\n\n        - prop_name (string; optional):\n            Holds which property is loading.\n\n        - component_name (string; optional):\n            Holds the name of the component that is loading.\n\n    - persistence (boolean | string | number; optional):\n        是否开启[属性持久化](/prop-persistence).\n\n    - persisted_props (list of a value equal to: 'value's; optional):\n        开启属性持久化功能的若干属性名，可选项有`'value'` 默认值：`['value']`.\n\n    - persistence_type (a value equal to: 'local', 'session', 'memory'; optional):\n        属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n        默认值：`'local'`.\"\"\"\n\n    _children_props: typing.List[str] = [\n        'treeNodeKeyToTitle{}',\n        'maxTagPlaceholder',\n        'suffixIcon',\n        'switcherIcon',\n        'dropdownBefore',\n        'dropdownAfter',\n        'prefix',\n    ]\n    _base_nodes = [\n        'maxTagPlaceholder',\n        'suffixIcon',\n        'switcherIcon',\n        'dropdownBefore',\n        'dropdownAfter',\n        'prefix',\n        'children',\n    ]\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdTreeSelect'\n    LoadingState = TypedDict(\n        'LoadingState',\n        {\n            'is_loading': NotRequired[bool],\n            'prop_name': NotRequired[str],\n            'component_name': NotRequired[str],\n        },\n    )\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        popupClassName: typing.Optional[str] = None,\n        name: typing.Optional[str] = None,\n        enableBatchControl: typing.Optional[bool] = None,\n        locale: typing.Optional[Literal['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']] = None,\n        treeDataMode: typing.Optional[Literal['tree', 'flat']] = None,\n        treeData: typing.Optional[typing.Union[typing.Any, typing.Sequence[typing.Any]]] = None,\n        treeNodeKeyToTitle: typing.Optional[\n            typing.Dict[typing.Union[str, float, int], ComponentType]\n        ] = None,\n        disabled: typing.Optional[bool] = None,\n        size: typing.Optional[Literal['small', 'middle', 'large']] = None,\n        bordered: typing.Optional[bool] = None,\n        variant: typing.Optional[Literal['outlined', 'borderless', 'filled', 'underlined']] = None,\n        placeholder: typing.Optional[str] = None,\n        placement: typing.Optional[\n            Literal['bottomLeft', 'bottomRight', 'topLeft', 'topRight']\n        ] = None,\n        treeLine: typing.Optional[bool] = None,\n        value: typing.Optional[\n            typing.Union[str, NumberType, typing.Sequence[typing.Union[str, NumberType]]]\n        ] = None,\n        defaultValue: typing.Optional[\n            typing.Union[str, NumberType, typing.Sequence[typing.Union[str, NumberType]]]\n        ] = None,\n        maxCount: typing.Optional[NumberType] = None,\n        maxTagCount: typing.Optional[typing.Union[NumberType, Literal['responsive']]] = None,\n        maxTagPlaceholder: typing.Optional[ComponentType] = None,\n        maxTagTextLength: typing.Optional[NumberType] = None,\n        listHeight: typing.Optional[NumberType] = None,\n        multiple: typing.Optional[bool] = None,\n        suffixIcon: typing.Optional[ComponentType] = None,\n        switcherIcon: typing.Optional[ComponentType] = None,\n        treeCheckable: typing.Optional[bool] = None,\n        treeCheckStrictly: typing.Optional[bool] = None,\n        treeDefaultExpandAll: typing.Optional[bool] = None,\n        treeDefaultExpandedKeys: typing.Optional[typing.Sequence[str]] = None,\n        treeExpandedKeys: typing.Optional[typing.Sequence[str]] = None,\n        virtual: typing.Optional[bool] = None,\n        status: typing.Optional[Literal['error', 'warning']] = None,\n        allowClear: typing.Optional[bool] = None,\n        treeNodeFilterProp: typing.Optional[Literal['title', 'value']] = None,\n        treeNodeFilterMode: typing.Optional[\n            Literal['case-insensitive', 'case-sensitive', 'regex']\n        ] = None,\n        autoClearSearchValue: typing.Optional[bool] = None,\n        showCheckedStrategy: typing.Optional[\n            Literal['show-all', 'show-parent', 'show-child']\n        ] = None,\n        dropdownBefore: typing.Optional[ComponentType] = None,\n        dropdownAfter: typing.Optional[ComponentType] = None,\n        prefix: typing.Optional[ComponentType] = None,\n        readOnly: typing.Optional[bool] = None,\n        enableAsyncLoad: typing.Optional[bool] = None,\n        loadingNode: typing.Optional[dict] = None,\n        popupContainer: typing.Optional[Literal['parent', 'body']] = None,\n        batchPropsNames: typing.Optional[typing.Sequence[str]] = None,\n        batchPropsValues: typing.Optional[dict] = None,\n        loading_state: typing.Optional['LoadingState'] = None,\n        persistence: typing.Optional[typing.Union[bool, str, NumberType]] = None,\n        persisted_props: typing.Optional[typing.Sequence[Literal['value']]] = None,\n        persistence_type: typing.Optional[Literal['local', 'session', 'memory']] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'popupClassName',\n            'name',\n            'enableBatchControl',\n            'locale',\n            'treeDataMode',\n            'treeData',\n            'treeNodeKeyToTitle',\n            'disabled',\n            'size',\n            'bordered',\n            'variant',\n            'placeholder',\n            'placement',\n            'treeLine',\n            'value',\n            'defaultValue',\n            'maxCount',\n            'maxTagCount',\n            'maxTagPlaceholder',\n            'maxTagTextLength',\n            'listHeight',\n            'multiple',\n            'suffixIcon',\n            'switcherIcon',\n            'treeCheckable',\n            'treeCheckStrictly',\n            'treeDefaultExpandAll',\n            'treeDefaultExpandedKeys',\n            'treeExpandedKeys',\n            'virtual',\n            'status',\n            'allowClear',\n            'treeNodeFilterProp',\n            'treeNodeFilterMode',\n            'autoClearSearchValue',\n            'showCheckedStrategy',\n            'dropdownBefore',\n            'dropdownAfter',\n            'prefix',\n            'readOnly',\n            'enableAsyncLoad',\n            'loadingNode',\n            'popupContainer',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'loading_state',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'popupClassName',\n            'name',\n            'enableBatchControl',\n            'locale',\n            'treeDataMode',\n            'treeData',\n            'treeNodeKeyToTitle',\n            'disabled',\n            'size',\n            'bordered',\n            'variant',\n            'placeholder',\n            'placement',\n            'treeLine',\n            'value',\n            'defaultValue',\n            'maxCount',\n            'maxTagCount',\n            'maxTagPlaceholder',\n            'maxTagTextLength',\n            'listHeight',\n            'multiple',\n            'suffixIcon',\n            'switcherIcon',\n            'treeCheckable',\n            'treeCheckStrictly',\n            'treeDefaultExpandAll',\n            'treeDefaultExpandedKeys',\n            'treeExpandedKeys',\n            'virtual',\n            'status',\n            'allowClear',\n            'treeNodeFilterProp',\n            'treeNodeFilterMode',\n            'autoClearSearchValue',\n            'showCheckedStrategy',\n            'dropdownBefore',\n            'dropdownAfter',\n            'prefix',\n            'readOnly',\n            'enableAsyncLoad',\n            'loadingNode',\n            'popupContainer',\n            'batchPropsNames',\n            'batchPropsValues',\n            'data-*',\n            'aria-*',\n            'loading_state',\n            'persistence',\n            'persisted_props',\n            'persistence_type',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        for k in ['treeData']:\n            if k not in args:\n                raise TypeError('Required argument `' + k + '` was not specified.')\n\n        super(AntdTreeSelect, self).__init__(**args)\n\n\nsetattr(AntdTreeSelect, '__init__', _explicitize_args(AntdTreeSelect.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdUpload.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdUpload(Component):\n    \"\"\"An AntdUpload component.\n    文件上传组件AntdUpload\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - className (string | dict; optional):\n        当前组件css类名，支持[动态css](/advanced-classname).\n\n    - name (string; optional):\n        配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值.\n\n    - enableBatchControl (boolean; default True):\n        控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能 默认值：`True`.\n\n    - locale (a value equal to: 'zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr'; default 'zh-cn'):\n        组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n        默认值：`'zh-cn'`.\n\n    - apiUrl (string; optional):\n        文件上传服务接口地址.\n\n    - apiUrlExtraParams (dict; optional):\n        文件上传服务接口额外参数.\n\n    - headers (dict; optional):\n        文件上传服务接口额外headers参数.\n\n    - withCredentials (boolean; default False):\n        是否在请求上传服务接口时自动携带cookies等凭据信息 默认值：`False`.\n\n    - withOriginFileObj (boolean; default False):\n        `listUploadTaskRecord`监听结果中是否额外记录浏览器原生`originFileObj`相关信息\n        默认值：`False`.\n\n    - downloadUrl (string; optional):\n        对应已上传文件的`GET`类型下载服务接口地址，自带参数`taskId`、`filename`.\n\n    - downloadUrlExtraParams (dict; optional):\n        配合`downloadUrl`参数，设置文件下载服务接口额外参数.\n\n    - downloadUrlFromBackend (boolean; default False):\n        是否将文件上传接口返回信息中的`url`属性作为下载链接地址 默认值：`False`.\n\n    - fileListMaxLength (number; optional):\n        限制已上传文件列表长度上限.\n\n    - fileTypes (list of strings; optional):\n        允许上传的文件后缀名列表，默认不限制.\n\n    - buttonContent (a list of or a singular dash component, string or number; optional):\n        组件型，自定义上传按钮内容.\n\n    - buttonIcon (a list of or a singular dash component, string or number; optional):\n        组件型，自定义上传按钮图标.\n\n    - buttonProps (dict; optional):\n        配置上传按钮相关参数.\n\n        `buttonProps` is a dict with keys:\n\n        - size (a value equal to: 'default', 'small', 'large'; optional):\n            按钮尺寸规格，可选项有`'default'`、`'small'`、`'large'` 默认值：`'default'`.\n\n        - type (a value equal to: 'primary', 'ghost', 'dashed', 'link', 'text', 'default'; optional):\n            按钮类型，可选项有`'default'`、`'primary'`、`'ghost'`、`'dashed'`、`'link'`、`'text'`\n            默认值：`'default'`.\n\n        - danger (boolean; optional):\n            按钮是否渲染危险状态 默认值：`False`.\n\n        - block (boolean; optional):\n            按钮是否撑满父元素 默认值：`False`.\n\n        - style (dict; optional):\n            按钮css样式.\n\n        - className (string; optional):\n            按钮css类名.\n\n    - uploadId (string; optional):\n        自定义当前组件发起文件上传请求时携带的`uploadId`参数，可用于辅助后端创建文件上传所在文件夹.\n\n    - fileMaxSize (number; default 500):\n        文件上传尺寸上限，单位：兆.\n\n    - multiple (boolean; default False):\n        是否开启多文件上传模式 默认值：`False`.\n\n    - directory (boolean; default False):\n        是否开启文件夹上传模式 默认值：`False`.\n\n    - failedTooltipInfo (string; optional):\n        文件上传失败消息提示文字内容 默认值：`'上传失败'`.\n\n    - showUploadList (boolean; default True):\n        是否显示已上传文件列表 默认值：`True`.\n\n    - confirmBeforeDelete (boolean; default False):\n        是否为已上传文件删除操作添加二次确认模态框 默认值：`False`.\n\n    - showPercent (boolean; default False):\n        是否显示上传进度条 默认值：`False`.\n\n    - progressProps (dict; optional):\n        配置上传进度条相关参数.\n\n        `progressProps` is a dict with keys:\n\n        - strokeColor (dict; optional):\n            进度条颜色.\n\n            `strokeColor` is a string\n\n          Or dict with keys:\n\n            - from (string; optional):\n\n                渐变色开始颜色.\n\n            - to (string; optional):\n\n                渐变色结束颜色.\n\n        - strokeWidth (number; optional):\n            进度条像素宽度.\n\n        - format (dict; optional):\n            进度文字格式.\n\n            `format` is a dict with keys:\n\n            - prefix (string; optional):\n                进度文字前缀内容.\n\n            - suffix (string; optional):\n                进度文字后缀内容 默认值：`'%'`.\n\n    - showSuccessMessage (boolean; default True):\n        是否在每个文件上传成功后，分别弹出消息提示 默认值：`True`.\n\n    - showErrorMessage (boolean; default True):\n        是否在每个文件上传失败后，分别弹出消息提示 默认值：`True`.\n\n    - pastable (boolean; default False):\n        是否开启粘贴上传，即本地复制文件后，在页面任意位置粘贴即可完成上传 默认值：`False`.\n\n    - lastUploadTaskRecord (dict; optional):\n        监听最近一次文件上传任务相关信息.\n\n        `lastUploadTaskRecord` is a dict with keys:\n\n        - fileName (string; optional):\n            文件名称.\n\n        - fileSize (number; optional):\n            文件大小.\n\n        - completeTimestamp (number; optional):\n            上传完成时间戳.\n\n        - taskStatus (string; optional):\n            上传任务状态，`'success'`表示成功，`'failed'`表示失败.\n\n        - taskId (string; optional):\n            上传任务唯一识别id，当任务状态为`'failed'`时不会携带此信息.\n\n        - url (string; optional):\n            当前文件的下载链接.\n\n        - uploadResponse (boolean | number | string | dict | list; optional):\n            上传任务的接口响应信息. | list of dicts with keys:\n\n        - fileName (string; optional):\n            文件名称.\n\n        - fileSize (number; optional):\n            文件大小.\n\n        - completeTimestamp (number; optional):\n            上传完成时间戳.\n\n        - taskStatus (string; optional):\n            上传任务状态，`'success'`表示成功，`'failed'`表示失败.\n\n        - taskId (string; optional):\n            上传任务唯一识别id，当任务状态为`'failed'`时不会携带此信息.\n\n        - url (string; optional):\n            当前文件的下载链接.\n\n        - uploadResponse (boolean | number | string | dict | list; optional):\n            上传任务的接口响应信息.\n\n    - listUploadTaskRecord (list of dicts; optional):\n        监听当前已上传文件列表中上传任务相关信息.\n\n        `listUploadTaskRecord` is a list of dicts with keys:\n\n        - fileName (string; optional):\n            文件名称.\n\n        - fileSize (number; optional):\n            文件大小.\n\n        - completeTimestamp (number; optional):\n            上传完成时间戳.\n\n        - taskStatus (string; optional):\n            上传任务状态，`'success'`表示成功，`'failed'`表示失败.\n\n        - taskId (string; optional):\n            上传任务唯一识别id，当任务状态为`'failed'`时不会携带此信息.\n\n        - uid (string; optional):\n            当前文件上传唯一识别id，前端自动生成.\n\n        - url (string; optional):\n            当前文件下载链接.\n\n        - uploadResponse (boolean | number | string | dict | list; optional):\n            上传任务的接口响应信息.\n\n        - originFileObj (boolean | number | string | dict | list; optional):\n            当`withOriginFileObj=True`时，监听当前文件上传任务对应的`originFileObj`主要信息.\n\n    - defaultFileList (list of dicts; optional):\n        初始化文件列表展示信息.\n\n        `defaultFileList` is a list of dicts with keys:\n\n        - name (string; optional):\n            当前文件名称.\n\n        - status (a value equal to: 'done', 'error', 'removed'; optional):\n            当前文件展示状态，可选项有`'done'`、`'error'`、`'removed'`.\n\n        - uid (boolean | number | string | dict | list; optional):\n            当前文件唯一识别id.\n\n        - url (string; optional):\n            当前文件下载链接.\n\n        - taskId (string; optional):\n            若传入有效值，将作为当前组件的`uploadId`参数.\n\n        - fileSize (number; optional):\n            当前文件大小.\n\n    - disabled (boolean; default False):\n        是否禁用当前组件 默认值：`False`.\n\n    - status (a value equal to: 'error', 'warning'; optional):\n        控制校验状态，可选项有`'error'`、`'warning'`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\n\n    - loading_state (dict; optional)\n\n        `loading_state` is a dict with keys:\n\n        - is_loading (boolean; optional):\n            Determines if the component is loading or not.\n\n        - prop_name (string; optional):\n            Holds which property is loading.\n\n        - component_name (string; optional):\n            Holds the name of the component that is loading.\"\"\"\n\n    _children_props: typing.List[str] = ['buttonContent', 'buttonIcon']\n    _base_nodes = ['buttonContent', 'buttonIcon', 'children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdUpload'\n    ButtonProps = TypedDict(\n        'ButtonProps',\n        {\n            'size': NotRequired[Literal['default', 'small', 'large']],\n            'type': NotRequired[Literal['primary', 'ghost', 'dashed', 'link', 'text', 'default']],\n            'danger': NotRequired[bool],\n            'block': NotRequired[bool],\n            'style': NotRequired[dict],\n            'className': NotRequired[str],\n        },\n    )\n\n    ProgressPropsStrokeColor = TypedDict(\n        'ProgressPropsStrokeColor', {'from': NotRequired[str], 'to': NotRequired[str]}\n    )\n\n    ProgressPropsFormat = TypedDict(\n        'ProgressPropsFormat', {'prefix': NotRequired[str], 'suffix': NotRequired[str]}\n    )\n\n    ProgressProps = TypedDict(\n        'ProgressProps',\n        {\n            'strokeColor': NotRequired[typing.Union[str, 'ProgressPropsStrokeColor']],\n            'strokeWidth': NotRequired[NumberType],\n            'format': NotRequired['ProgressPropsFormat'],\n        },\n    )\n\n    LastUploadTaskRecord = TypedDict(\n        'LastUploadTaskRecord',\n        {\n            'fileName': NotRequired[str],\n            'fileSize': NotRequired[NumberType],\n            'completeTimestamp': NotRequired[NumberType],\n            'taskStatus': NotRequired[str],\n            'taskId': NotRequired[str],\n            'url': NotRequired[str],\n            'uploadResponse': NotRequired[typing.Any],\n        },\n    )\n\n    ListUploadTaskRecord = TypedDict(\n        'ListUploadTaskRecord',\n        {\n            'fileName': NotRequired[str],\n            'fileSize': NotRequired[NumberType],\n            'completeTimestamp': NotRequired[NumberType],\n            'taskStatus': NotRequired[str],\n            'taskId': NotRequired[str],\n            'uid': NotRequired[str],\n            'url': NotRequired[str],\n            'uploadResponse': NotRequired[typing.Any],\n            'originFileObj': NotRequired[typing.Any],\n        },\n    )\n\n    DefaultFileList = TypedDict(\n        'DefaultFileList',\n        {\n            'name': NotRequired[str],\n            'status': NotRequired[Literal['done', 'error', 'removed']],\n            'uid': NotRequired[typing.Any],\n            'url': NotRequired[str],\n            'taskId': NotRequired[str],\n            'fileSize': NotRequired[NumberType],\n        },\n    )\n\n    LoadingState = TypedDict(\n        'LoadingState',\n        {\n            'is_loading': NotRequired[bool],\n            'prop_name': NotRequired[str],\n            'component_name': NotRequired[str],\n        },\n    )\n\n    def __init__(\n        self,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[typing.Union[str, dict]] = None,\n        name: typing.Optional[str] = None,\n        enableBatchControl: typing.Optional[bool] = None,\n        locale: typing.Optional[Literal['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']] = None,\n        apiUrl: typing.Optional[str] = None,\n        apiUrlExtraParams: typing.Optional[dict] = None,\n        headers: typing.Optional[dict] = None,\n        withCredentials: typing.Optional[bool] = None,\n        withOriginFileObj: typing.Optional[bool] = None,\n        downloadUrl: typing.Optional[str] = None,\n        downloadUrlExtraParams: typing.Optional[dict] = None,\n        downloadUrlFromBackend: typing.Optional[bool] = None,\n        fileListMaxLength: typing.Optional[NumberType] = None,\n        fileTypes: typing.Optional[typing.Sequence[str]] = None,\n        buttonContent: typing.Optional[ComponentType] = None,\n        buttonIcon: typing.Optional[ComponentType] = None,\n        buttonProps: typing.Optional['ButtonProps'] = None,\n        uploadId: typing.Optional[str] = None,\n        fileMaxSize: typing.Optional[NumberType] = None,\n        multiple: typing.Optional[bool] = None,\n        directory: typing.Optional[bool] = None,\n        failedTooltipInfo: typing.Optional[str] = None,\n        showUploadList: typing.Optional[bool] = None,\n        confirmBeforeDelete: typing.Optional[bool] = None,\n        showPercent: typing.Optional[bool] = None,\n        progressProps: typing.Optional['ProgressProps'] = None,\n        showSuccessMessage: typing.Optional[bool] = None,\n        showErrorMessage: typing.Optional[bool] = None,\n        pastable: typing.Optional[bool] = None,\n        lastUploadTaskRecord: typing.Optional[\n            typing.Union['LastUploadTaskRecord', typing.Sequence['LastUploadTaskRecord']]\n        ] = None,\n        listUploadTaskRecord: typing.Optional[typing.Sequence['ListUploadTaskRecord']] = None,\n        defaultFileList: typing.Optional[typing.Sequence['DefaultFileList']] = None,\n        disabled: typing.Optional[bool] = None,\n        status: typing.Optional[Literal['error', 'warning']] = None,\n        loading_state: typing.Optional['LoadingState'] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'name',\n            'enableBatchControl',\n            'locale',\n            'apiUrl',\n            'apiUrlExtraParams',\n            'headers',\n            'withCredentials',\n            'withOriginFileObj',\n            'downloadUrl',\n            'downloadUrlExtraParams',\n            'downloadUrlFromBackend',\n            'fileListMaxLength',\n            'fileTypes',\n            'buttonContent',\n            'buttonIcon',\n            'buttonProps',\n            'uploadId',\n            'fileMaxSize',\n            'multiple',\n            'directory',\n            'failedTooltipInfo',\n            'showUploadList',\n            'confirmBeforeDelete',\n            'showPercent',\n            'progressProps',\n            'showSuccessMessage',\n            'showErrorMessage',\n            'pastable',\n            'lastUploadTaskRecord',\n            'listUploadTaskRecord',\n            'defaultFileList',\n            'disabled',\n            'status',\n            'data-*',\n            'aria-*',\n            'loading_state',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'style',\n            'className',\n            'name',\n            'enableBatchControl',\n            'locale',\n            'apiUrl',\n            'apiUrlExtraParams',\n            'headers',\n            'withCredentials',\n            'withOriginFileObj',\n            'downloadUrl',\n            'downloadUrlExtraParams',\n            'downloadUrlFromBackend',\n            'fileListMaxLength',\n            'fileTypes',\n            'buttonContent',\n            'buttonIcon',\n            'buttonProps',\n            'uploadId',\n            'fileMaxSize',\n            'multiple',\n            'directory',\n            'failedTooltipInfo',\n            'showUploadList',\n            'confirmBeforeDelete',\n            'showPercent',\n            'progressProps',\n            'showSuccessMessage',\n            'showErrorMessage',\n            'pastable',\n            'lastUploadTaskRecord',\n            'listUploadTaskRecord',\n            'defaultFileList',\n            'disabled',\n            'status',\n            'data-*',\n            'aria-*',\n            'loading_state',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args}\n\n        super(AntdUpload, self).__init__(**args)\n\n\nsetattr(AntdUpload, '__init__', _explicitize_args(AntdUpload.__init__))\n"
  },
  {
    "path": "feffery_antd_components/AntdWatermark.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass AntdWatermark(Component):\n    \"\"\"An AntdWatermark component.\n    水印组件AntdWatermark\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，内嵌元素.\n\n    - className (string; optional):\n        当前组件css类名.\n\n    - markClassName (string; optional):\n        水印层css类名.\n\n    - markStyle (dict; optional):\n        水印层css样式.\n\n    - content (string | list of strings; optional):\n        配置水印内容，传入数组时渲染多行水印.\n\n    - rotate (number; default -22):\n        水印旋转角度 默认值：`-22`.\n\n    - zIndex (number; optional):\n        水印z-index.\n\n    - fontColor (string; optional):\n        文字水印颜色.\n\n    - fontSize (number; default 16):\n        文字水印字体大小 默认值：`16`.\n\n    - gapX (number; default 212):\n        水印之间的水平像素间距 默认值：`212`.\n\n    - gapY (number; default 222):\n        水印之间的垂直像素间距 默认值：`222`.\n\n    - image (string; optional):\n        图片水印地址.\n\n    - width (number; optional):\n        图片水印像素宽度.\n\n    - height (number; optional):\n        图片水印像素高度.\n\n    - inherit (boolean; default True):\n        是否将水印传导给`AntdModal`、`AntdDrawer`等弹出类组件 默认值：`True`.\n\n    - data-* (string; optional):\n        `data-*`格式属性通配.\n\n    - aria-* (string; optional):\n        `aria-*`格式属性通配.\"\"\"\n\n    _children_props: typing.List[str] = []\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'AntdWatermark'\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        style: typing.Optional[typing.Any] = None,\n        className: typing.Optional[str] = None,\n        markClassName: typing.Optional[str] = None,\n        markStyle: typing.Optional[dict] = None,\n        content: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,\n        rotate: typing.Optional[NumberType] = None,\n        zIndex: typing.Optional[NumberType] = None,\n        fontColor: typing.Optional[str] = None,\n        fontSize: typing.Optional[NumberType] = None,\n        gapX: typing.Optional[NumberType] = None,\n        gapY: typing.Optional[NumberType] = None,\n        image: typing.Optional[str] = None,\n        width: typing.Optional[NumberType] = None,\n        height: typing.Optional[NumberType] = None,\n        inherit: typing.Optional[bool] = None,\n        **kwargs,\n    ):\n        self._prop_names = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'markClassName',\n            'markStyle',\n            'content',\n            'rotate',\n            'zIndex',\n            'fontColor',\n            'fontSize',\n            'gapX',\n            'gapY',\n            'image',\n            'width',\n            'height',\n            'inherit',\n            'data-*',\n            'aria-*',\n        ]\n        self._valid_wildcard_attributes = ['data-', 'aria-']\n        self.available_properties = [\n            'id',\n            'key',\n            'children',\n            'style',\n            'className',\n            'markClassName',\n            'markStyle',\n            'content',\n            'rotate',\n            'zIndex',\n            'fontColor',\n            'fontSize',\n            'gapX',\n            'gapY',\n            'image',\n            'width',\n            'height',\n            'inherit',\n            'data-*',\n            'aria-*',\n        ]\n        self.available_wildcard_properties = ['data-', 'aria-']\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(AntdWatermark, self).__init__(children=children, **args)\n\n\nsetattr(AntdWatermark, '__init__', _explicitize_args(AntdWatermark.__init__))\n"
  },
  {
    "path": "feffery_antd_components/Fragment.py",
    "content": "# AUTO GENERATED FILE - DO NOT EDIT\n\nimport typing  # noqa: F401\n\nfrom dash.development.base_component import Component, _explicitize_args\nfrom typing_extensions import Literal, NotRequired, TypedDict  # noqa: F401\n\nComponentSingleType = typing.Union[str, int, float, Component, None]\nComponentType = typing.Union[\n    ComponentSingleType,\n    typing.Sequence[ComponentSingleType],\n]\n\nNumberType = typing.Union[typing.SupportsFloat, typing.SupportsInt, typing.SupportsComplex]\n\n\nclass Fragment(Component):\n    \"\"\"A Fragment component.\n    空节点组件Fragment\n\n    Keyword arguments:\n\n    - id (string; optional):\n        组件唯一id.\n\n    - key (string; optional):\n        对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果.\n\n    - children (a list of or a singular dash component, string or number; optional):\n        组件型，内嵌元素.\n\n    - token (dict; optional):\n        监听当前组件所在作用范围对应的样式`token`参数，需配合上层`AntdConfigProvider`组件使用.\"\"\"\n\n    _children_props: typing.List[str] = []\n    _base_nodes = ['children']\n    _namespace = 'feffery_antd_components'\n    _type = 'Fragment'\n\n    def __init__(\n        self,\n        children: typing.Optional[ComponentType] = None,\n        id: typing.Optional[typing.Union[str, dict]] = None,\n        key: typing.Optional[str] = None,\n        token: typing.Optional[dict] = None,\n        **kwargs,\n    ):\n        self._prop_names = ['id', 'key', 'children', 'token']\n        self._valid_wildcard_attributes = []\n        self.available_properties = ['id', 'key', 'children', 'token']\n        self.available_wildcard_properties = []\n        _explicit_args = kwargs.pop('_explicit_args')\n        _locals = locals()\n        _locals.update(kwargs)  # For wildcard attrs and excess named props\n        args = {k: _locals[k] for k in _explicit_args if k != 'children'}\n\n        super(Fragment, self).__init__(children=children, **args)\n\n\nsetattr(Fragment, '__init__', _explicitize_args(Fragment.__init__))\n"
  },
  {
    "path": "feffery_antd_components/__init__.py",
    "content": "from __future__ import print_function as _\n\nimport json\nimport os as _os\nimport sys as _sys\n\nimport dash as _dash\n\n# noinspection PyUnresolvedReferences\nfrom ._imports_ import *  # noqa: F403\nfrom ._imports_ import __all__\n\nif not hasattr(_dash, '__plotly_dash') and not hasattr(_dash, 'development'):\n    print(\n        'Dash was not successfully imported. '\n        \"Make sure you don't have a file \"\n        'named \\n\"dash.py\" in your current directory.',\n        file=_sys.stderr,\n    )\n    _sys.exit(1)\n\n_basepath = _os.path.dirname(__file__)\n_filepath = _os.path.abspath(_os.path.join(_basepath, 'package-info.json'))\nwith open(_filepath) as f:\n    package = json.load(f)\n\npackage_name = package['name'].replace(' ', '_').replace('-', '_')\n__version__ = package['version']\n\n_current_path = _os.path.dirname(_os.path.abspath(__file__))\n\n_this_module = _sys.modules[__name__]\n\nasync_resources = [\n    'antd_table',\n    'upload',\n    'data_entry',\n    'data_display',\n]\n\n\n_js_dist = [\n    {\n        'relative_package_path': 'feffery_antd_components.min.js',\n        'external_url': 'https://unpkg.com/{0}@{2}/{1}/{1}.min.js'.format(\n            package_name, __name__, __version__\n        ),\n        'namespace': package_name,\n    },\n    {\n        'relative_package_path': 'feffery_antd_components.min.js.map',\n        'external_url': 'https://unpkg.com/{0}@{2}/{1}/{1}.min.js.map'.format(\n            package_name, __name__, __version__\n        ),\n        'namespace': package_name,\n        'dynamic': True,\n    },\n]\n\n_js_dist.extend(\n    [\n        {\n            'relative_package_path': 'async-{}.js'.format(async_resource),\n            'external_url': ('https://unpkg.com/{0}@{2}/{1}/async-{3}.js').format(\n                package_name, __name__, __version__, async_resource\n            ),\n            'namespace': package_name,\n            'async': True,\n        }\n        for async_resource in async_resources\n    ]\n)\n\n_js_dist.extend(\n    [\n        {\n            'relative_package_path': 'async-{}.js.map'.format(async_resource),\n            'external_url': ('https://unpkg.com/{0}@{2}/{1}/async-{3}.js.map').format(\n                package_name, __name__, __version__, async_resource\n            ),\n            'namespace': package_name,\n            'dynamic': True,\n        }\n        for async_resource in async_resources\n    ]\n)\n\n_css_dist = []\n\n\nfor _component in __all__:\n    setattr(locals()[_component], '_js_dist', _js_dist)\n    setattr(locals()[_component], '_css_dist', _css_dist)\n"
  },
  {
    "path": "feffery_antd_components/_icons.py",
    "content": "all_icons = [\n    'antd-carry-out',\n    'antd-car',\n    'antd-bulb',\n    'antd-build',\n    'antd-bug',\n    'antd-bar-code',\n    'antd-branches',\n    'antd-aim',\n    'antd-issues-close',\n    'antd-ellipsis',\n    'antd-user',\n    'antd-unlock',\n    'antd-repair',\n    'antd-team',\n    'antd-sync',\n    'antd-setting',\n    'antd-send',\n    'antd-schedule',\n    'antd-save',\n    'antd-rocket',\n    'antd-reload',\n    'antd-read',\n    'antd-qrcode',\n    'antd-power-off',\n    'antd-number',\n    'antd-notification',\n    'antd-menu',\n    'antd-mail',\n    'antd-lock',\n    'antd-loading',\n    'antd-key',\n    'antd-hourglass',\n    'antd-global',\n    'antd-function',\n    'antd-import',\n    'antd-export',\n    'antd-dashboard',\n    'antd-control',\n    'antd-console-sql',\n    'antd-compass',\n    'antd-comment',\n    'antd-code',\n    'antd-cluster',\n    'antd-clear',\n    'antd-camera',\n    'antd-book',\n    'antd-catalog',\n    'antd-api',\n    'antd-alert',\n    'antd-account-book',\n    'antd-alipay',\n    'antd-alipay-circle',\n    'antd-weibo',\n    'antd-github',\n    'antd-android',\n    'antd-apple',\n    'antd-wechat',\n    'antd-wechat-work',\n    'antd-openai',\n    'antd-bilibili',\n    'antd-tiktok',\n    'antd-javascript',\n    'antd-python',\n    'antd-docker',\n    'antd-fall',\n    'antd-rise',\n    'antd-stock',\n    'antd-home',\n    'antd-fund',\n    'antd-area-chart',\n    'antd-radar-chart',\n    'antd-bar-chart',\n    'antd-pie-chart',\n    'antd-box-plot',\n    'antd-dot-chart',\n    'antd-line-chart',\n    'antd-field-binary',\n    'antd-field-number',\n    'antd-field-string',\n    'antd-field-time',\n    'antd-file-add',\n    'antd-file-done',\n    'antd-file',\n    'antd-file-image',\n    'antd-file-markdown',\n    'antd-file-pdf',\n    'antd-file-protect',\n    'antd-file-sync',\n    'antd-file-text',\n    'antd-file-word',\n    'antd-file-zip',\n    'antd-filter',\n    'antd-fire',\n    'antd-woman',\n    'antd-arrow-up',\n    'antd-arrow-down',\n    'antd-arrow-left',\n    'antd-arrow-right',\n    'antd-flag',\n    'antd-user-add',\n    'antd-folder-add',\n    'antd-man',\n    'antd-tag',\n    'antd-folder',\n    'antd-user-delete',\n    'antd-trophy',\n    'antd-shopping-cart',\n    'antd-folder-open',\n    'antd-fork',\n    'antd-select',\n    'antd-tags',\n    'antd-thunderbolt',\n    'antd-sound',\n    'antd-fund-projection-screen',\n    'antd-funnel-plot',\n    'antd-gift',\n    'antd-robot',\n    'antd-pushpin',\n    'antd-printer',\n    'antd-phone',\n    'antd-picture',\n    'antd-idcard',\n    'antd-partition',\n    'antd-monitor',\n    'antd-more',\n    'antd-apartment',\n    'antd-money-collect',\n    'antd-experiment',\n    'antd-link',\n    'antd-mobile',\n    'antd-coffee',\n    'antd-layout',\n    'antd-eye',\n    'antd-eye-invisible',\n    'antd-exception',\n    'antd-dollar',\n    'antd-euro',\n    'antd-download',\n    'antd-environment',\n    'antd-deployment-unit',\n    'antd-crown',\n    'antd-desktop',\n    'antd-like',\n    'antd-dislike',\n    'antd-disconnect',\n    'antd-app-store',\n    'antd-app-store-add',\n    'antd-bell',\n    'antd-calculator',\n    'antd-calendar',\n    'antd-database',\n    'antd-history',\n    'antd-search',\n    'antd-file-search',\n    'antd-cloud',\n    'antd-cloud-upload',\n    'antd-cloud-download',\n    'antd-cloud-server',\n    'antd-cloud-sync',\n    'antd-swap',\n    'antd-rollback',\n    'antd-login',\n    'antd-logout',\n    'antd-menu-fold',\n    'antd-menu-unfold',\n    'antd-full-screen',\n    'antd-full-screen-exit',\n    'antd-question-circle',\n    'antd-plus-circle',\n    'antd-minus-circle',\n    'antd-info-circle',\n    'antd-exclamation-circle',\n    'antd-close-circle',\n    'antd-check-circle',\n    'antd-clock-circle',\n    'antd-stop',\n    'antd-edit',\n    'antd-delete',\n    'antd-highlight',\n    'antd-redo',\n    'antd-undo',\n    'antd-zoom-in',\n    'antd-zoom-out',\n    'antd-sort-ascending',\n    'antd-sort-descending',\n    'antd-table',\n    'antd-question',\n    'antd-plus',\n    'antd-minus',\n    'antd-close',\n    'antd-check',\n    'antd-sketch',\n    'antd-bank',\n    'antd-block',\n    'antd-insurance',\n    'antd-smile',\n    'antd-skin',\n    'antd-star',\n    'antd-right-circle-two-tone',\n    'antd-left-circle-two-tone',\n    'antd-up-circle-two-tone',\n    'antd-down-circle-two-tone',\n    'antd-up-square-two-tone',\n    'antd-down-square-two-tone',\n    'antd-left-square-two-tone',\n    'antd-right-square-two-tone',\n    'antd-question-circle-two-tone',\n    'antd-plus-circle-two-tone',\n    'antd-minus-circle-two-tone',\n    'antd-plus-square-two-tone',\n    'antd-minus-square-two-tone',\n    'antd-info-circle-two-tone',\n    'antd-exclamation-circle-two-tone',\n    'antd-close-circle-two-tone',\n    'antd-close-square-two-tone',\n    'antd-check-circle-two-tone',\n    'antd-check-square-two-tone',\n    'antd-edit-two-tone',\n    'antd-delete-two-tone',\n    'antd-highlight-two-tone',\n    'antd-pie-chart-two-tone',\n    'antd-box-chart-two-tone',\n    'antd-fund-two-tone',\n    'antd-sliders-two-tone',\n    'antd-api-two-tone',\n    'antd-cloud-two-tone',\n    'antd-hourglass-two-tone',\n    'antd-notification-two-tone',\n    'antd-tool-two-tone',\n    'antd-down',\n    'antd-up',\n    'antd-left',\n    'antd-right',\n    'antd-caret-up',\n    'antd-caret-down',\n    'antd-caret-left',\n    'antd-caret-right',\n    'antd-up-circle',\n    'antd-down-circle',\n    'antd-left-circle',\n    'antd-right-circle',\n    'antd-enter',\n    'antd-retweet',\n    'antd-warning',\n    'antd-form',\n    'antd-copy',\n    'antd-scissor',\n    'antd-snippets',\n    'antd-diff',\n    'antd-ordered-list',\n    'antd-unordered-list',\n    'antd-sliders',\n    'antd-audit',\n    'antd-border',\n    'antd-contacts',\n    'antd-container',\n    'antd-delivered-procedure',\n    'antd-pause',\n    'antd-step-backward',\n    'antd-step-forward',\n    'antd-fast-forward',\n    'antd-fast-backward',\n    'antd-sun',\n    'antd-mooon',\n    'md-star-half',\n    'md-star-border',\n    'md-star',\n    'md-people',\n    'md-plus-one',\n    'md-notifications',\n    'md-pin-drop',\n    'md-layers-clear',\n    'md-layers',\n    'md-edit-location',\n    'md-tune',\n    'md-transform',\n    'md-timer-off',\n    'md-timer',\n    'md-file-upload',\n    'md-file-download',\n    'md-create-new-folder',\n    'md-cloud-upload',\n    'md-cloud-queue',\n    'md-cloud-download',\n    'md-cloud-done',\n    'md-insert-chart',\n    'md-functions',\n    'md-format-quote',\n    'md-attach-file',\n    'md-storage',\n    'md-save',\n    'md-remove-circle-outline',\n    'md-remove-circle',\n    'md-remove',\n    'md-low-priority',\n    'md-link',\n    'md-gesture',\n    'md-forward',\n    'md-flag',\n    'md-drafts',\n    'md-create',\n    'md-content-paste',\n    'md-content-cut',\n    'md-content-copy',\n    'md-clear',\n    'md-block',\n    'md-backspace',\n    'md-add-box',\n    'md-add',\n    'md-add-circle-outline',\n    'md-add-circle',\n    'md-location-on',\n    'md-mail-outline',\n    'md-email',\n    'md-not-interested',\n    'md-library-books',\n    'md-library-add',\n    'md-equalizer',\n    'md-add-alert',\n    'md-visibility-off',\n    'md-visibility',\n    'md-verified-user',\n    'md-update',\n    'md-trending-up',\n    'md-trending-flat',\n    'md-trending-down',\n    'md-translate',\n    'md-toc',\n    'md-timeline',\n    'md-thumb-up',\n    'md-thumb-down',\n    'md-swap-vert',\n    'md-swap-horiz',\n    'md-supervisor-account',\n    'md-subject',\n    'md-settings',\n    'md-search',\n    'md-schedule',\n    'md-restore',\n    'md-query-builder',\n    'md-power-settings-new',\n    'md-opacity',\n    'md-note-add',\n    'md-lock-outline',\n    'md-lock-open',\n    'md-list',\n    'md-lightbulb-outline',\n    'md-launch',\n    'md-label-outline',\n    'md-label',\n    'md-input',\n    'md-info-outline',\n    'md-info',\n    'md-hourglass',\n    'md-home',\n    'md-history',\n    'md-highlight-off',\n    'md-help-outline',\n    'md-help',\n    'md-get-app',\n    'md-translate',\n    'md-fingerprint',\n    'md-findIn-page',\n    'md-favorite-border',\n    'md-favorite',\n    'md-extension',\n    'md-explore',\n    'md-exit-to-app',\n    'md-event',\n    'md-description',\n    'md-delete-forever',\n    'md-delete',\n    'md-dashboard',\n    'md-code',\n    'md-build',\n    'md-bug-report',\n    'md-assignment',\n    'md-assessment',\n    'md-alarm-on',\n    'md-alarm-off',\n    'md-alarm-add',\n    'md-alarm',\n    'md-account-circle',\n    'fc-vlc',\n    'fc-view-details',\n    'fc-upload',\n    'fc-tree-structure',\n    'fc-timeline',\n    'fc-template',\n    'fc-survey',\n    'fc-signature',\n    'fc-share',\n    'fc-services',\n    'fc-rules',\n    'fc-questions',\n    'fc-process',\n    'fc-plus',\n    'fc-overtime',\n    'fc-organization',\n    'fc-numerical-sorting21',\n    'fc-numerical-sorting12',\n    'fc-multiple-inputs',\n    'fc-mind-map',\n    'fc-menu',\n    'fc-list',\n    'fc-like',\n    'fc-like-placeholder',\n    'fc-info',\n    'fc-import',\n    'fc-image-file',\n    'fc-idea',\n    'fc-home',\n    'fc-high-priority',\n    'fc-low-priority',\n    'fc-genealogy',\n    'fc-full-trash',\n    'fc-document-search',\n    'fc-file',\n    'fc-faq',\n    'fc-export',\n    'fc-empty-trash',\n    'fc-download',\n    'fc-document',\n    'fc-deployment',\n    'fc-delete-database',\n    'fc-conference-call',\n    'fc-database',\n    'fc-data-protection',\n    'fc-data-encryption',\n    'fc-data-configuration',\n    'fc-data-backup',\n    'fc-checkmark',\n    'fc-cancel',\n    'fc-briefcase',\n    'fc-binoculars',\n    'fc-automatic',\n    'fc-alphabetical-sorting-za',\n    'fc-alphabetical-sorting-az',\n    'fc-add-database',\n    'fc-accept-database',\n    'fc-about',\n    'fc-radar-chart',\n    'fc-scatter-chart',\n    'fc-pie-chart',\n    'fc-line-chart',\n    'fc-flow-chart',\n    'fc-doughnut-chart',\n    'fc-bar-chart',\n    'fc-area-chart',\n    'fc-line-bar-chart',\n    'fc-workflow',\n    'fc-todo-list',\n    'fc-synchronize',\n    'fc-repair',\n    'fc-statistics',\n    'fc-settings',\n    'fc-search',\n    'fc-serial-tasks',\n    'fc-safe',\n    'fc-negative-dynamic',\n    'fc-positive-dynamic',\n    'fc-planner',\n    'fc-parallel-tasks',\n    'fc-org-unit',\n    'fc-opened-folder',\n    'fc-ok',\n    'fc-inspection',\n    'fc-globe',\n    'fc-folder',\n    'fc-electronics',\n    'fc-data-sheet',\n    'fc-command-line',\n    'fc-calendar',\n    'fc-calculator',\n    'fc-bullish',\n    'fc-bearish',\n    'fc-bookmark',\n    'fc-approval',\n    'fc-advertising',\n    'di-linux',\n    'di-python',\n    'di-chrome',\n    'di-database',\n    'di-firefox',\n    'di-markdown',\n    'di-postgresql',\n    'di-terminal',\n    'di-windows',\n    'bi-table',\n    'bi-analyse',\n    'bi-layer',\n    'bi-layer-minus',\n    'bi-layer-plus',\n    'bs-list-task',\n    'bs-list-check',\n    'bs-link',\n    'bs-link-45-deg',\n    'bs-envelope-open',\n    'bs-envelope',\n    'bs-alarm',\n    'im-earth',\n    'im-sphere',\n    'gi-mesh-network',\n    'pi-circle',\n    'pi-polygon',\n    'pi-map-pin',\n    'pi-line-segment',\n    'pi-line-segments',\n    'pi-trash-simple',\n    'pi-trash',\n    'pi-ruler',\n    'pi-selection',\n    'pi-selection-slash',\n    'pi-square-split-horizontal',\n    'pi-square-split-vertical',\n    'pi-stack-simple',\n    'pi-stack',\n    'pi-navigation-arrow',\n    'pi-map-trifold',\n    'pi-info',\n    'pi-lock-key-open',\n    'pi-lock-key',\n    'pi-gear',\n    'pi-airplane',\n    'pi-anchor-simple',\n    'pi-arrow-arc-left',\n    'pi-arrow-arc-right',\n    'pi-arrow-clockwise',\n    'pi-arrow-counter-clockwise',\n    'pi-barricade',\n    'pi-binoculars',\n    'pi-bounding-box',\n    'pi-broom',\n    'pi-buildings',\n    'pi-calculator',\n    'pi-camera',\n    'pi-circuitry',\n    'pi-clipboard',\n    'pi-compass',\n    'pi-copy',\n    'pi-cpu',\n    'pi-crosshair',\n    'pi-cube-focus',\n    'pi-cube',\n    'pi-cursor',\n    'pi-database',\n    'pi-eye-slash',\n    'pi-eye',\n    'pi-faders',\n    'pi-floppy-disk',\n    'pi-dots-three-vertical',\n    'pi-dots-three',\n    'pi-math-operations',\n    'pi-plus',\n    'pi-minus',\n    'pi-path',\n    'si-gitee',\n]\n"
  },
  {
    "path": "feffery_antd_components/_imports_.py",
    "content": "from .AntdAccordion import AntdAccordion\nfrom .AntdAffix import AntdAffix\nfrom .AntdAlert import AntdAlert\nfrom .AntdAnchor import AntdAnchor\nfrom .AntdAvatar import AntdAvatar\nfrom .AntdAvatarGroup import AntdAvatarGroup\nfrom .AntdBackTop import AntdBackTop\nfrom .AntdBadge import AntdBadge\nfrom .AntdBreadcrumb import AntdBreadcrumb\nfrom .AntdButton import AntdButton\nfrom .AntdCalendar import AntdCalendar\nfrom .AntdCard import AntdCard\nfrom .AntdCardGrid import AntdCardGrid\nfrom .AntdCardMeta import AntdCardMeta\nfrom .AntdCarousel import AntdCarousel\nfrom .AntdCascader import AntdCascader\nfrom .AntdCenter import AntdCenter\nfrom .AntdCheckableTag import AntdCheckableTag\nfrom .AntdCheckbox import AntdCheckbox\nfrom .AntdCheckboxGroup import AntdCheckboxGroup\nfrom .AntdCheckCard import AntdCheckCard\nfrom .AntdCheckCardGroup import AntdCheckCardGroup\nfrom .AntdCol import AntdCol\nfrom .AntdCollapse import AntdCollapse\nfrom .AntdColorPicker import AntdColorPicker\nfrom .AntdComment import AntdComment\nfrom .AntdCompact import AntdCompact\nfrom .AntdConfigProvider import AntdConfigProvider\nfrom .AntdContent import AntdContent\nfrom .AntdCopyText import AntdCopyText\nfrom .AntdCountdown import AntdCountdown\nfrom .AntdCountup import AntdCountup\nfrom .AntdCustomSkeleton import AntdCustomSkeleton\nfrom .AntdDatePicker import AntdDatePicker\nfrom .AntdDateRangePicker import AntdDateRangePicker\nfrom .AntdDescriptionItem import AntdDescriptionItem\nfrom .AntdDescriptions import AntdDescriptions\nfrom .AntdDivider import AntdDivider\nfrom .AntdDraggerUpload import AntdDraggerUpload\nfrom .AntdDrawer import AntdDrawer\nfrom .AntdDropdown import AntdDropdown\nfrom .AntdEmpty import AntdEmpty\nfrom .AntdFlex import AntdFlex\nfrom .AntdFloatButton import AntdFloatButton\nfrom .AntdFloatButtonGroup import AntdFloatButtonGroup\nfrom .AntdFooter import AntdFooter\nfrom .AntdForm import AntdForm\nfrom .AntdFormItem import AntdFormItem\nfrom .AntdFormRender import AntdFormRender\nfrom .AntdHappyProvider import AntdHappyProvider\nfrom .AntdHeader import AntdHeader\nfrom .AntdIcon import AntdIcon\nfrom .AntdImage import AntdImage\nfrom .AntdImageGroup import AntdImageGroup\nfrom .AntdInput import AntdInput\nfrom .AntdInputNumber import AntdInputNumber\nfrom .AntdLayout import AntdLayout\nfrom .AntdMentions import AntdMentions\nfrom .AntdMenu import AntdMenu\nfrom .AntdMessage import AntdMessage\nfrom .AntdModal import AntdModal\nfrom .AntdNotification import AntdNotification\nfrom .AntdOTP import AntdOTP\nfrom .AntdPageHeader import AntdPageHeader\nfrom .AntdPagination import AntdPagination\nfrom .AntdParagraph import AntdParagraph\nfrom .AntdPictureUpload import AntdPictureUpload\nfrom .AntdPopconfirm import AntdPopconfirm\nfrom .AntdPopover import AntdPopover\nfrom .AntdPopupCard import AntdPopupCard\nfrom .AntdProgress import AntdProgress\nfrom .AntdQRCode import AntdQRCode\nfrom .AntdRadioGroup import AntdRadioGroup\nfrom .AntdRate import AntdRate\nfrom .AntdResult import AntdResult\nfrom .AntdRibbon import AntdRibbon\nfrom .AntdRow import AntdRow\nfrom .AntdSegmented import AntdSegmented\nfrom .AntdSegmentedColoring import AntdSegmentedColoring\nfrom .AntdSelect import AntdSelect\nfrom .AntdSider import AntdSider\nfrom .AntdSkeleton import AntdSkeleton\nfrom .AntdSkeletonAvatar import AntdSkeletonAvatar\nfrom .AntdSkeletonButton import AntdSkeletonButton\nfrom .AntdSkeletonImage import AntdSkeletonImage\nfrom .AntdSkeletonInput import AntdSkeletonInput\nfrom .AntdSlider import AntdSlider\nfrom .AntdSpace import AntdSpace\nfrom .AntdSpin import AntdSpin\nfrom .AntdSplitter import AntdSplitter\nfrom .AntdSpoiler import AntdSpoiler\nfrom .AntdStatistic import AntdStatistic\nfrom .AntdSteps import AntdSteps\nfrom .AntdSwitch import AntdSwitch\nfrom .AntdTable import AntdTable\nfrom .AntdTabs import AntdTabs\nfrom .AntdTag import AntdTag\nfrom .AntdText import AntdText\nfrom .AntdTimeline import AntdTimeline\nfrom .AntdTimePicker import AntdTimePicker\nfrom .AntdTimeRangePicker import AntdTimeRangePicker\nfrom .AntdTitle import AntdTitle\nfrom .AntdTooltip import AntdTooltip\nfrom .AntdTour import AntdTour\nfrom .AntdTransfer import AntdTransfer\nfrom .AntdTree import AntdTree\nfrom .AntdTreeSelect import AntdTreeSelect\nfrom .AntdUpload import AntdUpload\nfrom .AntdWatermark import AntdWatermark\nfrom .Fragment import Fragment\n\n__all__ = [\n    'AntdAccordion',\n    'AntdAvatar',\n    'AntdAvatarGroup',\n    'AntdBadge',\n    'AntdCarousel',\n    'AntdCheckableTag',\n    'AntdCollapse',\n    'AntdComment',\n    'AntdCountdown',\n    'AntdCountup',\n    'AntdEmpty',\n    'AntdImage',\n    'AntdImageGroup',\n    'AntdPopover',\n    'AntdQRCode',\n    'AntdRibbon',\n    'AntdSegmented',\n    'AntdSpoiler',\n    'AntdStatistic',\n    'AntdTable',\n    'AntdTabs',\n    'AntdTag',\n    'AntdTimeline',\n    'AntdTooltip',\n    'AntdTree',\n    'AntdCard',\n    'AntdCardGrid',\n    'AntdCardMeta',\n    'AntdDescriptionItem',\n    'AntdDescriptions',\n    'AntdCalendar',\n    'AntdCascader',\n    'AntdCheckbox',\n    'AntdCheckboxGroup',\n    'AntdColorPicker',\n    'AntdDatePicker',\n    'AntdDateRangePicker',\n    'AntdInput',\n    'AntdInputNumber',\n    'AntdMentions',\n    'AntdOTP',\n    'AntdRadioGroup',\n    'AntdRate',\n    'AntdSegmentedColoring',\n    'AntdSelect',\n    'AntdSlider',\n    'AntdSwitch',\n    'AntdTimePicker',\n    'AntdTimeRangePicker',\n    'AntdTransfer',\n    'AntdTreeSelect',\n    'AntdCheckCard',\n    'AntdCheckCardGroup',\n    'AntdForm',\n    'AntdFormItem',\n    'AntdDraggerUpload',\n    'AntdPictureUpload',\n    'AntdUpload',\n    'AntdAlert',\n    'AntdDrawer',\n    'AntdMessage',\n    'AntdModal',\n    'AntdNotification',\n    'AntdPopconfirm',\n    'AntdPopupCard',\n    'AntdProgress',\n    'AntdResult',\n    'AntdSpin',\n    'AntdCustomSkeleton',\n    'AntdSkeleton',\n    'AntdSkeletonAvatar',\n    'AntdSkeletonButton',\n    'AntdSkeletonImage',\n    'AntdSkeletonInput',\n    'AntdFormRender',\n    'AntdButton',\n    'AntdFloatButton',\n    'AntdFloatButtonGroup',\n    'AntdIcon',\n    'AntdParagraph',\n    'AntdText',\n    'AntdTitle',\n    'AntdCenter',\n    'AntdCompact',\n    'AntdContent',\n    'AntdDivider',\n    'AntdFlex',\n    'AntdFooter',\n    'AntdHeader',\n    'AntdLayout',\n    'AntdSider',\n    'AntdSpace',\n    'AntdSplitter',\n    'AntdCol',\n    'AntdRow',\n    'AntdAnchor',\n    'AntdBreadcrumb',\n    'AntdDropdown',\n    'AntdMenu',\n    'AntdPageHeader',\n    'AntdPagination',\n    'AntdSteps',\n    'AntdAffix',\n    'AntdBackTop',\n    'AntdConfigProvider',\n    'AntdCopyText',\n    'AntdHappyProvider',\n    'AntdTour',\n    'AntdWatermark',\n    'Fragment',\n]\n"
  },
  {
    "path": "feffery_antd_components/alias.py",
    "content": "from .AntdAccordion import AntdAccordion as Accordion\nfrom .AntdAffix import AntdAffix as Affix\nfrom .AntdAlert import AntdAlert as Alert\nfrom .AntdAnchor import AntdAnchor as Anchor\nfrom .AntdAvatar import AntdAvatar as Avatar\nfrom .AntdAvatarGroup import AntdAvatarGroup as AvatarGroup\nfrom .AntdBackTop import AntdBackTop as BackTop\nfrom .AntdBadge import AntdBadge as Badge\nfrom .AntdBreadcrumb import AntdBreadcrumb as Breadcrumb\nfrom .AntdButton import AntdButton as Button\nfrom .AntdCalendar import AntdCalendar as Calendar\nfrom .AntdCard import AntdCard as Card\nfrom .AntdCardGrid import AntdCardGrid as CardGrid\nfrom .AntdCardMeta import AntdCardMeta as CardMeta\nfrom .AntdCarousel import AntdCarousel as Carousel\nfrom .AntdCascader import AntdCascader as Cascader\nfrom .AntdCenter import AntdCenter as Center\nfrom .AntdCheckableTag import AntdCheckableTag as CheckableTag\nfrom .AntdCheckbox import AntdCheckbox as Checkbox\nfrom .AntdCheckboxGroup import AntdCheckboxGroup as CheckboxGroup\nfrom .AntdCheckCard import AntdCheckCard as CheckCard\nfrom .AntdCheckCardGroup import AntdCheckCardGroup as CheckCardGroup\nfrom .AntdCol import AntdCol as Col\nfrom .AntdCollapse import AntdCollapse as Collapse\nfrom .AntdColorPicker import AntdColorPicker as ColorPicker\nfrom .AntdComment import AntdComment as Comment\nfrom .AntdCompact import AntdCompact as Compact\nfrom .AntdConfigProvider import AntdConfigProvider as ConfigProvider\nfrom .AntdContent import AntdContent as Content\nfrom .AntdCopyText import AntdCopyText as CopyText\nfrom .AntdCountdown import AntdCountdown as Countdown\nfrom .AntdCountup import AntdCountup as Countup\nfrom .AntdCustomSkeleton import AntdCustomSkeleton as CustomSkeleton\nfrom .AntdDatePicker import AntdDatePicker as DatePicker\nfrom .AntdDateRangePicker import AntdDateRangePicker as DateRangePicker\nfrom .AntdDescriptionItem import AntdDescriptionItem as DescriptionItem\nfrom .AntdDescriptions import AntdDescriptions as Descriptions\nfrom .AntdDivider import AntdDivider as Divider\nfrom .AntdDraggerUpload import AntdDraggerUpload as DraggerUpload\nfrom .AntdDrawer import AntdDrawer as Drawer\nfrom .AntdDropdown import AntdDropdown as Dropdown\nfrom .AntdEmpty import AntdEmpty as Empty\nfrom .AntdFlex import AntdFlex as Flex\nfrom .AntdFloatButton import AntdFloatButton as FloatButton\nfrom .AntdFloatButtonGroup import AntdFloatButtonGroup as FloatButtonGroup\nfrom .AntdFooter import AntdFooter as Footer\nfrom .AntdForm import AntdForm as Form\nfrom .AntdFormItem import AntdFormItem as FormItem\nfrom .AntdFormRender import AntdFormRender as FormRender\nfrom .AntdHappyProvider import AntdHappyProvider as HappyProvider\nfrom .AntdHeader import AntdHeader as Header\nfrom .AntdIcon import AntdIcon as Icon\nfrom .AntdImage import AntdImage as Image\nfrom .AntdImageGroup import AntdImageGroup as ImageGroup\nfrom .AntdInput import AntdInput as Input\nfrom .AntdInputNumber import AntdInputNumber as InputNumber\nfrom .AntdLayout import AntdLayout as Layout\nfrom .AntdMentions import AntdMentions as Mentions\nfrom .AntdMenu import AntdMenu as Menu\nfrom .AntdMessage import AntdMessage as Message\nfrom .AntdModal import AntdModal as Modal\nfrom .AntdNotification import AntdNotification as Notification\nfrom .AntdOTP import AntdOTP as OTP\nfrom .AntdPageHeader import AntdPageHeader as PageHeader\nfrom .AntdPagination import AntdPagination as Pagination\nfrom .AntdParagraph import AntdParagraph as Paragraph\nfrom .AntdPictureUpload import AntdPictureUpload as PictureUpload\nfrom .AntdPopconfirm import AntdPopconfirm as Popconfirm\nfrom .AntdPopover import AntdPopover as Popover\nfrom .AntdPopupCard import AntdPopupCard as PopupCard\nfrom .AntdProgress import AntdProgress as Progress\nfrom .AntdQRCode import AntdQRCode as QRCode\nfrom .AntdRadioGroup import AntdRadioGroup as RadioGroup\nfrom .AntdRate import AntdRate as Rate\nfrom .AntdResult import AntdResult as Result\nfrom .AntdRibbon import AntdRibbon as Ribbon\nfrom .AntdRow import AntdRow as Row\nfrom .AntdSegmented import AntdSegmented as Segmented\nfrom .AntdSegmentedColoring import AntdSegmentedColoring as SegmentedColoring\nfrom .AntdSelect import AntdSelect as Select\nfrom .AntdSider import AntdSider as Sider\nfrom .AntdSkeleton import AntdSkeleton as Skeleton\nfrom .AntdSkeletonAvatar import AntdSkeletonAvatar as SkeletonAvatar\nfrom .AntdSkeletonButton import AntdSkeletonButton as SkeletonButton\nfrom .AntdSkeletonImage import AntdSkeletonImage as SkeletonImage\nfrom .AntdSkeletonInput import AntdSkeletonInput as SkeletonInput\nfrom .AntdSlider import AntdSlider as Slider\nfrom .AntdSpace import AntdSpace as Space\nfrom .AntdSpin import AntdSpin as Spin\nfrom .AntdSplitter import AntdSplitter as Splitter\nfrom .AntdSpoiler import AntdSpoiler as Spoiler\nfrom .AntdStatistic import AntdStatistic as Statistic\nfrom .AntdSteps import AntdSteps as Steps\nfrom .AntdSwitch import AntdSwitch as Switch\nfrom .AntdTable import AntdTable as Table\nfrom .AntdTabs import AntdTabs as Tabs\nfrom .AntdTag import AntdTag as Tag\nfrom .AntdText import AntdText as Text\nfrom .AntdTimeline import AntdTimeline as Timeline\nfrom .AntdTimePicker import AntdTimePicker as TimePicker\nfrom .AntdTimeRangePicker import AntdTimeRangePicker as TimeRangePicker\nfrom .AntdTitle import AntdTitle as Title\nfrom .AntdTooltip import AntdTooltip as Tooltip\nfrom .AntdTour import AntdTour as Tour\nfrom .AntdTransfer import AntdTransfer as Transfer\nfrom .AntdTree import AntdTree as Tree\nfrom .AntdTreeSelect import AntdTreeSelect as TreeSelect\nfrom .AntdUpload import AntdUpload as Upload\nfrom .AntdWatermark import AntdWatermark as Watermark\nfrom .Fragment import Fragment\n\n__all__ = [\n    'Accordion',\n    'Avatar',\n    'AvatarGroup',\n    'Badge',\n    'Carousel',\n    'CheckableTag',\n    'Collapse',\n    'Comment',\n    'Countdown',\n    'Countup',\n    'Empty',\n    'Image',\n    'ImageGroup',\n    'Popover',\n    'QRCode',\n    'Ribbon',\n    'Segmented',\n    'Spoiler',\n    'Statistic',\n    'Table',\n    'Tabs',\n    'Tag',\n    'Timeline',\n    'Tooltip',\n    'Tree',\n    'Card',\n    'CardGrid',\n    'CardMeta',\n    'DescriptionItem',\n    'Descriptions',\n    'Calendar',\n    'Cascader',\n    'Checkbox',\n    'CheckboxGroup',\n    'ColorPicker',\n    'DatePicker',\n    'DateRangePicker',\n    'Input',\n    'InputNumber',\n    'Mentions',\n    'OTP',\n    'RadioGroup',\n    'Rate',\n    'SegmentedColoring',\n    'Select',\n    'Slider',\n    'Switch',\n    'TimePicker',\n    'TimeRangePicker',\n    'Transfer',\n    'TreeSelect',\n    'CheckCard',\n    'CheckCardGroup',\n    'Form',\n    'FormItem',\n    'DraggerUpload',\n    'PictureUpload',\n    'Upload',\n    'Alert',\n    'Drawer',\n    'Message',\n    'Modal',\n    'Notification',\n    'Popconfirm',\n    'PopupCard',\n    'Progress',\n    'Result',\n    'Spin',\n    'CustomSkeleton',\n    'Skeleton',\n    'SkeletonAvatar',\n    'SkeletonButton',\n    'SkeletonImage',\n    'SkeletonInput',\n    'FormRender',\n    'Button',\n    'FloatButton',\n    'FloatButtonGroup',\n    'Icon',\n    'Paragraph',\n    'Text',\n    'Title',\n    'Center',\n    'Compact',\n    'Content',\n    'Divider',\n    'Flex',\n    'Footer',\n    'Header',\n    'Layout',\n    'Sider',\n    'Space',\n    'Splitter',\n    'Col',\n    'Row',\n    'Anchor',\n    'Breadcrumb',\n    'Dropdown',\n    'Menu',\n    'PageHeader',\n    'Pagination',\n    'Steps',\n    'Affix',\n    'BackTop',\n    'ConfigProvider',\n    'CopyText',\n    'HappyProvider',\n    'Tour',\n    'Watermark',\n    'Fragment',\n]\n"
  },
  {
    "path": "legacy_tests/dash3.0tests/AntdQRCode组件loading状态重构/test.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import time\n\n    import dash\n    from dash import html\n    from dash.dependencies import Input, Output, State\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    fac.AntdSpace(\n        [\n            fac.AntdQRCode(\n                id='auto-spin-qrcode-demo',\n                value='https://fac.feffery.tech/',\n                autoSpin=True,\n            ),\n            fac.AntdButton(\n                '重新生成',\n                id='auto-spin-qrcode-demo-button',\n                type='primary',\n            ),\n        ],\n        direction='vertical',\n        align='center',\n    )\n)\n\n\n@app.callback(\n    Output('auto-spin-qrcode-demo', 'value'),\n    Input('auto-spin-qrcode-demo-button', 'nClicks'),\n    State('auto-spin-qrcode-demo', 'value'),\n    prevent_initial_call=True,\n)\ndef auto_spin_qrcode_demo_input_callback(nClicks, value):\n    if nClicks:\n        time.sleep(1)\n        if value == 'https://fac.feffery.tech/':\n            return 'https://ant.design/'\n        elif value == 'https://ant.design/':\n            return 'https://fac.feffery.tech/'\n\n    return dash.no_update\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dash3.0tests/AntdTable函数式改造/test.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    from datetime import datetime\n\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdTable(\n            columns=[\n                {\n                    'title': 'int型示例',\n                    'dataIndex': 'int型示例',\n                },\n                {\n                    'title': 'float型示例',\n                    'dataIndex': 'float型示例',\n                },\n                {\n                    'title': 'str型示例',\n                    'dataIndex': 'str型示例',\n                },\n                {\n                    'title': '日期时间示例',\n                    'dataIndex': '日期时间示例',\n                },\n            ],\n            data=[\n                {\n                    'int型示例': 123,\n                    'float型示例': 1.23,\n                    'str型示例': '示例字符',\n                    '日期时间示例': datetime.now(),\n                }\n            ]\n            * 20,\n        ),\n        fac.AntdTable(\n            columns=[\n                {\n                    'title': '搜索型筛选',\n                    'dataIndex': '搜索型筛选',\n                }\n            ],\n            data=[{'搜索型筛选': s} for s in list('abced')],\n            filterOptions={'搜索型筛选': {'filterMode': 'keyword'}},\n            style={'width': 200},\n        ),\n    ],\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dash3.0tests/_dashprivate_layout改动测试/test.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        html.Div(fac.__version__),\n        fac.AntdDescriptions(\n            [\n                fac.AntdDescriptionItem('费弗里', label='姓名'),\n                fac.AntdDescriptionItem(\n                    html.A(\n                        'https://github.com/CNFeffery',\n                        href='https://github.com/CNFeffery',\n                    ),\n                    label='个人Github地址',\n                ),\n                fac.AntdDescriptionItem(\n                    html.A(\n                        'https://www.cnblogs.com/feffery/',\n                        href='https://www.cnblogs.com/feffery/',\n                    ),\n                    label='个人博客地址',\n                ),\n                fac.AntdDescriptionItem(\n                    html.A(\n                        'http://fac.feffery.tech/',\n                        href='http://fac.feffery.tech/',\n                    ),\n                    label='fac框架官网',\n                ),\n            ],\n            title='描述列表示例',\n            labelStyle={'fontWeight': 'bold'},\n        ),\n    ],\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dash3.0tests/loading_state改动测试/test.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import time\n\n    import dash\n    from dash import html\n    from dash.dependencies import Input, Output\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdButton(\n            '测试',\n            id='button-demo',\n            type='primary',\n        )\n    ],\n    style=style(padding=50),\n)\n\n\n@app.callback(\n    Output('button-demo', 'children'),\n    Input('button-demo', 'nClicks'),\n    prevent_initial_call=True,\n)\ndef demo_callback(nClicks):\n    time.sleep(3)\n\n    return f'nClicks: {nClicks}'\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dash3.0tests/函数式组件默认值重构/test.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdButton(\n            '测试',\n            id='button-demo',\n            type='primary',\n            **{'data-test': 'test'},\n        ),\n        fac.AntdTag(\n            content='测试',\n            href='/test',\n            **{'data-test': 'test'},\n        ),\n    ],\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dash3.0tests/加载动画类组件重构测试/test.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import time\n\n    import dash\n    from dash import html\n    from dash.dependencies import Input, Output\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    html.Div(\n        [\n            '测试',\n            fac.AntdCustomSkeleton(\n                [\n                    html.Div(\n                        html.Div(\n                            fac.AntdButton(\n                                '测试',\n                                id='button-demo',\n                                type='primary',\n                            )\n                        )\n                    ),\n                    html.Div(id='inner-output-test'),\n                ],\n                skeletonContent='加载中...',\n            ),\n            html.Div(id='outer-output-test'),\n        ],\n        style=style(padding=50),\n    )\n)\n\n\n@app.callback(\n    [\n        Output('button-demo', 'children'),\n        Output('button-demo', 'type'),\n        Output('inner-output-test', 'children'),\n        Output('outer-output-test', 'children'),\n    ],\n    Input('button-demo', 'nClicks'),\n    prevent_initial_call=True,\n)\ndef demo_callback(nClicks):\n    time.sleep(3)\n\n    return [\n        f'nClicks: {nClicks}',\n        dash.no_update,\n        f'inner: {nClicks}',\n        f'outer: {nClicks}',\n    ]\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dash3.0tests/组件属性基础持久化重构测试/test.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdCollapse(\n            '测试内容',\n            id='persistence-test',\n            title='测试',\n            persistence=True,\n        )\n    ],\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdAccordion/feat_size.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = fac.AntdCenter(\n    fac.AntdSpace(\n        [\n            fac.AntdAccordion(\n                items=[\n                    {\n                        'title': f'手风琴项示例{i}',\n                        'key': i,\n                        'children': fac.AntdText(f'手风琴项示例{i}'),\n                    }\n                    for i in range(1, 6)\n                ],\n                size=size,\n            )\n            for size in ['small', 'middle', 'large']\n        ],\n        direction='vertical',\n        style=style(width='100%'),\n    ),\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdAccordion/feat_styles.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = fac.AntdCenter(\n    fac.AntdAccordion(\n        items=[\n            {\n                'title': f'手风琴项示例{i}',\n                'key': i,\n                'children': fac.AntdText(f'手风琴项示例{i}'),\n            }\n            for i in range(1, 6)\n        ],\n        styles={\n            'header': {\n                'background': '#40a9ff',\n                'color': '#fff',\n            },\n            'body': {'background': '#597ef7'},\n        },\n    ),\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdCard/refactor_delete_props.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdSpace(\n            [\n                fac.AntdDivider(\n                    'AntdCardGrid基础使用',\n                    innerTextOrientation='left',\n                ),\n                fac.AntdCard(\n                    [fac.AntdCardGrid(f'内容{i}') for i in range(1, 16)],\n                    title='AntdCardGrid基础使用',\n                ),\n                fac.AntdDivider(\n                    '调整浏览器窗口尺寸以观察换行效果',\n                    innerTextOrientation='left',\n                ),\n                fac.AntdCard(\n                    [fac.AntdCardGrid(f'内容{i}', style={'width': 95}) for i in range(1, 16)],\n                    title='固定AntdCardGrid宽度以支持自动换行',\n                ),\n                fac.AntdDivider(\n                    '紧凑的网格内容区',\n                    innerTextOrientation='left',\n                ),\n                fac.AntdCard(\n                    [fac.AntdCardGrid(f'内容{i}') for i in range(1, 16)],\n                    title='调整各类样式以实现紧凑的网格内容区',\n                    variant='borderless',\n                    style={'borderRadius': '8px 8px 0 0'},\n                    styles={\n                        'header': {'border': '1px solid #f0f0f0'},\n                        'body': {\n                            'padding': '0px 1px 0px 0px',\n                            'border': 0,\n                        },\n                    },\n                ),\n                fac.AntdDivider(\n                    '关闭悬停阴影效果',\n                    innerTextOrientation='left',\n                ),\n                fac.AntdCard(\n                    [fac.AntdCardGrid(f'内容{i}', hoverable=False) for i in range(1, 16)],\n                    title='关闭悬停阴影效果',\n                ),\n            ],\n            direction='vertical',\n        )\n    ],\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdCarousel/feat_auto_play_dot_duration.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdCarousel(\n            [\n                fac.AntdCenter(\n                    i,\n                    style={\n                        'color': 'white',\n                        'fontSize': 36,\n                        'height': 160,\n                        'backgroundColor': '#364d79',\n                    },\n                )\n                for i in range(1, 6)\n            ],\n            autoplay={'dotDuration': True},\n        )\n    ],\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdCollapse/feat_size.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = fac.AntdCenter(\n    fac.AntdSpace(\n        [\n            fac.AntdCollapse(\n                fac.AntdParagraph('内容示例' * 20),\n                isOpen=False,\n                title='折叠面板示例',\n                size=size,\n                style={'width': 300},\n            )\n            for size in ['small', 'middle', 'large']\n        ],\n        direction='vertical',\n        style=style(width='100%'),\n    ),\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdCollapse/feat_styles.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = fac.AntdCenter(\n    fac.AntdCollapse(\n        fac.AntdParagraph('内容示例' * 20),\n        isOpen=False,\n        title='折叠面板示例',\n        style={'width': 300},\n        styles={\n            'header': {\n                'background': '#40a9ff',\n                'color': '#fff',\n            },\n            'body': {'background': '#597ef7'},\n        },\n    ),\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdCountdown/feat_finish_event.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    from datetime import datetime, timedelta\n\n    import dash\n    from dash.dependencies import Input, Output\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = lambda: fac.AntdCenter(\n    [\n        fac.AntdCountdown(\n            id='countdown-demo',\n            value=(datetime.now() + timedelta(seconds=6)).strftime('%Y-%m-%d %H:%M:%S:%f'),\n            format='HH:mm:ss:SSS',\n        ),\n        fac.Fragment(id='message'),\n    ],\n    style=style(padding=50),\n)\n\n\n@app.callback(\n    Output('message', 'children'),\n    Input('countdown-demo', 'finishEvent'),\n    prevent_initial_call=True,\n)\ndef show_finish_event(finishEvent):\n    return fac.AntdNotification(\n        message='倒计时结束：' + str(finishEvent['timestamp']),\n    )\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdCountdown/refactor_to_timer.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    from datetime import datetime, timedelta\n\n    import dash\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\ndeadline = datetime.now() + timedelta(seconds=2 * 24 * 60 * 60 + 30)\n\napp.layout = lambda: fac.AntdCenter(\n    [\n        fac.AntdRow(\n            [\n                fac.AntdCol(\n                    fac.AntdCountdown(\n                        title='Countdown',\n                        value=deadline.strftime('%Y-%m-%d %H:%M:%S:%f'),\n                    ),\n                    span=12,\n                ),\n                fac.AntdCol(\n                    fac.AntdCountdown(\n                        title='Million Seconds',\n                        value=deadline.strftime('%Y-%m-%d %H:%M:%S:%f'),\n                        format='HH:mm:ss:SSS',\n                    ),\n                    span=12,\n                ),\n                fac.AntdCol(\n                    fac.AntdCountdown(\n                        title='Day Level',\n                        value=deadline.strftime('%Y-%m-%d %H:%M:%S:%f'),\n                        format='D 天 H 时 m 分 s 秒',\n                    ),\n                    span=24,\n                ),\n            ],\n            gutter=16,\n        )\n    ],\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdCountup/refactor_to_timer.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    from datetime import datetime, timedelta\n\n    import dash\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\nstart_datetime = datetime.now() - timedelta(seconds=2 * 24 * 60 * 60 + 30)\n\napp.layout = lambda: fac.AntdCenter(\n    [\n        fac.AntdRow(\n            [\n                fac.AntdCol(\n                    fac.AntdCountup(\n                        title='Countdown',\n                        value=start_datetime.strftime('%Y-%m-%d %H:%M:%S:%f'),\n                    ),\n                    span=12,\n                ),\n                fac.AntdCol(\n                    fac.AntdCountup(\n                        title='Million Seconds',\n                        value=start_datetime.strftime('%Y-%m-%d %H:%M:%S:%f'),\n                        format='HH:mm:ss:SSS',\n                    ),\n                    span=12,\n                ),\n                fac.AntdCol(\n                    fac.AntdCountup(\n                        title='Day Level',\n                        value=start_datetime.strftime('%Y-%m-%d %H:%M:%S:%f'),\n                        format='D 天 H 时 m 分 s 秒',\n                    ),\n                    span=24,\n                ),\n            ],\n            gutter=16,\n        )\n    ],\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdDescriptions/feat_span_filled.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdDescriptions(\n            items=[\n                {\n                    'label': 'item1',\n                    'children': 'default span',\n                },\n                {\n                    'label': 'item2',\n                    'children': 'span=\"filled\"',\n                    'span': 'filled',\n                },\n                {\n                    'label': 'item3',\n                    'children': 'span=\"filled\"',\n                    'span': 'filled',\n                },\n                {\n                    'label': 'item4',\n                    'children': 'default span',\n                },\n            ],\n            bordered=True,\n        )\n    ],\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdImage/debug_preview_toolbar.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdImage(\n            src='https://fac.feffery.tech/assets/imgs/components/AntdImage/%E7%A4%BA%E4%BE%8B%E5%9B%BE%E7%89%871.jpg',\n            height=400,\n        )\n    ],\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdSegmented/feat_shape.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    fac.AntdSpace(\n        [\n            fac.AntdSegmented(\n                options=[\n                    {\n                        'value': 'sun',\n                        'icon': 'antd-sun',\n                    },\n                    {\n                        'value': 'moon',\n                        'icon': 'antd-moon',\n                    },\n                ],\n                value='sun',\n                shape='round',\n                size=size,\n            )\n            for size in ['small', 'middle', 'large']\n        ],\n        direction='vertical',\n        style={'width': '100%'},\n    ),\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdSegmented/feat_simple_options.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = fac.AntdCenter(\n    fac.AntdSpace(\n        [\n            fac.AntdSegmented(\n                options=[\n                    'antd-carry-out',\n                    'antd-branches',\n                    'antd-team',\n                    'antd-send',\n                    'antd-setting',\n                ],\n                defaultValue='antd-carry-out',\n            ),\n            fac.AntdSegmented(\n                options=[\n                    {'label': i, 'value': i}\n                    for i in [\n                        'Daily',\n                        'Weekly',\n                        'Monthly',\n                        'Quarterly',\n                        'Yearly',\n                    ]\n                ],\n                defaultValue='Daily',\n            ),\n        ]\n    ),\n    style=style(height='100vh'),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdSegmented/feat_vertical.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = fac.AntdCenter(\n    fac.AntdSegmented(\n        options=[\n            {'value': i, 'icon': icon}\n            for i, icon in enumerate(\n                [\n                    'antd-carry-out',\n                    'antd-branches',\n                    'antd-team',\n                    'antd-send',\n                    'antd-setting',\n                ]\n            )\n        ],\n        defaultValue=0,\n        vertical=True,\n    ),\n    style=style(height='100vh'),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdTable/feat_button_mode_like_dcc_link.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import json\n\n    import dash\n    from dash import html\n    from dash.dependencies import Input, Output, State\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdSwitch(),\n        fac.AntdTable(\n            id='table-rerender-button-demo',\n            columns=[\n                {\n                    'title': 'button示例1',\n                    'dataIndex': 'button示例1',\n                    'renderOptions': {\n                        'renderType': 'button',\n                        'likeDccLink': True,\n                    },\n                },\n                {\n                    'title': 'button示例2',\n                    'dataIndex': 'button示例2',\n                    'renderOptions': {'renderType': 'button'},\n                },\n                {\n                    'title': 'button示例3',\n                    'dataIndex': 'button示例3',\n                    'renderOptions': {\n                        'renderType': 'button',\n                        'renderButtonPopConfirmProps': {\n                            'title': '确认执行？',\n                            'okText': '确认',\n                            'cancelText': '取消',\n                        },\n                    },\n                },\n            ],\n            data=[\n                {\n                    'button示例1': {\n                        'content': f'按钮1-{i}',\n                        'type': 'link',\n                        'href': f'/item{i}',\n                        'custom': 'balabalabalabala',\n                    },\n                    'button示例2': [\n                        {\n                            'content': f'按钮2-{i}-{j}',\n                            'type': 'primary',\n                            'custom': 'balabalabalabala',\n                        }\n                        for j in range(1, 3)\n                    ],\n                    'button示例3': [\n                        {\n                            'content': f'按钮3-{i}-{j}',\n                            'type': 'dashed',\n                            'danger': True,\n                            'custom': 'balabalabalabala',\n                        }\n                        for j in range(1, 3)\n                    ],\n                }\n                for i in range(1, 4)\n            ],\n            bordered=True,\n        ),\n        html.Pre(id='table-rerender-button-demo-output'),\n    ],\n    style={'padding': 100},\n)\n\n\n@app.callback(\n    Output('table-rerender-button-demo-output', 'children'),\n    Input('table-rerender-button-demo', 'nClicksButton'),\n    [\n        State('table-rerender-button-demo', 'clickedContent'),\n        State('table-rerender-button-demo', 'clickedCustom'),\n        State(\n            'table-rerender-button-demo',\n            'recentlyButtonClickedDataIndex',\n        ),\n        State(\n            'table-rerender-button-demo',\n            'recentlyButtonClickedRow',\n        ),\n    ],\n    prevent_initial_call=True,\n)\ndef table_rerender_button_demo(\n    nClicksButton,\n    clickedContent,\n    clickedCustom,\n    recentlyButtonClickedDataIndex,\n    recentlyButtonClickedRow,\n):\n    return json.dumps(\n        dict(\n            nClicksButton=nClicksButton,\n            clickedContent=clickedContent,\n            clickedCustom=clickedCustom,\n            recentlyButtonClickedDataIndex=recentlyButtonClickedDataIndex,\n            recentlyButtonClickedRow=recentlyButtonClickedRow,\n        ),\n        indent=4,\n        ensure_ascii=False,\n    )\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdTable/feat_button_mode_refactor.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import json\n\n    import dash\n    from dash import html\n    from dash.dependencies import Input, Output, State\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdTable(\n            id='table-rerender-button-demo',\n            columns=[\n                {\n                    'title': 'button示例1',\n                    'dataIndex': 'button示例1',\n                    'renderOptions': {'renderType': 'button'},\n                },\n                {\n                    'title': 'button示例2',\n                    'dataIndex': 'button示例2',\n                    'renderOptions': {'renderType': 'button'},\n                },\n                {\n                    'title': 'button示例3',\n                    'dataIndex': 'button示例3',\n                    'renderOptions': {\n                        'renderType': 'button',\n                        'renderButtonPopConfirmProps': {\n                            'title': '确认执行？',\n                            'okText': '确认',\n                            'cancelText': '取消',\n                        },\n                    },\n                },\n                {\n                    'title': 'button示例4',\n                    'dataIndex': 'button示例4',\n                    'renderOptions': {'renderType': 'button'},\n                },\n            ],\n            data=[\n                {\n                    'button示例1': {\n                        'content': f'按钮1-{i}',\n                        'type': 'link',\n                        'custom': 'balabalabalabala',\n                    },\n                    'button示例2': [\n                        {\n                            'content': f'按钮2-{i}-{j}',\n                            'type': 'primary',\n                            'custom': 'balabalabalabala',\n                        }\n                        for j in range(1, 3)\n                    ],\n                    'button示例3': [\n                        {\n                            'content': f'按钮3-{i}-{j}',\n                            'type': 'dashed',\n                            'danger': True,\n                            'custom': 'balabalabalabala',\n                        }\n                        for j in range(1, 3)\n                    ],\n                    'button示例4': [\n                        {\n                            'content': '有确认框',\n                            'type': 'link',\n                            'danger': True,\n                            'popConfirmProps': {'title': '确认继续？'},\n                        },\n                        {\n                            'content': '无确认框',\n                            'type': 'link',\n                        },\n                    ],\n                }\n                for i in range(1, 4)\n            ],\n            bordered=True,\n        ),\n        html.Pre(id='table-rerender-button-demo-output'),\n    ],\n    style={'padding': 100},\n)\n\n\n@app.callback(\n    Output('table-rerender-button-demo-output', 'children'),\n    Input('table-rerender-button-demo', 'nClicksButton'),\n    [\n        State('table-rerender-button-demo', 'clickedContent'),\n        State('table-rerender-button-demo', 'clickedCustom'),\n        State(\n            'table-rerender-button-demo',\n            'recentlyButtonClickedDataIndex',\n        ),\n        State(\n            'table-rerender-button-demo',\n            'recentlyButtonClickedRow',\n        ),\n    ],\n    prevent_initial_call=True,\n)\ndef table_rerender_button_demo(\n    nClicksButton,\n    clickedContent,\n    clickedCustom,\n    recentlyButtonClickedDataIndex,\n    recentlyButtonClickedRow,\n):\n    return json.dumps(\n        dict(\n            nClicksButton=nClicksButton,\n            clickedContent=clickedContent,\n            clickedCustom=clickedCustom,\n            recentlyButtonClickedDataIndex=recentlyButtonClickedDataIndex,\n            recentlyButtonClickedRow=recentlyButtonClickedRow,\n        ),\n        indent=4,\n        ensure_ascii=False,\n    )\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdTable/feat_button_mode_tooltip.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdTable(\n            columns=[\n                {\n                    'title': 'button示例',\n                    'dataIndex': 'button示例',\n                    'renderOptions': {'renderType': 'button'},\n                },\n            ],\n            data=[\n                {\n                    'button示例': {\n                        'icon': 'antd-setting',\n                        'tooltip': {'title': '示例按钮'},\n                    },\n                },\n                {\n                    'button示例': {\n                        'icon': 'antd-setting',\n                        'tooltip': {\n                            'title': '示例按钮',\n                            'placement': 'bottom',\n                        },\n                    },\n                },\n            ],\n            bordered=True,\n        )\n    ],\n    style={'padding': 100},\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdTable/feat_columns_fixed_bool.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        html.Div(\n            fac.AntdTable(\n                columns=[\n                    {\n                        'title': f'字段{i}',\n                        'dataIndex': f'字段{i}',\n                        'fixed': i <= 2,\n                    }\n                    for i in range(1, 6)\n                ],\n                data=[{f'字段{i}': '示例内容' for i in range(1, 6)}] * 3,\n                maxWidth=900,\n            ),\n            style={'maxWidth': 700, 'margin': '0 auto'},\n        )\n    ],\n    style=style(position='relative', height='100vh'),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdTable/feat_columns_min_width.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    from datetime import datetime\n\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdTable(\n            columns=[\n                {'title': 'int型示例', 'dataIndex': 'int型示例', 'minWidth': '500px'},\n                {\n                    'title': 'float型示例',\n                    'dataIndex': 'float型示例',\n                },\n                {\n                    'title': 'str型示例',\n                    'dataIndex': 'str型示例',\n                },\n                {\n                    'title': '日期时间示例',\n                    'dataIndex': '日期时间示例',\n                },\n            ],\n            data=[\n                {\n                    'int型示例': 123,\n                    'float型示例': 1.23,\n                    'str型示例': '示例字符',\n                    '日期时间示例': datetime.now(),\n                }\n            ]\n            * 3,\n            tableLayout='auto',\n        )\n    ],\n    style=style(position='relative', height='100vh'),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdTable/feat_columns_sort_order.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import json\n    import random\n\n    import dash\n    from dash import html\n    from dash.dependencies import Input, Output, State\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdSpace(\n            [\n                fac.AntdTable(\n                    id='table1',\n                    columns=[\n                        {\n                            'title': 'int型示例',\n                            'dataIndex': 'int型示例',\n                            'width': '25%',\n                        },\n                        {\n                            'title': 'float型示例',\n                            'dataIndex': 'float型示例',\n                            'width': '25%',\n                        },\n                        {\n                            'title': 'str型示例',\n                            'dataIndex': 'str型示例',\n                            'width': '25%',\n                            'defaultSortOrder': 'ascend',\n                        },\n                        {\n                            'title': '日期时间示例',\n                            'dataIndex': '日期时间示例',\n                            'width': '25%',\n                        },\n                    ],\n                    data=[\n                        {\n                            'int型示例': i,\n                            'float型示例': round(i * 0.1, 1),\n                            'str型示例': f'示例字符{i}',\n                            '日期时间示例': f'2099-01-0{i}',\n                        }\n                        for i in [4, 2, 1, 5, 3]\n                    ],\n                    sortOptions={\n                        'sortDataIndexes': [\n                            'int型示例',\n                            'float型示例',\n                            'str型示例',\n                            '日期时间示例',\n                        ]\n                    },\n                ),\n                fac.AntdTable(\n                    id='table2',\n                    columns=[\n                        {\n                            'title': f'字段{i}',\n                            'dataIndex': f'字段{i}',\n                            'width': '20%',\n                            'defaultSortOrder': 'ascend' if i % 2 == 0 else 'descend',\n                        }\n                        for i in range(1, 6)\n                    ],\n                    data=[\n                        {f'字段{j}': random.randint(1, 4) for j in range(1, 6)} for i in range(10)\n                    ],\n                    bordered=True,\n                    sortOptions={\n                        'sortDataIndexes': [\n                            '字段1',\n                            '字段2',\n                            '字段4',\n                            '字段5',\n                        ],\n                        'multiple': True,\n                    },\n                ),\n                fac.AntdButton(\n                    '获取columns',\n                    id='get-columns',\n                    type='primary',\n                ),\n                html.Pre(id='show-columns'),\n            ],\n            direction='vertical',\n            style=style(width='100%'),\n        )\n    ],\n    style={'padding': 100},\n)\n\n\n@app.callback(\n    Output('show-columns', 'children'),\n    Input('get-columns', 'nClicks'),\n    [\n        State('table1', 'columns'),\n        State('table2', 'columns'),\n    ],\n    prevent_initial_call=True,\n)\ndef show_columns(nClicks, table1_columns, table2_columns):\n    return json.dumps(\n        {\n            'table1_columns': table1_columns,\n            'table2_columns': table2_columns,\n        },\n        indent=4,\n        ensure_ascii=False,\n    )\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdTable/feat_editable_disabled_keys.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    from datetime import datetime\n\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdTable(\n            columns=[\n                {\n                    'title': 'int型示例',\n                    'dataIndex': 'int型示例',\n                    'editable': True,\n                    'width': '20%',\n                },\n                {\n                    'title': 'float型示例',\n                    'dataIndex': 'float型示例',\n                    'editable': True,\n                    'width': '20%',\n                },\n                {\n                    'title': 'str型示例',\n                    'dataIndex': 'str型示例',\n                    'editable': True,\n                    'width': '20%',\n                },\n                {\n                    'title': '日期时间示例',\n                    'dataIndex': '日期时间示例',\n                    'editable': True,\n                    'width': '20%',\n                },\n                {\n                    'title': 'placeholder示例',\n                    'dataIndex': 'placeholder示例',\n                    'editable': True,\n                    'width': '20%',\n                    'editOptions': {\n                        'placeholder': '请输入内容',\n                        'disabledKeys': ['row-1', 'row-5'],\n                    },\n                },\n            ],\n            data=[\n                {\n                    'key': f'row-{i}',\n                    'int型示例': 123,\n                    'float型示例': 1.23,\n                    'str型示例': '示例字符',\n                    '日期时间示例': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),\n                }\n                for i in range(10)\n            ],\n            bordered=True,\n        )\n    ],\n    style={'padding': 100},\n)\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdTable/feat_header_align.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdTable(\n            columns=[\n                {\n                    'title': align,\n                    'dataIndex': align,\n                    'align': align,\n                    'headerAlign': 'right',\n                }\n                for align in ['left', 'center', 'right']\n            ],\n            data=[{align: 999 for align in ['left', 'center', 'right']}] * 3,\n            bordered=True,\n        )\n    ],\n    style={'padding': 100},\n)\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdTable/feat_link_mode_like_dcc_link.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdSwitch(),\n        fac.AntdTable(\n            columns=[\n                {\n                    'title': 'link示例',\n                    'dataIndex': 'link示例',\n                    'renderOptions': {\n                        'renderType': 'link',\n                        'likeDccLink': True,\n                    },\n                },\n            ],\n            data=[\n                {\n                    'link示例': {\n                        'content': f'{content}仓库',\n                        'href': '/' + content,\n                    },\n                }\n                for content in [\n                    'fac',\n                    'fuc',\n                    'fact',\n                    'fmc',\n                    'flc',\n                ]\n            ],\n            bordered=True,\n            style={'width': 400},\n        ),\n    ],\n    style={'padding': 100},\n)\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdTable/feat_loading.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import random\n    import time\n\n    import dash\n    from dash import html\n    from dash.dependencies import Input, Output\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdSpace(\n            [\n                fac.AntdButton(\n                    '刷新数据',\n                    id='update-data',\n                    type='primary',\n                    loadingChildren='刷新中',\n                ),\n                fac.AntdTable(\n                    id='table',\n                    columns=[\n                        {\n                            'dataIndex': f'字段{i}',\n                            'title': f'字段{i}',\n                        }\n                        for i in range(10)\n                    ],\n                    data=[\n                        {f'字段{i}': random.randint(1, 100) for i in range(10)} for _ in range(10)\n                    ],\n                    bordered=True,\n                ),\n            ],\n            direction='vertical',\n            style=style(width='100%'),\n        ),\n    ],\n    style={'padding': 100},\n)\n\n\n@app.callback(\n    Output('table', 'data'),\n    Input('update-data', 'nClicks'),\n    running=[\n        [Output('update-data', 'loading'), True, False],\n        [Output('table', 'loading'), True, False],\n    ],\n    prevent_initial_call=True,\n)\ndef update_data(nClicks):\n    time.sleep(1)\n\n    return [{f'字段{i}': random.randint(1, 100) for i in range(10)} for _ in range(10)]\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdTable/feat_mini_chart_color.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    import numpy as np\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    fac.AntdSpace(\n        [\n            fac.AntdTable(\n                columns=[\n                    {\n                        'title': 'mini-line示例1',\n                        'dataIndex': 'mini-line示例1',\n                        'renderOptions': {\n                            'renderType': 'mini-line',\n                            'miniChartColor': 'red',\n                        },\n                        'width': '50%',\n                    },\n                    {\n                        'title': 'mini-line示例2',\n                        'dataIndex': 'mini-line示例2',\n                        'renderOptions': {\n                            'renderType': 'mini-line',\n                            'miniChartColor': 'red',\n                            'tooltipCustomContent': \"\"\"(x, data) => `数值：${data[0]?.data?.y.toFixed(3)}`\"\"\",\n                        },\n                        'width': '50%',\n                    },\n                ],\n                data=[\n                    {\n                        'mini-line示例1': [np.random.rand() for i in range(25)],\n                        'mini-line示例2': [np.random.rand() for i in range(25)],\n                    }\n                ]\n                * 3,\n                bordered=True,\n                style={'width': 300},\n            ),\n            fac.AntdTable(\n                columns=[\n                    {\n                        'title': 'mini-bar示例1',\n                        'dataIndex': 'mini-bar示例1',\n                        'renderOptions': {\n                            'renderType': 'mini-bar',\n                            'miniChartColor': 'red',\n                        },\n                        'width': '50%',\n                    },\n                    {\n                        'title': 'mini-bar示例2',\n                        'dataIndex': 'mini-bar示例2',\n                        'renderOptions': {\n                            'renderType': 'mini-bar',\n                            'miniChartColor': 'red',\n                            'tooltipCustomContent': \"\"\"(x, data) => `数值：${data[0]?.data?.y.toFixed(3)}`\"\"\",\n                        },\n                        'width': '50%',\n                    },\n                ],\n                data=[\n                    {\n                        'mini-bar示例1': [np.random.rand() for i in range(25)],\n                        'mini-bar示例2': [np.random.rand() for i in range(25)],\n                    }\n                ]\n                * 3,\n                bordered=True,\n                style={'width': 300},\n            ),\n            fac.AntdTable(\n                columns=[\n                    {\n                        'title': 'mini-area示例1',\n                        'dataIndex': 'mini-area示例1',\n                        'renderOptions': {\n                            'renderType': 'mini-area',\n                            'miniChartColor': 'red',\n                        },\n                        'width': '50%',\n                    },\n                    {\n                        'title': 'mini-area示例2',\n                        'dataIndex': 'mini-area示例2',\n                        'renderOptions': {\n                            'renderType': 'mini-area',\n                            'miniChartColor': 'red',\n                            'tooltipCustomContent': \"\"\"(x, data) => `数值：${data[0]?.data?.y.toFixed(3)}`\"\"\",\n                        },\n                        'width': '50%',\n                    },\n                ],\n                data=[\n                    {\n                        'mini-area示例1': [np.random.rand() for i in range(25)],\n                        'mini-area示例2': [np.random.rand() for i in range(25)],\n                    }\n                ]\n                * 3,\n                bordered=True,\n                style={'width': 300},\n            ),\n        ],\n        direction='vertical',\n        style=style(width='100%'),\n    ),\n    style={'padding': 100},\n)\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdTable/feat_row_class_name.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import random\n\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdTable(\n            id='table',\n            columns=[\n                {\n                    'dataIndex': f'字段{i}',\n                    'title': f'字段{i}',\n                }\n                for i in range(10)\n            ],\n            data=[{f'字段{i}': random.randint(1, 100) for i in range(10)} for _ in range(10)],\n            bordered=True,\n            rowClassName='test-row-class-name',\n        ),\n    ],\n    style={'padding': 100},\n)\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdTable/feat_row_class_name_func.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import random\n\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdTable(\n            id='table',\n            columns=[\n                {\n                    'dataIndex': f'字段{i}',\n                    'title': f'字段{i}',\n                }\n                for i in range(10)\n            ],\n            data=[{f'字段{i}': random.randint(1, 100) for i in range(10)} for _ in range(10)],\n            bordered=True,\n            rowClassName={'func': '(record, index) => `row-${index}`'},\n        ),\n    ],\n    style={'padding': 100},\n)\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdTable/feat_select_mode_show_search.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdTable(\n            columns=[\n                {\n                    'title': 'select示例1',\n                    'dataIndex': 'select示例1',\n                    'renderOptions': {'renderType': 'select'},\n                    'width': 'calc(100% / 3)',\n                },\n                {\n                    'title': 'select示例2',\n                    'dataIndex': 'select示例2',\n                    'renderOptions': {'renderType': 'select'},\n                    'width': 'calc(100% / 3)',\n                },\n            ],\n            data=[\n                {\n                    'select示例1': {\n                        'options': [\n                            {\n                                'label': f'选项{j}',\n                                'value': f'选项{j}',\n                            }\n                            for j in range(5)\n                        ],\n                        'allowClear': True,\n                        'placeholder': '请选择',\n                    },\n                    'select示例2': {\n                        'options': [\n                            {\n                                'label': f'选项{j}',\n                                'value': f'选项{j}',\n                            }\n                            for j in range(5)\n                        ],\n                        'mode': 'multiple',\n                        'allowClear': True,\n                        'placeholder': '请选择',\n                        'showSearch': False,\n                    },\n                }\n                for i in range(1, 4)\n            ],\n            bordered=True,\n            tableLayout='fixed',\n        )\n    ],\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdTable/feat_sticky_header.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        # ---- sticky top section whose height can change (collapse) ----\n        html.Div(\n            fac.AntdAccordion(\n                items=[\n                    {\n                        'title': f'手风琴项示例{i}',\n                        'key': i,\n                        'children': fac.AntdText(f'手风琴项示例{i}'),\n                    }\n                    for i in range(1, 6)\n                ]\n            ),\n            # this outer wrapper is what the hook observes\n            className='filters-shell',\n            style={\n                'position': 'sticky',\n                'top': 0,\n                'zIndex': 20,\n                'background': 'white',\n                'borderBottom': '1px solid #f0f0f0',\n            },\n        ),\n        html.Br(),\n        fac.AntdTable(\n            columns=[{'title': f'Field {i}', 'dataIndex': f'Field {i}'} for i in range(5)],\n            data=[{**{f'Field {j}': i for j in range(5)}, 'key': f'row-{i}'} for i in range(60)],\n            bordered=True,\n            size='middle',\n            className='sticky-table',\n            sticky={'belowSelector': '.filters-shell'},\n            pagination={'pageSize': 100, 'position': 'bottomCenter'},\n            expandedRowKeyToContent=[\n                {\n                    'key': f'row-{i}',\n                    'content': fac.AntdTable(\n                        columns=[\n                            {'title': f'Nested {i}', 'dataIndex': f'Field {i}'} for i in range(5)\n                        ],\n                        data=[\n                            {**{f'Field {j}': i for j in range(5)}, 'key': f'row-{i}'}\n                            for i in range(60)\n                        ],\n                        bordered=True,\n                        size='middle',\n                        sticky={\n                            'belowSelector': [\n                                '.filters-shell',\n                                '.sticky-table .ant-table-header.ant-table-sticky-holder',\n                            ],\n                        },\n                        pagination={'pageSize': 100, 'position': 'bottomCenter'},\n                    ),\n                }\n                for i in range(60)\n            ],\n        ),\n    ],\n    style={'padding': 24, 'maxWidth': 1000, 'margin': '0 auto'},\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdTable/feat_table_scroll.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    from datetime import datetime\n\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdTable(\n            columns=[\n                {\n                    'title': 'int型示例',\n                    'dataIndex': 'int型示例',\n                },\n                {\n                    'title': 'float型示例',\n                    'dataIndex': 'float型示例',\n                },\n                {\n                    'title': 'str型示例',\n                    'dataIndex': 'str型示例',\n                },\n                {\n                    'title': '日期时间示例',\n                    'dataIndex': '日期时间示例',\n                },\n            ],\n            data=[\n                {\n                    'int型示例': 123,\n                    'float型示例': 1.23,\n                    'str型示例': '示例字符',\n                    '日期时间示例': datetime.now(),\n                    '布尔类型示例': True,\n                }\n            ]\n            * 100,\n            maxHeight=300,\n            scrollToFirstRowOnChange=False,\n            bordered=True,\n            maxWidth='max-content',\n        )\n    ],\n    style={'padding': 100},\n)\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdTable/feat_tag_mode_tooltip.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdTable(\n            columns=[\n                {\n                    'title': 'Single Tag',\n                    'dataIndex': 'single-tag',\n                    'renderOptions': {'renderType': 'tags'},\n                },\n                {\n                    'title': 'Multiple Tags',\n                    'dataIndex': 'multiple-tags',\n                    'renderOptions': {'renderType': 'tags'},\n                },\n            ],\n            data=[\n                {\n                    'single-tag': {\n                        'tag': 'Active',\n                        'color': 'green',\n                        'tooltip': {'title': 'Currently active status'},\n                    },\n                    'multiple-tags': [\n                        {\n                            'tag': 'Important',\n                            'color': 'red',\n                            'tooltip': {\n                                'title': 'High priority item',\n                                'placement': 'top',\n                            },\n                        },\n                        {\n                            'tag': 'Verified',\n                            'color': 'blue',\n                            'tooltip': {\n                                'title': 'Verified by admin',\n                                'placement': 'bottom',\n                            },\n                        },\n                    ],\n                },\n                {\n                    'single-tag': {\n                        'tag': 'Pending',\n                        'color': 'orange',\n                        'tooltip': {\n                            'title': 'Waiting for processing',\n                            'placement': 'right',\n                        },\n                    },\n                    'multiple-tags': [\n                        {\n                            'tag': 'New',\n                            'color': 'cyan',\n                        },\n                        {\n                            'tag': 'Urgent',\n                            'color': 'red',\n                            'tooltip': {\n                                'title': 'Urgent task',\n                                'placement': 'left',\n                            },\n                        },\n                    ],\n                },\n            ],\n            bordered=True,\n        )\n    ],\n    style={'padding': 100},\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdTable/feat_title_popover_nodes.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdTable(\n            columns=[\n                {\n                    'title': fac.AntdSpace(\n                        [\n                            'Name',\n                            fac.AntdPopover(\n                                fac.AntdIcon(icon='antd-question-circle'),\n                                title='Hover for Name Info',\n                                content='Full names of team members',\n                            ),\n                        ],\n                        size='small',\n                    ),\n                    'dataIndex': 'name',\n                },\n                {'title': 'Role', 'dataIndex': 'role'},\n                {\n                    'title': fac.AntdSpace(\n                        [\n                            'Status',\n                            fac.AntdPopover(\n                                fac.AntdIcon(icon='antd-question-circle'),\n                                title=fac.AntdText('Status Legend'),\n                                content=fac.AntdDescriptions(\n                                    column=1,\n                                    bordered=True,\n                                    items=[\n                                        {\n                                            'label': 'Active',\n                                            'children': 'Currently available',\n                                        },\n                                        {\n                                            'label': 'On Leave',\n                                            'children': 'Temporarily out',\n                                        },\n                                    ],\n                                    size='small',\n                                    style={'maxWidth': 600},\n                                ),\n                            ),\n                        ],\n                        size='small',\n                    ),\n                    'dataIndex': 'status',\n                },\n            ],\n            data=[\n                {\n                    'name': 'Alice',\n                    'role': 'Designer',\n                    'status': 'Active',\n                    'key': '1',\n                },\n                {\n                    'name': 'Bob',\n                    'role': 'Engineer',\n                    'status': 'On Leave',\n                    'key': '2',\n                },\n                {\n                    'name': 'Carol',\n                    'role': 'PM',\n                    'status': 'Active',\n                    'key': '3',\n                },\n            ],\n            bordered=True,\n        )\n    ],\n    style={'padding': 50},\n)\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdTable/fix_context_locale.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdConfigProvider(\n            fac.AntdTable(\n                columns=[\n                    {\n                        'title': '搜索型筛选',\n                        'dataIndex': '搜索型筛选',\n                    }\n                ],\n                data=[{'搜索型筛选': s} for s in list('abced')],\n                filterOptions={'搜索型筛选': {'filterMode': 'keyword'}},\n                style={'width': 200},\n            ),\n            locale='en-us',\n        )\n    ],\n    style={'padding': 50},\n)\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdTable/fix_field_bool.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    from datetime import datetime\n\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdTable(\n            columns=[\n                {\n                    'title': 'int型示例',\n                    'dataIndex': 'int型示例',\n                },\n                {\n                    'title': 'float型示例',\n                    'dataIndex': 'float型示例',\n                },\n                {\n                    'title': 'str型示例',\n                    'dataIndex': 'str型示例',\n                },\n                {\n                    'title': '日期时间示例',\n                    'dataIndex': '日期时间示例',\n                },\n            ],\n            data=[\n                {\n                    'int型示例': 123,\n                    'float型示例': 1.23,\n                    'str型示例': '示例字符',\n                    '日期时间示例': datetime.now(),\n                    '布尔类型示例': True,\n                }\n            ]\n            * 3,\n        )\n    ],\n    style={'padding': 100},\n)\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdTable/fix_max_width_height_ghost_row.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        html.Div(\n            fac.AntdTable(\n                columns=[\n                    {\n                        'title': f'字段{i}',\n                        'dataIndex': f'字段{i}',\n                    }\n                    for i in range(1, 6)\n                ],\n                data=[{f'字段{i}': '示例内容' for i in range(1, 6)}] * 3,\n                maxWidth=900,\n                title='maxWidth=900',\n            ),\n            style={'maxWidth': 700, 'margin': '0 auto'},\n        ),\n        fac.AntdTable(\n            columns=[\n                {\n                    'title': f'字段{i}',\n                    'dataIndex': f'字段{i}',\n                }\n                for i in range(1, 6)\n            ],\n            data=[{f'字段{i}': '示例内容' * 4 for i in range(1, 6)}] * 3,\n            maxWidth='max-content',\n            title='maxWidth=\"max-content\"',\n        ),\n    ],\n    style={'padding': 100},\n)\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdTable/fix_nested_editable.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    from datetime import datetime\n\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\nnormal_table = fac.AntdTable(\n    columns=[\n        {\n            'title': 'int型示例',\n            'dataIndex': 'int型示例',\n            'editable': True,\n            'width': '20%',\n        },\n        {\n            'title': 'float型示例',\n            'dataIndex': 'float型示例',\n            'editable': True,\n            'width': '20%',\n        },\n        {\n            'title': 'str型示例',\n            'dataIndex': 'str型示例',\n            'editable': True,\n            'width': '20%',\n        },\n        {\n            'title': '日期时间示例',\n            'dataIndex': '日期时间示例',\n            'editable': True,\n            'width': '20%',\n        },\n        {\n            'title': 'placeholder示例',\n            'dataIndex': 'placeholder示例',\n            'editable': True,\n            'width': '20%',\n            'editOptions': {'placeholder': '请输入内容'},\n        },\n    ],\n    data=[\n        {\n            'int型示例': 123,\n            'float型示例': 1.23,\n            'str型示例': '示例字符',\n            '日期时间示例': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),\n        }\n    ]\n    * 3,\n    bordered=True,\n)\n\nnested_table = fac.AntdTable(\n    id='table-click-event-demo',\n    columns=[\n        {\n            'title': f'Column {i}',\n            'dataIndex': f'column-{i}',\n            'width': 'calc(100% / 3)',\n            'editable': True,\n        }\n        for i in range(1, 4)\n    ],\n    data=[\n        {\n            'key': f'row-{i}',\n            'column-1': '第一层',\n            'column-2': '第一层',\n            'column-3': '第一层',\n            'children': [\n                {\n                    'key': f'row-{i}{j}',\n                    'column-1': '第二层',\n                    'column-2': '第二层',\n                    'column-3': '第二层',\n                    'children': [\n                        {\n                            'key': f'row-{i}{j}{k}',\n                            'column-1': '第二层',\n                            'column-2': '第二层',\n                            'column-3': '第二层',\n                        }\n                        for k in range(3)\n                    ],\n                }\n                for j in range(3)\n            ],\n        }\n        for i in range(3)\n    ],\n    bordered=True,\n)\n\napp.layout = html.Div(\n    [\n        fac.AntdSpace(\n            [normal_table, nested_table],\n            direction='vertical',\n            style=style(width='100%'),\n        )\n    ],\n    style=style(padding=50),\n)\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdTable/fix_select_with_editable.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    from datetime import datetime\n\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdTable(\n            columns=[\n                {\n                    'title': 'select示例1',\n                    'dataIndex': 'select示例1',\n                    'renderOptions': {'renderType': 'select'},\n                },\n                {\n                    'title': 'placeholder示例',\n                    'dataIndex': 'placeholder示例',\n                    'editable': True,\n                    'width': '20%',\n                    'editOptions': {'placeholder': '请输入内容'},\n                },\n                {\n                    'title': 'int型示例',\n                    'dataIndex': 'int型示例',\n                    'editable': True,\n                },\n                {\n                    'title': 'float型示例',\n                    'dataIndex': 'float型示例',\n                    'editable': True,\n                },\n                {\n                    'title': 'str型示例',\n                    'dataIndex': 'str型示例',\n                    'editable': True,\n                },\n                {\n                    'title': '日期时间示例',\n                    'dataIndex': '日期时间示例',\n                    'editable': True,\n                },\n            ],\n            data=[\n                {\n                    'select示例1': {\n                        'options': [\n                            {\n                                'label': f'选项{j}',\n                                'value': f'选项{j}',\n                            }\n                            for j in range(5)\n                        ],\n                        'allowClear': True,\n                        'placeholder': '请选择',\n                    },\n                    'int型示例': 123,\n                    'float型示例': 1.23,\n                    'str型示例': '示例字符',\n                    '日期时间示例': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),\n                }\n            ]\n            * 3,\n            bordered=True,\n            tableLayout='fixed',\n        )\n    ],\n    style={'padding': 100},\n)\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdTable/fix_server_side_mode_filter_search.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import time\n\n    import dash\n    import numpy as np\n    import pandas as pd\n    from dash import html\n    from dash.dependencies import Input, Output, State\n\n    import feffery_antd_components as fac\n\n# 生成演示用数据框\ndemo_df = (\n    pd.DataFrame(\n        {\n            'id': list(range(1, 100001)),\n            '字段1': np.random.choice(\n                [f'{s}{n}' for s in list('abcdefghij') for n in range(1, 10001)],\n                100000,\n                replace=False,\n            ),\n            '字段2': np.random.choice(\n                [f'类型{t}' for t in range(1, 11) for n in range(10000)],\n                100000,\n                replace=False,\n            ),\n        }\n    )\n    # 打乱顺序\n    .sample(frac=1, replace=False)\n)\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdSpin(\n            fac.AntdTable(\n                id='table-server-side-mode-pagination+filter-demo-pandas',\n                columns=[\n                    {\n                        'title': column,\n                        'dataIndex': column,\n                        'width': 'calc(100% / {})'.format(demo_df.shape[0]),\n                    }\n                    for column in demo_df.columns\n                ],\n                bordered=True,\n                # 关键参数\n                mode='server-side',\n                pagination={\n                    'total': demo_df.shape[0],\n                    'current': 1,\n                    'pageSize': 5,\n                    'showSizeChanger': True,\n                    'pageSizeOptions': [5, 10],\n                    'position': 'topCenter',\n                    'showQuickJumper': True,\n                },\n                filterOptions={\n                    '字段1': {'filterMode': 'keyword'},\n                    '字段2': {\n                        'filterCustomItems': demo_df['字段2'].unique(),\n                        'filterMultiple': True,\n                        'filterSearch': True,\n                    },\n                },\n            ),\n            text='数据加载中',\n            size='small',\n        )\n    ],\n    style={'padding': 100},\n)\n\n\n@app.callback(\n    [\n        Output(\n            'table-server-side-mode-pagination+filter-demo-pandas',\n            'data',\n        ),\n        Output(\n            'table-server-side-mode-pagination+filter-demo-pandas',\n            'pagination',\n        ),\n    ],\n    [\n        Input(\n            'table-server-side-mode-pagination+filter-demo-pandas',\n            'pagination',\n        ),\n        Input(\n            'table-server-side-mode-pagination+filter-demo-pandas',\n            'filter',\n        ),\n    ],\n    State(\n        'table-server-side-mode-pagination+filter-demo-pandas',\n        'filterOptions',\n    ),\n)\ndef table_server_side_mode_pagination_filter_demo_pandas(pagination, filter_, filterOptions):\n    if pagination:\n        time.sleep(0.5)  # 渲染加载动画更好看 ^_^\n\n        # 若存在至少一项有效的筛选操作\n        if filter_ and any([value for value in filter_.values()]):\n            # 根据当前分页的current参数、pageSize参数，筛选后从demo_df中抽取对应数据帧\n            valid_filters = [(key, value) for key, value in filter_.items() if value]\n\n            filter_conditions = (\n                f'`{valid_filters[0][0]}` == {valid_filters[0][1]}'\n                if filterOptions[valid_filters[0][0]].get('filterMode') != 'keyword'\n                else f'`{valid_filters[0][0]}`.str.contains(\"{valid_filters[0][1][0]}\")'\n            )\n\n            for valid_filter in valid_filters[1:]:\n                filter_conditions += ' and '\n                filter_conditions += (\n                    f'`{valid_filter[0]}` == {valid_filter[1]}'\n                    if filterOptions[valid_filter[0]].get('filterMode') != 'keyword'\n                    else f'`{valid_filter[0]}`.str.contains(\"{valid_filter[1][0]}\")'\n                )\n\n            # 计算经过筛选后的符合条件记录值数量\n            match_records_count = demo_df.query(filter_conditions).shape[0]\n\n            data_frame = demo_df.query(filter_conditions).iloc[\n                (pagination['current'] - 1) * pagination['pageSize'] : pagination['current']\n                * pagination['pageSize'],\n                :,\n            ]\n\n            return [\n                data_frame.to_dict('records'),\n                {\n                    **pagination,\n                    'total': match_records_count,\n                },\n            ]\n\n        # 根据当前分页的current参数、pageSize参数，从demo_df中抽取对应数据帧\n        data_frame = demo_df.iloc[\n            (pagination['current'] - 1) * pagination['pageSize'] : pagination['current']\n            * pagination['pageSize'],\n            :,\n        ]\n\n        return [\n            data_frame.to_dict('records'),\n            {**pagination, 'total': demo_df.shape[0]},\n        ]\n\n    return dash.no_update\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdTable/fix_summary.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = dash.html.Div(\n    [\n        fac.AntdTable(\n            data=[\n                {\n                    'parent_id': 0,\n                    'subject_id': 5,\n                    'subjectName': '1费用',\n                    '2024-01': 129070.69,\n                    '2024-02': 6920.25,\n                    '2024-03': 8692.08,\n                    '2024-04': 11505.06,\n                    '2024-05': 6020.31,\n                    '合计': 162208.39,\n                    '占比': '37.86%',\n                    'children': [\n                        {\n                            'parent_id': 5,\n                            'subject_id': 43,\n                            'subjectName': '2付款',\n                            '2024-01': 126307.66,\n                            '2024-02': 3664.12,\n                            '2024-03': 1941.0,\n                            '2024-04': 7465.98,\n                            '2024-05': 3820.8,\n                            '合计': 143199.56,\n                            '占比': '33.42%',\n                        },\n                        {\n                            'parent_id': 5,\n                            'subject_id': 84,\n                            'subjectName': '3旅费',\n                            '2024-01': 0.0,\n                            '2024-02': 0.0,\n                            '2024-03': 5878.31,\n                            '2024-04': 3834.84,\n                            '2024-05': 0.0,\n                            '合计': 9713.15,\n                            '占比': '2.27%',\n                        },\n                        {\n                            'parent_id': 5,\n                            'subject_id': 38,\n                            'subjectName': '4金',\n                            '2024-01': 2763.03,\n                            '2024-02': 3256.13,\n                            '2024-03': 872.77,\n                            '2024-04': 204.24,\n                            '2024-05': 2199.51,\n                            '合计': 9295.68,\n                            '占比': '2.17%',\n                        },\n                    ],\n                },\n                {\n                    'parent_id': 0,\n                    'subject_id': 96,\n                    'subjectName': '1酬',\n                    '2024-01': 43387.05,\n                    '2024-02': 3757.05,\n                    '2024-03': 4919.05,\n                    '2024-04': 33102.51,\n                    '2024-05': 9132.51,\n                    '合计': 94298.17,\n                    '占比': '22.01%',\n                    'children': [\n                        {\n                            'parent_id': 96,\n                            'subject_id': 75,\n                            'subjectName': '2资',\n                            '2024-01': 29000.0,\n                            '2024-02': 0.0,\n                            '2024-03': 0.0,\n                            '2024-04': 24000.0,\n                            '2024-05': 0.0,\n                            '合计': 53000.0,\n                            '占比': '12.37%',\n                        },\n                        {\n                            'parent_id': 96,\n                            'subject_id': 37,\n                            'subjectName': '3资',\n                            '2024-01': 10600.0,\n                            '2024-02': 0.0,\n                            '2024-03': 1162.0,\n                            '2024-04': 5300.0,\n                            '2024-05': 5300.0,\n                            '合计': 22362.0,\n                            '占比': '5.22%',\n                        },\n                        {\n                            'parent_id': 96,\n                            'subject_id': 71,\n                            'subjectName': '2保',\n                            '2024-01': 3757.05,\n                            '2024-02': 3757.05,\n                            '2024-03': 3757.05,\n                            '2024-04': 3802.51,\n                            '2024-05': 3802.51,\n                            '合计': 18876.17,\n                            '占比': '4.41%',\n                        },\n                        {\n                            'parent_id': 96,\n                            'subject_id': 63,\n                            'subjectName': '4费',\n                            '2024-01': 30.0,\n                            '2024-02': 0.0,\n                            '2024-03': 0.0,\n                            '2024-04': 0.0,\n                            '2024-05': 30.0,\n                            '合计': 60.0,\n                            '占比': '0.01%',\n                        },\n                    ],\n                },\n                {\n                    'parent_id': 0,\n                    'subject_id': 4,\n                    'subjectName': '1费用',\n                    '2024-01': 17608.0,\n                    '2024-02': 17640.0,\n                    '2024-03': 17528.0,\n                    '2024-04': 17608.0,\n                    '2024-05': 17629.0,\n                    '合计': 88013.0,\n                    '占比': '20.54%',\n                    'children': [\n                        {\n                            'parent_id': 4,\n                            'subject_id': 78,\n                            'subjectName': '2金',\n                            '2024-01': 17608.0,\n                            '2024-02': 17640.0,\n                            '2024-03': 17528.0,\n                            '2024-04': 17608.0,\n                            '2024-05': 17629.0,\n                            '合计': 88013.0,\n                            '占比': '20.54%',\n                        }\n                    ],\n                },\n                {\n                    'parent_id': 0,\n                    'subject_id': 6,\n                    'subjectName': '3用',\n                    '2024-01': 45773.61,\n                    '2024-02': 145.0,\n                    '2024-03': 22357.04,\n                    '2024-04': 42.05,\n                    '2024-05': 3397.9,\n                    '合计': 71715.6,\n                    '占比': '16.74%',\n                    'children': [\n                        {\n                            'parent_id': 6,\n                            'subject_id': 85,\n                            'subjectName': '4出',\n                            '2024-01': 44600.0,\n                            '2024-02': 0.0,\n                            '2024-03': 21600.0,\n                            '2024-04': 0.0,\n                            '2024-05': 0.0,\n                            '合计': 66200.0,\n                            '占比': '15.45%',\n                        },\n                        {\n                            'parent_id': 6,\n                            'subject_id': 61,\n                            'subjectName': '2费',\n                            '2024-01': 1173.61,\n                            '2024-02': 145.0,\n                            '2024-03': 757.04,\n                            '2024-04': 42.05,\n                            '2024-05': 3397.9,\n                            '合计': 5515.6,\n                            '占比': '1.29%',\n                        },\n                    ],\n                },\n                {\n                    'parent_id': 0,\n                    'subject_id': 8,\n                    'subjectName': '2用',\n                    '2024-01': 3779.09,\n                    '2024-02': 212.61,\n                    '2024-03': 1703.25,\n                    '2024-04': 2190.72,\n                    '2024-05': 2584.13,\n                    '合计': 10469.8,\n                    '占比': '2.44%',\n                    'children': [\n                        {\n                            'parent_id': 8,\n                            'subject_id': 58,\n                            'subjectName': '3用',\n                            '2024-01': 3523.09,\n                            '2024-02': 173.61,\n                            '2024-03': 1289.18,\n                            '2024-04': 2000.84,\n                            '2024-05': 2501.13,\n                            '合计': 9487.85,\n                            '占比': '2.21%',\n                        },\n                        {\n                            'parent_id': 8,\n                            'subject_id': 80,\n                            'subjectName': '4车费',\n                            '2024-01': 60.0,\n                            '2024-02': 0.0,\n                            '2024-03': 300.0,\n                            '2024-04': 80.0,\n                            '2024-05': 0.0,\n                            '合计': 440.0,\n                            '占比': '0.10%',\n                        },\n                        {\n                            'parent_id': 8,\n                            'subject_id': 57,\n                            'subjectName': '5用',\n                            '2024-01': 151.0,\n                            '2024-02': 39.0,\n                            '2024-03': 84.07,\n                            '2024-04': 9.88,\n                            '2024-05': 39.0,\n                            '合计': 322.95,\n                            '占比': '0.08%',\n                        },\n                        {\n                            'parent_id': 8,\n                            'subject_id': 73,\n                            'subjectName': '1费',\n                            '2024-01': 45.0,\n                            '2024-02': 0.0,\n                            '2024-03': 30.0,\n                            '2024-04': 100.0,\n                            '2024-05': 44.0,\n                            '合计': 219.0,\n                            '占比': '0.05%',\n                        },\n                    ],\n                },\n                {\n                    'parent_id': 0,\n                    'subject_id': 7,\n                    'subjectName': '1用',\n                    '2024-01': 80.0,\n                    '2024-02': 0.0,\n                    '2024-03': 543.25,\n                    '2024-04': 410.0,\n                    '2024-05': 402.49,\n                    '合计': 1435.74,\n                    '占比': '0.34%',\n                    'children': [\n                        {\n                            'parent_id': 7,\n                            'subject_id': 81,\n                            'subjectName': '23',\n                            '2024-01': 0.0,\n                            '2024-02': 0.0,\n                            '2024-03': 543.25,\n                            '2024-04': 410.0,\n                            '2024-05': 400.0,\n                            '合计': 1353.25,\n                            '占比': '0.32%',\n                        },\n                        {\n                            'parent_id': 7,\n                            'subject_id': 70,\n                            'subjectName': '1费',\n                            '2024-01': 80.0,\n                            '2024-02': 0.0,\n                            '2024-03': 0.0,\n                            '2024-04': 0.0,\n                            '2024-05': 2.49,\n                            '合计': 82.49,\n                            '占比': '0.02%',\n                        },\n                    ],\n                },\n                {\n                    'parent_id': 0,\n                    'subject_id': 3,\n                    'subjectName': '4用',\n                    '2024-01': 187.81,\n                    '2024-02': 0.0,\n                    '2024-03': 12.0,\n                    '2024-04': 19.88,\n                    '2024-05': 85.18,\n                    '合计': 304.87,\n                    '占比': '0.07%',\n                    'children': [\n                        {\n                            'parent_id': 3,\n                            'subject_id': 52,\n                            'subjectName': '2入',\n                            '2024-01': 186.38,\n                            '2024-02': 0.0,\n                            '2024-03': 0.0,\n                            '2024-04': 0.0,\n                            '2024-05': 0.0,\n                            '合计': 186.38,\n                            '占比': '0.04%',\n                        },\n                        {\n                            'parent_id': 3,\n                            'subject_id': 74,\n                            'subjectName': '5费',\n                            '2024-01': 1.43,\n                            '2024-02': 0.0,\n                            '2024-03': 12.0,\n                            '2024-04': 19.88,\n                            '2024-05': 85.18,\n                            '合计': 118.49,\n                            '占比': '0.03%',\n                        },\n                    ],\n                },\n            ],\n            columns=[\n                {\n                    'title': '科目名称',\n                    'dataIndex': 'subjectName',\n                    'width': 150,\n                    'fixed': 'left',\n                },\n                {\n                    'title': '占比',\n                    'dataIndex': '占比',\n                    'width': 80,\n                    'fixed': 'left',\n                },\n                {\n                    'title': '合计',\n                    'dataIndex': '合计',\n                    'width': 100,\n                    'fixed': 'left',\n                },\n                {\n                    'title': '2024-01',\n                    'dataIndex': '2024-01',\n                    'width': 100,\n                },\n                {\n                    'title': '2024-02',\n                    'dataIndex': '2024-02',\n                    'width': 100,\n                },\n                {\n                    'title': '2024-03',\n                    'dataIndex': '2024-03',\n                    'width': 100,\n                },\n                {\n                    'title': '2024-04',\n                    'dataIndex': '2024-04',\n                    'width': 100,\n                },\n                {\n                    'title': '2024-05',\n                    'dataIndex': '2024-05',\n                    'width': 100,\n                },\n            ],\n            **{\n                'summaryRowContents': [\n                    # 第一行\n                    {\n                        'content': fac.AntdText(''),\n                        'align': 'center',\n                    },\n                    {\n                        'content': fac.AntdText(''),\n                        'align': 'center',\n                    },\n                    {\n                        'content': fac.AntdText(''),\n                        'align': 'center',\n                    },\n                    {\n                        'content': fac.AntdText(\n                            children='239886.25',\n                            strong=True,\n                        ),\n                        'align': 'center',\n                    },\n                    {\n                        'content': fac.AntdText(children='28674.91', strong=True),\n                        'align': 'center',\n                    },\n                    {\n                        'content': fac.AntdText(children='55754.67', strong=True),\n                        'align': 'center',\n                    },\n                    {\n                        'content': fac.AntdText(children='64878.22', strong=True),\n                        'align': 'center',\n                    },\n                    {\n                        'content': fac.AntdText(children='39251.52', strong=True),\n                        'align': 'center',\n                    },\n                    {\n                        'content': fac.AntdText(''),\n                        'align': 'center',\n                    },\n                    {\n                        'content': fac.AntdText(''),\n                        'align': 'center',\n                    },\n                    {\n                        'content': fac.AntdText(''),\n                        'align': 'center',\n                    },\n                    {\n                        'content': 324315.83,\n                        'align': 'center',\n                        'colSpan': 3,\n                    },\n                    {\n                        'content': 104129.74,\n                        'align': 'center',\n                        'colSpan': 2,\n                    },\n                    {\n                        'content': fac.AntdText(''),\n                        'align': 'center',\n                    },\n                    {\n                        'content': fac.AntdText(''),\n                        'align': 'center',\n                    },\n                    {\n                        'content': fac.AntdText(''),\n                        'align': 'center',\n                    },\n                    {\n                        'content': 428445.57,\n                        'align': 'center',\n                        'colSpan': 5,\n                    },\n                    {\n                        'content': '支出合计： 428,445.57',\n                        'align': 'center',\n                        'colSpan': 8,\n                    },\n                ],\n                'summaryRowBlankColumns': 1,\n                'summaryRowFixed': 'bottom',\n                'pagination': {'pageSize': 60},\n                'rowSelectionType': 'radio',\n            },\n        )\n    ]\n)\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdTable/fix_summary_multi_level_header.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdTable(\n            columns=[\n                {\n                    'title': '字段1',\n                    'dataIndex': '字段1',\n                },\n                {\n                    'title': '字段2',\n                    'dataIndex': '字段2',\n                },\n                {\n                    'title': '字段3',\n                    'dataIndex': '字段3',\n                    'group': '组1',\n                },\n                {\n                    'title': '字段4',\n                    'dataIndex': '字段4',\n                    'group': '组1',\n                },\n                {\n                    'title': '字段5',\n                    'dataIndex': '字段5',\n                },\n                {\n                    'title': '字段6',\n                    'dataIndex': '字段6',\n                },\n            ],\n            data=[{f'字段{i}': f'示例内容{i}' for i in range(1, 7)}] * 5,\n            bordered=True,\n            summaryRowContents=[\n                {'content': '第1列总结', 'align': 'center'},\n                {\n                    'content': '第2到3列总结',\n                    'colSpan': 2,\n                    'align': 'center',\n                },\n                {'content': '第4列总结', 'align': 'center'},\n                {\n                    'content': '第5到6列总结',\n                    'colSpan': 2,\n                    'align': 'center',\n                },\n                {'content': 'xxx', 'align': 'center'},\n                {\n                    'content': 'xxx',\n                    'colSpan': 2,\n                    'align': 'center',\n                },\n                {'content': 'xxx', 'align': 'center'},\n                {\n                    'content': 'xxx',\n                    'colSpan': 2,\n                    'align': 'center',\n                },\n            ],\n            rowSelectionType='radio',\n            summaryRowBlankColumns=1,\n        ),\n    ],\n    style={'padding': 100},\n)\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdTable/fix_zero_value_filter.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdTable(\n            columns=[\n                {\n                    'title': 'value',\n                    'dataIndex': 'value',\n                },\n            ],\n            data=[{'value': x} for x in range(10)],\n            filterOptions={\n                'value': {\n                    'filterCustomItems': [x for x in range(10)],\n                },\n            },\n        )\n    ],\n    style={'padding': 100},\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdTable/perf_button_mode_auto_wrap.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdTable(\n            columns=[\n                {\n                    'dataIndex': '按钮示例',\n                    'title': '按钮示例',\n                    'renderOptions': {'renderType': 'button'},\n                }\n            ],\n            data=[{'按钮示例': [{'content': f'按钮{i}'} for i in range(50)]}],\n            bordered=True,\n        )\n    ],\n    style={'padding': 100},\n)\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdTable/perf_editable_column_format_constrait_message.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from dash.dependencies import Input, Output\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdTable(\n            id='table',\n            locale='en-us',\n            columns=[\n                {\n                    'dataIndex': f'field{i}',\n                    'title': f'field{i}',\n                    'editable': True,\n                }\n                for i in range(1, 4)\n            ],\n            data=[{f'field{i}': '' for i in range(1, 4)}],\n            bordered=True,\n            tableLayout='fixed',\n            columnsFormatConstraint={\n                'field1': {'rule': '^[0-9]+$'},\n                'field2': {\n                    'rule': '^[0-9]+$',\n                    'content': 'Input \"[VALUE]\" does not match digits-only format.',\n                },\n                'field3': {\n                    'rule': '^[0-9]+$',\n                    'content': 'Input must be digits-only.',\n                },\n            },\n            title=fac.AntdSegmented(\n                id='table-locale',\n                options=[\n                    'en-us',\n                    'zh-cn',\n                    'de-de',\n                    'ru-ru',\n                ],\n                value='en-us',\n            ),\n        )\n    ],\n    style={'padding': 100},\n)\n\n\n@app.callback(\n    Output('table', 'locale'),\n    Input('table-locale', 'value'),\n    prevent_initial_call=True,\n)\ndef update_table_locale(locale):\n    return locale\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdTable/refactor_mini_progress_mode.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__, compress=True)\n\napp.layout = html.Div(\n    [\n        fac.AntdSpace(\n            [\n                fac.AntdTable(\n                    columns=[\n                        {\n                            'title': 'mini-progress示例1',\n                            'dataIndex': 'mini-progress示例1',\n                            'renderOptions': {'renderType': 'mini-progress'},\n                        },\n                        {\n                            'title': 'mini-progress示例2',\n                            'dataIndex': 'mini-progress示例2',\n                            'renderOptions': {\n                                'renderType': 'mini-progress',\n                                'progressOneHundredPercentColor': '#f08c00',\n                            },\n                        },\n                        {\n                            'title': 'mini-progress示例3',\n                            'dataIndex': 'mini-progress示例3',\n                            'renderOptions': {\n                                'renderType': 'mini-progress',\n                                'progressShowPercent': True,\n                                'progressStrokeLinecap': 'round',\n                            },\n                        },\n                        {\n                            'title': 'mini-progress示例4',\n                            'dataIndex': 'mini-progress示例4',\n                            'renderOptions': {\n                                'renderType': 'mini-progress',\n                                'progressSize': 16,\n                            },\n                        },\n                        {\n                            'title': 'mini-progress示例5',\n                            'dataIndex': 'mini-progress示例5',\n                            'renderOptions': {\n                                'renderType': 'mini-progress',\n                                'progressColor': {\n                                    'from': '#3c8ce7',\n                                    'to': '#00eaff',\n                                },\n                            },\n                        },\n                        {\n                            'title': 'mini-progress示例6',\n                            'dataIndex': 'mini-progress示例6',\n                            'renderOptions': {\n                                'renderType': 'mini-progress',\n                                'progressShowPercent': True,\n                                'progressStrokeLinecap': 'round',\n                                'progressPercentPrecision': 2,\n                            },\n                        },\n                    ],\n                    data=[\n                        {\n                            'mini-progress示例1': x,\n                            'mini-progress示例2': x,\n                            'mini-progress示例3': x,\n                            'mini-progress示例4': x,\n                            'mini-progress示例5': x,\n                            'mini-progress示例6': x + 0.00123456,\n                        }\n                        for x in [0, 0.66, 1]\n                    ],\n                    bordered=True,\n                    miniChartHeight=50,\n                    tableLayout='fixed',\n                ),\n                fac.AntdTable(\n                    columns=[\n                        {\n                            'title': f'{align} - {_type}',\n                            'dataIndex': f'{align} - {_type}',\n                            'renderOptions': {\n                                'renderType': 'mini-progress',\n                                'progressPercentPosition': {\n                                    'align': align,\n                                    'type': _type,\n                                },\n                                'progressShowPercent': True,\n                            },\n                        }\n                        for align in [\n                            'start',\n                            'center',\n                            'end',\n                        ]\n                        for _type in ['inner', 'outer']\n                    ],\n                    data=[\n                        {\n                            f'{align} - {_type}': x\n                            for align in [\n                                'start',\n                                'center',\n                                'end',\n                            ]\n                            for _type in ['inner', 'outer']\n                        }\n                        for x in [0, 0.66, 1]\n                    ],\n                    bordered=True,\n                    miniChartHeight=50,\n                    tableLayout='fixed',\n                ),\n            ],\n            direction='vertical',\n            style={'width': '100%'},\n        )\n    ],\n    style={'padding': 50},\n)\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdTable/rollback_title_popover_info.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdTable(\n            columns=[\n                {\n                    'title': f'字段{i}',\n                    'dataIndex': f'字段{i}',\n                }\n                for i in range(1, 6)\n            ],\n            data=[\n                {\n                    **{f'字段{i}': '示例内容' for i in range(1, 6)},\n                    'key': f'row-{row + 1}',\n                }\n                for row in range(3)\n            ],\n            titlePopoverInfo={\n                f'字段{i}': {\n                    'title': f'字段{i}说明',\n                    'content': f'这是字段{i}的说明巴拉巴拉巴拉',\n                    'placement': 'top',\n                }\n                for i in range(1, 6)\n            },\n        ),\n    ],\n    style={'padding': 50},\n)\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdTabs/feat_item_icon.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdTabs(\n            items=[\n                {\n                    'key': f'标签页{i}',\n                    'label': f'标签页{i}',\n                    'icon': fac.AntdIcon(icon='antd-function'),\n                    'children': fac.AntdCenter(\n                        f'这是标签页{i}的内容示例',\n                        style={\n                            'fontSize': 18,\n                            'background': f'rgba(28, 126, 214, calc(1 - 0.2 * {i}))',\n                            'height': 200,\n                        },\n                    ),\n                }\n                for i in range(1, 6)\n            ]\n        )\n    ],\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdTabs/feat_placeholder.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from dash.dependencies import Input, Output, State\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdTabs(\n            id='tabs-add-delete-demo',\n            type='editable-card',\n            items=[\n                {\n                    'label': f'标签页{i}',\n                    'key': str(i),\n                    'children': fac.AntdCenter(\n                        f'标签页{i}',\n                        style={\n                            'height': 200,\n                            'fontSize': 28,\n                        },\n                    ),\n                    'closable': True,\n                }\n                for i in range(1, 6)\n            ],\n            tabBarRightExtraContent=fac.AntdIcon(\n                id='tabs-add-delete-demo-add',\n                icon='antd-plus-circle-two-tone',\n                style={'fontSize': 20, 'cursor': 'pointer'},\n            ),\n            placeholder=fac.AntdEmpty(\n                description='当前无有效标签页',\n            ),\n        ),\n        fac.Fragment(id='tabs-add-delete-demo-tab-count'),\n    ],\n    style=style(padding=50),\n)\n\n\n@app.callback(\n    [\n        Output('tabs-add-delete-demo', 'items'),\n        Output('tabs-add-delete-demo', 'activeKey'),\n    ],\n    [\n        Input('tabs-add-delete-demo-add', 'nClicks'),\n        Input('tabs-add-delete-demo', 'latestDeletePane'),\n    ],\n    [\n        State('tabs-add-delete-demo', 'items'),\n        State('tabs-add-delete-demo', 'activeKey'),\n    ],\n)\ndef tabs_add_delete_demo(nClicks, latestDeletePane, origin_items, activeKey):\n    if dash.ctx.triggered_id == 'tabs-add-delete-demo-add':\n        if origin_items:\n            # 提取已有items中的最大key值\n            origin_max_key = max([int(item['key']) for item in origin_items])\n\n        else:\n            origin_max_key = 0\n\n        return [\n            [\n                *origin_items,\n                {\n                    'label': f'标签页{origin_max_key + 1}',\n                    'key': str(origin_max_key + 1),\n                    'children': fac.AntdCenter(\n                        f'标签页{origin_max_key + 1}',\n                        style={\n                            'height': 200,\n                            'fontSize': 28,\n                        },\n                    ),\n                },\n            ],\n            str(origin_max_key + 1),\n        ]\n\n    elif dash.ctx.triggered_id == 'tabs-add-delete-demo':\n        return [\n            [item for item in origin_items if item['key'] != latestDeletePane],\n            '1' if latestDeletePane == activeKey else dash.no_update,\n        ]\n\n    return dash.no_update\n\n\n@app.callback(\n    Output('tabs-add-delete-demo-tab-count', 'children'),\n    Input('tabs-add-delete-demo', 'tabCount'),\n    State('tabs-add-delete-demo', 'tabCloseCounts'),\n    prevent_initial_call=True,\n)\ndef tabs_add_delete_demo_tab_count(tabCount, tabCloseCounts):\n    return fac.AntdMessage(\n        content=f'标签页自由增删示例 tabCount: {tabCount}，标签页关闭次数：{tabCloseCounts}',\n        type='info',\n    )\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdTabs/feat_tab_bar_style.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdTabs(\n            items=[\n                {\n                    'key': f'标签页{i}',\n                    'label': f'标签页{i}',\n                    'icon': fac.AntdIcon(icon='antd-function'),\n                    'children': fac.AntdCenter(\n                        f'这是标签页{i}的内容示例',\n                        style={\n                            'fontSize': 18,\n                            'background': f'rgba(28, 126, 214, calc(1 - 0.2 * {i}))',\n                            'height': 200,\n                        },\n                    ),\n                }\n                for i in range(1, 6)\n            ],\n            tabBarStyle=style(background='#d9d9d9'),\n        )\n    ],\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/AntdTree/feat_async_data_load.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import time\n\n    import dash\n    from dash import html\n    from dash.dependencies import Input, Output, State\n    from feffery_dash_utils.tree_utils import TreeManager\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdTree(\n            id='tree-demo',\n            treeData=[\n                {\n                    'key': '节点1',\n                    'title': '节点1',\n                },\n                {\n                    'key': '节点2',\n                    'title': '节点2',\n                    'children': [\n                        {\n                            'key': '节点2-1',\n                            'title': '节点2-1',\n                            'isLeaf': True,\n                        },\n                    ],\n                },\n                {\n                    'key': '节点3',\n                    'title': '节点3',\n                    'isLeaf': True,\n                },\n            ],\n            enableAsyncLoad=True,\n        )\n    ],\n    style={'padding': 100},\n)\n\n\n@app.callback(\n    Output('tree-demo', 'treeData'),\n    Input('tree-demo', 'loadingNode'),\n    State('tree-demo', 'treeData'),\n    prevent_initial_call=True,\n)\ndef tree_demo(loadingNode, treeData):\n    time.sleep(0.5)\n    return TreeManager.update_tree_node(\n        treeData,\n        node_key=loadingNode['key'],\n        new_node={\n            'children': [\n                {\n                    'key': loadingNode['key'] + '-1',\n                    'title': loadingNode['key'] + '-1',\n                }\n            ]\n        },\n        mode='overlay',\n    )\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataDisplay/descriptions/AntdDescriptions/feat_extra.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../../')\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdDescriptions(\n            [\n                fac.AntdDescriptionItem('费弗里', label='姓名'),\n                fac.AntdDescriptionItem(\n                    html.A(\n                        'https://github.com/CNFeffery',\n                        href='https://github.com/CNFeffery',\n                    ),\n                    label='个人Github地址',\n                ),\n                fac.AntdDescriptionItem(\n                    html.A(\n                        'https://www.cnblogs.com/feffery/',\n                        href='https://www.cnblogs.com/feffery/',\n                    ),\n                    label='个人博客地址',\n                ),\n                fac.AntdDescriptionItem(\n                    html.A(\n                        'http://fac.feffery.tech/',\n                        href='http://fac.feffery.tech/',\n                    ),\n                    label='fac框架官网',\n                ),\n            ],\n            title='描述列表示例',\n            labelStyle={'fontWeight': 'bold'},\n            extra=fac.AntdButton('编辑', type='primary'),\n        ),\n        fac.AntdDescriptions(\n            items=[\n                {\n                    'label': fac.AntdText('姓名'),\n                    'children': '费弗里',\n                },\n                {\n                    'label': fac.AntdText('个人Github地址'),\n                    'children': html.A(\n                        'https://github.com/CNFeffery',\n                        href='https://github.com/CNFeffery',\n                    ),\n                },\n                {\n                    'label': fac.AntdText('个人博客地址'),\n                    'children': html.A(\n                        'https://www.cnblogs.com/feffery/',\n                        href='https://www.cnblogs.com/feffery/',\n                    ),\n                },\n                {\n                    'label': fac.AntdText('fac框架官网'),\n                    'children': html.A(\n                        'http://fac.feffery.tech/',\n                        href='http://fac.feffery.tech/',\n                    ),\n                },\n            ],\n            title='描述列表示例',\n            labelStyle={'fontWeight': 'bold'},\n            bordered=True,\n            extra=fac.AntdButton('编辑', type='primary'),\n        ),\n    ],\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataEntry/AntdCalendar/feat_custom_cells.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdCalendar(\n            size='large',\n            customCells=[\n                {\n                    'type': 'date',\n                    'month': 8,\n                    'date': 1,\n                    'content': fac.AntdTag(content='建军节', color='red'),\n                },\n                {\n                    'type': 'date',\n                    'date': 15,\n                    'content': fac.AntdTag(content='月中', color='blue'),\n                },\n                {\n                    'type': 'month',\n                    'month': 7,\n                    'content': fac.AntdTag(content='暑假', color='red'),\n                },\n                {\n                    'type': 'month',\n                    'month': 8,\n                    'content': fac.AntdTag(content='暑假', color='red'),\n                },\n            ],\n        )\n    ],\n    style={'padding': 100},\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataEntry/AntdCascader/feat_prefix.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdCascader(\n            placeholder='请选择',\n            prefix=fac.AntdIcon(icon='antd-user'),\n            options=[\n                {\n                    'value': '节点1',\n                    'label': '节点1',\n                    'children': [\n                        {\n                            'value': '节点1-1',\n                            'label': '节点1-1',\n                        },\n                        {\n                            'value': '节点1-2',\n                            'label': '节点1-2',\n                            'children': [\n                                {\n                                    'value': '节点1-2-1',\n                                    'label': '节点1-2-1',\n                                },\n                                {\n                                    'value': '节点1-2-2',\n                                    'label': '节点1-2-2',\n                                },\n                            ],\n                        },\n                    ],\n                },\n                {\n                    'value': '节点2',\n                    'label': '节点2',\n                    'children': [\n                        {\n                            'value': '节点2-1',\n                            'label': '节点2-1',\n                        },\n                        {\n                            'value': '节点2-2',\n                            'label': '节点2-2',\n                        },\n                    ],\n                },\n            ],\n        )\n    ],\n    style={'padding': 100},\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataEntry/AntdCascader/feat_suffix_icon.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdCascader(\n            placeholder='请选择',\n            suffixIcon=fac.AntdIcon(icon='antd-user'),\n            options=[\n                {\n                    'value': '节点1',\n                    'label': '节点1',\n                    'children': [\n                        {\n                            'value': '节点1-1',\n                            'label': '节点1-1',\n                        },\n                        {\n                            'value': '节点1-2',\n                            'label': '节点1-2',\n                            'children': [\n                                {\n                                    'value': '节点1-2-1',\n                                    'label': '节点1-2-1',\n                                },\n                                {\n                                    'value': '节点1-2-2',\n                                    'label': '节点1-2-2',\n                                },\n                            ],\n                        },\n                    ],\n                },\n                {\n                    'value': '节点2',\n                    'label': '节点2',\n                    'children': [\n                        {\n                            'value': '节点2-1',\n                            'label': '节点2-1',\n                        },\n                        {\n                            'value': '节点2-2',\n                            'label': '节点2-2',\n                        },\n                    ],\n                },\n            ],\n        )\n    ],\n    style={'padding': 100},\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataEntry/AntdCascader/fix_read_only.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdSpace(\n            [\n                fac.AntdCascader(\n                    placeholder='请选择',\n                    options=[\n                        {\n                            'value': '节点1',\n                            'label': '节点1',\n                            'children': [\n                                {\n                                    'value': '节点1-1',\n                                    'label': '节点1-1',\n                                },\n                                {\n                                    'value': '节点1-2',\n                                    'label': '节点1-2',\n                                    'children': [\n                                        {\n                                            'value': '节点1-2-1',\n                                            'label': '节点1-2-1',\n                                        },\n                                        {\n                                            'value': '节点1-2-2',\n                                            'label': '节点1-2-2',\n                                        },\n                                    ],\n                                },\n                            ],\n                        },\n                        {\n                            'value': '节点2',\n                            'label': '节点2',\n                            'children': [\n                                {\n                                    'value': '节点2-1',\n                                    'label': '节点2-1',\n                                },\n                                {\n                                    'value': '节点2-2',\n                                    'label': '节点2-2',\n                                },\n                            ],\n                        },\n                    ],\n                    readOnly=True,\n                    value=[\n                        ['节点1', '节点1-1'],\n                        ['节点2', '节点2-1'],\n                    ],\n                    multiple=True,\n                    style=style(width=300),\n                )\n            ],\n            direction='vertical',\n        )\n    ],\n    style={'padding': 100},\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataEntry/AntdDatePicker/feat_custom_cells.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdSpace(\n            [\n                fac.AntdText('日期：精确匹配'),\n                fac.AntdDatePicker(\n                    style={'width': 200},\n                    customCells=[\n                        {\n                            'year': 2024,\n                            'month': 9,\n                            'date': 4,\n                            'style': {\n                                'border': '1px solid #389e0d',\n                                'borderRadius': '50%',\n                            },\n                        }\n                    ],\n                ),\n                fac.AntdText('日期：年份通配'),\n                fac.AntdDatePicker(\n                    style={'width': 200},\n                    customCells=[\n                        {\n                            'month': 9,\n                            'date': 4,\n                            'style': {\n                                'border': '1px solid #389e0d',\n                                'borderRadius': '50%',\n                            },\n                        }\n                    ],\n                ),\n                fac.AntdText('日期：月份通配'),\n                fac.AntdDatePicker(\n                    style={'width': 200},\n                    customCells=[\n                        {\n                            'year': 2024,\n                            'date': 4,\n                            'style': {\n                                'border': '1px solid #389e0d',\n                                'borderRadius': '50%',\n                            },\n                        }\n                    ],\n                ),\n                fac.AntdText('日期：年份+月份通配'),\n                fac.AntdDatePicker(\n                    style={'width': 200},\n                    customCells=[\n                        {\n                            'date': 4,\n                            'style': {\n                                'border': '1px solid #389e0d',\n                                'borderRadius': '50%',\n                            },\n                        }\n                    ],\n                ),\n            ],\n            direction='vertical',\n        )\n    ],\n    style={'padding': 100},\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataEntry/AntdDatePicker/feat_picker_value.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from dash.dependencies import Input, Output\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdSpace(\n            [\n                fac.AntdDatePicker(\n                    id='date-picker-demo',\n                    style={'width': 200},\n                ),\n                fac.AntdText(id='picker-value'),\n            ],\n            direction='vertical',\n        )\n    ],\n    style={'padding': 100},\n)\n\n\n@app.callback(\n    Output('picker-value', 'children'),\n    Input('date-picker-demo', 'pickerValue'),\n)\ndef show_picker_value(pickerValue):\n    return pickerValue\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataEntry/AntdDatePicker/feat_prefix.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [fac.AntdDatePicker(prefix=fac.AntdIcon(icon='antd-user'))],\n    style={'padding': 100},\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataEntry/AntdDatePicker/feat_suffix_icon.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [fac.AntdDatePicker(suffixIcon=fac.AntdIcon(icon='antd-user'))],\n    style={'padding': 100},\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataEntry/AntdDateRangePicker/feat_custom_cells.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdSpace(\n            [\n                fac.AntdText('日期：精确匹配'),\n                fac.AntdDateRangePicker(\n                    style={'width': 200},\n                    customCells=[\n                        {\n                            'year': 2024,\n                            'month': 9,\n                            'date': 4,\n                            'style': {\n                                'border': '1px solid #389e0d',\n                                'borderRadius': '50%',\n                            },\n                        }\n                    ],\n                ),\n                fac.AntdText('日期：年份通配'),\n                fac.AntdDateRangePicker(\n                    style={'width': 200},\n                    customCells=[\n                        {\n                            'month': 9,\n                            'date': 4,\n                            'style': {\n                                'border': '1px solid #389e0d',\n                                'borderRadius': '50%',\n                            },\n                        }\n                    ],\n                ),\n                fac.AntdText('日期：月份通配'),\n                fac.AntdDateRangePicker(\n                    style={'width': 200},\n                    customCells=[\n                        {\n                            'year': 2024,\n                            'date': 4,\n                            'style': {\n                                'border': '1px solid #389e0d',\n                                'borderRadius': '50%',\n                            },\n                        }\n                    ],\n                ),\n                fac.AntdText('日期：年份+月份通配'),\n                fac.AntdDateRangePicker(\n                    style={'width': 200},\n                    customCells=[\n                        {\n                            'date': 4,\n                            'style': {\n                                'border': '1px solid #389e0d',\n                                'borderRadius': '50%',\n                            },\n                        }\n                    ],\n                ),\n            ],\n            direction='vertical',\n        )\n    ],\n    style={'padding': 100},\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataEntry/AntdDateRangePicker/feat_picker_value.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from dash.dependencies import Input, Output\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdSpace(\n            [\n                fac.AntdDateRangePicker(\n                    id='date-range-picker-demo',\n                    style={'width': 250},\n                ),\n                fac.AntdText(id='picker-value'),\n            ],\n            direction='vertical',\n        )\n    ],\n    style={'padding': 100},\n)\n\n\n@app.callback(\n    Output('picker-value', 'children'),\n    Input('date-range-picker-demo', 'pickerValue'),\n)\ndef show_picker_value(pickerValue):\n    return str(pickerValue)\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataEntry/AntdDateRangePicker/feat_prefix.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [fac.AntdDateRangePicker(prefix=fac.AntdIcon(icon='antd-user'))],\n    style={'padding': 100},\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataEntry/AntdDateRangePicker/feat_suffix_icon.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [fac.AntdDateRangePicker(suffixIcon=fac.AntdIcon(icon='antd-user'))],\n    style={'padding': 100},\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataEntry/AntdForm/feat_batch_control_tooltips.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdForm(\n            [\n                fac.AntdFormItem(\n                    fac.AntdInput(name=f'表单项{i}'),\n                    label=f'表单项{i}',\n                )\n                for i in range(1, 6)\n            ],\n            id='batch-tooltip-form-demo',\n            enableBatchControl=True,\n            layout='vertical',\n            tooltips={f'表单项{i}': f'这是表单项{i}的提示信息' for i in range(1, 6)},\n        )\n    ],\n    style={'padding': 100},\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataEntry/AntdForm/feat_optional_batch_control.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import json\n\n    import dash\n    from dash import html\n    from dash.dependencies import Input, Output\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdSpace(\n            [\n                fac.AntdForm(\n                    [\n                        fac.AntdFormItem(\n                            fac.AntdInput(\n                                name=f'表单项{i}',\n                                enableBatchControl=i % 2 == 0,\n                            ),\n                            label=f'表单项{i}',\n                        )\n                        for i in range(1, 6)\n                    ],\n                    id='callback-listen-value-form-demo',\n                    enableBatchControl=True,\n                    layout='vertical',\n                    values={\n                        f'表单项{i}': f'这是表单项{i}的设定值' for i in range(1, 6) if i % 2 == 0\n                    },\n                ),\n                html.Pre(id='callback-listen-value-form-demo-output'),\n            ],\n            direction='vertical',\n            style={'width': '100%'},\n        )\n    ],\n    style=style(padding=50),\n)\n\n\n@app.callback(\n    Output('callback-listen-value-form-demo-output', 'children'),\n    Input('callback-listen-value-form-demo', 'values'),\n)\ndef callback_listen_value_demo(values):\n    return json.dumps(values, ensure_ascii=False, indent=4)\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataEntry/AntdForm/fix_checkbox.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdForm(\n            [\n                fac.AntdFormItem(\n                    fac.AntdInput(\n                        id='login-user-name',\n                        placeholder='请输入用户名',\n                        size='large',\n                        prefix=fac.AntdIcon(\n                            icon='antd-user',\n                            className='global-help-text',\n                        ),\n                        autoComplete='off',\n                    ),\n                    label='用户名',\n                ),\n                fac.AntdFormItem(\n                    fac.AntdInput(\n                        id='login-password',\n                        placeholder='请输入密码',\n                        size='large',\n                        mode='password',\n                        prefix=fac.AntdIcon(\n                            icon='antd-lock',\n                            className='global-help-text',\n                        ),\n                    ),\n                    label='密码',\n                ),\n                fac.AntdCheckbox(id='login-remember-me', label='记住我'),\n                fac.AntdButton(\n                    '登录',\n                    id='login-button',\n                    loadingChildren='校验中',\n                    type='primary',\n                    block=True,\n                    size='large',\n                    style=style(marginTop=18),\n                ),\n            ],\n            id='login-form',\n            enableBatchControl=True,\n            layout='vertical',\n            style=style(width=350),\n        )\n    ],\n    style={'padding': 100},\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataEntry/AntdRadioGroup/feat_block.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = fac.AntdCenter(\n    fac.AntdSpace(\n        [\n            fac.AntdRadioGroup(\n                options=['Apple', 'Pear', 'Orange'],\n                block=True,\n                value='Apple',\n            ),\n            fac.AntdRadioGroup(\n                options=['Apple', 'Pear', 'Orange'],\n                block=True,\n                optionType='button',\n                value='Apple',\n            ),\n            fac.AntdRadioGroup(\n                options=['Apple', 'Pear', 'Orange'],\n                block=True,\n                optionType='button',\n                buttonStyle='solid',\n                value='Apple',\n            ),\n        ],\n        direction='vertical',\n        style=style(width='100%'),\n    ),\n    style=style(height='100vh'),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataEntry/AntdSelect/feat_locale_ru.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdSelect(\n            options=[],\n            locale='ru-ru',\n            style=style(width=200),\n        )\n    ],\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataEntry/AntdSelect/feat_max_count.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdSelect(\n            prefix='至多选择3个',\n            options=[{'label': f'选项{i}', 'value': f'选项{i}'} for i in range(1, 26)],\n            maxCount=3,\n            mode='multiple',\n            style={'width': 350},\n        )\n    ],\n    style={'padding': 100},\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataEntry/AntdSelect/feat_prefix.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdSelect(\n            options=[{'label': f'选项{i}', 'value': f'选项{i}'} for i in range(1, 6)],\n            prefix=fac.AntdIcon(icon='antd-user'),\n            style={'width': 350},\n        )\n    ],\n    style={'padding': 100},\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataEntry/AntdSelect/feat_show_search.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdSpace(\n            [\n                fac.AntdSelect(\n                    options=list('abc'),\n                    style=style(width=200),\n                ),\n                fac.AntdSelect(\n                    options=list('abc'),\n                    showSearch=False,\n                    style=style(width=200),\n                ),\n            ]\n        )\n    ],\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataEntry/AntdSelect/feat_suffix_icon.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdSpace(\n            [\n                fac.AntdSelect(\n                    options=[\n                        {\n                            'label': f'选项{i}',\n                            'value': f'选项{i}',\n                        }\n                        for i in range(1, 6)\n                    ],\n                    style={'width': 350},\n                ),\n                fac.AntdSelect(\n                    options=[\n                        {\n                            'label': f'选项{i}',\n                            'value': f'选项{i}',\n                        }\n                        for i in range(1, 6)\n                    ],\n                    suffixIcon=fac.AntdIcon(icon='antd-user'),\n                    style={'width': 350},\n                ),\n            ],\n            direction='vertical',\n        )\n    ],\n    style={'padding': 100},\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataEntry/AntdSelect/fix_read_only.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdSpace(\n            [\n                fac.AntdSelect(\n                    readOnly=True,\n                    options=[f'选项{i}' for i in range(1, 6)],\n                    value='选项1',\n                    style={'width': '100%'},\n                ),\n                fac.AntdSelect(\n                    readOnly=True,\n                    mode='multiple',\n                    options=[f'选项{i}' for i in range(1, 6)],\n                    value=[f'选项{i}' for i in range(1, 3)],\n                    style={'width': '100%'},\n                ),\n                fac.AntdSelect(\n                    readOnly=True,\n                    mode='tags',\n                    options=[f'选项{i}' for i in range(1, 6)],\n                    value=['选项1', '自由新增选项'],\n                    style={'width': '100%'},\n                ),\n            ],\n            direction='vertical',\n            style={'width': 350},\n        )\n    ],\n    style={'padding': 100},\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataEntry/AntdSelect/fix_read_only_with_allow_clear.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdSelect(\n            style={'width': '100%'},\n            options=[{'label': f'选项{i}', 'value': i} for i in range(5)],\n            value=1,\n            allowClear=False,\n            readOnly=False,\n        )\n    ],\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataEntry/AntdSlider/feat_range_editable.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import json\n\n    import dash\n    from dash import html\n    from dash.dependencies import Input, Output\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdSpace(\n            [\n                fac.AntdSlider(\n                    id='demo-slider',\n                    min=0,\n                    max=100,\n                    defaultValue=[20, 30, 40, 50],\n                    range={\n                        'editable': True,\n                        'minCount': 3,\n                        'maxCount': 8,\n                    },\n                ),\n                html.Pre(id='output'),\n            ],\n            direction='vertical',\n            style=style(width='100%'),\n        )\n    ],\n    style=style(padding=50),\n)\n\n\n@app.callback(\n    Output('output', 'children'),\n    Input('demo-slider', 'value'),\n    prevent_initial_call=True,\n)\ndef show_value(value):\n    return json.dumps(value, ensure_ascii=False, indent=4)\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataEntry/AntdTimePicker/feat_prefix.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [fac.AntdTimePicker(prefix=fac.AntdIcon(icon='antd-user'))],\n    style={'padding': 100},\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataEntry/AntdTimePicker/feat_suffix_icon.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [fac.AntdTimePicker(suffixIcon=fac.AntdIcon(icon='antd-user'))],\n    style={'padding': 100},\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataEntry/AntdTimeRangePicker/feat_prefix.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [fac.AntdTimeRangePicker(prefix=fac.AntdIcon(icon='antd-user'))],\n    style={'padding': 100},\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataEntry/AntdTimeRangePicker/feat_suffix_icon.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [fac.AntdTimeRangePicker(suffixIcon=fac.AntdIcon(icon='antd-user'))],\n    style={'padding': 100},\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataEntry/AntdTreeSelect/feat_async_data_load.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import time\n\n    import dash\n    from dash import html\n    from dash.dependencies import Input, Output, State\n    from feffery_dash_utils.tree_utils import TreeManager\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdTreeSelect(\n            id='tree-select-demo',\n            treeData=[\n                {\n                    'key': '节点1',\n                    'title': '节点1',\n                    'value': '节点1',\n                },\n                {\n                    'key': '节点2',\n                    'title': '节点2',\n                    'value': '节点2',\n                },\n                {\n                    'key': '节点3',\n                    'title': '节点3',\n                    'value': '节点3',\n                    'isLeaf': True,\n                },\n            ],\n            enableAsyncLoad=True,\n            style={'width': 300},\n        )\n    ],\n    style={'padding': 100},\n)\n\n\n@app.callback(\n    Output('tree-select-demo', 'treeData'),\n    Input('tree-select-demo', 'loadingNode'),\n    State('tree-select-demo', 'treeData'),\n    prevent_initial_call=True,\n)\ndef tree_select_demo(loadingNode, treeData):\n    time.sleep(0.5)\n    return TreeManager.update_tree_node(\n        treeData,\n        node_key=loadingNode['key'],\n        new_node={\n            'children': [\n                {\n                    'key': loadingNode['key'] + '-1',\n                    'title': loadingNode['key'] + '-1',\n                    'value': loadingNode['key'] + '-1',\n                }\n            ]\n        },\n        mode='overlay',\n    )\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataEntry/AntdTreeSelect/feat_max_count.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from dash.dependencies import Input, Output\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdTreeSelect(\n            id='test-max-count-demo',\n            treeData=[\n                {\n                    'key': '节点1',\n                    'value': '1',\n                    'title': '节点1',\n                    'children': [\n                        {\n                            'key': f'节点1-{i}',\n                            'value': f'1-{i}',\n                            'title': f'节点1-{i}',\n                        }\n                        for i in range(1, 3)\n                    ],\n                },\n                {\n                    'key': '节点2',\n                    'value': '2',\n                    'title': '节点2',\n                    'children': [\n                        {\n                            'key': f'节点2-{i}',\n                            'value': f'2-{i}',\n                            'title': f'节点2-{i}',\n                        }\n                        for i in range(1, 5)\n                    ],\n                },\n            ],\n            placeholder='请选择',\n            multiple=True,\n            treeCheckable=True,\n            showCheckedStrategy='show-child',\n            maxCount=3,\n            style={'width': 256},\n        )\n    ],\n    style={'padding': 100},\n)\n\n\n@app.callback(\n    Output('test-max-count-demo', 'suffixIcon'),\n    Input('test-max-count-demo', 'value'),\n)\ndef test_max_count_demo(value):\n    length = 0\n    if value:\n        length = len(value)\n    return [html.Span(f'{length} / 3'), fac.AntdIcon(icon='antd-down')]\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataEntry/AntdTreeSelect/feat_prefix.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdTreeSelect(\n            treeData=[\n                {\n                    'key': '节点1',\n                    'value': '1',\n                    'title': '节点1',\n                    'children': [\n                        {\n                            'key': f'节点1-{i}',\n                            'value': f'1-{i}',\n                            'title': f'节点1-{i}',\n                        }\n                        for i in range(1, 5)\n                    ],\n                },\n                {\n                    'key': '节点2',\n                    'value': '2',\n                    'title': '节点2',\n                },\n            ],\n            placeholder='请选择',\n            prefix=fac.AntdIcon(icon='antd-user'),\n            style={'width': 256},\n        )\n    ],\n    style={'padding': 100},\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataEntry/AntdTreeSelect/fix_read_only.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdSpace(\n            [\n                fac.AntdTreeSelect(\n                    treeData=[\n                        {\n                            'key': '节点1',\n                            'value': '1',\n                            'title': '节点1',\n                            'children': [\n                                {\n                                    'key': f'节点1-{i}',\n                                    'value': f'1-{i}',\n                                    'title': f'节点1-{i}',\n                                }\n                                for i in range(1, 5)\n                            ],\n                        },\n                        {\n                            'key': '节点2',\n                            'value': '2',\n                            'title': '节点2',\n                        },\n                    ],\n                    placeholder='请选择',\n                    defaultValue=['节点2', '节点1-2'],\n                    readOnly=True,\n                    multiple=True,\n                    style={'width': 256},\n                )\n            ],\n            direction='vertical',\n        )\n    ],\n    style={'padding': 100},\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataEntry/AntdUpload/feat_pastable.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [fac.AntdUpload(buttonContent='upload test', pastable=True)],\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/dataEntry/AntdUpload/fix_follow_theme.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdConfigProvider(\n            [\n                fac.AntdUpload(\n                    buttonContent='upload test',\n                    confirmBeforeDelete=True,\n                )\n            ],\n            algorithm='dark',\n        )\n    ],\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/feat_variant_underlined.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../')\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdSpace(\n            [\n                fac.AntdInput(\n                    placeholder='AntdInput underlined测试',\n                    variant='underlined',\n                ),\n                fac.AntdCascader(\n                    placeholder='AntdCascader underlined测试',\n                    variant='underlined',\n                    options=[],\n                    style=style(width='100%'),\n                ),\n                fac.AntdDatePicker(\n                    placeholder='AntdDatePicker underlined测试',\n                    variant='underlined',\n                    style=style(width='100%'),\n                ),\n                fac.AntdDateRangePicker(\n                    placeholder=[\n                        'AntdDateRangePicker underlined测试',\n                        '',\n                    ],\n                    variant='underlined',\n                    style=style(width='100%'),\n                ),\n                fac.AntdInputNumber(\n                    placeholder='AntdInputNumber underlined测试',\n                    variant='underlined',\n                    style=style(width='100%'),\n                ),\n                fac.AntdMentions(\n                    placeholder='AntdMentions underlined测试',\n                    variant='underlined',\n                    options=[],\n                ),\n                fac.AntdOTP(variant='underlined', value='123456'),\n                fac.AntdSegmentedColoring(\n                    min=-10,\n                    max=10,\n                    breakpoints=[0, 1, 2, 3, 4, 5],\n                    colors=[\n                        '#deecf9',\n                        '#71afe5',\n                        '#2b88d8',\n                        '#0078d4',\n                        '#106ebe',\n                    ],\n                    variant='underlined',\n                    size='small',\n                ),\n                fac.AntdSelect(\n                    placeholder='AntdSelect underlined测试',\n                    variant='underlined',\n                    options=[],\n                    style=style(width='100%'),\n                ),\n                fac.AntdTimePicker(\n                    placeholder='AntdTimePicker underlined测试',\n                    variant='underlined',\n                    style=style(width='100%'),\n                ),\n                fac.AntdTimeRangePicker(\n                    placeholder=[\n                        'AntdTimeRangePicker underlined测试',\n                        '',\n                    ],\n                    variant='underlined',\n                    style=style(width='100%'),\n                ),\n                fac.AntdTreeSelect(\n                    placeholder='AntdTreeSelect underlined测试',\n                    variant='underlined',\n                    treeData=[],\n                    style=style(width='100%'),\n                ),\n            ],\n            direction='vertical',\n            style=style(width='100%'),\n        )\n    ],\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/feedback/AntdAlert/feat_icon.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    fac.AntdSpace(\n        [\n            fac.AntdAlert(\n                message='test alert',\n                type='info',\n                showIcon=True,\n                icon='😀',\n            ),\n            fac.AntdAlert(\n                message='test alert',\n                type='info',\n                showIcon=True,\n                icon=fac.AntdIcon(icon='fc-like'),\n            ),\n        ],\n        direction='vertical',\n        style=style(width='100%'),\n    ),\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/feedback/AntdMessage/fix_follow_config_provider.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from dash.dependencies import Input, Output\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    fac.AntdConfigProvider(\n        [\n            fac.AntdButton(\n                'new message',\n                id='new-message',\n                type='primary',\n            ),\n            fac.Fragment(id='message-target'),\n        ],\n        algorithm='dark',\n    ),\n    style=style(padding=50),\n)\n\n\n@app.callback(\n    Output('message-target', 'children'),\n    Input('new-message', 'nClicks'),\n    prevent_initial_call=True,\n)\ndef new_message(nClicks):\n    return fac.AntdMessage(\n        content=f'nClicks: {nClicks}',\n        type='info',\n        top=256,\n        maxCount=3,\n    )\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/feedback/AntdModal/feat_force_render.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from dash.dependencies import Input, Output\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdModal(\n            fac.AntdInput(id='modal-demo1-input', defaultValue='demo1'),\n            id='modal-demo1',\n        ),\n        fac.AntdModal(\n            fac.AntdInput(id='modal-demo2-input', defaultValue='demo2'),\n            id='modal-demo2',\n            forceRender=True,\n        ),\n        fac.AntdSpace(\n            [\n                fac.AntdText(id='demo1-output'),\n                fac.AntdText(id='demo2-output'),\n            ],\n            direction='vertical',\n        ),\n    ],\n    style=style(padding=50),\n)\n\n\n@app.callback(\n    Output('demo1-output', 'children'),\n    Input('modal-demo1-input', 'value'),\n)\ndef demo1_output(value):\n    return value\n\n\n@app.callback(\n    Output('demo2-output', 'children'),\n    Input('modal-demo2-input', 'value'),\n)\ndef demo2_output(value):\n    return value\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/feedback/AntdModal/feat_loading_title.py",
    "content": "import sys\nimport time\n\nsys.path.append('../../../')\n\nimport dash\nfrom dash import Input, Output, callback, html, no_update\nfrom feffery_dash_utils.style_utils import style\n\nimport feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdSpace(\n            [\n                fac.AntdButton(\n                    'Fetch latest report',\n                    id='btn-open',\n                    type='primary',\n                ),\n            ]\n        ),\n        fac.AntdDivider(),\n        fac.AntdParagraph(\n            [\n                'Click the button above to open the modal. While fresh data is ',\n                'loading you should see the temporary ',\n                fac.AntdText('loadingTitle', strong=True),\n                ' being displayed.',\n            ]\n        ),\n        fac.AntdModal(\n            id='modal',\n            visible=False,\n            title='Report ready',\n            loadingTitle='Preparing report...',\n            loading=False,\n            destroyOnClose=True,\n        ),\n    ],\n    style=style(padding=50),\n)\n\n\n@callback(\n    Output('modal', 'visible'),\n    Output('modal', 'loading', allow_duplicate=True),\n    Output('modal', 'children', allow_duplicate=True),\n    Input('btn-open', 'nClicks'),\n    prevent_initial_call=True,\n)\ndef open_modal(n_clicks):\n    # show the modal immediately; mark it as loading and clear old body content\n    return True, True, []\n\n\n@callback(\n    Output('modal', 'children'),\n    Output('modal', 'loading'),\n    Input('modal', 'visible'),\n    prevent_initial_call=True,\n)\ndef populate_modal(visible):\n    if not visible:\n        return no_update, no_update\n\n    time.sleep(2)  # simulate an expensive calculation or network request\n    return (\n        fac.AntdSpace(\n            [\n                fac.AntdResult(\n                    status='success',\n                    title='Daily report assembled',\n                    subTitle='This content replaces the loading skeleton once ready.',\n                ),\n                fac.AntdParagraph('Close the modal and click the button again to repeat the demo.'),\n            ],\n            direction='vertical',\n        ),\n        False,\n    )\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/feedback/AntdModal/feat_prevent_close.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from dash.dependencies import Input, Output\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.Fragment(\n            [\n                fac.AntdModal(\n                    id='modal',\n                    title='示例模态框',\n                    preventClose=True,\n                    visible=True,\n                ),\n                fac.AntdModal(\n                    id='modal-close-confirm',\n                    title='关闭二次确认模态框',\n                    renderFooter=True,\n                ),\n            ]\n        ),\n    ],\n    style=style(padding=50),\n)\n\n\n@app.callback(\n    Output('modal-close-confirm', 'visible'),\n    Input('modal', 'cancelCounts'),\n    prevent_initial_call=True,\n)\ndef show_modal_close_confirm(cancelCounts):\n    return True\n\n\n@app.callback(\n    Output('modal', 'visible'),\n    Input('modal-close-confirm', 'okCounts'),\n    prevent_initial_call=True,\n)\ndef confirm_close_modal(okCounts):\n    return False\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/feedback/AntdModal/feat_responsive_width.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdModal(\n            title='test modal',\n            visible=True,\n            width={\n                'xs': '100vw',\n                'sm': '100vw',\n                'md': '100vw',\n                'lg': 500,\n                'xl': 500,\n                'xxl': 500,\n            },\n        )\n    ],\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/feedback/AntdNotification/feat_component_content.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from dash.dependencies import Input, Output\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdButton(\n            'Open notification with custom nodes',\n            id='open-rich-notification',\n            type='primary',\n        ),\n        fac.Fragment(id='rich-notification-holder'),\n    ],\n    style=style(padding=50, display='flex', gap=16),\n)\n\n\n@app.callback(\n    Output('rich-notification-holder', 'children'),\n    Input('open-rich-notification', 'nClicks'),\n    prevent_initial_call=True,\n)\ndef display_rich_notification(n_clicks):\n    return fac.AntdNotification(\n        message=fac.AntdSpace(\n            [\n                fac.AntdIcon(icon='antd-smile'),\n                fac.AntdText('Dash components as notification message'),\n            ],\n            size='small',\n        ),\n        description=html.Div(\n            [\n                fac.AntdText(\n                    'Description can now be composed using standard Dash nodes.',\n                    strong=True,\n                ),\n                fac.AntdParagraph(\n                    [\n                        'This includes mixing ',\n                        fac.AntdText('fac', code=True),\n                        ' and ',\n                        fac.AntdText('html', code=True),\n                        ' components.',\n                    ],\n                    style={'marginBottom': 0},\n                ),\n            ],\n            style={'display': 'grid', 'gap': 6},\n        ),\n        stack=True,\n    )\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/feedback/AntdNotification/feat_number_of_stack.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from dash.dependencies import Input, Output\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdButton(\n            'Show New Notification',\n            id='new-notification',\n            type='primary',\n        ),\n        fac.Fragment(id='notification-target'),\n    ],\n    style=style(padding=50),\n)\n\n\n@app.callback(\n    Output('notification-target', 'children'),\n    Input('new-notification', 'nClicks'),\n    prevent_initial_call=True,\n)\ndef new_notification(nClicks):\n    return fac.AntdNotification(\n        message='Stack 2',\n        description='This is a stacked notification example. it stacks when more than 2 notifications are present.',\n        stack={'threshold': 2},\n    )\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/feedback/AntdNotification/feat_show_progress.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from dash.dependencies import Input, Output\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdButton(\n            '新的通知',\n            id='new-notification',\n            type='primary',\n        ),\n        fac.Fragment(id='notification-target'),\n    ],\n    style=style(padding=50),\n)\n\n\n@app.callback(\n    Output('notification-target', 'children'),\n    Input('new-notification', 'nClicks'),\n    prevent_initial_call=True,\n)\ndef new_notification(nClicks):\n    return fac.AntdNotification(\n        message='通知标题',\n        description='通知描述',\n        stack=True,\n    )\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/feedback/AntdNotification/fix_follow_config_provider.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from dash.dependencies import Input, Output\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    fac.AntdConfigProvider(\n        [\n            fac.AntdButton(\n                'new notification',\n                id='new-notification',\n                type='primary',\n            ),\n            fac.Fragment(id='notification-target'),\n        ],\n        algorithm='dark',\n    ),\n    style=style(padding=50),\n)\n\n\n@app.callback(\n    Output('notification-target', 'children'),\n    Input('new-notification', 'nClicks'),\n    prevent_initial_call=True,\n)\ndef new_notification(nClicks):\n    return fac.AntdNotification(\n        message='通知标题',\n        description='通知描述',\n        type='info',\n        stack=True,\n        showProgress=True,\n        pauseOnHover=True,\n    )\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/feedback/AntdPopupCard/feat_force_render.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from dash.dependencies import Input, Output\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdPopupCard(\n            fac.AntdInput(\n                id='popup-card-demo1-input',\n                defaultValue='demo1',\n            ),\n            id='popup-card-demo1',\n            visible=False,\n        ),\n        fac.AntdPopupCard(\n            fac.AntdInput(\n                id='popup-card-demo2-input',\n                defaultValue='demo2',\n            ),\n            id='popup-card-demo2',\n            visible=False,\n            forceRender=True,\n        ),\n        fac.AntdSpace(\n            [\n                fac.AntdText(id='demo1-output'),\n                fac.AntdText(id='demo2-output'),\n            ],\n            direction='vertical',\n        ),\n    ],\n    style=style(padding=50),\n)\n\n\n@app.callback(\n    Output('demo1-output', 'children'),\n    Input('popup-card-demo1-input', 'value'),\n)\ndef demo1_output(value):\n    return value\n\n\n@app.callback(\n    Output('demo2-output', 'children'),\n    Input('popup-card-demo2-input', 'value'),\n)\ndef demo2_output(value):\n    return value\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/feedback/AntdProgress/feat_percent_position.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    fac.AntdSpace(\n        [\n            fac.AntdSpace(\n                [\n                    f'percent={percent} {align} {type}',\n                    fac.AntdProgress(\n                        percent=percent,\n                        percentPosition={\n                            'align': align,\n                            'type': type,\n                        },\n                        size=[500, 20],\n                    ),\n                ]\n            )\n            for percent in [0, 33, 100]\n            for align in ['start', 'center', 'end']\n            for type in ['inner', 'outer']\n        ],\n        direction='vertical',\n        style=style(width='100%'),\n    ),\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/feedback/AntdProgress/perf_size.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    fac.AntdSpace(\n        [\n            fac.AntdProgress(percent=66, size=['100%', 18]),\n            fac.AntdProgress(percent=66, size=['50%', 18]),\n            fac.AntdProgress(percent=66, size=['33%', 18]),\n        ],\n        direction='vertical',\n        style=style(width='100%'),\n    ),\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/feedback/AntdProgress/perf_steps.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    fac.AntdSpace(\n        [\n            fac.AntdProgress(\n                percent=66,\n                type='circle',\n                steps={'count': 31, 'gap': 4},\n                trailColor='rgba(0, 0, 0, 0.06)',\n                strokeWidth=20,\n            ),\n            fac.AntdProgress(\n                percent=66,\n                type='dashboard',\n                steps={'count': 31, 'gap': 4},\n                trailColor='rgba(0, 0, 0, 0.06)',\n                strokeWidth=20,\n            ),\n        ],\n        direction='vertical',\n        style=style(width='100%'),\n    ),\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/feedback/AntdProgress/perf_stroke_color.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    fac.AntdSpace(\n        [\n            fac.AntdProgress(\n                percent=60,\n                steps=5,\n                strokeColor=[\n                    '#389e0d',\n                    '#389e0d',\n                    '#f5222d',\n                ],\n            ),\n            fac.AntdProgress(\n                percent=95,\n                strokeColor={\n                    '0%': '#87d068',\n                    '50%': '#ffe58f',\n                    '100%': '#ffccc7',\n                },\n            ),\n            fac.AntdProgress(\n                percent=95,\n                type='circle',\n                strokeColor={\n                    '0%': '#87d068',\n                    '50%': '#ffe58f',\n                    '100%': '#ffccc7',\n                },\n            ),\n            fac.AntdProgress(\n                percent=95,\n                type='dashboard',\n                strokeColor={\n                    '0%': '#87d068',\n                    '50%': '#ffe58f',\n                    '100%': '#ffccc7',\n                },\n            ),\n        ],\n        direction='vertical',\n        style=style(width='100%'),\n    ),\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/feedback/AntdResult/feat_extra.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdResult(\n            title='404',\n            subTitle='Sorry, the page you visited does not exist.',\n            extra=fac.AntdButton('Back Home', type='primary'),\n        )\n    ],\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/feedback/AntdSkeleton/fix_dash3.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import time\n\n    import dash\n    from dash import html\n    from dash.dependencies import Input, Output\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdButton(\n            '触发示例',\n            id='skeleton-basic-demo-trigger',\n            style={'marginBottom': 10},\n        ),\n        fac.AntdSkeleton(fac.AntdParagraph(id='skeleton-basic-demo-output')),\n    ],\n    style=style(padding=50),\n)\n\n\n@app.callback(\n    Output('skeleton-basic-demo-output', 'children'),\n    Input('skeleton-basic-demo-trigger', 'nClicks'),\n    prevent_initial_call=True,\n)\ndef skeleton_basic_demo(nClicks):\n    time.sleep(2)\n\n    return f'nClicks: {nClicks}'\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/general/AntdButton/feat_color_and_variant.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = fac.AntdCenter(\n    fac.AntdSpace(\n        [\n            fac.AntdSpace(\n                [\n                    fac.AntdButton(\n                        variant,\n                        color=color,\n                        variant=variant,\n                        size='small',\n                    )\n                    for variant in [\n                        'outlined',\n                        'dashed',\n                        'solid',\n                        'filled',\n                        'text',\n                        'link',\n                    ]\n                ]\n            )\n            for color in ['default', 'primary', 'danger']\n        ],\n        direction='vertical',\n    ),\n    style=style(height='100vh'),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/general/AntdButton/feat_preset_color.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    fac.AntdSpace(\n        [\n            fac.AntdButton(\n                color,\n                color=color,\n                size='small',\n                variant='solid',\n            )\n            for color in [\n                'default',\n                'primary',\n                'danger',\n                'blue',\n                'purple',\n                'cyan',\n                'green',\n                'magenta',\n                'pink',\n                'red',\n                'orange',\n                'yellow',\n                'volcano',\n                'geekblue',\n                'lime',\n                'gold',\n            ]\n        ],\n        direction='vertical',\n    ),\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/general/AntdFloatButtonGroup/feat_placement.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdFloatButtonGroup(\n            [\n                fac.AntdFloatButton(icon=fac.AntdIcon(icon='antd-question')),\n                fac.AntdFloatButton(icon=fac.AntdIcon(icon='antd-setting')),\n            ],\n            icon=fac.AntdIcon(icon='antd-up'),\n            trigger='click',\n            placement='top',\n            style=style(bottom='calc(50% + 50px)', right='50%'),\n        ),\n        fac.AntdFloatButtonGroup(\n            [\n                fac.AntdFloatButton(icon=fac.AntdIcon(icon='antd-question')),\n                fac.AntdFloatButton(icon=fac.AntdIcon(icon='antd-setting')),\n            ],\n            icon=fac.AntdIcon(icon='antd-right'),\n            trigger='click',\n            placement='right',\n            style=style(bottom='50%', right='calc(50% - 50px)'),\n        ),\n        fac.AntdFloatButtonGroup(\n            [\n                fac.AntdFloatButton(icon=fac.AntdIcon(icon='antd-question')),\n                fac.AntdFloatButton(icon=fac.AntdIcon(icon='antd-setting')),\n            ],\n            icon=fac.AntdIcon(icon='antd-down'),\n            trigger='click',\n            placement='bottom',\n            style=style(bottom='calc(50% - 50px)', right='50%'),\n        ),\n        fac.AntdFloatButtonGroup(\n            [\n                fac.AntdFloatButton(icon=fac.AntdIcon(icon='antd-question')),\n                fac.AntdFloatButton(icon=fac.AntdIcon(icon='antd-setting')),\n            ],\n            icon=fac.AntdIcon(icon='antd-left'),\n            trigger='click',\n            placement='left',\n            style=style(bottom='50%', right='calc(50% + 50px)'),\n        ),\n    ],\n    style=style(position='relative', height='100vh'),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/general/AntdFloatButtonGroup/feat_tooltip.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdFloatButtonGroup(\n            [\n                fac.AntdFloatButton(tooltip='气泡卡片信息示例'),\n                fac.AntdFloatButton(\n                    tooltip={\n                        'title': '气泡卡片信息示例',\n                        'color': 'blue',\n                        'placement': 'left',\n                    }\n                ),\n            ],\n            style=style(right=100),\n        )\n    ],\n    style=style(position='relative', height='100vh'),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/general/AntdIcon/feat_iconfont.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = fac.AntdSpace(\n    [\n        fac.AntdIcon(icon='antd-bug'),\n        fac.AntdIcon(\n            mode='iconfont',\n            scriptUrl='//at.alicdn.com/t/font_8d5l8fzk5b87iudi.js',\n            icon='icon-facebook',\n            style=style(color='#1877F2'),\n        ),\n        *[\n            fac.AntdIcon(\n                mode='iconfont',\n                scriptUrl=[\n                    '//at.alicdn.com/t/font_1788044_0dwu4guekcwr.js',\n                    '//at.alicdn.com/t/font_1788592_a5xf2bdic3u.js',\n                ],\n                icon=icon,\n            )\n            for icon in [\n                'icon-javascript',\n                'icon-java',\n                'icon-shoppingcart',\n                'icon-python',\n            ]\n        ],\n    ],\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/layout/AntdCenter/feat_use_token.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash.dependencies import Input, Output\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = fac.AntdConfigProvider(\n    fac.AntdCenter(\n        fac.AntdSpace(\n            [\n                fac.AntdSwitch(\n                    id='switch-theme',\n                    checked=True,\n                    checkedChildren='dark',\n                    unCheckedChildren='default',\n                ),\n                '测试',\n            ],\n            direction='vertical',\n            align='center',\n        ),\n        style=style(height='100vh'),\n    ),\n    id='config-provider',\n    algorithm='dark',\n    token={'fontSize': 18},\n)\n\napp.clientside_callback(\n    '(checked) => checked ? \"dark\" : \"default\"',\n    Output('config-provider', 'algorithm'),\n    Input('switch-theme', 'checked'),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/layout/AntdDivider/feat_plain.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdDivider('plain=True'),\n        fac.AntdDivider('plain=False', plain=False),\n    ],\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/layout/AntdDivider/feat_size.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdTabs(\n            items=[\n                {\n                    'label': size,\n                    'key': size,\n                    'children': [\n                        'test content',\n                        fac.AntdDivider(size=size),\n                        'test content',\n                        fac.AntdDivider(size=size),\n                        'test content',\n                    ],\n                }\n                for size in ['small', 'middle', 'large']\n            ],\n            centered=True,\n        )\n    ],\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/layout/AntdSplitter/feat_AntdSplitter.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import json\n\n    from dash import Dash, html\n    from dash.dependencies import Input, Output\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = Dash(__name__)\n\n\ndef desc(text):\n    return fac.AntdFlex(\n        fac.AntdTitle(\n            text,\n            type='secondary',\n            level=5,\n            style=style(whiteSpace='nowrap'),\n        ),\n        justify='center',\n        align='center',\n        style=style(height='100%'),\n    )\n\n\napp.layout = html.Div(\n    [\n        fac.AntdDivider('基本用法'),\n        fac.AntdSpace(\n            [\n                fac.AntdSplitter(\n                    id='splitter-1',\n                    items=[\n                        {\n                            'children': desc('First'),\n                            'defaultSize': '40%',\n                            'min': '20%',\n                            'max': '70%',\n                        },\n                        {'children': desc('Second')},\n                    ],\n                    style=style(\n                        height=200,\n                        boxShadow='0 0 10px rgba(0, 0, 0, 0.1)',\n                    ),\n                ),\n                fac.AntdSplitter(\n                    id='splitter-2',\n                    items=[\n                        {\n                            'key': 'splitter1',\n                            'children': desc('First'),\n                            'size': '50%',\n                        },\n                        {\n                            'key': 'splitter2',\n                            'children': desc('Second'),\n                            'size': '50%',\n                        },\n                    ],\n                    style=style(\n                        height=200,\n                        boxShadow='0 0 10px rgba(0, 0, 0, 0.1)',\n                    ),\n                ),\n            ],\n            direction='vertical',\n            style=style(width='100%'),\n        ),\n        fac.AntdDivider('垂直方向'),\n        fac.AntdSplitter(\n            id='splitter-3',\n            layout='vertical',\n            items=[\n                {\n                    'key': 'splitter1',\n                    'children': desc('First'),\n                },\n                {\n                    'key': 'splitter2',\n                    'children': desc('Second'),\n                },\n            ],\n            style=style(\n                height=300,\n                boxShadow='0 0 10px rgba(0, 0, 0, 0.1)',\n            ),\n        ),\n        fac.AntdDivider('可折叠'),\n        fac.AntdSpace(\n            [\n                fac.AntdSplitter(\n                    id='splitter-4',\n                    items=[\n                        {\n                            'key': 'splitter1',\n                            'children': desc('First'),\n                            'collapsible': True,\n                            'min': '20%',\n                        },\n                        {\n                            'key': 'splitter2',\n                            'children': desc('Second'),\n                            'collapsible': True,\n                        },\n                    ],\n                    style=style(\n                        height=200,\n                        boxShadow='0 0 10px rgba(0, 0, 0, 0.1)',\n                    ),\n                ),\n                fac.AntdSplitter(\n                    id='splitter-5',\n                    layout='vertical',\n                    items=[\n                        {\n                            'key': 'splitter1',\n                            'children': desc('First'),\n                            'collapsible': True,\n                            'min': '20%',\n                        },\n                        {\n                            'key': 'splitter2',\n                            'children': desc('Second'),\n                            'collapsible': True,\n                        },\n                    ],\n                    style=style(\n                        height=300,\n                        boxShadow='0 0 10px rgba(0, 0, 0, 0.1)',\n                    ),\n                ),\n            ],\n            direction='vertical',\n            style=style(width='100%'),\n        ),\n        fac.AntdDivider('多面板'),\n        fac.AntdSplitter(\n            id='splitter-6',\n            items=[\n                {\n                    'key': 'splitter1',\n                    'children': desc('Panel 1'),\n                    'collapsible': True,\n                },\n                {\n                    'key': 'splitter2',\n                    'children': desc('Panel 2'),\n                    'collapsible': {'start': True},\n                },\n                {\n                    'key': 'splitter3',\n                    'children': desc('Panel 3'),\n                },\n            ],\n            style=style(\n                height=200,\n                boxShadow='0 0 10px rgba(0, 0, 0, 0.1)',\n            ),\n        ),\n        fac.AntdDivider('复杂组合'),\n        fac.AntdSplitter(\n            id='splitter-7',\n            items=[\n                {\n                    'key': 'splitter1',\n                    'children': desc('Left'),\n                    'collapsible': True,\n                },\n                {\n                    'key': 'splitter2',\n                    'children': fac.AntdSplitter(\n                        layout='vertical',\n                        items=[\n                            {\n                                'key': 'splitter3',\n                                'children': desc('Top'),\n                            },\n                            {\n                                'key': 'splitter4',\n                                'children': desc('Bottom'),\n                            },\n                        ],\n                    ),\n                },\n            ],\n            style=style(\n                height=200,\n                boxShadow='0 0 10px rgba(0, 0, 0, 0.1)',\n            ),\n        ),\n        html.Pre(id='splitter-2-output'),\n    ]\n)\n\n\n@app.callback(\n    Output('splitter-2-output', 'children'),\n    Input('splitter-2', 'currentSizes'),\n)\ndef update_output(currentSizes):\n    return json.dumps(currentSizes, indent=4, ensure_ascii=False)\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/layout/AntdSplitter/feat_lazy.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    from dash import Dash, html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdSpace(\n            [\n                fac.AntdSplitter(\n                    items=[\n                        {\n                            'children': fac.AntdCenter(\n                                f'item{i}',\n                                style={'height': '100%'},\n                            )\n                        }\n                        for i in range(1, 3)\n                    ],\n                    lazy=True,\n                    style={\n                        'height': 200,\n                        'boxShadow': '0 0 10px rgba(0, 0, 0, 0.1)',\n                    },\n                ),\n                fac.AntdSplitter(\n                    items=[\n                        {\n                            'children': fac.AntdCenter(\n                                f'item{i}',\n                                style={'height': '100%'},\n                            )\n                        }\n                        for i in range(1, 4)\n                    ],\n                    lazy=True,\n                    style={\n                        'height': 200,\n                        'boxShadow': '0 0 10px rgba(0, 0, 0, 0.1)',\n                    },\n                ),\n            ],\n            direction='vertical',\n            style={'width': '100%'},\n        )\n    ],\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/layout/AntdSplitter/refactor.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    from dash import Dash, html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdSpace(\n            [\n                '基础使用：',\n                fac.AntdSpace(\n                    [\n                        fac.AntdSplitter(\n                            items=[\n                                {\n                                    'children': fac.AntdCenter(\n                                        f'item{i}',\n                                        style={'height': '100%'},\n                                    )\n                                }\n                                for i in range(1, 3)\n                            ],\n                            style={\n                                'height': 200,\n                                'boxShadow': '0 0 10px rgba(0, 0, 0, 0.1)',\n                            },\n                        ),\n                        fac.AntdSplitter(\n                            items=[\n                                {\n                                    'children': fac.AntdCenter(\n                                        f'item{i}',\n                                        style={'height': '100%'},\n                                    )\n                                }\n                                for i in range(1, 4)\n                            ],\n                            style={\n                                'height': 200,\n                                'boxShadow': '0 0 10px rgba(0, 0, 0, 0.1)',\n                            },\n                        ),\n                    ],\n                    direction='vertical',\n                    style={'width': '100%'},\n                ),\n                '垂直布局：',\n                fac.AntdSplitter(\n                    items=[\n                        {\n                            'children': fac.AntdCenter(\n                                f'item{i}',\n                                style={'height': '100%'},\n                            )\n                        }\n                        for i in range(1, 3)\n                    ],\n                    layout='vertical',\n                    style={\n                        'height': 300,\n                        'boxShadow': '0 0 10px rgba(0, 0, 0, 0.1)',\n                    },\n                ),\n                '默认尺寸：',\n                fac.AntdSpace(\n                    [\n                        fac.AntdSplitter(\n                            items=[\n                                {\n                                    'children': fac.AntdCenter(\n                                        '30%',\n                                        style={'height': '100%'},\n                                    ),\n                                    'defaultSize': '30%',\n                                },\n                                {\n                                    'children': fac.AntdCenter(\n                                        '70%',\n                                        style={'height': '100%'},\n                                    ),\n                                    'defaultSize': '70%',\n                                },\n                            ],\n                            style={\n                                'height': 200,\n                                'boxShadow': '0 0 10px rgba(0, 0, 0, 0.1)',\n                            },\n                        ),\n                        fac.AntdSplitter(\n                            items=[\n                                {\n                                    'children': fac.AntdCenter(\n                                        '30%',\n                                        style={'height': '100%'},\n                                    ),\n                                    'defaultSize': '30%',\n                                },\n                                {\n                                    'children': fac.AntdCenter(\n                                        '70%',\n                                        style={'height': '100%'},\n                                    ),\n                                    'defaultSize': '70%',\n                                },\n                            ],\n                            layout='vertical',\n                            style={\n                                'height': 300,\n                                'boxShadow': '0 0 10px rgba(0, 0, 0, 0.1)',\n                            },\n                        ),\n                    ],\n                    direction='vertical',\n                    style={'width': '100%'},\n                ),\n                '限制尺寸调整范围：',\n                fac.AntdSpace(\n                    [\n                        fac.AntdSplitter(\n                            items=[\n                                {\n                                    'children': fac.AntdCenter(\n                                        'min: 50 max: 90%',\n                                        style={'height': '100%'},\n                                    ),\n                                    'defaultSize': '30%',\n                                    'min': 50,\n                                    'max': '90%',\n                                },\n                                {\n                                    'children': fac.AntdCenter(\n                                        '70%',\n                                        style={'height': '100%'},\n                                    ),\n                                    'defaultSize': '70%',\n                                },\n                            ],\n                            style={\n                                'height': 200,\n                                'boxShadow': '0 0 10px rgba(0, 0, 0, 0.1)',\n                            },\n                        ),\n                        fac.AntdSplitter(\n                            items=[\n                                {\n                                    'children': fac.AntdCenter(\n                                        'min: 50 max: 90%',\n                                        style={'height': '100%'},\n                                    ),\n                                    'defaultSize': '30%',\n                                    'min': 50,\n                                    'max': '90%',\n                                },\n                                {\n                                    'children': fac.AntdCenter(\n                                        '70%',\n                                        style={'height': '100%'},\n                                    ),\n                                    'defaultSize': '70%',\n                                },\n                            ],\n                            layout='vertical',\n                            style={\n                                'height': 300,\n                                'boxShadow': '0 0 10px rgba(0, 0, 0, 0.1)',\n                            },\n                        ),\n                    ],\n                    direction='vertical',\n                    style={'width': '100%'},\n                ),\n                '可折叠：',\n                fac.AntdSpace(\n                    [\n                        fac.AntdSplitter(\n                            items=[\n                                {\n                                    'children': fac.AntdCenter(\n                                        f'item{i}',\n                                        style={'height': '100%'},\n                                    ),\n                                    'collapsible': True,\n                                }\n                                for i in range(1, 3)\n                            ],\n                            style={\n                                'height': 200,\n                                'boxShadow': '0 0 10px rgba(0, 0, 0, 0.1)',\n                            },\n                        ),\n                        fac.AntdSplitter(\n                            items=[\n                                {\n                                    'children': fac.AntdCenter(\n                                        f'item{i}',\n                                        style={'height': '100%'},\n                                    ),\n                                    'collapsible': True,\n                                }\n                                for i in range(1, 3)\n                            ],\n                            layout='vertical',\n                            style={\n                                'height': 300,\n                                'boxShadow': '0 0 10px rgba(0, 0, 0, 0.1)',\n                            },\n                        ),\n                    ],\n                    direction='vertical',\n                    style={'width': '100%'},\n                ),\n                '嵌套组合：',\n                fac.AntdSpace(\n                    [\n                        fac.AntdSplitter(\n                            items=[\n                                {\n                                    'children': fac.AntdCenter(\n                                        'item1',\n                                        style={'height': '100%'},\n                                    ),\n                                    'defaultSize': '30%',\n                                },\n                                {\n                                    'children': fac.AntdSplitter(\n                                        items=[\n                                            {\n                                                'children': fac.AntdCenter(\n                                                    'item2',\n                                                    style={'height': '100%'},\n                                                ),\n                                                'defaultSize': '30%',\n                                            },\n                                            {\n                                                'children': fac.AntdCenter(\n                                                    'item3',\n                                                    style={'height': '100%'},\n                                                ),\n                                                'defaultSize': '70%',\n                                            },\n                                        ],\n                                        layout='vertical',\n                                        style={'height': '100%'},\n                                    ),\n                                    'defaultSize': '70%',\n                                },\n                            ],\n                            style={\n                                'height': 200,\n                                'boxShadow': '0 0 10px rgba(0, 0, 0, 0.1)',\n                            },\n                        )\n                    ],\n                    direction='vertical',\n                    style={'width': '100%'},\n                ),\n            ],\n            direction='vertical',\n            style=style(width='100%'),\n        )\n    ],\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/navigation/AntdAnchor/feat_current_anchor.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    from dash import Dash, html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdAnchor(\n            currentAnchor='#章节3',\n            linkDict=[\n                {\n                    'key': f'章节{i}',\n                    'title': f'章节{i}',\n                    'href': f'#章节{i}',\n                }\n                for i in range(1, 6)\n            ],\n            align='left',\n        ),\n        *[\n            html.Div(\n                fac.AntdDivider(\n                    f'章节{i}',\n                    id=f'章节{i}',\n                    innerTextOrientation='right',\n                ),\n                style=style(paddingBottom=800),\n            )\n            for i in range(1, 6)\n        ],\n        html.Div(style={'height': 300}),\n    ],\n    style=style(padding=50),\n)\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/navigation/AntdAnchor/feat_direction.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    from dash import Dash, html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdAnchor(\n            direction='horizontal',\n            linkDict=[\n                {\n                    'key': f'章节{i}',\n                    'title': f'章节{i}',\n                    'href': f'#章节{i}',\n                }\n                for i in range(1, 6)\n            ],\n            align='left',\n        ),\n        *[\n            html.Div(\n                fac.AntdDivider(\n                    f'章节{i}',\n                    id=f'章节{i}',\n                    innerTextOrientation='right',\n                ),\n                style=style(paddingBottom=800),\n            )\n            for i in range(1, 6)\n        ],\n        html.Div(style={'height': 300}),\n    ],\n    style=style(padding=50),\n)\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/navigation/AntdAnchor/feat_replace.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    from dash import Dash, html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdAnchor(\n            replace=True,\n            linkDict=[\n                {\n                    'key': f'章节{i}',\n                    'title': f'章节{i}',\n                    'href': f'#章节{i}',\n                }\n                for i in range(1, 6)\n            ],\n            align='left',\n        ),\n        *[\n            html.Div(\n                fac.AntdDivider(\n                    f'章节{i}',\n                    id=f'章节{i}',\n                    innerTextOrientation='right',\n                ),\n                style=style(paddingBottom=800),\n            )\n            for i in range(1, 6)\n        ],\n        html.Div(style={'height': 300}),\n    ],\n    style=style(padding=50),\n)\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/navigation/AntdBreadcrumb/feat_menu_item_event.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import json\n\n    from dash import Dash, html\n    from dash.dependencies import Input, Output\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdSpace(\n            [\n                fac.AntdBreadcrumb(\n                    id='breadcrumnb-demo',\n                    items=[\n                        {'title': '首页', 'key': '首页'},\n                        {\n                            'title': '下属页面1',\n                            'key': '下属页面1',\n                            'menuItems': [\n                                {\n                                    'key': f'子节点{i}',\n                                    'title': f'子节点{i}',\n                                    'icon': 'antd-smile',\n                                }\n                                for i in range(1, 4)\n                            ],\n                        },\n                        {\n                            'title': '下属页面1-1',\n                            'key': '下属页面1-1',\n                        },\n                    ],\n                ),\n                html.Pre(id='breadcrumnb-demo-output'),\n            ],\n            size=50,\n            direction='vertical',\n            style=style(width='100%'),\n        )\n    ],\n    style=style(padding=50),\n)\n\n\n@app.callback(\n    Output('breadcrumnb-demo-output', 'children'),\n    Input('breadcrumnb-demo', 'clickedItem'),\n    prevent_initial_call=True,\n)\ndef breadcrumb_callback_demo(clickedItem):\n    return json.dumps(\n        dict(clickedItem=clickedItem),\n        indent=4,\n        ensure_ascii=False,\n    )\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/navigation/AntdBreadcrumb/refactor_items.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import json\n\n    from dash import Dash, html\n    from dash.dependencies import Input, Output\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdSpace(\n            [\n                fac.AntdBreadcrumb(\n                    items=[\n                        {'title': '首页'},\n                        {'title': '下属页面1'},\n                        {'title': '下属页面1-1'},\n                    ]\n                ),\n                fac.AntdBreadcrumb(\n                    items=[\n                        {\n                            'title': 'awesome-feffery-dash仓库主页',\n                            'href': 'https://github.com/CNFeffery/awesome-feffery-dash',\n                            'target': '_blank',\n                        },\n                        {\n                            'title': 'feffery-antd-components文档首页',\n                            'href': '/',\n                            'target': '_blank',\n                        },\n                        {\n                            'title': 'AntdBreadcrumb文档页',\n                            'href': '/AntdBreadcrumb',\n                            'target': '_blank',\n                        },\n                    ]\n                ),\n                fac.AntdBreadcrumb(\n                    items=[\n                        {\n                            'title': 'awesome-feffery-dash仓库主页',\n                            'href': 'https://github.com/CNFeffery/awesome-feffery-dash',\n                            'target': '_blank',\n                            'icon': 'antd-github',\n                        },\n                        {\n                            'title': 'feffery-antd-components文档首页',\n                            'href': '/',\n                            'target': '_blank',\n                            'icon': 'antd-home',\n                        },\n                        {\n                            'title': 'AntdBreadcrumb文档页',\n                            'href': '/AntdBreadcrumb',\n                            'target': '_blank',\n                            'icon': 'fc-approval',\n                        },\n                    ]\n                ),\n                fac.AntdBreadcrumb(\n                    items=[\n                        {\n                            'title': 'awesome-feffery-dash仓库主页',\n                            'href': 'https://github.com/CNFeffery/awesome-feffery-dash',\n                            'target': '_blank',\n                            'menuItems': [\n                                {\n                                    'title': 'feffery-utils-components',\n                                    'href': 'https://github.com/CNFeffery/feffery-utils-components',\n                                    'target': '_blank',\n                                },\n                                {\n                                    'title': 'feffery-antd-charts',\n                                    'href': 'https://github.com/CNFeffery/feffery-antd-charts',\n                                    'target': '_blank',\n                                },\n                                {\n                                    'title': 'feffery-markdown-components',\n                                    'href': 'https://github.com/CNFeffery/feffery-markdown-components',\n                                    'target': '_blank',\n                                },\n                            ],\n                        },\n                        {\n                            'title': 'feffery-antd-components文档首页',\n                            'href': '/',\n                            'target': '_blank',\n                        },\n                        {\n                            'title': 'AntdBreadcrumb文档页',\n                            'href': '/AntdBreadcrumb',\n                            'target': '_blank',\n                        },\n                    ]\n                ),\n                fac.AntdBreadcrumb(\n                    id='breadcrumnb-demo',\n                    items=[\n                        {'title': '首页', 'key': '首页'},\n                        {\n                            'title': '下属页面1',\n                            'key': '下属页面1',\n                        },\n                        {\n                            'title': '下属页面1-1',\n                            'key': '下属页面1-1',\n                        },\n                    ],\n                ),\n                html.Pre(id='breadcrumnb-demo-output'),\n            ],\n            size=50,\n            direction='vertical',\n            style=style(width='100%'),\n        )\n    ],\n    style=style(padding=50),\n)\n\n\n@app.callback(\n    Output('breadcrumnb-demo-output', 'children'),\n    Input('breadcrumnb-demo', 'clickedItem'),\n    prevent_initial_call=True,\n)\ndef breadcrumb_callback_demo(clickedItem):\n    return json.dumps(\n        dict(clickedItem=clickedItem),\n        indent=4,\n        ensure_ascii=False,\n    )\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/navigation/AntdDropdown/feat_extra.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    from dash import Dash, html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdDropdown(\n            title='触发点',\n            menuItems=[\n                {'title': '选项1', 'extra': '测试'},\n                {'title': '选项2', 'extra': '测试'},\n                {'isDivider': True},\n                {'title': '选项3-1', 'extra': '测试'},\n                {'title': '选项3-2', 'extra': '测试'},\n            ],\n        )\n    ],\n    style=style(padding=50),\n)\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/navigation/AntdDropdown/test_cascading_dropdown.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('./')\n    import dash\n    from dash import html\n    from dash.dependencies import Input, Output\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        html.H2('Cascading Dropdown Menu Demo'),\n        html.Div(\n            [\n                fac.AntdDropdown(\n                    id='cascading-dropdown-demo',\n                    title='Click to see cascading menu',\n                    trigger='click',\n                    buttonMode=True,\n                    buttonProps={'type': 'primary'},\n                    menuItems=[\n                        {\n                            'title': 'Navigation',\n                            'key': 'nav',\n                            'icon': 'HomeOutlined',\n                            'children': [\n                                {\n                                    'title': 'Dashboard',\n                                    'key': 'nav-dashboard',\n                                },\n                                {\n                                    'title': 'Settings',\n                                    'key': 'nav-settings',\n                                    'children': [\n                                        {\n                                            'title': 'Profile',\n                                            'key': 'nav-settings-profile',\n                                        },\n                                        {\n                                            'title': 'Account',\n                                            'key': 'nav-settings-account',\n                                        },\n                                        {\n                                            'title': 'Privacy',\n                                            'key': 'nav-settings-privacy',\n                                        },\n                                    ],\n                                },\n                            ],\n                        },\n                        {\n                            'title': 'Actions',\n                            'key': 'actions',\n                            'icon': 'ThunderboltOutlined',\n                            'children': [\n                                {\n                                    'title': 'Create',\n                                    'key': 'actions-create',\n                                    'children': [\n                                        {\n                                            'title': 'New Project',\n                                            'key': 'actions-create-project',\n                                        },\n                                        {\n                                            'title': 'New File',\n                                            'key': 'actions-create-file',\n                                        },\n                                    ],\n                                },\n                                {\n                                    'title': 'Delete',\n                                    'key': 'actions-delete',\n                                },\n                            ],\n                        },\n                        {'isDivider': True},\n                        {\n                            'title': 'Help',\n                            'key': 'help',\n                            'icon': 'QuestionCircleOutlined',\n                        },\n                    ],\n                ),\n                html.Div(id='dropdown-output', style={'marginTop': '20px', 'fontSize': '16px'}),\n            ],\n            style={'padding': '20px'},\n        ),\n    ]\n)\n\n\n@app.callback(\n    Output('dropdown-output', 'children'),\n    Input('cascading-dropdown-demo', 'clickedKey'),\n    prevent_initial_call=True,\n)\ndef display_clicked_item(clickedKey):\n    if clickedKey:\n        return f'You clicked: {clickedKey}'\n    return ''\n\n\nif __name__ == '__main__':\n    app.run(debug=True, port=8050)\n"
  },
  {
    "path": "legacy_tests/navigation/AntdMenu/feat_currentItem.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import json\n\n    from dash import Dash, html\n    from dash.dependencies import Input, Output, State\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdMenu(\n            id='menu-demo',\n            currentKey='1-1-1',\n            menuItems=[\n                {\n                    'component': 'SubMenu',\n                    'props': {\n                        'key': f'{sub_menu}',\n                        'title': f'子菜单{sub_menu}',\n                    },\n                    'children': [\n                        {\n                            'component': 'ItemGroup',\n                            'props': {\n                                'key': f'{sub_menu}-{item_group}',\n                                'title': f'菜单项分组{sub_menu}-{item_group}',\n                            },\n                            'children': [\n                                {\n                                    'component': 'Item',\n                                    'props': {\n                                        'key': f'{sub_menu}-{item_group}-{item}',\n                                        'title': f'菜单项{sub_menu}-{item_group}-{item}',\n                                    },\n                                    'extra': f'extra-{sub_menu}-{item_group}-{item}',\n                                }\n                                for item in range(1, 3)\n                            ],\n                        }\n                        for item_group in range(1, 3)\n                    ],\n                }\n                for sub_menu in range(1, 5)\n            ],\n            mode='horizontal',\n        ),\n        html.Div(\n            id='menu-demo-output',\n            style={\n                'height': '200px',\n                'background': '#a5d8ff',\n                'color': 'white',\n                'fontSize': '24px',\n                'display': 'flex',\n                'justifyContent': 'center',\n                'alignItems': 'center',\n            },\n        ),\n    ],\n    style=style(padding=50),\n)\n\n\n@app.callback(\n    Output('menu-demo-output', 'children'),\n    Input('menu-demo', 'currentKey'),\n    State('menu-demo', 'currentItem'),\n)\ndef menu_callback_demo(currentKey, currentItem):\n    return json.dumps(\n        {\n            'currentKey': currentKey,\n            'currentItem': currentItem,\n        },\n        ensure_ascii=False,\n        indent=4,\n    )\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/navigation/AntdMenu/feat_currentItemPath.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import json\n\n    from dash import Dash, html\n    from dash.dependencies import Input, Output, State\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdMenu(\n            id='menu-demo',\n            currentKey='1-1-1',\n            menuItems=[\n                {\n                    'component': 'SubMenu',\n                    'props': {\n                        'key': f'{sub_menu}',\n                        'title': f'子菜单{sub_menu}',\n                    },\n                    'children': [\n                        {\n                            'component': 'ItemGroup',\n                            'props': {\n                                'key': f'{sub_menu}-{item_group}',\n                                'title': f'菜单项分组{sub_menu}-{item_group}',\n                            },\n                            'children': [\n                                {\n                                    'component': 'Item',\n                                    'props': {\n                                        'key': f'{sub_menu}-{item_group}-{item}',\n                                        'title': f'菜单项{sub_menu}-{item_group}-{item}',\n                                    },\n                                    'extra': f'extra-{sub_menu}-{item_group}-{item}',\n                                }\n                                for item in range(1, 3)\n                            ],\n                        }\n                        for item_group in range(1, 3)\n                    ],\n                }\n                for sub_menu in range(1, 5)\n            ],\n            mode='horizontal',\n        ),\n        html.Div(\n            id='menu-demo-output',\n            style={\n                'height': '800px',\n                'background': '#a5d8ff',\n                'color': 'white',\n                'fontSize': '24px',\n                'display': 'flex',\n                'justifyContent': 'center',\n                'alignItems': 'center',\n            },\n        ),\n    ],\n    style=style(padding=50),\n)\n\n\n@app.callback(\n    Output('menu-demo-output', 'children'),\n    Input('menu-demo', 'currentKey'),\n    State('menu-demo', 'currentItemPath'),\n)\ndef menu_callback_demo(currentKey, currentItemPath):\n    return json.dumps(\n        {\n            'currentKey': currentKey,\n            'currentItemPath': currentItemPath,\n        },\n        ensure_ascii=False,\n        indent=4,\n    )\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/navigation/AntdMenu/feat_currentKeyPath.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import json\n\n    from dash import Dash, html\n    from dash.dependencies import Input, Output, State\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdMenu(\n            id='menu-demo',\n            currentKey='1-1-1',\n            menuItems=[\n                {\n                    'component': 'SubMenu',\n                    'props': {\n                        'key': f'{sub_menu}',\n                        'title': f'子菜单{sub_menu}',\n                    },\n                    'children': [\n                        {\n                            'component': 'ItemGroup',\n                            'props': {\n                                'key': f'{sub_menu}-{item_group}',\n                                'title': f'菜单项分组{sub_menu}-{item_group}',\n                            },\n                            'children': [\n                                {\n                                    'component': 'Item',\n                                    'props': {\n                                        'key': f'{sub_menu}-{item_group}-{item}',\n                                        'title': f'菜单项{sub_menu}-{item_group}-{item}',\n                                    },\n                                    'extra': f'extra-{sub_menu}-{item_group}-{item}',\n                                }\n                                for item in range(1, 3)\n                            ],\n                        }\n                        for item_group in range(1, 3)\n                    ],\n                }\n                for sub_menu in range(1, 5)\n            ],\n            mode='horizontal',\n        ),\n        html.Div(\n            id='menu-demo-output',\n            style={\n                'height': '200px',\n                'background': '#a5d8ff',\n                'color': 'white',\n                'fontSize': '24px',\n                'display': 'flex',\n                'justifyContent': 'center',\n                'alignItems': 'center',\n            },\n        ),\n    ],\n    style=style(padding=50),\n)\n\n\n@app.callback(\n    Output('menu-demo-output', 'children'),\n    Input('menu-demo', 'currentKey'),\n    State('menu-demo', 'currentKeyPath'),\n)\ndef menu_callback_demo(currentKey, currentKeyPath):\n    return json.dumps(\n        {\n            'currentKey': currentKey,\n            'currentKeyPath': currentKeyPath,\n        },\n        ensure_ascii=False,\n        indent=4,\n    )\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/navigation/AntdMenu/feat_custom_icon.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    from dash import Dash\n\n    import feffery_antd_components as fac\n\napp = Dash(__name__)\n\napp.layout = fac.AntdLayout(\n    [\n        fac.AntdMenu(\n            menuItems=[\n                {\n                    'component': 'SubMenu',\n                    'props': {\n                        'key': f'{sub_menu}',\n                        'title': f'子菜单{sub_menu}',\n                    },\n                    'children': [\n                        {\n                            'component': 'ItemGroup',\n                            'props': {\n                                'key': f'{sub_menu}-{item_group}',\n                                'title': f'菜单项分组{sub_menu}-{item_group}',\n                            },\n                            'children': [\n                                {\n                                    'component': 'Item',\n                                    'props': {\n                                        'key': f'{sub_menu}-{item_group}-{item}',\n                                        'title': f'菜单项{sub_menu}-{item_group}-{item}',\n                                    },\n                                }\n                                for item in range(1, 3)\n                            ],\n                        }\n                        for item_group in range(1, 3)\n                    ],\n                }\n                for sub_menu in range(1, 5)\n            ],\n            mode='inline',\n            defaultOpenKeys=['1', '3'],\n            menuItemKeyToIcon={\n                '1-1-1': fac.AntdIcon(\n                    icon='antd-smile',\n                    style={'color': 'red'},\n                ),\n            },\n            style={'width': 256},\n        )\n    ],\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/navigation/AntdMenu/feat_expandIcon.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    from dash import Dash, html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = Dash(__name__)\n\napp.layout = html.Div(\n    [\n        html.Div(\n            [\n                fac.AntdDivider(\n                    f'mode=\"{mode}\"',\n                    innerTextOrientation='left',\n                ),\n                fac.AntdMenu(\n                    menuItems=[\n                        {\n                            'component': 'SubMenu',\n                            'props': {\n                                'key': f'{sub_menu}',\n                                'title': f'子菜单{sub_menu}',\n                            },\n                            'children': [\n                                {\n                                    'component': 'ItemGroup',\n                                    'props': {\n                                        'key': f'{sub_menu}-{item_group}',\n                                        'title': f'菜单项分组{sub_menu}-{item_group}',\n                                    },\n                                    'children': [\n                                        {\n                                            'component': 'Item',\n                                            'props': {\n                                                'key': f'{sub_menu}-{item_group}-{item}',\n                                                'title': f'菜单项{sub_menu}-{item_group}-{item}',\n                                            },\n                                        }\n                                        for item in range(1, 3)\n                                    ],\n                                }\n                                for item_group in range(1, 3)\n                            ],\n                        }\n                        for sub_menu in range(1, 5)\n                    ],\n                    mode=mode,\n                    expandIcon={\n                        'expand': fac.AntdIcon(icon='antd-down-circle'),\n                        'collapse': fac.AntdIcon(icon='antd-up-circle'),\n                    },\n                    style={'width': 256},\n                ),\n            ]\n        )\n        for mode in ['vertical', 'horizontal', 'inline']\n    ],\n    style=style(padding=50),\n)\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/navigation/AntdMenu/feat_triggerSubMenuAction.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    from dash import Dash, html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = Dash(__name__)\n\napp.layout = html.Div(\n    [\n        html.Div(\n            [\n                fac.AntdDivider(\n                    f'mode=\"{mode}\"',\n                    innerTextOrientation='left',\n                ),\n                fac.AntdMenu(\n                    menuItems=[\n                        {\n                            'component': 'SubMenu',\n                            'props': {\n                                'key': f'{sub_menu}',\n                                'title': f'子菜单{sub_menu}',\n                            },\n                            'children': [\n                                {\n                                    'component': 'ItemGroup',\n                                    'props': {\n                                        'key': f'{sub_menu}-{item_group}',\n                                        'title': f'菜单项分组{sub_menu}-{item_group}',\n                                    },\n                                    'children': [\n                                        {\n                                            'component': 'Item',\n                                            'props': {\n                                                'key': f'{sub_menu}-{item_group}-{item}',\n                                                'title': f'菜单项{sub_menu}-{item_group}-{item}',\n                                            },\n                                        }\n                                        for item in range(1, 3)\n                                    ],\n                                }\n                                for item_group in range(1, 3)\n                            ],\n                        }\n                        for sub_menu in range(1, 5)\n                    ],\n                    mode=mode,\n                    triggerSubMenuAction='click',\n                    style={'width': 256},\n                ),\n            ]\n        )\n        for mode in ['vertical', 'horizontal', 'inline']\n    ],\n    style=style(padding=50),\n)\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/navigation/AntdMenu/fix_onlyExpandCurrentSubMenu.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    from dash import Dash, html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdMenu(\n            id='menu-demo',\n            currentKey='1-1-1',\n            menuItems=[\n                {\n                    'component': 'SubMenu',\n                    'props': {\n                        'key': f'{sub_menu}',\n                        'title': f'子菜单{sub_menu}',\n                    },\n                    'children': [\n                        {\n                            'component': 'ItemGroup' if item_group == 1 else 'SubMenu',\n                            'props': {\n                                'key': f'{sub_menu}-{item_group}',\n                                'title': f'菜单项分组{sub_menu}-{item_group}',\n                            },\n                            'children': [\n                                {\n                                    'component': 'Item',\n                                    'props': {\n                                        'key': f'{sub_menu}-{item_group}-{item}',\n                                        'title': f'菜单项{sub_menu}-{item_group}-{item}',\n                                    },\n                                    'extra': f'extra-{sub_menu}-{item_group}-{item}',\n                                }\n                                for item in range(1, 4)\n                            ],\n                        }\n                        for item_group in range(1, 4)\n                    ],\n                }\n                for sub_menu in range(1, 5)\n            ],\n            mode='inline',\n            onlyExpandCurrentSubMenu=True,\n            style=style(width=256),\n        ),\n    ],\n    style=style(padding=50),\n)\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/navigation/AntdMenu/fix_with_sider.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    from dash import Dash\n\n    import feffery_antd_components as fac\n\napp = Dash(__name__)\n\napp.layout = fac.AntdLayout(\n    [\n        fac.AntdSider(\n            [\n                fac.AntdMenu(\n                    menuItems=[\n                        {\n                            'component': 'Item',\n                            'props': {\n                                'key': f'图标{icon}',\n                                'title': f'图标{icon}',\n                                'icon': icon,\n                            },\n                        }\n                        for icon in [\n                            'antd-home',\n                            'antd-cloud-upload',\n                            'antd-bar-chart',\n                            'antd-pie-chart',\n                            'antd-dot-chart',\n                            'antd-line-chart',\n                            'antd-apartment',\n                            'antd-app-store',\n                            'antd-app-store-add',\n                            'antd-bell',\n                            'antd-calculator',\n                            'antd-calendar',\n                            'antd-database',\n                            'antd-history',\n                        ]\n                    ],\n                    mode='inline',\n                    style={\n                        'height': '100%',\n                        'width': '100%',\n                        'overflow': 'hidden auto',\n                    },\n                )\n            ],\n            collapsible=True,\n            collapsedWidth=60,\n            style={'backgroundColor': 'rgb(240, 242, 245)'},\n        ),\n        fac.AntdContent(\n            fac.AntdCenter(\n                fac.AntdTitle(\n                    '内容区示例',\n                    level=2,\n                    style={'margin': '0'},\n                ),\n                style={\n                    'height': '100%',\n                },\n            ),\n            style={'backgroundColor': 'white'},\n        ),\n    ],\n    style={'height': '100vh'},\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/navigation/AntdPagination/feat_align.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    from dash import Dash, html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdDivider(\"align='start'\"),\n        fac.AntdPagination(defaultPageSize=10, total=100, align='start'),\n        fac.AntdDivider(\"align='center'\"),\n        fac.AntdPagination(defaultPageSize=10, total=100, align='center'),\n        fac.AntdDivider(\"align='end'\"),\n        fac.AntdPagination(defaultPageSize=10, total=100, align='end'),\n    ],\n    style=style(padding=50),\n)\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/other/AntdAffix/feat_listen_affixed.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from dash.dependencies import Input, Output\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        html.Div(\n            fac.AntdAffix(\n                fac.AntdButton(\n                    'affixed: False',\n                    id='output',\n                    type='primary',\n                ),\n                id='affix-demo',\n                offsetTop=24,\n            ),\n            style={'marginBottom': '1000px'},\n        )\n    ],\n    style=style(padding=100, height='1000vh'),\n)\n\n\n@app.callback(\n    Output('output', 'children'),\n    Input('affix-demo', 'affixed'),\n)\ndef listen_affixed(affixed):\n    return 'affixed: True' if affixed else 'affixed: False'\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/other/AntdBackTop/refactor.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [fac.AntdBackTop()],\n    style=style(height=9999),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/other/AntdConfigProvider/feat_use_css.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')  # adjust if needed\n\n    import dash\n    from dash import html\n    from dash.dependencies import Input, Output\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = fac.AntdConfigProvider(\n    fac.Fragment(\n        fac.AntdCenter(\n            fac.AntdSpace(\n                [\n                    fac.AntdSegmented(\n                        id='theme-mode',\n                        options=[\n                            {'label': 'Light', 'value': 'light'},\n                            {'label': 'Dark', 'value': 'dark'},\n                        ],\n                        value='dark',\n                    ),\n                    html.Div(\n                        'HTML styled via AntD CSS vars',\n                        style={\n                            'background': 'var(--ant-color-bg-container)',\n                            'color': 'var(--ant-color-text)',\n                            'border': '1px solid var(--ant-color-split)',\n                            'padding': 12,\n                            'borderRadius': 6,\n                        },\n                    ),\n                    fac.AntdDivider(),\n                    fac.AntdText(\n                        'Resolved design tokens:',\n                        strong=True,\n                    ),\n                    html.Pre(id='show-token', style={'whiteSpace': 'pre-wrap'}),\n                ],\n                direction='vertical',\n                size='large',\n                style={'width': '100%', 'maxWidth': 800},\n            ),\n            style=style(height='100vh', overflowY='auto'),\n        ),\n        id='listen-token',  # exposes `token` for the clientside callback\n    ),\n    id='cfg',\n    algorithm='dark',  # initial theme\n    token={'fontSize': 18},  # sample token override\n    cssVar=True,\n)\n\n\n# Toggle between algorithms\n@app.callback(Output('cfg', 'algorithm'), Input('theme-mode', 'value'))\ndef apply_theme(mode: str):\n    return 'dark' if mode == 'dark' else 'default'\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/other/AntdCopyText/feat_copy_table.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import io\n\n    import dash\n    import pandas as pd\n    from dash import html\n    from dash.dependencies import Input, Output\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdTable(\n            id='table',\n            columns=[\n                {\n                    'dataIndex': f'字段{i}',\n                    'title': f'字段{i}',\n                }\n                for i in range(1, 6)\n            ],\n            data=[{f'字段{i}': f'字段{i}第{row}行' for i in range(1, 6)} for row in range(10)],\n            pagination=False,\n            bordered=True,\n            title=fac.AntdCopyText(\n                id='copy-table',\n                beforeIcon=fac.AntdButton('复制表格', type='primary'),\n                afterIcon=fac.AntdButton('复制成功', type='primary'),\n            ),\n        )\n    ],\n    style=style(padding=50),\n)\n\n\n@app.callback(\n    Output('copy-table', 'text'),\n    Input('table', 'data'),\n)\ndef generate_copy_text(data):\n    # 将表格数据转换为可直接粘贴到excel中形成表格的字符串数据\n\n    temp_io = io.StringIO()\n\n    pd.DataFrame(data).to_csv(temp_io, sep='\\t', index=False)\n\n    return temp_io.getvalue()\n\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/other/AntdCopyText/feat_tooltips.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdSpace(\n            [\n                fac.AntdSpace(\n                    [\n                        'False',\n                        fac.AntdCopyText(text='测试', tooltips=False),\n                    ]\n                ),\n                fac.AntdSpace(\n                    [\n                        '文本',\n                        fac.AntdCopyText(\n                            text='测试',\n                            tooltips=[\n                                '点击复制~',\n                                '复制完成~',\n                            ],\n                        ),\n                    ]\n                ),\n                fac.AntdSpace(\n                    [\n                        '文本',\n                        fac.AntdCopyText(\n                            text='测试',\n                            tooltips=[\n                                fac.AntdText('点击复制~', strong=True),\n                                fac.AntdText('复制完成~', strong=True),\n                            ],\n                        ),\n                    ]\n                ),\n            ],\n            direction='vertical',\n            style=style(width='100%'),\n        )\n    ],\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/other/AntdHappyProvider/feat_component.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = html.Div(\n    [\n        fac.AntdTabs(\n            items=[\n                {\n                    'key': '开启',\n                    'label': '开启',\n                    'children': fac.AntdHappyProvider(\n                        fac.AntdSpace(\n                            [\n                                fac.AntdButton('测试', type='primary'),\n                                fac.AntdSwitch(),\n                                fac.AntdCheckbox(),\n                                fac.AntdRadioGroup(options=['a', 'b', 'c']),\n                            ]\n                        )\n                    ),\n                },\n                {\n                    'key': '关闭',\n                    'label': '关闭',\n                    'children': fac.AntdHappyProvider(\n                        fac.AntdSpace(\n                            [\n                                fac.AntdButton('测试', type='primary'),\n                                fac.AntdSwitch(),\n                                fac.AntdCheckbox(),\n                                fac.AntdRadioGroup(options=['a', 'b', 'c']),\n                            ]\n                        ),\n                        disabled=True,\n                    ),\n                },\n            ]\n        )\n    ],\n    style=style(padding=50),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "legacy_tests/other/Fragment/feat_use_token.py",
    "content": "if True:\n    import sys\n\n    sys.path.append('../../../')\n    import dash\n    from dash import html\n    from dash.dependencies import Input, Output\n    from feffery_dash_utils.style_utils import style\n\n    import feffery_antd_components as fac\n\napp = dash.Dash(__name__)\n\napp.layout = fac.AntdConfigProvider(\n    fac.Fragment(\n        fac.AntdCenter(\n            html.Pre(id='show-token'),\n            style=style(height='100vh', overflowY='auto'),\n        ),\n        id='listen-token',\n    ),\n    algorithm='dark',\n    token={'fontSize': 18},\n)\n\napp.clientside_callback(\n    '(token) => console.log(token)',\n    Output('show-token', 'children'),\n    Input('listen-token', 'token'),\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "package.json",
    "content": "{\n    \"name\": \"feffery_antd_components\",\n    \"version\": \"0.4.6-rc1\",\n    \"description\": \"Plotly Dash components based on Ant Design\",\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"https://github.com/CNFeffery/feffery-antd-components.git\"\n    },\n    \"bugs\": {\n        \"url\": \"https://github.com/CNFeffery/feffery-antd-components/issues\"\n    },\n    \"homepage\": \"http://fac.feffery.tech\",\n    \"main\": \"build/index.js\",\n    \"scripts\": {\n        \"start\": \"webpack serve --config ./webpack.serve.config.js --open\",\n        \"validate-init\": \"python _validate_init.py\",\n        \"prepublishOnly\": \"npm run validate-init\",\n        \"build:js\": \"webpack --mode production\",\n        \"build:backends\": \"dash-generate-components ./src/lib/components feffery_antd_components --keep-prop-order ALL -p package-info.json --r-prefix '' --jl-prefix '' --ignore \\\\.test\\\\.\",\n        \"build:backends-activated\": \"(. venv/bin/activate || venv\\\\scripts\\\\activate && npm run build:backends)\",\n        \"build\": \"npm run prettier && npm run build:js && npm run build:backends && npm run ruff:check && npm run ruff:format\",\n        \"build:activated\": \"npm run build:js && npm run build:backends-activated\",\n        \"prettier\": \"prettier --write src/**/*.js src/**/*.react.js\",\n        \"ruff:check\": \"python -m ruff check . --fix --exclude=node_modules,venv,build\",\n        \"ruff:format\": \"python -m ruff format . --exclude=node_modules,venv,build\",\n        \"format\": \"npm run prettier && npm run ruff:format\"\n    },\n    \"author\": \"CNFeffery <fefferypzy@gmail.com>\",\n    \"email\": \"fefferypzy@gmail.com\",\n    \"license\": \"MIT\",\n    \"dependencies\": {\n        \"@ant-design/charts\": \"^1.4.2\",\n        \"@ant-design/compatible\": \"^5.0.0\",\n        \"@ant-design/happy-work-theme\": \"^1.0.0\",\n        \"@ant-design/icons\": \"^5.0.0\",\n        \"@ant-design/pro-components\": \"^2.6.49\",\n        \"@plotly/webpack-dash-dynamic-import\": \"^1.3.0\",\n        \"ahooks\": \"^3.7.0\",\n        \"antd\": \"^5.28.0\",\n        \"antd-img-crop\": \"^4.2.3\",\n        \"color\": \"^4.2.3\",\n        \"dayjs\": \"^1.11.13\",\n        \"is-absolute-url\": \"4.0.1\",\n        \"md5\": \"2.3.0\",\n        \"nano-css\": \"^5.3.5\",\n        \"ramda\": \"0.26.1\",\n        \"react-draggable\": \"4.4.6\",\n        \"react-fast-marquee\": \"1.3.1\",\n        \"react-highlight-words\": \"0.17.0\",\n        \"react-icons\": \"^4.11.0\",\n        \"react-text-loop\": \"2.3.0\",\n        \"react-use\": \"^17.4.0\",\n        \"uuid\": \"8.3.2\",\n        \"zustand\": \"^4.5.2\"\n    },\n    \"devDependencies\": {\n        \"@babel/core\": \"^7.5.4\",\n        \"@babel/plugin-proposal-nullish-coalescing-operator\": \"^7.18.6\",\n        \"@babel/plugin-proposal-object-rest-spread\": \"^7.5.4\",\n        \"@babel/plugin-proposal-optional-chaining\": \"^7.21.0\",\n        \"@babel/preset-env\": \"^7.5.4\",\n        \"@babel/preset-react\": \"^7.0.0\",\n        \"babel-eslint\": \"^10.0.2\",\n        \"babel-loader\": \"^8.0.6\",\n        \"copyfiles\": \"^2.1.1\",\n        \"css-loader\": \"^3.0.0\",\n        \"eslint\": \"^6.0.1\",\n        \"eslint-config-prettier\": \"^6.0.0\",\n        \"eslint-plugin-import\": \"^2.18.0\",\n        \"eslint-plugin-react\": \"^7.14.2\",\n        \"less\": \"^3.13.1\",\n        \"less-loader\": \"^5.0.0\",\n        \"lodash\": \"^4.17.21\",\n        \"prettier\": \"^3.7.4\",\n        \"prop-types\": \"^15.7.2\",\n        \"react\": \"^18.3.1\",\n        \"react-docgen\": \"^5.4.3\",\n        \"react-dom\": \"^18.3.1\",\n        \"style-loader\": \"^0.23.1\",\n        \"styled-jsx\": \"^4.0.0\",\n        \"webpack\": \"4.36.1\",\n        \"webpack-bundle-analyzer\": \"^4.7.0\",\n        \"webpack-cli\": \"^3.3.6\",\n        \"webpack-serve\": \"3.1.0\"\n    },\n    \"overrides\": {\n        \"@ant-design/charts\": {\n            \"@ant-design/icons\": \"$@ant-design/icons\",\n            \"antd\": \"$antd\"\n        },\n        \"react-fast-marquee\": {\n            \"react\": \"$react\",\n            \"react-dom\": \"$react-dom\"\n        },\n        \"react-highlight-words\": {\n            \"react\": \"$react\",\n            \"react-dom\": \"$react-dom\"\n        },\n        \"react-text-loop\": {\n            \"react\": \"$react\",\n            \"react-dom\": \"$react-dom\"\n        }\n    },\n    \"babel\": {\n        \"presets\": [\n            \"@babel/preset-react\",\n            \"@babel/preset-env\"\n        ],\n        \"plugins\": [\n            \"@babel/plugin-proposal-optional-chaining\",\n            \"@babel/plugin-transform-react-jsx\"\n        ]\n    },\n    \"engines\": {\n        \"node\": \">=8.11.0\",\n        \"npm\": \">=6.1.0\"\n    }\n}"
  },
  {
    "path": "pytest.ini",
    "content": "[pytest]\ntestpaths = tests/\naddopts = -rsxX -vv\nlog_format = %(asctime)s | %(levelname)s | %(name)s:%(lineno)d | %(message)s\nlog_cli_level = ERROR\n"
  },
  {
    "path": "requirements.txt",
    "content": "# dash is required to call `build:py`\ndash[testing]>=3.3.0\nfeffery_dash_utils\nflask_compress\npyyaml\nruff\nbuild\npydantic\n"
  },
  {
    "path": "ruff.toml",
    "content": "line-length = 100\nshow-fixes = true\ntarget-version = \"py38\"\nindent-width = 4\n\n[lint]\nselect = [\n    \"I\",      # isort\n    \"E\",      # pycodestyle errors\n    \"W\",      # pycodestyle warnings\n    \"F\",      # pyflakes\n]\nignore = [\n    \"E501\",   # line too long\n    \"W191\",   # indentation contains tabs\n]\n\n[format]\ndocstring-code-format = true\nquote-style = \"single\"\n"
  },
  {
    "path": "setup.py",
    "content": "import json\nfrom pathlib import Path\n\nfrom setuptools import setup\n\nhere = Path(__file__).parent\nwith open('package.json') as f:\n    package = json.load(f)\nlong_description = (here / 'README.md').read_text(encoding='utf-8')\n\npackage_name = package['name'].replace(' ', '_').replace('-', '_')\n\nsetup(\n    name=package_name,\n    version=package['version'],\n    homepage=package['homepage'],\n    author=package['author'],\n    packages=[package_name],\n    include_package_data=True,\n    package_data={'feffery_antd_components': ['*']},\n    license=package['license'],\n    description=package.get('description', package_name),\n    long_description=long_description,\n    long_description_content_type='text/markdown',\n    install_requires=[\n        'dash>=3.3.0',\n    ],\n    classifiers=[\n        'Framework :: Dash',\n    ],\n    url='https://github.com/CNFeffery/feffery-antd-components',\n)\n"
  },
  {
    "path": "src/lib/components/dataDisplay/AntdAccordion.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdAccordion = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_display\" */ '../../fragments/dataDisplay/AntdAccordion.react'\n        )\n);\n\n/**\n * 手风琴组件AntdAccordion\n */\nconst AntdAccordion = ({\n    id,\n    className,\n    style,\n    key,\n    classNames,\n    styles,\n    items,\n    accordion = true,\n    activeKey,\n    defaultActiveKey,\n    bordered = true,\n    size = 'middle',\n    collapsible,\n    expandIconPosition = 'left',\n    ghost = false,\n    setProps,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdAccordion\n                {...{\n                    id,\n                    className,\n                    style,\n                    key,\n                    classNames,\n                    styles,\n                    items,\n                    accordion,\n                    activeKey,\n                    defaultActiveKey,\n                    bordered,\n                    size,\n                    collapsible,\n                    expandIconPosition,\n                    ghost,\n                    setProps,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdAccordion.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 细分控制子元素css样式\n     */\n    styles: PropTypes.shape({\n        /**\n         * 头部元素css样式\n         */\n        header: PropTypes.object,\n        /**\n         * 内容元素css样式\n         */\n        body: PropTypes.object,\n    }),\n\n    /**\n     * 细分控制子元素css类名\n     */\n    classNames: PropTypes.shape({\n        /**\n         * 头部元素css类名\n         */\n        header: PropTypes.string,\n        /**\n         * 内容元素css类名\n         */\n        body: PropTypes.string,\n    }),\n\n    /**\n     * 定义手风琴子项\n     */\n    items: PropTypes.arrayOf(\n        PropTypes.exact({\n            /**\n             * 当前子项内部元素\n             */\n            children: PropTypes.node,\n            /**\n             * 当前子项css类名，支持[动态css](/advanced-classname)\n             */\n            className: PropTypes.oneOfType([\n                PropTypes.string,\n                PropTypes.object,\n            ]),\n            /**\n             * 当前子项css样式\n             */\n            style: PropTypes.object,\n            /**\n             * 必填，当前子项唯一key值\n             */\n            key: PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n                .isRequired,\n            /**\n             * 当前子项折叠触发方式，可选项有`'header'`、`'disabled'`、`'icon'`\n             */\n            collapsible: PropTypes.oneOf(['header', 'disabled', 'icon']),\n            /**\n             * 当前子项标题元素\n             */\n            title: PropTypes.node,\n            /**\n             * 当前子项右上角额外元素\n             */\n            extra: PropTypes.node,\n            /**\n             * 是否展示当前手风琴项的箭头图标\n             * 默认值：`true`\n             */\n            showArrow: PropTypes.bool,\n            /**\n             * 是否强制渲染内部元素\n             * 默认值：`false`\n             */\n            forceRender: PropTypes.bool,\n        })\n    ),\n\n    /**\n     * 是否开启手风琴模式\n     * 默认值：`true`\n     */\n    accordion: PropTypes.bool,\n\n    /**\n     * 监听或设置当前处于展开状态的手风琴项key值\n     */\n    activeKey: PropTypes.oneOfType([\n        PropTypes.string,\n        PropTypes.arrayOf(PropTypes.string),\n        PropTypes.number,\n        PropTypes.arrayOf(PropTypes.number),\n    ]),\n\n    /**\n     * 设置初始化处于展开状态的手风琴项key值\n     */\n    defaultActiveKey: PropTypes.oneOfType([\n        PropTypes.string,\n        PropTypes.arrayOf(PropTypes.string),\n        PropTypes.number,\n        PropTypes.arrayOf(PropTypes.number),\n    ]),\n\n    /**\n     * 是否渲染边框\n     * 默认值：`true`\n     */\n    bordered: PropTypes.bool,\n\n    /**\n     * 组件尺寸规格，可选项有`'small'`、`'middle'`、`'large'`\n     * 默认值：`'middle'`\n     */\n    size: PropTypes.oneOf(['large', 'middle', 'small']),\n\n    /**\n     * 设置所有子项折叠触发方式，可选项有`'header'`、`'disabled'`、`'icon'`\n     */\n    collapsible: PropTypes.oneOf(['header', 'disabled', 'icon']),\n\n    /**\n     * 设置折叠图标位置，可选项有`'left'`、`'right'`\n     */\n    expandIconPosition: PropTypes.oneOf(['left', 'right']),\n\n    /**\n     * 是否开启透明无边框模式\n     * 默认值：`false`\n     */\n    ghost: PropTypes.bool,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdAccordion;\n\nexport const propTypes = AntdAccordion.propTypes;\nexport const defaultProps = AntdAccordion.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataDisplay/AntdAvatar.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdAvatar = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_display\" */ '../../fragments/dataDisplay/AntdAvatar.react'\n        )\n);\n\n/**\n * 头像组件AntdAvatar\n */\nconst AntdAvatar = ({\n    id,\n    className,\n    style,\n    key,\n    mode = 'icon',\n    text,\n    src,\n    srcSet,\n    draggable,\n    crossOrigin,\n    icon,\n    iconRenderer = 'AntdIcon',\n    alt,\n    gap = 4,\n    size,\n    shape = 'circle',\n    setProps,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdAvatar\n                {...{\n                    id,\n                    className,\n                    style,\n                    key,\n                    mode,\n                    text,\n                    src,\n                    srcSet,\n                    draggable,\n                    crossOrigin,\n                    icon,\n                    iconRenderer,\n                    alt,\n                    gap,\n                    size,\n                    shape,\n                    setProps,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdAvatar.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 头像模式，可选项有`'text'`、`'icon'`、`'image'`\n     * 默认值：`'icon'`\n     */\n    mode: PropTypes.oneOf(['text', 'icon', 'image']),\n\n    /**\n     * `mode='text'`时，设置字符距离左右两侧边界的像素距离\n     * 默认值：`4`\n     */\n    gap: PropTypes.number,\n\n    /**\n     * `mode='text'`时，设置文字内容\n     */\n    text: PropTypes.string,\n\n    /**\n     * `mode='icon'`时，设置图标，同**AntdIcon**的`icon`参数\n     */\n    icon: PropTypes.string,\n\n    /**\n     * `mode='icon'`时，设置图标渲染方式，可选项有`'AntdIcon'`、`'fontawesome'`\n     */\n    iconRenderer: PropTypes.oneOf(['AntdIcon', 'fontawesome']),\n\n    /**\n     * `mode='image'`时，设置图像无法显示时的占位文字\n     */\n    alt: PropTypes.string,\n\n    /**\n     * `mode='image'`时，设置图片地址\n     */\n    src: PropTypes.string,\n\n    /**\n     * `mode='image'`时，设置图片base64地址\n     */\n    srcSet: PropTypes.string,\n\n    /**\n     * `mode='image'`时，设置图片是否允许拖拽\n     */\n    draggable: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.oneOf(['true', 'false']),\n    ]),\n\n    /**\n     * `mode='image'`时，设置图片的CORS属性，可选项有`'anonymous'`、`'use-credentials'`、`''`\n     */\n    crossOrigin: PropTypes.oneOf(['anonymous', 'use-credentials', '']),\n\n    /**\n     * 配置头像尺寸，可传入数值型代表像素尺寸（支持响应式），或传入字符型使用预设尺寸规格，可选项有`'large'`、`'small'`、`'default'`\n     */\n    size: PropTypes.oneOfType([\n        PropTypes.number,\n        PropTypes.oneOf(['large', 'small', 'default']),\n        PropTypes.exact({\n            xs: PropTypes.number,\n            sm: PropTypes.number,\n            md: PropTypes.number,\n            lg: PropTypes.number,\n            xl: PropTypes.number,\n            xxl: PropTypes.number,\n        }),\n    ]),\n\n    /**\n     * 头像形状，可选项有`'circle'`、`'square'`\n     * 默认值：`'circle'`\n     */\n    shape: PropTypes.oneOf(['circle', 'square']),\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdAvatar;\n\nexport const propTypes = AntdAvatar.propTypes;\nexport const defaultProps = AntdAvatar.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataDisplay/AntdAvatarGroup.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdAvatarGroup = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_display\" */ '../../fragments/dataDisplay/AntdAvatarGroup.react'\n        )\n);\n\n/**\n * 头像组合组件AntdAvatarGroup\n */\nconst AntdAvatarGroup = ({\n    id,\n    children,\n    className,\n    style,\n    key,\n    max,\n    size = 'default',\n    setProps,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdAvatarGroup\n                {...{\n                    id,\n                    children,\n                    className,\n                    style,\n                    key,\n                    max,\n                    size,\n                    setProps,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdAvatarGroup.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，传入组内各`AntdAvatar`组件\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 配置最多显示功能相关参数\n     */\n    max: PropTypes.shape({\n        /**\n         * 最多显示的头像个数，默认无限制\n         */\n        count: PropTypes.number,\n        /**\n         * 头像省略部分css样式\n         */\n        style: PropTypes.object,\n        /**\n         * 展开层相关配置参数\n         */\n        popover: PropTypes.shape({\n            /**\n             * 超出`maxCount`数量限制之外的头像气泡卡片弹出方位，可选项有`'top'`、`'bottom'`、`'right'`\n             * 默认值：`'top'`\n             */\n            placement: PropTypes.oneOf(['top', 'bottom', 'right']),\n            /**\n             * 超出`maxCount`数量限制之外的头像气泡卡片弹出触发方式，可选项有`'hover'`、`'click'`\n             * 默认值：`'hover'`\n             */\n            trigger: PropTypes.oneOf(['hover', 'click']),\n        }),\n    }),\n\n    /**\n     * 统一设置内部头像尺寸规格，传入数值型表示像素尺寸，传入字符型表示内置规格，可选项有`'large'`、`'small'`、`'default'`，支持响应式断点\n     * 默认值：`'default'`\n     */\n    size: PropTypes.oneOfType([\n        PropTypes.number,\n        PropTypes.oneOf(['large', 'small', 'default']),\n        PropTypes.exact({\n            xs: PropTypes.number,\n            sm: PropTypes.number,\n            md: PropTypes.number,\n            lg: PropTypes.number,\n            xl: PropTypes.number,\n            xxl: PropTypes.number,\n        }),\n    ]),\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdAvatarGroup;\n\nexport const propTypes = AntdAvatarGroup.propTypes;\nexport const defaultProps = AntdAvatarGroup.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataDisplay/AntdBadge.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdBadge = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_display\" */ '../../fragments/dataDisplay/AntdBadge.react'\n        )\n);\n\n/**\n * 徽标组件AntdBadge\n */\nconst AntdBadge = ({\n    id,\n    children,\n    className,\n    style,\n    styles,\n    classNames,\n    key,\n    color,\n    count,\n    dot = false,\n    offset,\n    overflowCount = 99,\n    showZero = false,\n    status,\n    text,\n    title,\n    size = 'default',\n    nClicks = 0,\n    setProps,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdBadge\n                {...{\n                    id,\n                    children,\n                    className,\n                    style,\n                    styles,\n                    classNames,\n                    key,\n                    color,\n                    count,\n                    dot,\n                    offset,\n                    overflowCount,\n                    showZero,\n                    status,\n                    text,\n                    title,\n                    size,\n                    nClicks,\n                    setProps,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdBadge.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，定义徽标添加目标元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 细分控制子元素css样式\n     */\n    styles: PropTypes.exact({\n        /**\n         * 控制根元素css样式\n         */\n        root: PropTypes.object,\n        /**\n         * 控制徽标元素css样式\n         */\n        indicator: PropTypes.object,\n    }),\n\n    /**\n     * 细分控制子元素css类\n     */\n    classNames: PropTypes.exact({\n        /**\n         * 控制根元素css类\n         */\n        root: PropTypes.string,\n        /**\n         * 控制徽标元素css类\n         */\n        indicator: PropTypes.string,\n    }),\n\n    /**\n     * 徽标颜色\n     */\n    color: PropTypes.string,\n\n    /**\n     * 徽标显示的数字\n     */\n    count: PropTypes.number,\n\n    /**\n     * 是否用圆点代替数字显示\n     * 默认值：`false`\n     */\n    dot: PropTypes.bool,\n\n    /**\n     * 当`count=0`时，是否强制显示数字\n     * 默认值：`false`\n     */\n    showZero: PropTypes.bool,\n\n    /**\n     * 数字显示上限，超出会以显示`+`后缀\n     * 默认值：`99`\n     */\n    overflowCount: PropTypes.number,\n\n    /**\n     * 徽标在水平、竖直方向上的像素偏移，格式为`[水平偏移, 竖直偏移]`\n     */\n    offset: PropTypes.arrayOf(PropTypes.number),\n\n    /**\n     * 徽标状态，可选项有`'success'`、`'processing'`、`'default'`、`'error'`、`'warning'`\n     */\n    status: PropTypes.oneOf([\n        'success',\n        'processing',\n        'default',\n        'error',\n        'warning',\n    ]),\n\n    /**\n     * 参数`status`有效时，设置徽标文本内容\n     */\n    text: PropTypes.string,\n\n    /**\n     * 徽标鼠标悬停显示文字内容\n     */\n    title: PropTypes.string,\n\n    /**\n     * 徽标尺寸规格，可选项有`'default'`、`'small'`\n     */\n    size: PropTypes.oneOf(['default', 'small']),\n\n    /**\n     * 监听徽标累计被点击次数\n     * 默认值：`0`\n     */\n    nClicks: PropTypes.number,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdBadge;\n\nexport const propTypes = AntdBadge.propTypes;\nexport const defaultProps = AntdBadge.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataDisplay/AntdCarousel.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdCarousel = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_display\" */ '../../fragments/dataDisplay/AntdCarousel.react'\n        )\n);\n\n/**\n * 走马灯组件AntdCarousel\n */\nconst AntdCarousel = ({\n    id,\n    children,\n    className,\n    style,\n    key,\n    arrows = false,\n    autoplay = false,\n    dotPosition = 'bottom',\n    easing = 'linear',\n    effect = 'scrollx',\n    autoplaySpeed = 3000,\n    speed = 500,\n    pauseOnHover = false,\n    infinite = true,\n    lazyLoad = false,\n    slidesToShow = 1,\n    slidesToScroll = 1,\n    setProps,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdCarousel\n                {...{\n                    id,\n                    children,\n                    className,\n                    style,\n                    key,\n                    arrows,\n                    autoplay,\n                    dotPosition,\n                    easing,\n                    effect,\n                    autoplaySpeed,\n                    speed,\n                    pauseOnHover,\n                    infinite,\n                    lazyLoad,\n                    slidesToShow,\n                    slidesToScroll,\n                    setProps,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdCarousel.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，定义走马灯中需要轮播的若干元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 是否显示箭头\n     * 默认值：`false`\n     */\n    arrows: PropTypes.bool,\n\n    /**\n     * 是否自动轮播，可传入字典型进行更多配置\n     * 默认值：`false`\n     */\n    autoplay: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.shape({\n            /**\n             * 是否展示指示点进度条\n             */\n            dotDuration: PropTypes.bool,\n        }),\n    ]),\n\n    /**\n     * 面板指示器位置，可选项有`'top'`、`'bottom'`、`'left'`、`'right'`\n     * 默认值：`'bottom'`\n     */\n    dotPosition: PropTypes.oneOf(['top', 'bottom', 'left', 'right']),\n\n    /**\n     * 调整动画效果，同css中的`animation-timing-function`\n     * 默认值：'linear'\n     */\n    easing: PropTypes.string,\n\n    /**\n     * 动化效果，可选项有`'scrollx'`、`'fade'`\n     * 默认值：'scrollx'\n     */\n    effect: PropTypes.oneOf(['scrollx', 'fade']),\n\n    /**\n     * 轮播间隔时长，单位：毫秒\n     * 默认值：`3000`\n     */\n    autoplaySpeed: PropTypes.number,\n\n    /**\n     * 轮播动画耗时，单位：毫秒\n     * 默认值：`500`\n     */\n    speed: PropTypes.number,\n\n    /**\n     * 是否在鼠标悬停时暂停轮播\n     * 默认值：`false`\n     */\n    pauseOnHover: PropTypes.bool,\n\n    /**\n     * 是否启用无限循环轮播\n     * 默认值：`true`\n     */\n    infinite: PropTypes.bool,\n\n    /**\n     * 是否针对走马灯中的子项实施懒加载效果\n     * 默认值：`false`\n     */\n    lazyLoad: PropTypes.bool,\n\n    /**\n     * 同时展示的子项数量\n     * 默认值：`1`\n     */\n    slidesToShow: PropTypes.number,\n\n    /**\n     * 一次轮播划过的子项数量\n     * 默认值：`1`\n     */\n    slidesToScroll: PropTypes.number,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdCarousel;\n\nexport const propTypes = AntdCarousel.propTypes;\nexport const defaultProps = AntdCarousel.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataDisplay/AntdCheckableTag.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdCheckableTag = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_display\" */ '../../fragments/dataDisplay/AntdCheckableTag.react'\n        )\n);\n\n/**\n * 可选择标签AntdCheckableTag\n */\nconst AntdCheckableTag = ({\n    id,\n    className,\n    style,\n    key,\n    content,\n    checkedContent,\n    unCheckedContent,\n    checked = false,\n    setProps,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdCheckableTag\n                {...{\n                    id,\n                    className,\n                    style,\n                    key,\n                    content,\n                    checkedContent,\n                    unCheckedContent,\n                    checked,\n                    setProps,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdCheckableTag.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 组件型，标签内容\n     */\n    content: PropTypes.node,\n\n    /**\n     * 组件型，选择状态下的标签内容\n     */\n    checkedContent: PropTypes.node,\n\n    /**\n     * 组件型，未选择状态下的标签内容\n     */\n    unCheckedContent: PropTypes.node,\n\n    /**\n     * 监听或设置当前标签的选择状态\n     * 默认值：`false`\n     */\n    checked: PropTypes.bool,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdCheckableTag;\n\nexport const propTypes = AntdCheckableTag.propTypes;\nexport const defaultProps = AntdCheckableTag.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataDisplay/AntdCollapse.react.js",
    "content": "// react核心\nimport React, { useContext } from 'react';\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Collapse } from 'antd';\n// 辅助库\nimport { parseChildrenToArray, useLoading } from '../utils';\nimport { isString, isUndefined } from 'lodash';\nimport { pickBy } from 'ramda';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 上下文\nimport PropsContext from '../../contexts/PropsContext';\n\n/**\n * 折叠面板组件AntdCollapse\n */\nconst AntdCollapse = ({\n    id,\n    children,\n    className,\n    style,\n    key,\n    styles,\n    classNames,\n    title,\n    isOpen = true,\n    bordered = true,\n    size = 'middle',\n    showArrow = true,\n    collapsible,\n    ghost = false,\n    forceRender = false,\n    setProps,\n    persistence,\n    persisted_props,\n    persistence_type,\n    ...others\n}) => {\n    children = parseChildrenToArray(children);\n\n    const context = useContext(PropsContext);\n\n    return (\n        <Collapse\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            items={[\n                {\n                    key: '1',\n                    label: title,\n                    children: children,\n                    showArrow: showArrow,\n                    forceRender: forceRender,\n                    styles: styles,\n                    classNames: classNames,\n                },\n            ]}\n            activeKey={isOpen ? ['1'] : []}\n            bordered={bordered}\n            size={\n                context && !isUndefined(context.componentSize)\n                    ? context.componentSize\n                    : size\n            }\n            ghost={ghost}\n            collapsible={collapsible}\n            onChange={(e) => {\n                if (e.length === 1) {\n                    setProps({\n                        isOpen: true,\n                    });\n                } else {\n                    setProps({\n                        isOpen: false,\n                    });\n                }\n            }}\n            data-dash-is-loading={useLoading()}\n        />\n    );\n};\n\nAntdCollapse.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，内嵌元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 细分控制子元素css样式\n     */\n    styles: PropTypes.shape({\n        /**\n         * 头部元素css样式\n         */\n        header: PropTypes.object,\n        /**\n         * 内容元素css样式\n         */\n        body: PropTypes.object,\n    }),\n\n    /**\n     * 细分控制子元素css类名\n     */\n    classNames: PropTypes.shape({\n        /**\n         * 头部元素css类名\n         */\n        header: PropTypes.string,\n        /**\n         * 内容元素css类名\n         */\n        body: PropTypes.string,\n    }),\n\n    /**\n     * 组件型，标题内容\n     */\n    title: PropTypes.node,\n\n    /**\n     * 是否展开\n     * 默认值：`true`\n     */\n    isOpen: PropTypes.bool,\n\n    /**\n     * 组件尺寸规格，可选项有`'small'`、`'middle'`、`'large'`\n     * 默认值：`'middle'`\n     */\n    size: PropTypes.oneOf(['large', 'middle', 'small']),\n\n    /**\n     * 是否渲染边框\n     * 默认值：`true`\n     */\n    bordered: PropTypes.bool,\n\n    /**\n     * 是否渲染箭头\n     * 默认值：`true`\n     */\n    showArrow: PropTypes.bool,\n\n    /**\n     * 是否开启透明背景模式\n     * 默认值：`false`\n     */\n    ghost: PropTypes.bool,\n\n    /**\n     * 折叠交互触发行为，可选项有`'header'`（仅标题区域）、`'disabled'`（禁用折叠）、`'icon'`（仅图标区域）\n     */\n    collapsible: PropTypes.oneOf(['header', 'disabled', 'icon']),\n\n    /**\n     * 初始化未展开时，是否强制渲染内部元素\n     * 默认值：`false`\n     */\n    forceRender: PropTypes.bool,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n\n    /**\n     * 是否开启[属性持久化](/prop-persistence)\n     */\n    persistence: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.string,\n        PropTypes.number,\n    ]),\n\n    /**\n     * 开启属性持久化功能的若干属性名，可选项有`'isOpen'`\n     * 默认值：`['isOpen']`\n     */\n    persisted_props: PropTypes.arrayOf(PropTypes.oneOf(['isOpen'])),\n\n    /**\n     * 属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n     * 默认值：`'local'`\n     */\n    persistence_type: PropTypes.oneOf(['local', 'session', 'memory']),\n};\n\nAntdCollapse.dashPersistence = {\n    persisted_props: ['isOpen'],\n    persistence_type: 'local',\n};\n\nexport default AntdCollapse;\n"
  },
  {
    "path": "src/lib/components/dataDisplay/AntdComment.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdComment = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_display\" */ '../../fragments/dataDisplay/AntdComment.react'\n        )\n);\n\n/**\n * 评论组件AntdComment\n */\nconst AntdComment = ({\n    id,\n    children,\n    className,\n    style,\n    locale = 'zh-cn',\n    commentId,\n    showLikeDislike = true,\n    showReply = true,\n    showDelete = false,\n    replyClicks = 0,\n    deleteClicks = 0,\n    authorName,\n    authorNameHref,\n    publishTime,\n    fromNow = false,\n    commentContent,\n    likesCount = 0,\n    dislikesCount = 0,\n    action,\n    defaultAction,\n    avatarProps,\n    popupContainer = 'body',\n    setProps,\n    batchPropsNames = [],\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdComment\n                {...{\n                    id,\n                    children,\n                    className,\n                    style,\n                    locale,\n                    commentId,\n                    showLikeDislike,\n                    showReply,\n                    showDelete,\n                    replyClicks,\n                    deleteClicks,\n                    authorName,\n                    authorNameHref,\n                    publishTime,\n                    fromNow,\n                    commentContent,\n                    likesCount,\n                    dislikesCount,\n                    action,\n                    defaultAction,\n                    avatarProps,\n                    popupContainer,\n                    setProps,\n                    batchPropsNames,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdComment.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 传入内部嵌套的评论组件\n     */\n    children: PropTypes.node,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n     * 默认值：`'zh-cn'`\n     */\n    locale: PropTypes.oneOf(['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']),\n\n    /**\n     * 评论唯一id，可用于数据库匹配等场景\n     */\n    commentId: PropTypes.string,\n\n    /**\n     * 评论发布用户名\n     */\n    authorName: PropTypes.string,\n\n    /**\n     * 评论发布用户名附带链接地址\n     */\n    authorNameHref: PropTypes.string,\n\n    /**\n     * 必填，配置发布日期时间相关参数\n     */\n    publishTime: PropTypes.exact({\n        /**\n         * 必填，日期时间字符串\n         */\n        value: PropTypes.string.isRequired,\n        /**\n         * 与日期时间字符串匹配的格式\n         */\n        format: PropTypes.string,\n    }).isRequired,\n\n    /**\n     * 是否以相对时间格式呈现发布日期时间\n     */\n    fromNow: PropTypes.bool,\n\n    /**\n     * 是否显示“支持/反对”按钮\n     * 默认值：`true`\n     */\n    showLikeDislike: PropTypes.bool,\n\n    /**\n     * 是否显示“添加回复”按钮\n     * 默认值：`true`\n     */\n    showReply: PropTypes.bool,\n\n    /**\n     * 是否显示“删除”按钮\n     * 默认值：`false`\n     */\n    showDelete: PropTypes.bool,\n\n    /**\n     * 监听“添加回复”按钮累计点击次数\n     * 默认值：`0`\n     */\n    replyClicks: PropTypes.number,\n\n    /**\n     * 监听“删除”按钮累计点击次数\n     * 默认值：`0`\n     */\n    deleteClicks: PropTypes.number,\n\n    /**\n     * 组件型，评论正文内容\n     */\n    commentContent: PropTypes.node,\n\n    /**\n     * 监听或设置“支持”次数\n     */\n    likesCount: PropTypes.number,\n\n    /**\n     * 监听或设置“反对”次数\n     */\n    dislikesCount: PropTypes.number,\n\n    /**\n     * 监听或设置当前评论“支持/反对”状态，可选项有`'liked'`、`'disliked'`、`'default'`\n     * 默认值：`'default'`\n     */\n    action: PropTypes.oneOf(['liked', 'disliked', 'default']),\n\n    /**\n     * 设置当前评论初始化时的“支持/反对”状态，可选项有`'liked'`、`'disliked'`、`'default'`\n     */\n    defaultAction: PropTypes.oneOf(['liked', 'disliked', 'default']),\n\n    /**\n     * 配置评论用户头像，同`AntdAvatar`\n     */\n    avatarProps: PropTypes.object,\n\n    /**\n     * 相关展开层锚定策略，可选项有`'parent'`、`'body'`\n     * 默认值：`'body'`\n     */\n    popupContainer: PropTypes.oneOf(['parent', 'body']),\n\n    /**\n     * 需要纳入[批量属性监听](/batch-props-values)的若干属性名\n     */\n    batchPropsNames: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 监听`batchPropsNames`中指定的若干属性值\n     */\n    batchPropsValues: PropTypes.object,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    loading_state: PropTypes.shape({\n        /**\n         * Determines if the component is loading or not\n         */\n        is_loading: PropTypes.bool,\n        /**\n         * Holds which property is loading\n         */\n        prop_name: PropTypes.string,\n        /**\n         * Holds the name of the component that is loading\n         */\n        component_name: PropTypes.string,\n    }),\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdComment;\n\nexport const propTypes = AntdComment.propTypes;\nexport const defaultProps = AntdComment.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataDisplay/AntdCountdown.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdCountdown = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_display\" */ '../../fragments/dataDisplay/AntdCountdown.react'\n        )\n);\n\n/**\n * 倒计时组件AntdCountdown\n */\nconst AntdCountdown = ({\n    id,\n    className,\n    style,\n    key,\n    value,\n    valueFormat = 'YYYY-MM-DD hh:mm:ss',\n    format,\n    prefix,\n    suffix,\n    title,\n    titleTooltip,\n    valueStyle,\n    setProps,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdCountdown\n                {...{\n                    id,\n                    className,\n                    style,\n                    key,\n                    value,\n                    valueFormat,\n                    format,\n                    prefix,\n                    suffix,\n                    title,\n                    titleTooltip,\n                    valueStyle,\n                    setProps,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdCountdown.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 日期时间显示格式，[参考资料](https://day.js.org/docs/en/display/format)，如`HH:mm:ss`代表`时:分:秒`\n     */\n    format: PropTypes.string,\n\n    /**\n     * 目标截止日期时间字符串，与`valueFormat`对应\n     */\n    value: PropTypes.string,\n\n    /**\n     * 针对`value`设置对应的日期时间解析格式，[参考资料](https://day.js.org/docs/en/display/format)\n     * 默认值：`'YYYY-MM-DD hh:mm:ss'`\n     */\n    valueFormat: PropTypes.string,\n\n    /**\n     * 组件型，数值前缀内容\n     */\n    prefix: PropTypes.node,\n\n    /**\n     * 组件型，数值后缀内容\n     */\n    suffix: PropTypes.node,\n\n    /**\n     * 组件型，标题内容\n     */\n    title: PropTypes.node,\n\n    /**\n     * 为标题内容添加额外鼠标悬停提示信息\n     */\n    titleTooltip: PropTypes.string,\n\n    /**\n     * 数值内容css样式\n     */\n    valueStyle: PropTypes.object,\n\n    /**\n     * 监听倒计时结束事件\n     */\n    finishEvent: PropTypes.shape({\n        /**\n         * 事件时间戳\n         */\n        timestamp: PropTypes.number,\n    }),\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdCountdown;\n\nexport const propTypes = AntdCountdown.propTypes;\nexport const defaultProps = AntdCountdown.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataDisplay/AntdCountup.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdCountup = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_display\" */ '../../fragments/dataDisplay/AntdCountup.react'\n        )\n);\n\n/**\n * 正计时组件AntdCountup\n */\nconst AntdCountup = ({\n    id,\n    className,\n    style,\n    key,\n    value,\n    valueFormat = 'YYYY-MM-DD hh:mm:ss',\n    format,\n    prefix,\n    suffix,\n    title,\n    titleTooltip,\n    valueStyle,\n    setProps,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdCountup\n                {...{\n                    id,\n                    className,\n                    style,\n                    key,\n                    value,\n                    valueFormat,\n                    format,\n                    prefix,\n                    suffix,\n                    title,\n                    titleTooltip,\n                    valueStyle,\n                    setProps,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdCountup.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 日期时间显示格式，[参考资料](https://day.js.org/docs/en/display/format)，如`HH:mm:ss`代表`时:分:秒`\n     */\n    format: PropTypes.string,\n\n    /**\n     * 目标截止日期时间字符串，与`valueFormat`对应\n     */\n    value: PropTypes.string,\n\n    /**\n     * 针对`value`设置对应的日期时间解析格式，[参考资料](https://day.js.org/docs/en/display/format)\n     * 默认值：`'YYYY-MM-DD hh:mm:ss'`\n     */\n    valueFormat: PropTypes.string,\n\n    /**\n     * 组件型，数值前缀内容\n     */\n    prefix: PropTypes.node,\n\n    /**\n     * 组件型，数值后缀内容\n     */\n    suffix: PropTypes.node,\n\n    /**\n     * 组件型，标题内容\n     */\n    title: PropTypes.node,\n\n    /**\n     * 为标题内容添加额外鼠标悬停提示信息\n     */\n    titleTooltip: PropTypes.string,\n\n    /**\n     * 数值内容css样式\n     */\n    valueStyle: PropTypes.object,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdCountup;\n\nexport const propTypes = AntdCountup.propTypes;\nexport const defaultProps = AntdCountup.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataDisplay/AntdEmpty.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdEmpty = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_display\" */ '../../fragments/dataDisplay/AntdEmpty.react'\n        )\n);\n\n/**\n * 空状态组件AntdEmpty\n */\nconst AntdEmpty = ({\n    id,\n    children,\n    className,\n    style,\n    styles,\n    classNames,\n    key,\n    locale = 'zh-cn',\n    description,\n    image = 'default',\n    setProps,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdEmpty\n                {...{\n                    id,\n                    children,\n                    className,\n                    style,\n                    styles,\n                    classNames,\n                    key,\n                    locale,\n                    description,\n                    image,\n                    setProps,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdEmpty.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，内嵌元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 细分控制子元素css样式\n     */\n    styles: PropTypes.exact({\n        /**\n         * 根元素css样式\n         */\n        root: PropTypes.object,\n        /**\n         * 图标元素css样式\n         */\n        image: PropTypes.object,\n        /**\n         * 描述元素css样式\n         */\n        description: PropTypes.object,\n        /**\n         * 底部元素css样式\n         */\n        footer: PropTypes.object,\n    }),\n\n    /**\n     * 细分控制子元素css类名\n     */\n    classNames: PropTypes.exact({\n        /**\n         * 根元素css类名\n         */\n        root: PropTypes.string,\n        /**\n         * 图标元素css类名\n         */\n        image: PropTypes.string,\n        /**\n         * 描述元素css类名\n         */\n        description: PropTypes.string,\n        /**\n         * 底部元素css类名\n         */\n        footer: PropTypes.string,\n    }),\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n     * 默认值：`'zh-cn'`\n     */\n    locale: PropTypes.oneOf(['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']),\n\n    /**\n     * 描述信息内容\n     */\n    description: PropTypes.oneOfType([PropTypes.node, PropTypes.bool]),\n\n    /**\n     * 状态图片地址，也可以使用内置图片，可选项有`'default'`、`'simple'`\n     * 默认值：`'default'`\n     */\n    image: PropTypes.oneOfType([\n        PropTypes.string,\n        PropTypes.oneOf(['default', 'simple']),\n    ]),\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdEmpty;\n\nexport const propTypes = AntdEmpty.propTypes;\nexport const defaultProps = AntdEmpty.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataDisplay/AntdImage.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdImage = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_display\" */ '../../fragments/dataDisplay/AntdImage.react'\n        )\n);\n\n/**\n * 图片组件AntdImage\n */\nconst AntdImage = ({\n    id,\n    className,\n    style,\n    key,\n    locale = 'zh-cn',\n    width,\n    height,\n    src,\n    fallback,\n    multiImageMode = 'fold',\n    previewCurrent,\n    previewVisible,\n    preview = true,\n    toolbarExtra,\n    setProps,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdImage\n                {...{\n                    id,\n                    className,\n                    style,\n                    key,\n                    locale,\n                    width,\n                    height,\n                    src,\n                    fallback,\n                    multiImageMode,\n                    previewCurrent,\n                    previewVisible,\n                    preview,\n                    toolbarExtra,\n                    setProps,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdImage.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n     * 默认值：`'zh-cn'`\n     */\n    locale: PropTypes.oneOf(['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']),\n\n    /**\n     * 图片alt信息\n     */\n    alt: PropTypes.string,\n\n    /**\n     * 图片宽度\n     */\n    width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n    /**\n     * 图片高度\n     */\n    height: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n    /**\n     * 配置图片资源地址，当传入数组时为多图片模式\n     */\n    src: PropTypes.oneOfType([\n        PropTypes.string,\n        PropTypes.arrayOf(PropTypes.string),\n    ]),\n\n    /**\n     * 图片加载失败占位图资源地址\n     */\n    fallback: PropTypes.string,\n\n    /**\n     * 多图片模式展示方式，可选项有`'fold'`、`'unfold'`\n     * 默认值：`'fold'`\n     */\n    multiImageMode: PropTypes.oneOf(['fold', 'unfold']),\n\n    /**\n     * 监听或控制当前图片预览层是否处于打开状态\n     */\n    previewVisible: PropTypes.bool,\n\n    /**\n     * 监听或控制当前图片预览对应切换到的图片下标\n     */\n    previewCurrent: PropTypes.number,\n\n    /**\n     * 配置图片预览相关功能，传入`false`时会禁用预览功能\n     * 默认值：`true`\n     */\n    preview: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.exact({\n            /**\n             * 自定义预览图链接地址\n             */\n            src: PropTypes.string,\n            /**\n             * 预览模式下是否可移动图片\n             */\n            movable: PropTypes.bool,\n            /**\n             * 组件型，用于自定义缩略图遮罩元素\n             */\n            mask: PropTypes.node,\n            /**\n             * 缩略图遮罩元素css类名\n             */\n            maskClassName: PropTypes.string,\n            /**\n             * 缩略图根节点css类名\n             */\n            rootClassName: PropTypes.string,\n            /**\n             * `1+scaleStep`值为每一步缩放的倍数\n             * 默认值：`0.5`\n             */\n            scaleStep: PropTypes.number,\n            /**\n             * 最小缩放倍数\n             * 默认值：`1`\n             */\n            minScale: PropTypes.number,\n            /**\n             * 最大缩放倍数\n             * 默认值：`50`\n             */\n            maxScale: PropTypes.number,\n        }),\n    ]),\n\n    /**\n     * 针对预览模式下的工具栏，末尾扩充自定义工具图标元素\n     */\n    toolbarExtra: PropTypes.node,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdImage;\n\nexport const propTypes = AntdImage.propTypes;\nexport const defaultProps = AntdImage.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataDisplay/AntdImageGroup.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdImageGroup = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_display\" */ '../../fragments/dataDisplay/AntdImageGroup.react'\n        )\n);\n\n/**\n * 图片组合组件AntdImageGroup\n */\nconst AntdImageGroup = ({\n    id,\n    children,\n    className,\n    style,\n    key,\n    locale = 'zh-cn',\n    items,\n    fallback,\n    preview = true,\n    visible,\n    current,\n    disableCurrent = true,\n    toolbarExtra,\n    setProps,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdImageGroup\n                {...{\n                    id,\n                    children,\n                    className,\n                    style,\n                    key,\n                    locale,\n                    items,\n                    fallback,\n                    preview,\n                    visible,\n                    current,\n                    disableCurrent,\n                    toolbarExtra,\n                    setProps,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdImageGroup.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，定义组内需要嵌套的`AntdImage`组件\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n     * 默认值：`'zh-cn'`\n     */\n    locale: PropTypes.oneOf(['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']),\n\n    /**\n     * 控制图片组合内部实际展示的图片资源地址数组，顺序依次展示\n     */\n    items: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 图片加载失败占位图资源地址\n     */\n    fallback: PropTypes.string,\n\n    /**\n     * 配置图片预览相关功能，传入`false`时会禁用预览功能\n     * 默认值：`true`\n     */\n    preview: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.exact({\n            /**\n             * 自定义预览图链接地址\n             */\n            src: PropTypes.string,\n            /**\n             * 预览模式下是否可移动图片\n             */\n            movable: PropTypes.bool,\n            /**\n             * 组件型，用于自定义缩略图遮罩元素\n             */\n            mask: PropTypes.node,\n            /**\n             * 缩略图遮罩元素css类名\n             */\n            maskClassName: PropTypes.string,\n            /**\n             * 缩略图根节点css类名\n             */\n            rootClassName: PropTypes.string,\n            /**\n             * `1+scaleStep`值为每一步缩放的倍数\n             * 默认值：`0.5`\n             */\n            scaleStep: PropTypes.number,\n            /**\n             * 最小缩放倍数\n             * 默认值：`1`\n             */\n            minScale: PropTypes.number,\n            /**\n             * 最大缩放倍数\n             * 默认值：`50`\n             */\n            maxScale: PropTypes.number,\n        }),\n    ]),\n\n    /**\n     * 监听或设置当前图片组是否处于全屏预览状态\n     */\n    visible: PropTypes.bool,\n\n    /**\n     * 监听或控制当前图片预览对应切换到的图片下标\n     */\n    current: PropTypes.number,\n\n    /**\n     * 是否关闭基于`current`的当前图片下标受控功能\n     * 默认值：`true`\n     */\n    disableCurrent: PropTypes.bool,\n\n    /**\n     * 针对预览模式下的工具栏，末尾扩充自定义工具图标元素\n     */\n    toolbarExtra: PropTypes.node,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdImageGroup;\n\nexport const propTypes = AntdImageGroup.propTypes;\nexport const defaultProps = AntdImageGroup.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataDisplay/AntdPopover.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdPopover = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_display\" */ '../../fragments/dataDisplay/AntdPopover.react'\n        )\n);\n\n/**\n * 气泡卡片组件Popover\n */\nconst AntdPopover = ({\n    id,\n    children,\n    className,\n    style,\n    styles,\n    classNames,\n    key,\n    title,\n    content,\n    placement = 'top',\n    color,\n    mouseEnterDelay = 0.1,\n    mouseLeaveDelay = 0.1,\n    trigger = 'hover',\n    zIndex,\n    arrow = 'show',\n    fresh = false,\n    open = false,\n    permanent = false,\n    popupContainer = 'body',\n    setProps,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdPopover\n                {...{\n                    id,\n                    children,\n                    className,\n                    style,\n                    styles,\n                    classNames,\n                    key,\n                    title,\n                    content,\n                    placement,\n                    color,\n                    mouseEnterDelay,\n                    mouseLeaveDelay,\n                    trigger,\n                    zIndex,\n                    arrow,\n                    fresh,\n                    open,\n                    permanent,\n                    popupContainer,\n                    setProps,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdPopover.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，气泡卡片触发目标元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 细分控制子元素css样式\n     */\n    styles: PropTypes.exact({\n        /**\n         * 根元素（包含箭头、内容元素）css样式\n         */\n        root: PropTypes.object,\n        /**\n         * 内容元素css样式\n         */\n        body: PropTypes.object,\n    }),\n\n    /**\n     * 细分控制子元素css类名\n     */\n    classNames: PropTypes.exact({\n        /**\n         * 根元素（包含箭头、内容元素）css类名\n         */\n        root: PropTypes.string,\n        /**\n         * 内容元素css类名\n         */\n        body: PropTypes.string,\n    }),\n\n    /**\n     * 组件型，标题内容\n     */\n    title: PropTypes.node,\n\n    /**\n     * 组件型，内容区元素\n     */\n    content: PropTypes.node,\n\n    /**\n     * 气泡卡片展开方向，可选项有`'top'`、`'left'`、`'right'`、`'bottom'`、`'topLeft'`、`'topRight'`、`'bottomLeft'`、`'bottomRight'`、`'leftTop'`、`'leftBottom'`、`'rightTop'`、`'rightBottom'`\n     * 默认值：`top'`\n     */\n    placement: PropTypes.oneOf([\n        'top',\n        'left',\n        'right',\n        'bottom',\n        'topLeft',\n        'topRight',\n        'bottomLeft',\n        'bottomRight',\n        'leftTop',\n        'leftBottom',\n        'rightTop',\n        'rightBottom',\n    ]),\n\n    /**\n     * 背景颜色\n     */\n    color: PropTypes.string,\n\n    /**\n     * 鼠标移入到气泡卡片弹出延时，单位：秒\n     * 默认值：`0.1`\n     */\n    mouseEnterDelay: PropTypes.number,\n\n    /**\n     * 鼠标移出到气泡卡片消失延时，单位：秒\n     * 默认值：`0.1`\n     */\n    mouseLeaveDelay: PropTypes.number,\n\n    /**\n     * 触发方式，可选项有`'hover'`、`'focus'`、`'click'`，可多选\n     * 默认值：`'hover'`\n     */\n    trigger: PropTypes.oneOfType([\n        PropTypes.oneOf(['hover', 'focus', 'click']),\n        PropTypes.arrayOf(PropTypes.oneOf(['hover', 'focus', 'click'])),\n    ]),\n\n    /**\n     * 气泡卡片z-index\n     */\n    zIndex: PropTypes.number,\n\n    /**\n     * 控制气泡卡片附带箭头显示形式，可选项有`'show'`、`'hide'`、`'center'`\n     * 默认值：`'show'`\n     */\n    arrow: PropTypes.oneOf(['show', 'hide', 'center']),\n\n    /**\n     * 是否始终保持更新内容\n     * 默认值：`false`\n     */\n    fresh: PropTypes.bool,\n\n    /**\n     * 监听或设置当前气泡卡片的展开状态\n     * 默认值：`false`\n     */\n    open: PropTypes.bool,\n\n    /**\n     * 是否保持气泡卡片处于`open`对应状态不变\n     * 默认值：`false`\n     */\n    permanent: PropTypes.bool,\n\n    /**\n     * 气泡卡片展开层锚定策略，可选项有`'parent'`、`'body'`\n     * 默认值：`'body'`\n     */\n    popupContainer: PropTypes.oneOf(['parent', 'body']),\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdPopover;\n\nexport const propTypes = AntdPopover.propTypes;\nexport const defaultProps = AntdPopover.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataDisplay/AntdQRCode.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdQRCode = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_display\" */ '../../fragments/dataDisplay/AntdQRCode.react'\n        )\n);\n\n/**\n * 二维码组件AntdQRCode\n */\nconst AntdQRCode = ({\n    id,\n    className,\n    style,\n    key,\n    locale = 'zh-cn',\n    value,\n    type = 'canvas',\n    icon,\n    size = 160,\n    iconSize = 40,\n    color = '#000',\n    bgColor = 'transparent',\n    bordered = true,\n    errorLevel = 'M',\n    status = 'active',\n    expires,\n    autoSpin = false,\n    refreshClicks = 0,\n    setProps,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdQRCode\n                {...{\n                    id,\n                    className,\n                    style,\n                    key,\n                    locale,\n                    value,\n                    type,\n                    icon,\n                    size,\n                    iconSize,\n                    color,\n                    bgColor,\n                    bordered,\n                    errorLevel,\n                    status,\n                    expires,\n                    autoSpin,\n                    refreshClicks,\n                    setProps,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdQRCode.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n     * 默认值：`'zh-cn'`\n     */\n    locale: PropTypes.oneOf(['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']),\n\n    /**\n     * 二维码解析结果\n     */\n    value: PropTypes.string,\n\n    /**\n     * 渲染方式，可选项有`'canvas'`、`'svg'`\n     * 默认值：`'canvas'`\n     */\n    type: PropTypes.oneOf(['canvas', 'svg']),\n\n    /**\n     * 二维码内嵌图片地址\n     */\n    icon: PropTypes.string,\n\n    /**\n     * 二维码像素边长\n     * 默认值：`160`\n     */\n    size: PropTypes.number,\n\n    /**\n     * 二维码内嵌图片像素边长\n     * 默认值：`40`\n     */\n    iconSize: PropTypes.oneOfType([\n        PropTypes.number,\n        PropTypes.exact({\n            width: PropTypes.number,\n            height: PropTypes.number,\n        }),\n    ]),\n\n    /**\n     * 二维码颜色\n     * 默认值：`'#000'`\n     */\n    color: PropTypes.string,\n\n    /**\n     * 二维码背景颜色\n     * 默认值：`'transparent'`\n     */\n    bgColor: PropTypes.string,\n\n    /**\n     * 二维码是否渲染边框\n     * 默认值：`true`\n     */\n    bordered: PropTypes.bool,\n\n    /**\n     * 二维码纠错级别，可选项有`'L'`、`'M'`、`'Q'`、`'H'`\n     * 默认值：`'M'`\n     */\n    errorLevel: PropTypes.oneOf(['L', 'M', 'Q', 'H']),\n\n    /**\n     * 二维码状态，可选项有`'active'`、`'expired'`、`'loading'`、`'scanned'`\n     * 默认值：`'active'`\n     */\n    status: PropTypes.oneOf(['active', 'expired', 'loading', 'scanned']),\n\n    /**\n     * 当前二维码过期时间，单位：秒，到期后二维码状态将会被强制更新为`'expired'`\n     */\n    expires: PropTypes.number,\n\n    /**\n     * 是否在`value`处于回调更新中时，自动切换为`loading`状态\n     * 默认值：`false`\n     */\n    autoSpin: PropTypes.bool,\n\n    /**\n     * 监听当前\"点击刷新\"按钮累计点击次数，仅在`status`为`'expired'`时有效\n     * 默认值：`0`\n     */\n    refreshClicks: PropTypes.number,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdQRCode;\n\nexport const propTypes = AntdQRCode.propTypes;\nexport const defaultProps = AntdQRCode.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataDisplay/AntdRibbon.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdRibbon = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_display\" */ '../../fragments/dataDisplay/AntdRibbon.react'\n        )\n);\n\n/**\n * 缎带组件AntdRibbon\n */\nconst AntdRibbon = ({\n    id,\n    children,\n    className,\n    style,\n    key,\n    color,\n    placement = 'end',\n    text,\n    setProps,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdRibbon\n                {...{\n                    id,\n                    children,\n                    className,\n                    style,\n                    key,\n                    color,\n                    placement,\n                    text,\n                    setProps,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdRibbon.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，添加徽标的目标元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 缎带颜色\n     */\n    color: PropTypes.string,\n\n    /**\n     * 缎带显示位置，可选项有`'start'`、`'end'`\n     * 默认值：`'end'`\n     */\n    placement: PropTypes.oneOf(['start', 'end']),\n\n    /**\n     * 组件型，缎带内容\n     */\n    text: PropTypes.node,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdRibbon;\n\nexport const propTypes = AntdRibbon.propTypes;\nexport const defaultProps = AntdRibbon.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataDisplay/AntdSegmented.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdSegmented = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_display\" */ '../../fragments/dataDisplay/AntdSegmented.react'\n        )\n);\n\n/**\n * 分段控制器组件AntdSegmented\n */\nconst AntdSegmented = ({\n    id,\n    style,\n    className,\n    key,\n    options,\n    defaultValue,\n    value,\n    block = false,\n    shape = 'default',\n    vertical = false,\n    disabled = false,\n    size = 'middle',\n    setProps,\n    persistence,\n    persisted_props,\n    persistence_type,\n    batchPropsNames = [],\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdSegmented\n                {...{\n                    id,\n                    style,\n                    className,\n                    key,\n                    options,\n                    defaultValue,\n                    value,\n                    block,\n                    shape,\n                    vertical,\n                    disabled,\n                    size,\n                    setProps,\n                    persistence,\n                    persisted_props,\n                    persistence_type,\n                    batchPropsNames,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdSegmented.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 配置选项相关参数\n     */\n    options: PropTypes.arrayOf(\n        PropTypes.oneOfType([\n            PropTypes.string,\n            PropTypes.number,\n            PropTypes.exact({\n                /**\n                 * 组件型，选项标题内容\n                 */\n                label: PropTypes.node,\n                /**\n                 * 必填，选项值\n                 */\n                value: PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n                    .isRequired,\n                /**\n                 * 是否禁用当前选项\n                 * 默认值：`false`\n                 */\n                disabled: PropTypes.bool,\n                /**\n                 * 选项前缀图标，`iconRenderer='AntdIcon'`时同`AntdIcon`，`iconRenderer='fontawesome'`时表示css类名\n                 */\n                icon: PropTypes.string,\n                /**\n                 * 选项前缀图标类型，可选项有`'AntdIcon'`、`'fontawesome'`\n                 * 默认值：`'AntdIcon'`\n                 */\n                iconRenderer: PropTypes.oneOf(['AntdIcon', 'fontawesome']),\n            }),\n        ])\n    ),\n\n    /**\n     * 监听或设置当前选中值\n     */\n    value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n    /**\n     * 设置初始化选中值\n     */\n    defaultValue: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n    /**\n     * 是否撑满父容器\n     * 默认值：`false`\n     */\n    block: PropTypes.bool,\n\n    /**\n     * 形状，可选项有`'default'`、`'round'`\n     * 默认值：`'default'`\n     */\n    shape: PropTypes.oneOf(['default', 'round']),\n\n    /**\n     * 是否垂直展示\n     * 默认值：`false`\n     */\n    vertical: PropTypes.bool,\n\n    /**\n     * 是否禁用当前组件\n     * 默认值：`false`\n     */\n    disabled: PropTypes.bool,\n\n    /**\n     * 组件尺寸规格，可选项有`'small'`、`'middle'`、`'large'`\n     * 默认值：`'middle'`\n     */\n    size: PropTypes.oneOf(['large', 'middle', 'small']),\n\n    /**\n     * 需要纳入[批量属性监听](/batch-props-values)的若干属性名\n     */\n    batchPropsNames: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 监听`batchPropsNames`中指定的若干属性值\n     */\n    batchPropsValues: PropTypes.object,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    loading_state: PropTypes.shape({\n        /**\n         * Determines if the component is loading or not\n         */\n        is_loading: PropTypes.bool,\n        /**\n         * Holds which property is loading\n         */\n        prop_name: PropTypes.string,\n        /**\n         * Holds the name of the component that is loading\n         */\n        component_name: PropTypes.string,\n    }),\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n\n    /**\n     * 是否开启[属性持久化](/prop-persistence)\n     */\n    persistence: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.string,\n        PropTypes.number,\n    ]),\n\n    /**\n     * 开启属性持久化功能的若干属性名，可选项有`'value'`\n     * 默认值：`['value']`\n     */\n    persisted_props: PropTypes.arrayOf(PropTypes.oneOf(['value'])),\n\n    /**\n     * 属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n     * 默认值：`'local'`\n     */\n    persistence_type: PropTypes.oneOf(['local', 'session', 'memory']),\n};\n\nAntdSegmented.dashPersistence = {\n    persisted_props: ['value'],\n    persistence_type: 'local',\n};\n\nexport default AntdSegmented;\n\nexport const propTypes = AntdSegmented.propTypes;\nexport const defaultProps = AntdSegmented.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataDisplay/AntdSpoiler.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdSpoiler = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_display\" */ '../../fragments/dataDisplay/AntdSpoiler.react'\n        )\n);\n\n/**\n * 展开收起组件AntdSpoiler\n */\nconst AntdSpoiler = ({\n    id,\n    children,\n    className,\n    style,\n    key,\n    locale = 'zh-cn',\n    contentClassName,\n    contentStyle,\n    hideLabel,\n    showLabel,\n    labelPosition = 'left',\n    open = false,\n    maxHeight = 50,\n    transitionDuration = 0.1,\n    setProps,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdSpoiler\n                {...{\n                    id,\n                    children,\n                    className,\n                    style,\n                    key,\n                    locale,\n                    contentClassName,\n                    contentStyle,\n                    hideLabel,\n                    showLabel,\n                    labelPosition,\n                    open,\n                    maxHeight,\n                    transitionDuration,\n                    setProps,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdSpoiler.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，内嵌元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 内容区css类名，支持[动态css](/advanced-classname)\n     */\n    contentClassName: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 内容区css样式\n     */\n    contentStyle: PropTypes.object,\n\n    /**\n     * 组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n     * 默认值：`'zh-cn'`\n     */\n    locale: PropTypes.oneOf(['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']),\n\n    /**\n     * 组件型，展开状态下，收起按钮的文案内容\n     */\n    hideLabel: PropTypes.node,\n\n    /**\n     * 组件型，收起状态下，展开按钮的文案内容\n     */\n    showLabel: PropTypes.node,\n\n    /**\n     * 展开/收起按钮的位置，可选项有`'left'`、`'right'`\n     * 默认值：`'left'`\n     */\n    labelPosition: PropTypes.oneOf(['left', 'right']),\n\n    /**\n     * 监听或设置是否处于展开状态\n     * 默认值：`false`\n     */\n    open: PropTypes.bool,\n\n    /**\n     * 收起状态下，内容区域最大像素高度\n     * 默认值：`50`\n     */\n    maxHeight: PropTypes.number,\n\n    /**\n     * 展开/收起过渡动画耗时，单位：秒\n     * 默认值：`0.1`\n     */\n    transitionDuration: PropTypes.number,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdSpoiler;\n\nexport const propTypes = AntdSpoiler.propTypes;\nexport const defaultProps = AntdSpoiler.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataDisplay/AntdStatistic.react.js",
    "content": "// react核心\nimport React from 'react';\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Statistic, Space, Tooltip } from 'antd';\nimport { QuestionCircleOutlined } from '@ant-design/icons';\n// 辅助库\nimport { isString, isNumber } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n\n/**\n * 统计数值组件AntdStatistic\n */\nconst AntdStatistic = ({\n    id,\n    className,\n    style,\n    key,\n    value,\n    showGroupSeparator = true,\n    precision,\n    prefix,\n    suffix,\n    title,\n    titleTooltip,\n    valueStyle,\n    setProps,\n    ...others\n}) => {\n    return (\n        <Statistic\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            value={isString(value) || isNumber(value) ? value : undefined}\n            formatter={\n                !(isString(value) || isNumber(value)) ? () => value : undefined\n            }\n            groupSeparator={showGroupSeparator ? ',' : ''}\n            precision={precision}\n            prefix={prefix}\n            suffix={suffix}\n            title={\n                titleTooltip ? (\n                    <Space size={5}>\n                        {title}\n                        <Tooltip title={titleTooltip}>\n                            <QuestionCircleOutlined />\n                        </Tooltip>\n                    </Space>\n                ) : (\n                    title\n                )\n            }\n            valueStyle={valueStyle}\n            data-dash-is-loading={useLoading()}\n        />\n    );\n};\n\nAntdStatistic.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 支持组件型，要展示的数值\n     */\n    value: PropTypes.oneOfType([\n        PropTypes.number,\n        PropTypes.string,\n        PropTypes.node,\n    ]),\n\n    /**\n     * 是否为数值型`value`添加千分位符\n     * 默认值：`true`\n     */\n    showGroupSeparator: PropTypes.bool,\n\n    /**\n     * 针对数值型`value`，设置数值精度\n     */\n    precision: PropTypes.number,\n\n    /**\n     * 组件型，数值前缀内容\n     */\n    prefix: PropTypes.node,\n\n    /**\n     * 组件型，数值后缀内容\n     */\n    suffix: PropTypes.node,\n\n    /**\n     * 组件型，标题内容\n     */\n    title: PropTypes.node,\n\n    /**\n     * 为标题内容添加额外鼠标悬停提示信息\n     */\n    titleTooltip: PropTypes.string,\n\n    /**\n     * 数值内容css样式\n     */\n    valueStyle: PropTypes.object,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    loading_state: PropTypes.shape({\n        /**\n         * Determines if the component is loading or not\n         */\n        is_loading: PropTypes.bool,\n        /**\n         * Holds which property is loading\n         */\n        prop_name: PropTypes.string,\n        /**\n         * Holds the name of the component that is loading\n         */\n        component_name: PropTypes.string,\n    }),\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdStatistic;\n"
  },
  {
    "path": "src/lib/components/dataDisplay/AntdTable.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdTable = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"antd_table\" */ '../../fragments/AntdTable.react'\n        )\n);\n\n/**\n * 表格组件AntdTable\n */\nconst AntdTable = ({\n    id,\n    className,\n    style,\n    key,\n    locale = 'zh-cn',\n    containerId,\n    columns = [],\n    showHeader = true,\n    rowHoverable = true,\n    tableLayout,\n    miniChartHeight = 30,\n    miniChartAnimation = false,\n    rowSelectionType,\n    selectedRowKeys,\n    rowSelectionWidth = 32,\n    rowSelectionCheckStrictly,\n    rowSelectionIgnoreRowKeys,\n    sticky = false,\n    titlePopoverInfo,\n    columnsFormatConstraint,\n    enableHoverListen = false,\n    data = [],\n    sortOptions = {},\n    showSorterTooltip = true,\n    showSorterTooltipTarget = 'full-header',\n    filterOptions = {},\n    defaultFilteredValues = {},\n    pagination,\n    bordered = false,\n    maxHeight,\n    maxWidth,\n    scrollToFirstRowOnChange = true,\n    size = 'middle',\n    mode = 'client-side',\n    nClicksButton = 0,\n    nDoubleClicksCell = 0,\n    summaryRowContents,\n    summaryRowBlankColumns = 0,\n    summaryRowFixed = false,\n    customFormatFuncs,\n    conditionalStyleFuncs = {},\n    expandedRowKeyToContent,\n    expandedRowWidth,\n    expandRowByClick = false,\n    defaultExpandedRowKeys,\n    expandedRowKeys,\n    enableCellClickListenColumns = [],\n    nClicksCell = 0,\n    nContextMenuClicksCell = 0,\n    emptyContent,\n    cellUpdateOptimize = false,\n    nClicksDropdownItem = 0,\n    hiddenRowKeys = [],\n    virtual = false,\n    title,\n    footer,\n    loading = false,\n    rowClassName,\n    selectedRowsSyncWithData = false,\n    setProps,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdTable\n                {...{\n                    id,\n                    className,\n                    style,\n                    key,\n                    locale,\n                    containerId,\n                    columns,\n                    showHeader,\n                    rowHoverable,\n                    tableLayout,\n                    miniChartHeight,\n                    miniChartAnimation,\n                    rowSelectionType,\n                    selectedRowKeys,\n                    rowSelectionWidth,\n                    rowSelectionCheckStrictly,\n                    rowSelectionIgnoreRowKeys,\n                    sticky,\n                    titlePopoverInfo,\n                    columnsFormatConstraint,\n                    enableHoverListen,\n                    data,\n                    sortOptions,\n                    showSorterTooltip,\n                    showSorterTooltipTarget,\n                    filterOptions,\n                    defaultFilteredValues,\n                    pagination,\n                    bordered,\n                    maxHeight,\n                    maxWidth,\n                    scrollToFirstRowOnChange,\n                    size,\n                    mode,\n                    nClicksButton,\n                    nDoubleClicksCell,\n                    summaryRowContents,\n                    summaryRowBlankColumns,\n                    summaryRowFixed,\n                    customFormatFuncs,\n                    conditionalStyleFuncs,\n                    expandedRowKeyToContent,\n                    expandedRowWidth,\n                    expandRowByClick,\n                    defaultExpandedRowKeys,\n                    expandedRowKeys,\n                    enableCellClickListenColumns,\n                    nClicksCell,\n                    nContextMenuClicksCell,\n                    emptyContent,\n                    cellUpdateOptimize,\n                    nClicksDropdownItem,\n                    hiddenRowKeys,\n                    virtual,\n                    title,\n                    footer,\n                    loading,\n                    rowClassName,\n                    selectedRowsSyncWithData,\n                    setProps,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdTable.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名\n     */\n    className: PropTypes.string,\n\n    /**\n     * 组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n     * 默认值：`'zh-cn'`\n     */\n    locale: PropTypes.oneOf(['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']),\n\n    /**\n     * 当表格渲染在具有滚动条的局部容器中时，指定该容器id，可避免出现部分表格内部展开层随滚动条滚动显示异常的问题\n     */\n    containerId: PropTypes.string,\n\n    /**\n     * 配置字段定义相关参数\n     */\n    columns: PropTypes.arrayOf(\n        PropTypes.shape({\n            /**\n             * 必填，当前字段标题\n             */\n            title: PropTypes.oneOfType([PropTypes.func, PropTypes.node])\n                .isRequired,\n            /**\n             * 必填，当前字段唯一识别id\n             */\n            dataIndex: PropTypes.string.isRequired,\n            /**\n             * 当前字段所属分组信息，用于渲染多级表头\n             */\n            group: PropTypes.oneOfType([\n                PropTypes.string,\n                PropTypes.arrayOf(PropTypes.string),\n            ]),\n            /**\n             * 配置字段[再渲染模式](/AntdTable-rerender)相关参数\n             */\n            renderOptions: PropTypes.exact({\n                /**\n                 * 再渲染类型，可选项有`'link'`、`'ellipsis'`、`'copyable'`、`'ellipsis-copyable'`、`'tags'`、`'status-badge'`、`'image'`\n                 * 、`'custom-format'`、`'corner-mark'`、`'row-merge'`、`'dropdown'`、`'dropdown-links'`、`'image-avatar'`\n                 * 、`'mini-line'`、`'mini-bar'`、`'mini-progress'`、`'mini-ring-progress'`、`'mini-area'`\n                 * 、`'button'`、`'checkbox'`、`'switch'`、`'select'`\n                 */\n                renderType: PropTypes.oneOf([\n                    // 内容展示类\n                    'link',\n                    'ellipsis',\n                    'copyable',\n                    'ellipsis-copyable',\n                    'tags',\n                    'status-badge',\n                    'image',\n                    'custom-format',\n                    'corner-mark',\n                    'row-merge',\n                    'dropdown',\n                    'dropdown-links',\n                    'image-avatar',\n                    // 迷你图类\n                    'mini-line',\n                    'mini-bar',\n                    'mini-progress',\n                    'mini-ring-progress',\n                    'mini-area',\n                    // 监听交互类\n                    'button',\n                    'checkbox',\n                    'switch',\n                    'select',\n                ]),\n                /**\n                 * 当`renderType='link'`时，统一设置渲染链接文本内容\n                 */\n                renderLinkText: PropTypes.string,\n                /**\n                 * 当`renderType`为`'link'`、`'button'`时，统一设置链接跳转行为是否采用`dcc.Link`模式\n                 * 默认值：`false`\n                 */\n                likeDccLink: PropTypes.bool,\n                /**\n                 * 当`renderType='button'`时，控制多个按钮之间是否添加分割线\n                 */\n                renderButtonSplit: PropTypes.bool,\n                /**\n                 * 当`renderType='button'`时，配置气泡确认框相关参数\n                 */\n                renderButtonPopConfirmProps: PropTypes.exact({\n                    /**\n                     * 气泡确认框标题\n                     */\n                    title: PropTypes.string,\n                    /**\n                     * 气泡确认框确认按钮文案\n                     */\n                    okText: PropTypes.string,\n                    /**\n                     * 气泡确认框取消按钮文案\n                     */\n                    cancelText: PropTypes.string,\n                }),\n                /**\n                 * 当`renderType`为`'mini-line'`、`'mini-area'`、`'mini-bar'`时，设置图表颜色\n                 */\n                miniChartColor: PropTypes.string,\n                /**\n                 * 当`renderType`为`'mini-line'`、`'mini-area'`、`'mini-bar'`时，设置用于渲染信息卡片的`javascript`函数字符串\n                 */\n                tooltipCustomContent: PropTypes.string,\n                /**\n                 * 当`renderType`为`'mini-progress'`、`'mini-ring-progress'`时，设置进度完成状态下的填充色\n                 */\n                progressOneHundredPercentColor: PropTypes.string,\n                /**\n                 * 当`renderType`为`'mini-progress'`时，设置进度条是否附带进度数值信息\n                 * 默认值：`false`\n                 */\n                progressShowPercent: PropTypes.bool,\n                /**\n                 * 当`renderType`为`'mini-progress'`时，设置进度条附带进度数值信息的小数位数，默认保持原始数值的精度\n                 */\n                progressPercentPrecision: PropTypes.number,\n                /**\n                 * 当`renderType`为`'mini-progress'`时，设置进度条附带进度数值信息显示的位置\n                 */\n                progressPercentPosition: PropTypes.shape({\n                    /**\n                     * 对齐方式，可选项有`'start'`、`'center'`、`'end'`\n                     */\n                    align: PropTypes.oneOf(['start', 'center', 'end']),\n                    /**\n                     * 内外位置，可选项有`'inner'`、`'outer'`\n                     */\n                    type: PropTypes.oneOf(['inner', 'outer']),\n                }),\n                /**\n                 * 当`renderType`为`'mini-progress'`时，设置进度条形状类型，可选项有`'square'`、`'round'`\n                 * 默认值：`'square'`\n                 */\n                progressStrokeLinecap: PropTypes.oneOf(['square', 'round']),\n                /**\n                 * 当`renderType`为`'mini-progress'`时，设置进度条像素尺寸\n                 */\n                progressSize: PropTypes.number,\n                /**\n                 * 当`renderType`为`'mini-progress'`时，设置进度条主体部分颜色，支持通过字段`'from'`、`'to'`配置渐变色\n                 */\n                progressColor: PropTypes.oneOfType([\n                    PropTypes.string,\n                    PropTypes.shape({\n                        /**\n                         * 渐变色起始颜色\n                         */\n                        from: PropTypes.string,\n                        /**\n                         * 渐变色结束颜色\n                         */\n                        to: PropTypes.string,\n                    }),\n                ]),\n                /**\n                 * 当`renderType='mini-ring-progress'`时，设置进度数值像素大小\n                 */\n                ringProgressFontSize: PropTypes.number,\n                /**\n                 * 当`renderType`为`'dropdown'`、`'dropdown-links'`时，配置下拉菜单相关参数\n                 */\n                dropdownProps: PropTypes.exact({\n                    /**\n                     * 下拉菜单锚点标题内容\n                     */\n                    title: PropTypes.string,\n                    /**\n                     * 下拉菜单是否显示指示箭头\n                     * 默认值：`false`\n                     */\n                    arrow: PropTypes.bool,\n                    /**\n                     * 是否整体禁用下拉菜单功能，优先级低于各记录值内部参数\n                     */\n                    disabled: PropTypes.bool,\n                    /**\n                     * 下拉菜单容器css类名\n                     */\n                    overlayClassName: PropTypes.string,\n                    /**\n                     * 下拉菜单容器css样式\n                     */\n                    overlayStyle: PropTypes.object,\n                    /**\n                     * 下拉菜单展开方向，可选项有`'bottomLeft'`、`'bottomCenter'`、`'bottomRight'`、`'topLeft'`、`'topCenter'`、`'topRight'`\n                     */\n                    placement: PropTypes.oneOf([\n                        'bottomLeft',\n                        'bottomCenter',\n                        'bottomRight',\n                        'topLeft',\n                        'topCenter',\n                        'topRight',\n                    ]),\n                }),\n            }),\n            /**\n             * 当前字段冻结方向，可选项有`'left'`、`'right'`，设置为`true`时等价于`'left'`\n             */\n            fixed: PropTypes.oneOfType([\n                PropTypes.oneOf(['left', 'right']),\n                PropTypes.bool,\n            ]),\n            /**\n             * 当前字段是否可编辑\n             * 默认值：`false`\n             */\n            editable: PropTypes.bool,\n            /**\n             * 配置可编辑模式下输入框相关参数\n             */\n            editOptions: PropTypes.exact({\n                /**\n                 * 编辑框模式，可选项有`'default'`、`'text-area'`\n                 * 默认值：`'default'`\n                 */\n                mode: PropTypes.oneOf(['default', 'text-area']),\n                /**\n                 * 当`mode='textarea'`时，配置文本框自适应高度相关功能，同`AntdInput`\n                 * 默认值：`false`\n                 */\n                autoSize: PropTypes.oneOfType([\n                    PropTypes.bool,\n                    PropTypes.exact({\n                        minRows: PropTypes.number,\n                        maxRows: PropTypes.number,\n                    }),\n                ]),\n                /**\n                 * 限制当前字段可编辑模式下，输入框内最多可输入的字符数量，默认无限制\n                 */\n                maxLength: PropTypes.number,\n                /**\n                 * 输入框无输入值时的占位提示信息\n                 */\n                placeholder: PropTypes.string,\n                /**\n                 * 当前字段下需进行输入框禁用的行记录`key`值列表\n                 */\n                disabledKeys: PropTypes.arrayOf(PropTypes.string),\n            }),\n            /**\n             * 当前字段对齐方式，可选项有`'left'`、`'center'`、`'right'`\n             * 默认值：`'center'`\n             */\n            align: PropTypes.oneOf(['left', 'center', 'right']),\n            /**\n             * 当前表头对齐方式，默认跟随当前字段对齐方式，可选项有`'left'`、`'center'`、`'right'`\n             * 默认值：`'center'`\n             */\n            headerAlign: PropTypes.oneOf(['left', 'center', 'right']),\n            /**\n             * 当前字段宽度\n             */\n            width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n            /**\n             * 控制当前字段最小宽度，仅当`tableLayout=\"auto\"`时有效\n             */\n            minWidth: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n            /**\n             * 是否隐藏当前字段\n             * 默认值：`false`\n             */\n            hidden: PropTypes.bool,\n            /**\n             * 当前字段css类名\n             */\n            className: PropTypes.string,\n            /**\n             * 当前字段初始化时的默认排序状态，可选项有`'ascend'`、`'descend'`\n             */\n            defaultSortOrder: PropTypes.oneOf(['ascend', 'descend']),\n            /**\n             * 若当前字段通过参数`defaultFilteredValues`设置了初始化默认选中的筛选值，用于设置是否在用户点击重置按钮后恢复默认选中筛选项\n             * 默认值：`false`\n             */\n            filterResetToDefaultFilteredValue: PropTypes.bool,\n        })\n    ),\n\n    /**\n     * 是否显示表头\n     * 默认值：`true`\n     */\n    showHeader: PropTypes.bool,\n\n    /**\n     * 表格行是否开启鼠标悬停样式效果\n     * 默认值：`true`\n     */\n    rowHoverable: PropTypes.bool,\n\n    /**\n     * 当`columns`中各字段未设置`width`时，用于控制整体字段宽度分配方式，可选项有`'auto'`、`'fixed'`\n     */\n    tableLayout: PropTypes.oneOf(['auto', 'fixed']),\n\n    /**\n     * 定义表格数据源，与`columns`对应\n     */\n    data: PropTypes.arrayOf(\n        PropTypes.objectOf(\n            PropTypes.oneOfType([\n                /**\n                 * 通过`children`向下嵌套行记录\n                 */\n                PropTypes.arrayOf(PropTypes.any),\n                /**\n                 * 组件型元素\n                 */\n                PropTypes.node,\n                /**\n                 * 常规模式、`'ellipsis'`模式、`'copyable'`模式、`'custom-format'`模式、`'ellipsis-copyable'`模式\n                 */\n                PropTypes.string,\n                /**\n                 * 常规模式、`'ellipsis'`模式、`'mini-prorgess'`模式、`mini-ring-progress`模式、`'copyable'`模式、`'custom-format'`模式，\n                 * 其中`mini-prorgess`模式、`'mini-ring-progress'`模式下输入值需在0~1之间\n                 */\n                PropTypes.number,\n                PropTypes.bool,\n                /**\n                 * `'link'`模式\n                 */\n                PropTypes.exact({\n                    /**\n                     * 适用于`'link'`模式，链接显示的文字内容，优先级高于字段配置信息中的`renderLinkText`参数\n                     */\n                    content: PropTypes.string,\n                    /**\n                     * 适用于`'link'`模式，链接地址\n                     */\n                    href: PropTypes.string,\n                    /**\n                     * 适用于`'link'`模式，链接跳转行为\n                     * 默认值：`'_blank'`\n                     */\n                    target: PropTypes.string,\n                    /**\n                     * 适用于`'link'`模式，是否禁用当前链接\n                     * 默认值：`false`\n                     */\n                    disabled: PropTypes.bool,\n                }),\n                /**\n                 * `'mini-line'`模式、`'mini-bar'`模式、`'mini-area'`模式\n                 */\n                PropTypes.arrayOf(PropTypes.number),\n                /**\n                 * `tags`模式\n                 */\n                PropTypes.oneOfType([\n                    /**\n                     * 渲染单个标签\n                     */\n                    PropTypes.exact({\n                        /**\n                         * 适用于`'tags'`模式，标签颜色\n                         */\n                        color: PropTypes.string,\n                        /**\n                         * 适用于`'tags'`模式，标签内容\n                         */\n                        tag: PropTypes.oneOfType([\n                            PropTypes.string,\n                            PropTypes.number,\n                        ]),\n                        /**\n                         * 适用于`'tags'`模式，为当前标签添加额外的文字提示功能\n                         */\n                        tooltip: PropTypes.shape({\n                            /**\n                             * 文字提示内容\n                             */\n                            title: PropTypes.string,\n                            /**\n                             * 文字提示弹出方向，可选项有`'top'`、`'left'`、`'right'`、`'bottom'`、`'topLeft'`、`'topRight'`、`'bottomLeft'`、`'bottomRight'`、`'leftTop'`、`'leftBottom'`、`'rightTop'`、`'rightBottom'`\n                             * 默认值：`'top'`\n                             */\n                            placement: PropTypes.oneOf([\n                                'top',\n                                'left',\n                                'right',\n                                'bottom',\n                                'topLeft',\n                                'topRight',\n                                'bottomLeft',\n                                'bottomRight',\n                            ]),\n                        }),\n                    }),\n                    /**\n                     * 渲染多个标签\n                     */\n                    PropTypes.arrayOf(\n                        PropTypes.exact({\n                            /**\n                             * 适用于`'tags'`模式，当前标签颜色\n                             */\n                            color: PropTypes.string,\n                            /**\n                             * 适用于`'tags'`模式，当前标签内容\n                             */\n                            tag: PropTypes.oneOfType([\n                                PropTypes.string,\n                                PropTypes.number,\n                            ]),\n                            /**\n                             * 适用于`'tags'`模式，为当前标签添加额外的文字提示功能\n                             */\n                            tooltip: PropTypes.shape({\n                                /**\n                                 * 文字提示内容\n                                 */\n                                title: PropTypes.string,\n                                /**\n                                 * 文字提示弹出方向，可选项有`'top'`、`'left'`、`'right'`、`'bottom'`、`'topLeft'`、`'topRight'`、`'bottomLeft'`、`'bottomRight'`、`'leftTop'`、`'leftBottom'`、`'rightTop'`、`'rightBottom'`\n                                 * 默认值：`'top'`\n                                 */\n                                placement: PropTypes.oneOf([\n                                    'top',\n                                    'left',\n                                    'right',\n                                    'bottom',\n                                    'topLeft',\n                                    'topRight',\n                                    'bottomLeft',\n                                    'bottomRight',\n                                ]),\n                            }),\n                        })\n                    ),\n                ]),\n                /**\n                 * `'button'`模式\n                 */\n                PropTypes.oneOfType([\n                    /**\n                     * 渲染单个按钮\n                     */\n                    PropTypes.exact({\n                        /**\n                         * 适用于`'button'`模式，同`AntdButton`中的同名参数\n                         */\n                        disabled: PropTypes.bool,\n                        /**\n                         * 适用于`'button'`模式，同`AntdButton`中的同名参数\n                         */\n                        type: PropTypes.oneOf([\n                            'primary',\n                            'ghost',\n                            'dashed',\n                            'link',\n                            'text',\n                            'default',\n                        ]),\n                        /**\n                         * 适用于`'button'`模式，同`AntdButton`中的同名参数\n                         */\n                        color: PropTypes.oneOf([\n                            'default',\n                            'primary',\n                            'danger',\n                            'blue',\n                            'purple',\n                            'cyan',\n                            'green',\n                            'magenta',\n                            'pink',\n                            'red',\n                            'orange',\n                            'yellow',\n                            'volcano',\n                            'geekblue',\n                            'lime',\n                            'gold',\n                        ]),\n                        /**\n                         * 适用于`'button'`模式，同`AntdButton`中的同名参数\n                         */\n                        variant: PropTypes.oneOf([\n                            'outlined',\n                            'dashed',\n                            'solid',\n                            'filled',\n                            'text',\n                            'link',\n                        ]),\n                        /**\n                         * 适用于`'button'`模式，同`AntdButton`中的同名参数\n                         */\n                        danger: PropTypes.bool,\n                        /**\n                         * 适用于`'button'`模式，同`AntdButton`中的同名参数\n                         */\n                        style: PropTypes.object,\n                        /**\n                         * 适用于`'button'`模式，按钮内容\n                         */\n                        content: PropTypes.string,\n                        /**\n                         * 适用于`'button'`模式，同`AntdButton`中的同名参数\n                         */\n                        href: PropTypes.string,\n                        /**\n                         * 适用于`'button'`模式，同`AntdButton`中的同名参数\n                         */\n                        target: PropTypes.string,\n                        /**\n                         * 适用于`'button'`模式，用于为当前按钮配置气泡确认框相关参数，优先级更高\n                         */\n                        popConfirmProps: PropTypes.exact({\n                            /**\n                             * 气泡确认框标题\n                             */\n                            title: PropTypes.string,\n                            /**\n                             * 气泡确认框确认按钮文案\n                             */\n                            okText: PropTypes.string,\n                            /**\n                             * 气泡确认框取消按钮文案\n                             */\n                            cancelText: PropTypes.string,\n                        }),\n                        /**\n                         * 适用于`'button'`模式，按钮前缀图标类型，`iconRenderer`为`'AntdIcon'`时同`AntdIcon`同名参数，`iconRenderer`为`'fontawesome'`时为css类名\n                         */\n                        icon: PropTypes.string,\n                        /**\n                         * 适用于`'button'`模式，按钮前缀图标渲染方式，可选项有`'AntdIcon'`、`'fontawesome'`\n                         */\n                        iconRenderer: PropTypes.oneOf([\n                            'AntdIcon',\n                            'fontawesome',\n                        ]),\n                        /**\n                         * 适用于`'button'`模式，为当前按钮添加额外的文字提示功能\n                         */\n                        tooltip: PropTypes.shape({\n                            /**\n                             * 文字提示内容\n                             */\n                            title: PropTypes.string,\n                            /**\n                             * 文字提示弹出方向，可选项有`'top'`、`'left'`、`'right'`、`'bottom'`、`'topLeft'`、`'topRight'`、`'bottomLeft'`、`'bottomRight'`、`'leftTop'`、`'leftBottom'`、`'rightTop'`、`'rightBottom'`\n                             * 默认值：`'top'`\n                             */\n                            placement: PropTypes.oneOf([\n                                'top',\n                                'left',\n                                'right',\n                                'bottom',\n                                'topLeft',\n                                'topRight',\n                                'bottomLeft',\n                                'bottomRight',\n                            ]),\n                        }),\n                        /**\n                         * 适用于`'button'`模式，额外补充信息\n                         */\n                        custom: PropTypes.any,\n                    }),\n                    /**\n                     * 渲染多个按钮\n                     */\n                    PropTypes.arrayOf(\n                        PropTypes.exact({\n                            /**\n                             * 适用于`'button'`模式，同`AntdButton`中的同名参数\n                             */\n                            disabled: PropTypes.bool,\n                            /**\n                             * 适用于`'button'`模式，同`AntdButton`中的同名参数\n                             */\n                            type: PropTypes.oneOf([\n                                'primary',\n                                'ghost',\n                                'dashed',\n                                'link',\n                                'text',\n                                'default',\n                            ]),\n                            /**\n                             * 适用于`'button'`模式，同`AntdButton`中的同名参数\n                             */\n                            danger: PropTypes.bool,\n                            /**\n                             * 适用于`'button'`模式，同`AntdButton`中的同名参数\n                             */\n                            style: PropTypes.object,\n                            /**\n                             * 适用于`'button'`模式，按钮内容\n                             */\n                            content: PropTypes.string,\n                            /**\n                             * 适用于`'button'`模式，同`AntdButton`中的同名参数\n                             */\n                            href: PropTypes.string,\n                            /**\n                             * 适用于`'button'`模式，同`AntdButton`中的同名参数\n                             */\n                            target: PropTypes.string,\n                            /**\n                             * 适用于`'button'`模式，当前按钮前缀图标类型，`iconRenderer`为`'AntdIcon'`时同`AntdIcon`同名参数，`iconRenderer`为`'fontawesome'`时为css类名\n                             */\n                            icon: PropTypes.string,\n                            /**\n                             * 适用于`'button'`模式，当前按钮前缀图标渲染方式，可选项有`'AntdIcon'`、`'fontawesome'`\n                             */\n                            iconRenderer: PropTypes.oneOf([\n                                'AntdIcon',\n                                'fontawesome',\n                            ]),\n                            /**\n                             * 适用于`'button'`模式，额外补充信息\n                             */\n                            custom: PropTypes.any,\n                        })\n                    ),\n                ]),\n                /**\n                 * `'status-badge'`模式\n                 */\n                PropTypes.exact({\n                    /**\n                     * 适用于`'status-badge'`模式，状态徽标状态，可选项有`'success'`、`'processing'`、`'default'`、`'error'`、`'warning'`\n                     */\n                    status: PropTypes.oneOf([\n                        'success',\n                        'processing',\n                        'default',\n                        'error',\n                        'warning',\n                    ]),\n                    /**\n                     * 适用于`'status-badge'`模式，状态徽标标签内容\n                     */\n                    text: PropTypes.oneOfType([\n                        PropTypes.string,\n                        PropTypes.number,\n                    ]),\n                }),\n                /**\n                 * `'image'`模式\n                 */\n                PropTypes.exact({\n                    /**\n                     * 适用于`'image'`模式，图片资源地址\n                     */\n                    src: PropTypes.string,\n                    /**\n                     * 适用于`'image'`模式，图片高度\n                     */\n                    height: PropTypes.oneOfType([\n                        PropTypes.string,\n                        PropTypes.number,\n                    ]),\n                    /**\n                     * 适用于`'image'`模式，图片是否可交互预览\n                     * 默认值：`true`\n                     */\n                    preview: PropTypes.bool,\n                }),\n                /**\n                 * `'corner-mark'`模式\n                 */\n                PropTypes.exact({\n                    /**\n                     * 适用于`'corner-mark'`模式，角标显示方位，可选项有`'top-left'`、`'top-right'`、`'bottom-left'`、`'bottom-right'`\n                     */\n                    placement: PropTypes.oneOf([\n                        'top-left',\n                        'top-right',\n                        'bottom-left',\n                        'bottom-right',\n                    ]),\n                    /**\n                     * 适用于`'corner-mark'`模式，角标颜色\n                     * 默认值：`'#1890ff'`\n                     */\n                    color: PropTypes.string,\n                    /**\n                     * 适用于`'corner-mark'`模式，单元格数值内容\n                     */\n                    content: PropTypes.oneOfType([\n                        PropTypes.number,\n                        PropTypes.string,\n                    ]),\n                    /**\n                     * 适用于`'corner-mark'`模式，角标水平方向像素偏移量\n                     */\n                    offsetX: PropTypes.number,\n                    /**\n                     * 适用于`'corner-mark'`模式，角标竖直方向像素偏移量\n                     */\n                    offsetY: PropTypes.number,\n                    /**\n                     * 适用于`'corner-mark'`模式，是否隐藏当前角标\n                     * 默认值：`false`\n                     */\n                    hide: PropTypes.bool,\n                }),\n                /**\n                 * `'checkbox'`模式\n                 */\n                PropTypes.exact({\n                    /**\n                     * 适用于`'checkbox'`模式，当前勾选框状态\n                     */\n                    checked: PropTypes.bool,\n                    /**\n                     * 适用于`'checkbox'`模式，是否禁用当前勾选框\n                     */\n                    disabled: PropTypes.bool,\n                    /**\n                     * 适用于`'checkbox'`模式，当前勾选框标签内容\n                     */\n                    label: PropTypes.string,\n                    /**\n                     * 适用于`'checkbox'`模式，额外补充信息\n                     */\n                    custom: PropTypes.any,\n                }),\n                /**\n                 * `'switch'`模式\n                 */\n                PropTypes.exact({\n                    /**\n                     * 适用于`'switch'`模式，当前开关状态\n                     */\n                    checked: PropTypes.bool,\n                    /**\n                     * 适用于`'switch'`模式，是否禁用当前开关\n                     */\n                    disabled: PropTypes.bool,\n                    /**\n                     * 适用于`'switch'`模式，“开”状态标签内容\n                     */\n                    checkedChildren: PropTypes.string,\n                    /**\n                     * 适用于`'switch'`模式，“关”状态标签内容\n                     */\n                    unCheckedChildren: PropTypes.string,\n                    /**\n                     * 适用于`'switch'`模式，额外补充信息\n                     */\n                    custom: PropTypes.any,\n                }),\n                /**\n                 * `'row-merge'`模式\n                 */\n                PropTypes.exact({\n                    /**\n                     * 适用于`'row-merge'`模式，单元格数值内容\n                     */\n                    content: PropTypes.oneOfType([\n                        PropTypes.number,\n                        PropTypes.string,\n                    ]),\n                    /**\n                     * 适用于`'row-merge'`模式，从当前单元格开始，向后合并的其他单元格数量\n                     */\n                    rowSpan: PropTypes.number,\n                }),\n                /**\n                 * `'dropdown'`模式\n                 */\n                PropTypes.arrayOf(\n                    PropTypes.exact({\n                        /**\n                         * 适用于`'dropdown'`模式，当前下拉菜单项锚点内容\n                         */\n                        title: PropTypes.string,\n                        /**\n                         * 适用于`'dropdown'`模式，是否禁用当前下拉菜单项\n                         */\n                        disabled: PropTypes.bool,\n                        /**\n                         * 适用于`'dropdown'`模式，当前按钮前缀图标类型，`iconRenderer`为`'AntdIcon'`时同`AntdIcon`同名参数，`iconRenderer`为`'fontawesome'`时为css类名\n                         */\n                        icon: PropTypes.string,\n                        /**\n                         * 适用于`'dropdown'`模式，当前按钮前缀图标渲染方式，可选项有`'AntdIcon'`、`'fontawesome'`\n                         */\n                        iconRenderer: PropTypes.oneOf([\n                            'AntdIcon',\n                            'fontawesome',\n                        ]),\n                        /**\n                         * 适用于`'dropdown'`模式，额外补充信息\n                         */\n                        custom: PropTypes.any,\n                        /**\n                         * 适用于`'dropdown'`模式，当前项是否渲染为分割线\n                         * 默认值：`false`\n                         */\n                        isDivider: PropTypes.bool,\n                    })\n                ),\n                /**\n                 * `'dropdown-links'`模式\n                 */\n                PropTypes.arrayOf(\n                    PropTypes.exact({\n                        /**\n                         * 适用于`'dropdown-links'`模式，当前下拉菜单项锚点内容\n                         */\n                        title: PropTypes.string,\n                        /**\n                         * 适用于`'dropdown-links'`模式，当前下拉菜单项链接地址\n                         */\n                        href: PropTypes.string,\n                        /**\n                         * 适用于`'dropdown-links'`模式，是否禁用当前下拉菜单项\n                         */\n                        disabled: PropTypes.bool,\n                        /**\n                         * 适用于`'dropdown-links'`模式，当前按钮前缀图标类型，`iconRenderer`为`'AntdIcon'`时同`AntdIcon`同名参数，`iconRenderer`为`'fontawesome'`时为css类名\n                         */\n                        icon: PropTypes.string,\n                        /**\n                         * 适用于`'dropdown-links'`模式，当前按钮前缀图标渲染方式，可选项有`'AntdIcon'`、`'fontawesome'`\n                         */\n                        iconRenderer: PropTypes.oneOf([\n                            'AntdIcon',\n                            'fontawesome',\n                        ]),\n                        /**\n                         * 适用于`'dropdown-links'`模式，当前项是否渲染为分割线\n                         * 默认值：`false`\n                         */\n                        isDivider: PropTypes.bool,\n                    })\n                ),\n                /**\n                 * `'image-avatar'`模式\n                 */\n                PropTypes.exact({\n                    /**\n                     * 适用于`'image-avatar'`模式，头像图片资源链接\n                     */\n                    src: PropTypes.string,\n                    /**\n                     * 适用于`'image-avatar'`模式，头像尺寸规格，传入数值型时表示像素大小，传入字符型时可使用内置尺寸规格，可选项有`'small'`、`'default'`、`'large'`，支持响应式\n                     * 默认值：`'default'`\n                     */\n                    size: PropTypes.oneOfType([\n                        PropTypes.number,\n                        PropTypes.oneOf(['large', 'small', 'default']),\n                        PropTypes.exact({\n                            xs: PropTypes.number,\n                            sm: PropTypes.number,\n                            md: PropTypes.number,\n                            lg: PropTypes.number,\n                            xl: PropTypes.number,\n                            xxl: PropTypes.number,\n                        }),\n                    ]),\n                    /**\n                     * 适用于`'image-avatar'`模式，头像形状，可选项有`'circle'`、`'square'`\n                     * 默认值：`'circle'`\n                     */\n                    shape: PropTypes.oneOf(['circle', 'square']),\n                }),\n                /**\n                 * `'select'`模式\n                 */\n                PropTypes.exact({\n                    /**\n                     * 适用于`'select'`模式，下拉选择css类名\n                     */\n                    className: PropTypes.string,\n                    /**\n                     * 适用于`'select'`模式，下拉选择css样式，其中`width`默认为`'100%'`\n                     */\n                    style: PropTypes.object,\n                    /**\n                     * 适用于`'select'`模式，定义下拉选择选项\n                     */\n                    options: PropTypes.arrayOf(\n                        PropTypes.exact({\n                            /**\n                             * 当前选项标题\n                             */\n                            label: PropTypes.string,\n                            /**\n                             * 当前选项值\n                             */\n                            value: PropTypes.oneOfType([\n                                PropTypes.string,\n                                PropTypes.number,\n                            ]),\n                        })\n                    ),\n                    /**\n                     * 适用于`'select'`模式，下拉选择菜单像素高度\n                     * 默认值：`256`\n                     */\n                    listHeight: PropTypes.number,\n                    /**\n                     * 适用于`'select'`模式，选择模式，可选项有`'multiple'`、`'tags'`，默认为单选模式\n                     */\n                    mode: PropTypes.oneOf(['multiple', 'tags']),\n                    /**\n                     * 适用于`'select'`模式，是否禁用当前下拉选择\n                     */\n                    disabled: PropTypes.bool,\n                    /**\n                     * 适用于`'select'`模式，下拉选择尺寸规格，可选项有`'small'`、`'middle'`、`'large'`\n                     * 默认值：`'middle'`\n                     */\n                    size: PropTypes.oneOf(['small', 'middle', 'large']),\n                    /**\n                     * 适用于`'select'`模式，是否渲染边框\n                     * 默认值：`true`\n                     */\n                    bordered: PropTypes.bool,\n                    /**\n                     * 适用于`'select'`模式，选择框占位内容\n                     */\n                    placeholder: PropTypes.string,\n                    /**\n                     * 适用于`'select'`模式，下拉菜单展开方向，可选项有`'bottomLeft'`、`'bottomRight'`、`'topLeft'`、`'topRight'`\n                     * 默认值：`'bottomLeft'`\n                     */\n                    placement: PropTypes.oneOf([\n                        'bottomLeft',\n                        'bottomRight',\n                        'topLeft',\n                        'topRight',\n                    ]),\n                    /**\n                     * 适用于`'select'`模式，下拉选择已选中值\n                     */\n                    value: PropTypes.oneOfType([\n                        PropTypes.oneOfType([\n                            PropTypes.string,\n                            PropTypes.number,\n                        ]),\n                        PropTypes.arrayOf(\n                            PropTypes.oneOfType([\n                                PropTypes.string,\n                                PropTypes.number,\n                            ])\n                        ),\n                    ]),\n                    /**\n                     * 适用于`'select'`模式，最多显示的已选中选项数量，超出部分将会自动省略\n                     * 默认值：`5`\n                     */\n                    maxTagCount: PropTypes.oneOfType([\n                        PropTypes.number,\n                        PropTypes.oneOf(['responsive']),\n                    ]),\n                    /**\n                     * 适用于`'select'`模式，选择框内搜索对应的目标字段，可选项有`'value'`、`'label'`\n                     * 默认值：`'value'`\n                     */\n                    optionFilterProp: PropTypes.oneOf(['value', 'label']),\n                    /**\n                     * 适用于`'select'`模式，是否允许快捷清空已选项\n                     * 默认值：`true`\n                     */\n                    allowClear: PropTypes.bool,\n                    /**\n                     * 适用于`'select'`模式，是否开启输入框可搜索功能\n                     */\n                    showSearch: PropTypes.bool,\n                }),\n                /**\n                 * 兼容携带自定义数据的场景\n                 */\n                PropTypes.object,\n            ])\n        )\n    ),\n\n    /**\n     * 是否渲染框线\n     * 默认值：`false`\n     */\n    bordered: PropTypes.bool,\n\n    /**\n     * 表格最大像素高度，当实际表格高度超出限制时，会自动渲染竖直滚动条\n     */\n    maxHeight: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n    /**\n     * 表格最大宽度，当实际表格宽度超出限制时，会自动渲染水平滚动条\n     */\n    maxWidth: PropTypes.oneOfType([\n        PropTypes.number,\n        PropTypes.string,\n        PropTypes.bool,\n    ]),\n\n    /**\n     * 当分页、排序、筛选操作触发表格变化后，是否滚动到表格顶部\n     * 默认值：`true`\n     */\n    scrollToFirstRowOnChange: PropTypes.bool,\n\n    /**\n     * 表格单元格尺寸规格，可选项有`'small'`、`'middle'`、`'large'`\n     */\n    size: PropTypes.oneOf(['small', 'middle', 'large']),\n\n    /**\n     * 行选择模式，可选项有`'checkbox'`（多选）、`'radio'`（单选），默认不开启行选择功能\n     */\n    rowSelectionType: PropTypes.oneOf(['checkbox', 'radio']),\n\n    /**\n     * 监听已选行对应`key`值\n     */\n    selectedRowKeys: PropTypes.arrayOf(\n        PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n    ),\n\n    /**\n     * 监听已选行记录\n     */\n    selectedRows: PropTypes.array,\n\n    /**\n     * 行选择控件所在列宽度\n     * 默认值：`32`\n     */\n    rowSelectionWidth: PropTypes.oneOfType([\n        PropTypes.string,\n        PropTypes.number,\n    ]),\n\n    /**\n     * 针对嵌套行，各行与其所嵌套的内部行之间的行选择行为是否互相独立\n     * 默认值：`true`\n     */\n    rowSelectionCheckStrictly: PropTypes.bool,\n\n    /**\n     * 指定不可被选中的行对应`key`值\n     */\n    rowSelectionIgnoreRowKeys: PropTypes.arrayOf(\n        PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n    ),\n\n    /**\n     * 当表格数据源`data`更新时，是否根据当前有效的`selectedRowKeys`参数对`selectedRows`中的数据进行同步更新\n     * 默认值：`false`\n     */\n    selectedRowsSyncWithData: PropTypes.bool,\n\n    /**\n     * 配置粘性表头相关功能\n     * 默认值：`false`\n     */\n    sticky: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.exact({\n            /**\n             * 粘性表头附着目标元素对应的选择器规则字符串，设置后，粘性表头激活后将附着在目标元素下方\n             */\n            belowSelector: PropTypes.oneOfType([\n                PropTypes.string,\n                PropTypes.arrayOf(PropTypes.string),\n            ]),\n            /**\n             * 粘性表头竖直方向上的像素偏移量\n             */\n            offsetHeader: PropTypes.number,\n            /**\n             * 粘性表头底部横向滚动条竖直方向上的像素偏移量\n             */\n            offsetScroll: PropTypes.number,\n        }),\n    ]),\n\n    /**\n     * 是否启用行鼠标移入/移出事件监听，开启后可能会影响到部分其他功能，请根据实际情况进行使用\n     * 默认值：`false`\n     */\n    enableHoverListen: PropTypes.bool,\n\n    /**\n     * 当`enableHoverListen=True`时，监听最近一次鼠标移入的字段对应`dataIndex`信息\n     */\n    recentlyMouseEnterColumnDataIndex: PropTypes.string,\n\n    /**\n     * 当`enableHoverListen=True`时，监听最近一次鼠标移入的行对应`key`信息\n     */\n    recentlyMouseEnterRowKey: PropTypes.oneOfType([\n        PropTypes.string,\n        PropTypes.number,\n    ]),\n\n    /**\n     * 当`enableHoverListen=True`时，监听最近一次鼠标移入的行数据信息\n     */\n    recentlyMouseEnterRow: PropTypes.object,\n\n    /**\n     * 配置各字段标题额外气泡说明卡片信息相关参数\n     */\n    titlePopoverInfo: PropTypes.objectOf(\n        PropTypes.exact({\n            /**\n             * 气泡卡片标题，支持字符串或组件型\n             */\n            title: PropTypes.string,\n            /**\n             * 气泡卡片内容，支持字符串或组件型\n             */\n            content: PropTypes.string,\n            /**\n             * 气泡卡片弹出方位，可选项有`'top'`、`'left'`、`'right'`、`'bottom'`、`'topLeft'`、`'topRight'`、`'bottomLeft'`、`'bottomRight'`、`'leftTop'`、`'leftBottom'`、`'rightTop'`、`'rightBottom'`\n             * 默认值：`'bottom'`\n             */\n            placement: PropTypes.oneOf([\n                'top',\n                'left',\n                'right',\n                'bottom',\n                'topLeft',\n                'topRight',\n                'bottomLeft',\n                'bottomRight',\n                'leftTop',\n                'leftBottom',\n                'rightTop',\n                'rightBottom',\n            ]),\n            /**\n             * 气泡卡片展开层css样式\n             */\n            overlayStyle: PropTypes.object,\n        })\n    ),\n\n    /**\n     * 针对开启了可编辑模式的字段，配置基于正则表达式的输入内容格式校验约束规则\n     */\n    columnsFormatConstraint: PropTypes.objectOf(\n        PropTypes.exact({\n            /**\n             * 正则表达式，用于校验输入内容是否符合格式要求\n             */\n            rule: PropTypes.string,\n            /**\n             * 用户输入内容校验失败时的提示说明信息\n             */\n            content: PropTypes.string,\n        })\n    ),\n\n    /**\n     * 配置表格字段排序相关功能\n     */\n    sortOptions: PropTypes.exact({\n        /**\n         * 参与排序的若干字段`dataIndex`数组，多字段组合排序时，数组顺序即为组合排序优先级顺序，由高到低\n         */\n        sortDataIndexes: PropTypes.arrayOf(PropTypes.string),\n        /**\n         * 是否启用多字段组合排序，当设置为`'auto'`时表示自动组合排序，此时组合排序的字段优先级顺序与用户依次点击排序字段的顺序对应\n         * 默认值：`false``\n         */\n        multiple: PropTypes.oneOfType([\n            PropTypes.bool,\n            PropTypes.oneOf(['auto']),\n        ]),\n        /**\n         * 为各字段指定排序比较模式，可选项有`'number'`（强制数值型排序）、`'custom'`（自定义排序）\n         */\n        forceCompareModes: PropTypes.objectOf(\n            PropTypes.oneOf(['number', 'custom'])\n        ),\n        /**\n         * 当`forceCompareModes`为`'custom'`时，用于为相应字段设置自定义排序对应的元素顺序\n         */\n        customOrders: PropTypes.objectOf(PropTypes.array),\n    }),\n\n    /**\n     * 针对可排序字段是否在鼠标移入表头后展示额外信息提示\n     * 默认值：`true`\n     */\n    showSorterTooltip: PropTypes.bool,\n\n    /**\n     * 控制可排序字段表头额外信息提示的鼠标移入触发目标，可选项有`'full-header'`、`'sorter-icon'`\n     * 默认值：`'full-header'`\n     */\n    showSorterTooltipTarget: PropTypes.oneOf(['full-header', 'sorter-icon']),\n\n    /**\n     * 配置表格字段筛选相关功能\n     */\n    filterOptions: PropTypes.objectOf(\n        PropTypes.exact({\n            /**\n             * 筛选模式，可选项有`'checkbox'`、`'keyword'`、`'tree'`，其中`'tree'`模式需要依赖相应的`'filterCustomTreeItems'`参数进行自定义树形菜单结构的构造\n             * 默认值：`'checkbox'`\n             */\n            filterMode: PropTypes.oneOf(['checkbox', 'keyword', 'tree']),\n            /**\n             * `filterMode`为`'checkbox'`时，用于自定义筛选菜单项\n             */\n            filterCustomItems: PropTypes.oneOfType([\n                PropTypes.arrayOf([PropTypes.string, PropTypes.number]),\n                PropTypes.any,\n            ]),\n            /**\n             * `filterMode`为`'tree'`时，用于构造自定义树形菜单结构\n             */\n            filterCustomTreeItems: PropTypes.arrayOf(PropTypes.object),\n            /**\n             * `filterMode`为`'checkbox'`时，是否开启多选模式\n             * 默认值：`true`\n             */\n            filterMultiple: PropTypes.bool,\n            /**\n             * `filterMode`为`'checkbox'`时，是否开启搜索框\n             * 默认值：`false`\n             */\n            filterSearch: PropTypes.bool,\n        })\n    ),\n\n    /**\n     * 字段筛选相关字段默认选中的筛选值\n     */\n    defaultFilteredValues: PropTypes.objectOf(PropTypes.array),\n\n    /**\n     * 配置表格翻页相关功能，设置为`false`时将关闭分页相关功能\n     */\n    pagination: PropTypes.oneOfType([\n        PropTypes.exact({\n            /**\n             * 分页组件渲染方位，可选项有`'topLeft'`、`'topCenter'`、`'topRight'`、`'bottomLeft'`、`'bottomCenter'`、`'bottomRight'`\n             * 默认值：`'bottomRight'`\n             */\n            position: PropTypes.oneOf([\n                'topLeft',\n                'topCenter',\n                'topRight',\n                'bottomLeft',\n                'bottomCenter',\n                'bottomRight',\n            ]),\n            /**\n             * 监听或设置每页允许显示的最大行记录数量\n             */\n            pageSize: PropTypes.number,\n            /**\n             * 监听或设置当前页码\n             */\n            current: PropTypes.number,\n            /**\n             * 是否显示`pageSize`切换控件，当表格总记录数量大于50时默认为`true`\n             */\n            showSizeChanger: PropTypes.bool,\n            /**\n             * `pageSize`切换控件的可选项\n             */\n            pageSizeOptions: PropTypes.arrayOf(PropTypes.number),\n            /**\n             * 各页码在鼠标移入时，是否显示浏览器原生提示信息\n             * 默认值：`true`\n             */\n            showTitle: PropTypes.bool,\n            /**\n             * 是否渲染快捷跳页控件\n             * 默认值：`false`\n             */\n            showQuickJumper: PropTypes.bool,\n            /**\n             * 总记录描述文案前缀文字\n             */\n            showTotalPrefix: PropTypes.string,\n            /**\n             * 总记录描述文案后缀文字\n             */\n            showTotalSuffix: PropTypes.string,\n            /**\n             * 是否在数据行数量不足一页时，自动隐藏分页相关控件\n             * 默认值：`false`\n             */\n            hideOnSinglePage: PropTypes.bool,\n            /**\n             * 是否开启简洁模式\n             * 默认值：`false`\n             */\n            simple: PropTypes.bool,\n            /**\n             * 是否禁用分页相关控件\n             * 默认值：`false`\n             */\n            disabled: PropTypes.bool,\n            /**\n             * 分页控件尺寸规格，可选项有`'small'`、`'default'`\n             * 默认值：`'default'`\n             */\n            size: PropTypes.oneOf(['default', 'small']),\n            /**\n             * 手动设置总记录数量，通常配合[服务端数据加载模式](/AntdTable-server-side-mode)使用\n             */\n            total: PropTypes.number,\n            /**\n             * 是否优先展示较少的跳页项\n             * 默认值：`false`\n             */\n            showLessItems: PropTypes.bool,\n        }),\n        PropTypes.bool,\n    ]),\n\n    /**\n     * 监听经过编辑修改操作后，最新状态下的表格数据源\n     */\n    currentData: PropTypes.array,\n\n    /**\n     * 监听最近一次编辑修改操作，对应的被修改行记录数据\n     */\n    recentlyChangedRow: PropTypes.object,\n\n    /**\n     * 监听最近一次编辑修改操作，对应的被修改字段`dataIndex`信息\n     */\n    recentlyChangedColumn: PropTypes.string,\n\n    /**\n     * 监听排序操作相关行为参数\n     */\n    sorter: PropTypes.exact({\n        /**\n         * 监听排序涉及的字段`dataIndex`信息\n         */\n        columns: PropTypes.arrayOf(PropTypes.string),\n        /**\n         * 监听排序涉及的字段对应排序方式，其中`'ascend'`表示升序，`'descend'`表示降序\n         */\n        orders: PropTypes.arrayOf(PropTypes.oneOf(['ascend', 'descend'])),\n    }),\n\n    /**\n     * 监听筛选操作相关行为参数\n     */\n    filter: PropTypes.object,\n\n    /**\n     * 表格数据加载控制方式，可选项有`'client-side'`（客户端加载）、`'server-side'`（服务端），其中服务端模式适用于大量数据展示需求，具体请参考[服务端数据加载模式](/AntdTable-server-side-mode)\n     * 默认值：`'client-side'`\n     */\n    mode: PropTypes.oneOf(['client-side', 'server-side']),\n\n    /**\n     * 配置总结栏内容，按数组顺序渲染\n     */\n    summaryRowContents: PropTypes.arrayOf(\n        PropTypes.shape({\n            /**\n             * 组件型，当前总结栏单元格内容\n             */\n            content: PropTypes.node,\n            /**\n             * 当前总结栏单元格横跨占据的字段数量\n             * 默认值：`1`\n             */\n            colSpan: PropTypes.number,\n            /**\n             * 当前总结栏列对齐方式，可选项有`'left'`、`'center'`、`'right'`\n             */\n            align: PropTypes.oneOf(['left', 'center', 'right']),\n        })\n    ),\n\n    /**\n     * 总结栏每行用于占位的列数，适用于同时使用行选择等功能的场景\n     * 默认值：`0`\n     */\n    summaryRowBlankColumns: PropTypes.number,\n\n    /**\n     * 总结栏是否启用固定布局功能，也可设置为`'top'`、`'bottom'`控制总结栏固定在顶部或底部\n     * 默认值：`false`\n     */\n    summaryRowFixed: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.oneOf(['top', 'bottom']),\n    ]),\n\n    /**\n     * 配置各字段条件格式化渲染对应的`javascript`函数字符串\n     */\n    conditionalStyleFuncs: PropTypes.objectOf(PropTypes.string),\n\n    /**\n     * 配置各数据行的行展开内容，键为数据行`key`值，值为对应行的展开内容\n     */\n    expandedRowKeyToContent: PropTypes.arrayOf(\n        PropTypes.exact({\n            key: PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n                .isRequired,\n            content: PropTypes.node,\n        })\n    ),\n\n    /**\n     * 行展开控件所在列宽度\n     */\n    expandedRowWidth: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n    /**\n     * 是否允许通过直接点击行的方式展开对应行\n     * 默认值：`false`\n     */\n    expandRowByClick: PropTypes.bool,\n\n    /**\n     * 初始化处于展开状态的行对应`key`值\n     */\n    defaultExpandedRowKeys: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 监听或设置处于展开状态的行对应`key`值\n     */\n    expandedRowKeys: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 是否启用单元格单击、双击、右键相关事件的监听，开启后可能会影响到部分其他功能，请根据实际情况进行使用\n     * 默认值：`false`\n     */\n    enableCellClickListenColumns: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 当`enableCellClickListenColumns=True`时，监听最近一次单元格单击事件对应的字段`dataIndex`\n     */\n    recentlyCellClickColumn: PropTypes.string,\n\n    /**\n     * 当`enableCellClickListenColumns=True`时，监听最近一次单元格单击事件对应的行记录信息\n     */\n    recentlyCellClickRecord: PropTypes.object,\n\n    /**\n     * 当`enableCellClickListenColumns=True`时，监听表格单元格单击事件累计发生次数\n     * 默认值：`0`\n     */\n    nClicksCell: PropTypes.number,\n\n    /**\n     * 当`enableCellClickListenColumns=True`时，监听最近一次表格单元格单击事件详细参数\n     */\n    cellClickEvent: PropTypes.exact({\n        /**\n         * 以页面整体左上角为原点，记录x坐标\n         */\n        pageX: PropTypes.number,\n        /**\n         * 以页面整体左上角为原点，记录y坐标\n         */\n        pageY: PropTypes.number,\n        /**\n         * 以浏览器窗口左上角为原点，记录x坐标\n         */\n        clientX: PropTypes.number,\n        /**\n         * 以浏览器窗口左上角为原点，记录y坐标\n         */\n        clientY: PropTypes.number,\n        /**\n         * 以屏幕左上角为原点，记录x坐标\n         */\n        screenX: PropTypes.number,\n        /**\n         * 以屏幕左上角为原点，记录y坐标\n         */\n        screenY: PropTypes.number,\n        /**\n         * 事件对应的时间戳\n         */\n        timestamp: PropTypes.number,\n    }),\n\n    /**\n     * 当`enableCellClickListenColumns=True`时，监听最近一次单元格双击事件对应的字段`dataIndex`\n     */\n    recentlyCellDoubleClickColumn: PropTypes.string,\n\n    /**\n     * 当`enableCellClickListenColumns=True`时，监听最近一次单元格双击事件对应的行记录信息\n     */\n    recentlyCellDoubleClickRecord: PropTypes.object,\n\n    /**\n     * 当`enableCellClickListenColumns=True`时，监听表格单元格双击事件累计发生次数\n     * 默认值：`0`\n     */\n    nDoubleClicksCell: PropTypes.number,\n\n    /**\n     * 当`enableCellClickListenColumns=True`时，监听最近一次表格单元格双击事件详细参数\n     */\n    cellDoubleClickEvent: PropTypes.exact({\n        /**\n         * 以页面整体左上角为原点，记录x坐标\n         */\n        pageX: PropTypes.number,\n        /**\n         * 以页面整体左上角为原点，记录y坐标\n         */\n        pageY: PropTypes.number,\n        /**\n         * 以浏览器窗口左上角为原点，记录x坐标\n         */\n        clientX: PropTypes.number,\n        /**\n         * 以浏览器窗口左上角为原点，记录y坐标\n         */\n        clientY: PropTypes.number,\n        /**\n         * 以屏幕左上角为原点，记录x坐标\n         */\n        screenX: PropTypes.number,\n        /**\n         * 以屏幕左上角为原点，记录y坐标\n         */\n        screenY: PropTypes.number,\n        /**\n         * 事件对应的时间戳\n         */\n        timestamp: PropTypes.number,\n    }),\n\n    /**\n     * 当`enableCellClickListenColumns=True`时，监听最近一次单元格右键事件对应的字段`dataIndex`\n     */\n    recentlyContextMenuClickColumn: PropTypes.string,\n\n    /**\n     * 当`enableCellClickListenColumns=True`时，监听最近一次单元格右键事件对应的行记录信息\n     */\n    recentlyContextMenuClickRecord: PropTypes.object,\n\n    /**\n     * 当`enableCellClickListenColumns=True`时，监听表格单元格右键事件累计发生次数\n     * 默认值：`0`\n     */\n    nContextMenuClicksCell: PropTypes.number,\n\n    /**\n     * 当`enableCellClickListenColumns=True`时，监听最近一次表格单元格右键事件详细参数\n     */\n    cellContextMenuClickEvent: PropTypes.exact({\n        /**\n         * 以页面整体左上角为原点，记录x坐标\n         */\n        pageX: PropTypes.number,\n        /**\n         * 以页面整体左上角为原点，记录y坐标\n         */\n        pageY: PropTypes.number,\n        /**\n         * 以浏览器窗口左上角为原点，记录x坐标\n         */\n        clientX: PropTypes.number,\n        /**\n         * 以浏览器窗口左上角为原点，记录y坐标\n         */\n        clientY: PropTypes.number,\n        /**\n         * 以屏幕左上角为原点，记录x坐标\n         */\n        screenX: PropTypes.number,\n        /**\n         * 以屏幕左上角为原点，记录y坐标\n         */\n        screenY: PropTypes.number,\n        /**\n         * 事件对应的时间戳\n         */\n        timestamp: PropTypes.number,\n    }),\n\n    /**\n     * 组件型，自定义空数据状态下，表格内的显示内容\n     */\n    emptyContent: PropTypes.node,\n\n    /**\n     * 是否严格启用单元格内容渲染优化，开启后，会基于单元格数据对单元格内容进行渲染优化，减少渲染次数\n     * 默认值：`false`\n     */\n    cellUpdateOptimize: PropTypes.bool,\n\n    /**\n     * 针对再渲染模式中的各迷你图模式，统一设置相关单元格像素高度\n     * 默认值：`30`\n     */\n    miniChartHeight: PropTypes.number,\n\n    /**\n     * 针对再渲染模式中的各迷你图模式，是否启用出场动画\n     * 默认值：`false`\n     */\n    miniChartAnimation: PropTypes.bool,\n\n    /**\n     * 针对再渲染模式中的`'button'`模式，监听最近一次按钮点击对应的行记录信息\n     */\n    recentlyButtonClickedRow: PropTypes.object,\n\n    /**\n     * 针对再渲染模式中的`'button'`模式，监听表格中按钮点击累计次数\n     * 默认值：`0`\n     */\n    nClicksButton: PropTypes.number,\n\n    /**\n     * 针对再渲染模式中的`'button'`模式，监听最近一次按钮点击对应的按钮文字内容\n     */\n    clickedContent: PropTypes.string,\n\n    /**\n     * 针对再渲染模式中的`'button'`模式，监听最近一次按钮点击对应的按钮数据项对应`'custom'`字段内容\n     */\n    clickedCustom: PropTypes.any,\n\n    /**\n     * 针对再渲染模式中的`'button'`模式，监听最近一次按钮点击对应的字段`dataIndex`\n     */\n    recentlyButtonClickedDataIndex: PropTypes.string,\n\n    /**\n     * 针对再渲染模式中的`'custom-format'`模式，键为对应字段`dataIndex`信息，值为对应的预处理`javascript`函数字符串\n     */\n    customFormatFuncs: PropTypes.objectOf(PropTypes.string),\n\n    /**\n     * 针对再渲染模式中的`'checkbox'`模式，监听最近发生勾选事件的记录行\n     */\n    recentlyCheckedRow: PropTypes.object,\n\n    /**\n     * 针对再渲染模式中的`'checkbox'`模式，监听最近发生勾选事件的勾选框标签内容\n     */\n    recentlyCheckedLabel: PropTypes.string,\n\n    /**\n     * 针对再渲染模式中的`'checkbox'`模式，监听最近发生勾选事件的字段`dataIndex`信息\n     */\n    recentlyCheckedDataIndex: PropTypes.string,\n\n    /**\n     * 针对再渲染模式中的`'checkbox'`模式，监听最近发生勾选事件对应的勾选状态\n     */\n    recentlyCheckedStatus: PropTypes.bool,\n\n    /**\n     * 针对再渲染模式中的`'switch'`模式，监听最近发生开关切换事件的记录行\n     */\n    recentlySwitchRow: PropTypes.object,\n\n    /**\n     * 针对再渲染模式中的`'switch'`模式，监听最近发生开关切换事件对应的开关状态\n     */\n    recentlySwitchDataIndex: PropTypes.string,\n\n    /**\n     * 针对再渲染模式中的`'switch'`模式，监听最近发生开关切换事件对应的开关状态\n     */\n    recentlySwitchStatus: PropTypes.bool,\n\n    /**\n     * 针对再渲染模式中的`'dropdown'`模式，监听表格中各下拉菜单项累计点击次数\n     */\n    nClicksDropdownItem: PropTypes.number,\n\n    /**\n     * 针对再渲染模式中的`'dropdown'`模式，监听最近一次被点击的下拉菜单项`title`值\n     */\n    recentlyClickedDropdownItemTitle: PropTypes.string,\n\n    /**\n     * 针对再渲染模式中的`'dropdown'`模式，监听最近一次被点击的下拉菜单项对应的字段dataIndex\n     */\n    recentlyDropdownItemClickedDataIndex: PropTypes.string,\n\n    /**\n     * 针对再渲染模式中的`'dropdown'`模式，监听最近一次被点击的下拉菜单项对应的行记录\n     */\n    recentlyDropdownItemClickedRow: PropTypes.object,\n\n    /**\n     * 针对再渲染模式中的`'select'`模式，监听最近发生下拉选项值更新的记录行\n     */\n    recentlySelectRow: PropTypes.object,\n\n    /**\n     * 针对再渲染模式中的`'select'`模式，监听最近发生下拉选项值更新对应的字段`dataIndex`\n     */\n    recentlySelectDataIndex: PropTypes.string,\n\n    /**\n     * 针对再渲染模式中的`'select'`模式，监听最近发生下拉选项值更新对应的选项值\n     */\n    recentlySelectValue: PropTypes.oneOfType([\n        PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n        PropTypes.arrayOf(\n            PropTypes.oneOfType([PropTypes.number, PropTypes.string])\n        ),\n    ]),\n\n    /**\n     * 需要进行隐藏的行记录`key`值数组\n     * 默认值：`[]`\n     */\n    hiddenRowKeys: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 是否在表格底层进行重绘时，通过深度比较数据源`data`变化情况，来进行表格重绘优化，适用于中小数据量表格\n     * 默认值：`false`\n     */\n    dataDeepCompare: PropTypes.bool,\n\n    /**\n     * 是否开启虚拟滚动模式\n     * 默认值：`false`\n     */\n    virtual: PropTypes.bool,\n\n    /**\n     * 组件型，表格整体标题内容\n     */\n    title: PropTypes.node,\n\n    /**\n     * 组件型，表格整体页脚内容\n     */\n    footer: PropTypes.node,\n\n    /**\n     * 是否启用表格自带加载中状态\n     * 默认值：`false`\n     */\n    loading: PropTypes.bool,\n\n    /**\n     * 表格行css类名，支持通过`func`字段定义`javascript`函数动态计算\n     */\n    rowClassName: PropTypes.oneOfType([\n        PropTypes.string,\n        PropTypes.shape({\n            /**\n             * 字符串形式的`javascript`函数\n             */\n            func: PropTypes.string,\n        }),\n    ]),\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdTable;\n\nexport const propTypes = AntdTable.propTypes;\nexport const defaultProps = AntdTable.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataDisplay/AntdTabs.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdTabs = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_display\" */ '../../fragments/dataDisplay/AntdTabs.react'\n        )\n);\n\n/**\n * 标签页组件AntdTabs\n */\nconst AntdTabs = ({\n    id,\n    className,\n    style,\n    key,\n    items,\n    disabledTabKeys = [],\n    tabBarLeftExtraContent,\n    tabBarRightExtraContent,\n    defaultActiveKey,\n    activeKey,\n    size = 'default',\n    tabPosition = 'top',\n    type = 'line',\n    centered = false,\n    indicator,\n    tabBarGutter,\n    tabBarStyle,\n    inkBarAnimated = true,\n    tabPaneAnimated = false,\n    destroyInactiveTabPane = false,\n    tabCloseCounts = 0,\n    placeholder,\n    setProps,\n    persistence,\n    persisted_props,\n    persistence_type,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdTabs\n                {...{\n                    id,\n                    className,\n                    style,\n                    key,\n                    items,\n                    disabledTabKeys,\n                    tabBarLeftExtraContent,\n                    tabBarRightExtraContent,\n                    defaultActiveKey,\n                    activeKey,\n                    size,\n                    tabPosition,\n                    type,\n                    centered,\n                    indicator,\n                    tabBarGutter,\n                    tabBarStyle,\n                    inkBarAnimated,\n                    tabPaneAnimated,\n                    destroyInactiveTabPane,\n                    tabCloseCounts,\n                    placeholder,\n                    setProps,\n                    persistence,\n                    persisted_props,\n                    persistence_type,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdTabs.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 标签页类型，可选项有`'line'`、`'card'`、`'editable-card'`\n     * 默认值：`'line'`\n     */\n    type: PropTypes.oneOf(['line', 'card', 'editable-card']),\n\n    /**\n     * 定义标签项\n     */\n    items: PropTypes.arrayOf(\n        PropTypes.exact({\n            /**\n             * 组件型，标签页标题\n             */\n            label: PropTypes.node,\n            /**\n             * 标签页唯一识别id\n             */\n            key: PropTypes.string,\n            /**\n             * 组件型，标签页内部元素\n             */\n            children: PropTypes.node,\n            /**\n             * 组件型，标签页图标元素\n             */\n            icon: PropTypes.node,\n            /**\n             * `'editable-card'`型标签页可用，用于自定义关闭按钮，设置为`None`或`false`时会隐藏默认的关闭按钮\n             */\n            closeIcon: PropTypes.oneOfType([PropTypes.bool, PropTypes.node]),\n            /**\n             * 是否在当前标签页隐藏时，自动销毁当前标签页内部元素\n             * 默认值：`false`\n             */\n            destroyInactiveTabPane: PropTypes.bool,\n            /**\n             * 是否禁用当前标签页\n             * 默认值：`false`\n             */\n            disabled: PropTypes.bool,\n            /**\n             * 初始化是否强制渲染当前标签页内部元素\n             * 默认值：`false`\n             */\n            forceRender: PropTypes.bool,\n            /**\n             * `'editable-card'`型标签页可用，控制当前标签页是否可被关闭\n             * 默认值：`true`\n             */\n            closable: PropTypes.bool,\n            /**\n             * 为当前标签页标题配置右键菜单相关参数\n             */\n            contextMenu: PropTypes.arrayOf(\n                PropTypes.exact({\n                    /**\n                     * 当前右键菜单项唯一标识id\n                     */\n                    key: PropTypes.string,\n                    /**\n                     * 当前右键菜单项标题\n                     */\n                    label: PropTypes.string,\n                    /**\n                     * 当前右键菜单项前缀图标类型，`iconRenderer`为`'AntdIcon'`时同`AntdIcon`同名参数，`iconRenderer`为`'fontawesome'`时为css类名\n                     */\n                    icon: PropTypes.string,\n                    /**\n                     * 当前右键菜单项前缀图标渲染方式，可选项有`'AntdIcon'`、`'fontawesome'`\n                     */\n                    iconRenderer: PropTypes.oneOf(['AntdIcon', 'fontawesome']),\n                })\n            ),\n        })\n    ),\n\n    /**\n     * 监听当前各标签页`key`值，顺序与`items`一致\n     */\n    itemKeys: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 监听或设置当前激活的标签页对应`key`值\n     */\n    activeKey: PropTypes.string,\n\n    /**\n     * 初始化激活的标签页对应`key`值\n     */\n    defaultActiveKey: PropTypes.string,\n\n    /**\n     * 呈现禁用状态的标签页`key`值数组，优先级高于`items`中各标签页的`disabled`设定\n     */\n    disabledTabKeys: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 标签页切换控件显示方位，可选项有`'top'`、`'left'`、`'right'`、`'bottom'`\n     * 默认值：`'top'`\n     */\n    tabPosition: PropTypes.oneOf(['top', 'left', 'right', 'bottom']),\n\n    /**\n     * 当前组件尺寸规格，可选项有`'small'`、`'default'`、`'large'`\n     * 默认值：'default'\n     */\n    size: PropTypes.oneOf(['small', 'default', 'large']),\n\n    /**\n     * 是否居中显示标签页切换控件\n     * 默认值：`false`\n     */\n    centered: PropTypes.bool,\n\n    /**\n     * 配置指示条长度及对齐方式\n     */\n    indicator: PropTypes.exact({\n        /**\n         * 指示条像素宽度，当传入负数时，表示在完整宽度基础上应减去的像素宽度，默认与标签卡片同宽\n         */\n        size: PropTypes.number,\n        /**\n         * 指示条对齐方式，可选项有`'start'`、`'center'`、`'end'`\n         */\n        align: PropTypes.oneOf(['start', 'center', 'end']),\n    }),\n\n    /**\n     * 标签卡片之间的像素间距\n     */\n    tabBarGutter: PropTypes.number,\n\n    /**\n     * 标签卡片css样式\n     */\n    tabBarStyle: PropTypes.object,\n\n    /**\n     * 标签卡片切换是否添加动画效果\n     * 默认值：`true`\n     */\n    inkBarAnimated: PropTypes.bool,\n\n    /**\n     * 标签内容切换是否添加动画效果\n     * 默认值：`false`\n     */\n    tabPaneAnimated: PropTypes.bool,\n\n    /**\n     * 监听最近一次删除操作对应的标签页`key`值\n     */\n    latestDeletePane: PropTypes.string,\n\n    /**\n     * 标签页关闭按钮累计点击次数\n     * 默认值：`0`\n     */\n    tabCloseCounts: PropTypes.number,\n\n    /**\n     * 组件型，第一方位额外元素\n     */\n    tabBarLeftExtraContent: PropTypes.node,\n\n    /**\n     * 组件型，第二方位额外元素\n     */\n    tabBarRightExtraContent: PropTypes.node,\n\n    /**\n     * 监听标签页数量\n     */\n    tabCount: PropTypes.number,\n\n    /**\n     * 统一设置是否自动销毁取消激活状态的标签页内部元素\n     */\n    destroyInactiveTabPane: PropTypes.bool,\n\n    /**\n     * 监听标签页标题右键菜单项相关点击事件\n     */\n    clickedContextMenu: PropTypes.exact({\n        /**\n         * 被点击的右键菜单项对应标签页`key`值\n         */\n        tabKey: PropTypes.string,\n        /**\n         * 被点击的右键菜单项对应`key`值\n         */\n        menuKey: PropTypes.string,\n        /**\n         * 事件对应时间戳信息\n         */\n        timestamp: PropTypes.number,\n    }),\n\n    /**\n     * 当`items`为空或长度为`0`时，替代进行占位显示的内容\n     */\n    placeholder: PropTypes.node,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n\n    /**\n     * 是否开启[属性持久化](/prop-persistence)\n     */\n    persistence: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.string,\n        PropTypes.number,\n    ]),\n\n    /**\n     * 开启属性持久化功能的若干属性名，可选项有`'activeKey'`\n     * 默认值：`['activeKey']`\n     */\n    persisted_props: PropTypes.arrayOf(PropTypes.oneOf(['activeKey'])),\n\n    /**\n     * 属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n     * 默认值：`'local'`\n     */\n    persistence_type: PropTypes.oneOf(['local', 'session', 'memory']),\n};\n\nAntdTabs.dashPersistence = {\n    persisted_props: ['activeKey'],\n    persistence_type: 'local',\n};\n\nexport default AntdTabs;\n\nexport const propTypes = AntdTabs.propTypes;\nexport const defaultProps = AntdTabs.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataDisplay/AntdTag.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdTag = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_display\" */ '../../fragments/dataDisplay/AntdTag.react'\n        )\n);\n\n/**\n * 标签组件AntdTag\n */\nconst AntdTag = ({\n    id,\n    className,\n    style,\n    key,\n    content,\n    icon,\n    color,\n    href,\n    target = '_blank',\n    bordered = true,\n    closeIcon = false,\n    closeCounts = 0,\n    setProps,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdTag\n                {...{\n                    id,\n                    className,\n                    style,\n                    key,\n                    content,\n                    icon,\n                    color,\n                    href,\n                    target,\n                    bordered,\n                    closeIcon,\n                    closeCounts,\n                    setProps,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdTag.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 组件型，标签内容\n     */\n    content: PropTypes.node,\n\n    /**\n     * 组件型，标签前缀图标\n     */\n    icon: PropTypes.node,\n\n    /**\n     * 标签颜色，可使用内置的若干种颜色主题，也可使用任何合法的css颜色值\n     */\n    color: PropTypes.string,\n\n    /**\n     * 标签点击跳转链接地址\n     */\n    href: PropTypes.string,\n\n    /**\n     * 标签链接跳转行为\n     */\n    target: PropTypes.string,\n\n    /**\n     * 是否渲染边框\n     * 默认值：`true`\n     */\n    bordered: PropTypes.bool,\n\n    /**\n     * 是否渲染关闭按钮\n     * 默认值：`false`\n     */\n    closeIcon: PropTypes.bool,\n\n    /**\n     * `closeIcon=True`时，监听关闭按钮累计点击次数\n     * 默认值：`0`\n     */\n    closeCounts: PropTypes.number,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdTag;\n\nexport const propTypes = AntdTag.propTypes;\nexport const defaultProps = AntdTag.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataDisplay/AntdTimeline.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdTimeline = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_display\" */ '../../fragments/dataDisplay/AntdTimeline.react'\n        )\n);\n\n/**\n * 时间轴组件AntdTimeline\n */\nconst AntdTimeline = ({\n    id,\n    className,\n    style,\n    key,\n    items,\n    mode = 'left',\n    pending,\n    pendingDot,\n    reverse = false,\n    setProps,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdTimeline\n                {...{\n                    id,\n                    className,\n                    style,\n                    key,\n                    items,\n                    mode,\n                    pending,\n                    pendingDot,\n                    reverse,\n                    setProps,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdTimeline.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 必填，定义时间轴节点\n     */\n    items: PropTypes.arrayOf(\n        PropTypes.exact({\n            /**\n             * 组件型，当前节点正文内容\n             */\n            content: PropTypes.node,\n            /**\n             * 当前节点颜色，可用于表达节点状态，常用方案有`'blue'`（进行中或默认状态）、`'green'`（已完成状态）、`'red'`（警告或错误状态）、`'grey'`（未完成或失效状态）\n             */\n            color: PropTypes.string,\n            /**\n             * 组件型，自定义作为图标的元素\n             */\n            icon: PropTypes.node,\n            /**\n             * 组件型，当前节点标签内容\n             */\n            label: PropTypes.node,\n            // 设置节点位置，可选的有'left'和'right'\n            /**\n             * 当前节点位置，可选项有`'left'`、`'right'`\n             */\n            position: PropTypes.oneOf(['left', 'right']),\n        })\n    ).isRequired,\n\n    /**\n     * 时间轴与内容的相对位置，可选项有`'left'`、`'alternate'`、`'right'`\n     */\n    mode: PropTypes.oneOf(['left', 'alternate', 'right']),\n\n    /**\n     * 组件型，设置时间轴末尾额外幽灵节点标题内容，默认不添加\n     */\n    pending: PropTypes.node,\n\n    /**\n     * 组件型，自定义幽灵节点图标\n     */\n    pendingDot: PropTypes.node,\n\n    /**\n     * 是否逆序排列时间轴\n     * 默认值：`false`\n     */\n    reverse: PropTypes.bool,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdTimeline;\n\nexport const propTypes = AntdTimeline.propTypes;\nexport const defaultProps = AntdTimeline.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataDisplay/AntdTooltip.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdTooltip = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_display\" */ '../../fragments/dataDisplay/AntdTooltip.react'\n        )\n);\n\n/**\n * 文字提示组件AntdTooltip\n */\nconst AntdTooltip = ({\n    id,\n    children,\n    className,\n    style,\n    styles,\n    classNames,\n    key,\n    title,\n    placement = 'top',\n    color,\n    mouseEnterDelay = 0.1,\n    mouseLeaveDelay = 0.1,\n    trigger = 'hover',\n    zIndex,\n    arrow = 'show',\n    fresh = false,\n    open = false,\n    permanent = false,\n    popupContainer = 'body',\n    setProps,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdTooltip\n                {...{\n                    id,\n                    children,\n                    className,\n                    style,\n                    styles,\n                    classNames,\n                    key,\n                    title,\n                    placement,\n                    color,\n                    mouseEnterDelay,\n                    mouseLeaveDelay,\n                    trigger,\n                    zIndex,\n                    arrow,\n                    fresh,\n                    open,\n                    permanent,\n                    popupContainer,\n                    setProps,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdTooltip.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，文字提示挂载目标\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 细分控制子元素css样式\n     */\n    styles: PropTypes.exact({\n        /**\n         * 根元素（包含箭头、内容元素）css样式\n         */\n        root: PropTypes.object,\n        /**\n         * 内容元素css样式\n         */\n        body: PropTypes.object,\n    }),\n\n    /**\n     * 细分控制子元素css类名\n     */\n    classNames: PropTypes.exact({\n        /**\n         * 根元素（包含箭头、内容元素）css类名\n         */\n        root: PropTypes.string,\n        /**\n         * 内容元素css类名\n         */\n        body: PropTypes.string,\n    }),\n\n    /**\n     * 组件型，文字提示内容\n     */\n    title: PropTypes.node,\n\n    /**\n     * 文字提示弹出方向，可选项有`'top'`、`'left'`、`'right'`、`'bottom'`、`'topLeft'`、`'topRight'`、`'bottomLeft'`、`'bottomRight'`、`'leftTop'`、`'leftBottom'`、`'rightTop'`、`'rightBottom'`\n     * 默认值：`'top'`\n     */\n    placement: PropTypes.oneOf([\n        'top',\n        'left',\n        'right',\n        'bottom',\n        'topLeft',\n        'topRight',\n        'bottomLeft',\n        'bottomRight',\n    ]),\n\n    /**\n     * 背景颜色\n     */\n    color: PropTypes.string,\n\n    /**\n     * 鼠标移入到文字提示弹出延时，单位：秒\n     * 默认值：`0.1`\n     */\n    mouseEnterDelay: PropTypes.number,\n\n    /**\n     * 鼠标移出到文字提示消失延时，单位：秒\n     * 默认值：`0.1`\n     */\n    mouseLeaveDelay: PropTypes.number,\n\n    /**\n     * 触发方式，可选项有`'hover'`、`'focus'`、`'click'`，可多选\n     * 默认值：`'hover'`\n     */\n    trigger: PropTypes.oneOfType([\n        PropTypes.oneOf(['hover', 'focus', 'click']),\n        PropTypes.arrayOf(PropTypes.oneOf(['hover', 'focus', 'click'])),\n    ]),\n\n    /**\n     * 文字提示卡片z-index\n     */\n    zIndex: PropTypes.number,\n\n    /**\n     * 文字提示卡片附带箭头显示形式，可选项有`'show'`、`'hide'`、`'center'`\n     * 默认值：`'show'`\n     */\n    arrow: PropTypes.oneOf(['show', 'hide', 'center']),\n\n    /**\n     * 是否始终保持更新内容\n     * 默认值：`false`\n     */\n    fresh: PropTypes.bool,\n\n    /**\n     * 监听或设置当前文字提示卡片的展开状态\n     * 默认值：`false`\n     */\n    open: PropTypes.bool,\n\n    /**\n     * 是否保持文字提示卡片处于`open`对应状态不变\n     * 默认值：`false`\n     */\n    permanent: PropTypes.bool,\n\n    /**\n     * 文字提示卡片展开层锚定策略，可选项有`'parent'`、`'body'`\n     * 默认值：`'body'`\n     */\n    popupContainer: PropTypes.oneOf(['parent', 'body']),\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    loading_state: PropTypes.shape({\n        /**\n         * Determines if the component is loading or not\n         */\n        is_loading: PropTypes.bool,\n        /**\n         * Holds which property is loading\n         */\n        prop_name: PropTypes.string,\n        /**\n         * Holds the name of the component that is loading\n         */\n        component_name: PropTypes.string,\n    }),\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdTooltip;\n\nexport const propTypes = AntdTooltip.propTypes;\nexport const defaultProps = AntdTooltip.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataDisplay/AntdTree.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdTree = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_entry\" */ '../../fragments/dataDisplay/AntdTree.react'\n        )\n);\n\n/**\n * 树形控件组件AntdTree\n */\nconst AntdTree = ({\n    id,\n    className,\n    setProps,\n    style,\n    key,\n    treeData,\n    treeNodeKeyToTitle,\n    treeDataMode = 'tree',\n    checkable = false,\n    selectable = true,\n    selectedKeys,\n    expandedKeys,\n    checkedKeys,\n    defaultExpandAll = false,\n    defaultExpandedKeys,\n    defaultExpandParent = false,\n    checkStrictly = false,\n    defaultCheckedKeys,\n    defaultSelectedKeys,\n    multiple = false,\n    showLine = { showLeafIcon: false },\n    switcherIcon,\n    showIcon = false,\n    height,\n    draggable = false,\n    showDragIcon = true,\n    dragInSameLevel = false,\n    dragDisabledKeys = [],\n    dropDisabledKeys = [],\n    enableNodeFavorites = false,\n    favoritedKeys = [],\n    scrollTarget,\n    searchKeyword,\n    caseSensitive = true,\n    highlightStyle = {\n        fontWeight: 'bold',\n        backgroundColor: 'transparent',\n        padding: 0,\n        color: '#ff5500',\n    },\n    nodeCheckedSuffix,\n    nodeUncheckedSuffix,\n    nodeCheckedStyle,\n    nodeUncheckedStyle,\n    enableAsyncLoad = false,\n    persistence,\n    persisted_props,\n    persistence_type,\n    batchPropsNames = [],\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdTree\n                {...{\n                    id,\n                    className,\n                    setProps,\n                    style,\n                    key,\n                    treeData,\n                    treeNodeKeyToTitle,\n                    treeDataMode,\n                    checkable,\n                    selectable,\n                    selectedKeys,\n                    expandedKeys,\n                    checkedKeys,\n                    defaultExpandAll,\n                    defaultExpandedKeys,\n                    defaultExpandParent,\n                    checkStrictly,\n                    defaultCheckedKeys,\n                    defaultSelectedKeys,\n                    multiple,\n                    showLine,\n                    switcherIcon,\n                    showIcon,\n                    height,\n                    draggable,\n                    showDragIcon,\n                    dragInSameLevel,\n                    dragDisabledKeys,\n                    dropDisabledKeys,\n                    enableNodeFavorites,\n                    favoritedKeys,\n                    scrollTarget,\n                    searchKeyword,\n                    caseSensitive,\n                    highlightStyle,\n                    nodeCheckedSuffix,\n                    nodeUncheckedSuffix,\n                    nodeCheckedStyle,\n                    nodeUncheckedStyle,\n                    enableAsyncLoad,\n                    persistence,\n                    persisted_props,\n                    persistence_type,\n                    batchPropsNames,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\n// 定义递归PropTypes\nconst PropTreeNodeShape = {\n    /**\n     * 当前节点标题\n     */\n    title: PropTypes.string.isRequired,\n    /**\n     * 当前节点唯一识别id\n     */\n    key: PropTypes.string.isRequired,\n    /**\n     * 是否禁用当前节点\n     * 默认值：`false`\n     */\n    disabled: PropTypes.bool,\n    /**\n     * 当前节点前缀图标类型，`iconRenderer`为`'AntdIcon'`时同`AntdIcon`同名参数，`iconRenderer`为`'fontawesome'`时为css类名\n     */\n    icon: PropTypes.string,\n    /**\n     * 当前节点前缀图标渲染方式，可选项有`'AntdIcon'`、`'fontawesome'`\n     */\n    iconRenderer: PropTypes.oneOf(['AntdIcon', 'fontawesome']),\n    /**\n     * 当树组件整体的`checkable=True`时，单独控制当前节点是否渲染勾选框\n     */\n    checkable: PropTypes.bool,\n    /**\n     * 当树组件整体的`checkable=True`时，控制是否禁用当前节点的勾选框\n     */\n    disableCheckbox: PropTypes.bool,\n    /**\n     * 当前节点是否可点击选择\n     */\n    selectable: PropTypes.bool,\n    /**\n     * 当树组件整体的`enableNodeFavorites=True`时，控制是否可对当前节点进行收藏\n     */\n    enableFavorites: PropTypes.bool,\n    /**\n     * 当前节点css样式\n     */\n    style: PropTypes.object,\n    /**\n     * 当前节点css类名\n     */\n    className: PropTypes.string,\n    /**\n     * 配置当前节点文字提示相关参数\n     */\n    tooltipProps: PropTypes.exact({\n        /**\n         * 当前节点文字提示内容\n         */\n        title: PropTypes.string,\n        /**\n         * 当前节点文字提示展开方向，可选项有`'top'`、`'left'`、`'right'`、`'bottom'`、`'topLeft'`、`'topRight'`、`'bottomLeft'`、`'bottomRight'`\n         * 默认值：`'top'`\n         */\n        placement: PropTypes.oneOf([\n            'top',\n            'left',\n            'right',\n            'bottom',\n            'topLeft',\n            'topRight',\n            'bottomLeft',\n            'bottomRight',\n        ]),\n    }),\n    /**\n     * 配置当前节点右键菜单相关参数\n     */\n    contextMenu: PropTypes.arrayOf(\n        PropTypes.exact({\n            /**\n             * 当前右键菜单项唯一识别id\n             */\n            key: PropTypes.string,\n            /**\n             * 当前右键菜单项标题内容\n             */\n            label: PropTypes.string,\n            /**\n             * 当前节点前缀图标类型，`iconRenderer`为`'AntdIcon'`时同`AntdIcon`同名参数，`iconRenderer`为`'fontawesome'`时为css类名\n             */\n            icon: PropTypes.string,\n            /**\n             * 当前节点前缀图标渲染方式，可选项有`'AntdIcon'`、`'fontawesome'`\n             */\n            iconRenderer: PropTypes.oneOf(['AntdIcon', 'fontawesome']),\n        })\n    ),\n    /**\n     * 当前节点是否为叶节点\n     */\n    isLeaf: PropTypes.bool,\n};\n\nconst PropTreeNode = PropTypes.shape(PropTreeNodeShape);\nPropTreeNodeShape.children = PropTypes.arrayOf(PropTreeNode);\nconst treeDataPropTypes = PropTypes.arrayOf(PropTreeNode);\n\n// 定义偏平结构节点类型\nconst PropFlatNodeShape = {\n    /**\n     * 当前节点标题\n     */\n    title: PropTypes.string.isRequired,\n    /**\n     * 当前节点唯一识别id\n     */\n    key: PropTypes.string.isRequired,\n    /**\n     * 是否禁用当前节点\n     * 默认值：`false`\n     */\n    disabled: PropTypes.bool,\n    /**\n     * 当前节点前缀图标类型，`iconRenderer`为`'AntdIcon'`时同`AntdIcon`同名参数，`iconRenderer`为`'fontawesome'`时为css类名\n     */\n    icon: PropTypes.string,\n    /**\n     * 当前节点前缀图标渲染方式，可选项有`'AntdIcon'`、`'fontawesome'`\n     */\n    iconRenderer: PropTypes.oneOf(['AntdIcon', 'fontawesome']),\n    /**\n     * 当树组件整体的`checkable=True`时，单独控制当前节点是否渲染勾选框\n     */\n    checkable: PropTypes.bool,\n    /**\n     * 当树组件整体的`checkable=True`时，控制是否禁用当前节点的勾选框\n     */\n    disableCheckbox: PropTypes.bool,\n    /**\n     * 当前节点是否可点击选择\n     */\n    selectable: PropTypes.bool,\n    /**\n     * 当树组件整体的`enableNodeFavorites=True`时，控制是否可对当前节点进行收藏\n     */\n    enableFavorites: PropTypes.bool,\n    /**\n     * 当前节点对应的父节点`key`值\n     */\n    parent: PropTypes.string,\n    /**\n     * 当前节点css样式\n     */\n    style: PropTypes.object,\n    /**\n     * 当前节点css类名\n     */\n    className: PropTypes.string,\n    /**\n     * 配置当前节点文字提示相关参数\n     */\n    tooltipProps: PropTypes.exact({\n        /**\n         * 当前节点文字提示内容\n         */\n        title: PropTypes.string,\n        /**\n         * 当前节点文字提示展开方向，可选项有`'top'`、`'left'`、`'right'`、`'bottom'`、`'topLeft'`、`'topRight'`、`'bottomLeft'`、`'bottomRight'`\n         * 默认值：`'top'`\n         */\n        placement: PropTypes.oneOf([\n            'top',\n            'left',\n            'right',\n            'bottom',\n            'topLeft',\n            'topRight',\n            'bottomLeft',\n            'bottomRight',\n        ]),\n    }),\n    /**\n     * 配置当前节点右键菜单相关参数\n     */\n    contextMenu: PropTypes.arrayOf(\n        PropTypes.exact({\n            /**\n             * 当前右键菜单项唯一识别id\n             */\n            key: PropTypes.string,\n            /**\n             * 当前右键菜单项标题内容\n             */\n            label: PropTypes.string,\n            /**\n             * 当前节点前缀图标类型，`iconRenderer`为`'AntdIcon'`时同`AntdIcon`同名参数，`iconRenderer`为`'fontawesome'`时为css类名\n             */\n            icon: PropTypes.string,\n            /**\n             * 当前节点前缀图标渲染方式，可选项有`'AntdIcon'`、`'fontawesome'`\n             */\n            iconRenderer: PropTypes.oneOf(['AntdIcon', 'fontawesome']),\n        })\n    ),\n};\n\nAntdTree.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 对应`treeData`格式的渲染模式，可选项有`'tree'`（树形模式）、`'flat'`（扁平模式）\n     * 默认值：`'tree'`\n     */\n    treeDataMode: PropTypes.oneOf(['tree', 'flat']),\n\n    /**\n     * 定义构造树所需的数据结构，与`treeDataMode`一致\n     */\n    treeData: PropTypes.oneOfType([\n        /**\n         * 树形模式对应结构\n         */\n        treeDataPropTypes,\n        /**\n         * 扁平模式对应结构\n         */\n        PropTypes.arrayOf(PropFlatNodeShape),\n    ]),\n\n    /**\n     * 针对树结构中的指定节点，定义作为标题的组件型内容，优先级高于`treeData`中对应的`title`值\n     */\n    treeNodeKeyToTitle: PropTypes.objectOf(PropTypes.node),\n\n    /**\n     * 是否渲染节点额外图标\n     * 默认值：`false`\n     */\n    showIcon: PropTypes.bool,\n\n    /**\n     * 节点是否可点击选择\n     * 默认值：`true`\n     */\n    selectable: PropTypes.bool,\n\n    /**\n     * 节点是否允许多选\n     * 默认值：`false`\n     */\n    multiple: PropTypes.bool,\n\n    /**\n     * 节点是否可勾选\n     * 默认值：`false`\n     */\n    checkable: PropTypes.bool,\n\n    /**\n     * 初始化是否展开全部节点\n     * 默认值：`false`\n     */\n    defaultExpandAll: PropTypes.bool,\n\n    /**\n     * 监听或设置已展开节点`key`值数组\n     */\n    expandedKeys: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 初始化已展开节点`key`值数组\n     */\n    defaultExpandedKeys: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 初始化是否展开处于展开状态节点的父节点\n     * 默认值：`true`\n     */\n    defaultExpandParent: PropTypes.bool,\n\n    /**\n     * 监听或设置已选择节点`key`值数组\n     */\n    selectedKeys: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 初始化已选择节点`key`值数组\n     */\n    defaultSelectedKeys: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 监听或设置已勾选节点`key`值数组\n     */\n    checkedKeys: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 初始化已勾选节点`key`值数组\n     */\n    defaultCheckedKeys: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 监听或设置处于半勾选状态下的节点`key`值数组\n     */\n    halfCheckedKeys: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 节点与其后代节点之间的选择行为是否彼此独立\n     * 默认值：`false`\n     */\n    checkStrictly: PropTypes.bool,\n\n    /**\n     * 是否显示连接线\n     */\n    showLine: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.exact({\n            /**\n             * 叶节点是否渲染前缀图标\n             */\n            showLeafIcon: PropTypes.bool,\n        }),\n    ]),\n\n    /**\n     * 组件型，自定义树节点的展开/折叠图标\n     */\n    switcherIcon: PropTypes.node,\n\n    /**\n     * 虚拟滚动模式下的组件最大像素高度，未设置时则不启用虚拟滚动功能\n     */\n    height: PropTypes.number,\n\n    /**\n     * 节点是否可拖拽\n     * 默认值：`false`\n     */\n    draggable: PropTypes.bool,\n\n    /**\n     * 开启节点拖拽功能后，是否为节点渲染拖拽图标\n     * 默认值：`true`\n     */\n    showDragIcon: PropTypes.bool,\n\n    /**\n     * 当`draggable=True`时，是否仅允许同级拖拽\n     * 默认值：`false`\n     */\n    dragInSameLevel: PropTypes.bool,\n\n    /**\n     * 禁止进行拖拽调整的节点`key`值数组\n     * 默认值：`[]`\n     */\n    dragDisabledKeys: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 禁止进行拖拽放置的节点`key`值数组\n     * 默认值：`[]`\n     */\n    dropDisabledKeys: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 监听最近一次被拖拽节点`key`值信息\n     */\n    draggedNodeKey: PropTypes.string,\n\n    /**\n     * 监听节点右键菜单项点击事件\n     */\n    clickedContextMenu: PropTypes.exact({\n        /**\n         * 事件对应节点`key`值\n         */\n        nodeKey: PropTypes.string,\n        /**\n         * 事件对应右键菜单项`key`值\n         */\n        menuKey: PropTypes.string,\n        /**\n         * 事件对应时间戳信息\n         */\n        timestamp: PropTypes.number,\n    }),\n\n    /**\n     * 是否启用节点收藏功能\n     * 默认值：`false`\n     */\n    enableNodeFavorites: PropTypes.bool,\n\n    /**\n     * 监听或设置已收藏节点`key`值数组\n     */\n    favoritedKeys: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 执行滚动到指定节点的动作，每次执行完毕后会重置为空值\n     */\n    scrollTarget: PropTypes.exact({\n        /**\n         * 滚动目标节点`key`值\n         */\n        key: PropTypes.string.isRequired,\n        /**\n         * 滚动目标节点对齐位置，可选项有`'top'`、`'bottom'`、`'auto'`\n         * 默认值：`'auto'`\n         */\n        align: PropTypes.oneOf(['top', 'bottom', 'auto']),\n        /**\n         * 滚动后的像素偏移量\n         */\n        offset: PropTypes.number,\n    }),\n\n    /**\n     * 快捷树搜索功能对应的单个关键词，或由多个关键词构成的数组\n     */\n    searchKeyword: PropTypes.oneOfType([\n        PropTypes.string,\n        PropTypes.arrayOf(PropTypes.string),\n    ]),\n\n    /**\n     * 针对`searchKeyword`，是否大小写敏感\n     * 默认值：`true`\n     */\n    caseSensitive: PropTypes.bool,\n\n    /**\n     * 快捷树搜索关键词匹配部分的高亮样式\n     */\n    highlightStyle: PropTypes.object,\n\n    /**\n     * 组件型，节点勾选状态下的后缀元素\n     */\n    nodeCheckedSuffix: PropTypes.node,\n\n    /**\n     * 组件型，节点非勾选状态下的后缀元素\n     */\n    nodeUncheckedSuffix: PropTypes.node,\n\n    /**\n     * 节点勾选状态下的css样式\n     */\n    nodeCheckedStyle: PropTypes.object,\n\n    /**\n     * 节点非勾选状态下的css样式\n     */\n    nodeUncheckedStyle: PropTypes.object,\n\n    /**\n     * 是否开启子节点异步加载功能，开启后无`children`属性，且未设置`isLeaf`为`true`的节点将可展开并触发`loadingNode`事件更新\n     * 默认值：`false`\n     */\n    enableAsyncLoad: PropTypes.bool,\n\n    /**\n     * 监听触发异步数据加载的节点展开事件信息\n     */\n    loadingNode: PropTypes.object,\n\n    /**\n     * 需要纳入[批量属性监听](/batch-props-values)的若干属性名\n     */\n    batchPropsNames: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 监听`batchPropsNames`中指定的若干属性值\n     */\n    batchPropsValues: PropTypes.object,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n\n    /**\n     * 是否开启[属性持久化](/prop-persistence)\n     */\n    persistence: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.string,\n        PropTypes.number,\n    ]),\n\n    /**\n     * 开启属性持久化功能的若干属性名，可选项有`'selectedKeys'`、`'checkedKeys'`、`'expandedKeys'`、`'halfCheckedKeys'`\n     * 默认值：`['selectedKeys', 'checkedKeys', 'expandedKeys', 'halfCheckedKeys']`\n     */\n    persisted_props: PropTypes.arrayOf(\n        PropTypes.oneOf([\n            'selectedKeys',\n            'checkedKeys',\n            'expandedKeys',\n            'halfCheckedKeys',\n        ])\n    ),\n\n    /**\n     * 属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n     * 默认值：`'local'`\n     */\n    persistence_type: PropTypes.oneOf(['local', 'session', 'memory']),\n};\n\nAntdTree.dashPersistence = {\n    persisted_props: [\n        'selectedKeys',\n        'checkedKeys',\n        'expandedKeys',\n        'halfCheckedKeys',\n    ],\n    persistence_type: 'local',\n};\n\nexport default AntdTree;\n\nexport const propTypes = AntdTree.propTypes;\nexport const defaultProps = AntdTree.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataDisplay/card/AntdCard.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdCard = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_display\" */ '../../../fragments/dataDisplay/card/AntdCard.react'\n        )\n);\n\nconst AntdCard = ({\n    id,\n    children,\n    className,\n    style,\n    styles,\n    classNames,\n    key,\n    actions,\n    extraLink,\n    extra,\n    coverImg,\n    variant = 'outlined',\n    hoverable = false,\n    size = 'default',\n    title,\n    nClicks = 0,\n    setProps,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdCard\n                {...{\n                    id,\n                    children,\n                    className,\n                    style,\n                    styles,\n                    classNames,\n                    key,\n                    actions,\n                    extraLink,\n                    extra,\n                    coverImg,\n                    variant,\n                    hoverable,\n                    size,\n                    title,\n                    nClicks,\n                    setProps,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdCard.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，内嵌元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 细分控制子元素css样式\n     */\n    styles: PropTypes.exact({\n        /**\n         * 设置卡片头部区域css样式\n         */\n        header: PropTypes.object,\n        /**\n         * 设置卡片标题css样式\n         */\n        title: PropTypes.object,\n        /**\n         * 设置卡片右上角的操作区域css样式\n         */\n        extra: PropTypes.object,\n        /**\n         * 设置标题封面css样式\n         */\n        cover: PropTypes.object,\n        /**\n         * 设置卡片内容区域css样式\n         */\n        body: PropTypes.object,\n        /**\n         * 设置卡片底部操作组css样式\n         */\n        actions: PropTypes.object,\n    }),\n\n    /**\n     * 细分控制子元素css类名\n     */\n    classNames: PropTypes.exact({\n        /**\n         * 设置卡片头部区域css类名\n         */\n        header: PropTypes.string,\n        /**\n         * 设置卡片标题css类名\n         */\n        title: PropTypes.string,\n        /**\n         * 设置卡片右上角的操作区域css类名\n         */\n        extra: PropTypes.string,\n        /**\n         * 设置标题封面css类名\n         */\n        cover: PropTypes.string,\n        /**\n         * 设置卡片内容区域css类名\n         */\n        body: PropTypes.string,\n        /**\n         * 设置卡片底部操作组css类名\n         */\n        actions: PropTypes.string,\n    }),\n\n    /**\n     * 组件型，底部操作区元素\n     */\n    actions: PropTypes.node,\n\n    /**\n     * 组件型，标题内容\n     */\n    title: PropTypes.node,\n\n    /**\n     * 配置卡片右上角额外链接相关参数\n     */\n    extraLink: PropTypes.exact({\n        /**\n         * 链接文字内容\n         */\n        content: PropTypes.string,\n        /**\n         * 链接地址\n         */\n        href: PropTypes.string,\n        /**\n         * 链接跳转行为\n         */\n        target: PropTypes.string,\n        /**\n         * 链接css类名\n         */\n        className: PropTypes.string,\n        /**\n         * 链接css样式\n         */\n        style: PropTypes.object,\n    }),\n\n    /**\n     * 组件型，卡片右上角额外元素，优先级高于`extraLink`\n     */\n    extra: PropTypes.node,\n\n    /**\n     * 配置封面图片相关参数\n     */\n    coverImg: PropTypes.exact({\n        /**\n         * 图片资源地址\n         */\n        src: PropTypes.string,\n        /**\n         * 图片alt信息\n         */\n        alt: PropTypes.string,\n        /**\n         * 图片css类名\n         */\n        className: PropTypes.string,\n        /**\n         * 图片css样式\n         */\n        style: PropTypes.object,\n    }),\n\n    /**\n     * 卡片形态变体，可选项有`'outlined'`、`'borderless'`\n     * 默认值：`'outlined'`\n     */\n    variant: PropTypes.oneOf(['outlined', 'borderless']),\n\n    /**\n     * 是否在鼠标悬停时显示特殊样式\n     * 默认值：`false`\n     */\n    hoverable: PropTypes.bool,\n\n    /**\n     * 卡片尺寸规格，可选项有`'default'`、`'small'`\n     * 默认值：`'default'`\n     */\n    size: PropTypes.oneOf(['default', 'small']),\n\n    /**\n     * 监听当前卡片累计点击次数\n     * 默认值：`0`\n     */\n    nClicks: PropTypes.number,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdCard;\n\nexport const propTypes = AntdCard.propTypes;\nexport const defaultProps = AntdCard.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataDisplay/card/AntdCardGrid.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdCardGrid = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_display\" */ '../../../fragments/dataDisplay/card/AntdCardGrid.react'\n        )\n);\n\n/**\n * 卡片网格组件AntdCardGrid\n */\nconst AntdCardGrid = ({\n    id,\n    children,\n    className,\n    style,\n    key,\n    hoverable = true,\n    nClicks = 0,\n    setProps,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdCardGrid\n                {...{\n                    id,\n                    children,\n                    className,\n                    style,\n                    key,\n                    hoverable,\n                    nClicks,\n                    setProps,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdCardGrid.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，内嵌元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 鼠标悬停时是否显示特殊样式\n     * 默认值：`true`\n     */\n    hoverable: PropTypes.bool,\n\n    /**\n     * 监听当前卡片网格累计点击次数\n     * 默认值：`0`\n     */\n    nClicks: PropTypes.number,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdCardGrid;\n\nexport const propTypes = AntdCardGrid.propTypes;\nexport const defaultProps = AntdCardGrid.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataDisplay/card/AntdCardMeta.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdCardMeta = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_display\" */ '../../../fragments/dataDisplay/card/AntdCardMeta.react'\n        )\n);\n\n/**\n * 结构化卡片组件AntdCardMeta\n */\nconst AntdCardMeta = ({\n    id,\n    className,\n    style,\n    key,\n    avatar,\n    description,\n    title,\n    setProps,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdCardMeta\n                {...{\n                    id,\n                    className,\n                    style,\n                    key,\n                    avatar,\n                    description,\n                    title,\n                    setProps,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdCardMeta.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 组件型，头像元素\n     */\n    avatar: PropTypes.node,\n\n    /**\n     * 组件型，描述内容\n     */\n    description: PropTypes.node,\n\n    /**\n     * 组件型，标题内容\n     */\n    title: PropTypes.node,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdCardMeta;\n\nexport const propTypes = AntdCardMeta.propTypes;\nexport const defaultProps = AntdCardMeta.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataDisplay/descriptions/AntdDescriptionItem.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdDescriptionItem = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_display\" */ '../../../fragments/dataDisplay/descriptions/AntdDescriptionItem.react'\n        )\n);\n\n/**\n * 描述列表子项组件AntdDescriptionItem\n */\nconst AntdDescriptionItem = ({\n    id,\n    children,\n    className,\n    style,\n    styles,\n    classNames,\n    key,\n    label,\n    span = 1,\n    setProps,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdDescriptionItem\n                {...{\n                    id,\n                    children,\n                    className,\n                    style,\n                    styles,\n                    classNames,\n                    key,\n                    label,\n                    span,\n                    setProps,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdDescriptionItem.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，内嵌元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 细分控制子元素css样式\n     */\n    styles: PropTypes.exact({\n        /**\n         * 标签元素css样式\n         */\n        label: PropTypes.object,\n        /**\n         * 内容元素css样式\n         */\n        content: PropTypes.object,\n    }),\n\n    /**\n     * 细分控制子元素css类名\n     */\n    classNames: PropTypes.exact({\n        /**\n         * 标签元素css类名\n         */\n        label: PropTypes.string,\n        /**\n         * 内容元素css类名\n         */\n        content: PropTypes.string,\n    }),\n\n    /**\n     * 组件型，标题内容\n     */\n    label: PropTypes.node,\n\n    /**\n     * 所占宽度份数\n     * 默认值：`1`\n     */\n    span: PropTypes.number,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdDescriptionItem;\n\nexport const propTypes = AntdDescriptionItem.propTypes;\nexport const defaultProps = AntdDescriptionItem.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataDisplay/descriptions/AntdDescriptions.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdDescriptions = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_display\" */ '../../../fragments/dataDisplay/descriptions/AntdDescriptions.react'\n        )\n);\n\n/**\n * 描述列表组件AntdDescriptions\n */\nconst AntdDescriptions = ({\n    id,\n    children,\n    className,\n    style,\n    styles,\n    classNames,\n    key,\n    items,\n    title,\n    column = 3,\n    bordered = false,\n    size = 'default',\n    layout = 'horizontal',\n    extra,\n    setProps,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdDescriptions\n                {...{\n                    id,\n                    children,\n                    className,\n                    style,\n                    styles,\n                    classNames,\n                    key,\n                    items,\n                    title,\n                    column,\n                    bordered,\n                    size,\n                    layout,\n                    extra,\n                    setProps,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdDescriptions.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，传入内部各描述列表子项\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 细分控制子元素css样式\n     */\n    styles: PropTypes.exact({\n        /**\n         * 根元素css样式\n         */\n        root: PropTypes.object,\n        /**\n         * 头部元素css样式\n         */\n        header: PropTypes.object,\n        /**\n         * 标题元素css样式\n         */\n        title: PropTypes.object,\n        /**\n         * 额外内容css样式\n         */\n        extra: PropTypes.object,\n        /**\n         * 标签元素css样式\n         */\n        label: PropTypes.object,\n        /**\n         * 内容元素css样式\n         */\n        content: PropTypes.object,\n    }),\n\n    /**\n     * 细分控制子元素css类名\n     */\n    classNames: PropTypes.exact({\n        /**\n         * 根元素css类名\n         */\n        root: PropTypes.string,\n        /**\n         * 头部元素css类名\n         */\n        header: PropTypes.string,\n        /**\n         * 标题元素css类名\n         */\n        title: PropTypes.string,\n        /**\n         * 额外内容css类名\n         */\n        extra: PropTypes.string,\n        /**\n         * 标签元素css类名\n         */\n        label: PropTypes.string,\n        /**\n         * 内容元素css类名\n         */\n        content: PropTypes.string,\n    }),\n\n    /**\n     * 配置描述列表子项，优先级高于`children`\n     */\n    items: PropTypes.arrayOf(\n        PropTypes.exact({\n            /**\n             * 组件型，子项标题内容\n             */\n            label: PropTypes.node,\n            /**\n             * 子项所占宽度份数，当设置为`'filled'`时会自适应占满当前行剩余可用空间\n             * 默认值：`1`\n             */\n            span: PropTypes.oneOfType([\n                PropTypes.number,\n                PropTypes.oneOf(['filled']),\n            ]),\n            /**\n             * 组件型，子项内容\n             */\n            children: PropTypes.node,\n            /**\n             * 子项css样式\n             */\n            style: PropTypes.object,\n            /**\n             * 子项css类名\n             */\n            className: PropTypes.string,\n        })\n    ),\n\n    /**\n     * 组件型，标题内容\n     */\n    title: PropTypes.node,\n\n    /**\n     * 每行显示的字段项数量，支持响应式\n     * 默认值：`3`\n     */\n    column: PropTypes.oneOfType([\n        PropTypes.number,\n        PropTypes.exact({\n            xxl: PropTypes.number,\n            xl: PropTypes.number,\n            lg: PropTypes.number,\n            md: PropTypes.number,\n            sm: PropTypes.number,\n            xs: PropTypes.number,\n        }),\n    ]),\n\n    /**\n     * 是否显示边框\n     * 默认值：`false`\n     */\n    bordered: PropTypes.bool,\n\n    /**\n     * 整体尺寸规格，可选项有`'small'`、`'default'`、`'large'`\n     * 默认值：`'default'`\n     */\n    size: PropTypes.oneOf(['small', 'default', 'large']),\n\n    /**\n     * 布局方式，可选项有`'horizontal'`、`'vertical'`\n     * 默认值：`'horizontal'`\n     */\n    layout: PropTypes.oneOf(['horizontal', 'vertical']),\n\n    /**\n     * 组件型，设置操作区域，显示在右上方\n     */\n    extra: PropTypes.node,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdDescriptions;\n\nexport const propTypes = AntdDescriptions.propTypes;\nexport const defaultProps = AntdDescriptions.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataEntry/AntdCalendar.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdCalendar = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_entry\" */ '../../fragments/dataEntry/AntdCalendar.react'\n        )\n);\n\n/**\n * 日历组件AntdCalendar\n */\nconst AntdCalendar = ({\n    id,\n    className,\n    style,\n    key,\n    name,\n    enableBatchControl = true,\n    locale = 'zh-cn',\n    defaultValue,\n    value,\n    format = 'YYYY-MM-DD',\n    size = 'default',\n    customCells,\n    setProps,\n    persistence,\n    persisted_props,\n    persistence_type,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdCalendar\n                {...{\n                    id,\n                    className,\n                    style,\n                    key,\n                    name,\n                    enableBatchControl,\n                    locale,\n                    defaultValue,\n                    value,\n                    format,\n                    size,\n                    customCells,\n                    setProps,\n                    persistence,\n                    persisted_props,\n                    persistence_type,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdCalendar.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值\n     */\n    name: PropTypes.string,\n\n    /**\n     * 控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能\n     * 默认值：`true`\n     */\n    enableBatchControl: PropTypes.bool,\n\n    /**\n     * 组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n     * 默认值：`'zh-cn'`\n     */\n    locale: PropTypes.oneOf(['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']),\n\n    /**\n     * 日期显示格式，[参考资料](https://day.js.org/docs/en/display/format)\n     * 默认值：`'YYYY-MM-DD'`\n     */\n    format: PropTypes.string,\n\n    /**\n     * 日历尺寸规格，可选项有`'default'`、`'large'`\n     * 默认值：`'default'`\n     */\n    size: PropTypes.oneOf(['default', 'large']),\n\n    /**\n     * 监听或设置当前选中日期值\n     */\n    value: PropTypes.string,\n\n    /**\n     * 初始化选中日期值\n     */\n    defaultValue: PropTypes.string,\n\n    /**\n     * 自定义对应月份、日期的单元格显示内容\n     */\n    customCells: PropTypes.arrayOf(\n        PropTypes.exact({\n            /**\n             * 必填，当前项对应类型，可选项有`'month'`、`'date'`\n             */\n            type: PropTypes.oneOf(['month', 'date']).isRequired,\n            /**\n             * 当前项匹配的年份值\n             */\n            year: PropTypes.number,\n            /**\n             * 当前项匹配的月份值\n             */\n            month: PropTypes.number,\n            /**\n             * 当前项匹配的日期值\n             */\n            date: PropTypes.number,\n            /**\n             * 自定义内容\n             */\n            content: PropTypes.node,\n        })\n    ),\n\n    /**\n     * 监听日期单元格点击事件\n     */\n    cellClickEvent: PropTypes.exact({\n        /**\n         * 记录面板类型\n         */\n        type: PropTypes.string,\n        /**\n         * 事件发生时间戳\n         */\n        timestamp: PropTypes.number,\n    }),\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n\n    /**\n     * 是否开启[属性持久化](/prop-persistence)\n     */\n    persistence: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.string,\n        PropTypes.number,\n    ]),\n\n    /**\n     * 开启属性持久化功能的若干属性名，可选项有`'value'`\n     * 默认值：`['value']`\n     */\n    persisted_props: PropTypes.arrayOf(PropTypes.oneOf(['value'])),\n\n    /**\n     * 属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n     * 默认值：`'local'`\n     */\n    persistence_type: PropTypes.oneOf(['local', 'session', 'memory']),\n};\n\nAntdCalendar.dashPersistence = {\n    persisted_props: ['value'],\n    persistence_type: 'local',\n};\n\nexport default AntdCalendar;\n\nexport const propTypes = AntdCalendar.propTypes;\nexport const defaultProps = AntdCalendar.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataEntry/AntdCascader.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdCascader = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_entry\" */ '../../fragments/dataEntry/AntdCascader.react'\n        )\n);\n\n/**\n * 级联选择组件AntdCascader\n */\nconst AntdCascader = ({\n    id,\n    style,\n    className,\n    popupClassName,\n    key,\n    name,\n    enableBatchControl = true,\n    locale = 'zh-cn',\n    options,\n    optionFilterProp = 'label',\n    panelMode = false,\n    optionsNodeKeyToLabel,\n    optionsMode = 'tree',\n    changeOnSelect = false,\n    size,\n    bordered = true,\n    variant,\n    disabled = false,\n    placeholder,\n    defaultValue,\n    value,\n    placement = 'bottomLeft',\n    maxTagCount,\n    multiple = false,\n    expandTrigger = 'click',\n    status,\n    allowClear = true,\n    autoFocus = false,\n    showCheckedStrategy,\n    popupContainer = 'body',\n    prefix,\n    suffixIcon,\n    readOnly,\n    setProps,\n    persistence,\n    persisted_props,\n    persistence_type,\n    batchPropsNames = [],\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdCascader\n                {...{\n                    id,\n                    style,\n                    className,\n                    popupClassName,\n                    key,\n                    name,\n                    enableBatchControl,\n                    locale,\n                    options,\n                    optionFilterProp,\n                    panelMode,\n                    optionsNodeKeyToLabel,\n                    optionsMode,\n                    changeOnSelect,\n                    size,\n                    bordered,\n                    variant,\n                    disabled,\n                    placeholder,\n                    defaultValue,\n                    value,\n                    placement,\n                    maxTagCount,\n                    multiple,\n                    expandTrigger,\n                    status,\n                    allowClear,\n                    autoFocus,\n                    showCheckedStrategy,\n                    popupContainer,\n                    prefix,\n                    suffixIcon,\n                    readOnly,\n                    setProps,\n                    persistence,\n                    persisted_props,\n                    persistence_type,\n                    batchPropsNames,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\n// 定义递归PropTypes\nconst PropOptionNodeShape = {\n    /**\n     * 当前节点值\n     */\n    value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n    /**\n     * 当前节点唯一识别id\n     */\n    key: PropTypes.string,\n    /**\n     * 当前节点标题内容\n     */\n    label: PropTypes.string.isRequired,\n    /**\n     * 是否禁用当前节点\n     */\n    disabled: PropTypes.bool,\n};\n\nconst PropOptionNode = PropTypes.shape(PropOptionNodeShape);\nPropOptionNodeShape.children = PropTypes.arrayOf(PropOptionNode);\nconst optionDataPropTypes = PropTypes.arrayOf(PropOptionNode);\n\n// 定义扁平节点PropTypes\nconst PropFlatOptionNodeShape = {\n    /**\n     * 当前节点值\n     */\n    value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n    /**\n     * 当前节点标题内容\n     */\n    label: PropTypes.string.isRequired,\n    /**\n     * 是否禁用当前节点\n     */\n    disabled: PropTypes.bool,\n    /**\n     * 当前节点唯一识别id\n     */\n    key: PropTypes.string,\n    /**\n     * 当前节点对应父节点`key`值\n     */\n    parent: PropTypes.string,\n};\n\nAntdCascader.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 展开菜单css类名\n     */\n    popupClassName: PropTypes.string,\n\n    /**\n     * 配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值\n     */\n    name: PropTypes.string,\n\n    /**\n     * 控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能\n     * 默认值：`true`\n     */\n    enableBatchControl: PropTypes.bool,\n\n    /**\n     * 组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n     * 默认值：`'zh-cn'`\n     */\n    locale: PropTypes.oneOf(['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']),\n\n    /**\n     * 对应`options`格式的渲染模式，可选项有`'tree'`（树形模式）、`'flat'`（扁平模式）\n     * 默认值：`'tree'`\n     */\n    optionsMode: PropTypes.oneOf(['tree', 'flat']),\n\n    /**\n     * 定义构造级联选择所需的数据结构，与`optionsMode`一致\n     */\n    options: PropTypes.oneOfType([\n        /**\n         * 树形模式对应结构\n         */\n        optionDataPropTypes,\n        /**\n         * 偏平模式对应结构\n         */\n        PropTypes.arrayOf(PropFlatOptionNodeShape),\n    ]).isRequired,\n\n    /**\n     * 针对级联结构中的指定节点，定义作为标题的组件型内容，优先级高于`options`中对应的`label`值\n     */\n    optionsNodeKeyToLabel: PropTypes.objectOf(PropTypes.node),\n\n    /**\n     * 选项关键词搜索时的目标字段，可选项有`'value'`、`'label'`\n     * 默认值：`'label'`\n     */\n    optionFilterProp: PropTypes.oneOf(['value', 'label']),\n\n    /**\n     * 是否开启内嵌面板模式\n     * 默认值：`false`\n     */\n    panelMode: PropTypes.bool,\n\n    /**\n     * 是否禁用当前组件\n     * 默认值：`false`\n     */\n    disabled: PropTypes.bool,\n\n    /**\n     * 是否当级联选择中的任意节点被选择时均进行选中值更新\n     * 默认值：`false`\n     */\n    changeOnSelect: PropTypes.bool,\n\n    /**\n     * 当前组件尺寸规格，可选项有`'small'`、`'middle'`、`'large'`\n     * 默认值：`'middle'`\n     */\n    size: PropTypes.oneOf(['small', 'middle', 'large']),\n\n    /**\n     * 是否显示边框，设置为`true`时等价于`variant='outlined'`\n     * 默认值：`true`\n     */\n    bordered: PropTypes.bool,\n\n    /**\n     * 形态变体类型，可选项有`'outlined'`、`'borderless'`、`'filled'`、`'underlined'`，其中`'outlined'`等价于`bordered=True`，但优先级更高\n     */\n    variant: PropTypes.oneOf([\n        'outlined',\n        'borderless',\n        'filled',\n        'underlined',\n    ]),\n\n    /**\n     * 输入框占位文字内容\n     */\n    placeholder: PropTypes.string,\n\n    /**\n     * 选择菜单展开方向，可选项有`'bottomLeft'`、`'bottomRight'`、`'topLeft'`、`'topRight'`\n     * 默认值：`'bottomLeft'`\n     */\n    placement: PropTypes.oneOf([\n        'bottomLeft',\n        'bottomRight',\n        'topLeft',\n        'topRight',\n    ]),\n\n    /**\n     * 监听或设置已选值\n     */\n    value: PropTypes.oneOfType([\n        PropTypes.arrayOf(\n            PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n        ),\n        PropTypes.arrayOf(\n            PropTypes.arrayOf(\n                PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n            )\n        ),\n    ]),\n\n    /**\n     * 初始化已选值\n     */\n    defaultValue: PropTypes.oneOfType([\n        PropTypes.arrayOf(\n            PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n        ),\n        PropTypes.arrayOf(\n            PropTypes.arrayOf(\n                PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n            )\n        ),\n    ]),\n\n    /**\n     * 是否开启多选模式\n     * 默认值：`false`\n     */\n    multiple: PropTypes.bool,\n\n    /**\n     * 当`multiple=True`时，已选值展示的最大数量\n     */\n    maxTagCount: PropTypes.oneOfType([\n        PropTypes.number,\n        PropTypes.oneOf(['responsive']),\n    ]),\n\n    /**\n     * 选择菜单展开触发方式，可选项有`'click'`、`'hover'`\n     * 默认值：`'click'`\n     */\n    expandTrigger: PropTypes.oneOf(['click', 'hover']),\n\n    /**\n     * 控制校验状态，可选项有`'error'`、`'warning'`\n     */\n    status: PropTypes.oneOf(['error', 'warning']),\n\n    /**\n     * 是否允许一键清空已选值\n     * 默认值：`true`\n     */\n    allowClear: PropTypes.bool,\n\n    /**\n     * 是否自动获取焦点\n     * 默认值：`false`\n     */\n    autoFocus: PropTypes.bool,\n\n    /**\n     * 已选项回填策略，可选项有`'show-parent'`、`'show-child'`\n     */\n    showCheckedStrategy: PropTypes.oneOf(['show-parent', 'show-child']),\n\n    /**\n     * 组件型，前缀内嵌内容\n     */\n    prefix: PropTypes.node,\n\n    /**\n     * 自定义选择框后缀图标内容\n     */\n    suffixIcon: PropTypes.node,\n\n    /**\n     * 是否渲染为只读状态\n     * 默认值：`false`\n     */\n    readOnly: PropTypes.bool,\n\n    /**\n     * 相关展开层锚定策略，可选项有`'parent'`、`'body'`\n     * 默认值：`'body'`\n     */\n    popupContainer: PropTypes.oneOf(['parent', 'body']),\n\n    /**\n     * 需要纳入[批量属性监听](/batch-props-values)的若干属性名\n     */\n    batchPropsNames: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 监听`batchPropsNames`中指定的若干属性值\n     */\n    batchPropsValues: PropTypes.object,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n\n    /**\n     * 是否开启[属性持久化](/prop-persistence)\n     */\n    persistence: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.string,\n        PropTypes.number,\n    ]),\n\n    /**\n     * 开启属性持久化功能的若干属性名，可选项有`'value'`\n     * 默认值：`['value']`\n     */\n    persisted_props: PropTypes.arrayOf(PropTypes.oneOf(['value'])),\n\n    /**\n     * 属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n     * 默认值：`'local'`\n     */\n    persistence_type: PropTypes.oneOf(['local', 'session', 'memory']),\n};\n\nAntdCascader.dashPersistence = {\n    persisted_props: ['value'],\n    persistence_type: 'local',\n};\n\nexport default AntdCascader;\n\nexport const propTypes = AntdCascader.propTypes;\nexport const defaultProps = AntdCascader.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataEntry/AntdCheckbox.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdCheckbox = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_entry\" */ '../../fragments/dataEntry/AntdCheckbox.react'\n        )\n);\n\n/**\n * 选择框组件AntdCheckbox\n */\nconst AntdCheckbox = ({\n    id,\n    style,\n    className,\n    key,\n    name,\n    enableBatchControl = true,\n    label,\n    disabled = false,\n    autoFocus = false,\n    checked = false,\n    indeterminate = false,\n    readOnly = false,\n    setProps,\n    persistence,\n    persisted_props,\n    persistence_type,\n    batchPropsNames = [],\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdCheckbox\n                {...{\n                    id,\n                    style,\n                    className,\n                    key,\n                    name,\n                    enableBatchControl,\n                    label,\n                    disabled,\n                    autoFocus,\n                    checked,\n                    indeterminate,\n                    readOnly,\n                    setProps,\n                    persistence,\n                    persisted_props,\n                    persistence_type,\n                    batchPropsNames,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdCheckbox.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值\n     */\n    name: PropTypes.string,\n\n    /**\n     * 控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能\n     * 默认值：`true`\n     */\n    enableBatchControl: PropTypes.bool,\n\n    /**\n     * 是否禁用当前组件\n     * 默认值：`false`\n     */\n    disabled: PropTypes.bool,\n\n    /**\n     * 组件型，标签内容\n     */\n    label: PropTypes.node,\n\n    /**\n     * 是否自动获取焦点\n     * 默认值：`false`\n     */\n    autoFocus: PropTypes.bool,\n\n    /**\n     * 监听或设置当前选择框是否选中\n     * 默认值：`false`\n     */\n    checked: PropTypes.bool,\n\n    /**\n     * 是否强制渲染为半选中状态，仅影响样式，与选中状态无关\n     * 默认值：`false`\n     */\n    indeterminate: PropTypes.bool,\n\n    /**\n     * 是否渲染为只读状态\n     * 默认值：`false`\n     */\n    readOnly: PropTypes.bool,\n\n    /**\n     * 需要纳入[批量属性监听](/batch-props-values)的若干属性名\n     */\n    batchPropsNames: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 监听`batchPropsNames`中指定的若干属性值\n     */\n    batchPropsValues: PropTypes.object,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n\n    /**\n     * 是否开启[属性持久化](/prop-persistence)\n     */\n    persistence: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.string,\n        PropTypes.number,\n    ]),\n\n    /**\n     * 开启属性持久化功能的若干属性名，可选项有`'checked'`\n     * 默认值：`['checked']`\n     */\n    persisted_props: PropTypes.arrayOf(PropTypes.oneOf(['checked'])),\n\n    /**\n     * 属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n     * 默认值：`'local'`\n     */\n    persistence_type: PropTypes.oneOf(['local', 'session', 'memory']),\n};\n\nAntdCheckbox.dashPersistence = {\n    persisted_props: ['checked'],\n    persistence_type: 'local',\n};\n\nexport default AntdCheckbox;\n\nexport const propTypes = AntdCheckbox.propTypes;\nexport const defaultProps = AntdCheckbox.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataEntry/AntdCheckboxGroup.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdCheckboxGroup = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_entry\" */ '../../fragments/dataEntry/AntdCheckboxGroup.react'\n        )\n);\n\n/**\n * 组合选择框组件AntdCheckboxGroup\n */\nconst AntdCheckboxGroup = ({\n    id,\n    style,\n    className,\n    key,\n    name,\n    enableBatchControl = true,\n    options,\n    value,\n    disabled = false,\n    readOnly = false,\n    setProps,\n    persistence,\n    persisted_props,\n    persistence_type,\n    batchPropsNames = [],\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdCheckboxGroup\n                {...{\n                    id,\n                    style,\n                    className,\n                    key,\n                    name,\n                    enableBatchControl,\n                    options,\n                    value,\n                    disabled,\n                    readOnly,\n                    setProps,\n                    persistence,\n                    persisted_props,\n                    persistence_type,\n                    batchPropsNames,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdCheckboxGroup.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值\n     */\n    name: PropTypes.string,\n\n    /**\n     * 控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能\n     * 默认值：`true`\n     */\n    enableBatchControl: PropTypes.bool,\n\n    /**\n     * 是否禁用当前组件\n     * 默认值：`false`\n     */\n    disabled: PropTypes.bool,\n\n    /**\n     * 定义构造组合选择框所需的数据结构\n     */\n    options: PropTypes.arrayOf(\n        PropTypes.oneOfType([\n            PropTypes.string,\n            PropTypes.number,\n            PropTypes.exact({\n                /**\n                 * 组件型，当前选择框标签内容\n                 */\n                label: PropTypes.node,\n                /**\n                 * 当前选择框对应值\n                 */\n                value: PropTypes.oneOfType([\n                    PropTypes.string,\n                    PropTypes.number,\n                ]),\n                /**\n                 * 是否禁用当前选择框\n                 * 默认值：`false`\n                 */\n                disabled: PropTypes.bool,\n            }),\n        ])\n    ),\n\n    /**\n     * 监听或设置已选值\n     */\n    value: PropTypes.arrayOf(\n        PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n    ),\n\n    /**\n     * 是否渲染为只读状态\n     * 默认值：`false`\n     */\n    readOnly: PropTypes.bool,\n\n    /**\n     * 需要纳入[批量属性监听](/batch-props-values)的若干属性名\n     */\n    batchPropsNames: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 监听`batchPropsNames`中指定的若干属性值\n     */\n    batchPropsValues: PropTypes.object,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n\n    /**\n     * 是否开启[属性持久化](/prop-persistence)\n     */\n    persistence: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.string,\n        PropTypes.number,\n    ]),\n\n    /**\n     * 开启属性持久化功能的若干属性名，可选项有`'value'`\n     * 默认值：`['value']`\n     */\n    persisted_props: PropTypes.arrayOf(PropTypes.oneOf(['value'])),\n\n    /**\n     * 属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n     * 默认值：`'local'`\n     */\n    persistence_type: PropTypes.oneOf(['local', 'session', 'memory']),\n};\n\nAntdCheckboxGroup.dashPersistence = {\n    persisted_props: ['value'],\n    persistence_type: 'local',\n};\n\nexport default AntdCheckboxGroup;\n\nexport const propTypes = AntdCheckboxGroup.propTypes;\nexport const defaultProps = AntdCheckboxGroup.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataEntry/AntdColorPicker.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdColorPicker = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_entry\" */ '../../fragments/dataEntry/AntdColorPicker.react'\n        )\n);\n\n/**\n * 颜色选择器组件AntdColorPicker\n */\nconst AntdColorPicker = ({\n    id,\n    className,\n    style,\n    key,\n    locale = 'zh-cn',\n    name,\n    enableBatchControl = true,\n    allowClear = false,\n    arrow,\n    defaultValue,\n    value,\n    format = 'hex',\n    mode = 'single',\n    disabled = false,\n    disabledAlpha = true,\n    open,\n    presets,\n    placement = 'bottomLeft',\n    showText = false,\n    size = 'middle',\n    trigger = 'click',\n    setProps,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdColorPicker\n                {...{\n                    id,\n                    className,\n                    style,\n                    key,\n                    locale,\n                    name,\n                    enableBatchControl,\n                    allowClear,\n                    arrow,\n                    defaultValue,\n                    value,\n                    format,\n                    mode,\n                    disabled,\n                    disabledAlpha,\n                    open,\n                    presets,\n                    placement,\n                    showText,\n                    size,\n                    trigger,\n                    setProps,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdColorPicker.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n     * 默认值：`'zh-cn'`\n     */\n    locale: PropTypes.oneOf(['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']),\n\n    /**\n     * 配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值\n     */\n    name: PropTypes.string,\n\n    /**\n     * 控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能\n     * 默认值：`true`\n     */\n    enableBatchControl: PropTypes.bool,\n\n    /**\n     * 是否允许清除已选颜色\n     * 默认值：`false`\n     */\n    allowClear: PropTypes.bool,\n\n    /**\n     * 配置颜色选择面板额外箭头\n     * 默认值：`true`\n     */\n    arrow: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.exact({\n            /**\n             * 箭头是否指向面板中心\n             * 默认值：`false`\n             */\n            pointAtCenter: PropTypes.bool,\n        }),\n    ]),\n\n    /**\n     * 初始化已输入值\n     */\n    defaultValue: PropTypes.string,\n\n    /**\n     * 监听或设置选中颜色值\n     * 默认值：`'#1677FF'`\n     */\n    value: PropTypes.string,\n\n    /**\n     * 监听或设置颜色格式，可选项有`'rgb'`、`'hex'`、`'hsb'`\n     * 默认值：`'hex'`\n     */\n    format: PropTypes.oneOf(['rgb', 'hex', 'hsb']),\n\n    /**\n     * 选择器模式，用于配置单色与渐变，可选项有`'single'`、`'gradient'`，支持单选项或多选项组合\n     * 默认值：`single`\n     */\n    mode: PropTypes.oneOfType([\n        PropTypes.oneOf(['single', 'gradient']),\n        PropTypes.arrayOf(PropTypes.oneOf(['single', 'gradient'])),\n    ]),\n\n    /**\n     * 是否禁用当前组件\n     * 默认值：`false`\n     */\n    disabled: PropTypes.bool,\n\n    /**\n     * 是否禁用透明度选择\n     * 默认值：`true`\n     */\n    disabledAlpha: PropTypes.bool,\n\n    /**\n     * 监听或设置颜色选择面板展开状态\n     */\n    open: PropTypes.bool,\n\n    /**\n     * 配置预设颜色选择项\n     */\n    presets: PropTypes.arrayOf(\n        PropTypes.exact({\n            /**\n             * 组件型，当前预设项标签内容\n             */\n            label: PropTypes.node,\n            /**\n             * 当前预设项所包含的颜色值数组\n             */\n            colors: PropTypes.arrayOf(PropTypes.string),\n            /**\n             * 当前预设项默认是否展开\n             * 默认值：`true`\n             */\n            defaultOpen: PropTypes.bool,\n        })\n    ),\n\n    /**\n     * 颜色选择面板展开方向，可选项有`'top'`、`'topLeft'`、`'topRight'`、`'bottom'`、`'bottomLeft'`、`'bottomRight'`\n     * 默认值：`'bottomRight'`\n     */\n    placement: PropTypes.oneOf([\n        'top',\n        'topLeft',\n        'topRight',\n        'bottom',\n        'bottomLeft',\n        'bottomRight',\n    ]),\n\n    /**\n     * 是否显示颜色值文本\n     * 默认值：`false`\n     */\n    showText: PropTypes.bool,\n\n    /**\n     * 设置触发控件尺寸规格，可选项有`'large'`、`'middle'`、`'small'`\n     * 默认值：`'middle'`\n     */\n    size: PropTypes.oneOf(['large', 'middle', 'small']),\n\n    /**\n     * 颜色选择面板触发方式，可选项有`'hover'`、`'click'`\n     * 默认值：`'click'`\n     */\n    trigger: PropTypes.oneOf(['hover', 'click']),\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdColorPicker;\n\nexport const propTypes = AntdColorPicker.propTypes;\nexport const defaultProps = AntdColorPicker.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataEntry/AntdDatePicker.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdDatePicker = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_entry\" */ '../../fragments/dataEntry/AntdDatePicker.react'\n        )\n);\n\n/**\n * 日期选择组件AntdDatePicker\n */\nconst AntdDatePicker = ({\n    id,\n    className,\n    style,\n    popupClassName,\n    key,\n    name,\n    enableBatchControl = true,\n    locale = 'zh-cn',\n    setProps,\n    picker = 'date',\n    format,\n    firstDayOfWeek,\n    disabled = false,\n    showTime = false,\n    allowClear = true,\n    autoFocus = false,\n    placeholder,\n    disabledDatesStrategy,\n    pickerValue,\n    value,\n    defaultValue,\n    bordered = true,\n    variant,\n    size = 'middle',\n    status,\n    popupContainer = 'body',\n    readOnly,\n    placement = 'bottomLeft',\n    extraFooter,\n    showToday = true,\n    presets,\n    customCells,\n    prefix,\n    suffixIcon,\n    persistence,\n    persisted_props,\n    persistence_type,\n    batchPropsNames = [],\n    needConfirm = false,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdDatePicker\n                {...{\n                    id,\n                    className,\n                    style,\n                    popupClassName,\n                    key,\n                    name,\n                    enableBatchControl,\n                    locale,\n                    setProps,\n                    picker,\n                    format,\n                    firstDayOfWeek,\n                    disabled,\n                    showTime,\n                    allowClear,\n                    autoFocus,\n                    placeholder,\n                    disabledDatesStrategy,\n                    pickerValue,\n                    value,\n                    defaultValue,\n                    bordered,\n                    variant,\n                    size,\n                    status,\n                    popupContainer,\n                    readOnly,\n                    placement,\n                    extraFooter,\n                    showToday,\n                    presets,\n                    customCells,\n                    prefix,\n                    suffixIcon,\n                    persistence,\n                    persisted_props,\n                    persistence_type,\n                    batchPropsNames,\n                    needConfirm,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdDatePicker.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 展开菜单css类名\n     */\n    popupClassName: PropTypes.string,\n\n    /**\n     * 配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值\n     */\n    name: PropTypes.string,\n\n    /**\n     * 控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能\n     * 默认值：`true`\n     */\n    enableBatchControl: PropTypes.bool,\n\n    /**\n     * 组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n     * 默认值：`'zh-cn'`\n     */\n    locale: PropTypes.oneOf(['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']),\n\n    /**\n     * 日期时间显示格式，[参考资料](https://day.js.org/docs/en/display/format)\n     * 默认值：`'YYYY-MM-DD'`\n     */\n    format: PropTypes.string,\n\n    /**\n     * 日期选择粒度，可选项有`'date'`、`'week'`、`'month'`、`'quarter'`、`'year'`\n     * 默认值：`'date'`\n     */\n    picker: PropTypes.oneOf(['date', 'week', 'month', 'quarter', 'year']),\n\n    /**\n     * 自定义每周起始日下标\n     */\n    firstDayOfWeek: PropTypes.number,\n\n    /**\n     * 是否禁用当前组件\n     * 默认值：`false`\n     */\n    disabled: PropTypes.bool,\n\n    /**\n     * 配置时间选择面板相关参数\n     * 默认值：`false`\n     */\n    showTime: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.exact({\n            /**\n             * 时间选择面板初始化选中时间字符串\n             */\n            defaultValue: PropTypes.string,\n            /**\n             * 与`defaultValue`对应的时间格式，[参考资料](https://day.js.org/docs/en/display/format)\n             * 默认值：`'HH:mm:ss'`\n             */\n            format: PropTypes.string,\n        }),\n    ]),\n\n    /**\n     * 当前组件尺寸规格，可选项有`'small'`、`'middle'`、`'large'`\n     * 默认值：`'middle'`\n     */\n    size: PropTypes.oneOf(['small', 'middle', 'large']),\n\n    /**\n     * 是否显示边框，设置为`true`时等价于`variant='outlined'`\n     * 默认值：`true`\n     */\n    bordered: PropTypes.bool,\n\n    /**\n     * 形态变体类型，可选项有`'outlined'`、`'borderless'`、`'filled'`、`'underlined'`，其中`'outlined'`等价于`bordered=True`，但优先级更高\n     */\n    variant: PropTypes.oneOf([\n        'outlined',\n        'borderless',\n        'filled',\n        'underlined',\n    ]),\n\n    /**\n     * 输入框占位文字内容\n     */\n    placeholder: PropTypes.string,\n\n    /**\n     * 选择面板展开方向，可选项有`'bottomLeft'`、`'bottomRight'`、`'topLeft'`、`'topRight'`\n     * 默认值：`'bottomLeft'`\n     */\n    placement: PropTypes.oneOf([\n        'bottomLeft',\n        'bottomRight',\n        'topLeft',\n        'topRight',\n    ]),\n\n    /**\n     * 监听或设置已选值，与`format`格式对应\n     */\n    value: PropTypes.string,\n\n    /**\n     * 初始化已选值，与`format`格式对应\n     */\n    defaultValue: PropTypes.string,\n\n    /**\n     * 监听或设置面板展开对应日期，与`format`格式对应\n     */\n    pickerValue: PropTypes.string,\n\n    /**\n     * 配置日期禁用项策略数组，满足策略中至少一项规则的日期将会被禁止选中\n     */\n    disabledDatesStrategy: PropTypes.arrayOf(\n        PropTypes.exact({\n            /**\n             * 当前策略类型，可选项有`'eq'`（等于）、`'ne'`（不等于）、`'le'`（小于等于）、`'lt'`（小于）、`'ge'`（大于等于）\n             * 、`'gt'`（大于）、`'in'`（属于）、`'not-in'`（不属于）、`'in-enumerate-dates'`（属于日期字符串枚举数组），`'not-in-enumerate-dates'`（不属于日期字符串枚举数组）\n             */\n            mode: PropTypes.oneOf([\n                'eq',\n                'ne',\n                'le',\n                'lt',\n                'ge',\n                'gt',\n                'in',\n                'not-in',\n                'in-enumerate-dates',\n                'not-in-enumerate-dates',\n            ]),\n            /**\n             * 当前策略约束目标，可选项有`'dayOfYear'`（按年份天数）、`'dayOfWeek'`（按周天数）、`'day'`（按日）\n             * 、`'month'`（按月份）、`'quarter'`（按季度）、`'year'`（按年份）、`'specific-date'`（具体日期）\n             * ，其中在`'specific-date'`目标下，`value`值将严格按照`'YYYY-MM-DD'`格式进行解析\n             */\n            target: PropTypes.oneOf([\n                'day',\n                'month',\n                'quarter',\n                'year',\n                'dayOfYear',\n                'dayOfWeek',\n                'specific-date',\n            ]),\n            /**\n             * 与策略类型、策略约束目标相对应的实际约束值\n             */\n            value: PropTypes.oneOfType([\n                PropTypes.number,\n                PropTypes.string,\n                PropTypes.arrayOf(PropTypes.number),\n                PropTypes.arrayOf(PropTypes.string),\n            ]),\n        })\n    ),\n\n    /**\n     * 控制校验状态，可选项有`'error'`、`'warning'`\n     */\n    status: PropTypes.oneOf(['error', 'warning']),\n\n    /**\n     * 是否允许一键清空已选值\n     * 默认值：`true`\n     */\n    allowClear: PropTypes.bool,\n\n    /**\n     * 是否自动获取焦点\n     * 默认值：`false`\n     */\n    autoFocus: PropTypes.bool,\n\n    /**\n     * 是否渲染为只读状态\n     * 默认值：`false`\n     */\n    readOnly: PropTypes.bool,\n\n    /**\n     * 组件型，底部额外区域内容\n     */\n    extraFooter: PropTypes.node,\n\n    /**\n     * 是否显示“今天”快捷选择按钮\n     * 默认值：`true`\n     */\n    showToday: PropTypes.bool,\n\n    /**\n     * 配置预设项列表\n     */\n    presets: PropTypes.arrayOf(\n        PropTypes.exact({\n            /**\n             * 组件型，当前预设项标题\n             */\n            label: PropTypes.node,\n            /**\n             * 当前预设项对应值，与`format`格式对应\n             */\n            value: PropTypes.string,\n        })\n    ),\n\n    /**\n     * 配合`presets`参数，监听最近一次预设项点击事件相关信息\n     */\n    clickedPreset: PropTypes.exact({\n        /**\n         * 对应预设项值\n         */\n        value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n        /**\n         * 事件对应时间戳信息\n         */\n        timestamp: PropTypes.number,\n    }),\n\n    /**\n     * 是否需要点击按钮确认选值，传入`false`时失去焦点即代表选择\n     * 默认值：`false`\n     */\n    needConfirm: PropTypes.bool,\n\n    /**\n     * 自定义对应日期的单元格样式\n     */\n    customCells: PropTypes.arrayOf(\n        PropTypes.exact({\n            /**\n             * 当前项匹配的年份值\n             */\n            year: PropTypes.number,\n            /**\n             * 当前项匹配的月份值\n             */\n            month: PropTypes.number,\n            /**\n             * 当前项匹配的日期值\n             */\n            date: PropTypes.number,\n            /**\n             * 自定义css样式\n             */\n            style: PropTypes.object,\n            /**\n             * 自定义css类名\n             */\n            className: PropTypes.string,\n        })\n    ),\n\n    /**\n     * 组件型，前缀内嵌内容\n     */\n    prefix: PropTypes.node,\n\n    /**\n     * 自定义选择框后缀图标内容\n     */\n    suffixIcon: PropTypes.node,\n\n    /**\n     * 相关展开层锚定策略，可选项有`'parent'`、`'body'`\n     * 默认值：`'body'`\n     */\n    popupContainer: PropTypes.oneOf(['parent', 'body']),\n\n    /**\n     * 需要纳入[批量属性监听](/batch-props-values)的若干属性名\n     */\n    batchPropsNames: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 监听`batchPropsNames`中指定的若干属性值\n     */\n    batchPropsValues: PropTypes.object,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n\n    /**\n     * 是否开启[属性持久化](/prop-persistence)\n     */\n    persistence: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.string,\n        PropTypes.number,\n    ]),\n\n    /**\n     * 开启属性持久化功能的若干属性名，可选项有`'value'`\n     * 默认值：`['value']`\n     */\n    persisted_props: PropTypes.arrayOf(PropTypes.oneOf(['value'])),\n\n    /**\n     * 属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n     * 默认值：`'local'`\n     */\n    persistence_type: PropTypes.oneOf(['local', 'session', 'memory']),\n};\n\nAntdDatePicker.dashPersistence = {\n    persisted_props: ['value'],\n    persistence_type: 'local',\n};\n\nexport default AntdDatePicker;\n\nexport const propTypes = AntdDatePicker.propTypes;\nexport const defaultProps = AntdDatePicker.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataEntry/AntdDateRangePicker.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdDateRangePicker = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_entry\" */ '../../fragments/dataEntry/AntdDateRangePicker.react'\n        )\n);\n\n/**\n * 日期范围选择组件AntdDateRangePicker\n */\nconst AntdDateRangePicker = ({\n    id,\n    className,\n    style,\n    popupClassName,\n    key,\n    name,\n    enableBatchControl = true,\n    locale = 'zh-cn',\n    setProps,\n    picker = 'date',\n    firstDayOfWeek,\n    format,\n    showTime = false,\n    allowClear = true,\n    autoFocus = false,\n    value,\n    disabledDatesStrategy,\n    open,\n    defaultValue,\n    placeholder,\n    disabled = [false, false],\n    bordered = true,\n    variant,\n    size = 'middle',\n    pickerValue,\n    status,\n    popupContainer = 'body',\n    readOnly,\n    placement = 'bottomLeft',\n    extraFooter,\n    presets,\n    customCells,\n    prefix,\n    suffixIcon,\n    persistence,\n    persisted_props,\n    persistence_type,\n    batchPropsNames = [],\n    needConfirm = false,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdDateRangePicker\n                {...{\n                    id,\n                    className,\n                    style,\n                    popupClassName,\n                    key,\n                    name,\n                    enableBatchControl,\n                    locale,\n                    setProps,\n                    picker,\n                    firstDayOfWeek,\n                    format,\n                    showTime,\n                    allowClear,\n                    autoFocus,\n                    value,\n                    disabledDatesStrategy,\n                    open,\n                    defaultValue,\n                    placeholder,\n                    disabled,\n                    bordered,\n                    variant,\n                    size,\n                    pickerValue,\n                    status,\n                    popupContainer,\n                    readOnly,\n                    placement,\n                    extraFooter,\n                    presets,\n                    customCells,\n                    prefix,\n                    suffixIcon,\n                    persistence,\n                    persisted_props,\n                    persistence_type,\n                    batchPropsNames,\n                    needConfirm,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdDateRangePicker.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 展开菜单css类名\n     */\n    popupClassName: PropTypes.string,\n\n    /**\n     * 配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值\n     */\n    name: PropTypes.string,\n\n    /**\n     * 控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能\n     * 默认值：`true`\n     */\n    enableBatchControl: PropTypes.bool,\n\n    /**\n     * 组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n     * 默认值：`'zh-cn'`\n     */\n    locale: PropTypes.oneOf(['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']),\n\n    /**\n     * 日期时间显示格式，[参考资料](https://day.js.org/docs/en/display/format)\n     * 默认值：`'YYYY-MM-DD'`\n     */\n    format: PropTypes.string,\n\n    /**\n     * 日期选择粒度，可选项有`'date'`、`'week'`、`'month'`、`'quarter'`、`'year'`\n     * 默认值：`'date'`\n     */\n    picker: PropTypes.oneOf(['date', 'week', 'month', 'quarter', 'year']),\n\n    /**\n     * 自定义每周起始日下标\n     */\n    firstDayOfWeek: PropTypes.number,\n\n    /**\n     * 是否禁用当前组件\n     * 默认值：`false`\n     */\n    disabled: PropTypes.arrayOf(PropTypes.bool),\n\n    /**\n     * 配置时间选择面板相关参数\n     * 默认值：`false`\n     */\n    showTime: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.exact({\n            /**\n             * 时间选择面板初始化选中时间字符串\n             */\n            defaultValue: PropTypes.arrayOf(PropTypes.string),\n            /**\n             * 与`defaultValue`对应的时间格式，[参考资料](https://day.js.org/docs/en/display/format)\n             * 默认值：`'HH:mm:ss'`\n             */\n            format: PropTypes.string,\n        }),\n    ]),\n\n    /**\n     * 当前组件尺寸规格，可选项有`'small'`、`'middle'`、`'large'`\n     * 默认值：`'middle'`\n     */\n    size: PropTypes.oneOf(['small', 'middle', 'large']),\n\n    /**\n     * 是否显示边框，设置为`true`时等价于`variant='outlined'`\n     * 默认值：`true`\n     */\n    bordered: PropTypes.bool,\n\n    /**\n     * 形态变体类型，可选项有`'outlined'`、`'borderless'`、`'filled'`、`'underlined'`，其中`'outlined'`等价于`bordered=True`，但优先级更高\n     */\n    variant: PropTypes.oneOf([\n        'outlined',\n        'borderless',\n        'filled',\n        'underlined',\n    ]),\n\n    /**\n     * 输入框占位文字内容\n     */\n    placeholder: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 选择面板展开方向，可选项有`'bottomLeft'`、`'bottomRight'`、`'topLeft'`、`'topRight'`\n     * 默认值：`'bottomLeft'`\n     */\n    placement: PropTypes.oneOf([\n        'bottomLeft',\n        'bottomRight',\n        'topLeft',\n        'topRight',\n    ]),\n\n    /**\n     * 监听或设置已选值，与`format`格式对应\n     */\n    value: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 初始化已选值，与`format`格式对应\n     */\n    defaultValue: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 监听或设置面板展开对应日期，与`format`格式对应\n     */\n    pickerValue: PropTypes.oneOfType([\n        PropTypes.string,\n        PropTypes.arrayOf(PropTypes.string),\n    ]),\n\n    /**\n     * 配置日期禁用项策略数组，满足策略中至少一项规则的日期将会被禁止选中\n     */\n    disabledDatesStrategy: PropTypes.arrayOf(\n        PropTypes.exact({\n            /**\n             * 当前策略类型，可选项有`'eq'`（等于）、`'ne'`（不等于）、`'le'`（小于等于）、`'lt'`（小于）、`'ge'`（大于等于）\n             * 、`'gt'`（大于）、`'in'`（属于）、`'not-in'`（不属于）、`'in-enumerate-dates'`（属于日期字符串枚举数组），`'not-in-enumerate-dates'`（不属于日期字符串枚举数组）\n             */\n            mode: PropTypes.oneOf([\n                'eq',\n                'ne',\n                'le',\n                'lt',\n                'ge',\n                'gt',\n                'in',\n                'not-in',\n                'in-enumerate-dates',\n                'not-in-enumerate-dates',\n            ]),\n            /**\n             * 当前策略约束目标，可选项有`'dayOfYear'`（按年份天数）、`'dayOfWeek'`（按周天数）、`'day'`（按日）\n             * 、`'month'`（按月份）、`'quarter'`（按季度）、`'year'`（按年份）、`'specific-date'`（具体日期）\n             * ，其中在`'specific-date'`目标下，`value`值将严格按照`'YYYY-MM-DD'`格式进行解析\n             */\n            target: PropTypes.oneOf([\n                'day',\n                'month',\n                'quarter',\n                'year',\n                'dayOfYear',\n                'dayOfWeek',\n                'specific-date',\n            ]),\n            /**\n             * 与策略类型、策略约束目标相对应的实际约束值\n             */\n            value: PropTypes.oneOfType([\n                PropTypes.number,\n                PropTypes.string,\n                PropTypes.arrayOf(PropTypes.number),\n                PropTypes.arrayOf(PropTypes.string),\n            ]),\n        })\n    ),\n\n    /**\n     * 监听或设置当前日期范围选择面板是否展开\n     */\n    open: PropTypes.bool,\n\n    /**\n     * 控制校验状态，可选项有`'error'`、`'warning'`\n     */\n    status: PropTypes.oneOf(['error', 'warning']),\n\n    /**\n     * 是否允许一键清空已选值\n     * 默认值：`true`\n     */\n    allowClear: PropTypes.bool,\n\n    /**\n     * 是否自动获取焦点\n     * 默认值：`false`\n     */\n    autoFocus: PropTypes.bool,\n\n    /**\n     * 是否渲染为只读状态\n     * 默认值：`false`\n     */\n    readOnly: PropTypes.bool,\n\n    /**\n     * 组件型，底部额外区域内容\n     */\n    extraFooter: PropTypes.node,\n\n    /**\n     * 配置预设项列表\n     */\n    presets: PropTypes.arrayOf(\n        PropTypes.exact({\n            /**\n             * 组件型，当前预设项标题\n             */\n            label: PropTypes.node,\n            /**\n             * 当前预设项对应值，与`format`格式对应\n             */\n            value: PropTypes.arrayOf(PropTypes.string),\n        })\n    ),\n\n    /**\n     * 配合`presets`参数，监听最近一次预设项点击事件相关信息\n     */\n    clickedPreset: PropTypes.exact({\n        /**\n         * 对应预设项值\n         */\n        value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n        /**\n         * 事件对应时间戳信息\n         */\n        timestamp: PropTypes.number,\n    }),\n\n    /**\n     * 是否需要点击按钮确认选值，传入`false`时失去焦点即代表选择\n     * 默认值：`false`\n     */\n    needConfirm: PropTypes.bool,\n\n    /**\n     * 自定义对应日期的单元格样式\n     */\n    customCells: PropTypes.arrayOf(\n        PropTypes.exact({\n            /**\n             * 当前项匹配的年份值\n             */\n            year: PropTypes.number,\n            /**\n             * 当前项匹配的月份值\n             */\n            month: PropTypes.number,\n            /**\n             * 当前项匹配的日期值\n             */\n            date: PropTypes.number,\n            /**\n             * 自定义css样式\n             */\n            style: PropTypes.object,\n            /**\n             * 自定义css类名\n             */\n            className: PropTypes.string,\n        })\n    ),\n\n    /**\n     * 组件型，前缀内嵌内容\n     */\n    prefix: PropTypes.node,\n\n    /**\n     * 自定义选择框后缀图标内容\n     */\n    suffixIcon: PropTypes.node,\n\n    /**\n     * 相关展开层锚定策略，可选项有`'parent'`、`'body'`\n     * 默认值：`'body'`\n     */\n    popupContainer: PropTypes.oneOf(['parent', 'body']),\n\n    /**\n     * 需要纳入[批量属性监听](/batch-props-values)的若干属性名\n     */\n    batchPropsNames: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 监听`batchPropsNames`中指定的若干属性值\n     */\n    batchPropsValues: PropTypes.object,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * 是否开启[属性持久化](/prop-persistence)\n     */\n    persistence: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.string,\n        PropTypes.number,\n    ]),\n\n    /**\n     * 开启属性持久化功能的若干属性名，可选项有`'value'`\n     * 默认值：`['value']`\n     */\n    persisted_props: PropTypes.arrayOf(PropTypes.oneOf(['value'])),\n\n    /**\n     * 属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n     * 默认值：`'local'`\n     */\n    persistence_type: PropTypes.oneOf(['local', 'session', 'memory']),\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nAntdDateRangePicker.dashPersistence = {\n    persisted_props: ['value'],\n    persistence_type: 'local',\n};\n\nexport default AntdDateRangePicker;\n\nexport const propTypes = AntdDateRangePicker.propTypes;\nexport const defaultProps = AntdDateRangePicker.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataEntry/AntdInput.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdInput = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_entry\" */ '../../fragments/dataEntry/AntdInput.react'\n        )\n);\n\n/**\n * 输入框组件AntdInput\n */\nconst AntdInput = ({\n    id,\n    className,\n    style,\n    styles,\n    classNames,\n    key,\n    name,\n    enableBatchControl = true,\n    mode = 'default',\n    passwordUseMd5 = false,\n    autoComplete = 'on',\n    placeholder,\n    value,\n    size = 'middle',\n    addonBefore,\n    addonAfter,\n    prefix,\n    suffix,\n    allowClear = false,\n    autoFocus = false,\n    bordered = true,\n    variant,\n    defaultValue,\n    disabled = false,\n    maxLength,\n    showCount = false,\n    countFormat,\n    nClicksSearch = 0,\n    nSubmit = 0,\n    status,\n    autoSize = false,\n    debounceWait = 0,\n    readOnly,\n    emptyAsNone = false,\n    setProps,\n    persistence,\n    persisted_props,\n    persistence_type,\n    batchPropsNames = [],\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdInput\n                {...{\n                    id,\n                    className,\n                    style,\n                    styles,\n                    classNames,\n                    key,\n                    name,\n                    enableBatchControl,\n                    mode,\n                    passwordUseMd5,\n                    autoComplete,\n                    placeholder,\n                    value,\n                    size,\n                    addonBefore,\n                    addonAfter,\n                    prefix,\n                    suffix,\n                    allowClear,\n                    autoFocus,\n                    bordered,\n                    variant,\n                    defaultValue,\n                    disabled,\n                    maxLength,\n                    showCount,\n                    countFormat,\n                    nClicksSearch,\n                    nSubmit,\n                    status,\n                    autoSize,\n                    debounceWait,\n                    readOnly,\n                    emptyAsNone,\n                    setProps,\n                    persistence,\n                    persisted_props,\n                    persistence_type,\n                    batchPropsNames,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdInput.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 细分控制子元素css样式\n     */\n    styles: PropTypes.exact({\n        /**\n         * 控制文本框元素css样式\n         */\n        input: PropTypes.object,\n\n        /**\n         * 控制前缀容器css样式\n         */\n        prefix: PropTypes.object,\n\n        /**\n         * 控制后缀容器css样式\n         */\n        suffix: PropTypes.object,\n\n        /**\n         * 控制文字计数元素css样式\n         */\n        count: PropTypes.object,\n\n        /**\n         * 控制文本域元素css样式\n         */\n        textarea: PropTypes.object,\n    }),\n\n    /**\n     * 细分控制子元素css类名\n     */\n    classNames: PropTypes.exact({\n        /**\n         * 控制文本框元素css类名\n         */\n        input: PropTypes.string,\n\n        /**\n         * 控制前缀容器css类名\n         */\n        prefix: PropTypes.string,\n\n        /**\n         * 控制后缀容器css类名\n         */\n        suffix: PropTypes.string,\n\n        /**\n         * 控制文字计数元素css类名\n         */\n        count: PropTypes.string,\n\n        /**\n         * 控制文本域元素css类名\n         */\n        textarea: PropTypes.string,\n    }),\n\n    /**\n     * 配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值\n     */\n    name: PropTypes.string,\n\n    /**\n     * 控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能\n     * 默认值：`true`\n     */\n    enableBatchControl: PropTypes.bool,\n\n    /**\n     * 输入框模式，可选项有`'default'`、`'search'`、`'text-area'`、`'password'`\n     * 默认值：`'default'`\n     */\n    mode: PropTypes.oneOf(['default', 'search', 'text-area', 'password']),\n\n    /**\n     * 是否开启浏览器自带的自动补全功能，可选项有`'off'`、`'on'`\n     * 默认值：`'on'`\n     */\n    autoComplete: PropTypes.oneOf(['off', 'on']),\n\n    /**\n     * 是否禁用当前组件\n     * 默认值：`false`\n     */\n    disabled: PropTypes.bool,\n\n    /**\n     * 当前组件尺寸规格，可选项有`'small'`、`'middle'`、`'large'`\n     * 默认值：`'middle'`\n     */\n    size: PropTypes.oneOf(['small', 'middle', 'large']),\n\n    /**\n     * 是否显示边框，设置为`true`时等价于`variant='outlined'`\n     * 默认值：`true`\n     */\n    bordered: PropTypes.bool,\n\n    /**\n     * 形态变体类型，可选项有`'outlined'`、`'borderless'`、`'filled'`、`'underlined'`，其中`'outlined'`等价于`bordered=True`，但优先级更高\n     */\n    variant: PropTypes.oneOf([\n        'outlined',\n        'borderless',\n        'filled',\n        'underlined',\n    ]),\n\n    /**\n     * 输入框占位文字内容\n     */\n    placeholder: PropTypes.string,\n\n    /**\n     * 监听或设置已输入值\n     */\n    value: PropTypes.string,\n\n    /**\n     * 初始化已输入值\n     */\n    defaultValue: PropTypes.string,\n\n    /**\n     * 针对`'password'`模式，是否启用md5加密功能\n     * 默认值：`false`\n     */\n    passwordUseMd5: PropTypes.bool,\n\n    /**\n     * 当`passwordUseMd5=True`时，监听已输入值md5编码结果\n     */\n    md5Value: PropTypes.string,\n\n    /**\n     * 监听防抖版本的已输入值\n     */\n    debounceValue: PropTypes.string,\n\n    /**\n     * 防抖延时时长，单位：毫秒\n     * 默认值：`0`\n     */\n    debounceWait: PropTypes.number,\n\n    /**\n     * 组件型，前置标签内容\n     */\n    addonBefore: PropTypes.node,\n\n    /**\n     * 组件型，后置标签内容\n     */\n    addonAfter: PropTypes.node,\n\n    /**\n     * 组件型，前缀内嵌内容\n     */\n    prefix: PropTypes.node,\n\n    /**\n     * 组件型，后缀内嵌内容\n     */\n    suffix: PropTypes.node,\n\n    /**\n     * 限制输入框最大可输入字符数量\n     */\n    maxLength: PropTypes.number,\n\n    /**\n     * 是否显示已输入字符计数\n     * 默认值：`false`\n     */\n    showCount: PropTypes.bool,\n\n    /**\n     * 正则表达式，用于配合字符计数相关功能，自定义计数规则\n     */\n    countFormat: PropTypes.string,\n\n    /**\n     * 针对`'text-area'`模式，配置输入框高度自适应相关功能\n     * 默认值：`false`\n     */\n    autoSize: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.exact({\n            /**\n             * 输入框最小行数\n             */\n            minRows: PropTypes.number,\n            /**\n             * 输入框最大行数\n             */\n            maxRows: PropTypes.number,\n        }),\n    ]),\n\n    /**\n     * 监听输入框聚焦状态下，键盘enter键累计点按次数\n     * 默认值：`0`\n     */\n    nSubmit: PropTypes.number,\n\n    /**\n     * 针对`'search'`模式，监听搜索按钮累计点击次数\n     * 默认值：`0`\n     */\n    nClicksSearch: PropTypes.number,\n\n    /**\n     * 控制校验状态，可选项有`'error'`、`'warning'`\n     */\n    status: PropTypes.oneOf(['error', 'warning']),\n\n    /**\n     * 是否允许一键清空已输入值\n     * 默认值：`false`\n     */\n    allowClear: PropTypes.bool,\n\n    /**\n     * 是否自动获取焦点\n     * 默认值：`false`\n     */\n    autoFocus: PropTypes.bool,\n\n    /**\n     * 监听输入框是否聚焦\n     */\n    focusing: PropTypes.bool,\n\n    /**\n     * 是否渲染为只读状态\n     * 默认值：`false`\n     */\n    readOnly: PropTypes.bool,\n\n    /**\n     * 当输入框已输入值为空时，是否强制更新`value`为空值，从而统一空字符串与空值混合的情况\n     * 默认值：`false`\n     */\n    emptyAsNone: PropTypes.bool,\n\n    /**\n     * 需要纳入[批量属性监听](/batch-props-values)的若干属性名\n     */\n    batchPropsNames: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 监听`batchPropsNames`中指定的若干属性值\n     */\n    batchPropsValues: PropTypes.object,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n\n    /**\n     * 是否开启[属性持久化](/prop-persistence)\n     */\n    persistence: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.string,\n        PropTypes.number,\n    ]),\n\n    /**\n     * 开启属性持久化功能的若干属性名，可选项有`'value'`、`'md5Value'`\n     * 默认值：`['value', 'md5Value']`\n     */\n    persisted_props: PropTypes.arrayOf(PropTypes.oneOf(['value', 'md5Value'])),\n\n    /**\n     * 属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n     * 默认值：`'local'`\n     */\n    persistence_type: PropTypes.oneOf(['local', 'session', 'memory']),\n};\n\nAntdInput.dashPersistence = {\n    persisted_props: ['value', 'md5Value'],\n    persistence_type: 'local',\n};\n\nexport default AntdInput;\n\nexport const propTypes = AntdInput.propTypes;\nexport const defaultProps = AntdInput.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataEntry/AntdInputNumber.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdInputNumber = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_entry\" */ '../../fragments/dataEntry/AntdInputNumber.react'\n        )\n);\n\n/**\n * 数值输入框组件AntdInputNumber\n */\nconst AntdInputNumber = ({\n    id,\n    className,\n    style,\n    key,\n    name,\n    enableBatchControl = true,\n    size = 'middle',\n    addonBefore,\n    addonAfter,\n    autoFocus = false,\n    prefix,\n    suffix,\n    bordered = true,\n    variant,\n    controls = true,\n    value,\n    defaultValue,\n    disabled = false,\n    placeholder,\n    keyboard = true,\n    min,\n    max,\n    step,\n    precision,\n    readOnly,\n    stringMode = false,\n    nSubmit = 0,\n    status,\n    debounceWait = 0,\n    setProps,\n    persistence,\n    persisted_props = ['value'],\n    persistence_type = 'local',\n    batchPropsNames = [],\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdInputNumber\n                {...{\n                    id,\n                    className,\n                    style,\n                    key,\n                    name,\n                    enableBatchControl,\n                    size,\n                    addonBefore,\n                    addonAfter,\n                    autoFocus,\n                    prefix,\n                    suffix,\n                    bordered,\n                    variant,\n                    controls,\n                    value,\n                    defaultValue,\n                    disabled,\n                    placeholder,\n                    keyboard,\n                    min,\n                    max,\n                    step,\n                    precision,\n                    readOnly,\n                    stringMode,\n                    nSubmit,\n                    status,\n                    debounceWait,\n                    setProps,\n                    persistence,\n                    persisted_props,\n                    persistence_type,\n                    batchPropsNames,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdInputNumber.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值\n     */\n    name: PropTypes.string,\n\n    /**\n     * 控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能\n     * 默认值：`true`\n     */\n    enableBatchControl: PropTypes.bool,\n\n    /**\n     * 组件型，前置标签内容\n     */\n    addonBefore: PropTypes.node,\n\n    /**\n     * 组件型，后置标签内容\n     */\n    addonAfter: PropTypes.node,\n\n    /**\n     * 组件型，前缀内嵌内容\n     */\n    prefix: PropTypes.node,\n\n    /**\n     * 组件型，后缀内嵌内容\n     */\n    suffix: PropTypes.node,\n\n    /**\n     * 是否自动获取焦点\n     * 默认值：`false`\n     */\n    autoFocus: PropTypes.bool,\n\n    /**\n     * 是否显示增减数值按钮\n     * 默认值：`true`\n     */\n    controls: PropTypes.bool,\n\n    /**\n     * 是否允许通过键盘上下方向键控制数值\n     * 默认值：`true`\n     */\n    keyboard: PropTypes.bool,\n\n    /**\n     * 允许输入的数值下限，默认无限制\n     */\n    min: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n    /**\n     * 允许输入的数值上限，默认无限制\n     */\n    max: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n    /**\n     * 数值增减步长\n     */\n    step: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n    /**\n     * 数值精度\n     */\n    precision: PropTypes.number,\n\n    /**\n     * 是否开启字符串模式，用于在接受超高精度数值输入时不丢失精度，开启后，参数`min`、`max`、`step`、`value`、`defaultValue`均需要设置为字符型\n     * 默认值：`false`\n     */\n    stringMode: PropTypes.bool,\n\n    /**\n     * 是否禁用当前组件\n     * 默认值：`false`\n     */\n    disabled: PropTypes.bool,\n\n    /**\n     * 当前组件尺寸规格，可选项有`'small'`、`'middle'`、`'large'`\n     * 默认值：`'middle'`\n     */\n    size: PropTypes.oneOf(['small', 'middle', 'large']),\n\n    /**\n     * 是否显示边框，设置为`true`时等价于`variant='outlined'`\n     * 默认值：`true`\n     */\n    bordered: PropTypes.bool,\n\n    /**\n     * 形态变体类型，可选项有`'outlined'`、`'borderless'`、`'filled'`、`'underlined'`，其中`'outlined'`等价于`bordered=True`，但优先级更高\n     */\n    variant: PropTypes.oneOf([\n        'outlined',\n        'borderless',\n        'filled',\n        'underlined',\n    ]),\n\n    /**\n     * 输入框占位文字内容\n     */\n    placeholder: PropTypes.string,\n\n    /**\n     * 监听或设置已输入值\n     */\n    value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n    /**\n     * 初始化已输入值\n     */\n    defaultValue: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n    /**\n     * 监听防抖版本的已输入值\n     */\n    debounceValue: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n    /**\n     * 防抖延时时长，单位：毫秒\n     * 默认值：`0`\n     */\n    debounceWait: PropTypes.number,\n\n    /**\n     * 监听输入框聚焦状态下，键盘enter键累计点按次数\n     * 默认值：`0`\n     */\n    nSubmit: PropTypes.number,\n\n    /**\n     * 控制校验状态，可选项有`'error'`、`'warning'`\n     */\n    status: PropTypes.oneOf(['error', 'warning']),\n\n    /**\n     * 是否渲染为只读状态\n     * 默认值：`false`\n     */\n    readOnly: PropTypes.bool,\n\n    /**\n     * 需要纳入[批量属性监听](/batch-props-values)的若干属性名\n     */\n    batchPropsNames: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 监听`batchPropsNames`中指定的若干属性值\n     */\n    batchPropsValues: PropTypes.object,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n\n    /**\n     * 是否开启[属性持久化](/prop-persistence)\n     */\n    persistence: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.string,\n        PropTypes.number,\n    ]),\n\n    /**\n     * 开启属性持久化功能的若干属性名，可选项有`'md5Value'`\n     * 默认值：`['md5Value']`\n     */\n    persisted_props: PropTypes.arrayOf(PropTypes.oneOf(['value'])),\n\n    /**\n     * 属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n     * 默认值：`'local'`\n     */\n    persistence_type: PropTypes.oneOf(['local', 'session', 'memory']),\n};\n\nAntdInputNumber.dashPersistence = {\n    persisted_props: ['value'],\n    persistence_type: 'local',\n};\n\nexport default AntdInputNumber;\n\nexport const propTypes = AntdInputNumber.propTypes;\nexport const defaultProps = AntdInputNumber.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataEntry/AntdMentions.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdMentions = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_entry\" */ '../../fragments/dataEntry/AntdMentions.react'\n        )\n);\n\n/**\n * 提及组件AntdMentions\n */\nconst AntdMentions = ({\n    id,\n    className,\n    style,\n    popupClassName,\n    key,\n    name,\n    enableBatchControl = true,\n    autoSize = false,\n    prefix = '@',\n    value,\n    defaultValue,\n    placement = 'bottom',\n    bordered = true,\n    variant,\n    placeholder,\n    options,\n    disabled = false,\n    status,\n    autoFocus = false,\n    popupContainer,\n    setProps,\n    batchPropsNames = [],\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdMentions\n                {...{\n                    id,\n                    className,\n                    style,\n                    popupClassName,\n                    key,\n                    name,\n                    enableBatchControl,\n                    autoSize,\n                    prefix,\n                    value,\n                    defaultValue,\n                    placement,\n                    bordered,\n                    variant,\n                    placeholder,\n                    options,\n                    disabled,\n                    status,\n                    autoFocus,\n                    popupContainer,\n                    setProps,\n                    batchPropsNames,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdMentions.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 展开菜单css类名\n     */\n    popupClassName: PropTypes.string,\n\n    /**\n     * 配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值\n     */\n    name: PropTypes.string,\n\n    /**\n     * 控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能\n     * 默认值：`true`\n     */\n    enableBatchControl: PropTypes.bool,\n\n    /**\n     * 配置输入框高度自适应相关功能\n     * 默认值：`false`\n     */\n    autoSize: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.exact({\n            /**\n             * 输入框最小行数\n             */\n            minRows: PropTypes.number,\n            /**\n             * 输入框最大行数\n             */\n            maxRows: PropTypes.number,\n        }),\n    ]),\n\n    /**\n     * 触发选择菜单展开的关键字\n     * 默认值：`'@'`\n     */\n    prefix: PropTypes.string,\n\n    /**\n     * 监听或设置已输入值\n     */\n    value: PropTypes.string,\n\n    /**\n     * 初始化已输入值\n     */\n    defaultValue: PropTypes.string,\n\n    /**\n     * 必填，配置选择菜单子项\n     */\n    options: PropTypes.arrayOf(\n        PropTypes.exact({\n            /**\n             * 组件型，当前选项标签内容\n             */\n            label: PropTypes.node,\n            /**\n             * 当前选项值\n             */\n            value: PropTypes.string,\n        })\n    ).isRequired,\n\n    /**\n     * 监听输入内容中对应的已选子项值\n     */\n    selectedOptions: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 是否禁用当前组件\n     * 默认值：`false`\n     */\n    disabled: PropTypes.bool,\n\n    /**\n     * 选择菜单弹出方向，可选项有`'top'`、`'bottom'`\n     * 默认值：`'bottom'`\n     */\n    placement: PropTypes.oneOf(['top', 'bottom']),\n\n    /**\n     * 是否显示边框，设置为`true`时等价于`variant='outlined'`\n     * 默认值：`true`\n     */\n    bordered: PropTypes.bool,\n\n    /**\n     * 形态变体类型，可选项有`'outlined'`、`'borderless'`、`'filled'`、`'underlined'`，其中`'outlined'`等价于`bordered=True`，但优先级更高\n     */\n    variant: PropTypes.oneOf([\n        'outlined',\n        'borderless',\n        'filled',\n        'underlined',\n    ]),\n\n    /**\n     * 输入框占位文字内容\n     */\n    placeholder: PropTypes.string,\n\n    /**\n     * 控制校验状态，可选项有`'error'`、`'warning'`\n     */\n    status: PropTypes.oneOf(['error', 'warning']),\n\n    /**\n     * 是否自动获取焦点\n     * 默认值：`false`\n     */\n    autoFocus: PropTypes.bool,\n\n    /**\n     * 相关展开层锚定策略，可选项有`'parent'`、`'body'`\n     * 默认值：`'body'`\n     */\n    popupContainer: PropTypes.oneOf(['parent', 'body']),\n\n    /**\n     * 需要纳入[批量属性监听](/batch-props-values)的若干属性名\n     */\n    batchPropsNames: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 监听`batchPropsNames`中指定的若干属性值\n     */\n    batchPropsValues: PropTypes.object,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdMentions;\n\nexport const propTypes = AntdMentions.propTypes;\nexport const defaultProps = AntdMentions.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataEntry/AntdOTP.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdOTP = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_entry\" */ '../../fragments/dataEntry/AntdOTP.react'\n        )\n);\n\n/**\n * 一次性密码框组件AntdOTP\n */\nconst AntdOTP = ({\n    id,\n    className,\n    style,\n    key,\n    name,\n    enableBatchControl = true,\n    defaultValue,\n    value,\n    disabled = false,\n    length = 6,\n    mask = false,\n    status,\n    size = 'middle',\n    variant = 'outlined',\n    setProps,\n    persistence,\n    persisted_props,\n    persistence_type,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdOTP\n                {...{\n                    id,\n                    className,\n                    style,\n                    key,\n                    name,\n                    enableBatchControl,\n                    defaultValue,\n                    value,\n                    disabled,\n                    length,\n                    mask,\n                    status,\n                    size,\n                    variant,\n                    setProps,\n                    persistence,\n                    persisted_props,\n                    persistence_type,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdOTP.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值\n     */\n    name: PropTypes.string,\n\n    /**\n     * 控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能\n     * 默认值：`true`\n     */\n    enableBatchControl: PropTypes.bool,\n\n    /**\n     * 监听或设置已选值\n     */\n    value: PropTypes.string,\n\n    /**\n     * 初始化已选值\n     */\n    defaultValue: PropTypes.string,\n\n    /**\n     * 是否禁用当前组件\n     * 默认值：`false`\n     */\n    disabled: PropTypes.bool,\n\n    /**\n     * 单体输入框数量\n     * 默认值：`6`\n     */\n    length: PropTypes.number,\n\n    /**\n     * 自定义遮罩字符\n     * 默认值：`false`\n     */\n    mask: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n\n    /**\n     * 控制校验状态，可选项有`'error'`、`'warning'`\n     */\n    status: PropTypes.oneOf(['error', 'warning']),\n\n    /**\n     * 当前组件尺寸规格，可选项有`'small'`、`'middle'`、`'large'`\n     * 默认值：`'middle'`\n     */\n    size: PropTypes.oneOf(['small', 'middle', 'large']),\n\n    /**\n     * 形态变体类型，可选项有`'outlined'`、`'borderless'`、`'filled'`、`'underlined'`，其中`'outlined'`等价于`bordered=True`，但优先级更高\n     */\n    variant: PropTypes.oneOf([\n        'outlined',\n        'borderless',\n        'filled',\n        'underlined',\n    ]),\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n\n    /**\n     * 是否开启[属性持久化](/prop-persistence)\n     */\n    persistence: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.string,\n        PropTypes.number,\n    ]),\n\n    /**\n     * 开启属性持久化功能的若干属性名，可选项有`'value'`\n     * 默认值：`['value']`\n     */\n    persisted_props: PropTypes.arrayOf(PropTypes.oneOf(['value'])),\n\n    /**\n     * 属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n     * 默认值：`'local'`\n     */\n    persistence_type: PropTypes.oneOf(['local', 'session', 'memory']),\n};\n\nAntdOTP.dashPersistence = {\n    persisted_props: ['value'],\n    persistence_type: 'local',\n};\n\nexport default AntdOTP;\n\nexport const propTypes = AntdOTP.propTypes;\nexport const defaultProps = AntdOTP.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataEntry/AntdRadioGroup.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdRadioGroup = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_entry\" */ '../../fragments/dataEntry/AntdRadioGroup.react'\n        )\n);\n\n/**\n * 单选框组件AntdRadioGroup\n */\nconst AntdRadioGroup = ({\n    id,\n    style,\n    className,\n    key,\n    name,\n    enableBatchControl = true,\n    options,\n    defaultValue,\n    value,\n    direction = 'horizontal',\n    optionType = 'default',\n    buttonStyle = 'outline',\n    block = false,\n    disabled = false,\n    size = 'middle',\n    readOnly = false,\n    setProps,\n    persistence,\n    persisted_props,\n    persistence_type,\n    batchPropsNames = [],\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdRadioGroup\n                {...{\n                    id,\n                    style,\n                    className,\n                    key,\n                    name,\n                    enableBatchControl,\n                    options,\n                    defaultValue,\n                    value,\n                    direction,\n                    optionType,\n                    buttonStyle,\n                    block,\n                    disabled,\n                    size,\n                    readOnly,\n                    setProps,\n                    persistence,\n                    persisted_props,\n                    persistence_type,\n                    batchPropsNames,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdRadioGroup.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值\n     */\n    name: PropTypes.string,\n\n    /**\n     * 控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能\n     * 默认值：`true`\n     */\n    enableBatchControl: PropTypes.bool,\n\n    /**\n     * 单选框排列方向，可选项有`'horizontal'`、`'vertical'`\n     * 默认值：`'horizontal'`\n     */\n    direction: PropTypes.oneOf(['horizontal', 'vertical']),\n\n    /**\n     * 配置选项\n     */\n    options: PropTypes.arrayOf(\n        PropTypes.oneOfType([\n            PropTypes.string,\n            PropTypes.number,\n            PropTypes.exact({\n                /**\n                 * 组件型，当前选项标签内容\n                 */\n                label: PropTypes.node,\n                /**\n                 * 当前选项值\n                 */\n                value: PropTypes.oneOfType([\n                    PropTypes.string,\n                    PropTypes.number,\n                ]),\n                /**\n                 * 是否禁用当前选项\n                 * 默认值：`false`\n                 */\n                disabled: PropTypes.bool,\n            }),\n        ])\n    ),\n\n    /**\n     * 是否撑满父容器\n     * 默认值：`false`\n     */\n    block: PropTypes.bool,\n\n    /**\n     * 是否禁用当前组件\n     * 默认值：`false`\n     */\n    disabled: PropTypes.bool,\n\n    /**\n     * 当`optionType='button'`时，控制各选项按钮尺寸规格，可选项有`'small'`、`'middle'`、`'large'`\n     * 默认值：`'middle'`\n     */\n    size: PropTypes.oneOf(['small', 'middle', 'large']),\n\n    /**\n     * 监听或设置已选值，与`format`格式对应\n     */\n    value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n    /**\n     * 初始化已选值，与`format`格式对应\n     */\n    defaultValue: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n    /**\n     * 选项形式，可选项有`'default'`、`'button'`\n     * 默认值：`'default'`\n     */\n    optionType: PropTypes.oneOf(['default', 'button']),\n\n    /**\n     * 当`optionType='button'`时，设置按钮风格，可选项有`'outline'`、`'solid'`\n     * 默认值：`'outline'`\n     */\n    buttonStyle: PropTypes.oneOf(['outline', 'solid']),\n\n    /**\n     * 是否渲染为只读状态\n     * 默认值：`false`\n     */\n    readOnly: PropTypes.bool,\n\n    /**\n     * 需要纳入[批量属性监听](/batch-props-values)的若干属性名\n     */\n    batchPropsNames: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 监听`batchPropsNames`中指定的若干属性值\n     */\n    batchPropsValues: PropTypes.object,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n\n    /**\n     * 是否开启[属性持久化](/prop-persistence)\n     */\n    persistence: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.string,\n        PropTypes.number,\n    ]),\n\n    /**\n     * 开启属性持久化功能的若干属性名，可选项有`'value'`\n     * 默认值：`['value']`\n     */\n    persisted_props: PropTypes.arrayOf(PropTypes.oneOf(['value'])),\n\n    /**\n     * 属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n     * 默认值：`'local'`\n     */\n    persistence_type: PropTypes.oneOf(['local', 'session', 'memory']),\n};\n\nAntdRadioGroup.dashPersistence = {\n    persisted_props: ['value'],\n    persistence_type: 'local',\n};\n\nexport default AntdRadioGroup;\n\nexport const propTypes = AntdRadioGroup.propTypes;\nexport const defaultProps = AntdRadioGroup.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataEntry/AntdRate.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdRate = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_entry\" */ '../../fragments/dataEntry/AntdRate.react'\n        )\n);\n\n/**\n * 评分组件AntdRate\n */\nconst AntdRate = ({\n    id,\n    className,\n    style,\n    key,\n    name,\n    enableBatchControl = true,\n    allowClear = true,\n    allowHalf = false,\n    count = 5,\n    disabled = false,\n    autoFocus = false,\n    tooltips,\n    defaultValue = 0,\n    value,\n    setProps,\n    persistence,\n    persisted_props = ['value'],\n    persistence_type = 'local',\n    batchPropsNames = [],\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdRate\n                {...{\n                    id,\n                    className,\n                    style,\n                    key,\n                    name,\n                    enableBatchControl,\n                    allowClear,\n                    allowHalf,\n                    count,\n                    disabled,\n                    autoFocus,\n                    tooltips,\n                    defaultValue,\n                    value,\n                    setProps,\n                    persistence,\n                    persisted_props,\n                    persistence_type,\n                    batchPropsNames,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdRate.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值\n     */\n    name: PropTypes.string,\n\n    /**\n     * 控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能\n     * 默认值：`true`\n     */\n    enableBatchControl: PropTypes.bool,\n\n    /**\n     * 是否允许通过再次点击清除已选分值\n     * 默认值：`true`\n     */\n    allowClear: PropTypes.bool,\n\n    /**\n     * 是否允许半星选择\n     * 默认值：`false`\n     */\n    allowHalf: PropTypes.bool,\n\n    /**\n     * 总分值\n     * 默认值：`5`\n     */\n    count: PropTypes.number,\n\n    /**\n     * 为各分值设置提示文字信息\n     */\n    tooltips: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 是否渲染为只读评分形式\n     * 默认值：`false`\n     */\n    disabled: PropTypes.bool,\n\n    /**\n     * 是否自动获取焦点\n     * 默认值：`false`\n     */\n    autoFocus: PropTypes.bool,\n\n    /**\n     * 监听或设置已选值\n     */\n    value: PropTypes.number,\n\n    /**\n     * 初始化已选值\n     * 默认值：`0`\n     */\n    defaultValue: PropTypes.number,\n\n    /**\n     * 需要纳入[批量属性监听](/batch-props-values)的若干属性名\n     */\n    batchPropsNames: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 监听`batchPropsNames`中指定的若干属性值\n     */\n    batchPropsValues: PropTypes.object,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n\n    /**\n     * 是否开启[属性持久化](/prop-persistence)\n     */\n    persistence: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.string,\n        PropTypes.number,\n    ]),\n\n    /**\n     * 开启属性持久化功能的若干属性名，可选项有`'value'`\n     * 默认值：`['value']`\n     */\n    persisted_props: PropTypes.arrayOf(PropTypes.oneOf(['value'])),\n\n    /**\n     * 属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n     * 默认值：`'local'`\n     */\n    persistence_type: PropTypes.oneOf(['local', 'session', 'memory']),\n};\n\nAntdRate.dashPersistence = {\n    persisted_props: ['value'],\n    persistence_type: 'local',\n};\n\nexport default AntdRate;\n\nexport const propTypes = AntdRate.propTypes;\nexport const defaultProps = AntdRate.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataEntry/AntdSegmentedColoring.react.js",
    "content": "/* eslint-disable no-undefined */\n/* eslint-disable no-unused-vars */\nimport React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdSegmentedColoring = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_entry\" */ '../../fragments/dataEntry/AntdSegmentedColoring.react'\n        )\n);\n\n/**\n * 分段着色组件AntdSegmentedColoring\n */\nconst AntdSegmentedColoring = ({\n    id,\n    key,\n    className,\n    style,\n    size = 'middle',\n    bordered = true,\n    variant,\n    controls = true,\n    disabled = false,\n    keyboard = true,\n    placeholder,\n    min,\n    max,\n    step = 0.01,\n    precision = 2,\n    readOnly,\n    pureLegend = false,\n    breakpoints,\n    colors,\n    inputNumberStyle,\n    colorBlockPosition = 'right',\n    colorBlockStyle,\n    pureLegendLabelStyle,\n    setProps,\n    batchPropsNames = [],\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdSegmentedColoring\n                {...{\n                    id,\n                    key,\n                    className,\n                    style,\n                    size,\n                    bordered,\n                    variant,\n                    controls,\n                    disabled,\n                    keyboard,\n                    placeholder,\n                    min,\n                    max,\n                    step,\n                    precision,\n                    readOnly,\n                    pureLegend,\n                    breakpoints,\n                    colors,\n                    inputNumberStyle,\n                    colorBlockPosition,\n                    colorBlockStyle,\n                    pureLegendLabelStyle,\n                    setProps,\n                    batchPropsNames,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdSegmentedColoring.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 必填，监听或设置分段断点数组\n     */\n    breakpoints: PropTypes.arrayOf(PropTypes.number).isRequired,\n\n    /**\n     * 必填，为各分段设置颜色，数组长度应为`breakpoints`长度减1\n     */\n    colors: PropTypes.arrayOf(PropTypes.string).isRequired,\n\n    /**\n     * 是否为各分段数值输入框添加增减按钮\n     * 默认值：`true`\n     */\n    controls: PropTypes.bool,\n\n    /**\n     * 是否可通过键盘上下方向键增减各分段数值输入框数值\n     * 默认值：`true`\n     */\n    keyboard: PropTypes.bool,\n\n    /**\n     * 各分段数值输入框允许输入数值下限，默认无限制\n     */\n    min: PropTypes.number,\n\n    /**\n     * 各分段数值输入框允许输入数值上限，默认无限制\n     */\n    max: PropTypes.number,\n\n    /**\n     * 各分段数值输入框数值调整步长\n     * 默认值：`0.01`\n     */\n    step: PropTypes.number,\n\n    /**\n     * 各分段数值输入框数值精度\n     * 默认值：`2`\n     */\n    precision: PropTypes.number,\n\n    /**\n     * 是否禁用当前组件\n     * 默认值：`false`\n     */\n    disabled: PropTypes.bool,\n\n    /**\n     * 当前组件尺寸规格，可选项有`'small'`、`'middle'`、`'large'`\n     * 默认值：`'middle'`\n     */\n    size: PropTypes.oneOf(['small', 'middle', 'large']),\n\n    /**\n     * 是否显示边框，设置为`true`时等价于`variant='outlined'`\n     * 默认值：`true`\n     */\n    bordered: PropTypes.bool,\n\n    /**\n     * 形态变体类型，可选项有`'outlined'`、`'borderless'`、`'filled'`、`'underlined'`，其中`'outlined'`等价于`bordered=True`，但优先级更高\n     */\n    variant: PropTypes.oneOf([\n        'outlined',\n        'borderless',\n        'filled',\n        'underlined',\n    ]),\n\n    /**\n     * 各分段数值输入框占位文字内容\n     */\n    placeholder: PropTypes.string,\n\n    /**\n     * 是否渲染为只读状态\n     * 默认值：`false`\n     */\n    readOnly: PropTypes.bool,\n\n    /**\n     * 是否开启纯图例模式\n     * 默认值：`false`\n     */\n    pureLegend: PropTypes.bool,\n\n    /**\n     * 各分段数值输入框统一css样式\n     */\n    inputNumberStyle: PropTypes.object,\n\n    /**\n     * 色块css样式\n     */\n    colorBlockStyle: PropTypes.object,\n\n    /**\n     * 色块显示方位，可选项有`'left'`、`'right'`\n     * 默认值：`'right'`\n     */\n    colorBlockPosition: PropTypes.oneOf(['left', 'right']),\n\n    /**\n     * 监听分段色块点击事件\n     */\n    colorBlockClickEvent: PropTypes.shape({\n        /**\n         * 被点击色块的颜色值\n         */\n        color: PropTypes.string,\n        /**\n         * 被点击色块对应范围值\n         */\n        range: PropTypes.arrayOf(PropTypes.number),\n        /**\n         * 事件对应时间戳\n         */\n        timestamp: PropTypes.number,\n    }),\n\n    /**\n     * 当`pureLegend=True`时，设置各分段数值统一css样式\n     */\n    pureLegendLabelStyle: PropTypes.object,\n\n    /**\n     * 需要纳入[批量属性监听](/batch-props-values)的若干属性名\n     */\n    batchPropsNames: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 监听`batchPropsNames`中指定的若干属性值\n     */\n    batchPropsValues: PropTypes.object,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdSegmentedColoring;\n\nexport const propTypes = AntdSegmentedColoring.propTypes;\nexport const defaultProps = AntdSegmentedColoring.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataEntry/AntdSelect.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdSelect = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_entry\" */ '../../fragments/dataEntry/AntdSelect.react'\n        )\n);\n\n/**\n * 下拉选择组件AntdSelect\n */\nconst AntdSelect = ({\n    id,\n    style,\n    className,\n    popupClassName,\n    key,\n    name,\n    enableBatchControl = true,\n    locale = 'zh-cn',\n    setProps,\n    placeholder,\n    size = 'middle',\n    bordered = true,\n    variant,\n    options = [],\n    colorsNameWidth = 40,\n    allowClear = true,\n    autoFocus = false,\n    disabled,\n    value,\n    mode,\n    defaultValue,\n    maxTagCount = 5,\n    listHeight = 256,\n    colorsMode = 'sequential',\n    placement = 'bottomLeft',\n    status,\n    optionFilterProp = 'value',\n    optionFilterMode = 'case-insensitive',\n    autoSpin = false,\n    debounceWait = 0,\n    autoClearSearchValue = true,\n    emptyContent,\n    loadingEmptyContent,\n    dropdownBefore,\n    dropdownAfter,\n    prefix,\n    suffixIcon,\n    popupContainer = 'body',\n    readOnly,\n    maxCount,\n    showSearch,\n    popupMatchSelectWidth = true,\n    persistence,\n    persisted_props,\n    persistence_type,\n    batchPropsNames = [],\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdSelect\n                {...{\n                    id,\n                    style,\n                    className,\n                    popupClassName,\n                    key,\n                    name,\n                    enableBatchControl,\n                    locale,\n                    setProps,\n                    placeholder,\n                    size,\n                    bordered,\n                    variant,\n                    options,\n                    colorsNameWidth,\n                    allowClear,\n                    autoFocus,\n                    disabled,\n                    value,\n                    mode,\n                    defaultValue,\n                    maxTagCount,\n                    listHeight,\n                    colorsMode,\n                    placement,\n                    status,\n                    optionFilterProp,\n                    optionFilterMode,\n                    autoSpin,\n                    debounceWait,\n                    autoClearSearchValue,\n                    emptyContent,\n                    loadingEmptyContent,\n                    dropdownBefore,\n                    dropdownAfter,\n                    prefix,\n                    suffixIcon,\n                    popupContainer,\n                    readOnly,\n                    maxCount,\n                    showSearch,\n                    popupMatchSelectWidth,\n                    persistence,\n                    persisted_props,\n                    persistence_type,\n                    batchPropsNames,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdSelect.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果F\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 展开菜单css类名\n     */\n    popupClassName: PropTypes.string,\n\n    /**\n     * 配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值\n     */\n    name: PropTypes.string,\n\n    /**\n     * 控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能\n     * 默认值：`true`\n     */\n    enableBatchControl: PropTypes.bool,\n\n    /**\n     * 组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n     * 默认值：`'zh-cn'`\n     */\n    locale: PropTypes.oneOf(['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']),\n\n    /**\n     * 配置下拉选项\n     */\n    options: PropTypes.arrayOf(\n        PropTypes.oneOfType([\n            PropTypes.string,\n            PropTypes.number,\n            PropTypes.exact({\n                /**\n                 * 组件型，当前选项标签内容\n                 */\n                label: PropTypes.node.isRequired,\n                /**\n                 * 当前选项值\n                 */\n                value: PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n                    .isRequired,\n                /**\n                 * 是否禁用当前选项\n                 * 默认值：`false`\n                 */\n                disabled: PropTypes.bool,\n                /**\n                 * 针对色带特殊渲染模式，设置生成渐变色带所需的色彩值数组\n                 */\n                colors: PropTypes.arrayOf(PropTypes.string),\n            }),\n            PropTypes.exact({\n                /**\n                 * 组件型，当前分组标签内容\n                 */\n                group: PropTypes.node,\n                /**\n                 * 配置当前分组内选项\n                 */\n                options: PropTypes.arrayOf(\n                    PropTypes.exact({\n                        /**\n                         * 组件型，当前选项标签内容\n                         */\n                        label: PropTypes.node.isRequired,\n                        /**\n                         * 当前选项值\n                         */\n                        value: PropTypes.oneOfType([\n                            PropTypes.string,\n                            PropTypes.number,\n                        ]).isRequired,\n                        /**\n                         * 是否禁用当前选项\n                         * 默认值：`false`\n                         */\n                        disabled: PropTypes.bool,\n                        /**\n                         * 针对色带特殊渲染模式，设置生成渐变色带所需的色彩值数组\n                         */\n                        colors: PropTypes.arrayOf(PropTypes.string),\n                    })\n                ),\n            }),\n        ])\n    ),\n\n    /**\n     * 下拉菜单最大像素高度\n     */\n    listHeight: PropTypes.number,\n\n    /**\n     * 色带特殊渲染模式下，设置渲染形式，可选项有`'sequential'`、`'diverging'`\n     */\n    colorsMode: PropTypes.oneOf(['sequential', 'diverging']),\n\n    /**\n     * 色带特殊渲染模式下，设置各选项名称部分像素宽度\n     * 默认值：`40`\n     */\n    colorsNameWidth: PropTypes.number,\n\n    /**\n     * 选择模式，可选项有`'multiple'`（多选）、`'tags'`（自由新增）\n     */\n    mode: PropTypes.oneOf(['multiple', 'tags']),\n\n    /**\n     * 是否禁用当前组件\n     * 默认值：`false`\n     */\n    disabled: PropTypes.bool,\n\n    /**\n     * 当前组件尺寸规格，可选项有`'small'`、`'middle'`、`'large'`\n     * 默认值：`'middle'`\n     */\n    size: PropTypes.oneOf(['small', 'middle', 'large']),\n\n    /**\n     * 是否显示边框，设置为`true`时等价于`variant='outlined'`\n     * 默认值：`true`\n     */\n    bordered: PropTypes.bool,\n\n    /**\n     * 形态变体类型，可选项有`'outlined'`、`'borderless'`、`'filled'`、`'underlined'`，其中`'outlined'`等价于`bordered=True`，但优先级更高\n     */\n    variant: PropTypes.oneOf([\n        'outlined',\n        'borderless',\n        'filled',\n        'underlined',\n    ]),\n\n    /**\n     * 输入框占位文字内容\n     */\n    placeholder: PropTypes.string,\n\n    /**\n     * 选择面板展开方向，可选项有`'bottomLeft'`、`'bottomRight'`、`'topLeft'`、`'topRight'`\n     * 默认值：`'bottomLeft'`\n     */\n    placement: PropTypes.oneOf([\n        'bottomLeft',\n        'bottomRight',\n        'topLeft',\n        'topRight',\n    ]),\n\n    /**\n     * 监听或设置已选值\n     */\n    value: PropTypes.oneOfType([\n        PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n        PropTypes.arrayOf(\n            PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n        ),\n    ]),\n\n    /**\n     * 初始化已选值\n     */\n    defaultValue: PropTypes.oneOfType([\n        PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n        PropTypes.arrayOf(\n            PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n        ),\n    ]),\n\n    /**\n     * 当`multiple=True`时，已选值展示的最大数量\n     * 默认值：`5`\n     */\n    maxTagCount: PropTypes.oneOfType([\n        PropTypes.number,\n        PropTypes.oneOf(['responsive']),\n    ]),\n\n    /**\n     * 控制校验状态，可选项有`'error'`、`'warning'`\n     */\n    status: PropTypes.oneOf(['error', 'warning']),\n\n    /**\n     * 基于搜索框中输入内容进行搜索的目标字段，可选项有`'value'`、`'label'`\n     * 默认值：`'value'`\n     */\n    optionFilterProp: PropTypes.oneOf(['value', 'label']),\n\n    /**\n     * 监听搜索框已输入内容\n     */\n    searchValue: PropTypes.string,\n\n    /**\n     * 搜索匹配模式，可选项有`'case-insensitive'`（大小写不敏感）、`'case-sensitive'`（大小写敏感）、`'regex'`（正则表达式）、`'remote-match'`（远程匹配模式）\n     * 默认值：`'case-insensitive'`\n     */\n    optionFilterMode: PropTypes.oneOf([\n        'case-insensitive',\n        'case-sensitive',\n        'regex',\n        'remote-match',\n    ]),\n\n    /**\n     * 以防抖延时的方式监听搜索框已输入内容\n     */\n    debounceSearchValue: PropTypes.string,\n\n    /**\n     * 防抖延时时长，单位：毫秒\n     * 默认值：`0`\n     */\n    debounceWait: PropTypes.number,\n\n    /**\n     * 是否在当前组件相关属性处理回调更新中状态时，以加载中状态进行渲染\n     * 默认值：`false`\n     */\n    autoSpin: PropTypes.bool,\n\n    /**\n     * 当`mode`为`'multiple'`或`'tags'`时，设置是否在选中项后自动清空搜索框中的内容\n     * 默认值：`true`\n     */\n    autoClearSearchValue: PropTypes.bool,\n\n    /**\n     * 组件型，自定义空数据状态提示内容\n     */\n    emptyContent: PropTypes.node,\n\n    /**\n     * 组件型，自定义加载中状态下的空数据状态提示内容\n     */\n    loadingEmptyContent: PropTypes.node,\n\n    /**\n     * 组件型，选择菜单前缀内容\n     */\n    dropdownBefore: PropTypes.node,\n\n    /**\n     * 组件型，选择菜单后缀内容\n     */\n    dropdownAfter: PropTypes.node,\n\n    /**\n     * 组件型，前缀内嵌内容\n     */\n    prefix: PropTypes.node,\n\n    /**\n     * 自定义选择框后缀图标内容\n     */\n    suffixIcon: PropTypes.node,\n\n    /**\n     * 是否允许一键清空已选值\n     * 默认值：`true`\n     */\n    allowClear: PropTypes.bool,\n\n    /**\n     * 是否自动获取焦点\n     * 默认值：`false`\n     */\n    autoFocus: PropTypes.bool,\n\n    /**\n     * 选择菜单是否与选择框同宽，设置为`false`时将关闭虚拟滚动功能\n     * 默认值：`true`\n     */\n    popupMatchSelectWidth: PropTypes.bool,\n\n    /**\n     * 是否渲染为只读状态\n     * 默认值：`false`\n     */\n    readOnly: PropTypes.bool,\n\n    /**\n     * `'multiple'`及 `'tags'`模式下有效，限制已选项数量上限\n     */\n    maxCount: PropTypes.number,\n\n    /**\n     * 是否开启输入框可搜索功能\n     */\n    showSearch: PropTypes.bool,\n\n    /**\n     * 相关展开层锚定策略，可选项有`'parent'`、`'body'`\n     * 默认值：`'body'`\n     */\n    popupContainer: PropTypes.oneOf(['parent', 'body']),\n\n    /**\n     * 需要纳入[批量属性监听](/batch-props-values)的若干属性名\n     */\n    batchPropsNames: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 监听`batchPropsNames`中指定的若干属性值\n     */\n    batchPropsValues: PropTypes.object,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n\n    /**\n     * 是否开启[属性持久化](/prop-persistence)\n     */\n    persistence: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.string,\n        PropTypes.number,\n    ]),\n\n    /**\n     * 开启属性持久化功能的若干属性名，可选项有`'value'`\n     * 默认值：`['value']`\n     */\n    persisted_props: PropTypes.arrayOf(PropTypes.oneOf(['value'])),\n\n    /**\n     * 属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n     * 默认值：`'local'`\n     */\n    persistence_type: PropTypes.oneOf(['local', 'session', 'memory']),\n};\n\nAntdSelect.dashPersistence = {\n    persisted_props: ['value'],\n    persistence_type: 'local',\n};\n\nexport default AntdSelect;\n\nexport const propTypes = AntdSelect.propTypes;\nexport const defaultProps = AntdSelect.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataEntry/AntdSlider.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdSlider = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_entry\" */ '../../fragments/dataEntry/AntdSlider.react'\n        )\n);\n\n/**\n * 滑动输入条组件AntdSlider\n */\nconst AntdSlider = ({\n    id,\n    className,\n    style,\n    styles,\n    classNames,\n    key,\n    name,\n    enableBatchControl = true,\n    value,\n    defaultValue,\n    disabled = false,\n    autoFocus = false,\n    vertical = false,\n    range = false,\n    min = 0,\n    max = 100,\n    step = 1,\n    marks,\n    tooltipVisible,\n    tooltipPrefix = '',\n    tooltipSuffix = '',\n    popupContainer = 'body',\n    readOnly = false,\n    setProps,\n    persistence,\n    persisted_props,\n    persistence_type,\n    batchPropsNames = [],\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdSlider\n                {...{\n                    id,\n                    className,\n                    style,\n                    styles,\n                    classNames,\n                    key,\n                    name,\n                    enableBatchControl,\n                    value,\n                    defaultValue,\n                    disabled,\n                    autoFocus,\n                    vertical,\n                    range,\n                    min,\n                    max,\n                    step,\n                    marks,\n                    tooltipVisible,\n                    tooltipPrefix,\n                    tooltipSuffix,\n                    popupContainer,\n                    readOnly,\n                    setProps,\n                    persistence,\n                    persisted_props,\n                    persistence_type,\n                    batchPropsNames,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdSlider.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 细分控制子元素css样式\n     */\n    styles: PropTypes.exact({\n        /**\n         * 根元素css样式\n         */\n        root: PropTypes.object,\n        /**\n         * 范围选择下，点和点之间单个选取条css样式\n         */\n        track: PropTypes.object,\n        /**\n         * 范围选择下，整个范围选取条css样式\n         */\n        tracks: PropTypes.object,\n        /**\n         * 背景条css样式\n         */\n        rail: PropTypes.object,\n        /**\n         * 抓取点元素css样式\n         */\n        handle: PropTypes.object,\n    }),\n\n    /**\n     * 细分控制子元素css类名\n     */\n    classNames: PropTypes.exact({\n        /**\n         * 根元素css类名\n         */\n        root: PropTypes.string,\n        /**\n         * 范围选择下，点和点之间单个选取条css类名\n         */\n        track: PropTypes.string,\n        /**\n         * 范围选择下，整个范围选取条css类名\n         */\n        tracks: PropTypes.string,\n        /**\n         * 背景条css类名\n         */\n        rail: PropTypes.string,\n        /**\n         * 抓取点元素css类名\n         */\n        handle: PropTypes.string,\n    }),\n\n    /**\n     * 配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值\n     */\n    name: PropTypes.string,\n\n    /**\n     * 控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能\n     * 默认值：`true`\n     */\n    enableBatchControl: PropTypes.bool,\n\n    /**\n     * 是否以垂直模式显示\n     * 默认值：`false`\n     */\n    vertical: PropTypes.bool,\n\n    /**\n     * 是否以范围模式显示\n     */\n    range: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.shape({\n            /**\n             * 是否开启节点动态增减功能\n             * 默认值：`false`\n             */\n            editable: PropTypes.bool,\n            /**\n             * 开启节点动态增减功能后，允许的最小节点数量\n             * 默认值：`0`\n             */\n            minCount: PropTypes.number,\n            /**\n             * 开启节点动态增减功能后，允许的最大节点数量\n             */\n            maxCount: PropTypes.number,\n        }),\n    ]),\n\n    /**\n     * 必填，可滑动范围下限\n     */\n    min: PropTypes.number.isRequired,\n\n    /**\n     * 必填，可滑动范围上限\n     */\n    max: PropTypes.number.isRequired,\n\n    /**\n     * 滑动步长\n     */\n    step: PropTypes.number,\n\n    /**\n     * 为部分数值设置刻度信息\n     */\n    marks: PropTypes.objectOf(PropTypes.node),\n\n    /**\n     * 滑动数值文字提示显示策略，`true`表示持续显示，`false`表示始终不显示\n     */\n    tooltipVisible: PropTypes.bool,\n\n    /**\n     * 滑动数值文字提示前缀信息\n     */\n    tooltipPrefix: PropTypes.string,\n\n    /**\n     * 滑动数值文字提示后缀信息\n     */\n    tooltipSuffix: PropTypes.string,\n\n    /**\n     * 是否禁用当前组件\n     * 默认值：`false`\n     */\n    disabled: PropTypes.bool,\n\n    /**\n     * 监听或设置已选值\n     */\n    value: PropTypes.oneOfType([\n        PropTypes.number,\n        PropTypes.arrayOf(PropTypes.number),\n    ]),\n\n    /**\n     * 初始化已选值\n     */\n    defaultValue: PropTypes.oneOfType([\n        PropTypes.number,\n        PropTypes.arrayOf(PropTypes.number),\n    ]),\n\n    /**\n     * 是否允许一键清空已选值\n     * 默认值：`true`\n     */\n    autoFocus: PropTypes.bool,\n\n    /**\n     * 相关展开层锚定策略，可选项有`'parent'`、`'body'`\n     * 默认值：`'body'`\n     */\n    popupContainer: PropTypes.oneOf(['parent', 'body']),\n\n    /**\n     * 是否渲染为只读状态\n     * 默认值：`false`\n     */\n    readOnly: PropTypes.bool,\n\n    /**\n     * 需要纳入[批量属性监听](/batch-props-values)的若干属性名\n     */\n    batchPropsNames: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 监听`batchPropsNames`中指定的若干属性值\n     */\n    batchPropsValues: PropTypes.object,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n\n    /**\n     * 是否开启[属性持久化](/prop-persistence)\n     */\n    persistence: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.string,\n        PropTypes.number,\n    ]),\n\n    /**\n     * 开启属性持久化功能的若干属性名，可选项有`'value'`\n     * 默认值：`['value']`\n     */\n    persisted_props: PropTypes.arrayOf(PropTypes.oneOf(['value'])),\n\n    /**\n     * 属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n     * 默认值：`'local'`\n     */\n    persistence_type: PropTypes.oneOf(['local', 'session', 'memory']),\n};\n\nAntdSlider.dashPersistence = {\n    persisted_props: ['value'],\n    persistence_type: 'local',\n};\n\nexport default AntdSlider;\n\nexport const propTypes = AntdSlider.propTypes;\nexport const defaultProps = AntdSlider.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataEntry/AntdSwitch.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdSwitch = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_entry\" */ '../../fragments/dataEntry/AntdSwitch.react'\n        )\n);\n\n/**\n * 开关组件AntdSwitch\n */\nconst AntdSwitch = ({\n    id,\n    style,\n    className,\n    key,\n    name,\n    enableBatchControl = true,\n    disabled = false,\n    autoFocus = false,\n    checked,\n    checkedChildren,\n    unCheckedChildren,\n    size = 'default',\n    loading = false,\n    readOnly = false,\n    setProps,\n    persistence,\n    persisted_props,\n    persistence_type,\n    batchPropsNames = [],\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdSwitch\n                {...{\n                    id,\n                    style,\n                    className,\n                    key,\n                    name,\n                    enableBatchControl,\n                    disabled,\n                    autoFocus,\n                    checked,\n                    checkedChildren,\n                    unCheckedChildren,\n                    size,\n                    loading,\n                    readOnly,\n                    setProps,\n                    persistence,\n                    persisted_props,\n                    persistence_type,\n                    batchPropsNames,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdSwitch.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值\n     */\n    name: PropTypes.string,\n\n    /**\n     * 控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能\n     * 默认值：`true`\n     */\n    enableBatchControl: PropTypes.bool,\n\n    /**\n     * 是否禁用当前组件\n     * 默认值：`false`\n     */\n    disabled: PropTypes.bool,\n\n    /**\n     * 是否自动获取焦点\n     * 默认值：`false`\n     */\n    autoFocus: PropTypes.bool,\n\n    /**\n     * 监听或设置当前开关是否打开\n     */\n    checked: PropTypes.bool,\n\n    /**\n     * 组件型，打开状态下内嵌内容\n     */\n    checkedChildren: PropTypes.node,\n\n    /**\n     * 组件型，关闭状态下内嵌内容\n     */\n    unCheckedChildren: PropTypes.node,\n\n    /**\n     * 当前组件尺寸规格，可选项有`'small'`、`'middle'`\n     * 默认值：`'default'`\n     */\n    size: PropTypes.oneOf(['default', 'small']),\n\n    /**\n     * 是否渲染加载中状态\n     * 默认值：`false`\n     */\n    loading: PropTypes.bool,\n    /**\n     * 是否渲染为只读状态\n     * 默认值：`false`\n     */\n    readOnly: PropTypes.bool,\n\n    /**\n     * 需要纳入[批量属性监听](/batch-props-values)的若干属性名\n     */\n    batchPropsNames: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 监听`batchPropsNames`中指定的若干属性值\n     */\n    batchPropsValues: PropTypes.object,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    loading_state: PropTypes.shape({\n        /**\n         * Determines if the component is loading or not\n         */\n        is_loading: PropTypes.bool,\n        /**\n         * Holds which property is loading\n         */\n        prop_name: PropTypes.string,\n        /**\n         * Holds the name of the component that is loading\n         */\n        component_name: PropTypes.string,\n    }),\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n\n    /**\n     * 是否开启[属性持久化](/prop-persistence)\n     */\n    persistence: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.string,\n        PropTypes.number,\n    ]),\n\n    /**\n     * 开启属性持久化功能的若干属性名，可选项有`'checked'`\n     * 默认值：`['checked']`\n     */\n    persisted_props: PropTypes.arrayOf(PropTypes.oneOf(['checked'])),\n\n    /**\n     * 属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n     * 默认值：`'local'`\n     */\n    persistence_type: PropTypes.oneOf(['local', 'session', 'memory']),\n};\n\nAntdSwitch.dashPersistence = {\n    persisted_props: ['checked'],\n    persistence_type: 'local',\n};\n\nexport default AntdSwitch;\n\nexport const propTypes = AntdSwitch.propTypes;\nexport const defaultProps = AntdSwitch.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataEntry/AntdTimePicker.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdTimePicker = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_entry\" */ '../../fragments/dataEntry/AntdTimePicker.react'\n        )\n);\n\n/**\n * 时间选择组件AntdTimePicker\n */\nconst AntdTimePicker = ({\n    id,\n    className,\n    style,\n    popupClassName,\n    key,\n    name,\n    enableBatchControl = true,\n    locale = 'zh-cn',\n    setProps,\n    disabled = false,\n    hourStep = 1,\n    minuteStep = 1,\n    secondStep = 1,\n    format = 'HH:mm:ss',\n    value,\n    defaultValue,\n    use12Hours = false,\n    allowClear = true,\n    autoFocus = false,\n    placeholder,\n    placement = 'bottomLeft',\n    bordered = true,\n    variant,\n    size = 'middle',\n    status,\n    popupContainer = 'body',\n    readOnly,\n    extraFooter,\n    showNow = true,\n    prefix,\n    suffixIcon,\n    persistence,\n    persisted_props,\n    persistence_type,\n    batchPropsNames = [],\n    needConfirm = false,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdTimePicker\n                {...{\n                    id,\n                    className,\n                    style,\n                    popupClassName,\n                    key,\n                    name,\n                    enableBatchControl,\n                    locale,\n                    setProps,\n                    disabled,\n                    hourStep,\n                    minuteStep,\n                    secondStep,\n                    format,\n                    value,\n                    defaultValue,\n                    use12Hours,\n                    allowClear,\n                    autoFocus,\n                    placeholder,\n                    placement,\n                    bordered,\n                    variant,\n                    size,\n                    status,\n                    popupContainer,\n                    readOnly,\n                    extraFooter,\n                    showNow,\n                    prefix,\n                    suffixIcon,\n                    persistence,\n                    persisted_props,\n                    persistence_type,\n                    batchPropsNames,\n                    needConfirm,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdTimePicker.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 展开菜单css类名\n     */\n    popupClassName: PropTypes.string,\n\n    /**\n     * 配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值\n     */\n    name: PropTypes.string,\n\n    /**\n     * 控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能\n     * 默认值：`true`\n     */\n    enableBatchControl: PropTypes.bool,\n\n    /**\n     * 组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n     * 默认值：`'zh-cn'`\n     */\n    locale: PropTypes.oneOf(['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']),\n\n    /**\n     * 时间显示格式，[参考资料](https://day.js.org/docs/en/display/format)\n     * 默认值：`'HH:mm:ss'`\n     */\n    format: PropTypes.string,\n\n    /**\n     * 是否禁用当前组件\n     * 默认值：`false`\n     */\n    disabled: PropTypes.bool,\n\n    /**\n     * 小时选项间隔\n     * 默认值：`1`\n     */\n    hourStep: PropTypes.number,\n\n    /**\n     * 分钟选项间隔\n     * 默认值：`1`\n     */\n    minuteStep: PropTypes.number,\n\n    /**\n     * 秒选项间隔\n     * 默认值：`1`\n     */\n    secondStep: PropTypes.number,\n\n    /**\n     * 是否使用12小时制，当设置为`true`时，`format`参数默认值变更为`'h:mm:ss a'`\n     * 默认值：`false`\n     */\n    use12Hours: PropTypes.bool,\n\n    /**\n     * 当前组件尺寸规格，可选项有`'small'`、`'middle'`、`'large'`\n     * 默认值：`'middle'`\n     */\n    size: PropTypes.oneOf(['small', 'middle', 'large']),\n\n    /**\n     * 是否显示边框，设置为`true`时等价于`variant='outlined'`\n     * 默认值：`true`\n     */\n    bordered: PropTypes.bool,\n\n    /**\n     * 形态变体类型，可选项有`'outlined'`、`'borderless'`、`'filled'`、`'underlined'`，其中`'outlined'`等价于`bordered=True`，但优先级更高\n     */\n    variant: PropTypes.oneOf([\n        'outlined',\n        'borderless',\n        'filled',\n        'underlined',\n    ]),\n\n    /**\n     * 输入框占位文字内容\n     */\n    placeholder: PropTypes.string,\n\n    /**\n     * 选择面板展开方向，可选项有`'bottomLeft'`、`'bottomRight'`、`'topLeft'`、`'topRight'`\n     * 默认值：`'bottomLeft'`\n     */\n    placement: PropTypes.oneOf([\n        'bottomLeft',\n        'bottomRight',\n        'topLeft',\n        'topRight',\n    ]),\n\n    /**\n     * 监听或设置已选值，与`format`格式对应\n     */\n    value: PropTypes.string,\n\n    /**\n     * 初始化已选值，与`format`格式对应\n     */\n    defaultValue: PropTypes.string,\n\n    /**\n     * 控制校验状态，可选项有`'error'`、`'warning'`\n     */\n    status: PropTypes.oneOf(['error', 'warning']),\n\n    /**\n     * 是否允许一键清空已选值\n     * 默认值：`true`\n     */\n    allowClear: PropTypes.bool,\n\n    /**\n     * 是否自动获取焦点\n     * 默认值：`false`\n     */\n    autoFocus: PropTypes.bool,\n\n    /**\n     * 是否渲染为只读状态\n     * 默认值：`false`\n     */\n    readOnly: PropTypes.bool,\n\n    /**\n     * 组件型，底部额外区域内容\n     */\n    extraFooter: PropTypes.node,\n\n    /**\n     * 是否显示“此刻”快捷选择按钮\n     * 默认值：`true`\n     */\n    showNow: PropTypes.bool,\n\n    /**\n     * 组件型，前缀内嵌内容\n     */\n    prefix: PropTypes.node,\n\n    /**\n     * 自定义选择框后缀图标内容\n     */\n    suffixIcon: PropTypes.node,\n\n    /**\n     * 相关展开层锚定策略，可选项有`'parent'`、`'body'`\n     * 默认值：`'body'`\n     */\n    popupContainer: PropTypes.oneOf(['parent', 'body']),\n\n    /**\n     * 需要纳入[批量属性监听](/batch-props-values)的若干属性名\n     */\n    batchPropsNames: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 监听`batchPropsNames`中指定的若干属性值\n     */\n    batchPropsValues: PropTypes.object,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * 是否需要确认按钮，为`false`时失去焦点即代表选择\n     * 默认值：`false`\n     */\n    needConfirm: PropTypes.bool,\n\n    /**\n     * Object that holds the loading state object coming from dash-renderer\n     */\n    loading_state: PropTypes.shape({\n        /**\n         * Determines if the component is loading or not\n         */\n        is_loading: PropTypes.bool,\n        /**\n         * Holds which property is loading\n         */\n        prop_name: PropTypes.string,\n        /**\n         * Holds the name of the component that is loading\n         */\n        component_name: PropTypes.string,\n    }),\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n\n    /**\n     * 是否开启[属性持久化](/prop-persistence)\n     */\n    persistence: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.string,\n        PropTypes.number,\n    ]),\n\n    /**\n     * 开启属性持久化功能的若干属性名，可选项有`'value'`\n     * 默认值：`['value']`\n     */\n    persisted_props: PropTypes.arrayOf(PropTypes.oneOf(['value'])),\n\n    /**\n     * 属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n     * 默认值：`'local'`\n     */\n    persistence_type: PropTypes.oneOf(['local', 'session', 'memory']),\n};\n\nAntdTimePicker.dashPersistence = {\n    persisted_props: ['value'],\n    persistence_type: 'local',\n};\n\nexport default AntdTimePicker;\n\nexport const propTypes = AntdTimePicker.propTypes;\nexport const defaultProps = AntdTimePicker.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataEntry/AntdTimeRangePicker.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdTimeRangePicker = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_entry\" */ '../../fragments/dataEntry/AntdTimeRangePicker.react'\n        )\n);\n\n/**\n * 时间范围选择组件AntdTimeRangePicker\n */\nconst AntdTimeRangePicker = ({\n    id,\n    className,\n    style,\n    popupClassName,\n    key,\n    name,\n    enableBatchControl = true,\n    locale = 'zh-cn',\n    setProps,\n    value,\n    defaultValue,\n    placeholder,\n    placement = 'bottomLeft',\n    disabled = [false, false],\n    hourStep = 1,\n    minuteStep = 1,\n    secondStep = 1,\n    format = 'HH:mm:ss',\n    use12Hours = false,\n    allowClear = true,\n    autoFocus = false,\n    bordered = true,\n    variant,\n    size = 'middle',\n    open,\n    status,\n    prefix,\n    suffixIcon,\n    popupContainer = 'body',\n    readOnly,\n    extraFooter,\n    persistence,\n    persisted_props,\n    persistence_type,\n    batchPropsNames = [],\n    needConfirm = false,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdTimeRangePicker\n                {...{\n                    id,\n                    className,\n                    style,\n                    popupClassName,\n                    key,\n                    name,\n                    enableBatchControl,\n                    locale,\n                    setProps,\n                    value,\n                    defaultValue,\n                    placeholder,\n                    placement,\n                    disabled,\n                    hourStep,\n                    minuteStep,\n                    secondStep,\n                    format,\n                    use12Hours,\n                    allowClear,\n                    autoFocus,\n                    bordered,\n                    variant,\n                    size,\n                    open,\n                    status,\n                    prefix,\n                    suffixIcon,\n                    popupContainer,\n                    readOnly,\n                    extraFooter,\n                    persistence,\n                    persisted_props,\n                    persistence_type,\n                    batchPropsNames,\n                    needConfirm,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdTimeRangePicker.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 展开菜单css类名\n     */\n    popupClassName: PropTypes.string,\n\n    /**\n     * 配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值\n     */\n    name: PropTypes.string,\n\n    /**\n     * 控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能\n     * 默认值：`true`\n     */\n    enableBatchControl: PropTypes.bool,\n\n    /**\n     * 组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n     * 默认值：`'zh-cn'`\n     */\n    locale: PropTypes.oneOf(['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']),\n\n    /**\n     * 时间显示格式，[参考资料](https://day.js.org/docs/en/display/format)\n     * 默认值：`'HH:mm:ss'`\n     */\n    format: PropTypes.string,\n\n    /**\n     * 小时选项间隔\n     * 默认值：`1`\n     */\n    hourStep: PropTypes.number,\n\n    /**\n     * 分钟选项间隔\n     * 默认值：`1`\n     */\n    minuteStep: PropTypes.number,\n\n    /**\n     * 秒选项间隔\n     * 默认值：`1`\n     */\n    secondStep: PropTypes.number,\n\n    /**\n     * 是否使用12小时制，当设置为`true`时，`format`参数默认值变更为`'h:mm:ss a'`\n     * 默认值：`false`\n     */\n    use12Hours: PropTypes.bool,\n\n    /**\n     * 是否允许一键清空已选值\n     * 默认值：`true`\n     */\n    allowClear: PropTypes.bool,\n\n    /**\n     * 是否自动获取焦点\n     * 默认值：`false`\n     */\n    autoFocus: PropTypes.bool,\n\n    /**\n     * 输入框占位文字内容\n     */\n    placeholder: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 选择面板展开方向，可选项有`'bottomLeft'`、`'bottomRight'`、`'topLeft'`、`'topRight'`\n     * 默认值：`'bottomLeft'`\n     */\n    placement: PropTypes.oneOf([\n        'bottomLeft',\n        'bottomRight',\n        'topLeft',\n        'topRight',\n    ]),\n\n    /**\n     * 是否禁用当前组件\n     * 默认值：`false`\n     */\n    disabled: PropTypes.arrayOf(PropTypes.bool),\n\n    /**\n     * 监听或设置已选值，与`format`格式对应\n     */\n    value: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 初始化已选值，与`format`格式对应\n     */\n    defaultValue: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 是否显示边框，设置为`true`时等价于`variant='outlined'`\n     * 默认值：`true`\n     */\n    bordered: PropTypes.bool,\n\n    /**\n     * 形态变体类型，可选项有`'outlined'`、`'borderless'`、`'filled'`、`'underlined'`，其中`'outlined'`等价于`bordered=True`，但优先级更高\n     */\n    variant: PropTypes.oneOf([\n        'outlined',\n        'borderless',\n        'filled',\n        'underlined',\n    ]),\n\n    /**\n     * 当前组件尺寸规格，可选项有`'small'`、`'middle'`、`'large'`\n     * 默认值：`'middle'`\n     */\n    size: PropTypes.oneOf(['small', 'middle', 'large']),\n\n    /**\n     * 监听或设置当前选择面板是否展开\n     */\n    open: PropTypes.bool,\n\n    /**\n     * 控制校验状态，可选项有`'error'`、`'warning'`\n     */\n    status: PropTypes.oneOf(['error', 'warning']),\n\n    /**\n     * 是否渲染为只读状态\n     * 默认值：`false`\n     */\n    readOnly: PropTypes.bool,\n\n    /**\n     * 组件型，底部额外区域内容\n     */\n    extraFooter: PropTypes.node,\n\n    /**\n     * 组件型，前缀内嵌内容\n     */\n    prefix: PropTypes.node,\n\n    /**\n     * 自定义选择框后缀图标内容\n     */\n    suffixIcon: PropTypes.node,\n\n    /**\n     * 相关展开层锚定策略，可选项有`'parent'`、`'body'`\n     * 默认值：`'body'`\n     */\n    popupContainer: PropTypes.oneOf(['parent', 'body']),\n\n    /**\n     * 需要纳入[批量属性监听](/batch-props-values)的若干属性名\n     */\n    batchPropsNames: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 监听`batchPropsNames`中指定的若干属性值\n     */\n    batchPropsValues: PropTypes.object,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * 是否需要确认按钮，为`false`时失去焦点即代表选择\n     * 默认值：`false`\n     */\n    needConfirm: PropTypes.bool,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n\n    /**\n     * 是否开启[属性持久化](/prop-persistence)\n     */\n    persistence: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.string,\n        PropTypes.number,\n    ]),\n\n    /**\n     * 开启属性持久化功能的若干属性名，可选项有`'value'`\n     * 默认值：`['value']`\n     */\n    persisted_props: PropTypes.arrayOf(PropTypes.oneOf(['value'])),\n\n    /**\n     * 属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n     * 默认值：`'local'`\n     */\n    persistence_type: PropTypes.oneOf(['local', 'session', 'memory']),\n};\n\nAntdTimeRangePicker.dashPersistence = {\n    persisted_props: ['value'],\n    persistence_type: 'local',\n};\n\nexport default AntdTimeRangePicker;\n\nexport const propTypes = AntdTimeRangePicker.propTypes;\nexport const defaultProps = AntdTimeRangePicker.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataEntry/AntdTransfer.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdTransfer = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_entry\" */ '../../fragments/dataEntry/AntdTransfer.react'\n        )\n);\n\n/**\n * 穿梭框组件AntdTransfer\n */\nconst AntdTransfer = ({\n    id,\n    className,\n    style,\n    key,\n    name,\n    enableBatchControl = true,\n    locale = 'zh-cn',\n    setProps,\n    dataSource,\n    selectionsIcon,\n    height,\n    pagination = false,\n    oneWay = false,\n    operations = ['', ''],\n    showSearch = false,\n    optionFilterMode = 'case-insensitive',\n    showSelectAll = true,\n    titles,\n    disabled = false,\n    targetKeys = [],\n    status,\n    readOnly = false,\n    persistence,\n    persisted_props,\n    persistence_type,\n    batchPropsNames = [],\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdTransfer\n                {...{\n                    id,\n                    className,\n                    style,\n                    key,\n                    name,\n                    enableBatchControl,\n                    locale,\n                    setProps,\n                    dataSource,\n                    selectionsIcon,\n                    height,\n                    pagination,\n                    oneWay,\n                    operations,\n                    showSearch,\n                    optionFilterMode,\n                    showSelectAll,\n                    titles,\n                    disabled,\n                    targetKeys,\n                    status,\n                    readOnly,\n                    persistence,\n                    persisted_props,\n                    persistence_type,\n                    batchPropsNames,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdTransfer.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值\n     */\n    name: PropTypes.string,\n\n    /**\n     * 控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能\n     * 默认值：`true`\n     */\n    enableBatchControl: PropTypes.bool,\n\n    /**\n     * 组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n     * 默认值：`'zh-cn'`\n     */\n    locale: PropTypes.oneOf(['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']),\n\n    /**\n     * 配置选项\n     */\n    dataSource: PropTypes.arrayOf(\n        PropTypes.exact({\n            /**\n             * 当前选项唯一识别id\n             */\n            key: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n            /**\n             * 组件型，当前选项标题内容\n             */\n            title: PropTypes.node,\n            /**\n             * 是否禁用当前选项\n             * 默认值：`false`\n             */\n            disabled: PropTypes.bool,\n        })\n    ),\n\n    /**\n     * 组件型，自定义下拉菜单图标\n     */\n    selectionsIcon: PropTypes.node,\n\n    /**\n     * 穿梭框整体高度\n     */\n    height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n    // 用于设置是否以分页模式展示左右区域内部超长的项目集合，默认为false\n    /**\n     * 选项分页展示配置\n     * 默认值：`false`\n     */\n    pagination: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.exact({\n            /**\n             * 每页最大选项数\n             */\n            pageSize: PropTypes.number,\n        }),\n    ]),\n\n    /**\n     * 是否启用单向模式\n     * 默认值：`false`\n     */\n    oneWay: PropTypes.bool,\n\n    /**\n     * 左右移动操作按钮内容\n     * 默认值：`'['', '']'`\n     */\n    operations: PropTypes.arrayOf(PropTypes.node),\n\n    /**\n     * 是否显示搜索框\n     * 默认值：`false`\n     */\n    showSearch: PropTypes.bool,\n\n    /**\n     * 搜索匹配模式，可选项有`'case-insensitive'`（大小写不敏感）、`'case-sensitive'`（大小写敏感）、`'regex'`（正则表达式）\n     * 默认值：`'case-insensitive'`\n     */\n    optionFilterMode: PropTypes.oneOf([\n        'case-insensitive',\n        'case-sensitive',\n        'regex',\n    ]),\n\n    /**\n     * 是否显示全选勾选框\n     * 默认值：`true`\n     */\n    showSelectAll: PropTypes.bool,\n\n    /**\n     * 左右标题内容\n     */\n    titles: PropTypes.arrayOf(PropTypes.node),\n\n    /**\n     * 监听或设置右侧区域已选项`key`值\n     */\n    targetKeys: PropTypes.arrayOf(\n        PropTypes.oneOfType([PropTypes.number, PropTypes.string])\n    ),\n\n    /**\n     * 监听最近一次选项移动对应方向，可选项有`'left'`、`'right'`\n     */\n    moveDirection: PropTypes.oneOf(['left', 'right']),\n\n    /**\n     * 监听最近一次选项移动涉及的选项`key`值\n     */\n    moveKeys: PropTypes.arrayOf(\n        PropTypes.oneOfType([PropTypes.number, PropTypes.string])\n    ),\n\n    /**\n     * 是否禁用当前组件\n     * 默认值：`false`\n     */\n    disabled: PropTypes.bool,\n\n    /**\n     * 控制校验状态，可选项有`'error'`、`'warning'`\n     */\n    status: PropTypes.oneOf(['error', 'warning']),\n\n    /**\n     * 是否渲染为只读状态\n     * 默认值：`false`\n     */\n    readOnly: PropTypes.bool,\n\n    /**\n     * 需要纳入[批量属性监听](/batch-props-values)的若干属性名\n     */\n    batchPropsNames: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 监听`batchPropsNames`中指定的若干属性值\n     */\n    batchPropsValues: PropTypes.object,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n\n    loading_state: PropTypes.shape({\n        /**\n         * Determines if the component is loading or not\n         */\n        is_loading: PropTypes.bool,\n        /**\n         * Holds which property is loading\n         */\n        prop_name: PropTypes.string,\n        /**\n         * Holds the name of the component that is loading\n         */\n        component_name: PropTypes.string,\n    }),\n\n    /**\n     * 是否开启[属性持久化](/prop-persistence)\n     */\n    persistence: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.string,\n        PropTypes.number,\n    ]),\n\n    /**\n     * 开启属性持久化功能的若干属性名，可选项有`'targetKeys'`\n     * 默认值：`['targetKeys']`\n     */\n    persisted_props: PropTypes.arrayOf(PropTypes.oneOf(['targetKeys'])),\n\n    /**\n     * 属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n     * 默认值：`'local'`\n     */\n    persistence_type: PropTypes.oneOf(['local', 'session', 'memory']),\n};\n\nAntdTransfer.dashPersistence = {\n    persisted_props: ['targetKeys'],\n    persistence_type: 'local',\n};\n\nexport default AntdTransfer;\n\nexport const propTypes = AntdTransfer.propTypes;\nexport const defaultProps = AntdTransfer.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataEntry/AntdTreeSelect.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdTreeSelect = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_entry\" */ '../../fragments/dataEntry/AntdTreeSelect.react'\n        )\n);\n\n/**\n * 树选择组件AntdTreeSelect\n */\nconst AntdTreeSelect = ({\n    id,\n    style,\n    className,\n    popupClassName,\n    key,\n    name,\n    enableBatchControl = true,\n    locale = 'zh-cn',\n    treeData,\n    treeNodeKeyToTitle,\n    treeDataMode = 'tree',\n    allowClear = true,\n    bordered = true,\n    variant,\n    treeLine = false,\n    listHeight = 256,\n    placeholder,\n    value,\n    defaultValue,\n    maxCount,\n    maxTagCount,\n    maxTagPlaceholder,\n    maxTagTextLength,\n    multiple = false,\n    size = 'middle',\n    prefix,\n    suffixIcon,\n    switcherIcon,\n    treeCheckable = false,\n    treeCheckStrictly = false,\n    treeDefaultExpandAll = false,\n    treeDefaultExpandedKeys,\n    treeExpandedKeys,\n    virtual = true,\n    disabled = false,\n    placement = 'bottomLeft',\n    status,\n    treeNodeFilterProp = 'value',\n    treeNodeFilterMode = 'case-insensitive',\n    autoClearSearchValue = true,\n    popupContainer = 'body',\n    setProps,\n    readOnly,\n    showCheckedStrategy = 'show-all',\n    dropdownBefore,\n    dropdownAfter,\n    enableAsyncLoad = false,\n    persistence,\n    persisted_props,\n    persistence_type,\n    batchPropsNames = [],\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdTreeSelect\n                {...{\n                    id,\n                    style,\n                    className,\n                    popupClassName,\n                    key,\n                    name,\n                    enableBatchControl,\n                    locale,\n                    treeData,\n                    treeNodeKeyToTitle,\n                    treeDataMode,\n                    allowClear,\n                    bordered,\n                    variant,\n                    treeLine,\n                    listHeight,\n                    placeholder,\n                    value,\n                    defaultValue,\n                    maxCount,\n                    maxTagCount,\n                    maxTagPlaceholder,\n                    maxTagTextLength,\n                    multiple,\n                    size,\n                    prefix,\n                    suffixIcon,\n                    switcherIcon,\n                    treeCheckable,\n                    treeCheckStrictly,\n                    treeDefaultExpandAll,\n                    treeDefaultExpandedKeys,\n                    treeExpandedKeys,\n                    virtual,\n                    disabled,\n                    placement,\n                    status,\n                    treeNodeFilterProp,\n                    treeNodeFilterMode,\n                    autoClearSearchValue,\n                    popupContainer,\n                    setProps,\n                    readOnly,\n                    showCheckedStrategy,\n                    dropdownBefore,\n                    dropdownAfter,\n                    enableAsyncLoad,\n                    persistence,\n                    persisted_props,\n                    persistence_type,\n                    batchPropsNames,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\n// 定义递归PropTypes\nconst PropTreeNodeShape = {\n    /**\n     * 当前节点标题\n     */\n    title: PropTypes.string.isRequired,\n    /**\n     * 当前节点唯一识别id\n     */\n    key: PropTypes.string.isRequired,\n    /**\n     * 当前节点唯一值\n     */\n    value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n    /**\n     * 是否禁用当前节点\n     */\n    disabled: PropTypes.bool,\n    /**\n     * 当`treeCheckable=True`时，控制当前节点是否显示勾选框\n     */\n    checkable: PropTypes.bool,\n    /**\n     * 当`treeCheckable=True`时，是否禁用当前节点勾选框\n     */\n    disableCheckbox: PropTypes.bool,\n    /**\n     * 当前节点是否可选择\n     */\n    selectable: PropTypes.bool,\n    /**\n     * 当前节点是否为叶节点（末端节点）\n     */\n    isLeaf: PropTypes.bool,\n};\n\nconst PropTreeNode = PropTypes.shape(PropTreeNodeShape);\nPropTreeNodeShape.children = PropTypes.arrayOf(PropTreeNode);\nconst treeDataPropTypes = PropTypes.arrayOf(PropTreeNode);\n\n// 定义扁平结构节点类型\nconst PropFlatNodeShape = {\n    /**\n     * 当前节点标题\n     */\n    title: PropTypes.string.isRequired,\n    /**\n     * 当前节点唯一识别id\n     */\n    key: PropTypes.string.isRequired,\n    /**\n     * 当前节点唯一值\n     */\n    value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n    /**\n     * 是否禁用当前节点\n     */\n    disabled: PropTypes.bool,\n    /**\n     * 当`treeCheckable=True`时，控制当前节点是否显示勾选框\n     */\n    checkable: PropTypes.bool,\n    /**\n     * 当`treeCheckable=True`时，是否禁用当前节点勾选框\n     */\n    disableCheckbox: PropTypes.bool,\n    /**\n     * 当前节点是否可选择\n     */\n    selectable: PropTypes.bool,\n    /**\n     * 当前节点是否为末端节点\n     */\n    isLeaf: PropTypes.bool,\n    /**\n     * 当前节点所属父节点`key`值\n     */\n    parent: PropTypes.string,\n};\n\nAntdTreeSelect.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 展开菜单css类名\n     */\n    popupClassName: PropTypes.string,\n\n    /**\n     * 配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值\n     */\n    name: PropTypes.string,\n\n    /**\n     * 控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能\n     * 默认值：`true`\n     */\n    enableBatchControl: PropTypes.bool,\n\n    /**\n     * 组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n     * 默认值：`'zh-cn'`\n     */\n    locale: PropTypes.oneOf(['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']),\n\n    /**\n     * 对应`treeData`格式的渲染模式，可选项有`'tree'`（树形模式）、`'flat'`（扁平模式）\n     * 默认值：`'tree'`\n     */\n    treeDataMode: PropTypes.oneOf(['tree', 'flat']),\n\n    /**\n     * 定义构造树所需的数据结构，与`treeDataMode`一致\n     */\n    treeData: PropTypes.oneOfType([\n        /**\n         * 树形模式对应结构\n         */\n        treeDataPropTypes,\n        /**\n         * 扁平模式对应结构\n         */\n        PropTypes.arrayOf(PropFlatNodeShape),\n    ]).isRequired,\n\n    /**\n     * 针对树结构中的指定节点，定义作为标题的组件型内容，优先级高于`treeData`中对应的`title`值\n     */\n    treeNodeKeyToTitle: PropTypes.objectOf(PropTypes.node),\n\n    /**\n     * 是否禁用当前组件\n     * 默认值：`false`\n     */\n    disabled: PropTypes.bool,\n\n    /**\n     * 当前组件尺寸规格，可选项有`'small'`、`'middle'`、`'large'`\n     * 默认值：`'middle'`\n     */\n    size: PropTypes.oneOf(['small', 'middle', 'large']),\n\n    /**\n     * 是否显示边框，设置为`true`时等价于`variant='outlined'`\n     * 默认值：`true`\n     */\n    bordered: PropTypes.bool,\n\n    /**\n     * 设置形态变体类型，可选的有'outlined'、'borderless'、'filled'、`'underlined'`，其中'outlined'等价于bordered=true，优先级高于bordered\n     */\n    variant: PropTypes.oneOf([\n        'outlined',\n        'borderless',\n        'filled',\n        'underlined',\n    ]),\n\n    /**\n     * 输入框占位文字内容\n     */\n    placeholder: PropTypes.string,\n\n    /**\n     * 选择菜单展开方向，可选项有`'bottomLeft'`、`'bottomRight'`、`'topLeft'`、`'topRight'`\n     * 默认值：`'bottomLeft'`\n     */\n    placement: PropTypes.oneOf([\n        'bottomLeft',\n        'bottomRight',\n        'topLeft',\n        'topRight',\n    ]),\n\n    /**\n     * 是否显示连接线\n     * 默认值：`false`\n     */\n    treeLine: PropTypes.bool,\n\n    /**\n     * 监听或设置已选值\n     */\n    value: PropTypes.oneOfType([\n        PropTypes.string,\n        PropTypes.number,\n        PropTypes.arrayOf(\n            PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n        ),\n    ]),\n\n    /**\n     * 初始化已选值\n     */\n    defaultValue: PropTypes.oneOfType([\n        PropTypes.string,\n        PropTypes.number,\n        PropTypes.arrayOf(\n            PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n        ),\n    ]),\n\n    /**\n     * 当`multiple=True`时，可选中的最大数量\n     * 如果`showCheckedStrategy='show-all'`且`treeCheckStrictly=False`，或者`showCheckedStrategy='show-parent'`，则`maxCount`无效\n     */\n    maxCount: PropTypes.number,\n\n    /**\n     * 当`multiple=True`时，已选值tag展示的最大数量\n     */\n    maxTagCount: PropTypes.oneOfType([\n        PropTypes.number,\n        PropTypes.oneOf(['responsive']),\n    ]),\n\n    /**\n     * 当`multiple=True`时，隐藏已选值tag时显示的内容\n     */\n    maxTagPlaceholder: PropTypes.node,\n\n    /**\n     * 当`multiple=True`时，最大显示的已选值tag文本长度\n     */\n    maxTagTextLength: PropTypes.number,\n\n    /**\n     * 选择菜单最大像素高度\n     * 默认值：`256`\n     */\n    listHeight: PropTypes.number,\n\n    /**\n     * 是否开启多选模式\n     * 默认值：`false`\n     */\n    multiple: PropTypes.bool,\n\n    /**\n     * 组件型，自定义的选择框后缀图标\n     */\n    suffixIcon: PropTypes.node,\n\n    /**\n     * 组件型，自定义树节点的展开/折叠图标\n     */\n    switcherIcon: PropTypes.node,\n\n    /**\n     * 树节点是否可勾选\n     * 默认值：`false`\n     */\n    treeCheckable: PropTypes.bool,\n\n    /**\n     * 节点与其后代节点之间的选择行为是否彼此独立\n     * 默认值：`false`\n     */\n    treeCheckStrictly: PropTypes.bool,\n\n    /**\n     * 初始化是否展开全部节点\n     * 默认值：`false`\n     */\n    treeDefaultExpandAll: PropTypes.bool,\n\n    /**\n     * 初始化已展开节点`key`值数组\n     */\n    treeDefaultExpandedKeys: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 监听或设置已展开节点`key`值数组\n     */\n    treeExpandedKeys: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 是否开启虚拟滚动\n     * 默认值：`true`\n     */\n    virtual: PropTypes.bool,\n\n    /**\n     * 控制校验状态，可选项有`'error'`、`'warning'`\n     */\n    status: PropTypes.oneOf(['error', 'warning']),\n\n    /**\n     * 是否允许一键清空已选值\n     * 默认值：`true`\n     */\n    allowClear: PropTypes.bool,\n\n    /**\n     * 基于搜索框中输入内容进行搜索的目标字段，可选项有`'value'`、`'title'`\n     * 默认值：`'value'`\n     */\n    treeNodeFilterProp: PropTypes.oneOf(['title', 'value']),\n\n    /**\n     * 搜索匹配模式，可选项有`'case-insensitive'`（大小写不敏感）、`'case-sensitive'`（大小写敏感）、`'regex'`（正则表达式）\n     * 默认值：`'case-insensitive'`\n     */\n    treeNodeFilterMode: PropTypes.oneOf([\n        'case-insensitive',\n        'case-sensitive',\n        'regex',\n    ]),\n\n    /**\n     * 当`multiple=true`时，设置是否在选中项后自动清空搜索框中的内容\n     * 默认值：`true`\n     */\n    autoClearSearchValue: PropTypes.bool,\n\n    /**\n     * 已选项回填搜索框策略，可选项有`'show-all'`、`'show-parent'`、`'show-child'`\n     * 默认值：`'show-all'`\n     */\n    showCheckedStrategy: PropTypes.oneOf([\n        'show-all',\n        'show-parent',\n        'show-child',\n    ]),\n\n    /**\n     * 组件型，选择菜单前缀内容\n     */\n    dropdownBefore: PropTypes.node,\n\n    /**\n     * 组件型，选择菜单后缀内容\n     */\n    dropdownAfter: PropTypes.node,\n\n    /**\n     * 组件型，前缀内嵌内容\n     */\n    prefix: PropTypes.node,\n\n    /**\n     * 是否渲染为只读状态\n     * 默认值：`false`\n     */\n    readOnly: PropTypes.bool,\n\n    /**\n     * 是否开启子节点异步加载功能，开启后无`children`属性，且未设置`isLeaf`为`true`的节点将可展开并触发`loadingNode`事件更新\n     * 默认值：`false`\n     */\n    enableAsyncLoad: PropTypes.bool,\n\n    /**\n     * 监听触发异步数据加载的节点展开事件信息\n     */\n    loadingNode: PropTypes.object,\n\n    /**\n     * 相关展开层锚定策略，可选项有`'parent'`、`'body'`\n     * 默认值：`'body'`\n     */\n    popupContainer: PropTypes.oneOf(['parent', 'body']),\n\n    /**\n     * 需要纳入[批量属性监听](/batch-props-values)的若干属性名\n     */\n    batchPropsNames: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 监听`batchPropsNames`中指定的若干属性值\n     */\n    batchPropsValues: PropTypes.object,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    loading_state: PropTypes.shape({\n        /**\n         * Determines if the component is loading or not\n         */\n        is_loading: PropTypes.bool,\n        /**\n         * Holds which property is loading\n         */\n        prop_name: PropTypes.string,\n        /**\n         * Holds the name of the component that is loading\n         */\n        component_name: PropTypes.string,\n    }),\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n\n    /**\n     * 是否开启[属性持久化](/prop-persistence)\n     */\n    persistence: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.string,\n        PropTypes.number,\n    ]),\n\n    /**\n     * 开启属性持久化功能的若干属性名，可选项有`'value'`\n     * 默认值：`['value']`\n     */\n    persisted_props: PropTypes.arrayOf(PropTypes.oneOf(['value'])),\n\n    /**\n     * 属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n     * 默认值：`'local'`\n     */\n    persistence_type: PropTypes.oneOf(['local', 'session', 'memory']),\n};\n\nAntdTreeSelect.dashPersistence = {\n    persisted_props: ['value'],\n    persistence_type: 'local',\n};\n\nexport default AntdTreeSelect;\n\nexport const propTypes = AntdTreeSelect.propTypes;\nexport const defaultProps = AntdTreeSelect.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataEntry/check-card/AntdCheckCard.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdCheckCard = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_entry\" */ '../../../fragments/dataEntry/check-card/AntdCheckCard.react'\n        )\n);\n\n/**\n * 选择卡片组件AntdCheckCard\n */\nconst AntdCheckCard = ({\n    id,\n    children,\n    className,\n    style,\n    key,\n    name,\n    enableBatchControl = true,\n    checked,\n    bordered = true,\n    value,\n    defaultChecked,\n    disabled = false,\n    size = 'default',\n    readOnly = false,\n    setProps,\n    persistence,\n    persisted_props,\n    persistence_type,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdCheckCard\n                {...{\n                    id,\n                    children,\n                    className,\n                    style,\n                    key,\n                    name,\n                    enableBatchControl,\n                    checked,\n                    bordered,\n                    value,\n                    defaultChecked,\n                    disabled,\n                    size,\n                    readOnly,\n                    setProps,\n                    persistence,\n                    persisted_props,\n                    persistence_type,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdCheckCard.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，内嵌元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值\n     */\n    name: PropTypes.string,\n\n    /**\n     * 控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能\n     * 默认值：`true`\n     */\n    enableBatchControl: PropTypes.bool,\n\n    /**\n     * 监听或设置是否被选中\n     */\n    checked: PropTypes.bool,\n\n    /**\n     * 初始化是否被选中\n     */\n    defaultChecked: PropTypes.bool,\n\n    /**\n     * 是否显示边框\n     * 默认值：`true`\n     */\n    bordered: PropTypes.bool,\n\n    /**\n     * 是否禁用当前组件\n     * 默认值：`false`\n     */\n    disabled: PropTypes.bool,\n\n    /**\n     * 当前组件尺寸规格，可选项有`'small'`、`'default'`、`'large'`\n     * 默认值：`'default'`\n     */\n    size: PropTypes.oneOf(['small', 'default', 'large']),\n\n    /**\n     * 当前选择卡片值\n     */\n    value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n    /**\n     * 是否渲染为只读状态\n     * 默认值：`false`\n     */\n    readOnly: PropTypes.bool,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n\n    /**\n     * 是否开启[属性持久化](/prop-persistence)\n     */\n    persistence: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.string,\n        PropTypes.number,\n    ]),\n\n    /**\n     * 开启属性持久化功能的若干属性名，可选项有`'checked'`\n     * 默认值：`['checked']`\n     */\n    persisted_props: PropTypes.arrayOf(PropTypes.oneOf(['checked'])),\n\n    /**\n     * 属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n     * 默认值：`'local'`\n     */\n    persistence_type: PropTypes.oneOf(['local', 'session', 'memory']),\n};\n\nAntdCheckCard.dashPersistence = {\n    persisted_props: ['checked'],\n    persistence_type: 'local',\n};\n\nexport default AntdCheckCard;\n\nexport const propTypes = AntdCheckCard.propTypes;\nexport const defaultProps = AntdCheckCard.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataEntry/check-card/AntdCheckCardGroup.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdCheckCardGroup = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_entry\" */ '../../../fragments/dataEntry/check-card/AntdCheckCardGroup.react'\n        )\n);\n\n/**\n * 组合选择卡片组件AntdCheckCardGroup\n */\nconst AntdCheckCardGroup = ({\n    id,\n    children,\n    className,\n    style,\n    key,\n    name,\n    enableBatchControl = true,\n    multiple = false,\n    allowNoValue = true,\n    bordered = true,\n    value,\n    defaultValue,\n    disabled = false,\n    size = 'default',\n    readOnly = false,\n    setProps,\n    persistence,\n    persisted_props,\n    persistence_type,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdCheckCardGroup\n                {...{\n                    id,\n                    children,\n                    className,\n                    style,\n                    key,\n                    name,\n                    enableBatchControl,\n                    multiple,\n                    allowNoValue,\n                    bordered,\n                    value,\n                    defaultValue,\n                    disabled,\n                    size,\n                    readOnly,\n                    setProps,\n                    persistence,\n                    persisted_props,\n                    persistence_type,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdCheckCardGroup.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，内嵌若干`AntdCheckCard`相关组件\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值\n     */\n    name: PropTypes.string,\n\n    /**\n     * 控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能\n     * 默认值：`true`\n     */\n    enableBatchControl: PropTypes.bool,\n\n    /**\n     * 是否开启多选\n     * 默认值：`false`\n     */\n    multiple: PropTypes.bool,\n\n    /**\n     * 是否允许当前组合选择卡片中仅剩的选项被取消选中\n     * 默认值：`true`\n     */\n    allowNoValue: PropTypes.bool,\n\n    /**\n     * 是否显示边框\n     * 默认值：`true`\n     */\n    bordered: PropTypes.bool,\n\n    /**\n     * 监听或设置已选中卡片值\n     */\n    value: PropTypes.oneOfType([\n        PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n        PropTypes.arrayOf(\n            PropTypes.oneOfType([PropTypes.number, PropTypes.string])\n        ),\n    ]),\n\n    /**\n     * 初始化已选中卡片值\n     */\n    defaultValue: PropTypes.oneOfType([\n        PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n        PropTypes.arrayOf(\n            PropTypes.oneOfType([PropTypes.number, PropTypes.string])\n        ),\n    ]),\n\n    /**\n     * 是否禁用当前组件\n     * 默认值：`false`\n     */\n    disabled: PropTypes.bool,\n\n    /**\n     * 当前组件尺寸规格，可选项有`'small'`、`'default'`、`'large'`\n     * 默认值：`'default'`\n     */\n    size: PropTypes.oneOf(['small', 'default', 'large']),\n\n    /**\n     * 是否渲染为只读状态\n     * 默认值：`false`\n     */\n    readOnly: PropTypes.bool,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n\n    /**\n     * 是否开启[属性持久化](/prop-persistence)\n     */\n    persistence: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.string,\n        PropTypes.number,\n    ]),\n\n    /**\n     * 开启属性持久化功能的若干属性名，可选项有`'value'`\n     * 默认值：`['value']`\n     */\n    persisted_props: PropTypes.arrayOf(PropTypes.oneOf(['value'])),\n\n    /**\n     * 属性持久化存储类型，可选项有`'local'`（本地持久化），`'session'`（会话持久化），`'memory'`（内存持久化）\n     * 默认值：`'local'`\n     */\n    persistence_type: PropTypes.oneOf(['local', 'session', 'memory']),\n};\n\nAntdCheckCardGroup.dashPersistence = {\n    persisted_props: ['value'],\n    persistence_type: 'local',\n};\n\nexport default AntdCheckCardGroup;\n\nexport const propTypes = AntdCheckCardGroup.propTypes;\nexport const defaultProps = AntdCheckCardGroup.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataEntry/form/AntdForm.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdForm = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_entry\" */ '../../../fragments/dataEntry/form/AntdForm.react'\n        )\n);\n\n/**\n * 表单组件AntdForm\n */\nconst AntdForm = ({\n    id,\n    children,\n    className,\n    style,\n    key,\n    labelCol,\n    wrapperCol,\n    colon = true,\n    labelAlign = 'right',\n    labelWrap = false,\n    layout = 'horizontal',\n    enableBatchControl = false,\n    values,\n    validateStatuses,\n    helps,\n    tooltips,\n    setProps,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdForm\n                {...{\n                    id,\n                    children,\n                    className,\n                    style,\n                    key,\n                    labelCol,\n                    wrapperCol,\n                    colon,\n                    labelAlign,\n                    labelWrap,\n                    layout,\n                    enableBatchControl,\n                    values,\n                    validateStatuses,\n                    helps,\n                    tooltips,\n                    setProps,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdForm.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，内嵌相关`AntdFormItem`组件或常用表单输入类组件\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 表单布局模式，可选项有`'horizontal'`、`'vertical'`、`'inline'`\n     * 默认值：`'horizontal'`\n     */\n    layout: PropTypes.oneOf(['horizontal', 'vertical', 'inline']),\n\n    /**\n     * 配置表单项标签部分相关参数\n     */\n    labelCol: PropTypes.exact({\n        /**\n         * 标签部分所占宽度份数（总份数24）\n         */\n        span: PropTypes.number,\n        /**\n         * 标签部分向右偏移宽度份数\n         */\n        offset: PropTypes.number,\n        /**\n         * 同css中的flex属性，用于更灵活的控制标签部分所占宽度\n         */\n        flex: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n    }),\n\n    /**\n     * 配置表单项控件部分相关参数\n     */\n    wrapperCol: PropTypes.exact({\n        /**\n         * 控件部分所占宽度份数（总份数24）\n         */\n        span: PropTypes.number,\n        /**\n         * 控件部分向右偏移宽度份数\n         */\n        offset: PropTypes.number,\n        /**\n         * 同css中的flex属性，用于更灵活的控制控件部分所占宽度\n         */\n        flex: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n    }),\n\n    /**\n     * 当`layput='horizontal'`时，控制是否在表单项标签部分末尾添加冒号\n     */\n    colon: PropTypes.bool,\n\n    /**\n     * 表单项标签部分文本对齐方式，可选项有`'left'`、`'right'`\n     * 默认值：`'right'`\n     */\n    labelAlign: PropTypes.oneOf(['left', 'right']),\n\n    /**\n     * 针对超长表单项标签是否允许换行\n     * 默认值：`false`\n     */\n    labelWrap: PropTypes.bool,\n\n    /**\n     * 是否启用表单批量控制功能，开启后会导致部分性能的损耗\n     * 默认值：`false`\n     */\n    enableBatchControl: PropTypes.bool,\n\n    /**\n     * 当`enableBatchControl=True`时，可用于监听或设置搜集内部表单输入类组件的输入值变化情况，开启后内部表单输入类组件自身的`defaultValue`、`value`参数将会失效\n     */\n    values: PropTypes.object,\n\n    /**\n     * 当`enableBatchControl=True`时，可用于统一设置内部各`AntdFormItem`组件的`validateStatus`值，键为对应`AntdFormItem`组件的`label`值，优先级低于各`AntdFormItem`组件的`validateStatus`值\n     */\n    validateStatuses: PropTypes.objectOf(\n        /**\n         * 校验状态值，可选项有`'success'`、`'warning'`、`'error'`、`'validating'`\n         */\n        PropTypes.oneOf(['success', 'warning', 'error', 'validating'])\n    ),\n\n    /**\n     * 当`enableBatchControl=True`时，可用于统一设置内部各`AntdFormItem`组件的`help`值，键为对应`AntdFormItem`组件的`label`值，优先级低于各`AntdFormItem`组件的`help`值\n     */\n    helps: PropTypes.objectOf(PropTypes.node),\n\n    /**\n     * 当`enableBatchControl=True`时，可用于统一设置内部各`AntdFormItem`组件的`tooltip`值，键为对应`AntdFormItem`组件的`label`值，优先级低于各`AntdFormItem`组件的`tooltip`值\n     */\n    tooltips: PropTypes.objectOf(PropTypes.node),\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdForm;\n\nexport const propTypes = AntdForm.propTypes;\nexport const defaultProps = AntdForm.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataEntry/form/AntdFormItem.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdFormItem = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"data_entry\" */ '../../../fragments/dataEntry/form/AntdFormItem.react'\n        )\n);\n\n/**\n * 表单项组件AntdFormItem\n */\nconst AntdFormItem = ({\n    id,\n    children,\n    className,\n    style,\n    key,\n    labelCol,\n    colon,\n    wrapperCol,\n    label,\n    labelAlign,\n    tooltip,\n    extra,\n    help,\n    hidden = false,\n    required = false,\n    validateStatus,\n    hasFeedback = false,\n    layout,\n    setProps,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdFormItem\n                {...{\n                    id,\n                    children,\n                    className,\n                    style,\n                    key,\n                    labelCol,\n                    colon,\n                    wrapperCol,\n                    label,\n                    labelAlign,\n                    tooltip,\n                    extra,\n                    help,\n                    hidden,\n                    required,\n                    validateStatus,\n                    hasFeedback,\n                    layout,\n                    setProps,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdFormItem.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，内嵌相关常用表单输入类组件\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 是否显示表示必填项的额外“*”标识\n     * 默认值：`false`\n     */\n    required: PropTypes.bool,\n\n    /**\n     * 配置表单项标签部分相关参数，优先级高于所属`AntdForm`中的`labelCol`参数\n     */\n    labelCol: PropTypes.exact({\n        /**\n         * 标签部分所占宽度份数（总份数24）\n         */\n        span: PropTypes.number,\n        /**\n         * 标签部分向右偏移宽度份数\n         */\n        offset: PropTypes.number,\n        /**\n         * 同css中的flex属性，用于更灵活的控制标签部分所占宽度\n         */\n        flex: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n    }),\n\n    /**\n     * 配置表单项控件部分相关参数，优先级高于所属`AntdForm`中的`labelCol`参数\n     */\n    wrapperCol: PropTypes.exact({\n        /**\n         * 控件部分所占宽度份数（总份数24）\n         */\n        span: PropTypes.number,\n        /**\n         * 控件部分向右偏移宽度份数\n         */\n        offset: PropTypes.number,\n        /**\n         * 同css中的flex属性，用于更灵活的控制控件部分所占宽度\n         */\n        flex: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n    }),\n\n    /**\n     * 当`layout='horizontal'`时，控制是否在表单项标签部分末尾添加冒号，优先级高于所属`AntdForm`中的`colon`参数\n     */\n    colon: PropTypes.bool,\n\n    /**\n     * 组件型，当前表单项标签内容\n     */\n    label: PropTypes.node,\n\n    /**\n     * 表单项标签部分文本对齐方式，可选项有`'left'`、`'right'`，优先级高于所属`AntdForm`中的`labelAlign`参数\n     * 默认值：`'right'`\n     */\n    labelAlign: PropTypes.oneOf(['left', 'right']),\n\n    /**\n     * 组件型，当前表单项标签内容后的额外文字提示信息\n     */\n    tooltip: PropTypes.node,\n\n    /**\n     * 组件型，当前表单项额外提示信息\n     */\n    extra: PropTypes.node,\n\n    /**\n     * 控制校验状态，可选项有`'success'`、`'warning'`、`'error'`、`'validating'`\n     */\n    validateStatus: PropTypes.oneOf([\n        'success',\n        'warning',\n        'error',\n        'validating',\n    ]),\n\n    /**\n     * 与`validateStatus`设定的状态对应，用于控制是否显示额外的状态图标\n     * 默认值：`false`\n     */\n    hasFeedback: PropTypes.bool,\n\n    /**\n     * 组件型，与`validateStatus`状态一致的额外说明内容\n     */\n    help: PropTypes.node,\n\n    /**\n     * 是否隐藏当前字段\n     * 默认值：`false`\n     */\n    hidden: PropTypes.bool,\n\n    /**\n     * 表单项布局模式，可选项有`'horizontal'`、`'vertical'`\n     */\n    layout: PropTypes.oneOf(['horizontal', 'vertical']),\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdFormItem;\n\nexport const propTypes = AntdFormItem.propTypes;\nexport const defaultProps = AntdFormItem.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataEntry/upload/AntdDraggerUpload.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdDraggerUpload = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"upload\" */ '../../../fragments/upload/AntdDraggerUpload.react'\n        )\n);\n\n/**\n * 文件拖拽上传组件AntdDraggerUpload\n */\nconst AntdDraggerUpload = ({\n    id,\n    className,\n    style,\n    draggerClassName,\n    draggerStyle,\n    key,\n    name,\n    enableBatchControl = true,\n    locale = 'zh-cn',\n    apiUrl,\n    apiUrlExtraParams,\n    headers,\n    withCredentials = false,\n    withOriginFileObj = false,\n    downloadUrl,\n    downloadUrlExtraParams,\n    downloadUrlFromBackend = false,\n    icon,\n    text,\n    hint,\n    uploadId,\n    fileListMaxLength = null,\n    fileTypes,\n    fileMaxSize = 500,\n    showUploadList = true,\n    multiple = false,\n    directory = false,\n    failedTooltipInfo,\n    confirmBeforeDelete = false,\n    showPercent = false,\n    progressProps,\n    showSuccessMessage = true,\n    showErrorMessage = true,\n    pastable = false,\n    listUploadTaskRecord = [],\n    defaultFileList,\n    disabled = false,\n    status,\n    setProps,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdDraggerUpload\n                {...{\n                    id,\n                    className,\n                    style,\n                    draggerClassName,\n                    draggerStyle,\n                    key,\n                    name,\n                    enableBatchControl,\n                    locale,\n                    apiUrl,\n                    apiUrlExtraParams,\n                    headers,\n                    withCredentials,\n                    withOriginFileObj,\n                    downloadUrl,\n                    downloadUrlExtraParams,\n                    downloadUrlFromBackend,\n                    icon,\n                    text,\n                    hint,\n                    uploadId,\n                    fileListMaxLength,\n                    fileTypes,\n                    fileMaxSize,\n                    showUploadList,\n                    multiple,\n                    directory,\n                    failedTooltipInfo,\n                    confirmBeforeDelete,\n                    showPercent,\n                    progressProps,\n                    showSuccessMessage,\n                    showErrorMessage,\n                    pastable,\n                    listUploadTaskRecord,\n                    defaultFileList,\n                    disabled,\n                    status,\n                    setProps,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdDraggerUpload.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值\n     */\n    name: PropTypes.string,\n\n    /**\n     * 控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能\n     * 默认值：`true`\n     */\n    enableBatchControl: PropTypes.bool,\n\n    /**\n     * 拖拽区域css类名，支持[动态css](/advanced-classname)\n     */\n    draggerClassName: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 拖拽区域css样式\n     */\n    draggerStyle: PropTypes.object,\n\n    /**\n     * 组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n     * 默认值：`'zh-cn'`\n     */\n    locale: PropTypes.oneOf(['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']),\n\n    /**\n     * 文件上传服务接口地址\n     */\n    apiUrl: PropTypes.string,\n\n    /**\n     * 文件上传服务接口额外参数\n     */\n    apiUrlExtraParams: PropTypes.object,\n\n    /**\n     * 文件上传服务接口额外headers参数\n     */\n    headers: PropTypes.object,\n\n    /**\n     * 是否在请求上传服务接口时自动携带cookies等凭据信息\n     * 默认值：`false`\n     */\n    withCredentials: PropTypes.bool,\n\n    /**\n     * `listUploadTaskRecord`监听结果中是否额外记录浏览器原生`originFileObj`相关信息\n     * 默认值：`false`\n     */\n    withOriginFileObj: PropTypes.bool,\n\n    /**\n     * 对应已上传文件的`GET`类型下载服务接口地址，自带参数`taskId`、`filename`\n     */\n    downloadUrl: PropTypes.string,\n\n    /**\n     * 配合`downloadUrl`参数，设置文件下载服务接口额外参数\n     */\n    downloadUrlExtraParams: PropTypes.object,\n\n    /**\n     * 是否将文件上传接口返回信息中的`url`属性作为下载链接地址\n     * 默认值：`false`\n     */\n    downloadUrlFromBackend: PropTypes.bool,\n\n    /**\n     * 组件型，自定义上传图标\n     */\n    icon: PropTypes.node,\n\n    /**\n     * 组件型，上传区域主要文字说明内容\n     */\n    text: PropTypes.node,\n\n    /**\n     * 组件型，上传区域次要文字说明内容\n     */\n    hint: PropTypes.node,\n\n    /**\n     * 限制已上传文件列表长度上限\n     */\n    fileListMaxLength: PropTypes.number,\n\n    /**\n     * 允许上传的文件后缀名列表，默认不限制\n     */\n    fileTypes: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 自定义当前组件发起文件上传请求时携带的`uploadId`参数，可用于辅助后端创建文件上传所在文件夹\n     */\n    uploadId: PropTypes.string,\n\n    /**\n     * 文件上传尺寸上限，单位：兆\n     */\n    fileMaxSize: PropTypes.number,\n\n    /**\n     * 是否开启多文件上传模式\n     * 默认值：`false`\n     */\n    multiple: PropTypes.bool,\n\n    /**\n     * 是否开启文件夹上传模式\n     * 默认值：`false`\n     */\n    directory: PropTypes.bool,\n\n    /**\n     * 文件上传失败消息提示文字内容\n     * 默认值：`'上传失败'`\n     */\n    failedTooltipInfo: PropTypes.string,\n\n    /**\n     * 是否显示已上传文件列表\n     * 默认值：`true`\n     */\n    showUploadList: PropTypes.bool,\n\n    /**\n     * 是否为已上传文件删除操作添加二次确认模态框\n     * 默认值：`false`\n     */\n    confirmBeforeDelete: PropTypes.bool,\n\n    /**\n     * 是否显示上传进度条\n     * 默认值：`false`\n     */\n    showPercent: PropTypes.bool,\n\n    /**\n     * 配置上传进度条相关参数\n     */\n    progressProps: PropTypes.exact({\n        /**\n         * 进度条颜色\n         */\n        strokeColor: PropTypes.oneOfType([\n            PropTypes.string,\n            /**\n             * 配置渐变色\n             */\n            PropTypes.exact({\n                /**\n                 * 渐变色开始颜色\n                 */\n                from: PropTypes.string,\n                /**\n                 * 渐变色结束颜色\n                 */\n                to: PropTypes.string,\n            }),\n        ]),\n        /**\n         * 进度条像素宽度\n         */\n        strokeWidth: PropTypes.number,\n        /**\n         * 进度文字格式\n         */\n        format: PropTypes.exact({\n            /**\n             * 进度文字前缀内容\n             */\n            prefix: PropTypes.string,\n            /**\n             * 进度文字后缀内容\n             * 默认值：`'%'`\n             */\n            suffix: PropTypes.string,\n        }),\n    }),\n\n    /**\n     * 是否在每个文件上传成功后，分别弹出消息提示\n     * 默认值：`true`\n     */\n    showSuccessMessage: PropTypes.bool,\n\n    /**\n     * 是否在每个文件上传失败后，分别弹出消息提示\n     * 默认值：`true`\n     */\n    showErrorMessage: PropTypes.bool,\n\n    /**\n     * 是否开启粘贴上传，即本地复制文件后，在页面任意位置粘贴即可完成上传\n     * 默认值：`false`\n     */\n    pastable: PropTypes.bool,\n\n    /**\n     * 监听最近一次文件上传任务相关信息\n     */\n    lastUploadTaskRecord: PropTypes.oneOfType([\n        PropTypes.exact({\n            /**\n             * 文件名称\n             */\n            fileName: PropTypes.string,\n            /**\n             * 文件大小\n             */\n            fileSize: PropTypes.number,\n            /**\n             * 上传完成时间戳\n             */\n            completeTimestamp: PropTypes.number,\n            /**\n             * 上传任务状态，`'success'`表示成功，`'failed'`表示失败\n             */\n            taskStatus: PropTypes.string,\n            /**\n             * 上传任务唯一识别id，当任务状态为`'failed'`时不会携带此信息\n             */\n            taskId: PropTypes.string,\n            /**\n             * 当前文件的下载链接\n             */\n            url: PropTypes.string,\n            /**\n             * 上传任务的接口响应信息\n             */\n            uploadResponse: PropTypes.any,\n        }),\n        PropTypes.arrayOf(\n            PropTypes.exact({\n                /**\n                 * 文件名称\n                 */\n                fileName: PropTypes.string,\n                /**\n                 * 文件大小\n                 */\n                fileSize: PropTypes.number,\n                /**\n                 * 上传完成时间戳\n                 */\n                completeTimestamp: PropTypes.number,\n                /**\n                 * 上传任务状态，`'success'`表示成功，`'failed'`表示失败\n                 */\n                taskStatus: PropTypes.string,\n                /**\n                 * 上传任务唯一识别id，当任务状态为`'failed'`时不会携带此信息\n                 */\n                taskId: PropTypes.string,\n                /**\n                 * 当前文件的下载链接\n                 */\n                url: PropTypes.string,\n                /**\n                 * 上传任务的接口响应信息\n                 */\n                uploadResponse: PropTypes.any,\n            })\n        ),\n    ]),\n\n    /**\n     * 监听当前已上传文件列表中上传任务相关信息\n     */\n    listUploadTaskRecord: PropTypes.arrayOf(\n        PropTypes.exact({\n            /**\n             * 文件名称\n             */\n            fileName: PropTypes.string,\n            /**\n             * 文件大小\n             */\n            fileSize: PropTypes.number,\n            /**\n             * 上传完成时间戳\n             */\n            completeTimestamp: PropTypes.number,\n            /**\n             * 上传任务状态，`'success'`表示成功，`'failed'`表示失败\n             */\n            taskStatus: PropTypes.string,\n            /**\n             * 上传任务唯一识别id，当任务状态为`'failed'`时不会携带此信息\n             */\n            taskId: PropTypes.string,\n            /**\n             * 当前文件上传唯一识别id，前端自动生成\n             */\n            uid: PropTypes.string,\n            /**\n             * 当前文件下载链接\n             */\n            url: PropTypes.string,\n            /**\n             * 上传任务的接口响应信息\n             */\n            uploadResponse: PropTypes.any,\n            /**\n             * 当`withOriginFileObj=True`时，监听当前文件上传任务对应的`originFileObj`主要信息\n             */\n            originFileObj: PropTypes.any,\n        })\n    ),\n\n    /**\n     * 初始化文件列表展示信息\n     */\n    defaultFileList: PropTypes.arrayOf(\n        PropTypes.exact({\n            /**\n             * 当前文件名称\n             */\n            name: PropTypes.string,\n            /**\n             * 当前文件展示状态，可选项有`'done'`、`'error'`、`'removed'`\n             */\n            status: PropTypes.oneOf(['done', 'error', 'removed']),\n            /**\n             * 当前文件唯一识别id\n             */\n            uid: PropTypes.any,\n            /**\n             * 当前文件下载链接\n             */\n            url: PropTypes.string,\n            /**\n             * 若传入有效值，将作为当前组件的`uploadId`参数\n             */\n            taskId: PropTypes.string,\n            /**\n             * 当前文件大小\n             */\n            fileSize: PropTypes.number,\n        })\n    ),\n\n    /**\n     * 是否禁用当前组件\n     * 默认值：`false`\n     */\n    disabled: PropTypes.bool,\n\n    /**\n     * 控制校验状态，可选项有`'error'`、`'warning'`\n     */\n    status: PropTypes.oneOf(['error', 'warning']),\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdDraggerUpload;\n\nexport const propTypes = AntdDraggerUpload.propTypes;\nexport const defaultProps = AntdDraggerUpload.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataEntry/upload/AntdPictureUpload.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdPictureUpload = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"upload\" */ '../../../fragments/upload/AntdPictureUpload.react'\n        )\n);\n\n/**\n * 图片上传组件AntdPictureUpload\n */\nconst AntdPictureUpload = ({\n    id,\n    className,\n    style,\n    key,\n    name,\n    enableBatchControl = true,\n    locale = 'zh-cn',\n    apiUrl,\n    apiUrlExtraParams,\n    headers,\n    withCredentials = false,\n    downloadUrl,\n    downloadUrlExtraParams,\n    downloadUrlFromBackend = false,\n    editable = false,\n    editConfig,\n    uploadId,\n    fileListMaxLength = null,\n    buttonContent,\n    fileTypes = [\n        'tiff',\n        'bmp',\n        'gif',\n        'png',\n        'jpeg',\n        'jpg',\n        'webp',\n        'ico',\n        'tif',\n    ],\n    fileMaxSize = 10,\n    failedTooltipInfo,\n    showRemoveIcon = true,\n    showPreviewIcon = true,\n    confirmBeforeDelete = false,\n    showPercent = false,\n    progressProps,\n    showSuccessMessage = true,\n    showErrorMessage = true,\n    pastable = false,\n    listUploadTaskRecord = [],\n    defaultFileList,\n    disabled = false,\n    status,\n    setProps,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdPictureUpload\n                {...{\n                    id,\n                    className,\n                    style,\n                    key,\n                    name,\n                    enableBatchControl,\n                    locale,\n                    apiUrl,\n                    apiUrlExtraParams,\n                    headers,\n                    withCredentials,\n                    downloadUrl,\n                    downloadUrlExtraParams,\n                    downloadUrlFromBackend,\n                    editable,\n                    editConfig,\n                    uploadId,\n                    fileListMaxLength,\n                    buttonContent,\n                    fileTypes,\n                    fileMaxSize,\n                    failedTooltipInfo,\n                    showRemoveIcon,\n                    showPreviewIcon,\n                    confirmBeforeDelete,\n                    showPercent,\n                    progressProps,\n                    showSuccessMessage,\n                    showErrorMessage,\n                    pastable,\n                    listUploadTaskRecord,\n                    defaultFileList,\n                    disabled,\n                    status,\n                    setProps,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdPictureUpload.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值\n     */\n    name: PropTypes.string,\n\n    /**\n     * 控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能\n     * 默认值：`true`\n     */\n    enableBatchControl: PropTypes.bool,\n\n    /**\n     * 组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n     * 默认值：`'zh-cn'`\n     */\n    locale: PropTypes.oneOf(['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']),\n\n    /**\n     * 文件上传服务接口地址\n     */\n    apiUrl: PropTypes.string,\n\n    /**\n     * 文件上传服务接口额外参数\n     */\n    apiUrlExtraParams: PropTypes.object,\n\n    /**\n     * 文件上传服务接口额外headers参数\n     */\n    headers: PropTypes.object,\n\n    /**\n     * 是否在请求上传服务接口时自动携带cookies等凭据信息\n     * 默认值：`false`\n     */\n    withCredentials: PropTypes.bool,\n\n    /**\n     * 对应已上传文件的`GET`类型下载服务接口地址，自带参数`taskId`、`filename`\n     */\n    downloadUrl: PropTypes.string,\n\n    /**\n     * 配合`downloadUrl`参数，设置文件下载服务接口额外参数\n     */\n    downloadUrlExtraParams: PropTypes.object,\n\n    /**\n     * 是否将文件上传接口返回信息中的`url`属性作为下载链接地址\n     * 默认值：`false`\n     */\n    downloadUrlFromBackend: PropTypes.bool,\n\n    /**\n     * 是否为图片上传过程添加裁切、旋转等预处理功能\n     * 默认值：`false`\n     */\n    editable: PropTypes.bool,\n\n    /**\n     * 当`editable=True`时，配置图片编辑相关功能\n     */\n    editConfig: PropTypes.exact({\n        /**\n         * 裁切区域宽高比\n         * 默认值：`1`\n         */\n        aspect: PropTypes.number,\n        /**\n         * 裁切区域形状，可选项有`'rect'`、`'round'`\n         * 默认值：`'rect'`\n         */\n        shape: PropTypes.oneOf(['rect', 'round']),\n        /**\n         * 是否显示裁切区域辅助网格线\n         * 默认值：`false`\n         */\n        grid: PropTypes.bool,\n        /**\n         * 图片质量，取值应在0到1之间\n         * 默认值：`0.4`\n         */\n        quality: PropTypes.number,\n        /**\n         * 是否启用图片缩放功能\n         * 默认值：`true`\n         */\n        zoom: PropTypes.bool,\n        /**\n         * 是否启用图片旋转功能\n         * 默认值：`false`\n         */\n        rotate: PropTypes.bool,\n        /**\n         * 开启缩放功能时，设置最小缩放倍数\n         * 默认值：`1`\n         */\n        minZoom: PropTypes.number,\n        /**\n         * 开启缩放功能时，设置最大缩放倍数\n         * 默认值：`3`\n         */\n        maxZoom: PropTypes.number,\n        /**\n         * 组件型，图片编辑模态框的标题\n         * 默认值：`'编辑图片'`\n         */\n        modalTitle: PropTypes.node,\n        /**\n         * 图片编辑模态框像素宽度\n         * 默认值：`520`\n         */\n        modalWidth: PropTypes.number,\n        /**\n         * 组件型，图片编辑模态框确认按钮内容\n         * 默认值：`'确定'`\n         */\n        modalOk: PropTypes.node,\n        /**\n         * 组件型，图片编辑模态框取消按钮内容\n         * 默认值：`'取消'`\n         */\n        modalCancel: PropTypes.node,\n    }),\n\n    /**\n     * 限制已上传文件列表长度上限\n     */\n    fileListMaxLength: PropTypes.number,\n\n    /**\n     * 允许上传的文件后缀名列表\n     * 默认值：`['tiff', 'bmp', 'gif', 'png', 'jpeg', 'jpg', 'webp', 'ico', 'tif']`\n     */\n    fileTypes: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 组件型，上传按钮内容\n     */\n    buttonContent: PropTypes.node,\n\n    /**\n     * 自定义当前组件发起文件上传请求时携带的`uploadId`参数，可用于辅助后端创建文件上传所在文件夹\n     */\n    uploadId: PropTypes.string,\n\n    /**\n     * 文件上传尺寸上限，单位：兆\n     */\n    fileMaxSize: PropTypes.number,\n\n    /**\n     * 文件上传失败消息提示文字内容\n     * 默认值：`'上传失败'`\n     */\n    failedTooltipInfo: PropTypes.string,\n\n    /**\n     * 已上传图片是否显示删除按钮\n     * 默认值：`true`\n     */\n    showRemoveIcon: PropTypes.bool,\n\n    /**\n     * 已上传图片是否显示预览按钮\n     * 默认值：`true`\n     */\n    showPreviewIcon: PropTypes.bool,\n\n    /**\n     * 是否为已上传文件删除操作添加二次确认模态框\n     * 默认值：`false`\n     */\n    confirmBeforeDelete: PropTypes.bool,\n\n    /**\n     * 是否显示上传进度条\n     * 默认值：`false`\n     */\n    showPercent: PropTypes.bool,\n\n    /**\n     * 配置上传进度条相关参数\n     */\n    progressProps: PropTypes.exact({\n        /**\n         * 进度条颜色\n         */\n        strokeColor: PropTypes.oneOfType([\n            PropTypes.string,\n            /**\n             * 配置渐变色\n             */\n            PropTypes.exact({\n                /**\n                 * 渐变色开始颜色\n                 */\n                from: PropTypes.string,\n                /**\n                 * 渐变色结束颜色\n                 */\n                to: PropTypes.string,\n            }),\n        ]),\n        /**\n         * 进度条像素宽度\n         */\n        strokeWidth: PropTypes.number,\n        /**\n         * 进度文字格式\n         */\n        format: PropTypes.exact({\n            /**\n             * 进度文字前缀内容\n             */\n            prefix: PropTypes.string,\n            /**\n             * 进度文字后缀内容\n             * 默认值：`'%'`\n             */\n            suffix: PropTypes.string,\n        }),\n    }),\n\n    /**\n     * 是否在每个文件上传成功后，分别弹出消息提示\n     * 默认值：`true`\n     */\n    showSuccessMessage: PropTypes.bool,\n\n    /**\n     * 是否在每个文件上传失败后，分别弹出消息提示\n     * 默认值：`true`\n     */\n    showErrorMessage: PropTypes.bool,\n\n    /**\n     * 是否开启粘贴上传，即本地复制文件后，在页面任意位置粘贴即可完成上传\n     * 默认值：`false`\n     */\n    pastable: PropTypes.bool,\n\n    /**\n     * 监听最近一次文件上传任务相关信息\n     */\n    lastUploadTaskRecord: PropTypes.oneOfType([\n        PropTypes.exact({\n            /**\n             * 文件名称\n             */\n            fileName: PropTypes.string,\n            /**\n             * 文件大小\n             */\n            fileSize: PropTypes.number,\n            /**\n             * 上传完成时间戳\n             */\n            completeTimestamp: PropTypes.number,\n            /**\n             * 上传任务状态，`'success'`表示成功，`'failed'`表示失败\n             */\n            taskStatus: PropTypes.string,\n            /**\n             * 上传任务唯一识别id，当任务状态为`'failed'`时不会携带此信息\n             */\n            taskId: PropTypes.string,\n            /**\n             * 当前文件的下载链接\n             */\n            url: PropTypes.string,\n            /**\n             * 上传任务的接口响应信息\n             */\n            uploadResponse: PropTypes.any,\n        }),\n        PropTypes.arrayOf(\n            PropTypes.exact({\n                /**\n                 * 文件名称\n                 */\n                fileName: PropTypes.string,\n                /**\n                 * 文件大小\n                 */\n                fileSize: PropTypes.number,\n                /**\n                 * 上传完成时间戳\n                 */\n                completeTimestamp: PropTypes.number,\n                /**\n                 * 上传任务状态，`'success'`表示成功，`'failed'`表示失败\n                 */\n                taskStatus: PropTypes.string,\n                /**\n                 * 上传任务唯一识别id，当任务状态为`'failed'`时不会携带此信息\n                 */\n                taskId: PropTypes.string,\n                /**\n                 * 当前文件的下载链接\n                 */\n                url: PropTypes.string,\n                /**\n                 * 上传任务的接口响应信息\n                 */\n                uploadResponse: PropTypes.any,\n            })\n        ),\n    ]),\n\n    /**\n     * 监听当前已上传文件列表中上传任务相关信息\n     */\n    listUploadTaskRecord: PropTypes.arrayOf(\n        PropTypes.exact({\n            /**\n             * 文件名称\n             */\n            fileName: PropTypes.string,\n            /**\n             * 文件大小\n             */\n            fileSize: PropTypes.number,\n            /**\n             * 上传完成时间戳\n             */\n            completeTimestamp: PropTypes.number,\n            /**\n             * 上传任务状态，`'success'`表示成功，`'failed'`表示失败\n             */\n            taskStatus: PropTypes.string,\n            /**\n             * 上传任务唯一识别id，当任务状态为`'failed'`时不会携带此信息\n             */\n            taskId: PropTypes.string,\n            /**\n             * 当前文件上传唯一识别id，前端自动生成\n             */\n            uid: PropTypes.string,\n            /**\n             * 当前文件下载链接\n             */\n            url: PropTypes.string,\n            /**\n             * 上传任务的接口响应信息\n             */\n            uploadResponse: PropTypes.any,\n        })\n    ),\n\n    /**\n     * 初始化文件列表展示信息\n     */\n    defaultFileList: PropTypes.arrayOf(\n        PropTypes.exact({\n            /**\n             * 当前文件名称\n             */\n            name: PropTypes.string,\n            /**\n             * 当前文件展示状态，可选项有`'done'`、`'error'`、`'removed'`\n             */\n            status: PropTypes.oneOf(['done', 'error', 'removed']),\n            /**\n             * 当前文件唯一识别id\n             */\n            uid: PropTypes.any,\n            /**\n             * 当前文件下载链接\n             */\n            url: PropTypes.string,\n            /**\n             * 若传入有效值，将作为当前组件的`uploadId`参数\n             */\n            taskId: PropTypes.string,\n            /**\n             * 当前文件大小\n             */\n            fileSize: PropTypes.number,\n        })\n    ),\n\n    /**\n     * 是否禁用当前组件\n     * 默认值：`false`\n     */\n    disabled: PropTypes.bool,\n\n    /**\n     * 控制校验状态，可选项有`'error'`、`'warning'`\n     */\n    status: PropTypes.oneOf(['error', 'warning']),\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdPictureUpload;\n\nexport const propTypes = AntdPictureUpload.propTypes;\nexport const defaultProps = AntdPictureUpload.defaultProps;\n"
  },
  {
    "path": "src/lib/components/dataEntry/upload/AntdUpload.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdUpload = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"upload\" */ '../../../fragments/upload/AntdUpload.react'\n        )\n);\n\n/**\n * 文件上传组件AntdUpload\n */\nconst AntdUpload = ({\n    id,\n    className,\n    style,\n    key,\n    name,\n    enableBatchControl = true,\n    locale = 'zh-cn',\n    apiUrl,\n    apiUrlExtraParams,\n    headers,\n    withCredentials = false,\n    withOriginFileObj = false,\n    downloadUrl,\n    downloadUrlExtraParams = {},\n    downloadUrlFromBackend = false,\n    uploadId,\n    fileListMaxLength = null,\n    buttonContent,\n    buttonIcon,\n    buttonProps,\n    fileTypes,\n    fileMaxSize = 500,\n    showUploadList = true,\n    multiple = false,\n    directory = false,\n    failedTooltipInfo,\n    confirmBeforeDelete = false,\n    showPercent = false,\n    progressProps,\n    showSuccessMessage = true,\n    showErrorMessage = true,\n    pastable = false,\n    listUploadTaskRecord = [],\n    defaultFileList,\n    disabled = false,\n    status,\n    setProps,\n    ...others\n}) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdUpload\n                {...{\n                    id,\n                    className,\n                    style,\n                    key,\n                    name,\n                    enableBatchControl,\n                    locale,\n                    apiUrl,\n                    apiUrlExtraParams,\n                    headers,\n                    withCredentials,\n                    withOriginFileObj,\n                    downloadUrl,\n                    downloadUrlExtraParams,\n                    downloadUrlFromBackend,\n                    uploadId,\n                    fileListMaxLength,\n                    buttonContent,\n                    buttonIcon,\n                    buttonProps,\n                    fileTypes,\n                    fileMaxSize,\n                    showUploadList,\n                    multiple,\n                    directory,\n                    failedTooltipInfo,\n                    confirmBeforeDelete,\n                    showPercent,\n                    progressProps,\n                    showSuccessMessage,\n                    showErrorMessage,\n                    pastable,\n                    listUploadTaskRecord,\n                    defaultFileList,\n                    disabled,\n                    status,\n                    setProps,\n                    ...others,\n                }}\n            />\n        </Suspense>\n    );\n};\n\nAntdUpload.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 配合`AntdForm`表单批量值搜集/控制功能使用，充当当前表单项的字段名，以`id`作为缺省值\n     */\n    name: PropTypes.string,\n\n    /**\n     * 控制当前组件是否参与有效的`AntdForm`表单批量值搜集/控制功能\n     * 默认值：`true`\n     */\n    enableBatchControl: PropTypes.bool,\n\n    /**\n     * 组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n     * 默认值：`'zh-cn'`\n     */\n    locale: PropTypes.oneOf(['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']),\n\n    /**\n     * 文件上传服务接口地址\n     */\n    apiUrl: PropTypes.string,\n\n    /**\n     * 文件上传服务接口额外参数\n     */\n    apiUrlExtraParams: PropTypes.object,\n\n    /**\n     * 文件上传服务接口额外headers参数\n     */\n    headers: PropTypes.object,\n\n    /**\n     * 是否在请求上传服务接口时自动携带cookies等凭据信息\n     * 默认值：`false`\n     */\n    withCredentials: PropTypes.bool,\n\n    /**\n     * `listUploadTaskRecord`监听结果中是否额外记录浏览器原生`originFileObj`相关信息\n     * 默认值：`false`\n     */\n    withOriginFileObj: PropTypes.bool,\n\n    /**\n     * 对应已上传文件的`GET`类型下载服务接口地址，自带参数`taskId`、`filename`\n     */\n    downloadUrl: PropTypes.string,\n\n    /**\n     * 配合`downloadUrl`参数，设置文件下载服务接口额外参数\n     */\n    downloadUrlExtraParams: PropTypes.object,\n\n    /**\n     * 是否将文件上传接口返回信息中的`url`属性作为下载链接地址\n     * 默认值：`false`\n     */\n    downloadUrlFromBackend: PropTypes.bool,\n\n    /**\n     * 限制已上传文件列表长度上限\n     */\n    fileListMaxLength: PropTypes.number,\n\n    /**\n     * 允许上传的文件后缀名列表，默认不限制\n     */\n    fileTypes: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 组件型，自定义上传按钮内容\n     */\n    buttonContent: PropTypes.node,\n\n    /**\n     * 组件型，自定义上传按钮图标\n     */\n    buttonIcon: PropTypes.node,\n\n    /**\n     * 配置上传按钮相关参数\n     */\n    buttonProps: PropTypes.exact({\n        /**\n         * 按钮尺寸规格，可选项有`'default'`、`'small'`、`'large'`\n         * 默认值：`'default'`\n         */\n        size: PropTypes.oneOf(['default', 'small', 'large']),\n\n        /**\n         * 按钮类型，可选项有`'default'`、`'primary'`、`'ghost'`、`'dashed'`、`'link'`、`'text'`\n         * 默认值：`'default'`\n         */\n        type: PropTypes.oneOf([\n            'primary',\n            'ghost',\n            'dashed',\n            'link',\n            'text',\n            'default',\n        ]),\n\n        /**\n         * 按钮是否渲染危险状态\n         * 默认值：`false`\n         */\n        danger: PropTypes.bool,\n\n        /**\n         * 按钮是否撑满父元素\n         * 默认值：`false`\n         */\n        block: PropTypes.bool,\n\n        /**\n         * 按钮css样式\n         */\n        style: PropTypes.object,\n\n        /**\n         * 按钮css类名\n         */\n        className: PropTypes.string,\n    }),\n\n    /**\n     * 自定义当前组件发起文件上传请求时携带的`uploadId`参数，可用于辅助后端创建文件上传所在文件夹\n     */\n    uploadId: PropTypes.string,\n\n    /**\n     * 文件上传尺寸上限，单位：兆\n     */\n    fileMaxSize: PropTypes.number,\n\n    /**\n     * 是否开启多文件上传模式\n     * 默认值：`false`\n     */\n    multiple: PropTypes.bool,\n\n    /**\n     * 是否开启文件夹上传模式\n     * 默认值：`false`\n     */\n    directory: PropTypes.bool,\n\n    /**\n     * 文件上传失败消息提示文字内容\n     * 默认值：`'上传失败'`\n     */\n    failedTooltipInfo: PropTypes.string,\n\n    /**\n     * 是否显示已上传文件列表\n     * 默认值：`true`\n     */\n    showUploadList: PropTypes.bool,\n\n    /**\n     * 是否为已上传文件删除操作添加二次确认模态框\n     * 默认值：`false`\n     */\n    confirmBeforeDelete: PropTypes.bool,\n\n    /**\n     * 是否显示上传进度条\n     * 默认值：`false`\n     */\n    showPercent: PropTypes.bool,\n\n    /**\n     * 配置上传进度条相关参数\n     */\n    progressProps: PropTypes.exact({\n        /**\n         * 进度条颜色\n         */\n        strokeColor: PropTypes.oneOfType([\n            PropTypes.string,\n            /**\n             * 配置渐变色\n             */\n            PropTypes.exact({\n                /**\n                 * 渐变色开始颜色\n                 */\n                from: PropTypes.string,\n                /**\n                 * 渐变色结束颜色\n                 */\n                to: PropTypes.string,\n            }),\n        ]),\n        /**\n         * 进度条像素宽度\n         */\n        strokeWidth: PropTypes.number,\n        /**\n         * 进度文字格式\n         */\n        format: PropTypes.exact({\n            /**\n             * 进度文字前缀内容\n             */\n            prefix: PropTypes.string,\n            /**\n             * 进度文字后缀内容\n             * 默认值：`'%'`\n             */\n            suffix: PropTypes.string,\n        }),\n    }),\n\n    /**\n     * 是否在每个文件上传成功后，分别弹出消息提示\n     * 默认值：`true`\n     */\n    showSuccessMessage: PropTypes.bool,\n\n    /**\n     * 是否在每个文件上传失败后，分别弹出消息提示\n     * 默认值：`true`\n     */\n    showErrorMessage: PropTypes.bool,\n\n    /**\n     * 是否开启粘贴上传，即本地复制文件后，在页面任意位置粘贴即可完成上传\n     * 默认值：`false`\n     */\n    pastable: PropTypes.bool,\n\n    /**\n     * 监听最近一次文件上传任务相关信息\n     */\n    lastUploadTaskRecord: PropTypes.oneOfType([\n        // 单文件\n        PropTypes.exact({\n            /**\n             * 文件名称\n             */\n            fileName: PropTypes.string,\n            /**\n             * 文件大小\n             */\n            fileSize: PropTypes.number,\n            /**\n             * 上传完成时间戳\n             */\n            completeTimestamp: PropTypes.number,\n            /**\n             * 上传任务状态，`'success'`表示成功，`'failed'`表示失败\n             */\n            taskStatus: PropTypes.string,\n            /**\n             * 上传任务唯一识别id，当任务状态为`'failed'`时不会携带此信息\n             */\n            taskId: PropTypes.string,\n            /**\n             * 当前文件的下载链接\n             */\n            url: PropTypes.string,\n            /**\n             * 上传任务的接口响应信息\n             */\n            uploadResponse: PropTypes.any,\n        }),\n        PropTypes.arrayOf(\n            PropTypes.exact({\n                /**\n                 * 文件名称\n                 */\n                fileName: PropTypes.string,\n                /**\n                 * 文件大小\n                 */\n                fileSize: PropTypes.number,\n                /**\n                 * 上传完成时间戳\n                 */\n                completeTimestamp: PropTypes.number,\n                /**\n                 * 上传任务状态，`'success'`表示成功，`'failed'`表示失败\n                 */\n                taskStatus: PropTypes.string,\n                /**\n                 * 上传任务唯一识别id，当任务状态为`'failed'`时不会携带此信息\n                 */\n                taskId: PropTypes.string,\n                /**\n                 * 当前文件的下载链接\n                 */\n                url: PropTypes.string,\n                /**\n                 * 上传任务的接口响应信息\n                 */\n                uploadResponse: PropTypes.any,\n            })\n        ),\n    ]),\n\n    /**\n     * 监听当前已上传文件列表中上传任务相关信息\n     */\n    listUploadTaskRecord: PropTypes.arrayOf(\n        PropTypes.exact({\n            /**\n             * 文件名称\n             */\n            fileName: PropTypes.string,\n            /**\n             * 文件大小\n             */\n            fileSize: PropTypes.number,\n            /**\n             * 上传完成时间戳\n             */\n            completeTimestamp: PropTypes.number,\n            /**\n             * 上传任务状态，`'success'`表示成功，`'failed'`表示失败\n             */\n            taskStatus: PropTypes.string,\n            /**\n             * 上传任务唯一识别id，当任务状态为`'failed'`时不会携带此信息\n             */\n            taskId: PropTypes.string,\n            /**\n             * 当前文件上传唯一识别id，前端自动生成\n             */\n            uid: PropTypes.string,\n            /**\n             * 当前文件下载链接\n             */\n            url: PropTypes.string,\n            /**\n             * 上传任务的接口响应信息\n             */\n            uploadResponse: PropTypes.any,\n            /**\n             * 当`withOriginFileObj=True`时，监听当前文件上传任务对应的`originFileObj`主要信息\n             */\n            originFileObj: PropTypes.any,\n        })\n    ),\n\n    /**\n     * 初始化文件列表展示信息\n     */\n    defaultFileList: PropTypes.arrayOf(\n        PropTypes.exact({\n            /**\n             * 当前文件名称\n             */\n            name: PropTypes.string,\n            /**\n             * 当前文件展示状态，可选项有`'done'`、`'error'`、`'removed'`\n             */\n            status: PropTypes.oneOf(['done', 'error', 'removed']),\n            /**\n             * 当前文件唯一识别id\n             */\n            uid: PropTypes.any,\n            /**\n             * 当前文件下载链接\n             */\n            url: PropTypes.string,\n            /**\n             * 若传入有效值，将作为当前组件的`uploadId`参数\n             */\n            taskId: PropTypes.string,\n            /**\n             * 当前文件大小\n             */\n            fileSize: PropTypes.number,\n        })\n    ),\n\n    /**\n     * 是否禁用当前组件\n     * 默认值：`false`\n     */\n    disabled: PropTypes.bool,\n\n    /**\n     * 控制校验状态，可选项有`'error'`、`'warning'`\n     */\n    status: PropTypes.oneOf(['error', 'warning']),\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    loading_state: PropTypes.shape({\n        /**\n         * Determines if the component is loading or not\n         */\n        is_loading: PropTypes.bool,\n        /**\n         * Holds which property is loading\n         */\n        prop_name: PropTypes.string,\n        /**\n         * Holds the name of the component that is loading\n         */\n        component_name: PropTypes.string,\n    }),\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdUpload;\n\nexport const propTypes = AntdUpload.propTypes;\nexport const defaultProps = AntdUpload.defaultProps;\n"
  },
  {
    "path": "src/lib/components/feedback/AntdAlert.react.js",
    "content": "// react核心\nimport React from 'react';\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Alert } from 'antd';\n// 辅助库\nimport TextLoop from 'react-text-loop';\nimport Marquee from 'react-fast-marquee';\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n\n/**\n * 警告提示组件AntdAlert\n */\nconst AntdAlert = ({\n    id,\n    className,\n    style,\n    key,\n    type = 'info',\n    showIcon = false,\n    icon,\n    closable = false,\n    message,\n    messageRenderMode = 'default',\n    description,\n    action,\n    banner = false,\n    setProps,\n    ...others\n}) => {\n    if (messageRenderMode === 'loop-text' && Array.isArray(message)) {\n        return (\n            <Alert\n                // 提取具有data-*或aria-*通配格式的属性\n                {...pickBy(\n                    (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                    others\n                )}\n                id={id}\n                className={\n                    isString(className)\n                        ? className\n                        : className\n                          ? useCss(className)\n                          : undefined\n                }\n                style={style}\n                key={key}\n                message={\n                    <TextLoop mask>\n                        {message.map((item) => (\n                            <div>{item}</div>\n                        ))}\n                    </TextLoop>\n                }\n                type={type}\n                description={description}\n                showIcon={showIcon}\n                icon={icon}\n                closable={closable}\n                action={action}\n                banner={banner}\n                data-dash-is-loading={useLoading()}\n            />\n        );\n    }\n\n    return (\n        <Alert\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            message={\n                messageRenderMode === 'marquee' ? (\n                    <Marquee pauseOnHover gradient={false}>\n                        {message}\n                    </Marquee>\n                ) : (\n                    message\n                )\n            }\n            type={type}\n            description={description}\n            showIcon={showIcon}\n            icon={icon}\n            closable={closable}\n            action={action}\n            banner={banner}\n            data-dash-is-loading={useLoading()}\n        />\n    );\n};\n\nAntdAlert.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 主要提示信息内容\n     */\n    message: PropTypes.node,\n\n    /**\n     * 额外提示信息内容\n     */\n    description: PropTypes.node,\n\n    /**\n     * 提示信息类型，可选项有`'success'`、`'info'`、`'warning'`、`'error'`\n     * 默认值：`'info'`\n     */\n    type: PropTypes.oneOf(['success', 'info', 'warning', 'error']),\n\n    /**\n     * 是否显示额外图标\n     * 默认值：`false`\n     */\n    showIcon: PropTypes.bool,\n\n    /**\n     * 组件型，当`showIcon=true`时，用于自定义图标元素\n     */\n    icon: PropTypes.node,\n\n    /**\n     * 是否可关闭\n     * 默认值：`false`\n     */\n    closable: PropTypes.bool,\n\n    /**\n     * 渲染模式，可选项有`'default'`、`'loop-text'`、`'marquee'`\n     * 默认值：`'default'`\n     */\n    messageRenderMode: PropTypes.oneOf(['default', 'loop-text', 'marquee']),\n\n    /**\n     * 组件型，定义右上角额外操作区元素\n     */\n    action: PropTypes.node,\n\n    /**\n     * 是否用作顶部公告\n     * 默认值：`false`\n     */\n    banner: PropTypes.bool,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdAlert;\n"
  },
  {
    "path": "src/lib/components/feedback/AntdDrawer.react.js",
    "content": "// react核心\nimport React from 'react';\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Drawer } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n\n/**\n * 抽屉组件AntdDrawer\n */\nconst AntdDrawer = ({\n    id,\n    children,\n    className,\n    style,\n    rootStyle,\n    classNames,\n    styles,\n    key,\n    visible = false,\n    title,\n    placement = 'right',\n    closable = true,\n    forceRender = false,\n    destroyOnClose = false,\n    containerId,\n    containerSelector,\n    height = 256,\n    mask = true,\n    maskClosable = true,\n    width = 256,\n    zIndex = 1000,\n    loading = false,\n    extra,\n    footer,\n    setProps,\n    ...others\n}) => {\n    const onClose = () => {\n        setProps({ visible: false });\n    };\n\n    return (\n        <Drawer\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            key={key}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={\n                containerId || containerSelector\n                    ? {\n                          ...{ position: 'absolute' },\n                          ...style,\n                      }\n                    : style\n            }\n            classNames={classNames}\n            styles={styles}\n            rootStyle={\n                containerId || containerSelector\n                    ? {\n                          position: 'absolute',\n                          ...rootStyle,\n                      }\n                    : rootStyle\n            }\n            open={visible}\n            title={title}\n            placement={placement}\n            closable={closable}\n            forceRender={forceRender}\n            destroyOnClose={destroyOnClose}\n            getContainer={\n                containerId || containerSelector\n                    ? containerId\n                        ? () =>\n                              document.getElementById(containerId) ||\n                              document.body\n                        : () => eval(containerSelector)\n                    : undefined\n            }\n            height={height}\n            mask={mask}\n            maskClosable={maskClosable}\n            width={width}\n            zIndex={zIndex}\n            loading={loading}\n            extra={extra}\n            footer={footer}\n            onClose={onClose}\n            data-dash-is-loading={useLoading()}\n        >\n            {children}\n        </Drawer>\n    );\n};\n\nAntdDrawer.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，内嵌元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 配置各子元素的css类名\n     */\n    classNames: PropTypes.exact({\n        /**\n         * 头部元素css类名\n         */\n        header: PropTypes.string,\n        /**\n         * 内容元素css类名\n         */\n        body: PropTypes.string,\n        /**\n         * 底部元素css类名\n         */\n        footer: PropTypes.string,\n        /**\n         * 遮罩层元素css类名\n         */\n        mask: PropTypes.string,\n        /**\n         * 抽屉容器元素css类名\n         */\n        content: PropTypes.string,\n    }),\n\n    /**\n     * 配置各子元素的css样式\n     */\n    styles: PropTypes.exact({\n        /**\n         * 头部元素css样式\n         */\n        header: PropTypes.object,\n        /**\n         * 内容元素css样式\n         */\n        body: PropTypes.object,\n        /**\n         * 底部元素css样式\n         */\n        footer: PropTypes.object,\n        /**\n         * 遮罩层元素css样式\n         */\n        mask: PropTypes.object,\n        /**\n         * 抽屉容器元素css样式\n         */\n        content: PropTypes.object,\n    }),\n\n    /**\n     * 抽屉根节点css样式（包含遮罩层），特殊的，当设置了`containerId`或`containerSelector`时，该参数会自动设置`position`为`absolute`\n     */\n    rootStyle: PropTypes.object,\n\n    /**\n     * 监听或设置抽屉是否可见\n     * 默认值：`false`\n     */\n    visible: PropTypes.bool,\n\n    /**\n     * 组件型，抽屉标题内容\n     */\n    title: PropTypes.node,\n\n    /**\n     * 抽屉弹出位置，可选项有`'left'`、`'right'`、`'top'`、`'bottom'`\n     * 默认值：`'right'`\n     */\n    placement: PropTypes.oneOf(['left', 'right', 'top', 'bottom']),\n\n    /**\n     * 是否显示关闭按钮\n     * 默认值：`true`\n     */\n    closable: PropTypes.bool,\n\n    /**\n     * 是否对抽屉内的子元素进行预渲染\n     * 默认值：`false`\n     */\n    forceRender: PropTypes.bool,\n\n    /**\n     * 是否在关闭时销毁抽屉内的子元素\n     * 默认值：`false`\n     */\n    destroyOnClose: PropTypes.bool,\n\n    /**\n     * 抽屉像素宽度，`placement`为`'left'`、`'right'`时有效\n     * 默认值：`256`\n     */\n    width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n    /**\n     * 抽屉像素高度，`placement`为`'top'`、`'bottom'`时有效\n     * 默认值：`256`\n     */\n    height: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n    /**\n     * 是否显示遮罩层\n     * 默认值：`true`\n     */\n    mask: PropTypes.bool,\n\n    /**\n     * 是否允许点击遮罩区域关闭抽屉\n     * 默认值：`true`\n     */\n    maskClosable: PropTypes.bool,\n\n    /**\n     * 抽屉整体`z-index`\n     * 默认值：`1000`\n     */\n    zIndex: PropTypes.number,\n\n    /**\n     * 是否渲染为加载中状态\n     * 默认值：`false`\n     */\n    loading: PropTypes.bool,\n\n    /**\n     * 组件型，额外操作区元素\n     */\n    extra: PropTypes.node,\n\n    /**\n     * 组件型，底部元素\n     */\n    footer: PropTypes.node,\n\n    /**\n     * 用于设置`position`为`relative`的局部容器id\n     */\n    containerId: PropTypes.string,\n\n    /**\n     * 当目标容器定位较为复杂时，可传入获取元素对应的js代码字符串，优先级低于`containerId`\n     */\n    containerSelector: PropTypes.string,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdDrawer;\n"
  },
  {
    "path": "src/lib/components/feedback/AntdMessage.react.js",
    "content": "// react核心\nimport React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\n// antd核心\nimport { message } from 'antd';\nimport AntdIcon from '../general/AntdIcon.react';\n// 辅助库\nimport { isString } from 'lodash';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n\n/**\n * 全局提示组件AntdMessage\n */\nconst AntdMessage = ({\n    className,\n    style,\n    content,\n    type = 'default',\n    duration = 3,\n    icon,\n    iconRenderer = 'AntdIcon',\n    top = 8,\n    maxCount,\n    setProps,\n}) => {\n    const config = {\n        className: isString(className)\n            ? className\n            : className\n              ? useCss(className)\n              : undefined,\n        style: style,\n        content: content || ' ', // 规避content为空时Objects are not valid as a React child报错问题\n        duration: duration,\n        top: top,\n        maxCount: maxCount,\n    };\n\n    if (icon) {\n        config.icon =\n            iconRenderer === 'fontawesome' ? (\n                React.createElement('i', {\n                    className: icon,\n                    style: { marginRight: 3 },\n                })\n            ) : (\n                <AntdIcon icon={icon} style={{ marginRight: 3 }} />\n            );\n    }\n\n    const [messageApi, contextHolder] = message.useMessage(config);\n\n    useEffect(() => {\n        if (type === 'default') {\n            messageApi.open(config);\n        } else if (type === 'success') {\n            messageApi.success(config);\n        } else if (type === 'error') {\n            messageApi.error(config);\n        } else if (type === 'info') {\n            messageApi.info(config);\n        } else if (type === 'warning') {\n            messageApi.warning(config);\n        }\n    });\n\n    return <>{contextHolder}</>;\n};\n\nAntdMessage.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名\n     */\n    className: PropTypes.string,\n\n    /**\n     * 提示信息内容\n     */\n    content: PropTypes.string,\n\n    /**\n     * 提示信息类型，可选项有`'default'`、`'success'`、`'error'`、`'info'`、`'warning'`\n     * 默认值：'default'\n     */\n    type: PropTypes.oneOf(['default', 'success', 'error', 'info', 'warning']),\n\n    /**\n     * 提示信息自动消失对应的延时，单位：秒，设置为`0`时不会自动消失\n     * 默认值：`3`\n     */\n    duration: PropTypes.number,\n\n    /**\n     * 提示信息距离顶端的像素距离\n     * 默认值：`8`\n     */\n    top: PropTypes.number,\n\n    /**\n     * 最多允许同时出现的提示信息数量\n     */\n    maxCount: PropTypes.number,\n\n    /**\n     * 自定义前缀图标，同`AntdIcon`的`icon`参数\n     */\n    icon: PropTypes.string,\n\n    /**\n     * 自定义前缀图标渲染方式，可选项有`'AntdIcon'`、`'fontawesome'`\n     */\n    iconRenderer: PropTypes.oneOf(['AntdIcon', 'fontawesome']),\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdMessage;\n"
  },
  {
    "path": "src/lib/components/feedback/AntdModal.react.js",
    "content": "// react核心\nimport React, { useContext } from 'react';\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Modal, ConfigProvider } from 'antd';\n// 辅助库\nimport { str2Locale } from '../locales.react';\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 自定义上下文\nimport PropsContext from '../../contexts/PropsContext';\n\n/**\n * 对话框组件AntdModal\n */\nconst AntdModal = ({\n    id,\n    children,\n    className,\n    key,\n    style,\n    styles,\n    classNames,\n    locale = 'zh-cn',\n    setProps,\n    title,\n    loadingTitle,\n    visible = false,\n    renderFooter = false,\n    okButtonProps,\n    cancelButtonProps,\n    okText,\n    loadingOkText,\n    cancelText,\n    width = 520,\n    centered = false,\n    keyboard = true,\n    closable = true,\n    mask = true,\n    maskClosable = true,\n    okClickClose = true,\n    preventClose = false,\n    zIndex = 1000,\n    okCounts = 0,\n    cancelCounts = 0,\n    closeCounts = 0,\n    confirmLoading = false,\n    confirmAutoSpin = false,\n    transitionType = 'zoom',\n    forceRender = false,\n    destroyOnClose = true,\n    loading = false,\n    ...others\n}) => {\n    const context = useContext(PropsContext);\n    locale = (context && context.locale) || locale;\n\n    // 监听确认按钮点击事件\n    const listenOk = () => {\n        if (okClickClose) {\n            setProps({ visible: false, okCounts: okCounts + 1 });\n        } else if (confirmAutoSpin) {\n            setProps({ okCounts: okCounts + 1, confirmLoading: true });\n        } else {\n            setProps({ okCounts: okCounts + 1 });\n        }\n    };\n\n    // 监听取消按钮点击事件\n    const listenCancel = () => {\n        // 是否阻止默认的各类关闭触发行为生效\n        if (preventClose) {\n            setProps({ cancelCounts: cancelCounts + 1 });\n        } else {\n            setProps({ visible: false, cancelCounts: cancelCounts + 1 });\n        }\n    };\n\n    const listenClose = () => {\n        setProps({ closeCounts: closeCounts + 1 });\n    };\n\n    const effectiveTitle =\n        loading && loadingTitle !== undefined ? loadingTitle : title;\n\n    return (\n        <ConfigProvider locale={str2Locale.get(locale)}>\n            <Modal\n                // 提取具有data-*或aria-*通配格式的属性\n                {...pickBy(\n                    (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                    others\n                )}\n                id={id}\n                className={\n                    isString(className)\n                        ? className\n                        : className\n                          ? useCss(className)\n                          : undefined\n                }\n                style={style}\n                styles={styles}\n                classNames={classNames}\n                key={key}\n                title={effectiveTitle}\n                open={visible}\n                okText={confirmLoading ? loadingOkText || okText : okText}\n                cancelText={cancelText}\n                okButtonProps={okButtonProps}\n                cancelButtonProps={cancelButtonProps}\n                transitionName={\n                    transitionType === 'none' ? '' : `ant-${transitionType}`\n                }\n                width={width}\n                centered={centered}\n                keyboard={keyboard}\n                closable={closable}\n                mask={mask}\n                maskClosable={maskClosable}\n                zIndex={zIndex}\n                onOk={listenOk}\n                onCancel={listenCancel}\n                afterClose={listenClose}\n                footer={renderFooter ? undefined : null}\n                confirmLoading={confirmLoading}\n                forceRender={forceRender}\n                destroyOnHidden={destroyOnClose}\n                loading={loading}\n                data-dash-is-loading={useLoading()}\n            >\n                {children}\n            </Modal>\n        </ConfigProvider>\n    );\n};\n\nAntdModal.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，内嵌元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 细分控制子元素css样式\n     */\n    styles: PropTypes.exact({\n        /**\n         * 遮罩层元素css样式\n         */\n        mask: PropTypes.object,\n        /**\n         * 容器元素css样式\n         */\n        content: PropTypes.object,\n        /**\n         * 包裹层元素css样式\n         */\n        wrapper: PropTypes.object,\n        /**\n         * 头部元素css样式\n         */\n        header: PropTypes.object,\n        /**\n         * 内容元素css样式\n         */\n        body: PropTypes.object,\n        /**\n         * 底部元素css样式\n         */\n        footer: PropTypes.object,\n    }),\n\n    /**\n     * 细分控制子元素css类名\n     */\n    classNames: PropTypes.exact({\n        /**\n         * 遮罩层元素css类名\n         */\n        mask: PropTypes.string,\n        /**\n         * 容器元素css类名\n         */\n        content: PropTypes.string,\n        /**\n         * 包裹层元素css类名\n         */\n        wrapper: PropTypes.string,\n        /**\n         * 头部元素css类名\n         */\n        header: PropTypes.string,\n        /**\n         * 内容元素css类名\n         */\n        body: PropTypes.string,\n        /**\n         * 底部元素css类名\n         */\n        footer: PropTypes.string,\n    }),\n\n    /**\n     * 组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n     * 默认值：`'zh-cn'`\n     */\n    locale: PropTypes.oneOf(['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']),\n\n    /**\n     * 监听或设置对话框是否可见\n     * 默认值：`false`\n     */\n    visible: PropTypes.bool,\n\n    /**\n     * 组件型，标题内容\n     */\n    title: PropTypes.node,\n\n    /**\n     * 组件型，loading状态下的标题内容\n     */\n    loadingTitle: PropTypes.node,\n\n    /**\n     * 是否渲染底部操作按钮\n     * 默认值：`false`\n     */\n    renderFooter: PropTypes.bool,\n\n    /**\n     * 组件型，确认按钮内容\n     */\n    okText: PropTypes.node,\n\n    /**\n     * 配置确认按钮相关参数\n     */\n    okButtonProps: PropTypes.exact({\n        /**\n         * 按钮尺寸规格，可选项有`'small'`、`'middle'`、`'large'`\n         * 默认值：`'middle'`\n         */\n        size: PropTypes.oneOf(['small', 'middle', 'large']),\n\n        /**\n         * 按钮类型，可选项有`'default'`、`'primary'`、`'ghost'`、`'dashed'`、`'link'`、`'text'`\n         * 默认值：`'default'`\n         */\n        type: PropTypes.oneOf([\n            'primary',\n            'ghost',\n            'dashed',\n            'link',\n            'text',\n            'default',\n        ]),\n\n        /**\n         * 按钮是否呈现危险样式\n         * 默认值：`false`\n         */\n        danger: PropTypes.bool,\n\n        /**\n         * 按钮是否呈现禁用状态\n         * 默认值：`false`\n         */\n        disabled: PropTypes.bool,\n\n        /**\n         * 按钮形状，可选项有`'default'`、`'circle'`、`'round'`\n         * 默认值：`'default'`\n         */\n        shape: PropTypes.oneOf(['circle', 'round']),\n\n        /**\n         * 按钮css样式\n         */\n        style: PropTypes.object,\n\n        /**\n         * 按钮css类名\n         */\n        className: PropTypes.string,\n    }),\n\n    /**\n     * 组件型，取消按钮内容\n     */\n    cancelText: PropTypes.node,\n\n    /**\n     * 配置取消按钮相关参数\n     */\n    cancelButtonProps: PropTypes.exact({\n        /**\n         * 按钮尺寸规格，可选项有`'small'`、`'middle'`、`'large'`\n         * 默认值：`'middle'`\n         */\n        size: PropTypes.oneOf(['small', 'middle', 'large']),\n\n        /**\n         * 按钮类型，可选项有`'default'`、`'primary'`、`'ghost'`、`'dashed'`、`'link'`、`'text'`\n         * 默认值：`'default'`\n         */\n        type: PropTypes.oneOf([\n            'primary',\n            'ghost',\n            'dashed',\n            'link',\n            'text',\n            'default',\n        ]),\n\n        /**\n         * 按钮是否呈现危险样式\n         * 默认值：`false`\n         */\n        danger: PropTypes.bool,\n\n        /**\n         * 按钮是否呈现禁用状态\n         * 默认值：`false`\n         */\n        disabled: PropTypes.bool,\n\n        /**\n         * 按钮形状，可选项有`'default'`、`'circle'`、`'round'`\n         * 默认值：`'default'`\n         */\n        shape: PropTypes.oneOf(['circle', 'round']),\n\n        /**\n         * 按钮css样式\n         */\n        style: PropTypes.object,\n\n        /**\n         * 按钮css类名\n         */\n        className: PropTypes.string,\n    }),\n\n    /**\n     * 对话框像素宽度\n     * 默认值：`520`\n     */\n    width: PropTypes.oneOfType([\n        PropTypes.number,\n        PropTypes.string,\n        // 响应式\n        PropTypes.shape({\n            /**\n             * 对应页面宽度<576px的响应式断点\n             */\n            xs: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n            /**\n             * 对应页面宽度≥576px的响应式断点\n             */\n            sm: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n            /**\n             * 对应页面宽度≥768px的响应式断点\n             */\n            md: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n            /**\n             * 对应页面宽度≥992px的响应式断点\n             */\n            lg: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n            /**\n             * 对应页面宽度≥1200px的响应式断点\n             */\n            xl: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n            /**\n             * 对应页面宽度≥1600px的响应式断点\n             */\n            xxl: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n        }),\n    ]),\n\n    /**\n     * 是否垂直居中显示对话框\n     * 默认值：`false`\n     */\n    centered: PropTypes.bool,\n\n    /**\n     * 是否支持键盘esc关闭对话框\n     * 默认值：`true`\n     */\n    keyboard: PropTypes.bool,\n\n    /**\n     * 是否显示右上角的关闭按钮\n     * 默认值：`true`\n     */\n    closable: PropTypes.bool,\n\n    /**\n     * 是否显示背景遮罩\n     * 默认值：`true`\n     */\n    mask: PropTypes.bool,\n\n    /**\n     * 是否允许点击遮罩层关闭对话框\n     * 默认值：`true`\n     */\n    maskClosable: PropTypes.bool,\n\n    /**\n     * 是否点击确认按钮触发对话框关闭\n     * 默认值：`true`\n     */\n    okClickClose: PropTypes.bool,\n\n    /**\n     * 是否阻止通过点击关闭图标、点击遮罩层区域、点击取消、按下ESC等方式自动触发的对话框关闭行为\n     * 默认值：`false`\n     */\n    preventClose: PropTypes.bool,\n\n    /**\n     * 模态框z-index\n     * 默认值：`1000`\n     */\n    zIndex: PropTypes.number,\n\n    /**\n     * 监听确认按钮累计点击次数\n     * 默认值：`0`\n     */\n    okCounts: PropTypes.number,\n\n    /**\n     * 监听取消按钮累计点击次数\n     * 默认值：`0`\n     */\n    cancelCounts: PropTypes.number,\n\n    /**\n     * 监听关闭按钮累计点击次数\n     * 默认值：`0`\n     */\n    closeCounts: PropTypes.number,\n\n    /**\n     * 是否在每次确认按钮点击之后，自动更新`confirmLoading=true`\n     * 默认值：`false`\n     */\n    confirmAutoSpin: PropTypes.bool,\n\n    /**\n     * 组件型，`confirmLoading=true`时，确认按钮的内容\n     */\n    loadingOkText: PropTypes.node,\n\n    /**\n     * 底部确认按钮是否处于加载中状态\n     * 默认值：`false`\n     */\n    confirmLoading: PropTypes.bool,\n\n    /**\n     * 模态框显隐动画类型，可选项有`'none'`、`'fade'`、`'zoom'`、`'zoom-big'`、`'zoom-big-fast'`、`'slide-up'`、`'slide-down'`、`'slide-left'`、`'slide-right'`、`'move-up'`、`'move-down'`、`'move-left'`、`'move-right'`\n     * 默认值：`'zoom'`\n     */\n    transitionType: PropTypes.oneOf([\n        'none',\n        'fade',\n        'zoom',\n        'zoom-big',\n        'zoom-big-fast',\n        'slide-up',\n        'slide-down',\n        'slide-left',\n        'slide-right',\n        'move-up',\n        'move-down',\n        'move-left',\n        'move-right',\n    ]),\n\n    /**\n     * 是否在初始化模态框未显示时，强制渲染模态框内部元素\n     * 默认值：`false`\n     */\n    forceRender: PropTypes.bool,\n\n    /**\n     * 是否在模态框关闭后自动销毁内部元素\n     * 默认值：`true`\n     */\n    destroyOnClose: PropTypes.bool,\n\n    /**\n     * 是否整体渲染为加载中状态\n     * 默认值：`false`\n     */\n    loading: PropTypes.bool,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdModal;\n"
  },
  {
    "path": "src/lib/components/feedback/AntdNotification.react.js",
    "content": "// react核心\nimport React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\n// antd核心\nimport { notification, Button } from 'antd';\n// 辅助库\nimport { isString, omit } from 'lodash';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n\n/**\n * 通知提醒框组件AntdNotification\n */\nconst AntdNotification = ({\n    className,\n    style,\n    message,\n    description,\n    type = 'default',\n    placement = 'topRight',\n    top = 24,\n    bottom = 24,\n    duration = 4.5,\n    showProgress = false,\n    pauseOnHover = true,\n    closable = true,\n    closeButton,\n    stack = false,\n    setProps,\n}) => {\n    const config = {\n        className: isString(className)\n            ? className\n            : className\n              ? useCss(className)\n              : undefined,\n        style: style,\n        message: message,\n        description: description,\n        placement: placement,\n        top: top,\n        bottom: bottom,\n        duration: duration,\n        showProgress: showProgress,\n        pauseOnHover: pauseOnHover,\n        closeIcon: closable ? undefined : (\n            <span style={{ visibility: 'hidden' }} />\n        ),\n        btn: closeButton ? (\n            <Button\n                type=\"primary\"\n                size=\"small\"\n                onClick={() => api.destroy()}\n                {...omit(closeButton, ['content'])}\n            >\n                {closeButton.content}\n            </Button>\n        ) : undefined,\n        stack: stack,\n    };\n\n    const [notificationApi, contextHolder] =\n        notification.useNotification(config);\n\n    useEffect(() => {\n        if (type === 'default') {\n            notificationApi.open(config);\n        } else if (type === 'success') {\n            notificationApi.success(config);\n        } else if (type === 'error') {\n            notificationApi.error(config);\n        } else if (type === 'info') {\n            notificationApi.info(config);\n        } else if (type === 'warning') {\n            notificationApi.warning(config);\n        }\n    });\n\n    return <>{contextHolder}</>;\n};\n\nAntdNotification.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 通知提醒主要信息\n     */\n    message: PropTypes.node,\n\n    /**\n     * 通知提醒描述信息\n     */\n    description: PropTypes.node,\n\n    /**\n     * 通知提醒类型，可选项有`'default'`、`'success'`、`'error'`、`'info'`、`'warning'`\n     * 默认值：`'default'`\n     */\n    type: PropTypes.oneOf(['default', 'success', 'error', 'info', 'warning']),\n\n    /**\n     * 通知提醒框在屏幕中的弹出位置，可选项有`'top'`、`'bottom'`、`'topLeft'`、`'topRight'`、`'bottomLeft'`、`'bottomRight'`\n     * 默认值：`'topRight'`\n     */\n    placement: PropTypes.oneOf([\n        'top',\n        'bottom',\n        'topLeft',\n        'topRight',\n        'bottomLeft',\n        'bottomRight',\n    ]),\n\n    /**\n     * 当通知从顶部弹出时，设置距离顶部的像素距离\n     * 默认值：`24`\n     */\n    top: PropTypes.number,\n\n    /**\n     * 当通知从底部弹出时，设置距离底部的像素距离\n     * 默认值：`24`\n     */\n    bottom: PropTypes.number,\n\n    /**\n     * 通知从显示到自动消失的时长，单位：秒，当传入`None`时会一直显示\n     * 默认值：`4.5`\n     */\n    duration: PropTypes.number,\n\n    /**\n     * 是否显示自动关闭进度条\n     * 默认值：`false`\n     */\n    showProgress: PropTypes.bool,\n\n    /**\n     * `showProgress=True`时，是否在鼠标移入时暂停进度条倒计时\n     * 默认值：`true`\n     */\n    pauseOnHover: PropTypes.bool,\n\n    /**\n     * 是否显示关闭按钮\n     * 默认值：`true`\n     */\n    closable: PropTypes.bool,\n\n    /**\n     * 配置右下方关闭按钮相关参数，默认不显示关闭按钮\n     */\n    closeButton: PropTypes.exact({\n        /**\n         * 按钮内容\n         */\n        content: PropTypes.string,\n        /**\n         * 按钮css样式\n         */\n        style: PropTypes.object,\n        /**\n         * 按钮css类名\n         */\n        className: PropTypes.string,\n        /**\n         * 按钮类型，可选项有`'default'`、`'primary'`、`'ghost'`、`'dashed'`、`'link'`、`'text'`\n         * 默认值：`'default'`\n         */\n        type: PropTypes.oneOf([\n            'default',\n            'primary',\n            'ghost',\n            'dashed',\n            'link',\n            'text',\n        ]),\n        /**\n         * 按钮是否呈现危险状态\n         * 默认值：`false`\n         */\n        danger: PropTypes.bool,\n    }),\n\n    /**\n     * 是否开启多通知自动折叠堆叠功能\n     * 默认值：`false`\n     */\n    stack: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.exact({\n            threshold: PropTypes.number,\n        }),\n    ]),\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdNotification;\n"
  },
  {
    "path": "src/lib/components/feedback/AntdPopconfirm.react.js",
    "content": "// react核心\nimport React, { useContext, useMemo } from 'react';\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Popconfirm, ConfigProvider } from 'antd';\n// 辅助库\nimport { str2Locale } from '../locales.react';\nimport { parseChildrenToArray, useLoading } from '../utils';\nimport { isString, isUndefined } from 'lodash';\nimport { pickBy } from 'ramda';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 自定义上下文\nimport PropsContext from '../../contexts/PropsContext';\n\n/**\n * 气泡确认框组件AntdPopconfirm\n */\nconst AntdPopconfirm = ({\n    id,\n    children,\n    className,\n    style,\n    styles,\n    classNames,\n    key,\n    locale = 'zh-cn',\n    icon,\n    title,\n    description,\n    disabled = false,\n    placement = 'top',\n    mouseEnterDelay = 0.1,\n    mouseLeaveDelay = 0.1,\n    okText,\n    okButtonProps,\n    cancelText,\n    cancelButtonProps,\n    showCancel = true,\n    confirmCounts = 0,\n    cancelCounts = 0,\n    trigger = 'click',\n    zIndex,\n    arrow = 'show',\n    fresh = false,\n    open = false,\n    permanent = false,\n    popupContainer = 'body',\n    setProps,\n    ...others\n}) => {\n    const arrowPoint = useMemo(() => {\n        if (arrow === 'hide') {\n            return false;\n        }\n        if (arrow === 'show') {\n            return true;\n        }\n        return {\n            pointAtCenter: true,\n        };\n    }, [arrow]);\n\n    const context = useContext(PropsContext);\n    locale = (context && context.locale) || locale;\n\n    children = parseChildrenToArray(children);\n\n    // 监听确认按钮点击事件\n    const listenConfirm = () => {\n        setProps({ confirmCounts: confirmCounts + 1 });\n    };\n\n    // 监听取消按钮点击事件\n    const listenCancel = () => {\n        setProps({ cancelCounts: cancelCounts + 1 });\n    };\n\n    return (\n        <ConfigProvider locale={str2Locale.get(locale)}>\n            <Popconfirm\n                // 提取具有data-*或aria-*通配格式的属性\n                {...pickBy(\n                    (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                    others\n                )}\n                id={id}\n                className={\n                    isString(className)\n                        ? className\n                        : className\n                          ? useCss(className)\n                          : undefined\n                }\n                style={style}\n                styles={styles}\n                classNames={classNames}\n                key={key}\n                icon={icon}\n                title={title}\n                description={description}\n                disabled={\n                    context && !isUndefined(context.componentDisabled)\n                        ? context.componentDisabled\n                        : disabled\n                }\n                placement={placement}\n                mouseEnterDelay={mouseEnterDelay}\n                mouseLeaveDelay={mouseLeaveDelay}\n                trigger={trigger}\n                okText={okText}\n                okButtonProps={okButtonProps}\n                cancelText={cancelText}\n                cancelButtonProps={cancelButtonProps}\n                zIndex={zIndex}\n                arrow={arrowPoint}\n                fresh={fresh}\n                open={open}\n                showCancel={showCancel}\n                onOpenChange={\n                    permanent ? undefined : (e) => setProps({ open: e })\n                }\n                getPopupContainer={\n                    popupContainer === 'parent'\n                        ? (triggerNode) => triggerNode.parentNode\n                        : undefined\n                }\n                onCancel={listenCancel}\n                onConfirm={listenConfirm}\n                data-dash-is-loading={useLoading()}\n            >\n                {children}\n            </Popconfirm>\n        </ConfigProvider>\n    );\n};\n\nAntdPopconfirm.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，气泡确认框挂载元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 细分控制子元素css样式\n     */\n    styles: PropTypes.exact({\n        /**\n         * 根元素（包含箭头、内容元素）css样式\n         */\n        root: PropTypes.object,\n        /**\n         * 内容元素css样式\n         */\n        body: PropTypes.object,\n    }),\n\n    /**\n     * 细分控制子元素css类名\n     */\n    classNames: PropTypes.exact({\n        /**\n         * 根元素（包含箭头、内容元素）css类名\n         */\n        root: PropTypes.string,\n        /**\n         * 内容元素css类名\n         */\n        body: PropTypes.string,\n    }),\n\n    /**\n     * 组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n     * 默认值：`'zh-cn'`\n     */\n    locale: PropTypes.oneOf(['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']),\n\n    /**\n     * 组件型，提示图标\n     */\n    icon: PropTypes.node,\n\n    /**\n     * 组件型，标题内容\n     */\n    title: PropTypes.node,\n\n    /**\n     * 组件型，描述内容\n     */\n    description: PropTypes.node,\n\n    /**\n     * 是否禁用当前组件\n     * 默认值：`false`\n     */\n    disabled: PropTypes.bool,\n\n    /**\n     * 气泡确认框弹出位置，可选项有`'top'`、`'left'`、`'right'`、`'bottom'`、`'topLeft'`、`'topRight'`、`'bottomLeft'`、`'bottomRight'`、`'leftTop'`、`'leftBottom'`、`'rightTop'`、`'rightBottom'`\n     * 默认值：`'top'`\n     */\n    placement: PropTypes.oneOf([\n        'top',\n        'left',\n        'right',\n        'bottom',\n        'topLeft',\n        'topRight',\n        'bottomLeft',\n        'bottomRight',\n        'leftTop',\n        'leftBottom',\n        'rightTop',\n        'rightBottom',\n    ]),\n\n    /**\n     * 从鼠标移入挂载元素，到气泡确认框显示的延时，单位：秒\n     * 默认值：`0.1`\n     */\n    mouseEnterDelay: PropTypes.number,\n\n    /**\n     * 从鼠标移出挂载元素，到气泡确认框消失的延时，单位：秒\n     * 默认值：`0.1`\n     */\n    mouseLeaveDelay: PropTypes.number,\n\n    /**\n     * 组件型，确认按钮内容\n     */\n    okText: PropTypes.node,\n\n    /**\n     * 配置确认按钮相关参数\n     */\n    okButtonProps: PropTypes.exact({\n        /**\n         * 按钮尺寸规格，可选项有`'small'`、`'middle'`、`'large'`\n         * 默认值：`'middle'`\n         */\n        size: PropTypes.oneOf(['small', 'middle', 'large']),\n\n        /**\n         * 按钮类型，可选项有`'default'`、`'primary'`、`'ghost'`、`'dashed'`、`'link'`、`'text'`\n         * 默认值：`'default'`\n         */\n        type: PropTypes.oneOf([\n            'primary',\n            'ghost',\n            'dashed',\n            'link',\n            'text',\n            'default',\n        ]),\n\n        /**\n         * 按钮是否呈现危险样式\n         * 默认值：`false`\n         */\n        danger: PropTypes.bool,\n\n        /**\n         * 按钮是否呈现禁用状态\n         * 默认值：`false`\n         */\n        disabled: PropTypes.bool,\n\n        /**\n         * 按钮形状，可选项有`'default'`、`'circle'`、`'round'`\n         * 默认值：`'default'`\n         */\n        shape: PropTypes.oneOf(['circle', 'round']),\n\n        /**\n         * 按钮css样式\n         */\n        style: PropTypes.object,\n\n        /**\n         * 按钮css类名\n         */\n        className: PropTypes.string,\n    }),\n\n    /**\n     * 组件型，取消按钮内容\n     */\n    cancelText: PropTypes.node,\n\n    /**\n     * 配置取消按钮相关参数\n     */\n    cancelButtonProps: PropTypes.exact({\n        /**\n         * 按钮尺寸规格，可选项有`'small'`、`'middle'`、`'large'`\n         * 默认值：`'middle'`\n         */\n        size: PropTypes.oneOf(['small', 'middle', 'large']),\n\n        /**\n         * 按钮类型，可选项有`'default'`、`'primary'`、`'ghost'`、`'dashed'`、`'link'`、`'text'`\n         * 默认值：`'default'`\n         */\n        type: PropTypes.oneOf([\n            'primary',\n            'ghost',\n            'dashed',\n            'link',\n            'text',\n            'default',\n        ]),\n\n        /**\n         * 按钮是否呈现危险样式\n         * 默认值：`false`\n         */\n        danger: PropTypes.bool,\n\n        /**\n         * 按钮是否呈现禁用状态\n         * 默认值：`false`\n         */\n        disabled: PropTypes.bool,\n\n        /**\n         * 按钮形状，可选项有`'default'`、`'circle'`、`'round'`\n         * 默认值：`'default'`\n         */\n        shape: PropTypes.oneOf(['circle', 'round']),\n\n        /**\n         * 按钮css样式\n         */\n        style: PropTypes.object,\n\n        /**\n         * 按钮css类名\n         */\n        className: PropTypes.string,\n    }),\n\n    /**\n     * 是否显示取消按钮\n     * 默认值：`true`\n     */\n    showCancel: PropTypes.bool,\n\n    /**\n     * 监听确认按钮累计点击次数\n     * 默认值：`0`\n     */\n    confirmCounts: PropTypes.number,\n\n    /**\n     * 监听取消按钮累计点击次数\n     * 默认值：`0`\n     */\n    cancelCounts: PropTypes.number,\n\n    /**\n     * 气泡确认框触发行为，可选项有`'hover'`、`'focus'`、`'click'`，可多选组合\n     * 默认值：`'click'`\n     */\n    trigger: PropTypes.oneOfType([\n        PropTypes.oneOf(['hover', 'focus', 'click']),\n        PropTypes.arrayOf(PropTypes.oneOf(['hover', 'focus', 'click'])),\n    ]),\n\n    /**\n     * 气泡确认框z-index\n     */\n    zIndex: PropTypes.number,\n\n    /**\n     * 指示箭头显示形式，可选项有`'show'`、`'hide'`、`'center'`\n     * 默认值：`'show'`\n     */\n    arrow: PropTypes.oneOf(['show', 'hide', 'center']),\n\n    /**\n     * 是否保持内容更新\n     * 默认值：`false`\n     */\n    fresh: PropTypes.bool,\n\n    /**\n     * 监听或设置气泡确认框的显示状态\n     * 默认值：`false`\n     */\n    open: PropTypes.bool,\n\n    /**\n     * 是否保持气泡确认框显示/隐藏\n     * 默认值：`false`\n     */\n    permanent: PropTypes.bool,\n\n    /**\n     * 悬浮层渲染挂载父节点策略，可选项有`'parent'`、`'body'`\n     * 默认值：`'body'`\n     */\n    popupContainer: PropTypes.oneOf(['parent', 'body']),\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    loading_state: PropTypes.shape({\n        /**\n         * Determines if the component is loading or not\n         */\n        is_loading: PropTypes.bool,\n        /**\n         * Holds which property is loading\n         */\n        prop_name: PropTypes.string,\n        /**\n         * Holds the name of the component that is loading\n         */\n        component_name: PropTypes.string,\n    }),\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdPopconfirm;\n"
  },
  {
    "path": "src/lib/components/feedback/AntdPopupCard.react.js",
    "content": "// react核心\nimport React, { useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Modal } from 'antd';\nimport {\n    CloseCircleFilled,\n    CloseCircleOutlined,\n    CloseCircleTwoTone,\n} from '@ant-design/icons';\n// 辅助库\nimport Draggable from 'react-draggable';\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { v4 as uuidv4 } from 'uuid';\nimport { useLoading } from '../utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n\n/**\n * 弹出式卡片组件AntdPopupCard\n */\nconst AntdPopupCard = ({\n    id,\n    children,\n    className,\n    key,\n    style,\n    styles,\n    classNames,\n    visible = true,\n    title,\n    width,\n    transitionType = 'fade',\n    forceRender = false,\n    destroyOnClose = true,\n    closable = true,\n    closeIconType = 'default',\n    draggable = false,\n    dragClassName,\n    zIndex = 1000,\n    loading = false,\n    setProps,\n    ...others\n}) => {\n    const [handleId, setHandleId] = useState(uuidv4().replace(/\\d+/g, ''));\n    const [disabled, setDisabled] = useState(false);\n    const [bounds, setBounds] = useState({\n        left: 0,\n        top: 0,\n        bottom: 0,\n        right: 0,\n    });\n    const draggleRef = useRef(null);\n\n    const onStart = (_event, uiData) => {\n        const { clientWidth, clientHeight } = window.document.documentElement;\n        const targetRect = draggleRef.current.getBoundingClientRect();\n\n        if (!targetRect) {\n            return;\n        }\n\n        setBounds({\n            left: -targetRect.left + uiData.x,\n            right: clientWidth - (targetRect.right - uiData.x),\n            top: -targetRect.top + uiData.y,\n            bottom: clientHeight - (targetRect.bottom - uiData.y),\n        });\n    };\n\n    return (\n        <Modal\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            styles={styles}\n            classNames={classNames}\n            key={key}\n            title={\n                <div\n                    id={handleId}\n                    className={\n                        isString(dragClassName)\n                            ? dragClassName\n                            : dragClassName\n                              ? useCss(dragClassName)\n                              : undefined\n                    }\n                    style={{\n                        width: '100%',\n                        ...(dragClassName?.cursor\n                            ? {}\n                            : { cursor: draggable ? 'move' : 'inherit' }),\n                    }}\n                    onMouseOver={() => {\n                        if (disabled) {\n                            setDisabled(false);\n                        }\n                    }}\n                    onMouseOut={() => {\n                        setDisabled(true);\n                    }}\n                >\n                    {title}\n                    {closable ? (\n                        closeIconType === 'outlined' ? (\n                            <CloseCircleOutlined\n                                style={{\n                                    position: 'absolute',\n                                    top: -12,\n                                    right: -12,\n                                    fontSize: 24,\n                                    cursor: 'pointer',\n                                }}\n                                onClick={() => setProps({ visible: false })}\n                            />\n                        ) : closeIconType == 'two-tone' ? (\n                            <CloseCircleTwoTone\n                                style={{\n                                    position: 'absolute',\n                                    top: -12,\n                                    right: -12,\n                                    fontSize: 24,\n                                    cursor: 'pointer',\n                                }}\n                                onClick={() => setProps({ visible: false })}\n                            />\n                        ) : (\n                            <CloseCircleFilled\n                                style={{\n                                    position: 'absolute',\n                                    top: -12,\n                                    right: -12,\n                                    fontSize: 24,\n                                    cursor: 'pointer',\n                                }}\n                                onClick={() => setProps({ visible: false })}\n                            />\n                        )\n                    ) : null}\n                </div>\n            }\n            transitionName={\n                transitionType === 'none' ? '' : `ant-${transitionType}`\n            }\n            forceRender={forceRender}\n            destroyOnClose={destroyOnClose}\n            width={width}\n            open={visible}\n            zIndex={zIndex}\n            mask={false}\n            maskClosable={false}\n            closable={false}\n            footer={false}\n            wrapClassName={'ant-modal-wrap-overwrite'}\n            modalRender={\n                draggable\n                    ? (modal) => (\n                          <Draggable\n                              disabled={disabled}\n                              bounds={bounds}\n                              handle={'#' + handleId}\n                              onStart={(event, uiData) =>\n                                  onStart(event, uiData)\n                              }\n                          >\n                              <div ref={draggleRef}>{modal}</div>\n                          </Draggable>\n                      )\n                    : undefined\n            }\n            loading={loading}\n            data-dash-is-loading={useLoading()}\n        >\n            {children}\n        </Modal>\n    );\n};\n\nAntdPopupCard.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，内嵌元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 细分控制子元素css样式\n     */\n    styles: PropTypes.exact({\n        /**\n         * 遮罩层元素css样式\n         */\n        mask: PropTypes.object,\n        /**\n         * 容器元素css样式\n         */\n        content: PropTypes.object,\n        /**\n         * 包裹层元素css样式\n         */\n        wrapper: PropTypes.object,\n        /**\n         * 头部元素css样式\n         */\n        header: PropTypes.object,\n        /**\n         * 内容元素css样式\n         */\n        body: PropTypes.object,\n        /**\n         * 底部元素css样式\n         */\n        footer: PropTypes.object,\n    }),\n\n    /**\n     * 细分控制子元素css类名\n     */\n    classNames: PropTypes.exact({\n        /**\n         * 遮罩层元素css类名\n         */\n        mask: PropTypes.string,\n        /**\n         * 容器元素css类名\n         */\n        content: PropTypes.string,\n        /**\n         * 包裹层元素css类名\n         */\n        wrapper: PropTypes.string,\n        /**\n         * 头部元素css类名\n         */\n        header: PropTypes.string,\n        /**\n         * 内容元素css类名\n         */\n        body: PropTypes.string,\n        /**\n         * 底部元素css类名\n         */\n        footer: PropTypes.string,\n    }),\n\n    /**\n     * 组件型，标题内容\n     */\n    title: PropTypes.node,\n\n    /**\n     * 设置或监听当前弹出式卡片是否显示\n     * 默认值：`true`\n     */\n    visible: PropTypes.bool,\n\n    /**\n     * 弹出式卡片像素宽度\n     */\n    width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n    /**\n     * 卡片显隐动画类型，可选项有`'none'`、`'fade'`、`'zoom'`、`'zoom-big'`、`'zoom-big-fast'`、`'slide-up'`、`'slide-down'`、`'slide-left'`、`'slide-right'`、`'move-up'`、`'move-down'`、`'move-left'`、`'move-right'`\n     * 默认值：`'zoom'`\n     */\n    transitionType: PropTypes.oneOf([\n        'none',\n        'fade',\n        'zoom',\n        'zoom-big',\n        'zoom-big-fast',\n        'slide-up',\n        'slide-down',\n        'slide-left',\n        'slide-right',\n        'move-up',\n        'move-down',\n        'move-left',\n        'move-right',\n    ]),\n\n    /**\n     * 是否在初始化卡片未显示时，强制渲染卡片内部元素\n     * 默认值：`false`\n     */\n    forceRender: PropTypes.bool,\n\n    /**\n     * 是否在卡片关闭后自动销毁内部元素\n     * 默认值：`true`\n     */\n    destroyOnClose: PropTypes.bool,\n\n    /**\n     * 是否显示右上角的关闭按钮\n     * 默认值：`true`\n     */\n    closable: PropTypes.bool,\n\n    /**\n     * 关闭按钮类型，可选项有`'default'`、`'outlined'`、`'two-tone'`\n     * 默认值：`'default'`\n     */\n    closeIconType: PropTypes.oneOf(['default', 'outlined', 'two-tone']),\n\n    /**\n     * 是否可拖拽\n     * 默认值：`false`\n     */\n    draggable: PropTypes.bool,\n\n    /**\n     * 顶部可拖拽区域css类名\n     */\n    dragClassName: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 弹出式卡片z-index\n     * 默认值：`1000`\n     */\n    zIndex: PropTypes.number,\n\n    /**\n     * 是否整体渲染为加载中状态\n     * 默认值：`false`\n     */\n    loading: PropTypes.bool,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdPopupCard;\n"
  },
  {
    "path": "src/lib/components/feedback/AntdProgress.react.js",
    "content": "// react核心\nimport React from 'react';\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Progress } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n\n/**\n * 进度条组件AntdProgress\n */\nconst AntdProgress = ({\n    id,\n    className,\n    style,\n    key,\n    type = 'line',\n    size = 'default',\n    percent = 0,\n    success,\n    format,\n    status,\n    showInfo = true,\n    percentPosition,\n    strokeColor,\n    strokeLinecap,\n    strokeWidth,\n    trailColor,\n    gapDegree,\n    gapPosition = 'bottom',\n    steps,\n    setProps,\n    ...others\n}) => {\n    return (\n        <Progress\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            type={type}\n            size={size}\n            percent={percent}\n            success={success}\n            format={\n                format\n                    ? (p) =>\n                          format && format.content\n                              ? format.content\n                              : (format && format.prefix ? format.prefix : '') +\n                                `${p}` +\n                                (format && format.suffix ? format.suffix : '%')\n                    : undefined\n            }\n            status={status}\n            showInfo={showInfo}\n            percentPosition={percentPosition}\n            strokeColor={\n                strokeColor\n                    ? strokeColor.from && strokeColor.to\n                        ? {\n                              '0%': strokeColor.from,\n                              '100%': strokeColor.to,\n                          }\n                        : strokeColor\n                    : undefined\n            }\n            strokeLinecap={strokeLinecap}\n            strokeWidth={strokeWidth}\n            trailColor={trailColor}\n            gapDegree={gapDegree}\n            gapPosition={gapPosition}\n            steps={steps}\n            data-dash-is-loading={useLoading()}\n        ></Progress>\n    );\n};\n\nAntdProgress.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 进度条类型，可选项有`'line'`、`'circle'`、`'dashboard'`\n     * 默认值：`'line'`\n     */\n    type: PropTypes.oneOf(['line', 'circle', 'dashboard']),\n\n    /**\n     * 进度条尺寸规格，可选项有`'small'`、`'default'`、`'large'`，传入数值型表示像素尺寸，传入字典型可分别控制宽度和高度\n     * 默认值：`'default'`\n     */\n    size: PropTypes.oneOfType([\n        PropTypes.number,\n        PropTypes.arrayOf(\n            PropTypes.oneOfType([PropTypes.number, PropTypes.string])\n        ),\n        PropTypes.oneOf(['small', 'default']),\n        PropTypes.shape({\n            /**\n             * 像素宽度\n             */\n            width: PropTypes.number,\n            /**\n             * 像素高度\n             */\n            height: PropTypes.number,\n        }),\n    ]),\n\n    /**\n     * 进度条进度，取值应在`0`到`100`之间，当`100`时默认会渲染为完成状态\n     * 默认值：`0`\n     */\n    percent: PropTypes.number,\n\n    /**\n     * 配置进度条完成状态相关参数\n     */\n    success: PropTypes.exact({\n        /**\n         * 达到完成状态对应的进度，取值应在`0`到`100`之间\n         * 默认值：`100`\n         */\n        percent: PropTypes.number,\n        /**\n         * 完成状态进度条颜色，支持渐变色\n         */\n        strokeColor: PropTypes.oneOfType([\n            PropTypes.string,\n            PropTypes.exact({\n                /**\n                 * 渐变色开端颜色\n                 */\n                from: PropTypes.string,\n\n                /**\n                 * 渐变色末端颜色\n                 */\n                to: PropTypes.string,\n            }),\n        ]),\n    }),\n\n    /**\n     * 配置进度提示相关参数\n     */\n    format: PropTypes.exact({\n        /**\n         * 进度提示前缀文字\n         * 默认值：`''`\n         */\n        prefix: PropTypes.string,\n        /**\n         * 进度提示后缀文字\n         * 默认值：`'%'`\n         */\n        suffix: PropTypes.string,\n        /**\n         * 组件型，强制设置显示内容\n         */\n        content: PropTypes.node,\n    }),\n\n    /**\n     * 进度条状态，可选项有`'success'`、`'exception'`、`'normal'`、`'active'`，其中`'active'`仅在`type='line'`时生效\n     * 默认值：`'normal'`\n     */\n    status: PropTypes.oneOf(['success', 'exception', 'normal', 'active']),\n\n    /**\n     * 是否显示进度数值或状态图标\n     * 默认值：`true`\n     */\n    showInfo: PropTypes.bool,\n\n    /**\n     * 适用于`'line'`型进度条，配置进度条附带进度数值信息显示位置\n     */\n    percentPosition: PropTypes.shape({\n        /**\n         * 对齐方式，可选项有`'start'`、`'center'`、`'end'`\n         */\n        align: PropTypes.oneOf(['start', 'center', 'end']),\n        /**\n         * 内外位置，可选项有`'inner'`、`'outer'`\n         */\n        type: PropTypes.oneOf(['inner', 'outer']),\n    }),\n\n    /**\n     * 配置进度条颜色，支持渐变色\n     */\n    strokeColor: PropTypes.oneOfType([\n        PropTypes.string,\n        PropTypes.arrayOf(PropTypes.string),\n        PropTypes.exact({\n            /**\n             * 渐变色开端颜色\n             */\n            from: PropTypes.string,\n            /**\n             * 渐变色末端颜色\n             */\n            to: PropTypes.string,\n        }),\n        PropTypes.objectOf(PropTypes.string),\n    ]),\n\n    /**\n     * 进度条线型，可选项有`'round'`、`'butt'`、`'square'`\n     * 默认值：`'round'`\n     */\n    strokeLinecap: PropTypes.oneOf(['round', 'butt', 'square']),\n\n    /**\n     * 进度条线的宽度，单位是进度条画布宽度的百分比\n     */\n    strokeWidth: PropTypes.number,\n\n    /**\n     * 未完成分段部分的颜色，默认无颜色\n     */\n    trailColor: PropTypes.string,\n\n    /**\n     * 进度条缺口角度，取值应在`0`到`295`之间，仅`type='dashboard'`时可用\n     * 默认值：`75`\n     */\n    gapDegree: PropTypes.number,\n\n    /**\n     * 仪表盘缺口方向，可选项有`'top'`、`'bottom'`、`'left'`、`'right'`，仅`type='dashboard'`时可用\n     * 默认值：`'bottom'`\n     */\n    gapPosition: PropTypes.oneOf(['top', 'bottom', 'left', 'right']),\n\n    /**\n     * 配置进度条分段数量，针对`'circle'`、`'dashboard'`型进度条支持传入字典型进行更详细的配置\n     */\n    steps: PropTypes.oneOfType([\n        PropTypes.number,\n        PropTypes.shape({\n            /**\n             * 分段数量\n             */\n            count: PropTypes.number,\n            /**\n             * 分段间隔像素大小\n             */\n            gap: PropTypes.number,\n        }),\n    ]),\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdProgress;\n"
  },
  {
    "path": "src/lib/components/feedback/AntdResult.react.js",
    "content": "// react核心\nimport React from 'react';\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Result } from 'antd';\nimport { LoadingOutlined } from '@ant-design/icons';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n\n/**\n * 结果组件AntdResult\n */\nconst AntdResult = ({\n    id,\n    className,\n    style,\n    key,\n    extra,\n    status = 'info',\n    title,\n    subTitle,\n    icon,\n    setProps,\n    ...others\n}) => {\n    return (\n        <Result\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            icon={\n                icon ||\n                (status === 'loading' ? (\n                    <LoadingOutlined style={{ color: '#1890ff' }} />\n                ) : undefined)\n            }\n            extra={extra}\n            status={status}\n            title={title}\n            subTitle={subTitle}\n            data-dash-is-loading={useLoading()}\n        ></Result>\n    );\n};\n\nAntdResult.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 组件型，操作区域\n     */\n    extra: PropTypes.node,\n\n    /**\n     * 状态，可选项有`'success'`、`'error'`、`'info'`、`'warning'`、`'404'`、`'403'`、`'500'`\n     * 默认值：`'info'`\n     */\n    status: PropTypes.oneOf([\n        'success',\n        'error',\n        'info',\n        'warning',\n        '404',\n        '403',\n        '500',\n        'loading',\n    ]),\n\n    /**\n     * 组件型，标题内容\n     */\n    title: PropTypes.node,\n\n    /**\n     * 组件型，副标题内容\n     */\n    subTitle: PropTypes.node,\n\n    /**\n     * 组件型，图标内容\n     */\n    icon: PropTypes.node,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdResult;\n"
  },
  {
    "path": "src/lib/components/feedback/AntdSpin.react.js",
    "content": "// react核心\nimport React, { useState, useEffect, useRef } from 'react';\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Spin } from 'antd';\n// 辅助库\nimport { isString, isNumber } from 'lodash';\nimport { pickBy, equals } from 'ramda';\nimport { useLoading, loadingSelector } from '../utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n\n/**\n * 加载动画组件AntdSpin\n */\nconst AntdSpin = ({\n    id,\n    className,\n    wrapperClassName,\n    style,\n    key,\n    children,\n    spinning = false,\n    size = 'middle',\n    delay,\n    fullscreen = false,\n    text,\n    listenPropsMode = 'default',\n    excludeProps = [],\n    includeProps = [],\n    debug = false,\n    indicator,\n    manual = false,\n    percent,\n    setProps,\n    ...others\n}) => {\n    const ctx = window.dash_component_api.useDashContext();\n    // 获取内部加载中组件信息\n    const loading_info = ctx.useSelector(\n        loadingSelector(ctx.componentPath),\n        equals\n    );\n\n    useEffect(() => {\n        // 检查数值型percent参数是否取值在合法的0到100之间\n        if (isNumber(percent) && (percent < 0 || percent > 100)) {\n            // 抛出中英文错误提示\n            setProps({\n                _dash_error: new Error(\n                    '数值型percent取值应在0到100之间！\\nThe value of the numerical type \"percent\" should be between 0 and 100!'\n                ),\n            });\n        }\n    }, [percent]);\n\n    const [showSpinning, setShowSpinning] = useState(spinning);\n    const timer = useRef();\n\n    useEffect(() => {\n        // 非手动控制模式下\n        if (!manual && loading_info) {\n            if (timer.current) {\n                clearTimeout(timer.current);\n            }\n            if (loading_info.length > 0 && !showSpinning) {\n                // 当listenPropsMode为'default'时\n                if (listenPropsMode === 'default') {\n                    if (debug) {\n                        loading_info.forEach((item) =>\n                            console.log(item.id + '.' + item.property)\n                        );\n                    }\n                    setShowSpinning(true);\n                } else if (listenPropsMode === 'exclude') {\n                    // 当listenPropsMode为'exclude'模式时\n                    // 当前触发加载状态的组件+属性组合均不在排除列表中时，激活动画\n                    if (\n                        loading_info.every(\n                            (item) =>\n                                excludeProps.indexOf(\n                                    item.id + '.' + item.property\n                                ) === -1\n                        )\n                    ) {\n                        if (debug) {\n                            loading_info.forEach((item) =>\n                                console.log(item.id + '.' + item.property)\n                            );\n                        }\n                        setShowSpinning(true);\n                    }\n                } else if (listenPropsMode === 'include') {\n                    // 当listenPropsMode为'include'模式时\n                    // 当前触发加载状态的组件+属性组合至少有一个在包含列表中时，激活动画\n                    if (\n                        loading_info.some(\n                            (item) =>\n                                includeProps.indexOf(\n                                    item.id + '.' + item.property\n                                ) !== -1\n                        )\n                    ) {\n                        if (debug) {\n                            loading_info.forEach((item) =>\n                                console.log(item.id + '.' + item.property)\n                            );\n                        }\n                        setShowSpinning(true);\n                    }\n                }\n            } else if (loading_info.length === 0 && showSpinning) {\n                timer.current = setTimeout(() => setShowSpinning(false));\n            }\n        }\n    }, [loading_info]);\n\n    // 修复设置全屏后子元素无法渲染的问题\n    if (fullscreen) {\n        return (\n            <>\n                <Spin\n                    // 提取具有data-*或aria-*通配格式的属性\n                    {...pickBy(\n                        (_, k) =>\n                            k.startsWith('data-') || k.startsWith('aria-'),\n                        others\n                    )}\n                    id={id}\n                    className={\n                        isString(className)\n                            ? className\n                            : className\n                              ? useCss(className)\n                              : undefined\n                    }\n                    key={key}\n                    wrapperClassName={\n                        isString(wrapperClassName)\n                            ? wrapperClassName\n                            : wrapperClassName\n                              ? useCss(wrapperClassName)\n                              : undefined\n                    }\n                    style={style}\n                    spinning={manual ? spinning : showSpinning}\n                    size={size}\n                    delay={delay}\n                    fullscreen={fullscreen}\n                    tip={text}\n                    indicator={indicator}\n                    percent={percent}\n                    data-dash-is-loading={useLoading()}\n                />\n                {children}\n            </>\n        );\n    }\n\n    return (\n        <Spin\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            key={key}\n            wrapperClassName={\n                isString(wrapperClassName)\n                    ? wrapperClassName\n                    : wrapperClassName\n                      ? useCss(wrapperClassName)\n                      : undefined\n            }\n            style={style}\n            spinning={manual ? spinning : showSpinning}\n            size={size}\n            delay={delay}\n            fullscreen={fullscreen}\n            tip={text}\n            indicator={indicator}\n            percent={percent}\n            data-dash-is-loading={useLoading()}\n        >\n            {' '}\n            {children}{' '}\n        </Spin>\n    );\n};\n\nAntdSpin.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，内嵌元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 外层容器css类名\n     */\n    wrapperClassName: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 是否处于加载中状态\n     */\n    spinning: PropTypes.bool,\n\n    /**\n     * 默认加载状态图标的尺寸，可选项有`'small'`、`'middle'`、`'large'`\n     * 默认值：`'middle'`\n     */\n    size: PropTypes.oneOf(['small', 'middle', 'large']),\n\n    /**\n     * 加载动画渲染延时，单位：毫秒\n     * 默认值：`0`\n     */\n    delay: PropTypes.number,\n\n    /**\n     * 加载动画提示文字\n     */\n    text: PropTypes.string,\n\n    /**\n     * 是否开启全屏模式\n     * 默认值：`false`\n     */\n    fullscreen: PropTypes.bool,\n\n    /**\n     * 是否开启debug模式，开启后，每次动画加载都会在开发者工具的控制台打印相关`prop`信息\n     * 默认值：`false`\n     */\n    debug: PropTypes.bool,\n\n    /**\n     * 监听模式，可选项有`'default'`、`'exclude'`、`'include'`\n     * 默认值：`'default'`\n     */\n    listenPropsMode: PropTypes.oneOf(['default', 'exclude', 'include']),\n\n    /**\n     * `listenPropsMode='exclude'`时，设置需要排除监听的回调目标列表，格式如`['组件id1.组件属性1', '组件id2.组件属性2', ...]`\n     */\n    excludeProps: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * `listenPropsMode='include'`时，设置需要包含监听的回调目标列表，格式如`['组件id1.组件属性1', '组件id2.组件属性2', ...]`\n     */\n    includeProps: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 组件型，自定义加载状态图标\n     */\n    indicator: PropTypes.node,\n\n    /**\n     * 是否开启手动控制模式，开启后是否处于加载状态将由`spinning`参数控制，与内部元素参与的回调状态无关\n     * 默认值：`false`\n     */\n    manual: PropTypes.bool,\n\n    /**\n     * 控制加载中状态下的环状进度渲染形式，传入0到100之间数值型时表示实际进度，传入`'auto'`时会预估一个永远不会停止的进度\n     */\n    percent: PropTypes.oneOfType([PropTypes.number, PropTypes.oneOf(['auto'])]),\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdSpin;\n"
  },
  {
    "path": "src/lib/components/feedback/skeleton/AntdCustomSkeleton.react.js",
    "content": "// react核心\nimport React, { useState, useEffect, useRef } from 'react';\nimport PropTypes from 'prop-types';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy, equals } from 'ramda';\nimport { useLoading, loadingSelector } from '../../utils';\n// 自定义hooks\nimport useCss from '../../../hooks/useCss';\n\n/**\n * 自定义骨架屏组件AntdCustomSkeleton\n */\nconst AntdCustomSkeleton = ({\n    id,\n    className,\n    style,\n    key,\n    children,\n    skeletonContent,\n    loading = false,\n    delay,\n    listenPropsMode = 'default',\n    excludeProps = [],\n    includeProps = [],\n    debug = false,\n    manual = false,\n    setProps,\n    ...others\n}) => {\n    const ctx = window.dash_component_api.useDashContext();\n    // 获取内部加载中组件信息\n    const loading_info = ctx.useSelector(\n        loadingSelector(ctx.componentPath),\n        equals\n    );\n\n    const [showLoading, setShowLoading] = useState(loading);\n    const timer = useRef();\n    const delayTimer = useRef();\n\n    useEffect(() => {\n        if (!manual && loading_info) {\n            if (timer.current) {\n                clearTimeout(timer.current);\n            }\n            if (delayTimer.current) {\n                clearTimeout(delayTimer.current);\n            }\n            if (loading_info.length > 0 && !showLoading) {\n                // 当listenPropsMode为'default'时\n                if (listenPropsMode === 'default') {\n                    if (debug) {\n                        loading_info.forEach((item) =>\n                            console.log(item.id + '.' + item.property)\n                        );\n                    }\n                    delayTimer.current = setTimeout(\n                        () => setShowLoading(true),\n                        delay\n                    );\n                } else if (listenPropsMode === 'exclude') {\n                    // 当listenPropsMode为'exclude'模式时\n                    // 当前触发加载状态的组件+属性组合均不在排除列表中时，激活动画\n                    if (\n                        loading_info.every(\n                            (item) =>\n                                excludeProps.indexOf(\n                                    item.id + '.' + item.property\n                                ) === -1\n                        )\n                    ) {\n                        if (debug) {\n                            loading_info.forEach((item) =>\n                                console.log(item.id + '.' + item.property)\n                            );\n                        }\n                        delayTimer.current = setTimeout(\n                            () => setShowLoading(true),\n                            delay\n                        );\n                    }\n                } else if (listenPropsMode === 'include') {\n                    // 当listenPropsMode为'include'模式时\n                    // 当前触发加载状态的组件+属性组合至少有一个在包含列表中时，激活动画\n                    if (\n                        loading_info.some(\n                            (item) =>\n                                includeProps.indexOf(\n                                    item.id + '.' + item.property\n                                ) !== -1\n                        )\n                    ) {\n                        if (debug) {\n                            loading_info.forEach((item) =>\n                                console.log(item.id + '.' + item.property)\n                            );\n                        }\n                        delayTimer.current = setTimeout(\n                            () => setShowLoading(true),\n                            delay\n                        );\n                    }\n                }\n            } else if (loading_info.length === 0 && showLoading) {\n                timer.current = setTimeout(() => setShowLoading(false));\n            }\n        }\n    }, [loading_info]);\n\n    return (\n        <div\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            data-dash-is-loading={useLoading()}\n        >\n            {(manual ? loading : showLoading) ? skeletonContent : children}\n        </div>\n    );\n};\n\nAntdCustomSkeleton.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，内嵌元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 组件型，加载状态下显示的内容\n     */\n    skeletonContent: PropTypes.node,\n\n    /**\n     * 是否处于加载中状态\n     */\n    loading: PropTypes.bool,\n\n    /**\n     * 加载动画渲染延时，单位：毫秒\n     * 默认值：`0`\n     */\n    delay: PropTypes.number,\n\n    /**\n     * 是否开启debug模式，开启后，每次动画加载都会在开发者工具的控制台打印相关`prop`信息\n     * 默认值：`false`\n     */\n    debug: PropTypes.bool,\n\n    /**\n     * 监听模式，可选项有`'default'`、`'exclude'`、`'include'`\n     * 默认值：`'default'`\n     */\n    listenPropsMode: PropTypes.oneOf(['default', 'exclude', 'include']),\n\n    /**\n     * `listenPropsMode='exclude'`时，设置需要排除监听的回调目标列表，格式如`['组件id1.组件属性1', '组件id2.组件属性2', ...]`\n     */\n    excludeProps: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * `listenPropsMode='include'`时，设置需要包含监听的回调目标列表，格式如`['组件id1.组件属性1', '组件id2.组件属性2', ...]`\n     */\n    includeProps: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 是否开启手动控制模式，开启后是否处于加载状态将由`loading`参数控制，与内部元素参与的回调状态无关\n     * 默认值：`false`\n     */\n    manual: PropTypes.bool,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdCustomSkeleton;\n"
  },
  {
    "path": "src/lib/components/feedback/skeleton/AntdSkeleton.react.js",
    "content": "// react核心\nimport React, { useState, useEffect, useRef } from 'react';\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Skeleton } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy, equals } from 'ramda';\nimport { useLoading, loadingSelector } from '../../utils';\n// 自定义hooks\nimport useCss from '../../../hooks/useCss';\n\n/**\n * 骨架屏组件AntdSkeleton\n */\nconst AntdSkeleton = ({\n    id,\n    className,\n    style,\n    key,\n    children,\n    loading = false,\n    active = false,\n    delay = 0,\n    avatar = false,\n    paragraph = true,\n    round = false,\n    title = true,\n    listenPropsMode = 'default',\n    excludeProps = [],\n    includeProps = [],\n    debug = false,\n    manual = false,\n    setProps,\n    ...others\n}) => {\n    const ctx = window.dash_component_api.useDashContext();\n    // 获取内部加载中组件信息\n    const loading_info = ctx.useSelector(\n        loadingSelector(ctx.componentPath),\n        equals\n    );\n\n    const [showLoading, setShowLoading] = useState(loading);\n    const timer = useRef();\n    const delayTimer = useRef();\n\n    useEffect(() => {\n        if (!manual && loading_info) {\n            if (timer.current) {\n                clearTimeout(timer.current);\n            }\n            if (delayTimer.current) {\n                clearTimeout(delayTimer.current);\n            }\n            if (loading_info.length > 0 && !showLoading) {\n                // 当listenPropsMode为'default'时\n                if (listenPropsMode === 'default') {\n                    if (debug) {\n                        loading_info.forEach((item) =>\n                            console.log(item.id + '.' + item.property)\n                        );\n                    }\n                    delayTimer.current = setTimeout(\n                        () => setShowLoading(true),\n                        delay\n                    );\n                } else if (listenPropsMode === 'exclude') {\n                    // 当listenPropsMode为'exclude'模式时\n                    // 当前触发加载状态的组件+属性组合均不在排除列表中时，激活动画\n                    if (\n                        loading_info.every(\n                            (item) =>\n                                excludeProps.indexOf(\n                                    item.id + '.' + item.property\n                                ) === -1\n                        )\n                    ) {\n                        if (debug) {\n                            loading_info.forEach((item) =>\n                                console.log(item.id + '.' + item.property)\n                            );\n                        }\n                        delayTimer.current = setTimeout(\n                            () => setShowLoading(true),\n                            delay\n                        );\n                    }\n                } else if (listenPropsMode === 'include') {\n                    // 当listenPropsMode为'include'模式时\n                    // 当前触发加载状态的组件+属性组合至少有一个在包含列表中时，激活动画\n                    if (\n                        loading_info.some(\n                            (item) =>\n                                includeProps.indexOf(\n                                    item.id + '.' + item.property\n                                ) !== -1\n                        )\n                    ) {\n                        if (debug) {\n                            loading_info.forEach((item) =>\n                                console.log(item.id + '.' + item.property)\n                            );\n                        }\n                        delayTimer.current = setTimeout(\n                            () => setShowLoading(true),\n                            delay\n                        );\n                    }\n                }\n            } else if (loading_info.length === 0 && showLoading) {\n                timer.current = setTimeout(() => setShowLoading(false));\n            }\n        }\n    }, [loading_info]);\n\n    return (\n        <Skeleton\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            loading={manual ? loading : showLoading}\n            active={active}\n            avatar={avatar}\n            paragraph={paragraph}\n            round={round}\n            title={title}\n            data-dash-is-loading={useLoading()}\n        >\n            {children}\n        </Skeleton>\n    );\n};\n\nAntdSkeleton.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，内嵌元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 是否处于加载中状态\n     */\n    loading: PropTypes.bool,\n\n    /**\n     * 是否显示动画\n     * 默认值：`false`\n     */\n    active: PropTypes.bool,\n\n    /**\n     * 加载动画渲染延时，单位：毫秒\n     * 默认值：`0`\n     */\n    delay: PropTypes.number,\n\n    /**\n     * 配置头像占位图相关参数，设置为`false`时不显示\n     * 默认值：`true`\n     */\n    avatar: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.exact({\n            /**\n             * 头像占位图是否显示动画\n             * 默认值：`false`\n             */\n            active: PropTypes.bool,\n            /**\n             * 头像占位图形状，可选项有`'circle'`、`'square'`\n             */\n            shape: PropTypes.oneOf(['circle', 'square']),\n            /**\n             * 头像占位图尺寸，传入数值型表示像素尺寸，也可传入预设的尺寸规格，可选项有`'large'`、`'small'`、`'default'`\n             * 默认值：`'default'`\n             */\n            size: PropTypes.oneOfType([\n                PropTypes.number,\n                PropTypes.oneOf(['large', 'small', 'default']),\n            ]),\n        }),\n    ]),\n\n    /**\n     * 配置段落占位图相关参数，设置为`false`时不显示\n     * 默认值：`true`\n     */\n    paragraph: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.exact({\n            /**\n             * 段落占位图行数\n             */\n            rows: PropTypes.number,\n            // 设置段落占位图的宽度（数值像素或字符串css宽度），若为数组时，则一一对应每行宽度，\n            // 反之则是最后一行的宽度\n            /**\n             * 段落占位图宽度，当传入*int*或*string*型时，用于设置段落占位图最后一行的宽度，当传入*list*型时，用于逐行设置宽度\n             */\n            width: PropTypes.oneOfType([\n                PropTypes.number,\n                PropTypes.string,\n                PropTypes.arrayOf(\n                    PropTypes.oneOfType([PropTypes.number, PropTypes.string])\n                ),\n            ]),\n        }),\n    ]),\n\n    /**\n     * 是否显示标题占位图\n     * 默认值：`true`\n     */\n    title: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.exact({\n            /**\n             * 标题占位图宽度\n             */\n            width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n        }),\n    ]),\n\n    /**\n     * 段落、标题占位图是否渲染圆角\n     * 默认值：`false`\n     */\n    round: PropTypes.bool,\n\n    /**\n     * 是否开启debug模式，开启后，每次动画加载都会在开发者工具的控制台打印相关`prop`信息\n     * 默认值：`false`\n     */\n    debug: PropTypes.bool,\n\n    /**\n     * 监听模式，可选项有`'default'`、`'exclude'`、`'include'`\n     * 默认值：`'default'`\n     */\n    listenPropsMode: PropTypes.oneOf(['default', 'exclude', 'include']),\n\n    /**\n     * `listenPropsMode='exclude'`时，设置需要排除监听的回调目标列表，格式如`['组件id1.组件属性1', '组件id2.组件属性2', ...]`\n     */\n    excludeProps: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * `listenPropsMode='include'`时，设置需要包含监听的回调目标列表，格式如`['组件id1.组件属性1', '组件id2.组件属性2', ...]`\n     */\n    includeProps: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 是否开启手动控制模式，开启后是否处于加载状态将由`loading`参数控制，与内部元素参与的回调状态无关\n     * 默认值：`false`\n     */\n    manual: PropTypes.bool,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nAntdSkeleton.dashChildrenUpdate = true;\n\nexport default AntdSkeleton;\n"
  },
  {
    "path": "src/lib/components/feedback/skeleton/AntdSkeletonAvatar.react.js",
    "content": "// react核心\nimport React from 'react';\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Skeleton } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../../utils';\n// 自定义hooks\nimport useCss from '../../../hooks/useCss';\n\n/**\n * 骨骼屏头像占位图组件AntdSkeletonAvatar\n */\nconst AntdSkeletonAvatar = ({\n    id,\n    style,\n    className,\n    key,\n    active = false,\n    shape = 'circle',\n    size = 'default',\n    setProps,\n    ...others\n}) => {\n    return (\n        <Skeleton.Avatar\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            style={style}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            key={key}\n            active={active}\n            shape={shape}\n            size={size}\n            data-dash-is-loading={useLoading()}\n        />\n    );\n};\n\nAntdSkeletonAvatar.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 是否显示动画\n     * 默认值：`false`\n     */\n    active: PropTypes.bool,\n\n    /**\n     * 头像占位图形状，可选项有`'circle'`、`'square'`\n     * 默认值：`'circle'`\n     */\n    shape: PropTypes.oneOf(['circle', 'square']),\n\n    /**\n     * 头像占位图尺寸，传入数值型表示像素尺寸，也可传入预设的尺寸规格，可选项有`'large'`、`'small'`、`'default'`\n     * 默认值：`'default'`\n     */\n    size: PropTypes.oneOfType([\n        PropTypes.number,\n        PropTypes.oneOf(['large', 'small', 'default']),\n    ]),\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdSkeletonAvatar;\n"
  },
  {
    "path": "src/lib/components/feedback/skeleton/AntdSkeletonButton.react.js",
    "content": "// react核心\nimport React from 'react';\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Skeleton } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../../utils';\n// 自定义hooks\nimport useCss from '../../../hooks/useCss';\n\n/**\n * 骨骼屏按钮占位图组件AntdSkeletonButton\n */\nconst AntdSkeletonButton = ({\n    id,\n    style,\n    className,\n    key,\n    active = false,\n    block = false,\n    shape = 'default',\n    size = 'default',\n    setProps,\n    ...others\n}) => {\n    return (\n        <Skeleton.Button\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            style={style}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            key={key}\n            active={active}\n            block={block}\n            shape={shape}\n            size={size}\n            data-dash-is-loading={useLoading()}\n        />\n    );\n};\n\nAntdSkeletonButton.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 是否显示动画\n     * 默认值：`false`\n     */\n    active: PropTypes.bool,\n\n    /**\n     * 是否撑满父容器\n     * 默认值：`false`\n     */\n    block: PropTypes.bool,\n\n    /**\n     * 按钮占位图形状，可选项有`'circle'`、`'round'`、`'default'`\n     * 默认值：`'default'`\n     */\n    shape: PropTypes.oneOf(['circle', 'round', 'default']),\n\n    /**\n     * 按钮占位图尺寸，可选项有`'large'`、`'small'`、`'default'`\n     * 默认值：`'default'`\n     */\n    size: PropTypes.oneOf(['large', 'small', 'default']),\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdSkeletonButton;\n"
  },
  {
    "path": "src/lib/components/feedback/skeleton/AntdSkeletonImage.react.js",
    "content": "// react核心\nimport React from 'react';\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Skeleton } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../../utils';\n// 自定义hooks\nimport useCss from '../../../hooks/useCss';\n\n/**\n * 骨骼屏图片占位图组件AntdSkeletonImage\n */\nconst AntdSkeletonImage = ({\n    id,\n    style,\n    className,\n    key,\n    setProps,\n    ...others\n}) => {\n    return (\n        <Skeleton.Image\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            style={style}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            key={key}\n            data-dash-is-loading={useLoading()}\n        />\n    );\n};\n\nAntdSkeletonImage.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdSkeletonImage;\n"
  },
  {
    "path": "src/lib/components/feedback/skeleton/AntdSkeletonInput.react.js",
    "content": "// react核心\nimport React from 'react';\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Skeleton } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../../utils';\n// 自定义hooks\nimport useCss from '../../../hooks/useCss';\n\n/**\n * 骨骼屏输入框占位图组件AntdSkeletonInput\n */\nconst AntdSkeletonInput = ({\n    id,\n    style,\n    className,\n    key,\n    active = false,\n    size = 'default',\n    setProps,\n    ...others\n}) => {\n    return (\n        <Skeleton.Input\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            style={style}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            key={key}\n            active={active}\n            size={size}\n            data-dash-is-loading={useLoading()}\n        />\n    );\n};\n\nAntdSkeletonInput.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 是否显示动画\n     * 默认值：`false`\n     */\n    active: PropTypes.bool,\n\n    /**\n     * 输入框占位图尺寸，可选项有`'large'`、`'small'`、`'default'`\n     * 默认值：`'default'`\n     */\n    size: PropTypes.oneOf(['large', 'small', 'default']),\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdSkeletonInput;\n"
  },
  {
    "path": "src/lib/components/formRender/AntdFormRender.react.js",
    "content": "import React, { Suspense } from 'react';\nimport PropTypes from 'prop-types';\n\nconst LazyAntdFormRender = React.lazy(\n    () =>\n        import(\n            /* webpackChunkName: \"form_render\" */ '../../fragments/formRender/AntdFormRender.react'\n        )\n);\n\nconst AntdFormRender = (props) => {\n    return (\n        <Suspense fallback={null}>\n            <LazyAntdFormRender {...props} />\n        </Suspense>\n    );\n};\n\n// 定义参数或属性\nAntdFormRender.propTypes = {\n    /**\n     * 组件id\n     */\n    id: PropTypes.string,\n\n    /**\n     * css类名\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 自定义css字典\n     */\n    style: PropTypes.object,\n\n    /**\n     * 辅助刷新用唯一标识key值\n     */\n    key: PropTypes.string,\n\n    /**\n     * 必填，设置表单的schema\n     */\n    schema: PropTypes.exact({\n        /**\n         * 固定配置为type: 'object'\n         */\n        type: PropTypes.oneOf(['object']),\n\n        /**\n         * 设置表单表单项label布局方式，可选的有'column'、'row'与'inline'，默认为'column'\n         */\n        displayType: PropTypes.oneOf(['column', 'row', 'inline']),\n\n        /**\n         * 设置表单布局，一行应该有几列，默认为3\n         */\n        column: PropTypes.number,\n\n        /**\n         * 设置表单项标签的宽度\n         */\n        labelWidth: PropTypes.number,\n\n        /**\n         * 设置表单项控件的最大宽度\n         */\n        maxWidth: PropTypes.number,\n\n        /**\n         * 设置表单标签占位格数\n         */\n        labelCol: PropTypes.number,\n\n        /**\n         * 设置表单控件占位格数\n         */\n        fieldCol: PropTypes.number,\n\n        /**\n         * 设置表单控件\n         */\n        properties: PropTypes.objectOf(\n            PropTypes.oneOfType([\n                /**\n                 * 基础控件配置项\n                 */\n                PropTypes.shape({\n                    /**\n                     * 设置表单字段的类型，可选的有'string'、'number'、'boolean'、'array'、'range'、'html'、'block'\n                     */\n                    type: PropTypes.oneOf([\n                        'string',\n                        'number',\n                        'boolean',\n                        'array',\n                        'range',\n                        'html',\n                        'block',\n                    ]),\n\n                    /**\n                     * 设置表单字段的标签\n                     */\n                    title: PropTypes.string,\n\n                    /**\n                     * 设置表单项标签的宽度\n                     */\n                    labelWidth: PropTypes.oneOfType([\n                        PropTypes.number,\n                        PropTypes.string,\n                    ]),\n\n                    /**\n                     * 设置表单项控件的最大宽度\n                     */\n                    maxWidth: PropTypes.oneOfType([\n                        PropTypes.number,\n                        PropTypes.string,\n                    ]),\n\n                    /**\n                     * 设置表单标签占位格数\n                     */\n                    labelCol: PropTypes.oneOfType([\n                        PropTypes.number,\n                        PropTypes.string,\n                    ]),\n\n                    /**\n                     * 设置表单控件占位格数\n                     */\n                    fieldCol: PropTypes.oneOfType([\n                        PropTypes.number,\n                        PropTypes.string,\n                    ]),\n\n                    /**\n                     * 设置表单项跨列展示，目前需配合lableWidth来使用，否则无法与其他表单项在样式上对齐，通过配置单个表单项的labelCol、fieldCol勉强能改善\n                     */\n                    cellSpan: PropTypes.oneOfType([\n                        PropTypes.number,\n                        PropTypes.string,\n                    ]),\n\n                    /**\n                     * 设置表单项列宽度，表单布局会被切割成 24 等份，可以通过设置 span 来自定义表单项所占的宽度\n                     */\n                    span: PropTypes.oneOfType([\n                        PropTypes.number,\n                        PropTypes.string,\n                    ]),\n\n                    /**\n                     * 设置指定渲染的控件名称\n                     */\n                    widget: PropTypes.oneOf([\n                        'input',\n                        'inputNumber',\n                        'select',\n                        'multiSelect',\n                        'radio',\n                        'checkboxes',\n                        'textArea',\n                        'checkbox',\n                        'switch',\n                        'rate',\n                        'slider',\n                        'datePicker',\n                        'dateRange',\n                        'timePicker',\n                        'timeRange',\n                        'cascader',\n                        'treeSelect',\n                        'color',\n                        'imageInput',\n                        'urlInput',\n                        'html',\n                    ]),\n\n                    /**\n                     * 设置输入内容提示\n                     */\n                    placeholder: PropTypes.oneOfType([\n                        PropTypes.string,\n                        PropTypes.arrayOf(PropTypes.string),\n                    ]),\n\n                    /**\n                     * 设置副标题描述\n                     */\n                    description: PropTypes.string,\n\n                    /**\n                     * 设置气泡提示，支持html格式，可传入一个antd的tooltip配置对象支持更多配置\n                     */\n                    tooltip: PropTypes.oneOfType([\n                        PropTypes.string,\n                        PropTypes.shape({\n                            /**\n                             * 设置显示的文字内容\n                             */\n                            title: PropTypes.any,\n\n                            /**\n                             * 设置气泡框的位置，可选的有'top'、'left'、'right'、'bottom'、'topLeft'\n                             * 、'topRight'、'bottomLeft'、'bottomRight'、'leftTop'、'leftBottom'\n                             * 、'rightTop'、'rightBottom'，默认为'top'\n                             */\n                            placement: PropTypes.oneOf([\n                                'top',\n                                'left',\n                                'right',\n                                'bottom',\n                                'topLeft',\n                                'topRight',\n                                'bottomLeft',\n                                'bottomRight',\n                            ]),\n\n                            /**\n                             * 设置背景颜色\n                             */\n                            color: PropTypes.string,\n\n                            /**\n                             * 设置鼠标移入后延时多少才显示 Tooltip，单位：秒，默认为0.1\n                             */\n                            mouseEnterDelay: PropTypes.number,\n\n                            /**\n                             * 设置鼠标移出后延时多少才隐藏 Tooltip，单位：秒，默认为0.1\n                             */\n                            mouseLeaveDelay: PropTypes.number,\n\n                            /**\n                             * 设置卡片css类\n                             */\n                            overlayClassName: PropTypes.oneOfType([\n                                PropTypes.string,\n                                PropTypes.object,\n                            ]),\n\n                            /**\n                             * 设置卡片样式\n                             */\n                            overlayStyle: PropTypes.object,\n\n                            /**\n                             * 设置卡片内容区域的样式\n                             */\n                            overlayInnerStyle: PropTypes.object,\n\n                            /**\n                             * 设置触发行为，可选的有'hover'、'focus'、'click'，或是以上多个组成的数组，默认为'hover'\n                             */\n                            trigger: PropTypes.oneOfType([\n                                PropTypes.oneOf(['hover', 'focus', 'click']),\n                                PropTypes.arrayOf(\n                                    PropTypes.oneOf(['hover', 'focus', 'click'])\n                                ),\n                            ]),\n\n                            /**\n                             * 设置悬浮层zIndex\n                             */\n                            zIndex: PropTypes.number,\n\n                            /**\n                             * 设置修改箭头的显示状态以及修改箭头是否指向目标元素中心，默认为'show'\n                             */\n                            arrow: PropTypes.oneOf(['show', 'hide', 'center']),\n\n                            /**\n                             * 用于设置是否始终保持更新内容，默认为false。默认情况下，Tooltip 在关闭时会缓存内容，设置该属性后会始终保持更新。\n                             */\n                            fresh: PropTypes.bool,\n\n                            /**\n                             * 用于监听或控制当前tooltip的显隐，默认为false\n                             */\n                            open: PropTypes.bool,\n\n                            /**\n                             * 用于设置气泡被遮挡时自动调整位置,默认为true\n                             */\n                            autoAdjustOverflow: PropTypes.bool,\n\n                            /**\n                             * 设置默认是否显隐，默认为false\n                             */\n                            defaultOpen: PropTypes.bool,\n\n                            /**\n                             * 设置关闭后是否销毁Tooltip，默认为false\n                             */\n                            destroyTooltipOnHide: PropTypes.bool,\n                        }),\n                    ]),\n\n                    /**\n                     * 设置更多的说明信息，支持html格式，会紧贴在元素下面一行展示\n                     */\n                    extra: PropTypes.string,\n\n                    /**\n                     * 设置是否必填，默认为false\n                     */\n                    required: PropTypes.oneOfType([\n                        PropTypes.bool,\n                        PropTypes.string,\n                    ]),\n\n                    /**\n                     * 设置string类型为字符串最小长度；number类型时为最小值；array 类型时为数组最小长度\n                     */\n                    min: PropTypes.oneOfType([\n                        PropTypes.number,\n                        PropTypes.string,\n                    ]),\n\n                    /**\n                     * 设置string类型为字符串最大长度；number类型时为最大值；array 类型时为数组最大长度\n                     */\n                    max: PropTypes.oneOfType([\n                        PropTypes.number,\n                        PropTypes.string,\n                    ]),\n\n                    /**\n                     * 在已设置的type下，如何处理这个type\n                     */\n                    format: PropTypes.oneOf([\n                        'image',\n                        'textarea',\n                        'color',\n                        'email',\n                        'url',\n                        'dateTime',\n                        'date',\n                        'time',\n                        'upload',\n                    ]),\n\n                    /**\n                     * 设置表单元素的校验规则\n                     */\n                    rules: PropTypes.arrayOf(\n                        PropTypes.shape({\n                            /**\n                             * 仅在 type 为 array 类型时有效，用于指定数组元素的校验规则\n                             */\n                            defaultField: PropTypes.object,\n\n                            /**\n                             * 是否匹配枚举中的值（需要将 type 设置为 enum）\n                             */\n                            enum: PropTypes.any,\n\n                            /**\n                             * 仅在 type 为 array 或 object 类型时有效，用于指定子元素的校验规则\n                             */\n                            fields: PropTypes.any,\n\n                            /**\n                             * string 类型时为字符串长度；number 类型时为确定数字； array 类型时为数组长度\n                             */\n                            len: PropTypes.number,\n\n                            /**\n                             * 必须设置 type：string 类型为字符串最大长度；number 类型时为最大值；array 类型时为数组最大长度\n                             */\n                            max: PropTypes.number,\n\n                            /**\n                             * 错误信息，不设置时会通过模板自动生成\n                             */\n                            message: PropTypes.string,\n\n                            /**\n                             * 必须设置 type：string 类型为字符串最小长度；number 类型时为最小值；array 类型时为数组最小长度\n                             */\n                            min: PropTypes.number,\n\n                            /**\n                             * 正则表达式匹配\n                             */\n                            pattern: PropTypes.oneOfType([\n                                PropTypes.string,\n                                PropTypes.instanceOf(RegExp),\n                            ]),\n\n                            /**\n                             * 是否为必选字段\n                             */\n                            required: PropTypes.bool,\n\n                            /**\n                             * 类型，常见有 string |number |boolean |url | email等\n                             */\n                            type: PropTypes.oneOf([\n                                'string',\n                                'number',\n                                'boolean',\n                                'method',\n                                'regexp',\n                                'integer',\n                                'float',\n                                'array',\n                                'object',\n                                'enum',\n                                'date',\n                                'url',\n                                'hex',\n                                'email',\n                                'any',\n                            ]),\n\n                            /**\n                             * 设置触发验证时机，可选值有onChange、onBlur、onFocus，默认为onChange\n                             */\n                            validateTrigger: PropTypes.oneOf([\n                                'onChange',\n                                'onBlur',\n                                'onFocus',\n                            ]),\n\n                            /**\n                             * 设置自定义校验，值需要是字符串格式的js函数\n                             */\n                            validator: PropTypes.string,\n\n                            /**\n                             * 仅警告，不阻塞表单提交\n                             */\n                            warningOnly: PropTypes.bool,\n\n                            /**\n                             * 如果字段仅包含空格则校验不通过，只在 type: 'string' 时生效\n                             */\n                            whitespace: PropTypes.bool,\n                        })\n                    ),\n\n                    /**\n                     * 设置是否隐藏，默认为false\n                     */\n                    hidden: PropTypes.oneOfType([\n                        PropTypes.bool,\n                        PropTypes.string,\n                    ]),\n\n                    /**\n                     * 设置是否禁用，默认为false\n                     */\n                    disabled: PropTypes.oneOfType([\n                        PropTypes.bool,\n                        PropTypes.string,\n                    ]),\n\n                    /**\n                     * 设置是否为可读模式，默认为false\n                     */\n                    readOnly: PropTypes.oneOfType([\n                        PropTypes.bool,\n                        PropTypes.string,\n                    ]),\n\n                    /**\n                     * 指定只读渲染组件名称\n                     */\n                    readOnlyWidget: PropTypes.string,\n\n                    /**\n                     * 设置表单依赖元素，当依赖的元素更新时，会触发本元素的重新渲染，用于复杂的表单联动\n                     */\n                    dependencies: PropTypes.arrayOf(PropTypes.string),\n\n                    /**\n                     * 设置自定义控件class名称\n                     */\n                    className: PropTypes.string,\n\n                    /**\n                     * 当title未设置时，通过配置reserveLabel: true可以保留labelWidth占位，使得输入控件和其他控件上下对齐\n                     */\n                    reserveLabel: PropTypes.oneOfType([\n                        PropTypes.bool,\n                        PropTypes.string,\n                    ]),\n\n                    /**\n                     * 设置额外属性，如果使用的是antd组件，对应的就是antd组件的其他属性\n                     */\n                    props: PropTypes.object,\n                }),\n                /**\n                 * 嵌套控件配置项\n                 */\n                PropTypes.shape({\n                    /**\n                     * 固定配置为type: 'object'\n                     */\n                    type: PropTypes.oneOf(['object']),\n\n                    /**\n                     * 设置标题\n                     */\n                    title: PropTypes.string,\n\n                    /**\n                     * 设置希望使用的嵌套组件名称，可选的有'collapse'、'card'、'lineTitle'、'subInline'，默认为'card'\n                     */\n                    widget: PropTypes.oneOf([\n                        'collapse',\n                        'card',\n                        'lineTitle',\n                        'subInline',\n                    ]),\n\n                    /**\n                     * 设置表单元素集合\n                     */\n                    properties: PropTypes.object,\n\n                    /**\n                     * 设置表单布局，一行应该有几列，默认为3\n                     */\n                    column: PropTypes.oneOfType([\n                        PropTypes.number,\n                        PropTypes.string,\n                    ]),\n\n                    /**\n                     * 设置副标题描述\n                     */\n                    description: PropTypes.string,\n\n                    /**\n                     * 设置气泡提示，支持html格式，可传入一个antd的tooltip配置对象支持更多配置\n                     */\n                    tooltip: PropTypes.oneOfType([\n                        PropTypes.string,\n                        PropTypes.shape({\n                            /**\n                             * 设置显示的文字内容\n                             */\n                            title: PropTypes.any,\n\n                            /**\n                             * 设置气泡框的位置，可选的有'top'、'left'、'right'、'bottom'、'topLeft'\n                             * 、'topRight'、'bottomLeft'、'bottomRight'、'leftTop'、'leftBottom'\n                             * 、'rightTop'、'rightBottom'，默认为'top'\n                             */\n                            placement: PropTypes.oneOf([\n                                'top',\n                                'left',\n                                'right',\n                                'bottom',\n                                'topLeft',\n                                'topRight',\n                                'bottomLeft',\n                                'bottomRight',\n                            ]),\n\n                            /**\n                             * 设置背景颜色\n                             */\n                            color: PropTypes.string,\n\n                            /**\n                             * 设置鼠标移入后延时多少才显示 Tooltip，单位：秒，默认为0.1\n                             */\n                            mouseEnterDelay: PropTypes.number,\n\n                            /**\n                             * 设置鼠标移出后延时多少才隐藏 Tooltip，单位：秒，默认为0.1\n                             */\n                            mouseLeaveDelay: PropTypes.number,\n\n                            /**\n                             * 设置卡片css类\n                             */\n                            overlayClassName: PropTypes.oneOfType([\n                                PropTypes.string,\n                                PropTypes.object,\n                            ]),\n\n                            /**\n                             * 设置卡片样式\n                             */\n                            overlayStyle: PropTypes.object,\n\n                            /**\n                             * 设置卡片内容区域的样式\n                             */\n                            overlayInnerStyle: PropTypes.object,\n\n                            /**\n                             * 设置触发行为，可选的有'hover'、'focus'、'click'，或是以上多个组成的数组，默认为'hover'\n                             */\n                            trigger: PropTypes.oneOfType([\n                                PropTypes.oneOf(['hover', 'focus', 'click']),\n                                PropTypes.arrayOf(\n                                    PropTypes.oneOf(['hover', 'focus', 'click'])\n                                ),\n                            ]),\n\n                            /**\n                             * 设置悬浮层zIndex\n                             */\n                            zIndex: PropTypes.number,\n\n                            /**\n                             * 设置修改箭头的显示状态以及修改箭头是否指向目标元素中心，默认为'show'\n                             */\n                            arrow: PropTypes.oneOf(['show', 'hide', 'center']),\n\n                            /**\n                             * 用于设置是否始终保持更新内容，默认为false。默认情况下，Tooltip 在关闭时会缓存内容，设置该属性后会始终保持更新。\n                             */\n                            fresh: PropTypes.bool,\n\n                            /**\n                             * 用于监听或控制当前tooltip的显隐，默认为false\n                             */\n                            open: PropTypes.bool,\n\n                            /**\n                             * 用于设置气泡被遮挡时自动调整位置,默认为true\n                             */\n                            autoAdjustOverflow: PropTypes.bool,\n\n                            /**\n                             * 设置默认是否显隐，默认为false\n                             */\n                            defaultOpen: PropTypes.bool,\n\n                            /**\n                             * 设置关闭后是否销毁Tooltip，默认为false\n                             */\n                            destroyTooltipOnHide: PropTypes.bool,\n                        }),\n                    ]),\n\n                    /**\n                     * 设置额外属性，透传到对应的嵌套组件中\n                     */\n                    props: PropTypes.object,\n                }),\n\n                /**\n                 * 列表控件配置项\n                 */\n                PropTypes.shape({\n                    /**\n                     * 固定配置为type: 'array'\n                     */\n                    type: PropTypes.oneOf(['array']),\n\n                    /**\n                     * 设置标题\n                     */\n                    title: PropTypes.string,\n\n                    /**\n                     * 设置希望使用的列表组件名称，可选的有'cardList'、'simpleList'、'tableList'、'drawerList'、'virtualList'，默认为'cardList'\n                     */\n                    widget: PropTypes.oneOf([\n                        'cardList',\n                        'simpleList',\n                        'tableList',\n                        'drawerList',\n                        'virtualList',\n                    ]),\n\n                    /**\n                     * 设置列表的最大长度\n                     */\n                    max: PropTypes.oneOfType([\n                        PropTypes.number,\n                        PropTypes.string,\n                    ]),\n\n                    /**\n                     * 设置列表的最小长度\n                     */\n                    min: PropTypes.oneOfType([\n                        PropTypes.number,\n                        PropTypes.string,\n                    ]),\n\n                    /**\n                     * 设置列表控件\n                     */\n                    props: PropTypes.shape({\n                        /**\n                         * 设置添加按钮属性，参考 Antd Button Props()\n                         */\n                        addBtnProps: PropTypes.object,\n\n                        /**\n                         * 设置删除确认弹窗属性，参考 Antd PopConfirm Props\n                         */\n                        delConfirmProps: PropTypes.object,\n\n                        /**\n                         * 设置tableList | drawerList | virtualList 中操作列的属性，参考 Antd Table ColumnType。 其中 title 使用 colHeaderText 代替。\n                         */\n                        actionColumnProps: PropTypes.object,\n\n                        /**\n                         * 设置是否隐藏添加按钮\n                         */\n                        hideAdd: PropTypes.bool,\n\n                        /**\n                         * 设置是否隐藏复制按钮\n                         */\n                        hideCopy: PropTypes.bool,\n\n                        /**\n                         * 设置是否隐藏移动按钮\n                         */\n                        hideMove: PropTypes.bool,\n\n                        /**\n                         * 设置是否隐藏删除按钮\n                         */\n                        hideDelete: PropTypes.bool,\n                    }),\n\n                    /**\n                     * 动态项配置，可以是一个嵌套控件\n                     */\n                    items: PropTypes.object,\n                }),\n            ])\n        ),\n    }).isRequired,\n\n    /**\n     * 设置表单布局模式，表单元素与 label 同行 or 分两行展示, inline 则整个展示自然顺排，\n     * 可选的有'column'、'row'与'inline'，默认为'column'\n     */\n    displayType: PropTypes.oneOf(['column', 'row', 'inline']),\n\n    /**\n     * 设置label标签的文本对齐方式，可选的有'left'和'right'，默认为'right'\n     */\n    labelAlign: PropTypes.oneOf(['left', 'right']),\n\n    /**\n     * 设置表单标签固定宽度\n     */\n    lableWidth: PropTypes.number,\n\n    /**\n     * 设置表单项控件的最大宽度\n     */\n    maxWidth: PropTypes.number,\n\n    /**\n     * 设置表单标签占位格数\n     */\n    labelCol: PropTypes.number,\n\n    /**\n     * 设置表单控件占位格数\n     */\n    fieldCol: PropTypes.number,\n\n    /**\n     * 设置是否是否显示label后面的冒号，默认为true\n     */\n    colon: PropTypes.bool,\n\n    /**\n     * 设置表单全局配置\n     */\n    globalConfig: PropTypes.exact({\n        /**\n         * 设置是否禁用表达式\n         */\n        mustacheDisabled: PropTypes.bool,\n\n        /**\n         * 设置列表表单配置\n         */\n        listOperate: PropTypes.exact({\n            /**\n             * 设置列表表单操作按钮样式\n             */\n            btnType: PropTypes.oneOf(['icon', 'text']),\n\n            /**\n             * 设置是否隐藏移动按钮\n             */\n            hideMove: PropTypes.bool,\n        }),\n    }),\n\n    /**\n     * 监听表单的数据变化，属性值需要是字符串格式的js函数\n     */\n    watch: PropTypes.objectOf(PropTypes.string),\n\n    /**\n     * 设置提交数据的时候是否去掉已经被隐藏的元素的数据，默认为true\n     */\n    removeHiddenData: PropTypes.bool,\n\n    /**\n     * 设否开启只读模式，一般用于预览展示，全文text展示，默认为false\n     */\n    readOnly: PropTypes.bool,\n\n    /**\n     * 设置一行展示多少列\n     */\n    column: PropTypes.number,\n\n    /**\n     * 设置是否禁用全部表单项，默认为false\n     */\n    disabled: PropTypes.bool,\n\n    /**\n     * 设置提交失败是否自动滚动到第一个错误字段，默认为false\n     */\n    scrollToFirstError: PropTypes.bool,\n\n    /**\n     * 设置展示语言，目前只支持中文、英文，\n     * 可选的有'zh-CN'与'en-US'，默认为'zh-CN'\n     */\n    locale: PropTypes.oneOf(['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']),\n\n    /**\n     * 设置底部操作区域\n     */\n    footer: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.shape({\n            /**\n             * 设置提交按钮\n             */\n            submit: PropTypes.shape({\n                /**\n                 * 设置按钮文字\n                 */\n                text: PropTypes.string,\n\n                /**\n                 * 设置是否显示\n                 */\n                hide: PropTypes.bool,\n\n                /**\n                 * 设置其他按钮属性，参考 Antd Button Props()\n                 */\n                btnProps: PropTypes.object,\n            }),\n            /**\n             * 设置重置按钮\n             */\n            reset: PropTypes.shape({\n                /**\n                 * 设置按钮文字\n                 */\n                text: PropTypes.string,\n\n                /**\n                 * 设置是否显示\n                 */\n                hide: PropTypes.bool,\n\n                /**\n                 * 设置其他按钮属性，参考 Antd Button Props()\n                 */\n                btnProps: PropTypes.object,\n            }),\n        }),\n        PropTypes.node,\n    ]),\n\n    /**\n     * 同antd的configProvider\n     */\n    configProvider: PropTypes.object,\n\n    /**\n     * 设置默认的校验提示信息\n     */\n    validateMessages: PropTypes.exact({\n        default: PropTypes.string,\n        required: PropTypes.string,\n        whitespace: PropTypes.string,\n        date: PropTypes.exact({\n            format: PropTypes.string,\n            parse: PropTypes.string,\n            invalid: PropTypes.string,\n        }),\n        types: PropTypes.exact({\n            string: PropTypes.string,\n            method: PropTypes.string,\n            array: PropTypes.string,\n            object: PropTypes.string,\n            number: PropTypes.string,\n            date: PropTypes.string,\n            boolean: PropTypes.string,\n            integer: PropTypes.string,\n            float: PropTypes.string,\n            regexp: PropTypes.string,\n            email: PropTypes.string,\n            url: PropTypes.string,\n            hex: PropTypes.string,\n        }),\n        string: PropTypes.exact({\n            len: PropTypes.string,\n            min: PropTypes.string,\n            max: PropTypes.string,\n            range: PropTypes.string,\n        }),\n        number: PropTypes.exact({\n            len: PropTypes.string,\n            min: PropTypes.string,\n            max: PropTypes.string,\n            range: PropTypes.string,\n        }),\n        array: PropTypes.exact({\n            len: PropTypes.string,\n            min: PropTypes.string,\n            max: PropTypes.string,\n            range: PropTypes.string,\n        }),\n        pattern: PropTypes.exact({\n            mismatch: PropTypes.string,\n        }),\n    }),\n\n    /**\n     * 设置与监听表单数据\n     */\n    values: PropTypes.object,\n\n    /**\n     * 监听表单校验结果\n     */\n    validateStatuses: PropTypes.bool,\n\n    /**\n     * 控制参数，用于提交表单时手动搜集表单的校验结果，回调设置为true后会自动变为false\n     */\n    submitForm: PropTypes.bool,\n\n    /**\n     * 辅助监听表单提交参数\n     */\n    submitFormClicks: PropTypes.number,\n\n    /**\n     * 控制参数，用于重置表单项校验状态（不能重置表单项包裹的组件的值，需要通过回调重置表单项包裹的组件的值），回调设置为true后会自动变为false\n     */\n    resetForm: PropTypes.bool,\n\n    /**\n     * 辅助监听表单重置参数\n     */\n    resetFormClicks: PropTypes.number,\n\n    loading_state: PropTypes.shape({\n        /**\n         * Determines if the component is loading or not\n         */\n        is_loading: PropTypes.bool,\n        /**\n         * Holds which property is loading\n         */\n        prop_name: PropTypes.string,\n        /**\n         * Holds the name of the component that is loading\n         */\n        component_name: PropTypes.string,\n    }),\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\n// 设置默认参数\nAntdFormRender.defaultProps = {\n    displayType: 'column',\n    labelAlign: 'right',\n    colon: true,\n    removeHiddenData: true,\n    readOnly: false,\n    column: 1,\n    disabled: false,\n    scrollToFirstError: false,\n    locale: 'zh-CN',\n    submitFormClicks: 0,\n    resetFormClicks: 0,\n};\n\nexport default AntdFormRender;\n\nexport const propTypes = AntdFormRender.propTypes;\nexport const defaultProps = AntdFormRender.defaultProps;\n"
  },
  {
    "path": "src/lib/components/general/AntdButton.react.js",
    "content": "// react核心\nimport { useContext } from 'react';\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Button } from 'antd';\n// 辅助库\nimport { isString, isUndefined } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useRequest } from 'ahooks';\nimport { HappyProvider } from '@ant-design/happy-work-theme';\nimport { useLoading } from '../utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 自定义上下文\nimport PropsContext from '../../contexts/PropsContext';\n\n/**\n * 按钮组件AntdButton\n */\nconst AntdButton = ({\n    id,\n    children,\n    loadingChildren,\n    className,\n    style,\n    styles,\n    classNames,\n    key,\n    setProps,\n    type = 'default',\n    href,\n    target = '_blank',\n    autoInsertSpace = true,\n    block = false,\n    danger = false,\n    disabled = false,\n    ghost = false,\n    shape = 'default',\n    size = 'middle',\n    nClicks = 0,\n    clickExecuteJsString,\n    debounceWait = 0,\n    icon,\n    iconPosition = 'start',\n    loading,\n    autoSpin = false,\n    motionType,\n    color,\n    variant,\n    title,\n    ...others\n}) => {\n    // 使用自定义上下文\n    const context = useContext(PropsContext);\n\n    // 防抖点击事件监听\n    const { run: onClick } = useRequest(\n        () => {\n            // 若clickExecuteJsString有效，则通过eval进行执行\n            if (clickExecuteJsString) {\n                try {\n                    eval(clickExecuteJsString);\n                } catch (error) {\n                    console.error(error);\n                }\n            }\n\n            if (autoSpin) {\n                // 更新nClicks，并自动进入loading状态\n                setProps({ nClicks: nClicks + 1, loading: true });\n            } else {\n                // 更新nClicks\n                setProps({ nClicks: nClicks + 1 });\n            }\n        },\n        {\n            debounceWait: debounceWait,\n            debounceLeading: true,\n            manual: true,\n        }\n    );\n\n    const renderElement = (\n        <Button\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            key={key}\n            style={style}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            styles={styles}\n            classNames={classNames}\n            type={type}\n            href={href}\n            target={target}\n            autoInsertSpace={autoInsertSpace}\n            block={block}\n            danger={danger}\n            disabled={\n                context && !isUndefined(context.componentDisabled)\n                    ? context.componentDisabled\n                    : disabled\n            }\n            ghost={ghost}\n            shape={shape}\n            size={\n                context && !isUndefined(context.componentSize)\n                    ? context.componentSize\n                    : size\n            }\n            icon={icon}\n            iconPosition={iconPosition}\n            loading={loading}\n            color={color}\n            variant={variant}\n            title={title}\n            onClick={onClick}\n            data-dash-is-loading={useLoading()}\n        >\n            {loading ? loadingChildren || children : children}\n        </Button>\n    );\n\n    if (motionType === 'happy-work') {\n        return <HappyProvider>{renderElement}</HappyProvider>;\n    }\n    return renderElement;\n};\n\nAntdButton.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，按钮内嵌元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 细分控制子元素css样式\n     */\n    styles: PropTypes.exact({\n        /**\n         * 按钮图标元素css样式\n         */\n        icon: PropTypes.object,\n    }),\n\n    /**\n     * 细分控制子元素css类名\n     */\n    classNames: PropTypes.exact({\n        /**\n         * 按钮图标元素css类名\n         */\n        icon: PropTypes.string,\n    }),\n\n    /**\n     * 组件型，按钮加载状态下显示的内嵌元素\n     */\n    loadingChildren: PropTypes.node,\n\n    /**\n     * 按钮类型，可选项有`'default'`、`'primary'`、`'dashed'`、`'link'`、`'text'`\n     * 默认值：`'default'`\n     */\n    type: PropTypes.oneOf(['default', 'primary', 'dashed', 'link', 'text']),\n\n    /**\n     * 按钮点击跳转链接地址\n     */\n    href: PropTypes.string,\n\n    /**\n     * 按钮点击跳转链接方式\n     * 默认值：`'_blank'`\n     */\n    target: PropTypes.string,\n\n    /**\n     * 按钮两个汉字内是否插入空格\n     * 默认值：`true`\n     */\n    autoInsertSpace: PropTypes.bool,\n\n    /**\n     * 按钮是否渲染为块级元素（宽度撑满父容器）\n     * 默认值：`false`\n     */\n    block: PropTypes.bool,\n\n    /**\n     * 按钮是否呈现危险样式\n     * 默认值：`false`\n     */\n    danger: PropTypes.bool,\n\n    /**\n     * 按钮是否呈现禁用状态\n     * 默认值：`false`\n     */\n    disabled: PropTypes.bool,\n\n    /**\n     * 按钮是否呈现透明背景状态\n     * 默认值：`false`\n     */\n    ghost: PropTypes.bool,\n\n    /**\n     * 按钮形状，可选项有`'default'`、`'circle'`、`'round'`\n     * 默认值：`'default'`\n     */\n    shape: PropTypes.oneOf(['default', 'circle', 'round']),\n\n    /**\n     * 按钮尺寸规格，可选项有`'small'`、`'middle'`、`'large'`\n     * 默认值：`'middle'`\n     */\n    size: PropTypes.oneOf(['small', 'middle', 'large']),\n\n    /**\n     * 按钮累计点击次数，用于监听按钮点击行为\n     * 默认值：`0`\n     */\n    nClicks: PropTypes.number,\n\n    /**\n     * 按钮点击时需要附带执行的js程序字符串\n     */\n    clickExecuteJsString: PropTypes.string,\n\n    /**\n     * 按钮点击事件监听防抖延时，单位：毫秒\n     * 默认值：`0`\n     */\n    debounceWait: PropTypes.number,\n\n    /**\n     * 组件型，按钮内嵌前缀图标元素\n     */\n    icon: PropTypes.node,\n\n    /**\n     * 按钮图标组件的位置，可选项有`'start'`、`'end'`\n     * 默认值：`'start'`\n     */\n    iconPosition: PropTypes.oneOf(['start', 'end']),\n\n    /**\n     * 按钮是否呈现加载状态\n     * 默认值：`false`\n     */\n    loading: PropTypes.bool,\n\n    /**\n     * 当前按钮在每次点击后是否自动进入加载中状态\n     * 默认值：`false`\n     */\n    autoSpin: PropTypes.bool,\n\n    /**\n     * 按钮额外的特殊交互类型，可选项有`'happy-work'`\n     */\n    motionType: PropTypes.oneOf(['happy-work']),\n\n    /**\n     * 按钮颜色风格，可选项有`'default'`、`'primary'`、`'danger'`，以及可用的一系列内置颜色：`'blue'`、`'purple'`、`'cyan'`、`'green'`、`'magenta'`、`'pink'`、`'red'`、`'orange'`、`'yellow'`、`'volcano'`、`'geekblue'`、`'lime'`、`'gold'`\n     */\n    color: PropTypes.oneOf([\n        'default',\n        'primary',\n        'danger',\n        'blue',\n        'purple',\n        'cyan',\n        'green',\n        'magenta',\n        'pink',\n        'red',\n        'orange',\n        'yellow',\n        'volcano',\n        'geekblue',\n        'lime',\n        'gold',\n    ]),\n\n    /**\n     * 形态变体类型，可选项有`'outlined'`、`'dashed'`、`'solid'`、`'filled'`、`'text'`、`'link'`\n     */\n    variant: PropTypes.oneOf([\n        'outlined',\n        'dashed',\n        'solid',\n        'filled',\n        'text',\n        'link',\n    ]),\n\n    /**\n     * 原生按钮title属性\n     */\n    title: PropTypes.string,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdButton;\n"
  },
  {
    "path": "src/lib/components/general/AntdFloatButton.react.js",
    "content": "// react核心\nimport PropTypes from 'prop-types';\n// antd核心\nimport { FloatButton } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n\n/**\n * 悬浮按钮组件AntdFloatButton\n */\nconst AntdFloatButton = ({\n    id,\n    className,\n    style,\n    key,\n    icon,\n    description,\n    tooltip,\n    type = 'default',\n    shape = 'circle',\n    href,\n    target = '_blank',\n    nClicks = 0,\n    setProps,\n    ...others\n}) => {\n    return (\n        <FloatButton\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            icon={icon}\n            description={description}\n            tooltip={tooltip}\n            type={type}\n            shape={shape}\n            href={href}\n            target={target}\n            onClick={() => setProps({ nClicks: nClicks + 1 })}\n            data-dash-is-loading={useLoading()}\n        />\n    );\n};\n\nAntdFloatButton.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 组件型，按钮内嵌前缀图标元素\n     */\n    icon: PropTypes.node,\n\n    /**\n     * 组件型，按钮内嵌元素，仅`shape='square'`时可用\n     */\n    description: PropTypes.node,\n\n    /**\n     * 组件型，按钮额外气泡卡片内容\n     */\n    tooltip: PropTypes.oneOfType([\n        PropTypes.node,\n        PropTypes.shape({\n            /**\n             * 气泡卡片内容\n             */\n            title: PropTypes.node,\n            /**\n             * 气泡卡片背景色\n             */\n            color: PropTypes.string,\n            /**\n             * 气泡卡片展开方向，可选项有`'top'`、`'left'`、`'right'`、`'bottom'`、`'topLeft'`、`'topRight'`、`'bottomLeft'`、`'bottomRight'`、`'leftTop'`、`'leftBottom'`、`'rightTop'`、`'rightBottom'`\n             */\n            placement: PropTypes.oneOf([\n                'top',\n                'left',\n                'right',\n                'bottom',\n                'topLeft',\n                'topRight',\n                'bottomLeft',\n                'bottomRight',\n                'leftTop',\n                'leftBottom',\n                'rightTop',\n                'rightBottom',\n            ]),\n        }),\n    ]),\n\n    /**\n     * 按钮类型，可选项有`'default'`、`'primary'`\n     * 默认值：`'default'`\n     */\n    type: PropTypes.oneOf(['default', 'primary']),\n\n    /**\n     * 按钮形状，可选项有`'circle'`、`'square'`\n     * 默认值：`'circle'`\n     */\n    shape: PropTypes.oneOf(['circle', 'square']),\n\n    /**\n     * 按钮点击跳转链接地址\n     */\n    href: PropTypes.string,\n\n    /**\n     * 按钮点击跳转链接方式\n     * 默认值：`'_blank'`\n     */\n    target: PropTypes.string,\n\n    /**\n     * 按钮累计点击次数，用于监听按钮点击行为\n     * 默认值：`0`\n     */\n    nClicks: PropTypes.number,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdFloatButton;\n"
  },
  {
    "path": "src/lib/components/general/AntdFloatButtonGroup.react.js",
    "content": "// react核心\nimport PropTypes from 'prop-types';\n// antd核心\nimport { FloatButton } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n\n/**\n * 悬浮按钮组组件AntdFloatButtonGroup\n */\nconst AntdFloatButtonGroup = ({\n    id,\n    children,\n    className,\n    style,\n    key,\n    icon,\n    description,\n    tooltip,\n    type = 'default',\n    shape = 'circle',\n    trigger,\n    placement,\n    open,\n    setProps,\n    ...others\n}) => {\n    return (\n        <FloatButton.Group\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            icon={icon}\n            description={description}\n            tooltip={tooltip}\n            type={type}\n            shape={shape}\n            trigger={trigger}\n            placement={placement}\n            open={open}\n            onOpenChange={(e) => setProps({ open: e })}\n            data-dash-is-loading={useLoading()}\n        >\n            {children}\n        </FloatButton.Group>\n    );\n};\n\nAntdFloatButtonGroup.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前悬浮按钮组内悬浮按钮\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 图标元素\n     */\n    icon: PropTypes.node,\n\n    /**\n     * 描述内容\n     */\n    description: PropTypes.node,\n\n    /**\n     * 气泡卡片内容\n     */\n    tooltip: PropTypes.oneOfType([\n        PropTypes.node,\n        PropTypes.shape({\n            /**\n             * 气泡卡片内容\n             */\n            title: PropTypes.node,\n            /**\n             * 气泡卡片背景色\n             */\n            color: PropTypes.string,\n            /**\n             * 气泡卡片展开方向，可选项有`'top'`、`'left'`、`'right'`、`'bottom'`、`'topLeft'`、`'topRight'`、`'bottomLeft'`、`'bottomRight'`、`'leftTop'`、`'leftBottom'`、`'rightTop'`、`'rightBottom'`\n             */\n            placement: PropTypes.oneOf([\n                'top',\n                'left',\n                'right',\n                'bottom',\n                'topLeft',\n                'topRight',\n                'bottomLeft',\n                'bottomRight',\n                'leftTop',\n                'leftBottom',\n                'rightTop',\n                'rightBottom',\n            ]),\n        }),\n    ]),\n\n    /**\n     * 按钮类型，可选项有`'default'`、`'primary'`\n     * 默认值：`'default'`\n     */\n    type: PropTypes.oneOf(['default', 'primary']),\n\n    /**\n     * 内部各悬浮按钮形状，可选项有`'circle'`、`'square'`\n     * 默认值：`'circle'`\n     */\n    shape: PropTypes.oneOf(['circle', 'square']),\n\n    /**\n     * 菜单展开模式触发方式，可选项有`'click'`、`'hover'`\n     */\n    trigger: PropTypes.oneOf(['click', 'hover']),\n\n    /**\n     * 菜单展开方向，可选项有`'top'`、`'right'`、`'bottom'`、`'left'`\n     */\n    placement: PropTypes.oneOf(['top', 'right', 'bottom', 'left']),\n\n    /**\n     * 设置或监听当前悬浮按钮组展开状态\n     */\n    open: PropTypes.bool,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdFloatButtonGroup;\n"
  },
  {
    "path": "src/lib/components/general/AntdIcon.react.js",
    "content": "// react核心\nimport PropTypes from 'prop-types';\n// antd核心\nimport { str2Icon } from '../icons.react';\nimport { createFromIconfontCN } from '@ant-design/icons';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useRequest } from 'ahooks';\nimport { useLoading } from '../utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n\n/**\n * 图标组件AntdIcon\n */\nconst AntdIcon = ({\n    id,\n    className,\n    mode = 'default',\n    icon,\n    scriptUrl,\n    style,\n    key,\n    nClicks = 0,\n    debounceWait = 0,\n    setProps,\n    ...others\n}) => {\n    const { run: onClick } = useRequest(\n        () => {\n            // 更新nClicks\n            setProps({ nClicks: nClicks + 1 });\n        },\n        {\n            debounceWait: debounceWait,\n            debounceLeading: true,\n            manual: true,\n        }\n    );\n\n    if (icon) {\n        // 内置图标模式\n        if (mode === 'default' || !mode) {\n            return (\n                <span\n                    // 提取具有data-*或aria-*通配格式的属性\n                    {...pickBy(\n                        (_, k) =>\n                            k.startsWith('data-') || k.startsWith('aria-'),\n                        others\n                    )}\n                    id={id}\n                    className={\n                        isString(className)\n                            ? className\n                            : className\n                              ? useCss(className)\n                              : undefined\n                    }\n                    style={\n                        icon.startsWith('fc-') ||\n                        icon.startsWith('md-') ||\n                        icon.startsWith('di-') ||\n                        icon.startsWith('bi-') ||\n                        icon.startsWith('bs-') ||\n                        icon.startsWith('gi-') ||\n                        icon.startsWith('si-')\n                            ? {\n                                  ...{\n                                      verticalAlign: 'middle',\n                                      userSelect: 'none',\n                                  },\n                                  ...style,\n                              }\n                            : { ...{ userSelect: 'none' }, ...style }\n                    }\n                    key={key}\n                    onClick={onClick}\n                    data-dash-is-loading={useLoading()}\n                >\n                    {str2Icon.get(icon)}\n                </span>\n            );\n        }\n        // 阿里巴巴矢量图标模式\n        else if (mode === 'iconfont') {\n            const IconFont = createFromIconfontCN({\n                scriptUrl: scriptUrl,\n            });\n            return (\n                <span\n                    // 提取具有data-*或aria-*通配格式的属性\n                    {...pickBy(\n                        (_, k) =>\n                            k.startsWith('data-') || k.startsWith('aria-'),\n                        others\n                    )}\n                    id={id}\n                    className={\n                        isString(className)\n                            ? className\n                            : className\n                              ? useCss(className)\n                              : undefined\n                    }\n                    style={{ ...{ userSelect: 'none' }, ...style }}\n                    key={key}\n                    onClick={onClick}\n                    data-dash-is-loading={useLoading()}\n                >\n                    <IconFont type={icon} />\n                </span>\n            );\n        }\n    }\n    return null;\n};\n\nAntdIcon.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 图标调用模式，可选项有`'default'`（内置图标）、`'iconfont'`（阿里巴巴矢量图标）\n     * 默认值：`'default'`\n     */\n    mode: PropTypes.oneOf(['default', 'iconfont']),\n\n    /**\n     * 当`mode='default'`时，设置内置图标名称，当`mode='iconfont'`时，设置自定义源图标名称\n     */\n    icon: PropTypes.string,\n\n    /**\n     * 当`mode='iconfont'`时，设置单个或多个阿里巴巴矢量图标源（在iconfont.cn上制作）\n     */\n    scriptUrl: PropTypes.oneOfType([\n        PropTypes.string,\n        PropTypes.arrayOf(PropTypes.string),\n    ]),\n\n    /**\n     * 图标累计点击次数，用于监听图标点击行为\n     * 默认值：`0`\n     */\n    nClicks: PropTypes.number,\n\n    /**\n     * 图标点击事件监听防抖延时，单位：毫秒\n     * 默认值：`0`\n     */\n    debounceWait: PropTypes.number,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdIcon;\n"
  },
  {
    "path": "src/lib/components/general/typography/AntdParagraph.react.js",
    "content": "// react核心\nimport { useContext } from 'react';\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Typography, ConfigProvider } from 'antd';\n// 辅助库\nimport { str2Locale } from '../../locales.react';\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { parseChildrenToArray, useLoading } from '../../utils';\n// 自定义hooks\nimport useCss from '../../../hooks/useCss';\n// 自定义上下文\nimport PropsContext from '../../../contexts/PropsContext';\n\nconst { Paragraph } = Typography;\n\n/**\n * 段落组件AntdParagraph\n */\nconst AntdParagraph = ({\n    id,\n    children,\n    className,\n    style,\n    key,\n    locale = 'zh-cn',\n    code,\n    copyable,\n    strikethrough,\n    disabled,\n    mark,\n    strong,\n    italic,\n    underline,\n    type,\n    ellipsis = false,\n    setProps,\n    ...others\n}) => {\n    const context = useContext(PropsContext);\n    locale = (context && context.locale) || locale;\n\n    children = parseChildrenToArray(children);\n\n    return (\n        <ConfigProvider locale={str2Locale.get(locale)}>\n            <Paragraph\n                // 提取具有data-*或aria-*通配格式的属性\n                {...pickBy(\n                    (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                    others\n                )}\n                id={id}\n                className={\n                    isString(className)\n                        ? className\n                        : className\n                          ? useCss(className)\n                          : undefined\n                }\n                style={style}\n                key={key}\n                code={code}\n                copyable={copyable}\n                delete={strikethrough}\n                disabled={disabled}\n                mark={mark}\n                strong={strong}\n                italic={italic}\n                underline={underline}\n                type={type}\n                ellipsis={ellipsis}\n                data-dash-is-loading={useLoading()}\n            >\n                {children}\n            </Paragraph>\n        </ConfigProvider>\n    );\n};\n\nAntdParagraph.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，内嵌元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n     * 默认值：`'zh-cn'`\n     */\n    locale: PropTypes.oneOf(['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']),\n\n    /**\n     * 是否渲染为代码形式\n     */\n    code: PropTypes.bool,\n\n    /**\n     * 是否开启快捷复制功能\n     */\n    copyable: PropTypes.bool,\n\n    /**\n     * 是否渲染为删除线形式\n     */\n    strikethrough: PropTypes.bool,\n\n    /**\n     * 是否渲染为禁用形式\n     */\n    disabled: PropTypes.bool,\n\n    /**\n     * 是否渲染为高亮形式\n     */\n    mark: PropTypes.bool,\n\n    /**\n     * 是否渲染为加粗形式\n     */\n    strong: PropTypes.bool,\n\n    /**\n     * 是否渲染为斜体形式\n     */\n    italic: PropTypes.bool,\n\n    /**\n     * 是否渲染为下划线形式\n     */\n    underline: PropTypes.bool,\n\n    /**\n     * 设置内容特殊状态形式，可选项有`'secondary'`、`'success'`、`'warning'`、`'danger'`\n     */\n    type: PropTypes.oneOf(['secondary', 'success', 'warning', 'danger']),\n\n    /**\n     * 配置内容省略相关功能，设置为`false`则不开启\n     * 默认值：`false`\n     */\n    ellipsis: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.exact({\n            /**\n             * 是否可展开\n             */\n            expandable: PropTypes.oneOfType([\n                PropTypes.bool,\n                PropTypes.oneOf(['collapsible']),\n            ]),\n            /**\n             * 最大显示行数\n             */\n            rows: PropTypes.number,\n            /**\n             * 自定义内容省略后缀\n             */\n            suffix: PropTypes.string,\n            /**\n             * 组件型，自定义内容展开控件\n             */\n            symbol: PropTypes.node,\n        }),\n    ]),\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdParagraph;\n"
  },
  {
    "path": "src/lib/components/general/typography/AntdText.react.js",
    "content": "// react核心\nimport { useContext } from 'react';\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Typography, ConfigProvider } from 'antd';\n// 辅助库\nimport { str2Locale } from '../../locales.react';\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { parseChildrenToArray, useLoading } from '../../utils';\n// 自定义hooks\nimport useCss from '../../../hooks/useCss';\n// 自定义上下文\nimport PropsContext from '../../../contexts/PropsContext';\n\nconst { Text } = Typography;\n\n/**\n * 文字组件AntdText\n */\nconst AntdText = ({\n    id,\n    children,\n    className,\n    style,\n    key,\n    locale = 'zh-cn',\n    code,\n    copyable,\n    strikethrough,\n    disabled,\n    mark,\n    strong,\n    italic,\n    underline,\n    type,\n    keyboard,\n    ellipsis = false,\n    setProps,\n    ...others\n}) => {\n    const context = useContext(PropsContext);\n    locale = (context && context.locale) || locale;\n\n    children = parseChildrenToArray(children);\n\n    return (\n        <ConfigProvider locale={str2Locale.get(locale)}>\n            <Text\n                // 提取具有data-*或aria-*通配格式的属性\n                {...pickBy(\n                    (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                    others\n                )}\n                id={id}\n                className={\n                    isString(className)\n                        ? className\n                        : className\n                          ? useCss(className)\n                          : undefined\n                }\n                style={style}\n                key={key}\n                code={code}\n                copyable={copyable}\n                delete={strikethrough}\n                disabled={disabled}\n                mark={mark}\n                strong={strong}\n                italic={italic}\n                underline={underline}\n                type={type}\n                keyboard={keyboard}\n                ellipsis={ellipsis}\n                data-dash-is-loading={useLoading()}\n            >\n                {children}\n            </Text>\n        </ConfigProvider>\n    );\n};\n\nAntdText.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，内嵌元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n     * 默认值：`'zh-cn'`\n     */\n    locale: PropTypes.oneOf(['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']),\n\n    /**\n     * 是否渲染为代码形式\n     */\n    code: PropTypes.bool,\n\n    /**\n     * 是否开启快捷复制功能\n     */\n    copyable: PropTypes.bool,\n\n    /**\n     * 是否渲染为删除线形式\n     */\n    strikethrough: PropTypes.bool,\n\n    /**\n     * 是否渲染为禁用形式\n     */\n    disabled: PropTypes.bool,\n\n    /**\n     * 是否渲染为高亮形式\n     */\n    mark: PropTypes.bool,\n\n    /**\n     * 是否渲染为加粗形式\n     */\n    strong: PropTypes.bool,\n\n    /**\n     * 是否渲染为斜体形式\n     */\n    italic: PropTypes.bool,\n\n    /**\n     * 是否渲染为下划线形式\n     */\n    underline: PropTypes.bool,\n\n    /**\n     * 是否渲染为键盘形式\n     */\n    keyboard: PropTypes.bool,\n\n    /**\n     * 设置内容特殊状态形式，可选项有`'secondary'`、`'success'`、`'warning'`、`'danger'`\n     */\n    type: PropTypes.oneOf(['secondary', 'success', 'warning', 'danger']),\n\n    /**\n     * 配置内容省略相关功能，设置为`false`则不开启\n     * 默认值：`false`\n     */\n    ellipsis: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.exact({\n            /**\n             * 自定义内容省略后缀\n             */\n            suffix: PropTypes.string,\n        }),\n    ]),\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdText;\n"
  },
  {
    "path": "src/lib/components/general/typography/AntdTitle.react.js",
    "content": "// react核心\nimport { useContext } from 'react';\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Typography, ConfigProvider } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { str2Locale } from '../../locales.react';\nimport { parseChildrenToArray, useLoading } from '../../utils';\n// 自定义hooks\nimport useCss from '../../../hooks/useCss';\n// 自定义上下文\nimport PropsContext from '../../../contexts/PropsContext';\n\nconst { Title } = Typography;\n\n/**\n * 标题组件AntdTitle\n */\nconst AntdTitle = ({\n    id,\n    children,\n    className,\n    style,\n    key,\n    locale = 'zh-cn',\n    level = 1,\n    code,\n    copyable,\n    strikethrough,\n    disabled,\n    mark,\n    strong,\n    italic,\n    underline,\n    type,\n    keyboard,\n    setProps,\n    ...others\n}) => {\n    const context = useContext(PropsContext);\n    locale = (context && context.locale) || locale;\n\n    children = parseChildrenToArray(children);\n\n    return (\n        <ConfigProvider locale={str2Locale.get(locale)}>\n            <Title\n                // 提取具有data-*或aria-*通配格式的属性\n                {...pickBy(\n                    (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                    others\n                )}\n                id={id}\n                className={\n                    isString(className)\n                        ? className\n                        : className\n                          ? useCss(className)\n                          : undefined\n                }\n                style={style}\n                key={key}\n                level={level}\n                code={code}\n                copyable={copyable}\n                delete={strikethrough}\n                disabled={disabled}\n                mark={mark}\n                strong={strong}\n                italic={italic}\n                underline={underline}\n                type={type}\n                keyboard={keyboard}\n                data-dash-is-loading={useLoading()}\n            >\n                {children}\n            </Title>\n        </ConfigProvider>\n    );\n};\n\nAntdTitle.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，内嵌元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n     * 默认值：`'zh-cn'`\n     */\n    locale: PropTypes.oneOf(['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']),\n\n    /**\n     * 标题级别，可选项有`1`、`2`、`3`、`4`、`5`\n     * 默认值：`1`\n     */\n    level: PropTypes.number,\n\n    /**\n     * 是否渲染为代码形式\n     */\n    code: PropTypes.bool,\n\n    /**\n     * 是否开启快捷复制功能\n     */\n    copyable: PropTypes.bool,\n\n    /**\n     * 是否渲染为删除线形式\n     */\n    strikethrough: PropTypes.bool,\n\n    /**\n     * 是否渲染为禁用形式\n     */\n    disabled: PropTypes.bool,\n\n    /**\n     * 是否渲染为高亮形式\n     */\n    mark: PropTypes.bool,\n\n    /**\n     * 是否渲染为加粗形式\n     */\n    strong: PropTypes.bool,\n\n    /**\n     * 是否渲染为斜体形式\n     */\n    italic: PropTypes.bool,\n\n    /**\n     * 是否渲染为下划线形式\n     */\n    underline: PropTypes.bool,\n\n    /**\n     * 是否渲染为键盘形式\n     */\n    keyboard: PropTypes.bool,\n\n    /**\n     * 设置内容特殊状态形式，可选项有`'secondary'`、`'success'`、`'warning'`、`'danger'`\n     */\n    type: PropTypes.oneOf(['secondary', 'success', 'warning', 'danger']),\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdTitle;\n"
  },
  {
    "path": "src/lib/components/icons.react.js",
    "content": "import {\n    ToolTwoTone,\n    NotificationTwoTone,\n    HourglassTwoTone,\n    CloudTwoTone,\n    ApiTwoTone,\n    SlidersTwoTone,\n    FundTwoTone,\n    BoxPlotTwoTone,\n    PieChartTwoTone,\n    HighlightTwoTone,\n    DeleteTwoTone,\n    EditTwoTone,\n    CheckSquareTwoTone,\n    CheckCircleTwoTone,\n    CloseSquareTwoTone,\n    CloseCircleTwoTone,\n    ExclamationCircleTwoTone,\n    InfoCircleTwoTone,\n    MinusSquareTwoTone,\n    PlusSquareTwoTone,\n    MinusCircleTwoTone,\n    PlusCircleTwoTone,\n    QuestionCircleTwoTone,\n    RightSquareTwoTone,\n    LeftSquareTwoTone,\n    DownSquareTwoTone,\n    UpSquareTwoTone,\n    DownCircleTwoTone,\n    UpCircleTwoTone,\n    RightCircleTwoTone,\n    LeftCircleTwoTone,\n    StarOutlined,\n    SkinOutlined,\n    SmileOutlined,\n    InsuranceOutlined,\n    BlockOutlined,\n    BankOutlined,\n    SketchOutlined,\n    CheckOutlined,\n    CloseOutlined,\n    MinusOutlined,\n    PlusOutlined,\n    QuestionOutlined,\n    FullscreenOutlined,\n    DownOutlined,\n    UpOutlined,\n    LeftOutlined,\n    RightOutlined,\n    ArrowDownOutlined,\n    ArrowUpOutlined,\n    ArrowLeftOutlined,\n    ArrowRightOutlined,\n    ManOutlined,\n    WomanOutlined,\n    UserDeleteOutlined,\n    UserAddOutlined,\n    TrophyOutlined,\n    SelectOutlined,\n    ThunderboltOutlined,\n    TagsOutlined,\n    TagOutlined,\n    SoundOutlined,\n    ShoppingCartOutlined,\n    RobotOutlined,\n    PushpinOutlined,\n    PrinterOutlined,\n    PictureOutlined,\n    PhoneOutlined,\n    PartitionOutlined,\n    MoreOutlined,\n    MonitorOutlined,\n    MoneyCollectOutlined,\n    MobileOutlined,\n    LinkOutlined,\n    LayoutOutlined,\n    IdcardOutlined,\n    GiftOutlined,\n    FunnelPlotOutlined,\n    FundProjectionScreenOutlined,\n    ForkOutlined,\n    FolderOpenOutlined,\n    FolderOutlined,\n    FolderAddOutlined,\n    FlagOutlined,\n    FireOutlined,\n    FilterOutlined,\n    FileZipOutlined,\n    FileWordOutlined,\n    FileTextOutlined,\n    FileSyncOutlined,\n    FileProtectOutlined,\n    FilePdfOutlined,\n    FileMarkdownOutlined,\n    FileImageOutlined,\n    FileOutlined,\n    FileDoneOutlined,\n    FileAddOutlined,\n    FieldTimeOutlined,\n    FieldStringOutlined,\n    FieldNumberOutlined,\n    FieldBinaryOutlined,\n    EyeInvisibleOutlined,\n    EyeOutlined,\n    ExperimentOutlined,\n    ExceptionOutlined,\n    EnvironmentOutlined,\n    DownloadOutlined,\n    DollarOutlined,\n    EuroOutlined,\n    LikeOutlined,\n    DislikeOutlined,\n    DisconnectOutlined,\n    DesktopOutlined,\n    DeploymentUnitOutlined,\n    CrownOutlined,\n    CoffeeOutlined,\n    CloudSyncOutlined,\n    CarryOutOutlined,\n    CarOutlined,\n    BulbOutlined,\n    BuildOutlined,\n    BugOutlined,\n    BranchesOutlined,\n    BarcodeOutlined,\n    AimOutlined,\n    IssuesCloseOutlined,\n    EllipsisOutlined,\n    HomeOutlined,\n    FundOutlined,\n    RadarChartOutlined,\n    BarChartOutlined,\n    PieChartOutlined,\n    DotChartOutlined,\n    LineChartOutlined,\n    ApartmentOutlined,\n    AppstoreOutlined,\n    AppstoreAddOutlined,\n    BellOutlined,\n    CalculatorOutlined,\n    DatabaseOutlined,\n    CalendarOutlined,\n    HistoryOutlined,\n    SearchOutlined,\n    FileSearchOutlined,\n    CloudDownloadOutlined,\n    CloudServerOutlined,\n    CloudUploadOutlined,\n    SwapOutlined,\n    RollbackOutlined,\n    LoginOutlined,\n    TableOutlined,\n    LogoutOutlined,\n    MenuFoldOutlined,\n    MenuUnfoldOutlined,\n    FullscreenExitOutlined,\n    QuestionCircleOutlined,\n    PlusCircleOutlined,\n    MinusCircleOutlined,\n    InfoCircleOutlined,\n    ExclamationCircleOutlined,\n    CloseCircleOutlined,\n    CheckCircleOutlined,\n    ClockCircleOutlined,\n    StopOutlined,\n    EditOutlined,\n    DeleteOutlined,\n    HighlightOutlined,\n    RedoOutlined,\n    UndoOutlined,\n    ZoomInOutlined,\n    ZoomOutOutlined,\n    SortAscendingOutlined,\n    SortDescendingOutlined,\n    AreaChartOutlined,\n    BoxPlotOutlined,\n    FallOutlined,\n    RiseOutlined,\n    StockOutlined,\n    GithubOutlined,\n    WeiboCircleOutlined,\n    AlipayOutlined,\n    AlipayCircleOutlined,\n    AndroidOutlined,\n    AppleOutlined,\n    WechatOutlined,\n    WechatWorkOutlined,\n    OpenAIOutlined,\n    BilibiliOutlined,\n    TikTokOutlined,\n    JavaScriptOutlined,\n    PythonOutlined,\n    DockerOutlined,\n    AccountBookOutlined,\n    AlertOutlined,\n    ApiOutlined,\n    BarsOutlined,\n    BookOutlined,\n    CameraOutlined,\n    ClearOutlined,\n    CloudOutlined,\n    ClusterOutlined,\n    CodeOutlined,\n    CommentOutlined,\n    CompassOutlined,\n    ConsoleSqlOutlined,\n    ControlOutlined,\n    DashboardOutlined,\n    ExportOutlined,\n    ImportOutlined,\n    FunctionOutlined,\n    GlobalOutlined,\n    HourglassOutlined,\n    KeyOutlined,\n    LoadingOutlined,\n    LockOutlined,\n    MailOutlined,\n    MenuOutlined,\n    NotificationOutlined,\n    NumberOutlined,\n    PoweroffOutlined,\n    QrcodeOutlined,\n    ReadOutlined,\n    ReloadOutlined,\n    SaveOutlined,\n    RocketOutlined,\n    ScheduleOutlined,\n    SendOutlined,\n    SettingOutlined,\n    SyncOutlined,\n    TeamOutlined,\n    ToolOutlined,\n    UnlockOutlined,\n    UserOutlined,\n    CaretUpOutlined,\n    CaretDownOutlined,\n    CaretLeftOutlined,\n    CaretRightOutlined,\n    UpCircleOutlined,\n    DownCircleOutlined,\n    LeftCircleOutlined,\n    RightCircleOutlined,\n    EnterOutlined,\n    RetweetOutlined,\n    WarningOutlined,\n    FormOutlined,\n    CopyOutlined,\n    ScissorOutlined,\n    SnippetsOutlined,\n    DiffOutlined,\n    OrderedListOutlined,\n    UnorderedListOutlined,\n    SlidersOutlined,\n    AuditOutlined,\n    BorderOutlined,\n    ContactsOutlined,\n    ContainerOutlined,\n    DeliveredProcedureOutlined,\n    PauseOutlined,\n    StepBackwardOutlined,\n    StepForwardOutlined,\n    FastForwardOutlined,\n    FastBackwardOutlined,\n    SunOutlined,\n    MoonOutlined,\n} from '@ant-design/icons';\nimport {\n    BsAlarm,\n    BsEnvelope,\n    BsEnvelopeOpen,\n    BsLink,\n    BsLink45Deg,\n    BsListCheck,\n    BsListTask,\n} from 'react-icons/bs/index.esm';\nimport {\n    BiAnalyse,\n    BiTable,\n    BiLayer,\n    BiLayerMinus,\n    BiLayerPlus,\n} from 'react-icons/bi/index.esm';\nimport {\n    DiPython,\n    DiLinux,\n    DiChrome,\n    DiDatabase,\n    DiFirefox,\n    DiMarkdown,\n    DiPostgresql,\n    DiTerminal,\n    DiWindows,\n} from 'react-icons/di/index.esm';\nimport {\n    FcAdvertising,\n    FcApproval,\n    FcBookmark,\n    FcBearish,\n    FcBullish,\n    FcCalculator,\n    FcCalendar,\n    FcCommandLine,\n    FcDataSheet,\n    FcElectronics,\n    FcFolder,\n    FcGlobe,\n    FcInspection,\n    FcOk,\n    FcOpenedFolder,\n    FcOrgUnit,\n    FcParallelTasks,\n    FcPlanner,\n    FcNegativeDynamic,\n    FcPositiveDynamic,\n    FcSafe,\n    FcSerialTasks,\n    FcSearch,\n    FcStatistics,\n    FcSupport,\n    FcSynchronize,\n    FcTodoList,\n    FcWorkflow,\n    FcComboChart,\n    FcAreaChart,\n    FcBarChart,\n    FcDoughnutChart,\n    FcFlowChart,\n    FcLineChart,\n    FcPieChart,\n    FcScatterPlot,\n    FcRadarPlot,\n    FcAbout,\n    FcAcceptDatabase,\n    FcAddDatabase,\n    FcAlphabeticalSortingAz,\n    FcAlphabeticalSortingZa,\n    FcAutomatic,\n    FcBinoculars,\n    FcBriefcase,\n    FcCancel,\n    FcCheckmark,\n    FcDataBackup,\n    FcDataConfiguration,\n    FcDataEncryption,\n    FcConferenceCall,\n    FcDataProtection,\n    FcDatabase,\n    FcDeleteDatabase,\n    FcDeployment,\n    FcDocument,\n    FcDownload,\n    FcEmptyTrash,\n    FcExport,\n    FcFaq,\n    FcFile,\n    FcFinePrint,\n    FcFullTrash,\n    FcGenealogy,\n    FcHighPriority,\n    FcHome,\n    FcIdea,\n    FcImageFile,\n    FcImport,\n    FcInfo,\n    FcLikePlaceholder,\n    FcLike,\n    FcList,\n    FcLowPriority,\n    FcMenu,\n    FcMindMap,\n    FcMultipleInputs,\n    FcNumericalSorting12,\n    FcNumericalSorting21,\n    FcOrganization,\n    FcOvertime,\n    FcPlus,\n    FcProcess,\n    FcQuestions,\n    FcRules,\n    FcServices,\n    FcSettings,\n    FcShare,\n    FcSignature,\n    FcSurvey,\n    FcTemplate,\n    FcTimeline,\n    FcTreeStructure,\n    FcUpload,\n    FcViewDetails,\n    FcVlc,\n} from 'react-icons/fc/index.esm';\nimport {\n    MdAccountCircle,\n    MdAlarm,\n    MdAlarmAdd,\n    MdAlarmOff,\n    MdAlarmOn,\n    MdAssessment,\n    MdAssignment,\n    MdBugReport,\n    MdBuild,\n    MdCode,\n    MdDashboard,\n    MdDelete,\n    MdDeleteForever,\n    MdDescription,\n    MdEvent,\n    MdExitToApp,\n    MdExplore,\n    MdExtension,\n    MdFavorite,\n    MdFavoriteBorder,\n    MdFindInPage,\n    MdFingerprint,\n    MdGTranslate,\n    MdGetApp,\n    MdHelp,\n    MdHelpOutline,\n    MdHighlightOff,\n    MdHistory,\n    MdHome,\n    MdHourglassEmpty,\n    MdInfo,\n    MdInfoOutline,\n    MdInput,\n    MdLabel,\n    MdLabelOutline,\n    MdLaunch,\n    MdLightbulbOutline,\n    MdList,\n    MdLockOpen,\n    MdLockOutline,\n    MdNoteAdd,\n    MdOpacity,\n    MdPowerSettingsNew,\n    MdQueryBuilder,\n    MdRestore,\n    MdSchedule,\n    MdSearch,\n    MdSettings,\n    MdSubject,\n    MdSupervisorAccount,\n    MdSwapHoriz,\n    MdSwapVert,\n    MdThumbDown,\n    MdThumbUp,\n    MdTimeline,\n    MdToc,\n    MdTranslate,\n    MdTrendingDown,\n    MdTrendingFlat,\n    MdTrendingUp,\n    MdUpdate,\n    MdVerifiedUser,\n    MdVisibility,\n    MdVisibilityOff,\n    MdAddAlert,\n    MdEqualizer,\n    MdLibraryAdd,\n    MdLibraryBooks,\n    MdNotInterested,\n    MdEmail,\n    MdMailOutline,\n    MdLocationOn,\n    MdAddCircle,\n    MdAddCircleOutline,\n    MdAdd,\n    MdAddBox,\n    MdBackspace,\n    MdBlock,\n    MdClear,\n    MdContentCopy,\n    MdContentCut,\n    MdContentPaste,\n    MdCreate,\n    MdDrafts,\n    MdFlag,\n    MdForward,\n    MdGesture,\n    MdLink,\n    MdLowPriority,\n    MdRemove,\n    MdRemoveCircle,\n    MdRemoveCircleOutline,\n    MdSave,\n    MdStorage,\n    MdAttachFile,\n    MdFormatQuote,\n    MdFunctions,\n    MdInsertChart,\n    MdCloudDone,\n    MdCloudDownload,\n    MdCloudQueue,\n    MdCloudUpload,\n    MdCreateNewFolder,\n    MdFileDownload,\n    MdFileUpload,\n    MdTimer,\n    MdTimerOff,\n    MdTransform,\n    MdTune,\n    MdEditLocation,\n    MdLayers,\n    MdLayersClear,\n    MdPinDrop,\n    MdNotifications,\n    MdPlusOne,\n    MdPeople,\n    MdStar,\n    MdStarBorder,\n    MdStarHalf,\n} from 'react-icons/md/index.esm';\nimport { ImEarth, ImSphere } from 'react-icons/im/index.esm';\nimport { GiMeshNetwork } from 'react-icons/gi/index.esm';\nimport {\n    PiCircle,\n    PiPolygon,\n    PiMapPin,\n    PiLineSegment,\n    PiLineSegments,\n    PiTrashSimple,\n    PiTrash,\n    PiRuler,\n    PiSelection,\n    PiSelectionSlash,\n    PiSquareSplitHorizontal,\n    PiSquareSplitVertical,\n    PiStackSimple,\n    PiStack,\n    PiNavigationArrow,\n    PiMapTrifold,\n    PiInfo,\n    PiLockKeyOpen,\n    PiLockKey,\n    PiGear,\n    PiAirplane,\n    PiAnchorSimple,\n    PiArrowArcLeft,\n    PiArrowArcRight,\n    PiArrowClockwise,\n    PiArrowCounterClockwise,\n    PiBarricade,\n    PiBinoculars,\n    PiBoundingBox,\n    PiBroom,\n    PiBuildings,\n    PiCalculator,\n    PiCamera,\n    PiCircuitry,\n    PiClipboard,\n    PiCompass,\n    PiCopy,\n    PiCpu,\n    PiCrosshair,\n    PiCubeFocus,\n    PiCube,\n    PiCursor,\n    PiDatabase,\n    PiEyeSlash,\n    PiEye,\n    PiFaders,\n    PiFloppyDisk,\n    PiDotsThreeVertical,\n    PiDotsThree,\n    PiMathOperations,\n    PiPlus,\n    PiMinus,\n    PiPath,\n} from 'react-icons/pi/index.esm';\nimport { SiGitee } from 'react-icons/si/index.esm';\n\n// vscode中，使用正则查找目标后，按快捷键alt+enter批量选中匹配项\nconst str2Icon = new Map([\n    ['antd-carry-out', <CarryOutOutlined />],\n    ['antd-car', <CarOutlined />],\n    ['antd-bulb', <BulbOutlined />],\n    ['antd-build', <BuildOutlined />],\n    ['antd-bug', <BugOutlined />],\n    ['antd-bar-code', <BarcodeOutlined />],\n    ['antd-branches', <BranchesOutlined />],\n    ['antd-aim', <AimOutlined />],\n    ['antd-issues-close', <IssuesCloseOutlined />],\n    ['antd-ellipsis', <EllipsisOutlined />],\n    ['antd-user', <UserOutlined />],\n    ['antd-unlock', <UnlockOutlined />],\n    ['antd-repair', <ToolOutlined />],\n    ['antd-team', <TeamOutlined />],\n    ['antd-sync', <SyncOutlined />],\n    ['antd-setting', <SettingOutlined />],\n    ['antd-send', <SendOutlined />],\n    ['antd-schedule', <ScheduleOutlined />],\n    ['antd-save', <SaveOutlined />],\n    ['antd-rocket', <RocketOutlined />],\n    ['antd-reload', <ReloadOutlined />],\n    ['antd-read', <ReadOutlined />],\n    ['antd-qrcode', <QrcodeOutlined />],\n    ['antd-power-off', <PoweroffOutlined />],\n    ['antd-number', <NumberOutlined />],\n    ['antd-notification', <NotificationOutlined />],\n    ['antd-menu', <MenuOutlined />],\n    ['antd-mail', <MailOutlined />],\n    ['antd-lock', <LockOutlined />],\n    ['antd-loading', <LoadingOutlined />],\n    ['antd-key', <KeyOutlined />],\n    ['antd-hourglass', <HourglassOutlined />],\n    ['antd-global', <GlobalOutlined />],\n    ['antd-function', <FunctionOutlined />],\n    ['antd-import', <ImportOutlined />],\n    ['antd-export', <ExportOutlined />],\n    ['antd-dashboard', <DashboardOutlined />],\n    ['antd-control', <ControlOutlined />],\n    ['antd-console-sql', <ConsoleSqlOutlined />],\n    ['antd-compass', <CompassOutlined />],\n    ['antd-comment', <CommentOutlined />],\n    ['antd-code', <CodeOutlined />],\n    ['antd-cluster', <ClusterOutlined />],\n    ['antd-clear', <ClearOutlined />],\n    ['antd-camera', <CameraOutlined />],\n    ['antd-book', <BookOutlined />],\n    ['antd-catalog', <BarsOutlined />],\n    ['antd-api', <ApiOutlined />],\n    ['antd-alert', <AlertOutlined />],\n    ['antd-account-book', <AccountBookOutlined />],\n    ['antd-alipay', <AlipayOutlined />],\n    ['antd-alipay-circle', <AlipayCircleOutlined />],\n    ['antd-weibo', <WeiboCircleOutlined />],\n    ['antd-github', <GithubOutlined />],\n    ['antd-android', <AndroidOutlined />],\n    ['antd-apple', <AppleOutlined />],\n    ['antd-wechat', <WechatOutlined />],\n    ['antd-wechat-work', <WechatWorkOutlined />],\n    ['antd-openai', <OpenAIOutlined />],\n    ['antd-bilibili', <BilibiliOutlined />],\n    ['antd-tiktok', <TikTokOutlined />],\n    ['antd-javascript', <JavaScriptOutlined />],\n    ['antd-python', <PythonOutlined />],\n    ['antd-docker', <DockerOutlined />],\n    ['antd-fall', <FallOutlined />],\n    ['antd-rise', <RiseOutlined />],\n    ['antd-stock', <StockOutlined />],\n    ['antd-home', <HomeOutlined />],\n    ['antd-fund', <FundOutlined />],\n    ['antd-area-chart', <AreaChartOutlined />],\n    ['antd-radar-chart', <RadarChartOutlined />],\n    ['antd-bar-chart', <BarChartOutlined />],\n    ['antd-pie-chart', <PieChartOutlined />],\n    ['antd-box-plot', <BoxPlotOutlined />],\n    ['antd-dot-chart', <DotChartOutlined />],\n    ['antd-line-chart', <LineChartOutlined />],\n    ['antd-field-binary', <FieldBinaryOutlined />],\n    ['antd-field-number', <FieldNumberOutlined />],\n    ['antd-field-string', <FieldStringOutlined />],\n    ['antd-field-time', <FieldTimeOutlined />],\n    ['antd-file-add', <FileAddOutlined />],\n    ['antd-file-done', <FileDoneOutlined />],\n    ['antd-file', <FileOutlined />],\n    ['antd-file-image', <FileImageOutlined />],\n    ['antd-file-markdown', <FileMarkdownOutlined />],\n    ['antd-file-pdf', <FilePdfOutlined />],\n    ['antd-file-protect', <FileProtectOutlined />],\n    ['antd-file-sync', <FileSyncOutlined />],\n    ['antd-file-text', <FileTextOutlined />],\n    ['antd-file-word', <FileWordOutlined />],\n    ['antd-file-zip', <FileZipOutlined />],\n    ['antd-filter', <FilterOutlined />],\n    ['antd-fire', <FireOutlined />],\n    ['antd-woman', <WomanOutlined />],\n    ['antd-arrow-up', <ArrowUpOutlined />],\n    ['antd-arrow-down', <ArrowDownOutlined />],\n    ['antd-arrow-left', <ArrowLeftOutlined />],\n    ['antd-arrow-right', <ArrowRightOutlined />],\n    ['antd-flag', <FlagOutlined />],\n    ['antd-user-add', <UserAddOutlined />],\n    ['antd-folder-add', <FolderAddOutlined />],\n    ['antd-man', <ManOutlined />],\n    ['antd-tag', <TagOutlined />],\n    ['antd-folder', <FolderOutlined />],\n    ['antd-user-delete', <UserDeleteOutlined />],\n    ['antd-trophy', <TrophyOutlined />],\n    ['antd-shopping-cart', <ShoppingCartOutlined />],\n    ['antd-folder-open', <FolderOpenOutlined />],\n    ['antd-fork', <ForkOutlined />],\n    ['antd-select', <SelectOutlined />],\n    ['antd-tags', <TagsOutlined />],\n    ['antd-thunderbolt', <ThunderboltOutlined />],\n    ['antd-sound', <SoundOutlined />],\n    ['antd-fund-projection-screen', <FundProjectionScreenOutlined />],\n    ['antd-funnel-plot', <FunnelPlotOutlined />],\n    ['antd-gift', <GiftOutlined />],\n    ['antd-robot', <RobotOutlined />],\n    ['antd-pushpin', <PushpinOutlined />],\n    ['antd-printer', <PrinterOutlined />],\n    ['antd-phone', <PhoneOutlined />],\n    ['antd-picture', <PictureOutlined />],\n    ['antd-idcard', <IdcardOutlined />],\n    ['antd-partition', <PartitionOutlined />],\n    ['antd-monitor', <MonitorOutlined />],\n    ['antd-more', <MoreOutlined />],\n    ['antd-apartment', <ApartmentOutlined />],\n    ['antd-money-collect', <MoneyCollectOutlined />],\n    ['antd-experiment', <ExperimentOutlined />],\n    ['antd-link', <LinkOutlined />],\n    ['antd-mobile', <MobileOutlined />],\n    ['antd-coffee', <CoffeeOutlined />],\n    ['antd-layout', <LayoutOutlined />],\n    ['antd-eye', <EyeOutlined />],\n    ['antd-eye-invisible', <EyeInvisibleOutlined />],\n    ['antd-exception', <ExceptionOutlined />],\n    ['antd-dollar', <DollarOutlined />],\n    ['antd-euro', <EuroOutlined />],\n    ['antd-download', <DownloadOutlined />],\n    ['antd-environment', <EnvironmentOutlined />],\n    ['antd-deployment-unit', <DeploymentUnitOutlined />],\n    ['antd-crown', <CrownOutlined />],\n    ['antd-desktop', <DesktopOutlined />],\n    ['antd-like', <LikeOutlined />],\n    ['antd-dislike', <DislikeOutlined />],\n    ['antd-disconnect', <DisconnectOutlined />],\n    ['antd-app-store', <AppstoreOutlined />],\n    ['antd-app-store-add', <AppstoreAddOutlined />],\n    ['antd-bell', <BellOutlined />],\n    ['antd-calculator', <CalculatorOutlined />],\n    ['antd-calendar', <CalendarOutlined />],\n    ['antd-database', <DatabaseOutlined />],\n    ['antd-history', <HistoryOutlined />],\n    ['antd-search', <SearchOutlined />],\n    ['antd-file-search', <FileSearchOutlined />],\n    ['antd-cloud', <CloudOutlined />],\n    ['antd-cloud-upload', <CloudUploadOutlined />],\n    ['antd-cloud-download', <CloudDownloadOutlined />],\n    ['antd-cloud-server', <CloudServerOutlined />],\n    ['antd-cloud-sync', <CloudSyncOutlined />],\n    ['antd-swap', <SwapOutlined />],\n    ['antd-rollback', <RollbackOutlined />],\n    ['antd-login', <LoginOutlined />],\n    ['antd-logout', <LogoutOutlined />],\n    ['antd-menu-fold', <MenuFoldOutlined />],\n    ['antd-menu-unfold', <MenuUnfoldOutlined />],\n    ['antd-full-screen', <FullscreenOutlined />],\n    ['antd-full-screen-exit', <FullscreenExitOutlined />],\n    ['antd-question-circle', <QuestionCircleOutlined />],\n    ['antd-plus-circle', <PlusCircleOutlined />],\n    ['antd-minus-circle', <MinusCircleOutlined />],\n    ['antd-info-circle', <InfoCircleOutlined />],\n    ['antd-exclamation-circle', <ExclamationCircleOutlined />],\n    ['antd-close-circle', <CloseCircleOutlined />],\n    ['antd-check-circle', <CheckCircleOutlined />],\n    ['antd-clock-circle', <ClockCircleOutlined />],\n    ['antd-stop', <StopOutlined />],\n    ['antd-edit', <EditOutlined />],\n    ['antd-delete', <DeleteOutlined />],\n    ['antd-highlight', <HighlightOutlined />],\n    ['antd-redo', <RedoOutlined />],\n    ['antd-undo', <UndoOutlined />],\n    ['antd-zoom-in', <ZoomInOutlined />],\n    ['antd-zoom-out', <ZoomOutOutlined />],\n    ['antd-sort-ascending', <SortAscendingOutlined />],\n    ['antd-sort-descending', <SortDescendingOutlined />],\n    ['antd-table', <TableOutlined />],\n    ['antd-question', <QuestionOutlined />],\n    ['antd-plus', <PlusOutlined />],\n    ['antd-minus', <MinusOutlined />],\n    ['antd-close', <CloseOutlined />],\n    ['antd-check', <CheckOutlined />],\n    ['antd-sketch', <SketchOutlined />],\n    ['antd-bank', <BankOutlined />],\n    ['antd-block', <BlockOutlined />],\n    ['antd-insurance', <InsuranceOutlined />],\n    ['antd-smile', <SmileOutlined />],\n    ['antd-skin', <SkinOutlined />],\n    ['antd-star', <StarOutlined />],\n    ['antd-right-circle-two-tone', <RightCircleTwoTone />],\n    ['antd-left-circle-two-tone', <LeftCircleTwoTone />],\n    ['antd-up-circle-two-tone', <UpCircleTwoTone />],\n    ['antd-down-circle-two-tone', <DownCircleTwoTone />],\n    ['antd-up-square-two-tone', <UpSquareTwoTone />],\n    ['antd-down-square-two-tone', <DownSquareTwoTone />],\n    ['antd-left-square-two-tone', <LeftSquareTwoTone />],\n    ['antd-right-square-two-tone', <RightSquareTwoTone />],\n    ['antd-question-circle-two-tone', <QuestionCircleTwoTone />],\n    ['antd-plus-circle-two-tone', <PlusCircleTwoTone />],\n    ['antd-minus-circle-two-tone', <MinusCircleTwoTone />],\n    ['antd-plus-square-two-tone', <PlusSquareTwoTone />],\n    ['antd-minus-square-two-tone', <MinusSquareTwoTone />],\n    ['antd-info-circle-two-tone', <InfoCircleTwoTone />],\n    ['antd-exclamation-circle-two-tone', <ExclamationCircleTwoTone />],\n    ['antd-close-circle-two-tone', <CloseCircleTwoTone />],\n    ['antd-close-square-two-tone', <CloseSquareTwoTone />],\n    ['antd-check-circle-two-tone', <CheckCircleTwoTone />],\n    ['antd-check-square-two-tone', <CheckSquareTwoTone />],\n    ['antd-edit-two-tone', <EditTwoTone />],\n    ['antd-delete-two-tone', <DeleteTwoTone />],\n    ['antd-highlight-two-tone', <HighlightTwoTone />],\n    ['antd-pie-chart-two-tone', <PieChartTwoTone />],\n    ['antd-box-chart-two-tone', <BoxPlotTwoTone />],\n    ['antd-fund-two-tone', <FundTwoTone />],\n    ['antd-sliders-two-tone', <SlidersTwoTone />],\n    ['antd-api-two-tone', <ApiTwoTone />],\n    ['antd-cloud-two-tone', <CloudTwoTone />],\n    ['antd-hourglass-two-tone', <HourglassTwoTone />],\n    ['antd-notification-two-tone', <NotificationTwoTone />],\n    ['antd-tool-two-tone', <ToolTwoTone />],\n    ['antd-down', <DownOutlined />],\n    ['antd-up', <UpOutlined />],\n    ['antd-left', <LeftOutlined />],\n    ['antd-right', <RightOutlined />],\n    ['antd-caret-up', <CaretUpOutlined />],\n    ['antd-caret-down', <CaretDownOutlined />],\n    ['antd-caret-left', <CaretLeftOutlined />],\n    ['antd-caret-right', <CaretRightOutlined />],\n    ['antd-up-circle', <UpCircleOutlined />],\n    ['antd-down-circle', <DownCircleOutlined />],\n    ['antd-left-circle', <LeftCircleOutlined />],\n    ['antd-right-circle', <RightCircleOutlined />],\n    ['antd-enter', <EnterOutlined />],\n    ['antd-retweet', <RetweetOutlined />],\n    ['antd-warning', <WarningOutlined />],\n    ['antd-form', <FormOutlined />],\n    ['antd-copy', <CopyOutlined />],\n    ['antd-scissor', <ScissorOutlined />],\n    ['antd-snippets', <SnippetsOutlined />],\n    ['antd-diff', <DiffOutlined />],\n    ['antd-ordered-list', <OrderedListOutlined />],\n    ['antd-unordered-list', <UnorderedListOutlined />],\n    ['antd-sliders', <SlidersOutlined />],\n    ['antd-audit', <AuditOutlined />],\n    ['antd-border', <BorderOutlined />],\n    ['antd-contacts', <ContactsOutlined />],\n    ['antd-container', <ContainerOutlined />],\n    ['antd-delivered-procedure', <DeliveredProcedureOutlined />],\n    ['antd-pause', <PauseOutlined />],\n    ['antd-step-backward', <StepBackwardOutlined />],\n    ['antd-step-forward', <StepForwardOutlined />],\n    ['antd-fast-forward', <FastForwardOutlined />],\n    ['antd-fast-backward', <FastBackwardOutlined />],\n    ['antd-sun', <SunOutlined />],\n    ['antd-moon', <MoonOutlined />],\n    ['md-star-half', <MdStarHalf />],\n    ['md-star-border', <MdStarBorder />],\n    ['md-star', <MdStar />],\n    ['md-people', <MdPeople />],\n    ['md-plus-one', <MdPlusOne />],\n    ['md-notifications', <MdNotifications />],\n    ['md-pin-drop', <MdPinDrop />],\n    ['md-layers-clear', <MdLayersClear />],\n    ['md-layers', <MdLayers />],\n    ['md-edit-location', <MdEditLocation />],\n    ['md-tune', <MdTune />],\n    ['md-transform', <MdTransform />],\n    ['md-timer-off', <MdTimerOff />],\n    ['md-timer', <MdTimer />],\n    ['md-file-upload', <MdFileUpload />],\n    ['md-file-download', <MdFileDownload />],\n    ['md-create-new-folder', <MdCreateNewFolder />],\n    ['md-cloud-upload', <MdCloudUpload />],\n    ['md-cloud-queue', <MdCloudQueue />],\n    ['md-cloud-download', <MdCloudDownload />],\n    ['md-cloud-done', <MdCloudDone />],\n    ['md-insert-chart', <MdInsertChart />],\n    ['md-functions', <MdFunctions />],\n    ['md-format-quote', <MdFormatQuote />],\n    ['md-attach-file', <MdAttachFile />],\n    ['md-storage', <MdStorage />],\n    ['md-save', <MdSave />],\n    ['md-remove-circle-outline', <MdRemoveCircleOutline />],\n    ['md-remove-circle', <MdRemoveCircle />],\n    ['md-remove', <MdRemove />],\n    ['md-low-priority', <MdLowPriority />],\n    ['md-link', <MdLink />],\n    ['md-gesture', <MdGesture />],\n    ['md-forward', <MdForward />],\n    ['md-flag', <MdFlag />],\n    ['md-drafts', <MdDrafts />],\n    ['md-create', <MdCreate />],\n    ['md-content-paste', <MdContentPaste />],\n    ['md-content-cut', <MdContentCut />],\n    ['md-content-copy', <MdContentCopy />],\n    ['md-clear', <MdClear />],\n    ['md-block', <MdBlock />],\n    ['md-backspace', <MdBackspace />],\n    ['md-add-box', <MdAddBox />],\n    ['md-add', <MdAdd />],\n    ['md-add-circle-outline', <MdAddCircleOutline />],\n    ['md-add-circle', <MdAddCircle />],\n    ['md-location-on', <MdLocationOn />],\n    ['md-mail-outline', <MdMailOutline />],\n    ['md-email', <MdEmail />],\n    ['md-not-interested', <MdNotInterested />],\n    ['md-library-books', <MdLibraryBooks />],\n    ['md-library-add', <MdLibraryAdd />],\n    ['md-equalizer', <MdEqualizer />],\n    ['md-add-alert', <MdAddAlert />],\n    ['md-visibility-off', <MdVisibilityOff />],\n    ['md-visibility', <MdVisibility />],\n    ['md-verified-user', <MdVerifiedUser />],\n    ['md-update', <MdUpdate />],\n    ['md-trending-up', <MdTrendingUp />],\n    ['md-trending-flat', <MdTrendingFlat />],\n    ['md-trending-down', <MdTrendingDown />],\n    ['md-translate', <MdTranslate />],\n    ['md-toc', <MdToc />],\n    ['md-timeline', <MdTimeline />],\n    ['md-thumb-up', <MdThumbUp />],\n    ['md-thumb-down', <MdThumbDown />],\n    ['md-swap-vert', <MdSwapVert />],\n    ['md-swap-horiz', <MdSwapHoriz />],\n    ['md-supervisor-account', <MdSupervisorAccount />],\n    ['md-subject', <MdSubject />],\n    ['md-settings', <MdSettings />],\n    ['md-search', <MdSearch />],\n    ['md-schedule', <MdSchedule />],\n    ['md-restore', <MdRestore />],\n    ['md-query-builder', <MdQueryBuilder />],\n    ['md-power-settings-new', <MdPowerSettingsNew />],\n    ['md-opacity', <MdOpacity />],\n    ['md-note-add', <MdNoteAdd />],\n    ['md-lock-outline', <MdLockOutline />],\n    ['md-lock-open', <MdLockOpen />],\n    ['md-list', <MdList />],\n    ['md-lightbulb-outline', <MdLightbulbOutline />],\n    ['md-launch', <MdLaunch />],\n    ['md-label-outline', <MdLabelOutline />],\n    ['md-label', <MdLabel />],\n    ['md-input', <MdInput />],\n    ['md-info-outline', <MdInfoOutline />],\n    ['md-info', <MdInfo />],\n    ['md-hourglass', <MdHourglassEmpty />],\n    ['md-home', <MdHome />],\n    ['md-history', <MdHistory />],\n    ['md-highlight-off', <MdHighlightOff />],\n    ['md-help-outline', <MdHelpOutline />],\n    ['md-help', <MdHelp />],\n    ['md-get-app', <MdGetApp />],\n    ['md-translate', <MdGTranslate />],\n    ['md-fingerprint', <MdFingerprint />],\n    ['md-findIn-page', <MdFindInPage />],\n    ['md-favorite-border', <MdFavoriteBorder />],\n    ['md-favorite', <MdFavorite />],\n    ['md-extension', <MdExtension />],\n    ['md-explore', <MdExplore />],\n    ['md-exit-to-app', <MdExitToApp />],\n    ['md-event', <MdEvent />],\n    ['md-description', <MdDescription />],\n    ['md-delete-forever', <MdDeleteForever />],\n    ['md-delete', <MdDelete />],\n    ['md-dashboard', <MdDashboard />],\n    ['md-code', <MdCode />],\n    ['md-build', <MdBuild />],\n    ['md-bug-report', <MdBugReport />],\n    ['md-assignment', <MdAssignment />],\n    ['md-assessment', <MdAssessment />],\n    ['md-alarm-on', <MdAlarmOn />],\n    ['md-alarm-off', <MdAlarmOff />],\n    ['md-alarm-add', <MdAlarmAdd />],\n    ['md-alarm', <MdAlarm />],\n    ['md-account-circle', <MdAccountCircle />],\n    ['fc-vlc', <FcVlc />],\n    ['fc-view-details', <FcViewDetails />],\n    ['fc-upload', <FcUpload />],\n    ['fc-tree-structure', <FcTreeStructure />],\n    ['fc-timeline', <FcTimeline />],\n    ['fc-template', <FcTemplate />],\n    ['fc-survey', <FcSurvey />],\n    ['fc-signature', <FcSignature />],\n    ['fc-share', <FcShare />],\n    ['fc-services', <FcServices />],\n    ['fc-rules', <FcRules />],\n    ['fc-questions', <FcQuestions />],\n    ['fc-process', <FcProcess />],\n    ['fc-plus', <FcPlus />],\n    ['fc-overtime', <FcOvertime />],\n    ['fc-organization', <FcOrganization />],\n    ['fc-numerical-sorting21', <FcNumericalSorting21 />],\n    ['fc-numerical-sorting12', <FcNumericalSorting12 />],\n    ['fc-multiple-inputs', <FcMultipleInputs />],\n    ['fc-mind-map', <FcMindMap />],\n    ['fc-menu', <FcMenu />],\n    ['fc-list', <FcList />],\n    ['fc-like', <FcLike />],\n    ['fc-like-placeholder', <FcLikePlaceholder />],\n    ['fc-info', <FcInfo />],\n    ['fc-import', <FcImport />],\n    ['fc-image-file', <FcImageFile />],\n    ['fc-idea', <FcIdea />],\n    ['fc-home', <FcHome />],\n    ['fc-high-priority', <FcHighPriority />],\n    ['fc-low-priority', <FcLowPriority />],\n    ['fc-genealogy', <FcGenealogy />],\n    ['fc-full-trash', <FcFullTrash />],\n    ['fc-document-search', <FcFinePrint />],\n    ['fc-file', <FcFile />],\n    ['fc-faq', <FcFaq />],\n    ['fc-export', <FcExport />],\n    ['fc-empty-trash', <FcEmptyTrash />],\n    ['fc-download', <FcDownload />],\n    ['fc-document', <FcDocument />],\n    ['fc-deployment', <FcDeployment />],\n    ['fc-delete-database', <FcDeleteDatabase />],\n    ['fc-conference-call', <FcConferenceCall />],\n    ['fc-database', <FcDatabase />],\n    ['fc-data-protection', <FcDataProtection />],\n    ['fc-data-encryption', <FcDataEncryption />],\n    ['fc-data-configuration', <FcDataConfiguration />],\n    ['fc-data-backup', <FcDataBackup />],\n    ['fc-checkmark', <FcCheckmark />],\n    ['fc-cancel', <FcCancel />],\n    ['fc-briefcase', <FcBriefcase />],\n    ['fc-binoculars', <FcBinoculars />],\n    ['fc-automatic', <FcAutomatic />],\n    ['fc-alphabetical-sorting-za', <FcAlphabeticalSortingZa />],\n    ['fc-alphabetical-sorting-az', <FcAlphabeticalSortingAz />],\n    ['fc-add-database', <FcAddDatabase />],\n    ['fc-accept-database', <FcAcceptDatabase />],\n    ['fc-about', <FcAbout />],\n    ['fc-radar-chart', <FcRadarPlot />],\n    ['fc-scatter-chart', <FcScatterPlot />],\n    ['fc-pie-chart', <FcPieChart />],\n    ['fc-line-chart', <FcLineChart />],\n    ['fc-flow-chart', <FcFlowChart />],\n    ['fc-doughnut-chart', <FcDoughnutChart />],\n    ['fc-bar-chart', <FcBarChart />],\n    ['fc-area-chart', <FcAreaChart />],\n    ['fc-line-bar-chart', <FcComboChart />],\n    ['fc-workflow', <FcWorkflow />],\n    ['fc-todo-list', <FcTodoList />],\n    ['fc-synchronize', <FcSynchronize />],\n    ['fc-repair', <FcSupport />],\n    ['fc-statistics', <FcStatistics />],\n    ['fc-settings', <FcSettings />],\n    ['fc-search', <FcSearch />],\n    ['fc-serial-tasks', <FcSerialTasks />],\n    ['fc-safe', <FcSafe />],\n    ['fc-negative-dynamic', <FcNegativeDynamic />],\n    ['fc-positive-dynamic', <FcPositiveDynamic />],\n    ['fc-planner', <FcPlanner />],\n    ['fc-parallel-tasks', <FcParallelTasks />],\n    ['fc-org-unit', <FcOrgUnit />],\n    ['fc-opened-folder', <FcOpenedFolder />],\n    ['fc-ok', <FcOk />],\n    ['fc-inspection', <FcInspection />],\n    ['fc-globe', <FcGlobe />],\n    ['fc-folder', <FcFolder />],\n    ['fc-electronics', <FcElectronics />],\n    ['fc-data-sheet', <FcDataSheet />],\n    ['fc-command-line', <FcCommandLine />],\n    ['fc-calendar', <FcCalendar />],\n    ['fc-calculator', <FcCalculator />],\n    ['fc-bullish', <FcBullish />],\n    ['fc-bearish', <FcBearish />],\n    ['fc-bookmark', <FcBookmark />],\n    ['fc-approval', <FcApproval />],\n    ['fc-advertising', <FcAdvertising />],\n    ['di-linux', <DiLinux />],\n    ['di-python', <DiPython />],\n    ['di-chrome', <DiChrome />],\n    ['di-database', <DiDatabase />],\n    ['di-firefox', <DiFirefox />],\n    ['di-markdown', <DiMarkdown />],\n    ['di-postgresql', <DiPostgresql />],\n    ['di-terminal', <DiTerminal />],\n    ['di-windows', <DiWindows />],\n    ['bi-table', <BiTable />],\n    ['bi-analyse', <BiAnalyse />],\n    ['bi-layer', <BiLayer />],\n    ['bi-layer-minus', <BiLayerMinus />],\n    ['bi-layer-plus', <BiLayerPlus />],\n    ['bs-list-task', <BsListTask />],\n    ['bs-list-check', <BsListCheck />],\n    ['bs-link', <BsLink />],\n    ['bs-link-45-deg', <BsLink45Deg />],\n    ['bs-envelope-open', <BsEnvelopeOpen />],\n    ['bs-envelope', <BsEnvelope />],\n    ['bs-alarm', <BsAlarm />],\n    ['im-earth', <ImEarth />],\n    ['im-sphere', <ImSphere />],\n    ['gi-mesh-network', <GiMeshNetwork style={{ transform: 'scale(1.2)' }} />],\n    ['pi-circle', <PiCircle />],\n    ['pi-polygon', <PiPolygon />],\n    ['pi-map-pin', <PiMapPin />],\n    ['pi-line-segment', <PiLineSegment />],\n    ['pi-line-segments', <PiLineSegments />],\n    ['pi-trash-simple', <PiTrashSimple />],\n    ['pi-trash', <PiTrash />],\n    ['pi-ruler', <PiRuler />],\n    ['pi-selection', <PiSelection />],\n    ['pi-selection-slash', <PiSelectionSlash />],\n    ['pi-square-split-horizontal', <PiSquareSplitHorizontal />],\n    ['pi-square-split-vertical', <PiSquareSplitVertical />],\n    ['pi-stack-simple', <PiStackSimple />],\n    ['pi-stack', <PiStack />],\n    ['pi-navigation-arrow', <PiNavigationArrow />],\n    ['pi-map-trifold', <PiMapTrifold />],\n    ['pi-info', <PiInfo />],\n    ['pi-lock-key-open', <PiLockKeyOpen />],\n    ['pi-lock-key', <PiLockKey />],\n    ['pi-gear', <PiGear />],\n    ['pi-airplane', <PiAirplane />],\n    ['pi-anchor-simple', <PiAnchorSimple />],\n    ['pi-arrow-arc-left', <PiArrowArcLeft />],\n    ['pi-arrow-arc-right', <PiArrowArcRight />],\n    ['pi-arrow-clockwise', <PiArrowClockwise />],\n    ['pi-arrow-counter-clockwise', <PiArrowCounterClockwise />],\n    ['pi-barricade', <PiBarricade />],\n    ['pi-binoculars', <PiBinoculars />],\n    ['pi-bounding-box', <PiBoundingBox />],\n    ['pi-broom', <PiBroom />],\n    ['pi-buildings', <PiBuildings />],\n    ['pi-calculator', <PiCalculator />],\n    ['pi-camera', <PiCamera />],\n    ['pi-circuitry', <PiCircuitry />],\n    ['pi-clipboard', <PiClipboard />],\n    ['pi-compass', <PiCompass />],\n    ['pi-copy', <PiCopy />],\n    ['pi-cpu', <PiCpu />],\n    ['pi-crosshair', <PiCrosshair />],\n    ['pi-cube-focus', <PiCubeFocus />],\n    ['pi-cube', <PiCube />],\n    ['pi-cursor', <PiCursor />],\n    ['pi-database', <PiDatabase />],\n    ['pi-eye-slash', <PiEyeSlash />],\n    ['pi-eye', <PiEye />],\n    ['pi-faders', <PiFaders />],\n    ['pi-floppy-disk', <PiFloppyDisk />],\n    ['pi-dots-three-vertical', <PiDotsThreeVertical />],\n    ['pi-dots-three', <PiDotsThree />],\n    ['pi-math-operations', <PiMathOperations />],\n    ['pi-plus', <PiPlus />],\n    ['pi-minus', <PiMinus />],\n    ['pi-path', <PiPath />],\n    ['si-gitee', <SiGitee />],\n]);\n\nexport { str2Icon };\n"
  },
  {
    "path": "src/lib/components/layout/AntdCenter.react.js",
    "content": "// react核心\nimport PropTypes from 'prop-types';\n// antd核心\nimport { theme } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { parseChildrenToArray, useLoading } from '../utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n\nconst { useToken } = theme;\n\n/**\n * 居中组件AntdCenter\n */\nconst AntdCenter = ({\n    id,\n    children,\n    className,\n    style,\n    key,\n    inline = false,\n    inheritStyleToken = false,\n    setProps,\n    ...others\n}) => {\n    const { token } = useToken();\n\n    children = parseChildrenToArray(children);\n\n    return (\n        <div\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={{\n                display: inline ? 'inline-flex' : 'flex',\n                alignItems: 'center',\n                justifyContent: 'center',\n                ...(inheritStyleToken\n                    ? {\n                          backgroundColor: token.colorBgBase,\n                          color: token.colorTextBase,\n                          fontSize: token.fontSize,\n                      }\n                    : {}),\n                ...style,\n            }}\n            key={key}\n            data-dash-is-loading={useLoading()}\n        >\n            {children}\n        </div>\n    );\n};\n\nAntdCenter.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，内嵌元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 是否渲染为行内元素\n     * 默认值：`false`\n     */\n    inline: PropTypes.bool,\n\n    /**\n     * 是否在背景色、字体颜色、字体大小等样式上联动`AntdConfigProvider`相关设置\n     * 默认值：`false`\n     */\n    inheritStyleToken: PropTypes.bool,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdCenter;\n"
  },
  {
    "path": "src/lib/components/layout/AntdCompact.react.js",
    "content": "// react核心\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Space } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { parseChildrenToArray, useLoading } from '../utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n\nconst { Compact } = Space;\n\n/**\n * 紧凑排列组件AntdCompact\n */\nconst AntdCompact = ({\n    id,\n    children,\n    className,\n    style,\n    key,\n    direction = 'horizontal',\n    block = false,\n    setProps,\n    ...others\n}) => {\n    children = parseChildrenToArray(children);\n\n    return (\n        <Compact\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            direction={direction}\n            block={block}\n            data-dash-is-loading={useLoading()}\n        >\n            {children}\n        </Compact>\n    );\n};\n\nAntdCompact.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，内嵌元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 排列方向，可选项有`'vertical'`、`'horizontal'`\n     * 默认值：`'horizontal'`\n     */\n    direction: PropTypes.oneOf(['vertical', 'horizontal']),\n\n    /**\n     * 是否渲染为块级元素（宽度撑满父容器）\n     * 默认值：`false`\n     */\n    block: PropTypes.bool,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdCompact;\n"
  },
  {
    "path": "src/lib/components/layout/AntdContent.react.js",
    "content": "// react核心\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Layout } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { parseChildrenToArray, useLoading } from '../utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n\nconst { Content } = Layout;\n\n/**\n * 内容区组件AntdContent\n */\nconst AntdContent = ({\n    id,\n    children,\n    className,\n    style,\n    key,\n    setProps,\n    ...others\n}) => {\n    children = parseChildrenToArray(children);\n\n    return (\n        <Content\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            data-dash-is-loading={useLoading()}\n        >\n            {children}\n        </Content>\n    );\n};\n\nAntdContent.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，内嵌元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdContent;\n"
  },
  {
    "path": "src/lib/components/layout/AntdDivider.react.js",
    "content": "// react核心\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Divider } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n\n/**\n * 分割线组件AntdDivider\n */\nconst AntdDivider = ({\n    id,\n    children,\n    className,\n    style,\n    key,\n    direction = 'horizontal',\n    innerTextOrientation = 'center',\n    isDashed = false,\n    lineColor,\n    fontSize,\n    fontStyle,\n    fontWeight,\n    fontFamily,\n    fontColor,\n    variant = 'solid',\n    plain = true,\n    size,\n    ...others\n}) => {\n    if (direction === 'horizontal') {\n        return (\n            <Divider\n                // 提取具有data-*或aria-*通配格式的属性\n                {...pickBy(\n                    (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                    others\n                )}\n                id={id}\n                style={{\n                    ...style,\n                    borderTopColor: lineColor,\n                    fontStyle: fontStyle,\n                    fontWeight: fontWeight,\n                    fontFamily: fontFamily,\n                    fontSize: fontSize,\n                    color: fontColor,\n                }}\n                className={\n                    isString(className)\n                        ? className\n                        : className\n                          ? useCss(className)\n                          : undefined\n                }\n                key={key}\n                dashed={isDashed}\n                variant={variant}\n                orientation={innerTextOrientation}\n                type={'horizontal'}\n                plain={plain}\n                size={size}\n                data-dash-is-loading={useLoading()}\n            >\n                {children}\n            </Divider>\n        );\n    } else if (direction === 'vertical') {\n        return (\n            <Divider\n                // 提取具有data-*或aria-*通配格式的属性\n                {...pickBy(\n                    (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                    others\n                )}\n                id={id}\n                style={{\n                    ...style,\n                    borderLeftColor: lineColor,\n                    fontStyle: fontStyle,\n                    fontWeight: fontWeight,\n                    fontFamily: fontFamily,\n                    fontSize: fontSize,\n                    color: fontColor,\n                }}\n                className={\n                    isString(className)\n                        ? className\n                        : className\n                          ? useCss(className)\n                          : undefined\n                }\n                key={key}\n                dashed={isDashed}\n                variant={variant}\n                orientation={innerTextOrientation}\n                type={'vertical'}\n                plain={plain}\n                data-dash-is-loading={useLoading()}\n            >\n                {children}\n            </Divider>\n        );\n    }\n};\n\nAntdDivider.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，分割线内嵌元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 内嵌元素对齐方式，可选项有`'left'`、`'center'`、`'right'`\n     * 默认值：`'center'`\n     */\n    innerTextOrientation: PropTypes.oneOf(['left', 'center', 'right']),\n\n    /**\n     * 是否渲染为虚线形式\n     * 默认值：`false`\n     */\n    isDashed: PropTypes.bool,\n\n    /**\n     * 分割线方向，可选项有`'horizontal'`、`'vertical'`\n     * 默认值：`'horizontal'`\n     */\n    direction: PropTypes.oneOf(['horizontal', 'vertical']),\n\n    /**\n     * 内嵌元素字体大小\n     */\n    fontSize: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n    /**\n     * 分割线颜色\n     */\n    lineColor: PropTypes.string,\n\n    /**\n     * 内嵌元素字体风格\n     */\n    fontStyle: PropTypes.string,\n\n    /**\n     * 内嵌元素字重\n     */\n    fontWeight: PropTypes.string,\n\n    /**\n     * 内嵌元素字体\n     */\n    fontFamily: PropTypes.string,\n\n    /**\n     * 内嵌元素字体颜色\n     */\n    fontColor: PropTypes.string,\n\n    /**\n     * 分割线变体，可选项有`'dashed'`（虚线）、`'dotted'`（点线）、`'solid'`（实线）\n     * 默认值：`'solid'`\n     */\n    variant: PropTypes.oneOf(['dashed', 'dotted', 'solid']),\n\n    /**\n     * 文字内容是否呈现为常规正文形式\n     * 默认值：`true`\n     */\n    plain: PropTypes.bool,\n\n    /**\n     * 间距大小，仅当``direction='horizontal'``时有效，可选项有`'small'`、`'middle'`、`'large'`\n     */\n    size: PropTypes.oneOf(['small', 'middle', 'large']),\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdDivider;\n"
  },
  {
    "path": "src/lib/components/layout/AntdFlex.react.js",
    "content": "// react核心\nimport { Flex } from 'antd';\nimport PropTypes from 'prop-types';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { parseChildrenToArray, useLoading } from '../utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n\n/**\n * 弹性布局组件AntdFlex\n */\nconst AntdFlex = ({\n    id,\n    children,\n    className,\n    style,\n    key,\n    vertical = false,\n    wrap = 'nowrap',\n    justify = 'normal',\n    align = 'normal',\n    flex = 'normal',\n    gap,\n    setProps,\n    ...others\n}) => {\n    children = parseChildrenToArray(children);\n\n    return (\n        <Flex\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            vertical={vertical}\n            wrap={wrap}\n            justify={justify}\n            align={align}\n            flex={flex}\n            gap={gap}\n            data-dash-is-loading={useLoading()}\n        >\n            {children}\n        </Flex>\n    );\n};\n\nAntdFlex.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，内嵌元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 是否使用垂直主轴\n     * 默认值：`false`\n     */\n    vertical: PropTypes.bool,\n\n    /**\n     * 子元素换行显示行为，同css中的flex-wrap，也可直接传入布尔型设置是否自动换行\n     * 默认值：`'nowrap'`\n     */\n    wrap: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n\n    /**\n     * 子元素在主轴方向上的对齐方式，同css中的justify-content\n     * 默认值：`'normal'`\n     */\n    justify: PropTypes.string,\n\n    /**\n     * 子元素在交叉轴方向上的对齐方式，同css中的align-items\n     * 默认值：`'normal'`\n     */\n    align: PropTypes.string,\n\n    /**\n     * 同css中的flex\n     * 默认值：`'normal'`\n     */\n    flex: PropTypes.string,\n\n    /**\n     * 子元素之间的间隙，可选项有`'small'`、`'middle'`、`'large'`，也可传入字符型css宽度，或数值型像素宽度\n     */\n    gap: PropTypes.oneOfType([\n        PropTypes.string,\n        PropTypes.number,\n        PropTypes.oneOf(['small', 'middle', 'large']),\n    ]),\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdFlex;\n"
  },
  {
    "path": "src/lib/components/layout/AntdFooter.react.js",
    "content": "// react核心\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Layout } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { parseChildrenToArray, useLoading } from '../utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n\nconst { Footer } = Layout;\n\n/**\n * 页尾组件AntdFooter\n */\nconst AntdFooter = ({\n    id,\n    children,\n    className,\n    style,\n    key,\n    setProps,\n    ...others\n}) => {\n    children = parseChildrenToArray(children);\n\n    return (\n        <Footer\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            data-dash-is-loading={useLoading()}\n        >\n            {children}\n        </Footer>\n    );\n};\n\nAntdFooter.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，内嵌元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdFooter;\n"
  },
  {
    "path": "src/lib/components/layout/AntdHeader.react.js",
    "content": "// react核心\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Layout } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { parseChildrenToArray, useLoading } from '../utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n\nconst { Header } = Layout;\n\n/**\n * 页首组件AntdHeader\n */\nconst AntdHeader = ({\n    id,\n    children,\n    className,\n    style,\n    key,\n    setProps,\n    ...others\n}) => {\n    children = parseChildrenToArray(children);\n\n    return (\n        <Header\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            data-dash-is-loading={useLoading()}\n        >\n            {children}\n        </Header>\n    );\n};\n\nAntdHeader.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，内嵌元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdHeader;\n"
  },
  {
    "path": "src/lib/components/layout/AntdLayout.react.js",
    "content": "// react核心\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Layout } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { parseChildrenToArray, useLoading } from '../utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n\n/**\n * 布局容器组件AntdLayout\n */\nconst AntdLayout = ({\n    id,\n    children,\n    className,\n    style,\n    key,\n    setProps,\n    ...others\n}) => {\n    children = parseChildrenToArray(children);\n\n    return (\n        <Layout\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            data-dash-is-loading={useLoading()}\n        >\n            {children}\n        </Layout>\n    );\n};\n\nAntdLayout.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，内嵌元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdLayout;\n"
  },
  {
    "path": "src/lib/components/layout/AntdSider.react.js",
    "content": "// react核心\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Layout } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { parseChildrenToArray, useLoading } from '../utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n\nconst { Sider } = Layout;\n\n/**\n * 侧边栏组件AntdSider\n */\nconst AntdSider = ({\n    id,\n    children,\n    className,\n    style,\n    key,\n    breakpoint,\n    collapsed,\n    collapsedWidth = 80,\n    collapsible = false,\n    reverseArrow = false,\n    theme = 'dark',\n    width = 200,\n    trigger,\n    setProps,\n    ...others\n}) => {\n    const onCollapse = (collapsed) => {\n        setProps({ collapsed });\n    };\n\n    children = parseChildrenToArray(children);\n\n    return (\n        <Sider\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            collapsed={collapsed}\n            collapsedWidth={collapsedWidth}\n            collapsible={collapsible}\n            reverseArrow={reverseArrow}\n            theme={theme}\n            width={width}\n            trigger={trigger}\n            breakpoint={breakpoint}\n            onCollapse={onCollapse}\n            data-dash-is-loading={useLoading()}\n        >\n            {children}\n        </Sider>\n    );\n};\n\nAntdSider.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，内嵌元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 当前是否收起\n     */\n    collapsed: PropTypes.bool,\n\n    // 设置收缩的像素宽度，默认为80即80px，设置为0时会渲染特殊触发组件\n    /**\n     * 收起后呈现的像素宽度，设置为0时会额外渲染特殊触发组件\n     * 默认值：`80`\n     */\n    collapsedWidth: PropTypes.number,\n\n    /**\n     * 是否可收起\n     * 默认值：`false`\n     */\n    collapsible: PropTypes.bool,\n\n    /**\n     * 是否翻转收起箭头的方向，通常在Sider位于右侧时使用\n     * 默认值：`false`\n     */\n    reverseArrow: PropTypes.bool,\n\n    /**\n     * 主题，可选项有`'light'`、`'dark'`\n     * 默认值：`'dark'`\n     */\n    theme: PropTypes.oneOf(['light', 'dark']),\n\n    /**\n     * 侧边栏像素宽度\n     * 默认值：`200`\n     */\n    width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n    /**\n     * 设置为`None`时不渲染自带的特殊触发组件\n     */\n    trigger: PropTypes.node,\n\n    /**\n     * 侧边栏自动收起对应的响应式断点\n     */\n    breakpoint: PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl', 'xxl']),\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdSider;\n"
  },
  {
    "path": "src/lib/components/layout/AntdSpace.react.js",
    "content": "// react核心\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Space, Divider } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { parseChildrenToArray, useLoading } from '../utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n\n/**\n * 排列组件AntdSpace\n */\nconst AntdSpace = ({\n    id,\n    children,\n    className,\n    style,\n    key,\n    align,\n    direction = 'horizontal',\n    size = 'small',\n    customSplit,\n    wrap = false,\n    addSplitLine = false,\n    styles,\n    classNames,\n    setProps,\n    ...others\n}) => {\n    children = parseChildrenToArray(children);\n\n    if (addSplitLine) {\n        if (direction === 'horizontal') {\n            return (\n                <Space\n                    // 提取具有data-*或aria-*通配格式的属性\n                    {...pickBy(\n                        (_, k) =>\n                            k.startsWith('data-') || k.startsWith('aria-'),\n                        others\n                    )}\n                    id={id}\n                    className={\n                        isString(className)\n                            ? className\n                            : className\n                              ? useCss(className)\n                              : undefined\n                    }\n                    style={style}\n                    styles={styles}\n                    classNames={classNames}\n                    key={key}\n                    align={align}\n                    direction={direction}\n                    size={size}\n                    split={<Divider type=\"vertical\" />}\n                    wrap={wrap}\n                    data-dash-is-loading={useLoading()}\n                >\n                    {children}\n                </Space>\n            );\n        }\n        return (\n            <Space\n                // 提取具有data-*或aria-*通配格式的属性\n                {...pickBy(\n                    (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                    others\n                )}\n                id={id}\n                className={\n                    isString(className)\n                        ? className\n                        : className\n                          ? useCss(className)\n                          : undefined\n                }\n                style={style}\n                styles={styles}\n                classNames={classNames}\n                key={key}\n                align={align}\n                direction={direction}\n                size={size}\n                split={<Divider />}\n                wrap={wrap}\n                data-dash-is-loading={useLoading()}\n            >\n                {children}\n            </Space>\n        );\n    }\n\n    return (\n        <Space\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            styles={styles}\n            classNames={classNames}\n            key={key}\n            align={align}\n            direction={direction}\n            size={size}\n            split={customSplit}\n            wrap={wrap}\n            data-dash-is-loading={useLoading()}\n        >\n            {children}\n        </Space>\n    );\n};\n\nAntdSpace.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，内嵌元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 细分控制子元素css样式\n     */\n    styles: PropTypes.exact({\n        /**\n         * 控制子项容器元素css样式\n         */\n        item: PropTypes.object,\n    }),\n\n    /**\n     * 细分控制子元素css类\n     */\n    classNames: PropTypes.exact({\n        /**\n         * 控制子项容器元素css类\n         */\n        item: PropTypes.string,\n    }),\n\n    /**\n     * 对齐方式，可选项有`'start'`、`'end'`、`'center'`、`'baseline'`\n     */\n    align: PropTypes.oneOf(['start', 'end', 'center', 'baseline']),\n\n    /**\n     * 排列方向，可选项有`'vertical'`、`'horizontal'`\n     * 默认值：`'horizontal'`\n     */\n    direction: PropTypes.oneOf(['vertical', 'horizontal']),\n\n    /**\n     * 子元素间隔大小，可选项有`'small'`、`'middle'`、`'large'`，或直接设置数值型代表像素间隔\n     * 默认值：`'small'`\n     */\n    size: PropTypes.oneOfType([\n        PropTypes.oneOf(['small', 'middle', 'large']),\n        PropTypes.number,\n    ]),\n\n    /**\n     * 是否添加分隔线\n     * 默认值：`false`\n     */\n    addSplitLine: PropTypes.bool,\n\n    /**\n     * 自定义分隔线元素\n     */\n    customSplit: PropTypes.node,\n\n    /**\n     * 子元素是否自动换行，仅`direction='horizontal'`时有效\n     * 默认值：`false`\n     */\n    wrap: PropTypes.bool,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdSpace;\n"
  },
  {
    "path": "src/lib/components/layout/AntdSplitter.react.js",
    "content": "// react核心\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Splitter } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n\n/**\n * 分隔面板组件AntdSplitter\n */\nconst AntdSplitter = ({\n    id,\n    className,\n    style,\n    key,\n    layout = 'horizontal',\n    items,\n    lazy = false,\n    setProps,\n    ...others\n}) => {\n    return (\n        <Splitter\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            layout={layout}\n            lazy={lazy}\n            data-dash-is-loading={useLoading()}\n        >\n            {(items || []).map((item, index) => (\n                <Splitter.Panel key={index} {...item} />\n            ))}\n        </Splitter>\n    );\n};\n\nAntdSplitter.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 布局方向，可选项有`'horizontal'`、`'vertical'`\n     * 默认值：`'horizontal'`\n     */\n    layout: PropTypes.oneOf(['horizontal', 'vertical']),\n\n    /**\n     * 配置分隔面板子项\n     */\n    items: PropTypes.arrayOf(\n        PropTypes.shape({\n            /**\n             * 当前子项唯一识别`key`\n             */\n            key: PropTypes.string,\n            /**\n             * 组件型，内嵌元素\n             */\n            children: PropTypes.node,\n            /**\n             * 当前子项`css`样式\n             */\n            style: PropTypes.object,\n            /**\n             * 当前子项`css`类名\n             */\n            className: PropTypes.string,\n            /**\n             * 初始面板尺寸，支持数字`px`或者文字`'百分比%'`类型\n             */\n            defaultSize: PropTypes.oneOfType([\n                PropTypes.number,\n                PropTypes.string,\n            ]),\n            /**\n             * 面板尺寸，支持数字`px`或者文字`'百分比%'`类型\n             */\n            size: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n            /**\n             * 最小尺寸，支持数字`px`或者文字`'百分比%'`类型\n             */\n            min: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n            /**\n             * 最大尺寸，支持数字`px`或者文字`'百分比%'`类型\n             */\n            max: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n            /**\n             * 是否可折叠\n             * 默认值：`false`\n             */\n            collapsible: PropTypes.oneOfType([\n                PropTypes.bool,\n                PropTypes.shape({\n                    start: PropTypes.bool,\n                    end: PropTypes.bool,\n                }),\n            ]),\n            /**\n             * 是否开启拖拽伸缩\n             * 默认值：`true`\n             */\n            resizable: PropTypes.bool,\n        })\n    ).isRequired,\n\n    /**\n     * 是否开启延迟渲染模式，开启后面板将在拖拽调整完成后才进行更新渲染\n     * 默认值：`false`\n     */\n    lazy: PropTypes.bool,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdSplitter;\n"
  },
  {
    "path": "src/lib/components/layout/grid/AntdCol.react.js",
    "content": "// react核心\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Col } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { parseChildrenToArray, useLoading } from '../../utils';\n// 自定义hooks\nimport useCss from '../../../hooks/useCss';\n\n/**\n * 列组件AntdCol\n */\nconst AntdCol = ({\n    id,\n    children,\n    className,\n    style,\n    key,\n    span,\n    offset = 0,\n    order = 0,\n    pull = 0,\n    push = 0,\n    flex,\n    xs,\n    sm,\n    md,\n    lg,\n    xl,\n    xxl,\n    setProps,\n    ...others\n}) => {\n    children = parseChildrenToArray(children);\n\n    return (\n        <Col\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={{ height: '100%', ...style }}\n            key={key}\n            span={span}\n            offset={offset}\n            order={order}\n            pull={pull}\n            push={push}\n            flex={flex}\n            xs={xs}\n            sm={sm}\n            md={md}\n            lg={lg}\n            xl={xl}\n            xxl={xxl}\n            data-dash-is-loading={useLoading()}\n        >\n            {children}\n        </Col>\n    );\n};\n\nAntdCol.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，内嵌元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 列所占宽度份数\n     */\n    span: PropTypes.number,\n\n    /**\n     * 列左侧间隔宽度份数\n     * 默认值：`0`\n     */\n    offset: PropTypes.number,\n\n    /**\n     * 列顺序\n     * 默认值：`0`\n     */\n    order: PropTypes.number,\n\n    /**\n     * 列向左移动宽度份数\n     * 默认值：`0`\n     */\n    pull: PropTypes.number,\n\n    /**\n     * 列向右移动宽度份数\n     * 默认值：`0`\n     */\n    push: PropTypes.number,\n\n    /**\n     * 同css中的flex\n     */\n    flex: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n    /**\n     * 配置列在页面宽度小于567px时的布局参数，传入数值型时代表span参数，传入字典时分别设置各布局参数\n     */\n    xs: PropTypes.oneOfType([\n        PropTypes.number,\n        PropTypes.exact({\n            /**\n             * 同span参数\n             */\n            span: PropTypes.number,\n\n            /**\n             * 同offset参数\n             */\n            offset: PropTypes.number,\n\n            /**\n             * 同order参数\n             */\n            order: PropTypes.number,\n\n            /**\n             * 同pull参数\n             */\n            pull: PropTypes.number,\n\n            /**\n             * 同push参数\n             */\n            push: PropTypes.number,\n        }),\n    ]),\n\n    /**\n     * 配置列在页面宽度大于等于567px时的布局参数，传入数值型时代表span参数，传入字典时分别设置各布局参数\n     */\n    sm: PropTypes.oneOfType([\n        PropTypes.number,\n        PropTypes.exact({\n            /**\n             * 同span参数\n             */\n            span: PropTypes.number,\n\n            /**\n             * 同offset参数\n             */\n            offset: PropTypes.number,\n\n            /**\n             * 同order参数\n             */\n            order: PropTypes.number,\n\n            /**\n             * 同pull参数\n             */\n            pull: PropTypes.number,\n\n            /**\n             * 同push参数\n             */\n            push: PropTypes.number,\n        }),\n    ]),\n\n    /**\n     * 配置列在页面宽度大于等于768px时的布局参数，传入数值型时代表span参数，传入字典时分别设置各布局参数\n     */\n    md: PropTypes.oneOfType([\n        PropTypes.number,\n        PropTypes.exact({\n            /**\n             * 同span参数\n             */\n            span: PropTypes.number,\n\n            /**\n             * 同offset参数\n             */\n            offset: PropTypes.number,\n\n            /**\n             * 同order参数\n             */\n            order: PropTypes.number,\n\n            /**\n             * 同pull参数\n             */\n            pull: PropTypes.number,\n\n            /**\n             * 同push参数\n             */\n            push: PropTypes.number,\n        }),\n    ]),\n\n    /**\n     * 配置列在页面宽度大于等于992px时的布局参数，传入数值型时代表span参数，传入字典时分别设置各布局参数\n     */\n    lg: PropTypes.oneOfType([\n        PropTypes.number,\n        PropTypes.exact({\n            /**\n             * 同span参数\n             */\n            span: PropTypes.number,\n\n            /**\n             * 同offset参数\n             */\n            offset: PropTypes.number,\n\n            /**\n             * 同order参数\n             */\n            order: PropTypes.number,\n\n            /**\n             * 同pull参数\n             */\n            pull: PropTypes.number,\n\n            /**\n             * 同push参数\n             */\n            push: PropTypes.number,\n        }),\n    ]),\n\n    /**\n     * 配置列在页面宽度大于等于1200px时的布局参数，传入数值型时代表span参数，传入字典时分别设置各布局参数\n     */\n    xl: PropTypes.oneOfType([\n        PropTypes.number,\n        PropTypes.exact({\n            /**\n             * 同span参数\n             */\n            span: PropTypes.number,\n\n            /**\n             * 同offset参数\n             */\n            offset: PropTypes.number,\n\n            /**\n             * 同order参数\n             */\n            order: PropTypes.number,\n\n            /**\n             * 同pull参数\n             */\n            pull: PropTypes.number,\n\n            /**\n             * 同push参数\n             */\n            push: PropTypes.number,\n        }),\n    ]),\n\n    /**\n     * 配置列在页面宽度大于等于1600px时的布局参数，传入数值型时代表span参数，传入字典时分别设置各布局参数\n     */\n    xxl: PropTypes.oneOfType([\n        PropTypes.number,\n        PropTypes.exact({\n            /**\n             * 同span参数\n             */\n            span: PropTypes.number,\n\n            /**\n             * 同offset参数\n             */\n            offset: PropTypes.number,\n\n            /**\n             * 同order参数\n             */\n            order: PropTypes.number,\n\n            /**\n             * 同pull参数\n             */\n            pull: PropTypes.number,\n\n            /**\n             * 同push参数\n             */\n            push: PropTypes.number,\n        }),\n    ]),\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdCol;\n"
  },
  {
    "path": "src/lib/components/layout/grid/AntdRow.react.js",
    "content": "// react核心\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Row } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { parseChildrenToArray, useLoading } from '../../utils';\n// 自定义hooks\nimport useCss from '../../../hooks/useCss';\n\n/**\n * 行组件AntdRow\n */\nconst AntdRow = ({\n    id,\n    children,\n    className,\n    style,\n    key,\n    align = 'top',\n    gutter = 0,\n    justify = 'start',\n    wrap = true,\n    setProps,\n    ...others\n}) => {\n    children = parseChildrenToArray(children);\n\n    return (\n        <Row\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            align={align}\n            gutter={gutter}\n            justify={justify}\n            wrap={wrap}\n            data-dash-is-loading={useLoading()}\n        >\n            {children}\n        </Row>\n    );\n};\n\nAntdRow.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，内嵌元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 竖直方向对齐方式，可选项有`'top'`、`'middle'`、`'bottom'`\n     * 默认值：`'top'`\n     */\n    align: PropTypes.oneOf(['top', 'middle', 'bottom']),\n\n    /**\n     * 网格间隔，传入数值型时为水平像素间隔，传入数组时分别设置水平、垂直像素间隔，传入字典时可为响应式各断点设置水平像素间隔\n     */\n    gutter: PropTypes.oneOfType([\n        PropTypes.number,\n        PropTypes.arrayOf(PropTypes.number),\n        PropTypes.exact({\n            /**\n             * 页面宽度小于567px时的水平像素间隔\n             */\n            xs: PropTypes.number,\n            /**\n             * 页面宽度大于等于567px时的水平像素间隔\n             */\n            sm: PropTypes.number,\n            /**\n             * 页面宽度大于等于768px时的水平像素间隔\n             */\n            md: PropTypes.number,\n            /**\n             * 页面宽度大于等于992px时的水平像素间隔\n             */\n            lg: PropTypes.number,\n            /**\n             * 页面宽度大于等于1200px时的水平像素间隔\n             */\n            xl: PropTypes.number,\n            /**\n             * 页面宽度大于等于1600px时的水平像素间隔\n             */\n            xxl: PropTypes.number,\n        }),\n    ]),\n\n    /**\n     * 水平排列方式，可选项有`'start'`、`'end'`、`'center'`、`'space-around'`、`'space-between'`\n     * 默认值：`'start'`\n     */\n    justify: PropTypes.oneOf([\n        'start',\n        'end',\n        'center',\n        'space-around',\n        'space-between',\n    ]),\n\n    /**\n     * 是否允许自动换行\n     * 默认值：`true`\n     */\n    wrap: PropTypes.bool,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdRow;\n"
  },
  {
    "path": "src/lib/components/locales.react.js",
    "content": "import zhCN from 'antd/lib/locale/zh_CN';\nimport enUS from 'antd/lib/locale/en_US';\nimport deDE from 'antd/lib/locale/de_DE';\nimport ruRU from 'antd/lib/locale/ru_RU';\nimport frFR from 'antd/lib/locale/fr_FR';\n\nconst str2Locale = new Map([\n    ['zh-cn', zhCN],\n    ['en-us', enUS],\n    ['de-de', deDE],\n    ['ru-ru', ruRU],\n    ['fr-fr', frFR],\n]);\n\nconst locale2text = {\n    AntdSpoiler: {\n        'zh-cn': {\n            hideLabel: '收起',\n            showLabel: '查看更多',\n        },\n        'en-us': {\n            hideLabel: 'Hide',\n            showLabel: 'Show more',\n        },\n        'de-de': {\n            hideLabel: 'Verbergen',\n            showLabel: 'Mehr anzeigen',\n        },\n        'ru-ru': {\n            hideLabel: 'Скрыть',\n            showLabel: 'Показать больше',\n        },\n        'fr-fr': {\n            hideLabel: 'Cacher',\n            showLabel: 'Afficher plus',\n        },\n    },\n    AntdPictureUpload: {\n        'zh-cn': {\n            confirmBeforeDeleteTitle: '确认删除',\n            confirmBeforeDeleteOkText: '确认',\n            confirmBeforeDeleteCancelText: '取消',\n            imgCropModalOKText: '确认',\n            imgCropModalCancelText: '取消',\n        },\n        'en-us': {\n            confirmBeforeDeleteTitle: 'Confirm Delete',\n            confirmBeforeDeleteOkText: 'Ok',\n            confirmBeforeDeleteCancelText: 'Cancel',\n            imgCropModalOKText: 'Ok',\n            imgCropModalCancelText: 'Cancel',\n        },\n        'de-de': {\n            confirmBeforeDeleteTitle: 'Löschen bestätigen',\n            confirmBeforeDeleteOkText: 'Ok',\n            confirmBeforeDeleteCancelText: 'Abbrechen',\n            imgCropModalOKText: 'Ok',\n            imgCropModalCancelText: 'Abbrechen',\n        },\n        'ru-ru': {\n            confirmBeforeDeleteTitle: 'Подтвердите удаление',\n            confirmBeforeDeleteOkText: 'Ок',\n            confirmBeforeDeleteCancelText: 'Отмена',\n            imgCropModalOKText: 'Ок',\n            imgCropModalCancelText: 'Отмена',\n        },\n        'fr-fr': {\n            confirmBeforeDeleteTitle: 'Confirmer la suppression',\n            confirmBeforeDeleteOkText: 'OK',\n            confirmBeforeDeleteCancelText: 'Annuler',\n            imgCropModalOKText: 'OK',\n            imgCropModalCancelText: 'Annuler',\n        },\n    },\n    AntdPagination: {\n        'zh-cn': {\n            showTotalPrefix: '共 ',\n            showTotalSuffix: ' 条记录',\n        },\n        'en-us': {\n            showTotalPrefix: 'Total ',\n            showTotalSuffix: ' items',\n        },\n        'de-de': {\n            showTotalPrefix: 'Gesamt ',\n            showTotalSuffix: ' items',\n        },\n        'ru-ru': {\n            showTotalPrefix: 'Всего ',\n            showTotalSuffix: ' элементов',\n        },\n        'fr-fr': {\n            showTotalPrefix: 'Total  ',\n            showTotalSuffix: ' articles',\n        },\n    },\n    AntdTable: {\n        'zh-cn': {\n            showTotalPrefix: '共 ',\n            showTotalSuffix: ' 条记录',\n            filterKeywordPlaceholder: '搜索',\n            filterKeywordSearchButtonText: '搜索',\n            filterKeywordResetButtonText: '重置',\n            columnEditableFormatConstraintMessage:\n                '编辑失败，输入的“[VALUE]”不符合对应字段的格式要求。',\n        },\n        'en-us': {\n            showTotalPrefix: 'Total ',\n            showTotalSuffix: ' items',\n            filterKeywordPlaceholder: 'Search',\n            filterKeywordSearchButtonText: 'Search',\n            filterKeywordResetButtonText: 'Reset',\n            columnEditableFormatConstraintMessage:\n                'Edit failed, The input \"[VALUE]\" does not meet the format requirements for the corresponding field.',\n        },\n        'de-de': {\n            showTotalPrefix: 'Gesamt ',\n            showTotalSuffix: ' items',\n            filterKeywordPlaceholder: 'Suche',\n            filterKeywordSearchButtonText: 'Suchen',\n            filterKeywordResetButtonText: 'Zurücksetzen',\n            columnEditableFormatConstraintMessage:\n                'Bearbeiten fehlgeschlagen, Die Eingabe \"[VALUE]\" entspricht nicht den Anforderungen des entsprechenden Feldes.',\n        },\n        'ru-ru': {\n            showTotalPrefix: 'Всего ',\n            showTotalSuffix: ' элементов',\n            filterKeywordPlaceholder: 'Поиск',\n            filterKeywordSearchButtonText: 'Поиск',\n            filterKeywordResetButtonText: 'Сбросить',\n            columnEditableFormatConstraintMessage:\n                'Редактирование не удалось, введенное значение \"[VALUE]\" не соответствует требованиям поля.',\n        },\n        'fr-fr': {\n            showTotalPrefix: 'Total ',\n            showTotalSuffix: ' articles',\n            filterKeywordPlaceholder: 'Rechercher',\n            filterKeywordSearchButtonText: 'Rechercher',\n            filterKeywordResetButtonText: 'Réinitialiser',\n            columnEditableFormatConstraintMessage:\n                'Échec de la modification. La valeur saisie \"[VALUE]\" ne respecte pas les exigences de format du champ correspondant.',\n        },\n    },\n    AntdTransfer: {\n        'zh-cn': {\n            titles: ['待选区', '选定区'],\n        },\n        'en-us': {\n            titles: ['Source', 'Target'],\n        },\n        'de-de': {\n            titles: ['Quelle', 'Ziel'],\n        },\n        'ru-ru': {\n            titles: ['Источник', 'Цель'],\n        },\n        'fr-fr': {\n            titles: ['Source', 'Cible'],\n        },\n    },\n    Upload: {\n        'zh-cn': {\n            uploadSuccess: '上传成功！',\n            uploadFailed: '上传失败！',\n            sizeError: ['文件大小超出', 'MB限制！'],\n            typeError: ['上传失败，', '文件格式不符合要求！'],\n            buttonContent: '点击上传文件',\n        },\n        'en-us': {\n            uploadSuccess: 'upload success!',\n            uploadFailed: 'upload failed!',\n            sizeError: ['File size exceeds the ', 'MB limit!'],\n            typeError: [\n                'Uploading failed, The format of ',\n                ' does not meet requirements!',\n            ],\n            buttonContent: 'Click to upload file',\n        },\n        'de-de': {\n            uploadSuccess: 'Hochladen erfolgreich!',\n            uploadFailed: 'Hochladen fehlgeschlagen!',\n            sizeError: ['Dateigröße überschreitet das Limit von ', 'MB!'],\n            typeError: [\n                'Hochladen fehlgeschlagen. Das Format von ',\n                ' entspricht nicht den Anforderungen!',\n            ],\n            buttonContent: 'Klicken, um eine Datei hochzuladen',\n        },\n        'ru-ru': {\n            uploadSuccess: 'Загрузка успешна!',\n            uploadFailed: 'Ошибка загрузки!',\n            sizeError: ['Размер файла превышает ', 'MB ограничение!'],\n            typeError: [\n                'Ошибка загрузки, формат ',\n                ' не соответствует требованиям!',\n            ],\n            buttonContent: 'Нажмите для загрузки файла',\n        },\n        'fr-fr': {\n            uploadSuccess: 'téléversement réussi !',\n            uploadFailed: 'échec du téléversement !',\n            sizeError: ['La taille du fichier dépasse la limite de ', 'Mo !'],\n            typeError: [\n                'Échec du téléversement, le format de ',\n                ' ne respecte pas les exigences !',\n            ],\n            buttonContent: 'Cliquez pour téléverser un fichier',\n        },\n    },\n    AntdComment: {\n        'zh-cn': {\n            likeTooltipTitle: '支持',\n            dislikeTooltipTitle: '反对',\n            replayTitle: '添加回复',\n            deleteConfirmTitle: '确认删除',\n            deleteConfirmOkText: '确认',\n            deleteConfirmCancelText: '取消',\n            deleteTitle: '删除',\n        },\n        'en-us': {\n            likeTooltipTitle: 'like',\n            dislikeTooltipTitle: 'dislike',\n            replayTitle: 'Add a reply',\n            deleteConfirmTitle: 'Confirm deletion',\n            deleteConfirmOkText: 'Yes',\n            deleteConfirmCancelText: 'No',\n            deleteTitle: 'Delete',\n        },\n        'de-de': {\n            likeTooltipTitle: 'Gefällt mir',\n            dislikeTooltipTitle: 'Gefällt mir nicht',\n            replayTitle: 'Antwort hinzufügen',\n            deleteConfirmTitle: 'Löschen bestätigen',\n            deleteConfirmOkText: 'Ja',\n            deleteConfirmCancelText: 'Nein',\n            deleteTitle: 'Löschen',\n        },\n        'ru-ru': {\n            likeTooltipTitle: 'Нравится',\n            dislikeTooltipTitle: 'Не нравится',\n            replayTitle: 'Добавить ответ',\n            deleteConfirmTitle: 'Подтвердите удаление',\n            deleteConfirmOkText: 'Да',\n            deleteConfirmCancelText: 'Нет',\n            deleteTitle: 'Удалить',\n        },\n        'fr-fr': {\n            likeTooltipTitle: 'j’aime',\n            dislikeTooltipTitle: 'je n’aime pas',\n            replayTitle: 'Ajouter une réponse',\n            deleteConfirmTitle: 'Confirmer la suppression',\n            deleteConfirmOkText: 'Oui',\n            deleteConfirmCancelText: 'Non',\n            deleteTitle: 'Supprimer',\n        },\n    },\n};\n\nexport { str2Locale, locale2text };\n"
  },
  {
    "path": "src/lib/components/navigation/AntdAnchor.react.js",
    "content": "// react核心\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Anchor } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n\n/**\n * 锚点组件AntdAnchor\n */\nconst AntdAnchor = ({\n    id,\n    className,\n    style,\n    key,\n    linkDict,\n    direction = 'vertical',\n    align = 'right',\n    containerId,\n    targetOffset,\n    affix = true,\n    bounds = 5,\n    offsetTop,\n    replace = false,\n    currentAnchor,\n    setProps,\n    ...others\n}) => {\n    // 监听锚点被点击情况\n    const onClick = (e, link) => {\n        setProps({\n            clickedLink: link,\n        });\n    };\n\n    return (\n        <div\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            style={{ float: align }}\n            data-dash-is-loading={useLoading()}\n        >\n            {\n                <Anchor\n                    id={id}\n                    className={\n                        isString(className)\n                            ? className\n                            : className\n                              ? useCss(className)\n                              : undefined\n                    }\n                    style={style}\n                    key={key}\n                    items={linkDict}\n                    direction={direction}\n                    onClick={onClick}\n                    getContainer={\n                        containerId\n                            ? document.getElementById(containerId)\n                                ? () => document.getElementById(containerId)\n                                : undefined\n                            : undefined\n                    }\n                    targetOffset={targetOffset}\n                    affix={affix}\n                    bounds={bounds}\n                    offsetTop={offsetTop}\n                    replace={replace}\n                    getCurrentAnchor={\n                        currentAnchor ? () => currentAnchor : undefined\n                    }\n                />\n            }\n        </div>\n    );\n};\n\n// 定义递归PropTypes\nconst PropLinkNodeShape = {\n    /**\n     * 节点唯一识别id\n     */\n    key: PropTypes.string,\n    /**\n     * 节点标题\n     */\n    title: PropTypes.string,\n\n    /**\n     * 节点目标链接地址\n     */\n    href: PropTypes.string,\n\n    /**\n     * 节点链接跳转行为\n     */\n    target: PropTypes.string,\n};\n\nconst PropLinkNode = PropTypes.shape(PropLinkNodeShape);\nPropLinkNodeShape.children = PropTypes.arrayOf(PropLinkNode);\nconst linkDictPropTypes = PropTypes.arrayOf(PropLinkNode);\n\nAntdAnchor.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 目录层次数据结构\n     */\n    linkDict: linkDictPropTypes.isRequired,\n\n    /**\n     * 导航方向，可选项有`'vertical'`、`'horizontal'`，其中`'horizontal'`方向下不支持子目录\n     * 默认值：`'vertical'`\n     */\n    direction: PropTypes.oneOf(['vertical', 'horizontal']),\n\n    /**\n     * 锚点位置，可选项有`'left'`、`'right'`\n     * 默认值：`'right'`\n     */\n    align: PropTypes.oneOf(['left', 'right']),\n\n    /**\n     * 锚点目标容器id\n     */\n    containerId: PropTypes.string,\n\n    /**\n     * 锚点位移偏移量，默认同参数offsetTop\n     */\n    targetOffset: PropTypes.number,\n\n    /**\n     * 是否开启固定模式\n     * 默认值：`true`\n     */\n    affix: PropTypes.bool,\n\n    /**\n     * 锚点像素边距\n     * 默认值：`5`\n     */\n    bounds: PropTypes.number,\n\n    /**\n     * 设置距离窗口顶部触发锚定效果的指定像素偏移量\n     */\n    offsetTop: PropTypes.number,\n\n    /**\n     * 设置为`true`后，浏览器后退或前进时，不会跳转到锚点地址\n     * 默认值：`false`\n     */\n    replace: PropTypes.bool,\n\n    /**\n     * 强制指定当前处于高亮状态的锚点链接\n     */\n    currentAnchor: PropTypes.string,\n\n    /**\n     * 监听锚点节点点击事件\n     */\n    clickedLink: PropTypes.object,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdAnchor;\n"
  },
  {
    "path": "src/lib/components/navigation/AntdBreadcrumb.react.js",
    "content": "// react核心\nimport React from 'react';\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Breadcrumb, Menu } from 'antd';\nimport AntdIcon from '../general/AntdIcon.react';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n\n/**\n * 面包屑组件AntdBreadcrumb\n */\nconst AntdBreadcrumb = ({\n    id,\n    className,\n    style,\n    key,\n    separator = '/',\n    items,\n    setProps,\n    ...others\n}) => {\n    return (\n        <Breadcrumb\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            items={items.map((item) => ({\n                key: item.key,\n                title: (\n                    <>\n                        {item.icon ? (\n                            item.iconRenderer === 'fontawesome' ? (\n                                React.createElement('i', {\n                                    className: item.icon,\n                                    style: { marginRight: 3 },\n                                })\n                            ) : (\n                                <AntdIcon\n                                    icon={item.icon}\n                                    style={{ marginRight: 3 }}\n                                />\n                            )\n                        ) : null}\n                        <a href={item.href} target={item.target}>\n                            {item.title}\n                        </a>\n                    </>\n                ),\n                onClick: (e) =>\n                    setProps({\n                        clickedItem: {\n                            itemTitle: item.title,\n                            itemKey: item.key,\n                            timestamp: Date.now(),\n                        },\n                    }),\n                menu: item.menuItems\n                    ? {\n                          items: item.menuItems.map((menuItem) => ({\n                              key: menuItem.title || menuItem.key,\n                              label: (\n                                  <>\n                                      {menuItem.icon ? (\n                                          menuItem.iconRenderer ===\n                                          'fontawesome' ? (\n                                              React.createElement('i', {\n                                                  className: menuItem.icon,\n                                                  style: { marginRight: 3 },\n                                              })\n                                          ) : (\n                                              <AntdIcon\n                                                  icon={menuItem.icon}\n                                                  style={{ marginRight: 3 }}\n                                              />\n                                          )\n                                      ) : null}\n                                      <a\n                                          href={menuItem.href}\n                                          target={menuItem.target}\n                                          onClick={(e) =>\n                                              setProps({\n                                                  clickedItem: {\n                                                      itemTitle: item.title,\n                                                      itemKey: item.key,\n                                                      menuItemTitle:\n                                                          menuItem.title,\n                                                      menuItemKey: menuItem.key,\n                                                      timestamp: Date.now(),\n                                                  },\n                                              })\n                                          }\n                                      >\n                                          {menuItem.title}\n                                      </a>\n                                  </>\n                              ),\n                              disabled: menuItem.disabled,\n                          })),\n                      }\n                    : null,\n            }))}\n            separator={separator}\n            data-dash-is-loading={useLoading()}\n        />\n    );\n};\n\nAntdBreadcrumb.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 面包屑节点数据结构\n     */\n    items: PropTypes.arrayOf(\n        PropTypes.exact({\n            /**\n             * 节点标题\n             */\n            title: PropTypes.string,\n            /**\n             * 节点唯一key值\n             */\n            key: PropTypes.string,\n            /**\n             * 节点链接地址\n             */\n            href: PropTypes.string,\n            /**\n             * 节点链接跳转行为\n             */\n            target: PropTypes.string,\n            /**\n             * 节点前缀图标名称，与`iconRenderer`方式相关联，`'AntdIcon'`方式下同AntdIcon的icon参数，`'fontawesome'`方式下代表图标的css类名\n             */\n            icon: PropTypes.string,\n            /**\n             * 前缀图标渲染方式，可选项有`'AntdIcon'`、`'fontawesome'`\n             * 默认值：`'AntdIcon'`\n             */\n            iconRenderer: PropTypes.oneOf(['AntdIcon', 'fontawesome']),\n            /**\n             * 为当前节点设置下拉菜单生成所需的数据结构\n             */\n            menuItems: PropTypes.arrayOf(\n                PropTypes.exact({\n                    /**\n                     * 下拉菜单节点标题\n                     */\n                    title: PropTypes.string,\n                    /**\n                     * 下拉菜单节点唯一key值\n                     */\n                    key: PropTypes.string,\n                    /**\n                     * 下拉菜单节点链接地址\n                     */\n                    href: PropTypes.string,\n                    /**\n                     * 下拉菜单节点链接跳转方式\n                     */\n                    target: PropTypes.string,\n                    /**\n                     * 是否禁用当前下拉菜单节点\n                     */\n                    disabled: PropTypes.bool,\n                    /**\n                     * 下拉菜单节点前缀图标名称，与`iconRenderer`方式相关联，`'AntdIcon'`方式下同AntdIcon的icon参数，`'fontawesome'`方式下代表图标的css类名\n                     */\n                    icon: PropTypes.string,\n                    /**\n                     * 前缀图标渲染方式，可选项有`'AntdIcon'`、`'fontawesome'`\n                     * 默认值：`'AntdIcon'`\n                     */\n                    iconRenderer: PropTypes.oneOf(['AntdIcon', 'fontawesome']),\n                })\n            ),\n        })\n    ),\n\n    /**\n     * 组件型，分隔符\n     * 默认值：`'/'`\n     */\n    separator: PropTypes.node,\n\n    /**\n     * 监听面包屑节点点击事件\n     */\n    clickedItem: PropTypes.shape({\n        /**\n         * 对应节点标题\n         */\n        itemTitle: PropTypes.string,\n        /**\n         * 对应节点key值\n         */\n        itemKey: PropTypes.string,\n        /**\n         * 对应下拉菜单节点标题\n         */\n        menuItemTitle: PropTypes.string,\n        /**\n         * 对应下拉菜单节点key值\n         */\n        menuItemKey: PropTypes.string,\n        /**\n         * 点击事件时间戳\n         */\n        timestamp: PropTypes.number,\n    }),\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdBreadcrumb;\n"
  },
  {
    "path": "src/lib/components/navigation/AntdDropdown.react.js",
    "content": "// react核心\nimport React, { useContext, useEffect } from 'react';\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Dropdown, Button, Typography } from 'antd';\nimport AntdIcon from '../general/AntdIcon.react';\nimport { DownOutlined } from '@ant-design/icons';\n// 辅助库\nimport { isString, isUndefined } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 自定义上下文\nimport PropsContext from '../../contexts/PropsContext';\n\nconst { Link } = Typography;\n\n/**\n * 下拉菜单组件AntdDropdown\n */\nconst AntdDropdown = ({\n    id,\n    children,\n    className,\n    style,\n    wrapperStyle,\n    wrapperClassName,\n    key,\n    title,\n    buttonMode = false,\n    arrow = false,\n    disabled = false,\n    overlayClassName,\n    overlayStyle,\n    placement,\n    trigger = 'hover',\n    autoAdjustOverflow = true,\n    visible = false,\n    menuItems,\n    nClicks = 0,\n    selectable = false,\n    multiple = false,\n    selectedKeys,\n    nonSelectableKeys = [],\n    popupContainer = 'body',\n    buttonProps,\n    freePosition = false,\n    freePositionStyle,\n    freePositionClassName,\n    setProps,\n    batchPropsNames = [],\n    ...others\n}) => {\n    // 批属性监听\n    useEffect(() => {\n        if (batchPropsNames && batchPropsNames.length !== 0) {\n            const _batchPropsValues = {};\n            for (const propName of batchPropsNames) {\n                _batchPropsValues[propName] = props[propName];\n            }\n            setProps({\n                batchPropsValues: _batchPropsValues,\n            });\n        }\n    });\n\n    const context = useContext(PropsContext);\n\n    // 递归处理菜单项，支持级联菜单\n    const transformMenuItem = (menuItem) => ({\n        type: menuItem.isDivider ? 'divider' : undefined,\n        disabled: menuItem.disabled,\n        key: menuItem.key || menuItem.title,\n        label: (\n            <a href={menuItem.href} target={menuItem.target}>\n                {menuItem.title}\n            </a>\n        ),\n        extra: menuItem.extra,\n        icon: menuItem.icon ? (\n            menuItem.iconRenderer === 'fontawesome' ? (\n                React.createElement('i', {\n                    className: menuItem.icon,\n                })\n            ) : (\n                <AntdIcon icon={menuItem.icon} />\n            )\n        ) : null,\n        children: menuItem.children\n            ? menuItem.children.map(transformMenuItem)\n            : undefined,\n    });\n\n    return (\n        <Dropdown\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            menu={{\n                items: menuItems.map(transformMenuItem),\n                selectable: selectable,\n                multiple: multiple,\n                selectedKeys: selectedKeys,\n                onClick: (item, key, keyPath, e) => {\n                    setProps({\n                        clickedKey: item.key,\n                        nClicks: nClicks + 1,\n                        ...(freePosition && !multiple\n                            ? {\n                                  visible: false,\n                              }\n                            : {}),\n                    });\n                },\n                onSelect: (e) =>\n                    setProps({\n                        selectedKeys: (e.selectedKeys || []).filter(\n                            (key) => !nonSelectableKeys.includes(key)\n                        ),\n                    }),\n                onDeselect: (e) => setProps({ selectedKeys: e.selectedKeys }),\n            }}\n            arrow={arrow}\n            disabled={\n                context && !isUndefined(context.componentDisabled)\n                    ? context.componentDisabled\n                    : disabled\n            }\n            overlayClassName={\n                isString(overlayClassName)\n                    ? overlayClassName\n                    : overlayClassName\n                      ? useCss(overlayClassName)\n                      : undefined\n            }\n            overlayStyle={overlayStyle}\n            placement={placement}\n            trigger={[trigger]}\n            autoAdjustOverflow={autoAdjustOverflow}\n            open={visible}\n            onOpenChange={(e) => setProps({ visible: e })}\n            getPopupContainer={\n                popupContainer === 'parent'\n                    ? (triggerNode) => triggerNode.parentNode\n                    : undefined\n            }\n            data-dash-is-loading={useLoading()}\n        >\n            {\n                // 开启自由位置模式\n                freePosition ? (\n                    <div\n                        style={{\n                            width: 1,\n                            height: 1,\n                            position: 'fixed',\n                            background: 'transparent',\n                            ...freePositionStyle,\n                        }}\n                        className={freePositionClassName}\n                    />\n                ) : children ? (\n                    <div\n                        className={\n                            isString(wrapperClassName)\n                                ? wrapperClassName\n                                : wrapperClassName\n                                  ? useCss(wrapperClassName)\n                                  : undefined\n                        }\n                        style={{\n                            display: 'inline-block',\n                            ...wrapperStyle,\n                        }}\n                    >\n                        {children}\n                    </div>\n                ) : buttonMode ? (\n                    <Button {...buttonProps}>\n                        {title} <DownOutlined />\n                    </Button>\n                ) : (\n                    <Link onClick={(e) => e.preventDefault()}>\n                        {title} <DownOutlined />\n                    </Link>\n                )\n            }\n        </Dropdown>\n    );\n};\n\nAntdDropdown.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，下拉菜单触发锚定元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 锚定元素父容器css样式\n     */\n    wrapperStyle: PropTypes.object,\n\n    /**\n     * 锚定元素父容器css类名\n     */\n    wrapperClassName: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 下拉菜单触发元素标题内容，children参数未设置时有效\n     */\n    title: PropTypes.string,\n\n    /**\n     * 下拉菜单触发元素是否渲染为按钮形式，children参数未设置时有效\n     * 默认值：`false`\n     */\n    buttonMode: PropTypes.bool,\n\n    /**\n     * 针对下拉菜单触发元素的按钮形式进行进一步配置\n     */\n    buttonProps: PropTypes.exact({\n        /**\n         * 组件型，按钮图标元素\n         */\n        icon: PropTypes.node,\n        /**\n         * 按钮尺寸规格，可选项有`'small'`、`'middle'`、`'large'`\n         * 默认值：`'middle'`\n         */\n        size: PropTypes.oneOf(['small', 'middle', 'large']),\n        /**\n         * 按钮类型，可选项有`'default'`、`'primary'`、`'ghost'`、`'dashed'`、`'link'`、`'text'`\n         * 默认值：`'default'`\n         */\n        type: PropTypes.oneOf([\n            'default',\n            'primary',\n            'ghost',\n            'dashed',\n            'link',\n            'text',\n        ]),\n        /**\n         * 按钮是否呈现危险样式\n         * 默认值：`false`\n         */\n        danger: PropTypes.bool,\n        /**\n         * 按钮css样式\n         */\n        style: PropTypes.object,\n        /**\n         * 按钮css类名\n         */\n        className: PropTypes.string,\n    }),\n\n    /**\n     * 是否开启自由位置模式\n     * 默认值：`false`\n     */\n    freePosition: PropTypes.bool,\n\n    /**\n     * 自由位置模式开启后，控制挂载位置对应css样式\n     */\n    freePositionStyle: PropTypes.object,\n\n    /**\n     * 自由位置模式开启后，控制挂载位置对应css类名\n     */\n    freePositionClassName: PropTypes.string,\n\n    /**\n     * 监听被点击的下拉菜单选项key值\n     */\n    clickedKey: PropTypes.string,\n\n    /**\n     * 监听下拉菜单选项累计被点击次数\n     * 默认值：`0`\n     */\n    nClicks: PropTypes.number,\n\n    /**\n     * 下拉菜单数据结构\n     */\n    menuItems: PropTypes.arrayOf(\n        PropTypes.exact({\n            /**\n             * 组件型，节点标题\n             */\n            title: PropTypes.node,\n            /**\n             * 组件型，额外内容\n             */\n            extra: PropTypes.node,\n            /**\n             * 节点链接地址\n             */\n            href: PropTypes.string,\n            /**\n             * 节点链接跳转行为\n             */\n            target: PropTypes.string,\n            /**\n             * 是否禁用节点\n             * 默认值：`false`\n             */\n            disabled: PropTypes.bool,\n            /**\n             * 节点前缀图标名称，与`iconRenderer`方式相关联，`'AntdIcon'`方式下同AntdIcon的icon参数，`'fontawesome'`方式下代表图标的css类名\n             */\n            icon: PropTypes.string,\n            /**\n             * 前缀图标渲染方式，可选项有`'AntdIcon'`、`'fontawesome'`\n             * 默认值：`'AntdIcon'`\n             */\n            iconRenderer: PropTypes.oneOf(['AntdIcon', 'fontawesome']),\n            /**\n             * 节点唯一key值\n             */\n            key: PropTypes.string,\n            /**\n             * 节点是否渲染为分割线\n             */\n            isDivider: PropTypes.bool,\n            /**\n             * 子菜单项，用于构建级联菜单\n             */\n            children: PropTypes.array,\n        })\n    ),\n\n    /**\n     * 菜单项是否可选择\n     * 默认值：`false`\n     */\n    selectable: PropTypes.bool,\n\n    /**\n     * 菜单项是否可多选\n     * 默认值：`false`\n     */\n    multiple: PropTypes.bool,\n\n    /**\n     * 设置或监听当前已选中菜单项key值\n     */\n    selectedKeys: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 设置不可选中项key值数组\n     * 默认值：`[]`\n     */\n    nonSelectableKeys: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 下拉菜单是否渲染指示箭头\n     * 默认值：`false`\n     */\n    arrow: PropTypes.bool,\n\n    /**\n     * 是否禁用组件功能\n     * 默认值：`false`\n     */\n    disabled: PropTypes.bool,\n\n    /**\n     * 下拉菜单容器css类名，支持[动态css](/advanced-classname)\n     */\n    overlayClassName: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 下拉菜单容器css样式\n     */\n    overlayStyle: PropTypes.object,\n\n    /**\n     * 下拉菜单弹出方位，可选项有`'bottomLeft'`、`'bottomCenter'`、`'bottomRight'`、`'topLeft'`、`'topCenter'`、`'topRight'`\n     */\n    placement: PropTypes.oneOf([\n        'bottomLeft',\n        'bottomCenter',\n        'bottomRight',\n        'topLeft',\n        'topCenter',\n        'topRight',\n    ]),\n\n    /**\n     * 下拉菜单显示触发方式，可选项有`'click'`、`'hover'`\n     * 默认值：`'hover'`\n     */\n    trigger: PropTypes.oneOf(['click', 'hover']),\n\n    /**\n     * 下拉菜单是否在被遮挡时自动调整位置\n     * 默认值：`true`\n     */\n    autoAdjustOverflow: PropTypes.bool,\n\n    /**\n     * 监听或设置下拉菜单是否展开\n     * 默认值：`false`\n     */\n    visible: PropTypes.bool,\n\n    /**\n     * 下拉菜单展开层锚定策略，可选项有`'parent'`、`'body'`\n     * 默认值：`'body'`\n     */\n    popupContainer: PropTypes.oneOf(['parent', 'body']),\n\n    /**\n     * 需要纳入批属性监听的属性名\n     * 默认值：`[]`\n     */\n    batchPropsNames: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 批量监听与当前batchPropsNames对应的属性值\n     */\n    batchPropsValues: PropTypes.object,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdDropdown;\n"
  },
  {
    "path": "src/lib/components/navigation/AntdMenu.react.js",
    "content": "// react核心\nimport React, { useEffect, useMemo } from 'react';\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Menu, Button } from 'antd';\nimport AntdIcon from '../general/AntdIcon.react';\nimport { MenuUnfoldOutlined, MenuFoldOutlined } from '@ant-design/icons';\n// 辅助库\nimport {\n    get,\n    has,\n    isArray,\n    isUndefined,\n    isNull,\n    isString,\n    cloneDeep,\n} from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 内部组件\nimport { UtilsLink } from '../../internal_components/UtilsLink.react';\n\nconst { SubMenu, Item, ItemGroup, Divider } = Menu;\n\nfunction findByKey(array, key) {\n    for (const item of array) {\n        if (get(item, 'props.key') === key) {\n            return item;\n        }\n        if (get(item, 'children') && isArray(get(item, 'children'))) {\n            const result = findByKey(item.children, key);\n            if (result) {\n                return result;\n            }\n        }\n    }\n    return null;\n}\n\nfunction findKeyPath(array, key, path = []) {\n    for (const item of array) {\n        if (item?.props?.key) {\n            const currentPath = [...path, item.props.key];\n            if (get(item, 'props.key') === key) {\n                return currentPath;\n            }\n            if (get(item, 'children') && isArray(get(item, 'children'))) {\n                const result = findKeyPath(item.children, key, currentPath);\n                if (result) {\n                    return result;\n                }\n            }\n        }\n    }\n    return null;\n}\n\nconst getLevelKeys = (items1) => {\n    const key = {};\n    const func = (items2, level = 1) => {\n        items2.forEach((item) => {\n            if (item?.props?.key) {\n                key[item.props.key] = level;\n            }\n            if (item?.children) {\n                func(item.children, level + 1);\n            }\n        });\n    };\n    func(items1);\n    return key;\n};\n\n// 字符串 -> 组件\nconst str2Jsx = new Map([\n    ['SubMenu', SubMenu],\n    ['Item', Item],\n    ['ItemGroup', ItemGroup],\n    ['Divider', Divider],\n]);\n\n// 递归推导多层菜单结构\nconst raw2Jsx = (obj, str2Jsx, menuItemKeyToTitle, menuItemKeyToIcon) => {\n    // 若obj为数组\n    if (Array.isArray(obj)) {\n        // 若obj为数组，则针对数组中每个对象向下递归\n        obj = obj.map((obj_) =>\n            raw2Jsx(obj_, str2Jsx, menuItemKeyToTitle, menuItemKeyToIcon)\n        );\n    } else if (obj.hasOwnProperty('component')) {\n        // 若obj包含children属性，则向下递归处理\n        if (obj.hasOwnProperty('children')) {\n            Object.assign(obj, {\n                children: obj.children.map((obj_) =>\n                    raw2Jsx(\n                        obj_,\n                        str2Jsx,\n                        menuItemKeyToTitle,\n                        menuItemKeyToIcon\n                    )\n                ),\n            });\n            if (obj.component === 'SubMenu') {\n                obj = (\n                    <SubMenu\n                        key={obj.props.key}\n                        title={\n                            menuItemKeyToTitle[obj.props.key] || obj.props.title\n                        }\n                        disabled={obj.props.disabled}\n                        icon={\n                            menuItemKeyToIcon[obj.props.key] ||\n                            (obj.props.iconRenderer === 'fontawesome' ? (\n                                React.createElement('i', {\n                                    className: obj.props.icon,\n                                })\n                            ) : (\n                                <AntdIcon icon={obj.props.icon} />\n                            ))\n                        }\n                    >\n                        {obj.children}\n                    </SubMenu>\n                );\n            } else {\n                obj = (\n                    <ItemGroup\n                        key={obj.props.key}\n                        title={\n                            menuItemKeyToTitle[obj.props.key] || obj.props.title\n                        }\n                        disabled={obj.props.disabled}\n                        icon={\n                            menuItemKeyToIcon[obj.props.key] ||\n                            (obj.props.iconRenderer === 'fontawesome' ? (\n                                React.createElement('i', {\n                                    className: obj.props.icon,\n                                })\n                            ) : (\n                                <AntdIcon icon={obj.props.icon} />\n                            ))\n                        }\n                    >\n                        {obj.children}\n                    </ItemGroup>\n                );\n            }\n        } else {\n            // 检查obj.component是否为Divider\n            if (obj.component === 'Divider') {\n                obj = <Divider dashed={obj.props && obj.props.dashed} />;\n            } else if (obj.props.href) {\n                // 生成Item对应的jsx\n                obj = (\n                    <Item\n                        key={obj.props.key}\n                        title={\n                            menuItemKeyToTitle[obj.props.key] || obj.props.title\n                        }\n                        disabled={obj.props.disabled}\n                        danger={obj.props.danger}\n                        icon={\n                            menuItemKeyToIcon[obj.props.key] ||\n                            (obj.props.iconRenderer === 'fontawesome' ? (\n                                React.createElement('i', {\n                                    className: obj.props.icon,\n                                })\n                            ) : (\n                                <AntdIcon icon={obj.props.icon} />\n                            ))\n                        }\n                        name={obj.props && obj.props.name}\n                    >\n                        <UtilsLink\n                            href={obj.props.href}\n                            target={obj.props.target}\n                        >\n                            {menuItemKeyToTitle[obj.props.key] ||\n                                obj.props.title}\n                        </UtilsLink>\n                    </Item>\n                );\n            } else {\n                obj = (\n                    <Item\n                        key={obj.props.key}\n                        title={\n                            menuItemKeyToTitle[obj.props.key] || obj.props.title\n                        }\n                        disabled={obj.props.disabled}\n                        danger={obj.props.danger}\n                        icon={\n                            menuItemKeyToIcon[obj.props.key] ||\n                            (obj.props.iconRenderer === 'fontawesome' ? (\n                                React.createElement('i', {\n                                    className: obj.props.icon,\n                                })\n                            ) : (\n                                <AntdIcon icon={obj.props.icon} />\n                            ))\n                        }\n                        name={obj.props && obj.props.name}\n                    >\n                        {menuItemKeyToTitle[obj.props.key] || obj.props.title}\n                    </Item>\n                );\n            }\n        }\n    }\n    return obj;\n};\n\n/**\n * 导航菜单组件AntdMenu\n */\nconst AntdMenu = ({\n    id,\n    className,\n    style,\n    key,\n    expandIcon,\n    menuItems,\n    menuItemKeyToTitle,\n    menuItemKeyToIcon,\n    mode = 'vertical',\n    theme = 'light',\n    defaultOpenKeys,\n    currentKey,\n    openKeys,\n    onlyExpandCurrentSubMenu = false,\n    defaultSelectedKey,\n    renderCollapsedButton = false,\n    popupContainer = 'body',\n    inlineCollapsed,\n    inlineIndent = 24,\n    triggerSubMenuAction = 'hover',\n    setProps,\n    persistence,\n    persisted_props,\n    persistence_type,\n    ...others\n}) => {\n    const levelKeys = useMemo(() => {\n        return getLevelKeys(menuItems);\n    }, [menuItems]);\n\n    const onOpenChange = (keys) => {\n        if (onlyExpandCurrentSubMenu) {\n            if (isUndefined(openKeys) || isNull(openKeys)) {\n                openKeys = [];\n            }\n            const currentOpenKey = keys.find(\n                (key) => openKeys.indexOf(key) === -1\n            );\n            if (!isUndefined(currentOpenKey)) {\n                const repeatIndex = keys\n                    .filter((key) => key !== currentOpenKey)\n                    .findIndex(\n                        (key) => levelKeys[key] === levelKeys[currentOpenKey]\n                    );\n                setProps({\n                    openKeys: keys\n                        .filter((_, index) => index !== repeatIndex)\n                        .filter(\n                            (key) => levelKeys[key] <= levelKeys[currentOpenKey]\n                        ),\n                });\n            } else {\n                setProps({ openKeys: keys });\n            }\n        } else {\n            setProps({ openKeys: keys });\n        }\n    };\n\n    useEffect(() => {\n        // 初始化currentKey\n        if (defaultSelectedKey && !currentKey) {\n            // 当defaultSelectedKey不为空且currentKey为空时\n            // 为currentKey初始化defaultSelectedKey对应的key值\n            setProps({ currentKey: defaultSelectedKey });\n        }\n\n        // 初始化openKeys\n        if (defaultOpenKeys) {\n            // 当defaultOpenKeys不为空且openKeys为空时\n            // 为openKeys初始化defaultOpenKeys对应的key值\n            setProps({ openKeys: defaultOpenKeys });\n        }\n    }, []);\n\n    useEffect(() => {\n        // 当currentKey发生变化时，自动查找currentKey对应的菜单信息\n        const currentItem = findByKey(menuItems, currentKey);\n        // 当currentKey发生变化时，自动查找currentKey对应的key路径信息和菜单路径信息\n        const currentKeyPath = findKeyPath(menuItems, currentKey);\n        const currentItemPath = currentKeyPath?.map((item) =>\n            findByKey(menuItems, item)\n        );\n        setProps({\n            currentItem: currentItem,\n            currentKeyPath: currentKeyPath,\n            currentItemPath: currentItemPath,\n        });\n    }, [currentKey]);\n\n    // 基于menuItems推导jsx数据结构\n    const _menuItems = raw2Jsx(\n        cloneDeep(menuItems),\n        str2Jsx,\n        menuItemKeyToTitle || {},\n        menuItemKeyToIcon || {}\n    );\n\n    // 监听Item的点击事件\n    const listenSelected = (item) => {\n        // 将当前选中的key值赋给currentKey\n        setProps({ currentKey: item.key });\n    };\n\n    if (renderCollapsedButton) {\n        return (\n            <div style={{ width: '100%' }}>\n                <Button\n                    type=\"primary\"\n                    onClick={() =>\n                        setProps({ inlineCollapsed: !inlineCollapsed })\n                    }\n                >\n                    {React.createElement(\n                        inlineCollapsed ? MenuUnfoldOutlined : MenuFoldOutlined\n                    )}\n                </Button>\n                <Menu\n                    // 提取具有data-*或aria-*通配格式的属性\n                    {...pickBy(\n                        (_, k) =>\n                            k.startsWith('data-') || k.startsWith('aria-'),\n                        others\n                    )}\n                    id={id}\n                    className={\n                        isString(className)\n                            ? className\n                            : className\n                              ? useCss(className)\n                              : undefined\n                    }\n                    style={style}\n                    key={key}\n                    expandIcon={\n                        has(expandIcon, 'collapse') && has(expandIcon, 'expand')\n                            ? (props) =>\n                                  props.isSubMenu\n                                      ? props.isOpen\n                                          ? expandIcon.collapse\n                                          : expandIcon.expand\n                                      : undefined\n                            : expandIcon\n                    }\n                    mode={mode}\n                    theme={theme}\n                    selectedKeys={[currentKey]}\n                    openKeys={openKeys}\n                    defaultOpenKeys={defaultOpenKeys}\n                    defaultSelectedKeys={\n                        defaultSelectedKey\n                            ? [defaultSelectedKey]\n                            : defaultSelectedKey\n                    }\n                    onSelect={listenSelected}\n                    onOpenChange={onOpenChange}\n                    getPopupContainer={\n                        popupContainer === 'parent'\n                            ? (triggerNode) => triggerNode.parentNode\n                            : undefined\n                    }\n                    inlineCollapsed={inlineCollapsed}\n                    inlineIndent={inlineIndent}\n                    triggerSubMenuAction={triggerSubMenuAction}\n                    data-dash-is-loading={useLoading()}\n                >\n                    {_menuItems}\n                </Menu>\n            </div>\n        );\n    }\n    return (\n        <Menu\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            expandIcon={\n                has(expandIcon, 'collapse') && has(expandIcon, 'expand')\n                    ? (props) =>\n                          props.isSubMenu\n                              ? props.isOpen\n                                  ? expandIcon.collapse\n                                  : expandIcon.expand\n                              : undefined\n                    : expandIcon\n            }\n            mode={mode}\n            theme={theme}\n            selectedKeys={[currentKey]}\n            openKeys={openKeys}\n            defaultOpenKeys={defaultOpenKeys}\n            defaultSelectedKeys={\n                defaultSelectedKey ? [defaultSelectedKey] : defaultSelectedKey\n            }\n            onSelect={listenSelected}\n            onOpenChange={onOpenChange}\n            getPopupContainer={\n                popupContainer === 'parent'\n                    ? (triggerNode) => triggerNode.parentNode\n                    : undefined\n            }\n            inlineCollapsed={inlineCollapsed}\n            inlineIndent={inlineIndent}\n            triggerSubMenuAction={triggerSubMenuAction}\n            data-dash-is-loading={useLoading()}\n        >\n            {_menuItems}\n        </Menu>\n    );\n};\n\nAntdMenu.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 自定义展开图标，建议仅在`mode='inline'`时使用字典类型\n     */\n    expandIcon: PropTypes.oneOfType([\n        PropTypes.node,\n        PropTypes.exact({\n            /**\n             * 展开图标\n             */\n            expand: PropTypes.node,\n            /**\n             * 收起图标\n             */\n            collapse: PropTypes.node,\n        }),\n    ]),\n\n    /**\n     * 导航菜单数据结构\n     */\n    menuItems: PropTypes.array,\n\n    /**\n     * 为指定节点定义组件型菜单项标题，优先级高于menuItems中对应节点的title属性\n     */\n    menuItemKeyToTitle: PropTypes.objectOf(PropTypes.node),\n\n    /**\n     * 为指定节点定义组件型菜单项图标元素，优先级高于menuItems中对应节点的icon属性\n     */\n    menuItemKeyToIcon: PropTypes.objectOf(PropTypes.node),\n\n    /**\n     * 显示模式，可选项有`'vertical'`、`'horizontal'`、`'inline'`\n     * 默认值：`'vertical'`\n     */\n    mode: PropTypes.oneOf(['vertical', 'horizontal', 'inline']),\n\n    /**\n     * 主题，可选项有`'light'`、`'dark'`\n     * 默认值：`'light'`\n     */\n    theme: PropTypes.oneOf(['light', 'dark']),\n\n    /**\n     * 监听或设置当前已选中菜单项key值\n     */\n    currentKey: PropTypes.string,\n\n    /**\n     * 监听当前已选中菜单项信息\n     */\n    currentItem: PropTypes.object,\n\n    /**\n     * 监听当前已选中菜单项key值路径信息\n     */\n    currentKeyPath: PropTypes.array,\n\n    /**\n     * 监听当前已选中菜单项路径信息\n     */\n    currentItemPath: PropTypes.array,\n\n    /**\n     * 监听或设置当前已展开子菜单项key值\n     */\n    openKeys: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 是否只展开当前选中项的父级菜单\n     * 默认值：`false`\n     */\n    onlyExpandCurrentSubMenu: PropTypes.bool,\n\n    /**\n     * 默认展开的菜单项key值\n     */\n    defaultOpenKeys: PropTypes.arrayOf(PropTypes.string),\n\n    // 默认选中的菜单项对应key\n    defaultSelectedKey: PropTypes.string,\n\n    /**\n     * 是否渲染菜单折叠状态控制按钮\n     * 默认值：`false`\n     */\n    renderCollapsedButton: PropTypes.bool,\n\n    /**\n     * 菜单展开层锚定策略，可选项有`'parent'`、`'body'`\n     * 默认值：`'body'`\n     */\n    popupContainer: PropTypes.oneOf(['parent', 'body']),\n\n    /**\n     * 当前菜单是否折叠，仅inline模式下有效\n     * 默认值：`false`\n     */\n    inlineCollapsed: PropTypes.bool,\n\n    /**\n     * inline模式下，子菜单相对上一级的像素缩进宽度\n     * 默认值：`24`\n     */\n    inlineIndent: PropTypes.number,\n\n    /**\n     * `SubMenu`展开/关闭的触发行为，可选项有`'hover'`、`'click'`，`mode='inline'`下无效\n     * 默认值：`'hover'`\n     */\n    triggerSubMenuAction: PropTypes.oneOf(['hover', 'click']),\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n\n    /**\n     * 是否为当前组件开启持久化功能\n     */\n    persistence: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.string,\n        PropTypes.number,\n    ]),\n\n    /**\n     * 当前组件启用持久化的属性值数组，可选项有`'currentKey'`、`'openKeys'`\n     * 默认值：`['currentKey', 'openKeys']`\n     */\n    persisted_props: PropTypes.arrayOf(\n        PropTypes.oneOf(['currentKey', 'openKeys'])\n    ),\n\n    /**\n     * 当前组件的属性持久化存储类型\n     * 默认值：`'local'`\n     */\n    persistence_type: PropTypes.oneOf(['local', 'session', 'memory']),\n};\n\nAntdMenu.dashPersistence = {\n    persisted_props: ['currentKey', 'openKeys'],\n    persistence_type: 'local',\n};\n\nexport default AntdMenu;\n"
  },
  {
    "path": "src/lib/components/navigation/AntdPageHeader.react.js",
    "content": "// react核心\nimport PropTypes from 'prop-types';\n// antd核心\nimport { PageHeader } from '@ant-design/pro-components';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { parseChildrenToArray, useLoading } from '../utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n\n/**\n * 页头组件AntdPageHeader\n */\nconst AntdPageHeader = ({\n    id,\n    children,\n    className,\n    style,\n    key,\n    title,\n    subTitle,\n    showBackIcon = true,\n    historyBackDisabled = false,\n    backClicks = 0,\n    ghost = false,\n    setProps,\n    ...others\n}) => {\n    children = parseChildrenToArray(children);\n\n    return (\n        <PageHeader\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            title={title}\n            subTitle={subTitle}\n            backIcon={showBackIcon ? undefined : false}\n            ghost={ghost}\n            onBack={\n                historyBackDisabled\n                    ? () => setProps({ backClicks: backClicks + 1 })\n                    : () => window.history.back()\n            }\n            data-dash-is-loading={useLoading()}\n        >\n            {children}\n        </PageHeader>\n    );\n};\n\nAntdPageHeader.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，内嵌元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 组件型，页头标题内容\n     */\n    title: PropTypes.node,\n\n    /**\n     * 组件型，页头副标题内容\n     */\n    subTitle: PropTypes.node,\n\n    /**\n     * 是否渲染返回按钮\n     * 默认值：`true`\n     */\n    showBackIcon: PropTypes.bool,\n\n    /**\n     * 是否禁用点击返回按钮回退上一地址的功能\n     * 默认值：`false`\n     */\n    historyBackDisabled: PropTypes.bool,\n\n    /**\n     * 返回按钮累计点击次数，用于监听返回按钮点击行为\n     * 默认值：`0`\n     */\n    backClicks: PropTypes.number,\n\n    /**\n     * 是否开启透明背景模式\n     * 默认值：`false`\n     */\n    ghost: PropTypes.bool,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdPageHeader;\n"
  },
  {
    "path": "src/lib/components/navigation/AntdPagination.react.js",
    "content": "// react核心\nimport { useEffect, useContext } from 'react';\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Pagination, ConfigProvider } from 'antd';\n// 辅助库\nimport { str2Locale, locale2text } from '../locales.react';\nimport { isString, isUndefined } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 自定义上下文\nimport PropsContext from '../../contexts/PropsContext';\n\n/**\n * 分页组件AntdPagination\n */\nconst AntdPagination = ({\n    id,\n    style,\n    className,\n    key,\n    locale = 'zh-cn',\n    align = 'start',\n    defaultCurrent = 1,\n    defaultPageSize = 10,\n    current,\n    pageSize,\n    disabled = false,\n    hideOnSinglePage = false,\n    pageSizeOptions,\n    showQuickJumper = false,\n    showSizeChanger = false,\n    showTotalPrefix,\n    showTotalSuffix,\n    simple = false,\n    size = 'default',\n    total,\n    showTotal = true,\n    showLessItems = false,\n    setProps,\n    persistence,\n    persisted_props,\n    persistence_type,\n    batchPropsNames = [],\n    ...others\n}) => {\n    // 批属性监听\n    useEffect(() => {\n        if (batchPropsNames && batchPropsNames.length !== 0) {\n            const _batchPropsValues = {};\n            for (const propName of batchPropsNames) {\n                _batchPropsValues[propName] = props[propName];\n            }\n            setProps({\n                batchPropsValues: _batchPropsValues,\n            });\n        }\n    });\n\n    const context = useContext(PropsContext);\n    locale = (context && context.locale) || locale;\n\n    useEffect(() => {\n        if (defaultCurrent && !current) {\n            setProps({ current: defaultCurrent });\n        }\n\n        if (defaultPageSize && !pageSize) {\n            setProps({ pageSize: defaultPageSize });\n        }\n    }, []);\n\n    const onChange = (page, pageSize) => {\n        setProps({ current: page, pageSize: pageSize });\n    };\n\n    const renderShowTotal = (e) => {\n        return `${showTotalPrefix || locale2text.AntdPagination[locale].showTotalPrefix} ${e.toString()} ${showTotalSuffix || locale2text.AntdPagination[locale].showTotalSuffix}`;\n    };\n\n    // 返回定制化的前端部件\n    return (\n        <ConfigProvider locale={str2Locale.get(locale)}>\n            <Pagination\n                // 提取具有data-*或aria-*通配格式的属性\n                {...pickBy(\n                    (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                    others\n                )}\n                id={id}\n                className={\n                    isString(className)\n                        ? className\n                        : className\n                          ? useCss(className)\n                          : undefined\n                }\n                style={style}\n                key={key}\n                pageSize={pageSize || defaultPageSize}\n                align={align}\n                defaultCurrent={defaultCurrent}\n                defaultPageSize={defaultPageSize}\n                current={current}\n                disabled={\n                    context && !isUndefined(context.componentDisabled)\n                        ? context.componentDisabled\n                        : disabled\n                }\n                hideOnSinglePage={hideOnSinglePage}\n                pageSizeOptions={pageSizeOptions}\n                showQuickJumper={showQuickJumper}\n                showSizeChanger={showSizeChanger}\n                showTotal={showTotal ? renderShowTotal : undefined}\n                simple={simple}\n                size={size}\n                total={total}\n                showLessItems={showLessItems}\n                onChange={onChange}\n                data-dash-is-loading={useLoading()}\n            />\n        </ConfigProvider>\n    );\n};\n\nAntdPagination.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n     * 默认值：`'zh-cn'`\n     */\n    locale: PropTypes.oneOf(['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']),\n\n    /**\n     * 组件尺寸规格，可选项有`'start'`、`'center'`、`'end'`\n     * 默认值：`'start'`\n     */\n    align: PropTypes.oneOf(['start', 'center', 'end']),\n\n    /**\n     * 初始化时的当前页码\n     * 默认值：`1`\n     */\n    defaultCurrent: PropTypes.number,\n\n    /**\n     * 初始化时的每页条数\n     * 默认值：`10`\n     */\n    defaultPageSize: PropTypes.number,\n\n    /**\n     * 监听或设置当前页码\n     */\n    current: PropTypes.number,\n\n    /**\n     * 是否禁用当前组件功能\n     * 默认值：`false`\n     */\n    disabled: PropTypes.bool,\n\n    /**\n     * 仅有一页时是否隐藏分页器\n     * 默认值：`false`\n     */\n    hideOnSinglePage: PropTypes.bool,\n\n    /**\n     * 监听或设置每页条数\n     */\n    pageSize: PropTypes.number,\n\n    /**\n     * 每页条数切换可选项\n     */\n    pageSizeOptions: PropTypes.arrayOf(PropTypes.number),\n\n    /**\n     * 是否渲染每页条数切换器\n     * 默认值：`false`\n     */\n    showSizeChanger: PropTypes.bool,\n\n    /**\n     * 是否渲染快捷跳页控件\n     * 默认值：`false`\n     */\n    showQuickJumper: PropTypes.bool,\n\n    /**\n     * 总记录数描述前缀内容\n     */\n    showTotalPrefix: PropTypes.string,\n\n    /**\n     * 总记录数描述后缀内容\n     */\n    showTotalSuffix: PropTypes.string,\n\n    /**\n     * 是否启用简洁模式\n     * 默认值：`false`\n     */\n    simple: PropTypes.bool,\n\n    /**\n     * 组件尺寸规格，可选项有`'default'`、`'small'`\n     * 默认值：`'default'`\n     */\n    size: PropTypes.oneOf(['default', 'small']),\n\n    /**\n     * 总记录数\n     */\n    total: PropTypes.number,\n\n    /**\n     * 是否渲染总记录数描述内容\n     * 默认值：`true`\n     */\n    showTotal: PropTypes.bool,\n\n    /**\n     * 是否显示较少的跳页按钮\n     * 默认值：`false`\n     */\n    showLessItems: PropTypes.bool,\n\n    /**\n     * 需要纳入批属性监听的属性名\n     * 默认值：`[]`\n     */\n    batchPropsNames: PropTypes.arrayOf(PropTypes.string),\n\n    /**\n     * 批量监听与当前batchPropsNames对应的属性值\n     */\n    batchPropsValues: PropTypes.object,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n\n    /**\n     * 是否为当前组件开启持久化功能\n     */\n    persistence: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.string,\n        PropTypes.number,\n    ]),\n\n    /**\n     * 当前组件启用持久化的属性值数组，可选项有`'current'`、`'pageSize'`\n     * 默认值：`['current', 'pageSize']`\n     */\n    persisted_props: PropTypes.arrayOf(\n        PropTypes.oneOf(['current', 'pageSize'])\n    ),\n\n    /**\n     * 当前组件的属性持久化存储类型\n     * 默认值：`'local'`\n     */\n    persistence_type: PropTypes.oneOf(['local', 'session', 'memory']),\n};\n\nAntdPagination.dashPersistence = {\n    persisted_props: ['current', 'pageSize'],\n    persistence_type: 'local',\n};\n\nexport default AntdPagination;\n"
  },
  {
    "path": "src/lib/components/navigation/AntdSteps.react.js",
    "content": "// react核心\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Steps } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n\n/**\n * 步骤条组件AntdSteps\n */\nconst AntdSteps = ({\n    id,\n    className,\n    style,\n    key,\n    current = 0,\n    direction = 'horizontal',\n    labelPlacement,\n    progressDot = false,\n    size = 'default',\n    status = 'process',\n    type = 'default',\n    steps,\n    allowClick = false,\n    responsive = true,\n    percent,\n    setProps,\n    ...others\n}) => {\n    // 限制current上限\n    setProps({ current: current < steps.length ? current : steps.length });\n\n    // 限制current下限\n    setProps({ current: current >= 0 ? current : 0 });\n\n    return (\n        <Steps\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            items={steps}\n            current={current}\n            direction={direction}\n            labelPlacement={labelPlacement}\n            progressDot={progressDot}\n            size={size}\n            status={status}\n            type={type}\n            responsive={responsive}\n            percent={percent}\n            onChange={\n                allowClick\n                    ? (current) => setProps({ current: current })\n                    : undefined\n            }\n            data-dash-is-loading={useLoading()}\n        />\n    );\n};\n\nAntdSteps.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 必填，步骤内容定义数据结构\n     */\n    steps: PropTypes.arrayOf(\n        PropTypes.exact({\n            /**\n             * 步骤标题\n             */\n            title: PropTypes.node.isRequired,\n            /**\n             * 步骤子标题\n             */\n            subTitle: PropTypes.node,\n            /**\n             * 步骤描述内容\n             */\n            description: PropTypes.node,\n            /**\n             * 步骤自定义图标\n             */\n            icon: PropTypes.node,\n            /**\n             * 是否禁用当前步骤\n             */\n            disabled: PropTypes.bool,\n            /**\n             * 强制设置当前步骤状态，同参数status\n             */\n            status: PropTypes.oneOf(['wait', 'process', 'finish', 'error']),\n        })\n    ).isRequired,\n\n    /**\n     * 当前所处的步骤序号\n     * 默认值：`0`\n     */\n    current: PropTypes.number,\n\n    /**\n     * 步骤条显示方向，可选项有`'horizontal'`、`'vertical'`\n     * 默认值：`'horizontal'`\n     */\n    direction: PropTypes.oneOf(['horizontal', 'vertical']),\n\n    /**\n     * 标签内容显示方位，可选项有`'horizontal'`、`'vertical'`\n     */\n    labelPlacement: PropTypes.oneOf(['horizontal', 'vertical']),\n\n    /**\n     * 是否渲染为点状步骤条\n     * 默认值：`false`\n     */\n    progressDot: PropTypes.bool,\n\n    /**\n     * 步骤条尺寸规格，可选项有`'default'`、`'small'`\n     * 默认值：`'default'`\n     */\n    size: PropTypes.oneOf(['default', 'small']),\n\n    /**\n     * 步骤条状态，可选项有`'wait'`、`'process'`、`'finish'`、`'error'`\n     * 默认值：`'process'`\n     */\n    status: PropTypes.oneOf(['wait', 'process', 'finish', 'error']),\n\n    /**\n     * 步骤条类型，可选项有`'default'`、`'navigation'`、`'inline'`\n     * 默认值：`'default'`\n     */\n    type: PropTypes.oneOf(['default', 'navigation', 'inline']),\n\n    /**\n     * 是否可点击切换步骤\n     * 默认值：`false`\n     */\n    allowClick: PropTypes.bool,\n\n    /**\n     * 是否在页面宽度小于532px时自动强制垂直显示\n     * 默认值：`true`\n     */\n    responsive: PropTypes.bool,\n\n    /**\n     * 当前步骤进度，取值应在0到100之间，适用于常规步骤条\n     */\n    percent: PropTypes.number,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdSteps;\n"
  },
  {
    "path": "src/lib/components/other/AntdAffix.react.js",
    "content": "// react核心\nimport React from 'react';\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Affix } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { parseChildrenToArray, useLoading } from '../utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n\n/**\n * 固钉组件AntdAffix\n */\nconst AntdAffix = ({\n    id,\n    className,\n    style,\n    key,\n    children,\n    offsetBottom,\n    offsetTop = 0,\n    target,\n    setProps,\n    ...others\n}) => {\n    children = parseChildrenToArray(children);\n\n    return (\n        <Affix\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            offsetBottom={offsetBottom}\n            offsetTop={offsetTop}\n            target={() => (target ? document.getElementById(target) : window)}\n            onChange={(e) => setProps({ affixed: e })}\n            data-dash-is-loading={useLoading()}\n        >\n            {children}\n        </Affix>\n    );\n};\n\nAntdAffix.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，内嵌元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 触发固钉效果的视窗底部距离像素阈值\n     */\n    offsetBottom: PropTypes.number,\n\n    /**\n     * 触发固钉效果的视窗顶部距离像素阈值\n     * 默认值：`0`\n     */\n    offsetTop: PropTypes.number,\n\n    /**\n     * 滚动事件监听的特定目标容器id\n     */\n    target: PropTypes.string,\n\n    /**\n     * 监听当前目标是否已触发固定\n     */\n    affixed: PropTypes.bool,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdAffix;\n"
  },
  {
    "path": "src/lib/components/other/AntdBackTop.react.js",
    "content": "// react核心\nimport React from 'react';\nimport PropTypes from 'prop-types';\n// antd核心\nimport { FloatButton } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n\nconst { BackTop } = FloatButton;\n\n/**\n * 回到顶部组件AntdBackTop\n */\nconst AntdBackTop = ({\n    id,\n    className,\n    style,\n    key,\n    duration = 0.45,\n    visibilityHeight = 400,\n    containerId,\n    containerSelector,\n    nClicks = 0,\n    setProps,\n    ...others\n}) => {\n    return (\n        <BackTop\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            target={\n                containerId || containerSelector\n                    ? containerId\n                        ? () => document.getElementById(containerId) || window\n                        : () => eval(containerSelector)\n                    : () => window\n            }\n            duration={duration * 1000}\n            visibilityHeight={visibilityHeight}\n            onClick={() => setProps({ nClicks: nClicks + 1 })}\n            data-dash-is-loading={useLoading()}\n        />\n    );\n};\n\nAntdBackTop.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 回到顶部过程耗时，单位：秒\n     * 默认值：`0.45`\n     */\n    duration: PropTypes.number,\n\n    /**\n     * 回到顶部按钮显示时对应的页面滚动像素高度阈值\n     * 默认值：`400`\n     */\n    visibilityHeight: PropTypes.number,\n\n    /**\n     * 滚动事件监听的特定目标容器id\n     */\n    containerId: PropTypes.string,\n\n    /**\n     * 滚动事件监听的特定目标容器js选择代码，优先级低于containerId\n     */\n    containerSelector: PropTypes.string,\n\n    /**\n     * 监听回到顶部按钮累计被点击次数\n     * 默认值：`0`\n     */\n    nClicks: PropTypes.number,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdBackTop;\n"
  },
  {
    "path": "src/lib/components/other/AntdConfigProvider.react.js",
    "content": "// react核心\nimport PropTypes from 'prop-types';\n// antd核心\nimport { ConfigProvider, theme } from 'antd';\nimport {\n    // 默认主题\n    defaultTheme,\n    // 暗色主题\n    darkTheme,\n} from '@ant-design/compatible';\nimport {\n    StyleProvider,\n    legacyLogicalPropertiesTransformer,\n} from '@ant-design/cssinjs';\n// 辅助库\nimport { isUndefined, omitBy } from 'lodash';\nimport { useLoading } from '../utils';\n// 自定义上下文\nimport PropsContext from '../../contexts/PropsContext';\n\nconst str2algorithm = new Map([\n    ['default', theme.defaultAlgorithm],\n    ['dark', theme.darkAlgorithm],\n    ['compact', theme.compactAlgorithm],\n]);\n\nconst str2oldTheme = new Map([\n    ['default', defaultTheme],\n    ['dark', darkTheme],\n]);\n\n/**\n * 参数配置组件AntdConfigProvider\n */\nconst AntdConfigProvider = ({\n    id,\n    children,\n    algorithm = 'default',\n    cssVar,\n    useOldTheme,\n    primaryColor,\n    componentDisabled,\n    componentSize,\n    locale,\n    wavesDisabled = false,\n    token,\n    componentsToken,\n    compatibilityMode = false,\n    enableLayer = false,\n    setProps,\n}) => {\n    const themeObject = useOldTheme\n        ? str2oldTheme.get(useOldTheme)\n        : omitBy(\n              {\n                  algorithm: Array.isArray(algorithm)\n                      ? algorithm.map((e) => str2algorithm.get(e))\n                      : str2algorithm.get(algorithm),\n                  cssVar: cssVar,\n                  hashed: false,\n                  token: omitBy(\n                      {\n                          colorPrimary: primaryColor,\n                          ...token,\n                      },\n                      isUndefined\n                  ),\n                  components: omitBy(\n                      {\n                          ...componentsToken,\n                      },\n                      isUndefined\n                  ),\n              },\n              isUndefined\n          );\n    const configProviderInstance = (\n        <ConfigProvider\n            id={id}\n            theme={themeObject}\n            wave={{ disabled: wavesDisabled }}\n            data-dash-is-loading={useLoading()}\n        >\n            {children}\n        </ConfigProvider>\n    );\n\n    if (compatibilityMode) {\n        return (\n            <PropsContext.Provider\n                value={{\n                    locale,\n                    componentDisabled,\n                    componentSize,\n                }}\n            >\n                <StyleProvider\n                    hashPriority={'high'}\n                    transformers={[legacyLogicalPropertiesTransformer]}\n                >\n                    {configProviderInstance}\n                </StyleProvider>\n            </PropsContext.Provider>\n        );\n    } else if (enableLayer) {\n        return (\n            <PropsContext.Provider\n                value={{\n                    locale,\n                    componentDisabled,\n                    componentSize,\n                }}\n            >\n                <StyleProvider layer>{configProviderInstance}</StyleProvider>\n            </PropsContext.Provider>\n        );\n    }\n    return (\n        <PropsContext.Provider\n            value={{\n                locale,\n                componentDisabled,\n                componentSize,\n            }}\n        >\n            {configProviderInstance}\n        </PropsContext.Provider>\n    );\n};\n\nAntdConfigProvider.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，内嵌元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 为内部组件设置快捷主题算法，支持多种主题组合，可选项有`'default'`、`'dark'`、`'compact'`\n     * 默认值：`'default'`\n     */\n    algorithm: PropTypes.oneOfType([\n        PropTypes.oneOf(['default', 'dark', 'compact']),\n        PropTypes.arrayOf(PropTypes.oneOf(['default', 'dark', 'compact'])),\n    ]),\n\n    /**\n     * 是否开启`CSS`变量模式，具体参考：https://ant-design.antgroup.com/docs/react/css-variables\n     * 默认值：`false`\n     */\n    cssVar: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.shape({\n            prefix: PropTypes.string,\n            key: PropTypes.string,\n        }),\n    ]),\n\n    /**\n     * 是否强制使用`0.3.x`版本之前的主题样式，可选项有`'default'`、`'dark'`\n     */\n    useOldTheme: PropTypes.oneOf(['default', 'dark']),\n\n    /**\n     * 主题色\n     */\n    primaryColor: PropTypes.string,\n\n    /**\n     * 是否针后代元素中的所有组件强制设置禁用状态\n     */\n    componentDisabled: PropTypes.bool,\n\n    /**\n     * 强制设置后代元素的尺寸规格，可选项有`'small'`、`'middle'`、`'large'`，其中`'default'`兼容`'middle'`\n     */\n    componentSize: PropTypes.oneOf(['small', 'middle', 'large']),\n\n    /**\n     * 强制设置后代元素的语言，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）\n     */\n    locale: PropTypes.oneOf(['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']),\n\n    /**\n     * 是否禁用内部组件水波纹动效\n     * 默认值：`false`\n     */\n    wavesDisabled: PropTypes.bool,\n\n    /**\n     * 配置`design token`相关参数\n     */\n    token: PropTypes.shape({\n        /**\n         * 是否开启动画效果\n         * 默认值：`true`\n         */\n        motion: PropTypes.bool,\n    }),\n\n    /**\n     * 配置针对具体组件的`design token`相关参数\n     */\n    componentsToken: PropTypes.objectOf(\n        PropTypes.shape({\n            /**\n             * 是否开启派生样式自动推导运算\n             * 默认值：`false`\n             */\n            algorithm: PropTypes.bool,\n        })\n    ),\n\n    /**\n     * 是否开启针对`88`及以下版本`Chromium`内核浏览器的向下兼容模式\n     * 默认值：`false`\n     */\n    compatibilityMode: PropTypes.bool,\n\n    /**\n     * 是否启用layer样式降权\n     * 默认值：`false`\n     */\n    enableLayer: PropTypes.bool,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdConfigProvider;\n"
  },
  {
    "path": "src/lib/components/other/AntdCopyText.react.js",
    "content": "// react核心\nimport React, { useContext } from 'react';\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Typography, ConfigProvider } from 'antd';\n// 辅助库\nimport { str2Locale } from '../locales.react';\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 上下文\nimport PropsContext from '../../contexts/PropsContext';\n\nconst { Text } = Typography;\n\n/**\n * 文字复制组件AntdCopyText\n */\nconst AntdCopyText = ({\n    id,\n    className,\n    style,\n    key,\n    locale = 'zh-cn',\n    text = '',\n    format = 'text/plain',\n    tooltips,\n    beforeIcon,\n    afterIcon,\n    setProps,\n    ...others\n}) => {\n    const context = useContext(PropsContext);\n    locale = (context && context.locale) || locale;\n\n    return (\n        <ConfigProvider locale={str2Locale.get(locale)}>\n            <Text\n                // 提取具有data-*或aria-*通配格式的属性\n                {...pickBy(\n                    (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                    others\n                )}\n                id={id}\n                className={\n                    isString(className)\n                        ? className\n                        : className\n                          ? useCss(className)\n                          : undefined\n                }\n                style={style}\n                key={key}\n                copyable={{\n                    text: text,\n                    icon: [beforeIcon, afterIcon],\n                    format: format,\n                    tooltips: tooltips,\n                }}\n                data-dash-is-loading={useLoading()}\n            />\n        </ConfigProvider>\n    );\n};\n\nAntdCopyText.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n     * 默认值：`'zh-cn'`\n     */\n    locale: PropTypes.oneOf(['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']),\n\n    /**\n     * 复制目标内容\n     */\n    text: PropTypes.string,\n\n    /**\n     * 剪切板内容的类型，可选项有`'text/plain'`、`text/html`\n     * 默认值：`'text/plain'`\n     */\n    format: PropTypes.oneOf(['text/plain', 'text/html']),\n\n    /**\n     * 设置复制前后的文字提示内容，格式为`[复制前内容, 复制后内容]`，设置为`false`时关闭文字提示\n     */\n    tooltips: PropTypes.oneOfType([\n        PropTypes.arrayOf(PropTypes.node),\n        PropTypes.bool,\n    ]),\n\n    /**\n     * 组件型，未复制状态图标\n     */\n    beforeIcon: PropTypes.node,\n\n    /**\n     * 组件型，完成复制状态图标\n     */\n    afterIcon: PropTypes.node,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdCopyText;\n"
  },
  {
    "path": "src/lib/components/other/AntdHappyProvider.react.js",
    "content": "// react核心\nimport PropTypes from 'prop-types';\n// antd核心\nimport { HappyProvider } from '@ant-design/happy-work-theme';\n// 辅助库\nimport { useLoading } from '../utils';\n\n/**\n * 快乐工作特效组件AntdHappyProvider\n */\nconst AntdHappyProvider = ({ children, disabled = false }) => {\n    return (\n        <HappyProvider disabled={disabled} data-dash-is-loading={useLoading()}>\n            {children}\n        </HappyProvider>\n    );\n};\n\nAntdHappyProvider.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，内嵌元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 是否禁用当前特效\n     * 默认值：`false`\n     */\n    disabled: PropTypes.bool,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdHappyProvider;\n"
  },
  {
    "path": "src/lib/components/other/AntdTour.react.js",
    "content": "// react核心\nimport React from 'react';\nimport PropTypes from 'prop-types';\n// antd核心\nimport { Tour, ConfigProvider } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { str2Locale } from '../locales.react';\nimport { useLoading } from '../utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n\n/**\n * 漫游式引导组件AntdTour\n */\nconst AntdTour = ({\n    id,\n    className,\n    style,\n    key,\n    locale = 'zh-cn',\n    steps = [],\n    arrow = true,\n    placement = 'bottom',\n    mask = true,\n    type = 'default',\n    open = false,\n    current,\n    zIndex = 1001,\n    setProps,\n    ...others\n}) => {\n    return (\n        <ConfigProvider locale={str2Locale.get(locale)}>\n            <Tour\n                // 提取具有data-*或aria-*通配格式的属性\n                {...pickBy(\n                    (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                    others\n                )}\n                id={id}\n                className={\n                    isString(className)\n                        ? className\n                        : className\n                          ? useCss(className)\n                          : undefined\n                }\n                style={style}\n                key={key}\n                steps={steps.map((item) => ({\n                    ...item,\n                    target: item.targetId\n                        ? () => document.getElementById(item.targetId)\n                        : item.targetSelector\n                          ? () => document.querySelector(item.targetSelector)\n                          : null,\n                }))}\n                arrow={arrow}\n                placement={placement}\n                mask={mask}\n                type={type}\n                open={open}\n                current={current}\n                zIndex={zIndex}\n                onChange={(e) => setProps({ current: e })}\n                onClose={() => setProps({ open: false })}\n                onFinish={() => setProps({ open: false })}\n                data-dash-is-loading={useLoading()}\n            />\n        </ConfigProvider>\n    );\n};\n\nAntdTour.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名，支持[动态css](/advanced-classname)\n     */\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n\n    /**\n     * 组件文案语种，可选项有`'zh-cn'`（简体中文）、`'en-us'`（英语）、`'de-de'`（德语）、`'fr-fr'`（法语）、`'ru-ru'`（俄语）\n     * 默认值：`'zh-cn'`\n     */\n    locale: PropTypes.oneOf(['zh-cn', 'en-us', 'de-de', 'ru-ru', 'fr-fr']),\n\n    /**\n     * 配置引导步骤\n     */\n    steps: PropTypes.arrayOf(\n        PropTypes.exact({\n            /**\n             * 当前步骤目标元素id，优先级高于`targetSelector`\n             */\n            targetId: PropTypes.string,\n            /**\n             * 定位当前步骤目标元素的javascript代码字符串\n             */\n            targetSelector: PropTypes.string,\n            /**\n             * 配置当前步骤箭头\n             * 默认值：`true`\n             */\n            arrow: PropTypes.oneOfType([\n                PropTypes.bool,\n                PropTypes.exact({\n                    /**\n                     * 箭头是否指向目标中心\n                     */\n                    pointAtCenter: PropTypes.bool,\n                }),\n            ]),\n            /**\n             * 组件型，当前步骤弹框的封面内容\n             */\n            cover: PropTypes.node,\n            /**\n             * 组件型，当前步骤弹框的标题内容\n             */\n            title: PropTypes.node,\n            /**\n             * 组件型，当前步骤弹框的描述内容\n             */\n            description: PropTypes.node,\n            /**\n             * 当前引导步骤弹框相对目标元素的位置，可选项有`'center'`、`'left'`、`'leftTop'`、`'leftBottom'`、`'right'`、`'rightTop'`、`'rightBottom'`、`'top'`、`'topLeft'`、`'topRight'`、`'bottom'`、`'bottomLeft'`、`'bottomRight'`\n             */\n            placement: PropTypes.oneOf([\n                'center',\n                'left',\n                'leftTop',\n                'leftBottom',\n                'right',\n                'rightTop',\n                'rightBottom',\n                'top',\n                'topLeft',\n                'topRight',\n                'bottom',\n                'bottomLeft',\n                'bottomRight',\n            ]),\n            /**\n             * 配置当前步骤蒙版层\n             * 默认值：`true`\n             */\n            mask: PropTypes.oneOfType([\n                PropTypes.bool,\n                PropTypes.exact({\n                    /**\n                     * 当前步骤蒙版层css样式\n                     */\n                    style: PropTypes.object,\n                    /**\n                     * 当前步骤蒙版层颜色\n                     */\n                    color: PropTypes.string,\n                }),\n            ]),\n            /**\n             * 当前步骤弹框类型，可选项有`'default'`、`'primary'`\n             * 默认值：`'default'`\n             */\n            type: PropTypes.oneOf(['default', 'primary']),\n            /**\n             * 配置当前步骤下一步按钮\n             */\n            nextButtonProps: PropTypes.exact({\n                /**\n                 * 组件型，按钮内嵌元素\n                 */\n                children: PropTypes.node,\n            }),\n            /**\n             * 配置当前步骤上一步按钮\n             */\n            prevButtonProps: PropTypes.exact({\n                /**\n                 * 组件型，按钮内嵌元素\n                 */\n                children: PropTypes.node,\n            }),\n        })\n    ),\n\n    /**\n     * 统一配置引导步骤弹框箭头\n     * 默认值：`true`\n     */\n    arrow: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.exact({\n            /**\n             * 箭头是否指向目标中心\n             */\n            pointAtCenter: PropTypes.bool,\n        }),\n    ]),\n\n    /**\n     * 统一配置引导步骤弹框相对于目标元素的展开方向，可选项有`'center'`、`'left'`、`'leftTop'`、`'leftBottom'`、`'right'`、`'rightTop'`、`'rightBottom'`、`'top'`、`'topLeft'`、`'topRight'`、`'bottom'`、`'bottomLeft'`、`'bottomRight'`\n     * 默认值：`'bottom'`\n     */\n    placement: PropTypes.oneOf([\n        'center',\n        'left',\n        'leftTop',\n        'leftBottom',\n        'right',\n        'rightTop',\n        'rightBottom',\n        'top',\n        'topLeft',\n        'topRight',\n        'bottom',\n        'bottomLeft',\n        'bottomRight',\n    ]),\n\n    /**\n     * 统一配置引导弹框蒙版\n     * 默认值：`true`\n     */\n    mask: PropTypes.oneOfType([\n        PropTypes.bool,\n        PropTypes.exact({\n            /**\n             * 蒙版层css样式\n             */\n            style: PropTypes.object,\n            /**\n             * 蒙版层颜色\n             */\n            color: PropTypes.string,\n        }),\n    ]),\n\n    /**\n     * 统一设置引导步骤弹框类型，可选项有`'default'`、`'primary'`\n     * 默认值：`'default'`\n     */\n    type: PropTypes.oneOf(['default', 'primary']),\n\n    /**\n     * 监听或设置当前漫游式引导的打开状态\n     * 默认值：`false`\n     */\n    open: PropTypes.bool,\n\n    /**\n     * 监听或设置当前漫游式引导所在步骤序号\n     */\n    current: PropTypes.number,\n\n    /**\n     * 当前漫游式引导z-index\n     * 默认值：`1001`\n     */\n    zIndex: PropTypes.number,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdTour;\n"
  },
  {
    "path": "src/lib/components/other/AntdWatermark.react.js",
    "content": "// react核心\nimport React from 'react';\nimport PropTypes from 'prop-types';\n// antd核心\nimport { WaterMark } from '@ant-design/pro-components';\n// 辅助库\nimport { parseChildrenToArray, useLoading } from '../utils';\nimport { pickBy } from 'ramda';\n\n/**\n * 水印组件AntdWatermark\n */\nconst AntdWatermark = ({\n    id,\n    children,\n    className,\n    style,\n    markClassName,\n    markStyle,\n    key,\n    content,\n    rotate = -22,\n    zIndex,\n    fontColor,\n    fontSize = 16,\n    gapX = 212,\n    gapY = 222,\n    image,\n    width,\n    height,\n    inherit = true,\n    ...others\n}) => {\n    children = parseChildrenToArray(children);\n\n    return (\n        <WaterMark\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={className}\n            style={style}\n            markClassName={markClassName}\n            markStyle={markStyle}\n            key={key}\n            content={content}\n            rotate={rotate}\n            zIndex={zIndex}\n            fontColor={fontColor}\n            fontSize={fontSize}\n            gapX={gapX}\n            gapY={gapY}\n            image={image}\n            width={width}\n            height={height}\n            inherit={inherit}\n            data-dash-is-loading={useLoading()}\n        >\n            {children}\n        </WaterMark>\n    );\n};\n\nAntdWatermark.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，内嵌元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 当前组件css样式\n     */\n    style: PropTypes.object,\n\n    /**\n     * 当前组件css类名\n     */\n    className: PropTypes.string,\n\n    /**\n     * 水印层css类名\n     */\n    markClassName: PropTypes.string,\n\n    /**\n     * 水印层css样式\n     */\n    markStyle: PropTypes.object,\n\n    /**\n     * 配置水印内容，传入数组时渲染多行水印\n     */\n    content: PropTypes.oneOfType([\n        PropTypes.string,\n        PropTypes.arrayOf(PropTypes.string),\n    ]),\n\n    /**\n     * 水印旋转角度\n     * 默认值：`-22`\n     */\n    rotate: PropTypes.number,\n\n    /**\n     * 水印z-index\n     */\n    zIndex: PropTypes.number,\n\n    /**\n     * 文字水印颜色\n     */\n    fontColor: PropTypes.string,\n\n    /**\n     * 文字水印字体大小\n     * 默认值：`16`\n     */\n    fontSize: PropTypes.number,\n\n    /**\n     * 水印之间的水平像素间距\n     * 默认值：`212`\n     */\n    gapX: PropTypes.number,\n\n    /**\n     * 水印之间的垂直像素间距\n     * 默认值：`222`\n     */\n    gapY: PropTypes.number,\n\n    /**\n     * 图片水印地址\n     */\n    image: PropTypes.string,\n\n    /**\n     * 图片水印像素宽度\n     */\n    width: PropTypes.number,\n\n    /**\n     * 图片水印像素高度\n     */\n    height: PropTypes.number,\n\n    /**\n     * 是否将水印传导给`AntdModal`、`AntdDrawer`等弹出类组件\n     * 默认值：`true`\n     */\n    inherit: PropTypes.bool,\n\n    /**\n     * `data-*`格式属性通配\n     */\n    'data-*': PropTypes.string,\n\n    /**\n     * `aria-*`格式属性通配\n     */\n    'aria-*': PropTypes.string,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default AntdWatermark;\n"
  },
  {
    "path": "src/lib/components/other/Fragment.react.js",
    "content": "// react核心\nimport React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\n// antd核心\nimport { theme } from 'antd';\n\nconst { useToken } = theme;\n\n/**\n * 空节点组件Fragment\n */\nconst Fragment = (props) => {\n    const { token: _token } = useToken();\n\n    useEffect(() => {\n        props.setProps({ token: _token });\n    }, [_token]);\n\n    return <>{props.children}</>;\n};\n\nFragment.propTypes = {\n    /**\n     * 组件唯一id\n     */\n    id: PropTypes.string,\n\n    /**\n     * 对当前组件的`key`值进行更新，可实现强制重绘当前组件的效果\n     */\n    key: PropTypes.string,\n\n    /**\n     * 组件型，内嵌元素\n     */\n    children: PropTypes.node,\n\n    /**\n     * 监听当前组件所在作用范围对应的样式`token`参数，需配合上层`AntdConfigProvider`组件使用\n     */\n    token: PropTypes.object,\n\n    /**\n     * Dash-assigned callback that should be called to report property changes\n     * to Dash, to make them available for callbacks.\n     */\n    setProps: PropTypes.func,\n};\n\nexport default Fragment;\n"
  },
  {
    "path": "src/lib/components/styles.css",
    "content": "/* 屏蔽浏览器默认的margin */\nbody {\n    margin: 0;\n}\n\n/* 隐藏幽灵行 */\n.ant-table-measure-row {\n    height: 0px !important;\n}\n\n.editable-cell {\n    position: relative;\n}\n\n.editable-cell-value-wrap {\n    padding: 5px 5px;\n    cursor: pointer;\n    height: 100%;\n}\n\n.editable-row:hover .editable-cell-value-wrap {\n    padding: 4px 4px;\n    border: 1px solid #d9d9d9;\n    border-radius: 4px;\n    height: 100%;\n}\n\n[data-theme=\"dark\"] .editable-row:hover .editable-cell-value-wrap {\n    border: 1px solid #434343;\n}\n\n.ant-table-thead>tr>th,\n.ant-table-tbody>tr>td,\n.ant-table tfoot>tr>th,\n.ant-table tfoot>tr>td {\n    position: relative;\n    padding: 5px 5px;\n    overflow-wrap: break-word;\n}\n\n.ant-table-tbody>tr {\n    height: 36px;\n}\n\n.ant-steps-item-icon .ant-steps-icon {\n    position: relative;\n    top: -1px;\n    color: #1890ff;\n    line-height: 1;\n}\n\n.comment-action {\n    padding-left: 8px;\n    cursor: \"auto\";\n}\n\n[class*=\"-col-rtl\"] .comment-action {\n    padding-right: 8px;\n    padding-left: 0;\n}\n\n.feffery-paste-image-container {\n    height: 400px;\n    overflow: auto;\n    border: 1px solid #d9d9d9;\n    transition: all 0.3s, height 0s;\n    cursor: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAkdJREFUSEtjZMABcnNny3ByMpQyMzNpISv59u3XtokTM/tx6UMXZ4QJJCTM5+Dh+WIB4zMxMe83M1NhkJUVRdFz8eJ9hgcPXr/+9etXGEzi3z+mG9OmZb/AZinYgqbqqWVvvzC2Gyv8YgLxP3xjYvjwR4AhM8sTq0Obm1czmCj+gsu9+cx879MPxicNbTn2WH2Qnzftb5rTF7Dhh2+yM7z8yMzw8x8rgyAfKwPci1Cd/xkYGF69+8Ugwv2bQV3yN4OqxB+wzPaLnA+fvGdxmDAh8wGyJWD9teVT70dYflUAsb/+ZGTgZAMZQxgwIdl+9Bbbg0uPmBOnTMk9gNcCwsZiV0GRBTP38eC1l52dlYGL+efnt1/++5Hlg23XJRmi4/1xWjJ16jqGz5+/MTAw/N84aVJ2AMlBRMiCSZPWMLS3JzLk509nYGRknDZxYmY2zBKMSMbmTEIW9PevZOjqSgFrBVnCwMAwf9KkrCQQgyoW9PQsZ+jtTYO7DdkSqljQ2bmU4f9/rEm7iioWgJz+8+d3hl+/fsJ9cfHi7W+HDl3zppoF6JbQxAJkS2hmAcyS06evUD+IkJP44cNnvh4+fNWHqnGAbMGhQ+c/HzlyyQ9sQU3ZlIeRVt/kcJUFhDIaNn0oFlSXTX0UZfVVlmYWVJVNeRxk8l2GlQV7PbDrJv7CjhgfzFEQ/R0oyvtPCJvim+/FGWLjfUmqKlCCCKSzrHhyAA87QzA2U5i5RMKcXUzYSLHhwYNniEgmpLGsbG4XITXY5Lu6kssAynVWbI/9nxAAAAAASUVORK5CYII=),\n        auto;\n}\n\n.feffery-paste-image-container:hover {\n    border: 1px solid rgb(64, 169, 255);\n}\n\n/* AntdTable自定义角标模式 */\n.ant-corner-mark-top-right {\n    position: relative;\n    height: 100%;\n}\n\n.ant-corner-mark-top-right:after {\n    position: absolute;\n    top: 2px;\n    right: 2px;\n    width: 0;\n    height: 0;\n    border: 6px solid var(--ant-corner-mark-color);\n    border-bottom: 6px solid transparent;\n    border-left: 6px solid transparent;\n    border-top-right-radius: 2px;\n    content: \"\";\n    transform: var(--ant-corner-mark-transform);\n}\n\n.ant-corner-mark-top-left {\n    position: relative;\n    height: 100%;\n}\n\n.ant-corner-mark-top-left:after {\n    position: absolute;\n    top: 2px;\n    left: 2px;\n    width: 0;\n    height: 0;\n    border: 6px solid var(--ant-corner-mark-color);\n    border-bottom: 6px solid transparent;\n    border-right: 6px solid transparent;\n    border-top-left-radius: 2px;\n    content: \"\";\n    transform: var(--ant-corner-mark-transform);\n}\n\n.ant-corner-mark-bottom-left {\n    position: relative;\n    height: 100%;\n}\n\n.ant-corner-mark-bottom-left:after {\n    position: absolute;\n    bottom: 2px;\n    left: 2px;\n    width: 0;\n    height: 0;\n    border: 6px solid var(--ant-corner-mark-color);\n    border-top: 6px solid transparent;\n    border-right: 6px solid transparent;\n    border-bottom-left-radius: 2px;\n    content: \"\";\n    transform: var(--ant-corner-mark-transform);\n}\n\n.ant-corner-mark-bottom-right {\n    position: relative;\n    height: 100%;\n}\n\n.ant-corner-mark-bottom-right:after {\n    position: absolute;\n    bottom: 2px;\n    right: 2px;\n    width: 0;\n    height: 0;\n    border: 6px solid var(--ant-corner-mark-color);\n    border-top: 6px solid transparent;\n    border-left: 6px solid transparent;\n    border-bottom-right-radius: 2px;\n    content: \"\";\n    transform: var(--ant-corner-mark-transform);\n}\n\n/* 修复AntdTabs开启tabPane切换动画后滚动条异常问题 */\n.ant-tabs {\n    overflow-x: hidden;\n}\n\n.ant-modal-wrap-overwrite {\n    pointer-events: none;\n}\n\n.ant-tree-draggable-icon {\n    cursor: grab;\n}\n\n/* 确保spin容器高度继承自wrapperClassName */\n.ant-spin-nested-loading>.ant-spin-container {\n    height: inherit;\n}\n\n/* 为AntdButton内嵌元素设置间距 */\n.ant-btn>*:not(:last-child) {\n    margin-right: 0.25em;\n}\n\n.ant-tree-title .ant-rate {\n    font-size: 16px;\n}\n\n/* 针对上传组件允许按钮block模式 */\n.ant-upload-button-block .ant-upload {\n    display: block;\n}\n\n/* 为AntdTag图标元素设置间距 */\n.ant-tag span:not(:first-child) {\n    margin-inline-start: 5px;\n}\n\n/* AntdPopupCard、AntdModal内置显隐动效补丁 */\n@keyframes antZoomBigIn {\n    0% {\n        transform: scale(.8);\n        opacity: 0\n    }\n\n    to {\n        transform: scale(1);\n        opacity: 1\n    }\n}\n\n@keyframes antZoomBigOut {\n    0% {\n        transform: scale(1)\n    }\n\n    to {\n        transform: scale(.8);\n        opacity: 0\n    }\n}\n\n.ant-zoom-big-appear,\n.ant-zoom-big-enter,\n.ant-zoom-big-leave {\n    animation-duration: .2s;\n    animation-fill-mode: both;\n    animation-play-state: paused\n}\n\n.ant-zoom-big-appear.ant-zoom-big-appear-active,\n.ant-zoom-big-enter.ant-zoom-big-enter-active {\n    animation-name: antZoomBigIn;\n    animation-play-state: running\n}\n\n.ant-zoom-big-leave.ant-zoom-big-leave-active {\n    animation-name: antZoomBigOut;\n    animation-play-state: running;\n    pointer-events: none\n}\n\n.ant-zoom-big-appear,\n.ant-zoom-big-enter {\n    transform: scale(0);\n    opacity: 0;\n    animation-timing-function: cubic-bezier(.08, .82, .17, 1)\n}\n\n.ant-zoom-big-appear-prepare,\n.ant-zoom-big-enter-prepare {\n    transform: none\n}\n\n.ant-zoom-big-leave {\n    animation-timing-function: cubic-bezier(.78, .14, .15, .86)\n}\n\n.ant-zoom-big-fast-appear,\n.ant-zoom-big-fast-enter,\n.ant-zoom-big-fast-leave {\n    animation-duration: .1s;\n    animation-fill-mode: both;\n    animation-play-state: paused\n}\n\n.ant-zoom-big-fast-appear.ant-zoom-big-fast-appear-active,\n.ant-zoom-big-fast-enter.ant-zoom-big-fast-enter-active {\n    animation-name: antZoomBigIn;\n    animation-play-state: running\n}\n\n.ant-zoom-big-fast-leave.ant-zoom-big-fast-leave-active {\n    animation-name: antZoomBigOut;\n    animation-play-state: running;\n    pointer-events: none\n}\n\n.ant-zoom-big-fast-appear,\n.ant-zoom-big-fast-enter {\n    transform: scale(0);\n    opacity: 0;\n    animation-timing-function: cubic-bezier(.08, .82, .17, 1)\n}\n\n.ant-zoom-big-fast-appear-prepare,\n.ant-zoom-big-fast-enter-prepare {\n    transform: none\n}\n\n.ant-zoom-big-fast-leave {\n    animation-timing-function: cubic-bezier(.78, .14, .15, .86)\n}\n\n@keyframes antSlideLeftIn {\n    0% {\n        transform: scaleX(.8);\n        transform-origin: 0 0;\n        opacity: 0\n    }\n\n    to {\n        transform: scaleX(1);\n        transform-origin: 0 0;\n        opacity: 1\n    }\n}\n\n@keyframes antSlideLeftOut {\n    0% {\n        transform: scaleX(1);\n        transform-origin: 0 0;\n        opacity: 1\n    }\n\n    to {\n        transform: scaleX(.8);\n        transform-origin: 0 0;\n        opacity: 0\n    }\n}\n\n.ant-slide-left-appear,\n.ant-slide-left-enter,\n.ant-slide-left-leave {\n    animation-duration: .2s;\n    animation-fill-mode: both;\n    animation-play-state: paused\n}\n\n.ant-slide-left-appear.ant-slide-left-appear-active,\n.ant-slide-left-enter.ant-slide-left-enter-active {\n    animation-name: antSlideLeftIn;\n    animation-play-state: running\n}\n\n.ant-slide-left-leave.ant-slide-left-leave-active {\n    animation-name: antSlideLeftOut;\n    animation-play-state: running;\n    pointer-events: none\n}\n\n.ant-slide-left-appear,\n.ant-slide-left-enter {\n    transform: scale(0);\n    transform-origin: 0 0;\n    opacity: 0;\n    animation-timing-function: cubic-bezier(.23, 1, .32, 1)\n}\n\n.ant-slide-left-leave {\n    animation-timing-function: cubic-bezier(.755, .05, .855, .06)\n}\n\n@keyframes antSlideRightIn {\n    0% {\n        transform: scaleX(.8);\n        transform-origin: 100% 0;\n        opacity: 0\n    }\n\n    to {\n        transform: scaleX(1);\n        transform-origin: 100% 0;\n        opacity: 1\n    }\n}\n\n@keyframes antSlideRightOut {\n    0% {\n        transform: scaleX(1);\n        transform-origin: 100% 0;\n        opacity: 1\n    }\n\n    to {\n        transform: scaleX(.8);\n        transform-origin: 100% 0;\n        opacity: 0\n    }\n}\n\n.ant-slide-right-appear,\n.ant-slide-right-enter,\n.ant-slide-right-leave {\n    animation-duration: .2s;\n    animation-fill-mode: both;\n    animation-play-state: paused\n}\n\n.ant-slide-right-appear.ant-slide-right-appear-active,\n.ant-slide-right-enter.ant-slide-right-enter-active {\n    animation-name: antSlideRightIn;\n    animation-play-state: running\n}\n\n.ant-slide-right-leave.ant-slide-right-leave-active {\n    animation-name: antSlideRightOut;\n    animation-play-state: running;\n    pointer-events: none\n}\n\n.ant-slide-right-appear,\n.ant-slide-right-enter {\n    transform: scale(0);\n    transform-origin: 0 0;\n    opacity: 0;\n    animation-timing-function: cubic-bezier(.23, 1, .32, 1)\n}\n\n.ant-slide-right-leave {\n    animation-timing-function: cubic-bezier(.755, .05, .855, .06)\n}\n\n@keyframes antMoveLeftIn {\n    0% {\n        transform: translateX(-100%);\n        transform-origin: 0 0;\n        opacity: 0\n    }\n\n    to {\n        transform: translateX(0);\n        transform-origin: 0 0;\n        opacity: 1\n    }\n}\n\n@keyframes antMoveLeftOut {\n    0% {\n        transform: translateX(0);\n        transform-origin: 0 0;\n        opacity: 1\n    }\n\n    to {\n        transform: translateX(-100%);\n        transform-origin: 0 0;\n        opacity: 0\n    }\n}\n\n.ant-move-left-appear,\n.ant-move-left-enter,\n.ant-move-left-leave {\n    animation-duration: .2s;\n    animation-fill-mode: both;\n    animation-play-state: paused\n}\n\n.ant-move-left-appear.ant-move-left-appear-active,\n.ant-move-left-enter.ant-move-left-enter-active {\n    animation-name: antMoveLeftIn;\n    animation-play-state: running\n}\n\n.ant-move-left-leave.ant-move-left-leave-active {\n    animation-name: antMoveLeftOut;\n    animation-play-state: running;\n    pointer-events: none\n}\n\n.ant-move-left-appear,\n.ant-move-left-enter {\n    opacity: 0;\n    animation-timing-function: cubic-bezier(.08, .82, .17, 1)\n}\n\n.ant-move-left-leave {\n    animation-timing-function: cubic-bezier(.6, .04, .98, .34)\n}\n\n@keyframes antMoveRightIn {\n    0% {\n        transform: translateX(100%);\n        transform-origin: 0 0;\n        opacity: 0\n    }\n\n    to {\n        transform: translateX(0);\n        transform-origin: 0 0;\n        opacity: 1\n    }\n}\n\n@keyframes antMoveRightOut {\n    0% {\n        transform: translateX(0);\n        transform-origin: 0 0;\n        opacity: 1\n    }\n\n    to {\n        transform: translateX(100%);\n        transform-origin: 0 0;\n        opacity: 0\n    }\n}\n\n.ant-move-right-appear,\n.ant-move-right-enter,\n.ant-move-right-leave {\n    animation-duration: .2s;\n    animation-fill-mode: both;\n    animation-play-state: paused\n}\n\n.ant-move-right-appear.ant-move-right-appear-active,\n.ant-move-right-enter.ant-move-right-enter-active {\n    animation-name: antMoveRightIn;\n    animation-play-state: running\n}\n\n.ant-move-right-leave.ant-move-right-leave-active {\n    animation-name: antMoveRightOut;\n    animation-play-state: running;\n    pointer-events: none\n}\n\n.ant-move-right-appear,\n.ant-move-right-enter {\n    opacity: 0;\n    animation-timing-function: cubic-bezier(.08, .82, .17, 1)\n}\n\n.ant-move-right-leave {\n    animation-timing-function: cubic-bezier(.6, .04, .98, .34)\n}"
  },
  {
    "path": "src/lib/components/utils.js",
    "content": "import { cloneDeep, isUndefined } from 'lodash';\nimport { toPairs, flatten } from 'ramda';\n\nconst flatToTree = (rawFlat) => {\n    if (rawFlat) {\n        const temp = cloneDeep(rawFlat);\n        const parents = temp.filter((item) => isUndefined(item.parent));\n        const children = temp.filter((item) => item.parent);\n\n        children.forEach((item) => {\n            const currentNode = temp.find((node) => node.key === item.parent);\n\n            currentNode &&\n                (currentNode.children\n                    ? currentNode.children.push(item)\n                    : (currentNode.children = [item]));\n        });\n        return parents;\n    }\n    return rawFlat;\n};\n\nconst parseChildrenToArray = (children) => {\n    if (children && !Array.isArray(children)) {\n        return [children];\n    }\n    return children;\n};\n\nconst resolveChildProps = (child) =>\n    window.dash_component_api.getLayout(child.props.componentPath)?.props;\n\nconst useLoading = () =>\n    window.dash_component_api.useDashContext().useLoading() || undefined;\n\nconst loadingSelector = (componentPath) => (state) => {\n    let stringPath = JSON.stringify(componentPath);\n    stringPath = stringPath.substring(0, stringPath.length - 1);\n\n    const loadingChildren = toPairs(state.loading).reduce(\n        (acc, [path, load]) => {\n            if (path.startsWith(stringPath) && load.length) {\n                return [...acc, load];\n            }\n            return acc;\n        },\n        []\n    );\n\n    if (loadingChildren?.length) {\n        return flatten(loadingChildren);\n    }\n    return [];\n};\n\nexport {\n    flatToTree,\n    parseChildrenToArray,\n    resolveChildProps,\n    useLoading,\n    loadingSelector,\n};\n"
  },
  {
    "path": "src/lib/contexts/FormContext.js",
    "content": "import React from 'react';\n\nconst FormContext = React.createContext();\n\nexport default FormContext;\n"
  },
  {
    "path": "src/lib/contexts/FormItemContext.js",
    "content": "import React from 'react';\n\nconst FormItemContext = React.createContext();\n\nexport default FormItemContext;\n"
  },
  {
    "path": "src/lib/contexts/PropsContext.js",
    "content": "import React from 'react';\n\nconst PropsContext = React.createContext();\n\nexport default PropsContext;\n"
  },
  {
    "path": "src/lib/fragments/AntdTable.react.js",
    "content": "// react核心\nimport React, { useContext, useState, useEffect, useRef } from 'react';\n// antd核心\nimport {\n    Table,\n    Checkbox,\n    Switch,\n    Popover,\n    Popconfirm,\n    ConfigProvider,\n    Typography,\n    Menu,\n    Dropdown,\n    Input,\n    Form,\n    Tag,\n    Button,\n    Badge,\n    Space,\n    Image,\n    Avatar,\n    message,\n    Select,\n    Divider,\n    Tooltip,\n    Progress,\n} from 'antd';\nimport {\n    TinyLine,\n    TinyArea,\n    TinyColumn,\n    RingProgress,\n} from '@ant-design/plots';\nimport AntdIcon from '../components/general/AntdIcon.react';\nimport {\n    SearchOutlined,\n    QuestionCircleOutlined,\n    DownOutlined,\n} from '@ant-design/icons';\n// 辅助库\nimport Highlighter from 'react-highlight-words';\nimport {\n    isNumber,\n    isEqual,\n    isString,\n    isBoolean,\n    isEmpty,\n    omitBy,\n    isUndefined,\n} from 'lodash';\nimport { pickBy } from 'ramda';\nimport { str2Locale, locale2text } from '../components/locales.react';\nimport { useLoading } from '../components/utils';\nimport useStickyOffset from '../hooks/useStickyOffset';\n// 上下文\nimport PropsContext from '../contexts/PropsContext';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../components/dataDisplay/AntdTable.react';\n// 内部组件\nimport { UtilsLink } from '../internal_components/UtilsLink.react';\n\nconst { Text } = Typography;\n\nconst insertNewColumnNode = (column, group, currentLevel, currentNode) => {\n    // 若当前递归到的层级小于group数组长度\n    if (currentLevel < group.length) {\n        // 尝试在currentNode中搜索dataIndex等于当前group层级的元素\n        const matchColumnIdx = currentNode.findIndex(\n            (item) => item.dataIndex === group[currentLevel]\n        );\n        // 若未在currentNode中搜索到当前group层级对应元素\n        if (matchColumnIdx === -1) {\n            // 向currentNode中push当前group层级对应元素\n            currentNode.push({\n                dataIndex: group[currentLevel],\n                title: group[currentLevel],\n                children: [],\n            });\n            // 继续向下一层级递归\n            insertNewColumnNode(\n                column,\n                group,\n                currentLevel + 1,\n                currentNode[currentNode.length - 1].children\n            );\n        } else {\n            // 若在currentNode中搜索到当前group层级对应元素\n            // 继续向下一层级递归\n            insertNewColumnNode(\n                column,\n                group,\n                currentLevel + 1,\n                currentNode[matchColumnIdx].children\n            );\n        }\n    } else {\n        // 否则则视作到达最深层\n        currentNode.push({ ...column });\n    }\n};\n\nconst splitSummaryRowContents = (\n    summaryRowContents,\n    columnCount,\n    blankColumns\n) => {\n    const summaryGroups =\n        blankColumns > 0\n            ? [Array.from({ length: blankColumns }, () => ({ empty: true }))]\n            : [[]];\n    let currentGroupSpans = 0;\n    for (const item of summaryRowContents) {\n        // 检查当前字段追加到末尾分组后，是否超出总列数\n        if (currentGroupSpans + (item.colSpan || 1) > columnCount) {\n            currentGroupSpans = item.colSpan || 1;\n            // 处理前置空白列填充\n            if (blankColumns > 0) {\n                summaryGroups.push([\n                    ...Array.from({ length: blankColumns }, () => ({\n                        empty: true,\n                    })),\n                    item,\n                ]);\n            } else {\n                summaryGroups.push([item]);\n            }\n        } else {\n            currentGroupSpans += item.colSpan || 1;\n            summaryGroups[summaryGroups.length - 1].push(item);\n        }\n    }\n    return summaryGroups;\n};\n\nconst findItemByKey = (array, key) => {\n    let foundItem = null;\n\n    const search = (item) => {\n        if (item.key === key) {\n            foundItem = item;\n            return true;\n        }\n        return Array.isArray(item.children) && item.children.some(search);\n    };\n\n    array.some(search);\n    return foundItem;\n};\n\nconst replaceItemByKey = (array, key, replacement) => {\n    for (let i = 0; i < array.length; i++) {\n        const item = array[i];\n        if (item && item.key === key) {\n            array.splice(i, 1, replacement);\n            return true;\n        }\n\n        if (item && Array.isArray(item.children)) {\n            if (replaceItemByKey(item.children, key, replacement)) {\n                return true;\n            }\n        }\n    }\n\n    return false;\n};\n\n// 定义不触发重绘的参数数组\nconst preventUpdateProps = [\n    'recentlyMouseEnterColumnDataIndex',\n    'recentlyMouseEnterRowKey',\n    'recentlyMouseEnterRow',\n];\n\n/**\n * 表格组件AntdTable\n */\nconst AntdTable = (props) => {\n    let {\n        id,\n        className,\n        style,\n        key,\n        locale,\n        containerId,\n        columns,\n        showHeader,\n        rowHoverable,\n        tableLayout,\n        miniChartHeight,\n        miniChartAnimation,\n        rowSelectionType,\n        selectedRowKeys,\n        rowSelectionWidth,\n        rowSelectionCheckStrictly,\n        rowSelectionIgnoreRowKeys,\n        sticky,\n        titlePopoverInfo,\n        columnsFormatConstraint,\n        enableHoverListen,\n        data,\n        sortOptions,\n        showSorterTooltip,\n        showSorterTooltipTarget,\n        filterOptions,\n        defaultFilteredValues,\n        pagination,\n        bordered,\n        maxHeight,\n        maxWidth,\n        scrollToFirstRowOnChange,\n        size,\n        mode,\n        nClicksButton,\n        nDoubleClicksCell,\n        summaryRowContents,\n        summaryRowBlankColumns,\n        summaryRowFixed,\n        customFormatFuncs,\n        conditionalStyleFuncs,\n        expandedRowKeyToContent,\n        expandedRowWidth,\n        expandRowByClick,\n        defaultExpandedRowKeys,\n        expandedRowKeys,\n        enableCellClickListenColumns,\n        nClicksCell,\n        nContextMenuClicksCell,\n        emptyContent,\n        cellUpdateOptimize,\n        nClicksDropdownItem,\n        hiddenRowKeys,\n        virtual,\n        title,\n        footer,\n        loading,\n        rowClassName,\n        setProps,\n        ...others\n    } = props;\n\n    const context = useContext(PropsContext);\n    locale = (context && context.locale) || locale;\n\n    useEffect(() => {\n        // 处理pagination参数的默认值问题\n        if (isBoolean(pagination) && !pagination) {\n        } else {\n            setProps({\n                pagination: {\n                    ...pagination,\n                    current: pagination?.current ? pagination?.current : 1,\n                },\n            });\n        }\n    }, []);\n\n    const [searchText, setSearchText] = useState('');\n    const [searchedColumn, setSearchedColumn] = useState('');\n\n    const stickyObj = sticky && typeof sticky === 'object' ? sticky : {};\n    const belowSelector = stickyObj.belowSelector ?? undefined;\n    const offsetHeader = Number(stickyObj.offsetHeader || 0);\n    const autoMeasuredOffset = belowSelector\n        ? useStickyOffset({ selector: belowSelector, extra: offsetHeader })\n        : offsetHeader;\n    const {\n        belowSelector: _rm1,\n        offsetHeader: _rm2,\n        ...stickyRest\n    } = stickyObj;\n    const computedSticky =\n        sticky === true ||\n        belowSelector ||\n        (sticky && typeof sticky === 'object')\n            ? { ...stickyRest, offsetHeader: autoMeasuredOffset }\n            : undefined;\n\n    const onPageChange = (pagination, filter, sorter, currentData) => {\n        // 当本次事件由翻页操作引发时\n        if (currentData.action === 'paginate') {\n            setProps({\n                pagination: {\n                    ...pagination,\n                    pageSize: pagination.pageSize,\n                    current: pagination.current,\n                    position: pagination.position\n                        ? Array.isArray(pagination.position)\n                            ? pagination.position[0]\n                            : pagination.position\n                        : pagination.position,\n                },\n                currentData: currentData.currentDataSource,\n            });\n        } else if (currentData.action === 'sort') {\n            // 当sorter为数组时，即为多字段组合排序方式时\n            if (Array.isArray(sorter)) {\n                setProps({\n                    sorter: {\n                        columns: sorter.map((item) => item.column.dataIndex),\n                        orders: sorter.map((item) => item.order),\n                    },\n                });\n            } else if (sorter.order) {\n                // 单字段排序方式\n                setProps({\n                    sorter: {\n                        columns: [sorter.column.dataIndex],\n                        orders: [sorter.order],\n                    },\n                });\n            } else {\n                // 非排序状态\n                setProps({\n                    sorter: {\n                        columns: [],\n                        orders: [],\n                    },\n                });\n            }\n        } else if (currentData.action === 'filter') {\n            setProps({ filter: filter });\n        }\n    };\n\n    // 自定义关键词搜索过滤模式\n    let searchInput;\n    const getColumnSearchProps = (dataIndex, title) => ({\n        filterDropdown: ({\n            setSelectedKeys,\n            selectedKeys,\n            confirm,\n            clearFilters,\n        }) => (\n            <div style={{ padding: 8 }}>\n                <Input\n                    ref={(node) => {\n                        searchInput = node;\n                    }}\n                    placeholder={`${locale2text.AntdTable[locale].filterKeywordPlaceholder} ${title}`}\n                    value={selectedKeys[0]}\n                    onChange={(e) =>\n                        setSelectedKeys(e.target.value ? [e.target.value] : [])\n                    }\n                    onPressEnter={() =>\n                        handleSearch(selectedKeys, confirm, dataIndex)\n                    }\n                    style={{ marginBottom: 8, display: 'block' }}\n                />\n                <Space>\n                    <Button\n                        type=\"primary\"\n                        onClick={() =>\n                            handleSearch(selectedKeys, confirm, dataIndex)\n                        }\n                        icon={<SearchOutlined />}\n                        size=\"small\"\n                        style={{ width: 90 }}\n                    >\n                        {\n                            locale2text.AntdTable[locale]\n                                .filterKeywordSearchButtonText\n                        }\n                    </Button>\n                    <Button\n                        onClick={() => handleSearchReset(clearFilters)}\n                        size=\"small\"\n                        style={{ width: 90 }}\n                    >\n                        {\n                            locale2text.AntdTable[locale]\n                                .filterKeywordResetButtonText\n                        }\n                    </Button>\n                </Space>\n            </div>\n        ),\n        filterIcon: (filtered) => (\n            <SearchOutlined\n                style={{ color: filtered ? '#1890ff' : undefined }}\n            />\n        ),\n        // 搜索筛选\n        onFilter: (value, record) => {\n            if (mode === 'client-side') {\n                // 仅支持非数组型合法输入值，对象型输入支持对content、text、label、tag属性进行搜索筛选\n                if (record[dataIndex] && !Array.isArray(record[dataIndex])) {\n                    // 判断当前记录是否有content属性\n                    if (record[dataIndex]?.content) {\n                        return record[dataIndex].content\n                            .toString()\n                            .toLowerCase()\n                            .includes(value?.toLowerCase());\n                    } else if (record[dataIndex]?.text) {\n                        return record[dataIndex].text\n                            .toString()\n                            .toLowerCase()\n                            .includes(value?.toLowerCase());\n                    } else if (record[dataIndex]?.label) {\n                        return record[dataIndex].label\n                            .toString()\n                            .toLowerCase()\n                            .includes(value?.toLowerCase());\n                    } else if (record[dataIndex]?.tag) {\n                        return record[dataIndex].tag\n                            .toString()\n                            .toLowerCase()\n                            .includes(value?.toLowerCase());\n                    } else if (record[dataIndex]?.toString) {\n                        return record[dataIndex]\n                            .toString()\n                            .toLowerCase()\n                            .includes(value?.toLowerCase());\n                    }\n                } else if (Array.isArray(record[dataIndex])) {\n                    // 若当前记录为数组，分别检查数组元素对象是否具有content、tag、title属性\n                    if (record[dataIndex].some((item) => item?.content)) {\n                        // 检查当前记录数组中是否至少有一个对象的content属性命中关键词\n                        return record[dataIndex].some((item) =>\n                            item?.content\n                                .toString()\n                                .toLowerCase()\n                                .includes(value?.toLowerCase())\n                        );\n                    } else if (record[dataIndex].some((item) => item?.tag)) {\n                        // 检查当前记录数组中是否至少有一个对象的tag属性命中关键词\n                        return record[dataIndex].some((item) =>\n                            item?.tag\n                                .toString()\n                                .toLowerCase()\n                                .includes(value?.toLowerCase())\n                        );\n                    } else if (record[dataIndex].some((item) => item?.title)) {\n                        // 检查当前记录数组中是否至少有一个对象的title属性命中关键词\n                        return record[dataIndex].some((item) =>\n                            item?.title\n                                .toString()\n                                .toLowerCase()\n                                .includes(value?.toLowerCase())\n                        );\n                    }\n                }\n                return false;\n            }\n            return true;\n        },\n        onFilterDropdownVisibleChange: (visible) => {\n            if (visible) {\n                setTimeout(() => searchInput.select(), 100);\n            }\n        },\n        render: (text) =>\n            searchedColumn === dataIndex && isString(text) ? (\n                <Highlighter\n                    highlightStyle={{ backgroundColor: '#ffc069', padding: 0 }}\n                    searchWords={[searchText]}\n                    autoEscape\n                    textToHighlight={text ? text.toString() : ''}\n                />\n            ) : (\n                text\n            ),\n    });\n\n    const handleSearch = (selectedKeys, confirm, dataIndex) => {\n        confirm();\n        setSearchText(selectedKeys[0]);\n        setSearchedColumn(dataIndex);\n    };\n\n    const handleSearchReset = (clearFilters) => {\n        clearFilters();\n        setSearchText('');\n    };\n\n    if (!data) {\n        data = [];\n    }\n\n    // 当未设置行key时，自动以自增1的字符型结果作为key\n    for (const i in data) {\n        if (!data[i].hasOwnProperty('key')) {\n            data[i].key = i.toString();\n        }\n    }\n\n    // 为pagination补充默认参数值\n    if (isBoolean(pagination) && !pagination) {\n    } else {\n        pagination = {\n            ...pagination,\n            showTotalPrefix:\n                pagination?.showTotalPrefix ||\n                locale2text.AntdTable[locale].showTotalPrefix,\n            showTotalSuffix:\n                pagination?.showTotalSuffix ||\n                locale2text.AntdTable[locale].showTotalSuffix,\n        };\n    }\n\n    // 根据columns中的hidden属性控制是否忽略对应字段\n    columns = columns.filter((item) => !item.hidden);\n\n    // 为columns配置默认align参数\n    for (const i in columns) {\n        columns[i] = {\n            align: 'center',\n            ...columns[i],\n        };\n    }\n\n    // 自定义可编辑单元格\n    const EditableContext = React.createContext(null);\n\n    const EditableRow = ({ index, ...props }) => {\n        const [form] = Form.useForm();\n        return (\n            <Form form={form} component={false}>\n                <EditableContext.Provider value={form}>\n                    <tr {...props} />\n                </EditableContext.Provider>\n            </Form>\n        );\n    };\n\n    const EditableCell = ({\n        title,\n        editable,\n        children,\n        dataIndex,\n        record,\n        ...restProps\n    }) => {\n        const [editing, setEditing] = useState(false);\n        const inputRef = useRef(null);\n        const form = useContext(EditableContext);\n        useEffect(() => {\n            if (editing) {\n                inputRef.current?.focus();\n            }\n        }, [editing]);\n\n        const toggleEdit = () => {\n            setEditing(!editing);\n            form.setFieldsValue({\n                [dataIndex]: record[dataIndex],\n            });\n        };\n\n        const [dataSource, setDataSource] = useState(data);\n\n        // 负责监听单元格内容修改动作从而进行相关值的更新\n        const handleSave = (row, setProps, dataSource, setDataSource) => {\n            const newData = [...dataSource];\n            const item = findItemByKey(newData, row.key);\n\n            const rowColumns = Object.getOwnPropertyNames(row);\n\n            // 循环取出属性名，再判断属性值是否一致\n            for (let i = 0; i < rowColumns.length; i++) {\n                // 找到发生值修改的字段\n                if (\n                    row[rowColumns[i]] !== item[rowColumns[i]] &&\n                    columnsFormatConstraint &&\n                    columnsFormatConstraint[rowColumns[i]] &&\n                    columnsFormatConstraint[rowColumns[i]].rule\n                ) {\n                    // 检查是否满足预设的正则表达式规则\n                    if (\n                        !eval(\n                            `/${columnsFormatConstraint[rowColumns[i]].rule}/`\n                        ).test(row[rowColumns[i]])\n                    ) {\n                        message.error(\n                            columnsFormatConstraint[rowColumns[i]]?.content\n                                ? columnsFormatConstraint[\n                                      rowColumns[i]\n                                  ]?.content.replace(\n                                      '[VALUE]',\n                                      row[rowColumns[i]]\n                                  )\n                                : locale2text.AntdTable[\n                                      locale\n                                  ].columnEditableFormatConstraintMessage.replace(\n                                      '[VALUE]',\n                                      row[rowColumns[i]]\n                                  )\n                        );\n                        // 提前终止函数\n                        return;\n                    }\n                }\n            }\n\n            // #93 找到发生编辑行为的字段dataIndex\n            let _changedColumn = null;\n            for (let i = 0; i < rowColumns.length; i++) {\n                if (row[rowColumns[i]] !== item[rowColumns[i]]) {\n                    _changedColumn = rowColumns[i];\n                }\n            }\n\n            replaceItemByKey(newData, row.key, { ...item, ...row });\n\n            setDataSource(newData);\n\n            setProps({\n                currentData: newData,\n                // 忽略组件型字段键值对\n                recentlyChangedRow: omitBy(row, (value) => value?.$$typeof),\n                recentlyChangedColumn: _changedColumn,\n                data: newData,\n            });\n        };\n\n        const save = async () => {\n            try {\n                const values = await form.validateFields();\n                toggleEdit();\n                handleSave(\n                    { ...record, ...values },\n                    setProps,\n                    dataSource,\n                    setDataSource\n                );\n            } catch (errInfo) {\n                console.log(errInfo);\n            }\n        };\n\n        let childNode = children;\n\n        if (editable) {\n            const recordDisabled = (\n                columns.filter((e) => e.dataIndex === dataIndex)[0].editOptions\n                    ?.disabledKeys || []\n            ).includes(record.key);\n            childNode = editing ? (\n                <Form.Item\n                    style={{\n                        margin: 0,\n                    }}\n                    name={dataIndex}\n                    rules={[\n                        {\n                            required: false,\n                            message: `${title} 为空！`,\n                        },\n                    ]}\n                >\n                    {columns.filter((e) => e.dataIndex === dataIndex)[0]\n                        .editOptions?.mode === 'text-area' ? (\n                        <Input.TextArea\n                            autoSize={\n                                columns.filter(\n                                    (e) => e.dataIndex === dataIndex\n                                )[0].editOptions?.autoSize\n                            }\n                            maxLength={\n                                columns.filter(\n                                    (e) => e.dataIndex === dataIndex\n                                )[0].editOptions?.maxLength\n                            }\n                            placeholder={\n                                columns.filter(\n                                    (e) => e.dataIndex === dataIndex\n                                )[0].editOptions?.placeholder\n                            }\n                            ref={inputRef}\n                            onBlur={save}\n                            onFocus={() => {\n                                // 移动光标至内容末尾\n                                inputRef.current?.focus({\n                                    cursor: 'end',\n                                });\n                            }}\n                            disabled={recordDisabled}\n                        />\n                    ) : (\n                        <Input\n                            maxLength={\n                                columns.filter(\n                                    (e) => e.dataIndex === dataIndex\n                                )[0].editOptions?.maxLength\n                            }\n                            placeholder={\n                                columns.filter(\n                                    (e) => e.dataIndex === dataIndex\n                                )[0].editOptions?.placeholder\n                            }\n                            ref={inputRef}\n                            onPressEnter={save}\n                            onBlur={save}\n                            disabled={recordDisabled}\n                        />\n                    )}\n                </Form.Item>\n            ) : (\n                <div\n                    className=\"editable-cell-value-wrap\"\n                    style={{\n                        whiteSpace: 'break-spaces',\n                        ...(recordDisabled ? { cursor: 'no-drop' } : {}),\n                    }}\n                    onClick={recordDisabled ? undefined : toggleEdit}\n                >\n                    {children[1] || children[1] === 0 ? children : ' '}\n                </div>\n            );\n        }\n\n        return <td {...restProps}>{childNode}</td>;\n    };\n\n    // 数值比较函数\n    const compareNumeric = (x, y) => {\n        if (x.value < y.value) {\n            return -1;\n        } else if (x.value > y.value) {\n            return 1;\n        }\n        return 0;\n    };\n\n    // 多模式值筛选选项自动生成策略\n    const generateFilterOptions = (inputData, columnDataIndex) => {\n        let filterOptions = [];\n        for (const item of inputData) {\n            // 若当前记录不为数组\n            if (\n                (item[columnDataIndex] || item[columnDataIndex] === 0) &&\n                !Array.isArray(item[columnDataIndex])\n            ) {\n                if (item[columnDataIndex]?.content) {\n                    filterOptions.push(item[columnDataIndex].content);\n                } else if (item[columnDataIndex]?.text) {\n                    filterOptions.push(item[columnDataIndex].text);\n                } else if (item[columnDataIndex]?.label) {\n                    filterOptions.push(item[columnDataIndex].label);\n                } else if (item[columnDataIndex]?.tag) {\n                    filterOptions.push(item[columnDataIndex].tag);\n                } else if (item[columnDataIndex]?.toString) {\n                    filterOptions.push(item[columnDataIndex]);\n                }\n            } else if (Array.isArray(item[columnDataIndex])) {\n                // 若当前记录为数组，提取数组元素对象中存在的content或tag属性\n                if (item[columnDataIndex].some((_item) => _item?.content)) {\n                    filterOptions = filterOptions.concat(\n                        item[columnDataIndex]\n                            .filter((_item) => _item?.content)\n                            .map((_item) => _item.content)\n                    );\n                } else if (item[columnDataIndex].some((_item) => _item?.tag)) {\n                    filterOptions = filterOptions.concat(\n                        item[columnDataIndex]\n                            .filter((_item) => _item?.tag)\n                            .map((_item) => _item.tag)\n                    );\n                }\n            }\n        }\n\n        // 将提取到的合法筛选值去重结构化并排序\n        return Array.from(new Set(filterOptions))\n            .map((value) => ({\n                text: value || value === 0 ? value.toString() : '',\n                value: value,\n            }))\n            .sort(compareNumeric);\n    };\n\n    // 处理可筛选特性\n    // 若为前端渲染模式，在filterOptions中每个字段filterCustomItems缺失的情况下\n    // 则会自动根据前端一次性加载的数据推算出所有添加过滤器字段的唯一值集合作为待选菜单\n    if (mode !== 'server-side') {\n        // 为filterOptions.filterDataIndexes中定义的每个字段添加过滤功能\n        for (let i = 0; i < columns.length; i++) {\n            // 若当前字段在filterOptions的keys()中\n            if (\n                Object.keys(filterOptions).indexOf(columns[i].dataIndex) !== -1\n            ) {\n                // 若当前字段对应filterOptions子元素有filterMode.filterMode为'keyword'\n                if (\n                    filterOptions[columns[i].dataIndex].filterMode === 'keyword'\n                ) {\n                    columns[i] = {\n                        ...columns[i],\n                        ...getColumnSearchProps(\n                            columns[i].dataIndex,\n                            columns[i].title\n                        ),\n                    };\n                } else if (\n                    filterOptions[columns[i].dataIndex].filterMode === 'tree'\n                ) {\n                    // 若当前字段筛选模式为'tree'模式\n                    // 若当前字段对应filterOptions子元素下有filterCustomTreeItems属性\n                    // 则为其添加自定义树形选项\n                    if (\n                        filterOptions[columns[i].dataIndex]\n                            .filterCustomTreeItems\n                    ) {\n                        columns[i] = {\n                            ...columns[i],\n                            defaultFilteredValue:\n                                defaultFilteredValues[columns[i].dataIndex],\n                            filterMode: 'tree',\n                            // 直接使用自定义树形筛选菜单结构\n                            filters:\n                                filterOptions[columns[i].dataIndex]\n                                    .filterCustomTreeItems,\n                            // 针对不同再渲染模式设计值筛选逻辑\n                            onFilter: (value, record) => {\n                                // 仅支持非数组型合法输入值，对象型输入支持对content、text、label、tag属性进行值筛选\n                                if (\n                                    (record[columns[i].dataIndex] ||\n                                        record[columns[i].dataIndex] === 0) &&\n                                    !Array.isArray(record[columns[i].dataIndex])\n                                ) {\n                                    // 判断当前记录是否有content属性\n                                    if (record[columns[i].dataIndex]?.content) {\n                                        return (\n                                            record[columns[i].dataIndex]\n                                                .content === value\n                                        );\n                                    } else if (\n                                        record[columns[i].dataIndex]?.text\n                                    ) {\n                                        return (\n                                            record[columns[i].dataIndex]\n                                                .text === value\n                                        );\n                                    } else if (\n                                        record[columns[i].dataIndex]?.label\n                                    ) {\n                                        return (\n                                            record[columns[i].dataIndex]\n                                                .label === value\n                                        );\n                                    } else if (\n                                        record[columns[i].dataIndex]?.tag\n                                    ) {\n                                        return (\n                                            record[columns[i].dataIndex].tag ===\n                                            value\n                                        );\n                                    } else if (\n                                        record[columns[i].dataIndex]?.toString\n                                    ) {\n                                        // 确保字符型、数值型均可稳定进行筛选\n                                        return (\n                                            record[\n                                                columns[i].dataIndex\n                                            ].toString() === value.toString()\n                                        );\n                                    }\n                                } else if (\n                                    Array.isArray(record[columns[i].dataIndex])\n                                ) {\n                                    // 若当前记录为数组，分别检查数组元素对象是否具有content、tag、title属性\n                                    if (\n                                        record[columns[i].dataIndex].some(\n                                            (item) => item?.content\n                                        )\n                                    ) {\n                                        // 检查当前记录数组中是否至少有一个对象的content属性等于筛选值value\n                                        return record[\n                                            columns[i].dataIndex\n                                        ].some(\n                                            (item) =>\n                                                item?.content\n                                                    .toString()\n                                                    .toLowerCase() ===\n                                                value?.toLowerCase()\n                                        );\n                                    } else if (\n                                        record[columns[i].dataIndex].some(\n                                            (item) => item?.tag\n                                        )\n                                    ) {\n                                        // 检查当前记录数组中是否至少有一个对象的tag属性命中关键词\n                                        return record[\n                                            columns[i].dataIndex\n                                        ].some(\n                                            (item) =>\n                                                item?.tag\n                                                    .toString()\n                                                    .toLowerCase() ===\n                                                value?.toLowerCase()\n                                        );\n                                    } else if (\n                                        record[columns[i].dataIndex].some(\n                                            (item) => item?.title\n                                        )\n                                    ) {\n                                        // 检查当前记录数组中是否至少有一个对象的title属性命中关键词\n                                        return record[\n                                            columns[i].dataIndex\n                                        ].some(\n                                            (item) =>\n                                                item?.title\n                                                    .toString()\n                                                    .toLowerCase() ===\n                                                value?.toLowerCase()\n                                        );\n                                    }\n                                }\n                                return false;\n                            },\n                            filterSearch:\n                                filterOptions[columns[i].dataIndex]\n                                    .filterSearch,\n                        };\n                    }\n                } else {\n                    // 否则则一律视为'checkbox'模式\n                    // 若当前字段对应filterOptions子元素下有filterCustomItems属性\n                    // 则为其添加自定义选项\n                    if (filterOptions[columns[i].dataIndex].filterCustomItems) {\n                        columns[i] = {\n                            ...columns[i],\n                            defaultFilteredValue:\n                                defaultFilteredValues[columns[i].dataIndex],\n                            filters: filterOptions[\n                                columns[i].dataIndex\n                            ].filterCustomItems.map((value) => ({\n                                text:\n                                    value || value === 0\n                                        ? value.toString()\n                                        : '',\n                                value: value,\n                            })),\n                            // 针对不同再渲染模式设计值筛选逻辑\n                            onFilter: (value, record) => {\n                                // 仅支持非数组型合法输入值，对象型输入支持对content、text、label、tag属性进行值筛选\n                                if (\n                                    (record[columns[i].dataIndex] ||\n                                        record[columns[i].dataIndex] === 0) &&\n                                    !Array.isArray(record[columns[i].dataIndex])\n                                ) {\n                                    // 判断当前记录是否有content属性\n                                    if (record[columns[i].dataIndex]?.content) {\n                                        return (\n                                            record[columns[i].dataIndex]\n                                                .content === value\n                                        );\n                                    } else if (\n                                        record[columns[i].dataIndex]?.text\n                                    ) {\n                                        return (\n                                            record[columns[i].dataIndex]\n                                                .text === value\n                                        );\n                                    } else if (\n                                        record[columns[i].dataIndex]?.label\n                                    ) {\n                                        return (\n                                            record[columns[i].dataIndex]\n                                                .label === value\n                                        );\n                                    } else if (\n                                        record[columns[i].dataIndex]?.tag\n                                    ) {\n                                        return (\n                                            record[columns[i].dataIndex].tag ===\n                                            value\n                                        );\n                                    } else if (\n                                        record[columns[i].dataIndex]?.toString\n                                    ) {\n                                        // 确保字符型、数值型均可稳定进行筛选\n                                        return (\n                                            record[\n                                                columns[i].dataIndex\n                                            ].toString() === value.toString()\n                                        );\n                                    }\n                                } else if (\n                                    Array.isArray(record[columns[i].dataIndex])\n                                ) {\n                                    // 若当前记录为数组，分别检查数组元素对象是否具有content、tag、title属性\n                                    if (\n                                        record[columns[i].dataIndex].some(\n                                            (item) => item?.content\n                                        )\n                                    ) {\n                                        // 检查当前记录数组中是否至少有一个对象的content属性等于筛选值value\n                                        return record[\n                                            columns[i].dataIndex\n                                        ].some(\n                                            (item) =>\n                                                item?.content\n                                                    .toString()\n                                                    .toLowerCase() ===\n                                                value?.toLowerCase()\n                                        );\n                                    } else if (\n                                        record[columns[i].dataIndex].some(\n                                            (item) => item?.tag\n                                        )\n                                    ) {\n                                        // 检查当前记录数组中是否至少有一个对象的tag属性命中关键词\n                                        return record[\n                                            columns[i].dataIndex\n                                        ].some(\n                                            (item) =>\n                                                item?.tag\n                                                    .toString()\n                                                    .toLowerCase() ===\n                                                value?.toLowerCase()\n                                        );\n                                    } else if (\n                                        record[columns[i].dataIndex].some(\n                                            (item) => item?.title\n                                        )\n                                    ) {\n                                        // 检查当前记录数组中是否至少有一个对象的title属性命中关键词\n                                        return record[\n                                            columns[i].dataIndex\n                                        ].some(\n                                            (item) =>\n                                                item?.title\n                                                    .toString()\n                                                    .toLowerCase() ===\n                                                value?.toLowerCase()\n                                        );\n                                    }\n                                }\n                                return false;\n                            },\n                            filterMultiple:\n                                filterOptions[columns[i].dataIndex]\n                                    .filterMultiple,\n                            filterSearch:\n                                filterOptions[columns[i].dataIndex]\n                                    .filterSearch,\n                        };\n                    } else {\n                        // 否则自动基于数据中的唯一值生成选项列表\n                        columns[i] = {\n                            ...columns[i],\n                            defaultFilteredValue:\n                                defaultFilteredValues[columns[i].dataIndex],\n                            filters: generateFilterOptions(\n                                data,\n                                columns[i].dataIndex\n                            ),\n                            // 针对不同再渲染模式设计值筛选逻辑\n                            onFilter: (value, record) => {\n                                // 仅支持非数组型合法输入值，对象型输入支持对content、text、label、tag属性进行值筛选\n                                if (\n                                    (record[columns[i].dataIndex] ||\n                                        record[columns[i].dataIndex] === 0) &&\n                                    !Array.isArray(record[columns[i].dataIndex])\n                                ) {\n                                    if (record[columns[i].dataIndex]?.content) {\n                                        return (\n                                            record[columns[i].dataIndex]\n                                                .content === value\n                                        );\n                                    } else if (\n                                        record[columns[i].dataIndex]?.text\n                                    ) {\n                                        return (\n                                            record[columns[i].dataIndex]\n                                                .text === value\n                                        );\n                                    } else if (\n                                        record[columns[i].dataIndex]?.label\n                                    ) {\n                                        return (\n                                            record[columns[i].dataIndex]\n                                                .label === value\n                                        );\n                                    } else if (\n                                        record[columns[i].dataIndex]?.tag\n                                    ) {\n                                        return (\n                                            record[columns[i].dataIndex].tag ===\n                                            value\n                                        );\n                                    } else if (\n                                        record[columns[i].dataIndex]?.toString\n                                    ) {\n                                        // 确保字符型、数值型均可稳定进行筛选\n                                        return (\n                                            record[\n                                                columns[i].dataIndex\n                                            ].toString() === value.toString()\n                                        );\n                                    }\n                                } else if (\n                                    Array.isArray(record[columns[i].dataIndex])\n                                ) {\n                                    // 若当前记录为数组，分别检查数组元素对象是否具有content、tag、title属性\n                                    if (\n                                        record[columns[i].dataIndex].some(\n                                            (item) => item?.content\n                                        )\n                                    ) {\n                                        // 检查当前记录数组中是否至少有一个对象的content属性等于筛选值value\n                                        return record[\n                                            columns[i].dataIndex\n                                        ].some(\n                                            (item) =>\n                                                item?.content\n                                                    .toString()\n                                                    .toLowerCase() ===\n                                                value?.toLowerCase()\n                                        );\n                                    } else if (\n                                        record[columns[i].dataIndex].some(\n                                            (item) => item?.tag\n                                        )\n                                    ) {\n                                        // 检查当前记录数组中是否至少有一个对象的tag属性命中关键词\n                                        return record[\n                                            columns[i].dataIndex\n                                        ].some(\n                                            (item) =>\n                                                item?.tag\n                                                    .toString()\n                                                    .toLowerCase() ===\n                                                value?.toLowerCase()\n                                        );\n                                    } else if (\n                                        record[columns[i].dataIndex].some(\n                                            (item) => item?.title\n                                        )\n                                    ) {\n                                        // 检查当前记录数组中是否至少有一个对象的title属性命中关键词\n                                        return record[\n                                            columns[i].dataIndex\n                                        ].some(\n                                            (item) =>\n                                                item?.title\n                                                    .toString()\n                                                    .toLowerCase() ===\n                                                value?.toLowerCase()\n                                        );\n                                    }\n                                }\n                                return false;\n                            },\n                            filterMultiple:\n                                filterOptions[columns[i].dataIndex]\n                                    ?.filterMultiple,\n                            filterSearch:\n                                filterOptions[columns[i].dataIndex]\n                                    ?.filterSearch,\n                        };\n                    }\n                }\n            }\n        }\n    } else {\n        // 否则在server-side模式下\n        // 为filterOptions.filterDataIndexes中定义的每个字段\n        // 添加简单值选择过滤功能\n        // 为filterOptions.filterDataIndexes中定义的每个字段添加过滤功能\n        for (let i = 0; i < columns.length; i++) {\n            // 若当前字段在filterOptions的keys()中\n            if (\n                Object.keys(filterOptions).indexOf(columns[i].dataIndex) !== -1\n            ) {\n                // 若当前字段对应filterOptions子元素有filterMode属性且filterMode属性为'keyword'\n                if (\n                    filterOptions[columns[i].dataIndex].filterMode === 'keyword'\n                ) {\n                    columns[i] = {\n                        ...columns[i],\n                        ...getColumnSearchProps(\n                            columns[i].dataIndex,\n                            columns[i].title\n                        ),\n                    };\n                } else if (\n                    filterOptions[columns[i].dataIndex].filterMode === 'tree'\n                ) {\n                    // 若当前字段筛选模式为'tree'模式\n                    // 若当前字段对应filterOptions子元素下有filterCustomTreeItems属性\n                    // 则为其添加自定义树形选项\n                    if (\n                        filterOptions[columns[i].dataIndex]\n                            .filterCustomTreeItems\n                    ) {\n                        columns[i] = {\n                            ...columns[i],\n                            defaultFilteredValue:\n                                defaultFilteredValues[columns[i].dataIndex],\n                            filterMode: 'tree',\n                            filters:\n                                filterOptions[columns[i].dataIndex]\n                                    .filterCustomTreeItems,\n                            onFilter: (value, record) => true, // 契合后端刷新模式\n                        };\n                    } else {\n                        columns[i] = {\n                            ...columns[i],\n                            filters: [],\n                            onFilter: (value, record) => true,\n                        };\n                    }\n                } else {\n                    // 否则则一律视为'checkbox'模式\n                    // 若当前字段对应filterOptions子元素下有filterCustomItems属性\n                    // 则为其添加自定义选项\n                    if (\n                        filterOptions[columns[i].dataIndex].hasOwnProperty(\n                            'filterCustomItems'\n                        )\n                    ) {\n                        columns[i] = {\n                            ...columns[i],\n                            defaultFilteredValue:\n                                defaultFilteredValues[columns[i].dataIndex],\n                            filters: filterOptions[\n                                columns[i].dataIndex\n                            ].filterCustomItems.map((value) => ({\n                                text:\n                                    value || value === 0\n                                        ? value.toString()\n                                        : '',\n                                value: value,\n                            })),\n                            onFilter: (value, record) => true, // 契合后端刷新模式\n                            filterMultiple:\n                                filterOptions[columns[i].dataIndex]\n                                    .filterMultiple,\n                            filterSearch:\n                                filterOptions[columns[i].dataIndex]\n                                    .filterSearch,\n                        };\n                    } else {\n                        columns[i] = {\n                            ...columns[i],\n                            filters: [],\n                            onFilter: (value, record) => true,\n                        };\n                    }\n                }\n            }\n        }\n    }\n\n    // 处理sortOptions参数的默认值问题\n    sortOptions = {\n        sortDataIndexes: [],\n        multiple: false,\n        forceCompareModes: {},\n        customOrders: {},\n        ...sortOptions,\n    };\n\n    // 配置字段排序参数\n    for (let i = 0; i < sortOptions.sortDataIndexes.length; i++) {\n        for (let j = 0; j < columns.length; j++) {\n            // 若sortOptions与data中本轮迭代到的dataIndex一致\n            if (sortOptions.sortDataIndexes[i] === columns[j].dataIndex) {\n                // 根据是否组合排序模式来决定当前字段的排序参数设置\n                columns[j].sorter = {\n                    compare: (a, b) => {\n                        // 当渲染模式为server-side时，禁用前端排序操作\n                        if (mode === 'server-side') {\n                            return 0;\n                        }\n                        // 初始化排序直接比较值\n                        let valueA = null;\n                        let valueB = null;\n                        // 兼容各种具有单个值的再渲染模式，提取待比较的成对数据\n                        if (\n                            a[columns[j].dataIndex]?.content ||\n                            b[columns[j].dataIndex]?.content\n                        ) {\n                            valueA = a[columns[j].dataIndex]?.content;\n                            valueB = b[columns[j].dataIndex]?.content;\n                        } else if (\n                            a[columns[j].dataIndex]?.text ||\n                            b[columns[j].dataIndex]?.text\n                        ) {\n                            valueA = a[columns[j].dataIndex]?.text;\n                            valueB = b[columns[j].dataIndex]?.text;\n                        } else if (\n                            a[columns[j].dataIndex]?.label ||\n                            b[columns[j].dataIndex]?.label\n                        ) {\n                            valueA = a[columns[j].dataIndex]?.label;\n                            valueB = b[columns[j].dataIndex]?.label;\n                        } else if (\n                            a[columns[j].dataIndex]?.tag ||\n                            b[columns[j].dataIndex]?.tag\n                        ) {\n                            valueA = a[columns[j].dataIndex]?.tag;\n                            valueB = b[columns[j].dataIndex]?.tag;\n                        } else if (\n                            a[columns[j].dataIndex]?.toString ||\n                            b[columns[j].dataIndex]?.toString\n                        ) {\n                            valueA = a[columns[j].dataIndex];\n                            valueB = b[columns[j].dataIndex];\n                        }\n                        // 根据valueA、valueB的数据类型返回不同逻辑的判断结果\n                        // 若valueA、valueB至少有1个为数值型，则视作数值型比较\n                        // 若当前字段使用了强制比较模式\n                        if (\n                            sortOptions.forceCompareModes[columns[j].dataIndex]\n                        ) {\n                            // 数值比较模式\n                            if (\n                                sortOptions.forceCompareModes[\n                                    columns[j].dataIndex\n                                ] === 'number'\n                            ) {\n                                // 强制转换比较值为数值型\n                                const numberA = Number(valueA);\n                                const numberB = Number(valueB);\n                                if (numberA < numberB) {\n                                    return -1;\n                                } else if (numberA > numberB) {\n                                    return 1;\n                                }\n                                return 0;\n                            } else if (\n                                sortOptions.forceCompareModes[\n                                    columns[j].dataIndex\n                                ] === 'custom' &&\n                                sortOptions.customOrders[columns[j].dataIndex]\n                            ) {\n                                // 自定义顺序模式\n                                // 查询比较值在对应的自定义顺序中的索引\n                                const orderA =\n                                    sortOptions.customOrders[\n                                        columns[j].dataIndex\n                                    ].indexOf(valueA);\n                                const orderB =\n                                    sortOptions.customOrders[\n                                        columns[j].dataIndex\n                                    ].indexOf(valueB);\n                                if (orderA < orderB) {\n                                    return 1;\n                                } else if (orderA > orderB) {\n                                    return -1;\n                                }\n                                return 0;\n                            }\n                        } else {\n                            // 默认自动判断\n                            if (isNumber(valueA) || isNumber(valueB)) {\n                                return valueA - valueB;\n                            }\n                            // 否则均视作字符型比较\n                            const stringA = valueA?.toString().toUpperCase();\n                            const stringB = valueB?.toString().toUpperCase();\n                            if (stringA < stringB) {\n                                return -1;\n                            } else if (stringA > stringB) {\n                                return 1;\n                            }\n                            return 0;\n                        }\n                    },\n                    multiple: sortOptions.multiple\n                        ? sortOptions.multiple === 'auto'\n                            ? 1\n                            : sortOptions.sortDataIndexes.length - i\n                        : undefined,\n                };\n            }\n        }\n    }\n\n    // 配置各种再渲染模式\n    for (let i = 0; i < columns.length; i++) {\n        // 当前字段具有renderOptions参数时且renderOptions参数是字典时\n        if (columns[i].renderOptions && columns[i].renderOptions.renderType) {\n            // ellipsis模式\n            if (columns[i].renderOptions.renderType === 'ellipsis') {\n                columns[i].ellipsis = {\n                    showTitle: false,\n                };\n                columns[i].render = (content) => (\n                    <Text ellipsis={{ tooltip: content }}>{content}</Text>\n                );\n            }\n            // row-merge模式\n            else if (columns[i].renderOptions.renderType === 'row-merge') {\n                columns[i].render = (content, record, index) => {\n                    return {\n                        children: content.content,\n                        props: {\n                            rowSpan: content.rowSpan,\n                        },\n                    };\n                };\n            }\n            // link模式\n            else if (columns[i].renderOptions.renderType === 'link') {\n                // 检查renderLinkText参数是否定义\n                if (columns[i].renderOptions.renderLinkText) {\n                    columns[i].render = (content) => {\n                        if (\n                            (!content || isEmpty(content)) &&\n                            content !== 0 &&\n                            content !== ''\n                        ) {\n                            return null;\n                        }\n                        return columns[i].renderOptions.likeDccLink ? (\n                            <UtilsLink\n                                href={\n                                    content.disabled ? undefined : content.href\n                                }\n                                target={\n                                    content.target ? content.target : '_blank'\n                                }\n                                disabled={content.disabled}\n                            >\n                                {content.content\n                                    ? content.content\n                                    : columns[i].renderOptions.renderLinkText}\n                            </UtilsLink>\n                        ) : (\n                            <a\n                                href={\n                                    content.disabled ? undefined : content.href\n                                }\n                                target={\n                                    content.target ? content.target : '_blank'\n                                }\n                                disabled={content.disabled}\n                            >\n                                {content.content\n                                    ? content.content\n                                    : columns[i].renderOptions.renderLinkText}\n                            </a>\n                        );\n                    };\n                } else {\n                    columns[i].render = (content) => {\n                        if (\n                            (!content || isEmpty(content)) &&\n                            content !== 0 &&\n                            content !== ''\n                        ) {\n                            return null;\n                        }\n                        return columns[i].renderOptions.likeDccLink ? (\n                            <UtilsLink\n                                href={\n                                    content.disabled ? undefined : content.href\n                                }\n                                target={\n                                    content.target ? content.target : '_blank'\n                                }\n                                disabled={content.disabled}\n                            >\n                                {content.content ? content.content : ' '}\n                            </UtilsLink>\n                        ) : (\n                            <a\n                                href={\n                                    content.disabled ? undefined : content.href\n                                }\n                                target={\n                                    content.target ? content.target : '_blank'\n                                }\n                                disabled={content.disabled}\n                            >\n                                {content.content ? content.content : ' '}\n                            </a>\n                        );\n                    };\n                }\n            }\n            // copyable模式\n            else if (columns[i].renderOptions.renderType === 'copyable') {\n                columns[i].render = (content) => {\n                    if (\n                        (!content || isEmpty(content)) &&\n                        content !== 0 &&\n                        content !== ''\n                    ) {\n                        return null;\n                    }\n                    return <Text copyable={true}>{content}</Text>;\n                };\n            }\n            // dropdown模式\n            else if (columns[i].renderOptions.renderType === 'dropdown') {\n                columns[i].render = (menuItems, record) => {\n                    // 针对空值进行错误处理\n                    menuItems = menuItems || [];\n                    return (\n                        <Dropdown\n                            overlay={\n                                <Menu\n                                    onClick={(item, key, keyPath, domEvent) => {\n                                        setTimeout(function () {\n                                            setProps({\n                                                nClicksDropdownItem:\n                                                    nClicksDropdownItem + 1,\n                                                recentlyClickedDropdownItemTitle:\n                                                    item.key,\n                                                recentlyDropdownItemClickedDataIndex:\n                                                    columns[i].dataIndex,\n                                                // 忽略组件型字段键值对\n                                                recentlyDropdownItemClickedRow:\n                                                    omitBy(\n                                                        record,\n                                                        (value) =>\n                                                            value?.$$typeof\n                                                    ),\n                                            });\n                                        }, 200);\n                                    }}\n                                >\n                                    {menuItems.map((menuItem) =>\n                                        menuItem ? (\n                                            // 判断isDivider参数是否不为false\n                                            menuItem.isDivider ? (\n                                                <Menu.Divider />\n                                            ) : (\n                                                <Menu.Item\n                                                    icon={\n                                                        menuItem.icon &&\n                                                        (menuItem.iconRenderer ===\n                                                        'fontawesome' ? (\n                                                            React.createElement(\n                                                                'i',\n                                                                {\n                                                                    className:\n                                                                        menuItem.icon,\n                                                                }\n                                                            )\n                                                        ) : (\n                                                            <AntdIcon\n                                                                icon={\n                                                                    menuItem.icon\n                                                                }\n                                                            />\n                                                        ))\n                                                    }\n                                                    disabled={menuItem.disabled}\n                                                    key={menuItem.title}\n                                                >\n                                                    <a>{menuItem.title}</a>\n                                                </Menu.Item>\n                                            )\n                                        ) : null\n                                    )}\n                                </Menu>\n                            }\n                            arrow={\n                                columns[i].renderOptions?.dropdownProps?.arrow\n                            }\n                            disabled={\n                                columns[i].renderOptions?.dropdownProps\n                                    ?.disabled || menuItems.length === 0\n                            }\n                            overlayClassName={\n                                columns[i].renderOptions?.dropdownProps\n                                    ?.overlayClassName\n                            }\n                            overlayStyle={\n                                columns[i].renderOptions?.dropdownProps\n                                    ?.overlayStyle\n                            }\n                            placement={\n                                columns[i].renderOptions?.dropdownProps\n                                    ?.placement\n                            }\n                            trigger={\n                                columns[i].renderOptions?.dropdownProps?.trigger\n                                    ? [\n                                          columns[i].renderOptions.dropdownProps\n                                              .trigger,\n                                      ]\n                                    : ['hover']\n                            }\n                            getPopupContainer={\n                                containerId\n                                    ? () =>\n                                          document.getElementById(containerId)\n                                              ? document.getElementById(\n                                                    containerId\n                                                )\n                                              : document.body\n                                    : undefined\n                            }\n                        >\n                            <a\n                                className=\"ant-dropdown-link\"\n                                onClick={(e) => e.preventDefault()}\n                            >\n                                {columns[i].renderOptions?.dropdownProps?.title}{' '}\n                                <DownOutlined />\n                            </a>\n                        </Dropdown>\n                    );\n                };\n            }\n            // dropdown-links模式\n            else if (columns[i].renderOptions.renderType === 'dropdown-links') {\n                columns[i].render = (menuItems) => {\n                    // 针对空值进行错误处理\n                    menuItems = menuItems || [];\n                    return (\n                        <Dropdown\n                            overlay={\n                                <Menu>\n                                    {menuItems.map((menuItem) =>\n                                        menuItem ? (\n                                            // 判断isDivider参数是否不为false\n                                            menuItem.isDivider ? (\n                                                <Menu.Divider />\n                                            ) : (\n                                                <Menu.Item\n                                                    icon={\n                                                        menuItem.icon &&\n                                                        (menuItem.iconRenderer ===\n                                                        'fontawesome' ? (\n                                                            React.createElement(\n                                                                'i',\n                                                                {\n                                                                    className:\n                                                                        menuItem.icon,\n                                                                }\n                                                            )\n                                                        ) : (\n                                                            <AntdIcon\n                                                                icon={\n                                                                    menuItem.icon\n                                                                }\n                                                            />\n                                                        ))\n                                                    }\n                                                    disabled={menuItem.disabled}\n                                                    key={menuItem.title}\n                                                >\n                                                    <a\n                                                        href={menuItem.href}\n                                                        target={'_blank'}\n                                                    >\n                                                        {menuItem.title}\n                                                    </a>\n                                                </Menu.Item>\n                                            )\n                                        ) : null\n                                    )}\n                                </Menu>\n                            }\n                            arrow={\n                                columns[i].renderOptions?.dropdownProps?.arrow\n                            }\n                            disabled={\n                                columns[i].renderOptions?.dropdownProps\n                                    ?.disabled || menuItems.length === 0\n                            }\n                            overlayClassName={\n                                columns[i].renderOptions?.dropdownProps\n                                    ?.overlayClassName\n                            }\n                            overlayStyle={\n                                columns[i].renderOptions?.dropdownProps\n                                    ?.overlayStyle\n                            }\n                            placement={\n                                columns[i].renderOptions?.dropdownProps\n                                    ?.placement\n                            }\n                            trigger={\n                                columns[i].renderOptions?.dropdownProps?.trigger\n                                    ? [\n                                          columns[i].renderOptions.dropdownProps\n                                              .trigger,\n                                      ]\n                                    : ['hover']\n                            }\n                            getPopupContainer={\n                                containerId\n                                    ? () =>\n                                          document.getElementById(containerId)\n                                              ? document.getElementById(\n                                                    containerId\n                                                )\n                                              : document.body\n                                    : undefined\n                            }\n                        >\n                            <a\n                                className=\"ant-dropdown-link\"\n                                onClick={(e) => e.preventDefault()}\n                            >\n                                {columns[i].renderOptions?.dropdownProps?.title}{' '}\n                                <DownOutlined />\n                            </a>\n                        </Dropdown>\n                    );\n                };\n            }\n            // ellipsis-copyable模式\n            else if (\n                columns[i].renderOptions.renderType === 'ellipsis-copyable'\n            ) {\n                columns[i].ellipsis = {\n                    showTitle: false,\n                };\n                columns[i].render = (content) => {\n                    if (\n                        (!content || isEmpty(content)) &&\n                        content !== 0 &&\n                        content !== ''\n                    ) {\n                        return null;\n                    }\n                    return (\n                        <Text copyable={true} ellipsis={{ tooltip: content }}>\n                            {content}\n                        </Text>\n                    );\n                };\n            }\n            // corner-mark模式\n            else if (columns[i].renderOptions.renderType === 'corner-mark') {\n                columns[i].render = (content) => {\n                    if (\n                        (!content || isEmpty(content)) &&\n                        content !== 0 &&\n                        content !== ''\n                    ) {\n                        return null;\n                    }\n                    return (\n                        <div\n                            className={\n                                content.placement\n                                    ? 'ant-corner-mark-' + content.placement\n                                    : 'ant-corner-mark-top-right'\n                            }\n                            style={{\n                                '--ant-corner-mark-color': content.hide\n                                    ? 'transparent'\n                                    : content.color\n                                      ? content.color\n                                      : '#1890ff',\n                                '--ant-corner-mark-transform': `translate(${content.offsetX ? content.offsetX : 0}px, ${content.offsetY ? content.offsetY : 0}px)`,\n                            }}\n                        >\n                            {content.content}\n                        </div>\n                    );\n                };\n            }\n            // status-badge模式\n            else if (columns[i].renderOptions.renderType === 'status-badge') {\n                columns[i].render = (content) => {\n                    if (\n                        (!content || isEmpty(content)) &&\n                        content !== 0 &&\n                        content !== ''\n                    ) {\n                        return null;\n                    }\n                    return (\n                        <Badge status={content.status} text={content.text} />\n                    );\n                };\n            }\n            // image模式\n            else if (columns[i].renderOptions.renderType === 'image') {\n                columns[i].render = (content) => {\n                    if (\n                        (!content || isEmpty(content)) &&\n                        content !== 0 &&\n                        content !== ''\n                    ) {\n                        return null;\n                    }\n                    return (\n                        <Image\n                            src={content.src}\n                            height={content.height}\n                            preview={content.preview}\n                        />\n                    );\n                };\n            }\n            // image-avatar模式\n            else if (columns[i].renderOptions.renderType === 'image-avatar') {\n                columns[i].render = (content) => {\n                    if (\n                        (!content || isEmpty(content)) &&\n                        content !== 0 &&\n                        content !== ''\n                    ) {\n                        return null;\n                    }\n                    return (\n                        <Avatar\n                            src={content?.src}\n                            size={content?.size}\n                            shape={content?.shape}\n                        />\n                    );\n                };\n            }\n            // checkbox模式\n            else if (columns[i].renderOptions.renderType === 'checkbox') {\n                columns[i].render = (content, record) => {\n                    const currentDataIndex = columns[i].dataIndex;\n                    return (\n                        <Checkbox\n                            checked={content.checked}\n                            disabled={content.disabled}\n                            onChange={(e) => {\n                                // 修改对应行对应字段item.checked值\n                                try {\n                                    data.forEach(function (item, i) {\n                                        // 命中后，修改值并利用错误抛出来跳出循环\n                                        if (item.key === record.key) {\n                                            data[i][currentDataIndex] = {\n                                                ...record[currentDataIndex],\n                                                checked: e.target.checked,\n                                            };\n                                            throw new Error('目标已修改');\n                                        }\n                                    });\n                                } catch (e) {}\n\n                                setTimeout(function () {\n                                    setProps({\n                                        data: data,\n                                        // 忽略组件型字段键值对\n                                        recentlyCheckedRow: omitBy(\n                                            record,\n                                            (value) => value?.$$typeof\n                                        ),\n                                        recentlyCheckedLabel: content.label,\n                                        recentlyCheckedDataIndex:\n                                            columns[i].dataIndex,\n                                        recentlyCheckedStatus: e.target.checked,\n                                    });\n                                }, 200);\n                            }}\n                        >\n                            {content.label}\n                        </Checkbox>\n                    );\n                };\n            }\n            // switch模式\n            else if (columns[i].renderOptions.renderType === 'switch') {\n                columns[i].render = (content, record) => {\n                    const currentDataIndex = columns[i].dataIndex;\n                    return (\n                        <Switch\n                            checked={content.checked}\n                            disabled={content.disabled}\n                            checkedChildren={content.checkedChildren}\n                            unCheckedChildren={content.unCheckedChildren}\n                            onChange={(checked) => {\n                                // 修改对应行对应字段item.checked值\n                                try {\n                                    data.forEach(function (item, i) {\n                                        // 命中后，修改值并利用错误抛出来跳出循环\n                                        if (item.key === record.key) {\n                                            data[i][currentDataIndex] = {\n                                                ...record[currentDataIndex],\n                                                checked: checked,\n                                            };\n                                            throw new Error('目标已修改');\n                                        }\n                                    });\n                                } catch (e) {}\n\n                                setTimeout(function () {\n                                    setProps({\n                                        data: data,\n                                        // 忽略组件型字段键值对\n                                        recentlySwitchRow: omitBy(\n                                            record,\n                                            (value) => value?.$$typeof\n                                        ),\n                                        recentlySwitchDataIndex:\n                                            columns[i].dataIndex,\n                                        recentlySwitchStatus: checked,\n                                    });\n                                }, 200);\n                            }}\n                        />\n                    );\n                };\n            }\n            // select模式\n            else if (columns[i].renderOptions.renderType === 'select') {\n                columns[i].render = (content, record) => {\n                    const currentDataIndex = columns[i].dataIndex;\n                    // 针对空值进行错误处理\n                    content = content || {};\n                    return (\n                        <Select\n                            className={content.className}\n                            style={{\n                                width: '100%',\n                                textAlign: 'left',\n                                ...content.style,\n                            }}\n                            showSearch={\n                                isUndefined(content.showSearch)\n                                    ? true\n                                    : content.showSearch\n                            }\n                            options={content.options}\n                            listHeight={content.listHeight}\n                            mode={content.mode}\n                            disabled={content.disabled}\n                            size={content.size}\n                            bordered={content.bordered}\n                            placeholder={content.placeholder}\n                            placement={content.placement}\n                            defaultValue={content.value}\n                            maxTagCount={content.maxTagCount}\n                            optionFilterProp={content.optionFilterProp}\n                            allowClear={content.allowClear}\n                            onChange={(value) => {\n                                // 修改对应行对应字段item.value值\n                                try {\n                                    data.forEach(function (item, i) {\n                                        // 命中后，修改值并利用错误抛出来跳出循环\n                                        if (item.key === record.key) {\n                                            data[i][currentDataIndex] = {\n                                                ...record[currentDataIndex],\n                                                value: value,\n                                            };\n                                            // 提前打断循环过程\n                                            throw new Error('目标已修改');\n                                        }\n                                    });\n                                } catch (e) {}\n\n                                setTimeout(() => {\n                                    setProps({\n                                        data: data,\n                                        // 忽略组件型字段键值对\n                                        recentlySelectRow: omitBy(\n                                            record,\n                                            (value) => value?.$$typeof\n                                        ),\n                                        recentlySelectDataIndex:\n                                            columns[i].dataIndex,\n                                        recentlySelectValue: value,\n                                    });\n                                }, 200);\n                            }}\n                        />\n                    );\n                };\n            }\n            // button模式\n            else if (columns[i].renderOptions.renderType === 'button') {\n                // 根据参数配置生成按钮\n                columns[i].render = (content, record) => {\n                    // 合并单按钮/多按钮渲染逻辑\n                    content = Array.isArray(content) ? content : [content];\n                    return (\n                        <Space\n                            split={\n                                columns[i].renderOptions.renderButtonSplit && (\n                                    <Divider type={'vertical'} />\n                                )\n                            }\n                            wrap={true}\n                        >\n                            {content.map((content_, idx) => {\n                                // 若当前按钮需要附带气泡确认框\n                                if (\n                                    columns[i].renderOptions\n                                        .renderButtonPopConfirmProps ||\n                                    content_.popConfirmProps\n                                ) {\n                                    const popConfirmProps =\n                                        columns[i].renderOptions\n                                            .renderButtonPopConfirmProps ||\n                                        content_.popConfirmProps;\n                                    const buttonElement = (\n                                        <Button\n                                            size={'small'}\n                                            type={content_.type}\n                                            color={content_.color}\n                                            variant={content_.variant}\n                                            danger={content_.danger}\n                                            disabled={content_.disabled}\n                                            style={content_.style}\n                                            icon={\n                                                content_.icon &&\n                                                (content_.iconRenderer ===\n                                                'fontawesome' ? (\n                                                    React.createElement('i', {\n                                                        className:\n                                                            content_.icon,\n                                                    })\n                                                ) : (\n                                                    <AntdIcon\n                                                        icon={content_.icon}\n                                                    />\n                                                ))\n                                            }\n                                            onClick={(e) => {\n                                                // 阻止事件冒泡\n                                                e.stopPropagation();\n                                            }}\n                                        >\n                                            {content_.content}\n                                        </Button>\n                                    );\n                                    return (\n                                        <Popconfirm\n                                            key={idx}\n                                            title={popConfirmProps.title}\n                                            okText={popConfirmProps.okText}\n                                            cancelText={\n                                                popConfirmProps.cancelText\n                                            }\n                                            disabled={content_.disabled}\n                                            getPopupContainer={\n                                                containerId\n                                                    ? () =>\n                                                          document.getElementById(\n                                                              containerId\n                                                          )\n                                                              ? document.getElementById(\n                                                                    containerId\n                                                                )\n                                                              : document.body\n                                                    : undefined\n                                            }\n                                            onConfirm={(e) => {\n                                                // 阻止事件冒泡\n                                                e.stopPropagation();\n                                                setProps({\n                                                    // 忽略组件型字段键值对\n                                                    recentlyButtonClickedRow:\n                                                        omitBy(\n                                                            record,\n                                                            (value) =>\n                                                                value?.$$typeof\n                                                        ),\n                                                    nClicksButton:\n                                                        nClicksButton + 1,\n                                                    clickedContent:\n                                                        content_.content,\n                                                    clickedCustom:\n                                                        content_.custom,\n                                                    recentlyButtonClickedDataIndex:\n                                                        columns[i].dataIndex,\n                                                });\n                                            }}\n                                            onCancel={(e) => {\n                                                // 阻止事件冒泡\n                                                e.stopPropagation();\n                                            }}\n                                        >\n                                            {content_.tooltip ? (\n                                                <Tooltip\n                                                    title={\n                                                        content_.tooltip?.title\n                                                    }\n                                                    placement={\n                                                        content_.tooltip\n                                                            ?.placement\n                                                    }\n                                                >\n                                                    {buttonElement}\n                                                </Tooltip>\n                                            ) : (\n                                                buttonElement\n                                            )}\n                                        </Popconfirm>\n                                    );\n                                }\n                                const buttonElement = (\n                                    <Button\n                                        key={idx}\n                                        onClick={(e) => {\n                                            // 阻止事件冒泡\n                                            if (\n                                                !columns[i].renderOptions\n                                                    .likeDccLink\n                                            ) {\n                                                e.stopPropagation();\n                                            }\n                                            setProps({\n                                                // 忽略组件型字段键值对\n                                                recentlyButtonClickedRow:\n                                                    omitBy(\n                                                        record,\n                                                        (value) =>\n                                                            value?.$$typeof\n                                                    ),\n                                                nClicksButton:\n                                                    nClicksButton + 1,\n                                                clickedContent:\n                                                    content_.content,\n                                                clickedCustom: content_.custom,\n                                                recentlyButtonClickedDataIndex:\n                                                    columns[i].dataIndex,\n                                            });\n                                        }}\n                                        size={'small'}\n                                        type={content_.type}\n                                        color={content_.color}\n                                        variant={content_.variant}\n                                        danger={content_.danger}\n                                        disabled={content_.disabled}\n                                        href={\n                                            columns[i].renderOptions.likeDccLink\n                                                ? undefined\n                                                : content_.href\n                                        }\n                                        target={content_.target}\n                                        style={content_.style}\n                                        icon={\n                                            content_.icon &&\n                                            (content_.iconRenderer ===\n                                            'fontawesome' ? (\n                                                React.createElement('i', {\n                                                    className: content_.icon,\n                                                })\n                                            ) : (\n                                                <AntdIcon\n                                                    icon={content_.icon}\n                                                />\n                                            ))\n                                        }\n                                    >\n                                        {content_.content}\n                                    </Button>\n                                );\n                                // 否则仅渲染按钮\n                                return content_.tooltip ? (\n                                    <Tooltip\n                                        title={content_.tooltip?.title}\n                                        placement={content_.tooltip?.placement}\n                                    >\n                                        {columns[i].renderOptions\n                                            .likeDccLink ? (\n                                            <UtilsLink\n                                                key={idx}\n                                                href={content_.href}\n                                            >\n                                                {buttonElement}\n                                            </UtilsLink>\n                                        ) : (\n                                            buttonElement\n                                        )}\n                                    </Tooltip>\n                                ) : columns[i].renderOptions.likeDccLink ? (\n                                    <UtilsLink key={idx} href={content_.href}>\n                                        {buttonElement}\n                                    </UtilsLink>\n                                ) : (\n                                    buttonElement\n                                );\n                            })}\n                        </Space>\n                    );\n                };\n            }\n            // tags模式\n            else if (columns[i].renderOptions.renderType === 'tags') {\n                columns[i].render = (tags) => {\n                    if ((!tags || isEmpty(tags)) && tags !== 0 && tags !== '') {\n                        return null;\n                    }\n                    return (\n                        // 兼容单标签/多标签输入\n                        <>\n                            {(Array.isArray(tags) ? tags : [tags]).map(\n                                (tag) => {\n                                    const tagElement = (\n                                        <Tag color={tag.color}>{tag.tag}</Tag>\n                                    );\n                                    // 若当前标签需要附带文字提示\n                                    return tag.tooltip ? (\n                                        <Tooltip\n                                            title={tag.tooltip?.title}\n                                            placement={tag.tooltip?.placement}\n                                        >\n                                            {tagElement}\n                                        </Tooltip>\n                                    ) : (\n                                        tagElement\n                                    );\n                                }\n                            )}\n                        </>\n                    );\n                };\n            }\n            // custom-format模式\n            else if (columns[i].renderOptions.renderType === 'custom-format') {\n                // 若customFormatFuncs对应当前字段的属性值存在\n                if (customFormatFuncs[columns[i].dataIndex]) {\n                    columns[i].render = eval(\n                        customFormatFuncs[columns[i].dataIndex]\n                    );\n                }\n            }\n            // mini-line模式\n            else if (columns[i].renderOptions.renderType === 'mini-line') {\n                columns[i].render = (data) => {\n                    let config = {\n                        autoFit: true,\n                        padding: 0,\n                        data: data,\n                        animation: miniChartAnimation,\n                        smooth: true,\n                    };\n                    // 检查是否设置了tooltipCustomContent参数\n                    if (columns[i].renderOptions?.tooltipCustomContent) {\n                        config = {\n                            ...config,\n                            tooltip: {\n                                customContent: eval(\n                                    columns[i].renderOptions\n                                        .tooltipCustomContent\n                                ),\n                            },\n                        };\n                    }\n                    // 检查是否设置了miniChartColor参数\n                    if (columns[i].renderOptions?.miniChartColor) {\n                        config = {\n                            ...config,\n                            color: columns[i].renderOptions.miniChartColor,\n                        };\n                    }\n                    return (\n                        <div style={{ height: miniChartHeight }}>\n                            <TinyLine {...config} />\n                        </div>\n                    );\n                };\n            }\n            // mini-bar模式\n            else if (columns[i].renderOptions.renderType === 'mini-bar') {\n                columns[i].render = (data) => {\n                    let config = {\n                        padding: 0,\n                        autoFit: true,\n                        data: data,\n                        animation: miniChartAnimation,\n                    };\n                    // 检查是否设置了tooltipCustomContent参数\n                    if (columns[i].renderOptions?.tooltipCustomContent) {\n                        config = {\n                            ...config,\n                            tooltip: {\n                                customContent: eval(\n                                    columns[i].renderOptions\n                                        .tooltipCustomContent\n                                ),\n                            },\n                        };\n                    }\n                    // 检查是否设置了miniChartColor参数\n                    if (columns[i].renderOptions?.miniChartColor) {\n                        config = {\n                            ...config,\n                            color: columns[i].renderOptions.miniChartColor,\n                        };\n                    }\n                    return (\n                        <div style={{ height: miniChartHeight }}>\n                            <TinyColumn {...config} />\n                        </div>\n                    );\n                };\n            }\n            // mini-progress模式\n            else if (columns[i].renderOptions.renderType === 'mini-progress') {\n                columns[i].render = (data) => {\n                    return (\n                        <div\n                            style={{\n                                height: miniChartHeight,\n                                alignItems: 'center',\n                                display: 'flex',\n                            }}\n                        >\n                            <Progress\n                                percent={data * 100}\n                                format={(percent) => {\n                                    if (\n                                        isUndefined(\n                                            columns[i].renderOptions\n                                                .progressPercentPrecision\n                                        )\n                                    ) {\n                                        return percent + '%';\n                                    }\n                                    return (\n                                        percent.toFixed(\n                                            columns[i].renderOptions\n                                                .progressPercentPrecision\n                                        ) + '%'\n                                    );\n                                }}\n                                strokeColor={\n                                    data * 100 === 100\n                                        ? columns[i].renderOptions\n                                              .progressOneHundredPercentColor\n                                        : columns[i].renderOptions.progressColor\n                                }\n                                trailColor={'#E8EDF3'}\n                                status={\n                                    data * 100 >= 100 ? undefined : 'normal'\n                                }\n                                showInfo={Boolean(\n                                    columns[i].renderOptions.progressShowPercent\n                                )}\n                                strokeLinecap={\n                                    columns[i].renderOptions\n                                        .progressStrokeLinecap || 'square'\n                                }\n                                size={\n                                    columns[i].renderOptions.progressSize\n                                        ? [\n                                              '100%',\n                                              columns[i].renderOptions\n                                                  .progressSize,\n                                          ]\n                                        : ['100%', 15]\n                                }\n                                percentPosition={\n                                    columns[i].renderOptions\n                                        .progressPercentPosition\n                                }\n                            />\n                        </div>\n                    );\n                };\n            }\n            // mini-ring-progress模式\n            else if (\n                columns[i].renderOptions.renderType === 'mini-ring-progress'\n            ) {\n                columns[i].render = (data) => {\n                    const config = {\n                        autoFit: true,\n                        padding: 0,\n                        percent: data,\n                        animation: miniChartAnimation,\n                        color: [\n                            data === 1\n                                ? columns[i].renderOptions\n                                      .progressOneHundredPercentColor ||\n                                  '#52c41a'\n                                : '#5B8FF9',\n                            '#E8EDF3',\n                        ],\n                        statistic: {\n                            content: {\n                                style: {\n                                    fontSize:\n                                        columns[i].renderOptions\n                                            .ringProgressFontSize,\n                                },\n                            },\n                        },\n                    };\n                    return (\n                        <div style={{ height: miniChartHeight }}>\n                            <RingProgress {...config} />\n                        </div>\n                    );\n                };\n            }\n            // mini-area模式\n            else if (columns[i].renderOptions.renderType === 'mini-area') {\n                columns[i].render = (data) => {\n                    let config = {\n                        autoFit: true,\n                        padding: 0,\n                        data: data,\n                        animation: miniChartAnimation,\n                        smooth: true,\n                    };\n                    // 检查是否设置了tooltipCustomContent参数\n                    if (columns[i].renderOptions?.tooltipCustomContent) {\n                        config = {\n                            ...config,\n                            tooltip: {\n                                customContent: eval(\n                                    columns[i].renderOptions\n                                        .tooltipCustomContent\n                                ),\n                            },\n                        };\n                    }\n                    // 检查是否设置了miniChartColor参数\n                    if (columns[i].renderOptions?.miniChartColor) {\n                        config = {\n                            ...config,\n                            areaStyle: {\n                                fill: columns[i].renderOptions.miniChartColor,\n                                fillOpacity: 0.4,\n                            },\n                            line: {\n                                color: columns[i].renderOptions.miniChartColor,\n                            },\n                        };\n                    }\n                    return (\n                        <div style={{ height: miniChartHeight }}>\n                            <TinyArea {...config} />\n                        </div>\n                    );\n                };\n            }\n        }\n    }\n\n    if (titlePopoverInfo) {\n        for (let i = 0; i < columns.length; i++) {\n            if (Object.keys(titlePopoverInfo).includes(columns[i].dataIndex)) {\n                if (!columns[i].title_) {\n                    columns[i].title_ = columns[i].title;\n                }\n                columns[i].title = () => {\n                    return (\n                        <div\n                            style={{\n                                display: 'flex',\n                                alignItems: 'center',\n                                justifyContent: 'center',\n                            }}\n                        >\n                            {columns[i].title_}\n                            <Popover\n                                title={\n                                    titlePopoverInfo[columns[i].dataIndex].title\n                                }\n                                content={\n                                    <div\n                                        style={{\n                                            maxWidth: '250px',\n                                            wordWrap: 'break-word',\n                                            whiteSpace: 'normal',\n                                            wordBreak: 'break-all',\n                                        }}\n                                    >\n                                        {\n                                            titlePopoverInfo[\n                                                columns[i].dataIndex\n                                            ].content\n                                        }\n                                    </div>\n                                }\n                                overlayStyle={\n                                    titlePopoverInfo[columns[i].dataIndex]\n                                        .overlayStyle\n                                }\n                                placement={\n                                    titlePopoverInfo[columns[i].dataIndex]\n                                        .placement || 'bottom'\n                                }\n                                getPopupContainer={\n                                    containerId\n                                        ? () =>\n                                              document.getElementById(\n                                                  containerId\n                                              )\n                                                  ? document.getElementById(\n                                                        containerId\n                                                    )\n                                                  : document.body\n                                        : undefined\n                                }\n                            >\n                                <QuestionCircleOutlined\n                                    style={{\n                                        color: '#8c8c8c',\n                                        paddingLeft: '4px',\n                                        cursor: 'pointer',\n                                    }}\n                                />\n                            </Popover>\n                        </div>\n                    );\n                };\n            }\n        }\n    }\n\n    // 添加表头单元格监听事件\n    columns = columns.map((item, idx) => ({\n        ...item,\n        ...{\n            onHeaderCell: (e) => {\n                return {\n                    islast: idx - (columns.length - 1),\n                    ...(enableHoverListen\n                        ? {\n                              onMouseEnter: (event) => {\n                                  setProps({\n                                      recentlyMouseEnterColumnDataIndex:\n                                          e.dataIndex,\n                                  });\n                              },\n                          }\n                        : {}),\n                    // 独立控制表头对齐\n                    ...(e.headerAlign\n                        ? {\n                              style: { textAlign: e.headerAlign },\n                          }\n                        : {}),\n                };\n            },\n        },\n    }));\n\n    let rowSelection;\n    // 处理行选择功能设置\n    if (rowSelectionType) {\n        rowSelection = {\n            columnWidth: rowSelectionWidth,\n            checkStrictly: rowSelectionCheckStrictly,\n            fixed: true,\n            type: rowSelectionType,\n            selectedRowKeys: selectedRowKeys,\n            selections: [\n                Table.SELECTION_ALL,\n                Table.SELECTION_INVERT,\n                Table.SELECTION_NONE,\n            ],\n            onChange: (selectedRowKeys, selectedRows) => {\n                setProps({\n                    selectedRowKeys:\n                        // 排除被忽略选择的行\n                        rowSelectionIgnoreRowKeys\n                            ? selectedRowKeys.filter(\n                                  (item) =>\n                                      !rowSelectionIgnoreRowKeys.includes(item)\n                              )\n                            : selectedRowKeys,\n                    selectedRows:\n                        // 排除被忽略选择的行\n                        rowSelectionIgnoreRowKeys\n                            ? selectedRows\n                                  .map(\n                                      // 忽略组件型字段键值对\n                                      (record) =>\n                                          omitBy(\n                                              record,\n                                              (value) => value?.$$typeof\n                                          )\n                                  )\n                                  .filter(\n                                      (record) =>\n                                          !rowSelectionIgnoreRowKeys.includes(\n                                              record.key\n                                          )\n                                  )\n                            : selectedRows.map((record) =>\n                                  omitBy(record, (value) => value?.$$typeof)\n                              ),\n                });\n            },\n            renderCell: (checked, record, index, originNode) => {\n                // 排除不可选择的行\n                if (\n                    rowSelectionIgnoreRowKeys &&\n                    rowSelectionIgnoreRowKeys.includes(record.key)\n                ) {\n                    return null;\n                }\n                return originNode;\n            },\n        };\n    }\n\n    // 处理行可展开内容功能\n    let rowExpandedRowRender;\n    if (expandedRowKeyToContent && Array.isArray(expandedRowKeyToContent)) {\n        rowExpandedRowRender = new Map(\n            expandedRowKeyToContent.map((item) => [item.key, item.content])\n        );\n    }\n\n    // 检查当前是否至少有一个字段是可编辑的\n    const atLeastOneColumnEditable = columns.some((item) => item.editable);\n\n    // 减少不必要的单元格重绘\n    if (cellUpdateOptimize) {\n        columns = columns.map((item) => {\n            return {\n                ...item,\n                // 减少不必要的单元格重绘\n                shouldCellUpdate: (record, prevRecord) => {\n                    if (isEqual(record, prevRecord)) {\n                        return false;\n                    }\n                    return true;\n                },\n            };\n        });\n    }\n\n    // 配置自定义组件\n    const components = {};\n\n    // 若至少有一个字段开启编辑功能\n    if (atLeastOneColumnEditable) {\n        components.body = {\n            row: EditableRow,\n            cell: EditableCell,\n        };\n    }\n\n    // 统一合并处理onCell自定义函数逻辑\n    columns = [...columns].map((item) => {\n        return {\n            ...item,\n            ...{\n                onCell: (record, index) => {\n                    // 初始化onCell返回值\n                    let returnValue = {};\n                    // 处理自定义样式特性\n                    if (\n                        conditionalStyleFuncs &&\n                        conditionalStyleFuncs[item.dataIndex]\n                    ) {\n                        try {\n                            returnValue = {\n                                ...returnValue,\n                                ...eval(conditionalStyleFuncs[item.dataIndex])(\n                                    record,\n                                    index\n                                ),\n                            };\n                        } catch (e) {\n                            console.error(e);\n                        }\n                    }\n                    // 处理单元格单击、双击、右键事件\n                    if (\n                        enableCellClickListenColumns &&\n                        enableCellClickListenColumns.includes(item.dataIndex)\n                    ) {\n                        try {\n                            returnValue = {\n                                ...returnValue,\n                                onClick: (e) => {\n                                    setProps({\n                                        recentlyCellClickColumn: item.dataIndex,\n                                        recentlyCellClickRecord: omitBy(\n                                            record,\n                                            (value) => value?.$$typeof\n                                        ),\n                                        nClicksCell: nClicksCell + 1,\n                                        cellClickEvent: {\n                                            pageX: e.pageX,\n                                            pageY: e.pageY,\n                                            clientX: e.clientX,\n                                            clientY: e.clientY,\n                                            screenX: e.screenX,\n                                            screenY: e.screenY,\n                                            timestamp: Date.now(),\n                                        },\n                                    });\n                                },\n                                onDoubleClick: (e) => {\n                                    setProps({\n                                        recentlyCellDoubleClickColumn:\n                                            item.dataIndex,\n                                        recentlyCellDoubleClickRecord: omitBy(\n                                            record,\n                                            (value) => value?.$$typeof\n                                        ),\n                                        nDoubleClicksCell:\n                                            nDoubleClicksCell + 1,\n                                        cellDoubleClickEvent: {\n                                            pageX: e.pageX,\n                                            pageY: e.pageY,\n                                            clientX: e.clientX,\n                                            clientY: e.clientY,\n                                            screenX: e.screenX,\n                                            screenY: e.screenY,\n                                            timestamp: Date.now(),\n                                        },\n                                    });\n                                },\n                                onContextMenu: (e) => {\n                                    // 阻止浏览器默认右键菜单\n                                    e.preventDefault();\n                                    setProps({\n                                        recentlyContextMenuClickColumn:\n                                            item.dataIndex,\n                                        recentlyContextMenuClickRecord: omitBy(\n                                            record,\n                                            (value) => value?.$$typeof\n                                        ),\n                                        nContextMenuClicksCell:\n                                            nContextMenuClicksCell + 1,\n                                        cellContextMenuClickEvent: {\n                                            pageX: e.pageX,\n                                            pageY: e.pageY,\n                                            clientX: e.clientX,\n                                            clientY: e.clientY,\n                                            screenX: e.screenX,\n                                            screenY: e.screenY,\n                                            timestamp: Date.now(),\n                                        },\n                                    });\n                                },\n                            };\n                        } catch (e) {\n                            console.error(e);\n                        }\n                    }\n\n                    // 处理可编辑特性\n                    if (item.editable) {\n                        try {\n                            returnValue = {\n                                ...returnValue,\n                                record,\n                                editable: item.editable,\n                                dataIndex: item.dataIndex,\n                                title: item.title,\n                            };\n                        } catch (e) {\n                            console.error(e);\n                        }\n                    }\n\n                    return returnValue;\n                },\n            },\n        };\n    });\n\n    // 若存在至少一个字段有group参数，则对columns进行重构以支持多层表头\n    let tempColumns = [];\n    if (columns.some((e) => e.group)) {\n        // 新逻辑\n        for (const column of columns) {\n            if (column.group) {\n                if (isString(column.group)) {\n                    insertNewColumnNode(column, [column.group], 0, tempColumns);\n                } else {\n                    insertNewColumnNode(column, column.group, 0, tempColumns);\n                }\n            } else {\n                tempColumns.push(column);\n            }\n        }\n    } else {\n        tempColumns = [...columns];\n    }\n\n    return (\n        <ConfigProvider\n            locale={str2Locale.get(locale)}\n            renderEmpty={emptyContent ? () => emptyContent : undefined}\n        >\n            <Table\n                // 提取具有data-*或aria-*通配格式的属性\n                {...pickBy(\n                    (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                    others\n                )}\n                id={id}\n                className={className}\n                style={style}\n                key={key}\n                components={components}\n                rowClassName={\n                    rowClassName\n                        ? (record, index) => {\n                              // 初始化rowClassName返回值\n                              let _rowClassName = atLeastOneColumnEditable\n                                  ? 'editable-row'\n                                  : '';\n                              // 若rowClassName参数通过func进行javascript函数定义\n                              if (rowClassName.func) {\n                                  _rowClassName += ` ${eval(rowClassName.func)(record, index)}`;\n                              } else {\n                                  _rowClassName += ` ${rowClassName}`;\n                              }\n                              return _rowClassName.trimStart();\n                          }\n                        : atLeastOneColumnEditable\n                          ? () => 'editable-row'\n                          : undefined\n                }\n                dataSource={\n                    // 根据hiddenRowKeys参数情况进行指定行记录的隐藏\n                    data.filter((e) => !hiddenRowKeys.includes(e.key))\n                }\n                columns={tempColumns}\n                showHeader={showHeader}\n                rowHoverable={rowHoverable}\n                tableLayout={tableLayout}\n                size={size}\n                rowSelection={rowSelection}\n                sticky={computedSticky}\n                pagination={\n                    // 确保pagination=false生效\n                    pagination && {\n                        ...pagination,\n                        ...{\n                            showTotal: (total) =>\n                                `${pagination.showTotalPrefix} ${total} ${pagination.showTotalSuffix}`,\n                        },\n                        position:\n                            pagination.position &&\n                            !Array.isArray(pagination.position)\n                                ? [pagination.position]\n                                : pagination.position,\n                    }\n                }\n                bordered={bordered}\n                scroll={{\n                    x: maxWidth,\n                    y: maxHeight,\n                    scrollToFirstRowOnChange: scrollToFirstRowOnChange,\n                }}\n                onChange={onPageChange}\n                onRow={\n                    enableHoverListen\n                        ? (record, index) => {\n                              return {\n                                  onMouseEnter: (event) => {\n                                      setProps({\n                                          recentlyMouseEnterRowKey: record.key,\n                                          // 忽略组件型字段键值对\n                                          recentlyMouseEnterRow: omitBy(\n                                              record,\n                                              (value) => value?.$$typeof\n                                          ),\n                                      });\n                                  }, // 鼠标移入行\n                              };\n                          }\n                        : undefined\n                }\n                summary={\n                    summaryRowContents\n                        ? () => (\n                              <Table.Summary fixed={summaryRowFixed}>\n                                  {splitSummaryRowContents(\n                                      summaryRowContents,\n                                      columns.length,\n                                      summaryRowBlankColumns\n                                  ).map((group, idx) => (\n                                      <Table.Summary.Row key={idx}>\n                                          {group.map((item, i) =>\n                                              item.empty ? (\n                                                  <Table.Summary.Cell\n                                                      index={i}\n                                                  />\n                                              ) : (\n                                                  <Table.Summary.Cell\n                                                      index={i}\n                                                      colSpan={item.colSpan}\n                                                      align={item.align}\n                                                  >\n                                                      {item.content}\n                                                  </Table.Summary.Cell>\n                                              )\n                                          )}\n                                      </Table.Summary.Row>\n                                  ))}\n                              </Table.Summary>\n                          )\n                        : undefined\n                }\n                expandable={\n                    rowExpandedRowRender\n                        ? {\n                              defaultExpandedRowKeys: defaultExpandedRowKeys,\n                              expandedRowKeys:\n                                  expandedRowKeys || defaultExpandedRowKeys,\n                              expandedRowRender: (record) =>\n                                  rowExpandedRowRender.get(record.key),\n                              rowExpandable: (record) =>\n                                  rowExpandedRowRender.has(record.key),\n                              columnWidth: expandedRowWidth,\n                              expandRowByClick: expandRowByClick,\n                              onExpandedRowsChange: (e) =>\n                                  setProps({\n                                      expandedRowKeys: e,\n                                  }),\n                          }\n                        : {\n                              // 兼容行记录自带children的自动展开情况\n                              defaultExpandedRowKeys: defaultExpandedRowKeys,\n                              expandedRowKeys:\n                                  expandedRowKeys || defaultExpandedRowKeys,\n                              columnWidth: expandedRowWidth,\n                              expandRowByClick: expandRowByClick,\n                              onExpandedRowsChange: (e) =>\n                                  setProps({\n                                      expandedRowKeys: e,\n                                  }),\n                          }\n                }\n                virtual={virtual}\n                title={title && (() => title)}\n                footer={footer && (() => footer)}\n                data-dash-is-loading={useLoading()}\n                loading={loading}\n                getPopupContainer={\n                    containerId\n                        ? () =>\n                              document.getElementById(containerId)\n                                  ? document.getElementById(containerId)\n                                  : document.body\n                        : undefined\n                }\n                showSorterTooltip={\n                    showSorterTooltip && showSorterTooltipTarget\n                        ? { target: showSorterTooltipTarget }\n                        : showSorterTooltip\n                }\n            />\n        </ConfigProvider>\n    );\n};\n\nexport default React.memo(AntdTable, (prevProps, nextProps) => {\n    // 计算发生变化的参数名\n    const changedProps = Object.keys(nextProps).filter(\n        (key) => !isEqual(prevProps[key], nextProps[key])\n    );\n\n    // 特殊处理：\n    // 当recentlySelectValue发生变动且不涉及data变动时时，阻止本次重绘\n    if (\n        changedProps.includes('recentlySelectValue') &&\n        !changedProps.includes('data') &&\n        !changedProps.includes('currentData')\n    ) {\n        return true;\n    }\n\n    // #80\n    // selectedRowsSyncWithData=true时，当data发生更新，在selectedRowKeys有效时，对selectedRows进行同步更新\n    if (\n        nextProps.selectedRowsSyncWithData &&\n        nextProps.selectedRowKeys &&\n        changedProps.includes('data')\n    ) {\n        // 同步更新selectedRows的值\n        nextProps.setProps({\n            // 忽略组件型字段键值对\n            selectedRows: nextProps.data\n                .filter((item) => nextProps.selectedRowKeys.includes(item.key))\n                .map((record) => omitBy(record, (value) => value?.$$typeof)),\n        });\n    }\n\n    // // 判断当前轮次变更的prop是否均在preventUpdateProps中\n    // console.log({ changedProps })\n    // console.log(\n    //     '免重绘props：',\n    //     changedProps.every(propName => preventUpdateProps.includes(propName))\n    // )\n\n    // changedProps中全部变化的prop都在preventUpdateProps中声明时\n    // 阻止本次重绘\n    return changedProps.every((propName) =>\n        preventUpdateProps.includes(propName)\n    );\n});\n\nAntdTable.defaultProps = defaultProps;\nAntdTable.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataDisplay/AntdAccordion.react.js",
    "content": "// react核心\nimport React, { useEffect, useContext } from 'react';\n// antd核心\nimport { Collapse } from 'antd';\n// 辅助库\nimport { isString, isUndefined } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 上下文\nimport PropsContext from '../../contexts/PropsContext';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataDisplay/AntdAccordion.react';\n\n/**\n * 手风琴组件AntdAccordion\n */\nconst AntdAccordion = (props) => {\n    const {\n        id,\n        className,\n        style,\n        key,\n        classNames,\n        styles,\n        items,\n        accordion,\n        activeKey,\n        defaultActiveKey,\n        bordered,\n        size,\n        collapsible,\n        expandIconPosition,\n        ghost,\n        setProps,\n        ...others\n    } = props;\n\n    useEffect(() => {\n        if (defaultActiveKey && !activeKey) {\n            setProps({ activeKey: defaultActiveKey });\n        }\n    }, []);\n\n    const context = useContext(PropsContext);\n\n    return (\n        <Collapse\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            items={(items || []).map((item) => ({\n                className: isString(item.className)\n                    ? item.className\n                    : item.className\n                      ? useCss(item.className)\n                      : undefined,\n                style: item.style,\n                key: item.key,\n                collapsible: item.collapsible,\n                label: item.title,\n                children: item.children,\n                extra: item.extra,\n                showArrow: item.showArrow,\n                forceRender: item.forceRender,\n                classNames: classNames,\n                styles: styles,\n            }))}\n            accordion={accordion}\n            activeKey={activeKey}\n            defaultActiveKey={defaultActiveKey}\n            bordered={bordered}\n            size={\n                context && !isUndefined(context.componentSize)\n                    ? context.componentSize\n                    : size\n            }\n            collapsible={collapsible}\n            expandIconPosition={expandIconPosition}\n            ghost={ghost}\n            onChange={(e) => setProps({ activeKey: e })}\n            data-dash-is-loading={useLoading()}\n        />\n    );\n};\n\nexport default AntdAccordion;\n\nAntdAccordion.defaultProps = defaultProps;\nAntdAccordion.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataDisplay/AntdAvatar.react.js",
    "content": "// react核心\nimport React from 'react';\n// antd核心\nimport { Avatar } from 'antd';\nimport AntdIcon from '../../components/general/AntdIcon.react';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataDisplay/AntdAvatar.react';\n\n/**\n * 头像组件AntdAvatar\n */\nconst AntdAvatar = (props) => {\n    const {\n        id,\n        className,\n        style,\n        key,\n        mode,\n        text,\n        src,\n        srcSet,\n        draggable,\n        crossOrigin,\n        icon,\n        iconRenderer,\n        alt,\n        gap,\n        size,\n        shape,\n        setProps,\n        ...others\n    } = props;\n\n    // image图片模式\n    if (mode === 'image') {\n        return (\n            <Avatar\n                // 提取具有data-*或aria-*通配格式的属性\n                {...pickBy(\n                    (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                    others\n                )}\n                id={id}\n                className={\n                    isString(className)\n                        ? className\n                        : className\n                          ? useCss(className)\n                          : undefined\n                }\n                style={style}\n                key={key}\n                src={src}\n                srcSet={srcSet}\n                draggable={draggable}\n                crossOrigin={crossOrigin}\n                alt={alt}\n                size={size}\n                shape={shape}\n                data-dash-is-loading={useLoading()}\n            />\n        );\n    } else if (mode === 'text') {\n        // text文字模式\n        return (\n            <Avatar\n                // 提取具有data-*或aria-*通配格式的属性\n                {...pickBy(\n                    (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                    others\n                )}\n                id={id}\n                className={\n                    isString(className)\n                        ? className\n                        : className\n                          ? useCss(className)\n                          : undefined\n                }\n                style={style}\n                key={key}\n                gap={gap}\n                size={size}\n                shape={shape}\n                data-dash-is-loading={useLoading()}\n            >\n                {text}\n            </Avatar>\n        );\n    }\n    // icon图标模式\n    return (\n        <Avatar\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            icon={\n                icon ? (\n                    iconRenderer === 'fontawesome' ? (\n                        React.createElement('i', {\n                            className: icon,\n                        })\n                    ) : (\n                        <AntdIcon icon={icon} />\n                    )\n                ) : (\n                    <AntdIcon icon={'antd-user'} />\n                )\n            }\n            size={size}\n            shape={shape}\n            data-dash-is-loading={useLoading()}\n        />\n    );\n};\n\nexport default AntdAvatar;\n\nAntdAvatar.defaultProps = defaultProps;\nAntdAvatar.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataDisplay/AntdAvatarGroup.react.js",
    "content": "// react核心W\nimport React from 'react';\n// antd核心\nimport { Avatar } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataDisplay/AntdAvatarGroup.react';\n\n/**\n * 头像组合组件AntdAvatarGroup\n */\nconst AntdAvatarGroup = (props) => {\n    const {\n        id,\n        children,\n        className,\n        style,\n        key,\n        max,\n        size,\n        setProps,\n        ...others\n    } = props;\n\n    return (\n        <Avatar.Group\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            max={max}\n            size={size}\n            data-dash-is-loading={useLoading()}\n        >\n            {children}\n        </Avatar.Group>\n    );\n};\n\nexport default AntdAvatarGroup;\n\nAntdAvatarGroup.defaultProps = defaultProps;\nAntdAvatarGroup.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataDisplay/AntdBadge.react.js",
    "content": "// react核心\nimport React from 'react';\n// antd核心\nimport { Badge } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataDisplay/AntdBadge.react';\n\n/**\n * 徽标组件AntdBadge\n */\nconst AntdBadge = (props) => {\n    const {\n        id,\n        children,\n        className,\n        style,\n        styles,\n        classNames,\n        key,\n        color,\n        count,\n        dot,\n        offset,\n        overflowCount,\n        showZero,\n        status,\n        text,\n        title,\n        size,\n        nClicks,\n        setProps,\n        ...others\n    } = props;\n\n    return (\n        <Badge\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            styles={styles}\n            classNames={classNames}\n            key={key}\n            color={color}\n            count={count}\n            dot={dot}\n            offset={offset && offset.length === 2 ? offset : undefined}\n            overflowCount={overflowCount}\n            showZero={showZero}\n            status={status}\n            text={text}\n            title={title}\n            size={size}\n            onClick={() => setProps({ nClicks: nClicks + 1 })}\n            data-dash-is-loading={useLoading()}\n        >\n            {children}\n        </Badge>\n    );\n};\n\nexport default AntdBadge;\n\nAntdBadge.defaultProps = defaultProps;\nAntdBadge.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataDisplay/AntdCarousel.react.js",
    "content": "// react核心\nimport React from 'react';\n// antd核心\nimport { Carousel } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataDisplay/AntdCarousel.react';\n\n/**\n * 走马灯组件AntdCarousel\n */\nconst AntdCarousel = (props) => {\n    const {\n        id,\n        children,\n        className,\n        style,\n        key,\n        arrows,\n        autoplay,\n        dotPosition,\n        easing,\n        effect,\n        autoplaySpeed,\n        speed,\n        pauseOnHover,\n        infinite,\n        lazyLoad,\n        slidesToShow,\n        slidesToScroll,\n        setProps,\n        ...others\n    } = props;\n\n    return (\n        <Carousel\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            arrows={arrows}\n            autoplay={autoplay}\n            dotPosition={dotPosition}\n            easing={easing}\n            effect={effect}\n            autoplaySpeed={autoplaySpeed}\n            speed={speed}\n            pauseOnHover={pauseOnHover}\n            infinite={infinite}\n            lazyLoad={lazyLoad}\n            slidesToShow={slidesToShow}\n            slidesToScroll={slidesToScroll}\n            data-dash-is-loading={useLoading()}\n        >\n            {(Array.isArray(children) ? children : [children]).map(\n                (child, i) => (\n                    <div className=\"ant-carousel-item-wrapper\" key={i}>\n                        {child}\n                    </div>\n                )\n            )}\n        </Carousel>\n    );\n};\n\nexport default AntdCarousel;\n\nAntdCarousel.defaultProps = defaultProps;\nAntdCarousel.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataDisplay/AntdCheckableTag.react.js",
    "content": "// react核心\nimport React from 'react';\n// antd核心\nimport { Tag } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataDisplay/AntdCheckableTag.react';\n\nconst { CheckableTag } = Tag;\n\n/**\n * 可选择标签AntdCheckableTag\n */\nconst AntdCheckableTag = (props) => {\n    const {\n        id,\n        className,\n        style,\n        key,\n        content,\n        checkedContent,\n        unCheckedContent,\n        checked,\n        setProps,\n        ...others\n    } = props;\n\n    return (\n        <CheckableTag\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            key={key}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            checked={checked}\n            onChange={(e) => setProps({ checked: e })}\n            data-dash-is-loading={useLoading()}\n        >\n            {checked ? checkedContent || content : unCheckedContent || content}\n        </CheckableTag>\n    );\n};\n\nexport default AntdCheckableTag;\n\nAntdCheckableTag.defaultProps = defaultProps;\nAntdCheckableTag.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataDisplay/AntdComment.react.js",
    "content": "// react核心\nimport React, { useEffect, useContext } from 'react';\n// antd核心\nimport { Tooltip, Popconfirm, ConfigProvider } from 'antd';\nimport { Comment } from '@ant-design/compatible';\nimport AntdAvatar from './AntdAvatar.react';\nimport {\n    DislikeOutlined,\n    LikeOutlined,\n    DislikeFilled,\n    LikeFilled,\n} from '@ant-design/icons';\n// 辅助库\nimport dayjs from 'dayjs';\nimport relativeTime from 'dayjs/plugin/relativeTime';\nimport { str2Locale, locale2text } from '../../components/locales.react';\nimport { parseChildrenToArray, useLoading } from '../../components/utils';\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport 'dayjs/locale/de';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 上下文\nimport PropsContext from '../../contexts/PropsContext';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataDisplay/AntdComment.react';\n\n// 调用dayjs相对时间插件模块\ndayjs.extend(relativeTime);\n\n/**\n * 评论组件AntdComment\n */\nconst AntdComment = (props) => {\n    let {\n        id,\n        children,\n        className,\n        style,\n        locale,\n        commentId,\n        showLikeDislike,\n        showReply,\n        showDelete,\n        replyClicks,\n        deleteClicks,\n        authorName,\n        authorNameHref,\n        publishTime,\n        fromNow,\n        commentContent,\n        likesCount,\n        dislikesCount,\n        action,\n        defaultAction,\n        avatarProps,\n        popupContainer,\n        setProps,\n        batchPropsNames,\n        ...others\n    } = props;\n\n    // 批量属性监听\n    useEffect(() => {\n        if (batchPropsNames && batchPropsNames.length !== 0) {\n            const _batchPropsValues = {};\n            for (const propName of batchPropsNames) {\n                _batchPropsValues[propName] = props[propName];\n            }\n            setProps({\n                batchPropsValues: _batchPropsValues,\n            });\n        }\n    });\n\n    const context = useContext(PropsContext);\n    locale = (context && context.locale) || locale;\n\n    if (locale === 'zh-cn') {\n        dayjs.locale('zh-cn');\n    } else if (locale === 'en-us') {\n        dayjs.locale('en');\n    } else if (locale === 'de-de') {\n        dayjs.locale('de');\n    }\n\n    children = parseChildrenToArray(children);\n\n    useEffect(() => {\n        if (!action && defaultAction) {\n            setProps({\n                action: defaultAction,\n            });\n        }\n    }, []);\n\n    const like = () => {\n        setProps({\n            likesCount: action === 'liked' ? likesCount - 1 : likesCount + 1,\n            action: action === 'liked' ? 'default' : 'liked',\n            dislikesCount:\n                action === 'disliked' ? dislikesCount - 1 : dislikesCount,\n        });\n    };\n\n    const dislike = () => {\n        setProps({\n            dislikesCount:\n                action === 'disliked' ? dislikesCount - 1 : dislikesCount + 1,\n            action: action === 'disliked' ? 'default' : 'disliked',\n            likesCount: action === 'liked' ? likesCount - 1 : likesCount,\n        });\n    };\n\n    const actions = [\n        showLikeDislike ? (\n            <Tooltip\n                key=\"comment-basic-like\"\n                title={locale2text.AntdComment[locale].likeTooltipTitle}\n            >\n                <span onClick={like}>\n                    {action === 'liked' ? (\n                        <LikeFilled style={{ color: 'rgb(236, 65, 65)' }} />\n                    ) : (\n                        <LikeOutlined />\n                    )}\n                    <span className=\"comment-action\">{likesCount}</span>\n                </span>\n            </Tooltip>\n        ) : undefined,\n        showLikeDislike ? (\n            <Tooltip\n                key=\"comment-basic-dislike\"\n                title={locale2text.AntdComment[locale].dislikeTooltipTitle}\n            >\n                <span onClick={dislike}>\n                    {React.createElement(\n                        action === 'disliked' ? DislikeFilled : DislikeOutlined\n                    )}\n                    <span className=\"comment-action\">{dislikesCount}</span>\n                </span>\n            </Tooltip>\n        ) : undefined,\n        showReply ? (\n            <span\n                key=\"comment-basic-reply-to\"\n                onClick={() => {\n                    setProps({ replyClicks: replyClicks + 1 });\n                }}\n            >\n                {locale2text.AntdComment[locale].replayTitle}\n            </span>\n        ) : undefined,\n        showDelete ? (\n            <Popconfirm\n                title={locale2text.AntdComment[locale].deleteConfirmTitle}\n                onConfirm={() => setProps({ deleteClicks: deleteClicks + 1 })}\n                okText={locale2text.AntdComment[locale].deleteConfirmOkText}\n                cancelText={\n                    locale2text.AntdComment[locale].deleteConfirmCancelText\n                }\n                getPopupContainer={\n                    popupContainer === 'parent'\n                        ? (triggerNode) => triggerNode.parentNode\n                        : undefined\n                }\n            >\n                <span key=\"comment-basic-delete\">\n                    {locale2text.AntdComment[locale].deleteTitle}\n                </span>\n            </Popconfirm>\n        ) : undefined,\n    ];\n\n    return (\n        <ConfigProvider locale={str2Locale.get(locale)}>\n            <Comment\n                // 提取具有data-*或aria-*通配格式的属性\n                {...pickBy(\n                    (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                    others\n                )}\n                id={id}\n                className={\n                    isString(className)\n                        ? className\n                        : className\n                          ? useCss(className)\n                          : undefined\n                }\n                style={style}\n                key={commentId}\n                actions={actions}\n                author={\n                    <a href={authorNameHref} target={'_blank'}>\n                        {authorName}\n                    </a>\n                }\n                avatar={<AntdAvatar {...avatarProps} />}\n                content={<p>{commentContent}</p>}\n                datetime={\n                    <Tooltip\n                        title={dayjs().format(publishTime.value)}\n                        placement={'right'}\n                    >\n                        <span>\n                            {fromNow\n                                ? dayjs(\n                                      publishTime.value,\n                                      publishTime.format\n                                          ? publishTime.format\n                                          : 'YYYY-MM-DD HH:mm:ss'\n                                  ).fromNow()\n                                : publishTime.value}\n                        </span>\n                    </Tooltip>\n                }\n                data-dash-is-loading={useLoading()}\n            >\n                {children}\n            </Comment>\n        </ConfigProvider>\n    );\n};\n\nexport default AntdComment;\n\nAntdComment.defaultProps = defaultProps;\nAntdComment.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataDisplay/AntdCountdown.react.js",
    "content": "// antd核心\nimport { Statistic, Space, Tooltip } from 'antd';\nimport { QuestionCircleOutlined } from '@ant-design/icons';\n// 辅助库\nimport dayjs from 'dayjs';\nimport { isString, isEqual } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataDisplay/AntdCountdown.react';\n\nconst { Timer } = Statistic;\n\n/**\n * 倒计时组件AntdCountdown\n */\nconst AntdCountdown = (props) => {\n    const {\n        id,\n        className,\n        style,\n        key,\n        value,\n        valueFormat,\n        format,\n        prefix,\n        suffix,\n        title,\n        titleTooltip,\n        valueStyle,\n        setProps,\n        ...others\n    } = props;\n\n    return (\n        <Timer\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            type={'countdown'} // 指定类型为倒计时\n            value={dayjs(value, valueFormat)}\n            format={format}\n            prefix={prefix}\n            suffix={suffix}\n            title={\n                titleTooltip ? (\n                    <Space size={5}>\n                        {title}\n                        <Tooltip title={titleTooltip}>\n                            <QuestionCircleOutlined />\n                        </Tooltip>\n                    </Space>\n                ) : (\n                    title\n                )\n            }\n            valueStyle={valueStyle}\n            onFinish={() =>\n                setProps({ finishEvent: { timestamp: Date.now() } })\n            }\n            data-dash-is-loading={useLoading()}\n        />\n    );\n};\n\nconst preventUpdateProps = ['finishEvent'];\n\nexport default React.memo(AntdCountdown, (prevProps, nextProps) => {\n    // 计算发生变化的参数名，并排除setProps属性\n    const changedProps = Object.keys(nextProps).filter(\n        (key) => !isEqual(prevProps[key], nextProps[key]) && key !== 'setProps'\n    );\n\n    // changedProps中全部变化的prop都在preventUpdateProps中声明时\n    // 阻止本次重绘\n    return changedProps.every((propName) =>\n        preventUpdateProps.includes(propName)\n    );\n});\n\nAntdCountdown.defaultProps = defaultProps;\nAntdCountdown.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataDisplay/AntdCountup.react.js",
    "content": "// antd核心\nimport { Statistic, Space, Tooltip } from 'antd';\nimport { QuestionCircleOutlined } from '@ant-design/icons';\n// 辅助库\nimport dayjs from 'dayjs';\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataDisplay/AntdCountup.react';\n\nconst { Timer } = Statistic;\n\n/**\n *正计时组件AntdCountup\n */\nconst AntdCountup = (props) => {\n    const {\n        id,\n        className,\n        style,\n        key,\n        value,\n        valueFormat,\n        format,\n        prefix,\n        suffix,\n        title,\n        titleTooltip,\n        valueStyle,\n        setProps,\n        ...others\n    } = props;\n\n    return (\n        <Timer\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            type={'countup'} // 指定类型为正计时\n            value={dayjs(value, valueFormat)}\n            format={format}\n            prefix={prefix}\n            suffix={suffix}\n            title={\n                titleTooltip ? (\n                    <Space size={5}>\n                        {title}\n                        <Tooltip title={titleTooltip}>\n                            <QuestionCircleOutlined />\n                        </Tooltip>\n                    </Space>\n                ) : (\n                    title\n                )\n            }\n            valueStyle={valueStyle}\n            data-dash-is-loading={useLoading()}\n        />\n    );\n};\n\nexport default AntdCountup;\n\nAntdCountup.defaultProps = defaultProps;\nAntdCountup.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataDisplay/AntdEmpty.react.js",
    "content": "// react核心\nimport React, { useContext } from 'react';\n// antd核心\nimport { Empty, ConfigProvider } from 'antd';\n// 辅助库\nimport { str2Locale } from '../../components/locales.react';\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 上下文\nimport PropsContext from '../../contexts/PropsContext';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataDisplay/AntdEmpty.react';\n\nconst builtinImage = new Map([\n    ['default', Empty.PRESENTED_IMAGE_DEFAULT],\n    ['simple', Empty.PRESENTED_IMAGE_SIMPLE],\n]);\n\n/**\n * 空状态组件AntdEmpty\n */\nconst AntdEmpty = (props) => {\n    let {\n        id,\n        children,\n        className,\n        style,\n        styles,\n        classNames,\n        key,\n        locale,\n        description,\n        image,\n        setProps,\n        ...others\n    } = props;\n\n    const context = useContext(PropsContext);\n    locale = (context && context.locale) || locale;\n\n    return (\n        <ConfigProvider locale={str2Locale.get(locale)}>\n            <Empty\n                // 提取具有data-*或aria-*通配格式的属性\n                {...pickBy(\n                    (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                    others\n                )}\n                id={id}\n                className={\n                    isString(className)\n                        ? className\n                        : className\n                          ? useCss(className)\n                          : undefined\n                }\n                style={style}\n                styles={styles}\n                classNames={classNames}\n                key={key}\n                description={description}\n                image={builtinImage.get(image) || image}\n                data-dash-is-loading={useLoading()}\n            >\n                {children}\n            </Empty>\n        </ConfigProvider>\n    );\n};\n\nexport default AntdEmpty;\n\nAntdEmpty.defaultProps = defaultProps;\nAntdEmpty.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataDisplay/AntdImage.react.js",
    "content": "// react核心\nimport React, { useState, useContext } from 'react';\n// antd核心\nimport { Image, ConfigProvider } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { str2Locale } from '../../components/locales.react';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 上下文\nimport PropsContext from '../../contexts/PropsContext';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataDisplay/AntdImage.react';\n\nconst defaultFallback = `data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMIAAADDCAYAAADQvc6UAAABRWlDQ1BJQ0MgUHJvZmlsZQAAKJFjYGASSSwoyGFhYGDIzSspCnJ3UoiIjFJgf8LAwSDCIMogwMCcmFxc4BgQ4ANUwgCjUcG3awyMIPqyLsis7PPOq3QdDFcvjV3jOD1boQVTPQrgSkktTgbSf4A4LbmgqISBgTEFyFYuLykAsTuAbJEioKOA7DkgdjqEvQHEToKwj4DVhAQ5A9k3gGyB5IxEoBmML4BsnSQk8XQkNtReEOBxcfXxUQg1Mjc0dyHgXNJBSWpFCYh2zi+oLMpMzyhRcASGUqqCZ16yno6CkYGRAQMDKMwhqj/fAIcloxgHQqxAjIHBEugw5sUIsSQpBobtQPdLciLEVJYzMPBHMDBsayhILEqEO4DxG0txmrERhM29nYGBddr//5/DGRjYNRkY/l7////39v///y4Dmn+LgeHANwDrkl1AuO+pmgAAADhlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAAAwqADAAQAAAABAAAAwwAAAAD9b/HnAAAHlklEQVR4Ae3dP3PTWBSGcbGzM6GCKqlIBRV0dHRJFarQ0eUT8LH4BnRU0NHR0UEFVdIlFRV7TzRksomPY8uykTk/zewQfKw/9znv4yvJynLv4uLiV2dBoDiBf4qP3/ARuCRABEFAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghgg0Aj8i0JO4OzsrPv69Wv+hi2qPHr0qNvf39+iI97soRIh4f3z58/u7du3SXX7Xt7Z2enevHmzfQe+oSN2apSAPj09TSrb+XKI/f379+08+A0cNRE2ANkupk+ACNPvkSPcAAEibACyXUyfABGm3yNHuAECRNgAZLuYPgEirKlHu7u7XdyytGwHAd8jjNyng4OD7vnz51dbPT8/7z58+NB9+/bt6jU/TI+AGWHEnrx48eJ/EsSmHzx40L18+fLyzxF3ZVMjEyDCiEDjMYZZS5wiPXnyZFbJaxMhQIQRGzHvWR7XCyOCXsOmiDAi1HmPMMQjDpbpEiDCiL358eNHurW/5SnWdIBbXiDCiA38/Pnzrce2YyZ4//59F3ePLNMl4PbpiL2J0L979+7yDtHDhw8vtzzvdGnEXdvUigSIsCLAWavHp/+qM0BcXMd/q25n1vF57TYBp0a3mUzilePj4+7k5KSLb6gt6ydAhPUzXnoPR0dHl79WGTNCfBnn1uvSCJdegQhLI1vvCk+fPu2ePXt2tZOYEV6/fn31dz+shwAR1sP1cqvLntbEN9MxA9xcYjsxS1jWR4AIa2Ibzx0tc44fYX/16lV6NDFLXH+YL32jwiACRBiEbf5KcXoTIsQSpzXx4N28Ja4BQoK7rgXiydbHjx/P25TaQAJEGAguWy0+2Q8PD6/Ki4R8EVl+bzBOnZY95fq9rj9zAkTI2SxdidBHqG9+skdw43borCXO/ZcJdraPWdv22uIEiLA4q7nvvCug8WTqzQveOH26fodo7g6uFe/a17W3+nFBAkRYENRdb1vkkz1CH9cPsVy/jrhr27PqMYvENYNlHAIesRiBYwRy0V+8iXP8+/fvX11Mr7L7ECueb/r48eMqm7FuI2BGWDEG8cm+7G3NEOfmdcTQw4h9/55lhm7DekRYKQPZF2ArbXTAyu4kDYB2YxUzwg0gi/41ztHnfQG26HbGel/crVrm7tNY+/1btkOEAZ2M05r4FB7r9GbAIdxaZYrHdOsgJ/wCEQY0J74TmOKnbxxT9n3FgGGWWsVdowHtjt9Nnvf7yQM2aZU/TIAIAxrw6dOnAWtZZcoEnBpNuTuObWMEiLAx1HY0ZQJEmHJ3HNvGCBBhY6jtaMoEiJB0Z29vL6ls58vxPcO8/zfrdo5qvKO+d3Fx8Wu8zf1dW4p/cPzLly/dtv9Ts/EbcvGAHhHyfBIhZ6NSiIBTo0LNNtScABFyNiqFCBChULMNNSdAhJyNSiECRCjUbEPNCRAhZ6NSiAARCjXbUHMCRMjZqBQiQIRCzTbUnAARcjYqhQgQoVCzDTUnQIScjUohAkQo1GxDzQkQIWejUogAEQo121BzAkTI2agUIkCEQs021JwAEXI2KoUIEKFQsw01J0CEnI1KIQJEKNRsQ80JECFno1KIABEKNdtQcwJEyNmoFCJAhELNNtScABFyNiqFCBChULMNNSdAhJyNSiECRCjUbEPNCRAhZ6NSiAARCjXbUHMCRMjZqBQiQIRCzTbUnAARcjYqhQgQoVCzDTUnQIScjUohAkQo1GxDzQkQIWejUogAEQo121BzAkTI2agUIkCEQs021JwAEXI2KoUIEKFQsw01J0CEnI1KIQJEKNRsQ80JECFno1KIABEKNdtQcwJEyNmoFCJAhELNNtScABFyNiqFCBChULMNNSdAhJyNSiECRCjUbEPNCRAhZ6NSiAARCjXbUHMCRMjZqBQiQIRCzTbUnAARcjYqhQgQoVCzDTUnQIScjUohAkQo1GxDzQkQIWejUogAEQo121BzAkTI2agUIkCEQs021JwAEXI2KoUIEKFQsw01J0CEnI1KIQJEKNRsQ80JECFno1KIABEKNdtQcwJEyNmoFCJAhELNNtScABFyNiqFCBChULMNNSdAhJyNSiEC/wGgKKC4YMA4TAAAAABJRU5ErkJggg==`;\n\n/**\n * 图片组件AntdImage\n */\nconst AntdImage = (props) => {\n    let {\n        id,\n        className,\n        style,\n        key,\n        locale,\n        width,\n        height,\n        src,\n        fallback,\n        multiImageMode,\n        previewCurrent,\n        previewVisible,\n        preview,\n        toolbarExtra,\n        setProps,\n        ...others\n    } = props;\n\n    const context = useContext(PropsContext);\n    locale = (context && context.locale) || locale;\n\n    // 多图片模式时\n    if (Array.isArray(src)) {\n        // 多图片折叠模式时\n        if (multiImageMode === 'fold') {\n            return (\n                <ConfigProvider locale={str2Locale.get(locale)}>\n                    <Image\n                        // 提取具有data-*或aria-*通配格式的属性\n                        {...pickBy(\n                            (_, k) =>\n                                k.startsWith('data-') || k.startsWith('aria-'),\n                            others\n                        )}\n                        id={id}\n                        style={style}\n                        className={\n                            isString(className)\n                                ? className\n                                : className\n                                  ? useCss(className)\n                                  : undefined\n                        }\n                        key={key}\n                        preview={{ visible: false }}\n                        width={width}\n                        height={height}\n                        src={src[0]} // 取第一张图片作为触发图片\n                        fallback={fallback || defaultFallback}\n                        onClick={() => setProps({ previewVisible: true })} // 点击触发图片进入多图浏览模式\n                    />\n                    <div style={{ display: 'none' }}>\n                        <Image.PreviewGroup\n                            preview={{\n                                ...preview,\n                                current: previewCurrent,\n                                visible: previewVisible,\n                                onChange: (e) =>\n                                    setProps({ previewCurrent: e }),\n                                onVisibleChange: (e) =>\n                                    setProps({ previewVisible: e }),\n                                toolbarRender: (originalNode) => {\n                                    return {\n                                        ...originalNode,\n                                        props: {\n                                            ...originalNode.props,\n                                            children: toolbarExtra\n                                                ? [\n                                                      ...originalNode.props\n                                                          .children,\n                                                      ...(Array.isArray(\n                                                          toolbarExtra\n                                                      )\n                                                          ? toolbarExtra\n                                                          : [toolbarExtra]),\n                                                  ]\n                                                : originalNode.props.children,\n                                        },\n                                    };\n                                },\n                            }}\n                        >\n                            {src.map((item) => (\n                                <Image\n                                    src={item}\n                                    fallback={fallback || defaultFallback}\n                                />\n                            ))}\n                        </Image.PreviewGroup>\n                    </div>\n                </ConfigProvider>\n            );\n        }\n        return (\n            <ConfigProvider locale={str2Locale.get(locale)}>\n                <Image.PreviewGroup\n                    // 提取具有data-*或aria-*通配格式的属性\n                    {...pickBy(\n                        (_, k) =>\n                            k.startsWith('data-') || k.startsWith('aria-'),\n                        others\n                    )}\n                    id={id}\n                    style={style}\n                    className={\n                        isString(className)\n                            ? className\n                            : className\n                              ? useCss(className)\n                              : undefined\n                    }\n                    key={key}\n                    preview={{\n                        ...preview,\n                        current: previewCurrent,\n                        visible: previewVisible,\n                        onChange: (e) => setProps({ previewCurrent: e }),\n                        onVisibleChange: (e) => setProps({ previewVisible: e }),\n                        toolbarRender: (originalNode) => {\n                            return {\n                                ...originalNode,\n                                props: {\n                                    ...originalNode.props,\n                                    children: toolbarExtra\n                                        ? [\n                                              ...originalNode.props.children,\n                                              ...(Array.isArray(toolbarExtra)\n                                                  ? toolbarExtra\n                                                  : [toolbarExtra]),\n                                          ]\n                                        : originalNode.props.children,\n                                },\n                            };\n                        },\n                    }}\n                >\n                    {src.map((item) => (\n                        <Image\n                            src={item}\n                            fallback={fallback || defaultFallback}\n                            width={width} // 统一宽度\n                            height={height} // 统一高度\n                        />\n                    ))}\n                </Image.PreviewGroup>\n            </ConfigProvider>\n        );\n    }\n    return (\n        <ConfigProvider locale={str2Locale.get(locale)}>\n            <Image\n                // 提取具有data-*或aria-*通配格式的属性\n                {...pickBy(\n                    (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                    others\n                )}\n                id={id}\n                style={style}\n                className={\n                    isString(className)\n                        ? className\n                        : className\n                          ? useCss(className)\n                          : undefined\n                }\n                key={key}\n                width={width}\n                height={height}\n                src={src}\n                fallback={fallback || defaultFallback}\n                preview={\n                    preview\n                        ? {\n                              ...preview,\n                              current: previewCurrent,\n                              visible: previewVisible,\n                              onChange: (e) => setProps({ previewCurrent: e }),\n                              onVisibleChange: (e) =>\n                                  setProps({ previewVisible: e }),\n                              toolbarRender: (originalNode) => {\n                                  return {\n                                      ...originalNode,\n                                      props: {\n                                          ...originalNode.props,\n                                          children: toolbarExtra\n                                              ? [\n                                                    ...originalNode.props\n                                                        .children,\n                                                    ...(Array.isArray(\n                                                        toolbarExtra\n                                                    )\n                                                        ? toolbarExtra\n                                                        : [toolbarExtra]),\n                                                ]\n                                              : originalNode.props.children,\n                                      },\n                                  };\n                              },\n                          }\n                        : false\n                }\n            />\n        </ConfigProvider>\n    );\n};\n\nexport default AntdImage;\n\nAntdImage.defaultProps = defaultProps;\nAntdImage.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataDisplay/AntdImageGroup.react.js",
    "content": "// react核心\nimport React, { useContext } from 'react';\n// antd核心\nimport { Image, ConfigProvider } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { str2Locale } from '../../components/locales.react';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 上下文\nimport PropsContext from '../../contexts/PropsContext';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataDisplay/AntdImageGroup.react';\n\nconst defaultFallback = `data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMIAAADDCAYAAADQvc6UAAABRWlDQ1BJQ0MgUHJvZmlsZQAAKJFjYGASSSwoyGFhYGDIzSspCnJ3UoiIjFJgf8LAwSDCIMogwMCcmFxc4BgQ4ANUwgCjUcG3awyMIPqyLsis7PPOq3QdDFcvjV3jOD1boQVTPQrgSkktTgbSf4A4LbmgqISBgTEFyFYuLykAsTuAbJEioKOA7DkgdjqEvQHEToKwj4DVhAQ5A9k3gGyB5IxEoBmML4BsnSQk8XQkNtReEOBxcfXxUQg1Mjc0dyHgXNJBSWpFCYh2zi+oLMpMzyhRcASGUqqCZ16yno6CkYGRAQMDKMwhqj/fAIcloxgHQqxAjIHBEugw5sUIsSQpBobtQPdLciLEVJYzMPBHMDBsayhILEqEO4DxG0txmrERhM29nYGBddr//5/DGRjYNRkY/l7////39v///y4Dmn+LgeHANwDrkl1AuO+pmgAAADhlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAAAwqADAAQAAAABAAAAwwAAAAD9b/HnAAAHlklEQVR4Ae3dP3PTWBSGcbGzM6GCKqlIBRV0dHRJFarQ0eUT8LH4BnRU0NHR0UEFVdIlFRV7TzRksomPY8uykTk/zewQfKw/9znv4yvJynLv4uLiV2dBoDiBf4qP3/ARuCRABEFAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghgg0Aj8i0JO4OzsrPv69Wv+hi2qPHr0qNvf39+iI97soRIh4f3z58/u7du3SXX7Xt7Z2enevHmzfQe+oSN2apSAPj09TSrb+XKI/f379+08+A0cNRE2ANkupk+ACNPvkSPcAAEibACyXUyfABGm3yNHuAECRNgAZLuYPgEirKlHu7u7XdyytGwHAd8jjNyng4OD7vnz51dbPT8/7z58+NB9+/bt6jU/TI+AGWHEnrx48eJ/EsSmHzx40L18+fLyzxF3ZVMjEyDCiEDjMYZZS5wiPXnyZFbJaxMhQIQRGzHvWR7XCyOCXsOmiDAi1HmPMMQjDpbpEiDCiL358eNHurW/5SnWdIBbXiDCiA38/Pnzrce2YyZ4//59F3ePLNMl4PbpiL2J0L979+7yDtHDhw8vtzzvdGnEXdvUigSIsCLAWavHp/+qM0BcXMd/q25n1vF57TYBp0a3mUzilePj4+7k5KSLb6gt6ydAhPUzXnoPR0dHl79WGTNCfBnn1uvSCJdegQhLI1vvCk+fPu2ePXt2tZOYEV6/fn31dz+shwAR1sP1cqvLntbEN9MxA9xcYjsxS1jWR4AIa2Ibzx0tc44fYX/16lV6NDFLXH+YL32jwiACRBiEbf5KcXoTIsQSpzXx4N28Ja4BQoK7rgXiydbHjx/P25TaQAJEGAguWy0+2Q8PD6/Ki4R8EVl+bzBOnZY95fq9rj9zAkTI2SxdidBHqG9+skdw43borCXO/ZcJdraPWdv22uIEiLA4q7nvvCug8WTqzQveOH26fodo7g6uFe/a17W3+nFBAkRYENRdb1vkkz1CH9cPsVy/jrhr27PqMYvENYNlHAIesRiBYwRy0V+8iXP8+/fvX11Mr7L7ECueb/r48eMqm7FuI2BGWDEG8cm+7G3NEOfmdcTQw4h9/55lhm7DekRYKQPZF2ArbXTAyu4kDYB2YxUzwg0gi/41ztHnfQG26HbGel/crVrm7tNY+/1btkOEAZ2M05r4FB7r9GbAIdxaZYrHdOsgJ/wCEQY0J74TmOKnbxxT9n3FgGGWWsVdowHtjt9Nnvf7yQM2aZU/TIAIAxrw6dOnAWtZZcoEnBpNuTuObWMEiLAx1HY0ZQJEmHJ3HNvGCBBhY6jtaMoEiJB0Z29vL6ls58vxPcO8/zfrdo5qvKO+d3Fx8Wu8zf1dW4p/cPzLly/dtv9Ts/EbcvGAHhHyfBIhZ6NSiIBTo0LNNtScABFyNiqFCBChULMNNSdAhJyNSiECRCjUbEPNCRAhZ6NSiAARCjXbUHMCRMjZqBQiQIRCzTbUnAARcjYqhQgQoVCzDTUnQIScjUohAkQo1GxDzQkQIWejUogAEQo121BzAkTI2agUIkCEQs021JwAEXI2KoUIEKFQsw01J0CEnI1KIQJEKNRsQ80JECFno1KIABEKNdtQcwJEyNmoFCJAhELNNtScABFyNiqFCBChULMNNSdAhJyNSiECRCjUbEPNCRAhZ6NSiAARCjXbUHMCRMjZqBQiQIRCzTbUnAARcjYqhQgQoVCzDTUnQIScjUohAkQo1GxDzQkQIWejUogAEQo121BzAkTI2agUIkCEQs021JwAEXI2KoUIEKFQsw01J0CEnI1KIQJEKNRsQ80JECFno1KIABEKNdtQcwJEyNmoFCJAhELNNtScABFyNiqFCBChULMNNSdAhJyNSiECRCjUbEPNCRAhZ6NSiAARCjXbUHMCRMjZqBQiQIRCzTbUnAARcjYqhQgQoVCzDTUnQIScjUohAkQo1GxDzQkQIWejUogAEQo121BzAkTI2agUIkCEQs021JwAEXI2KoUIEKFQsw01J0CEnI1KIQJEKNRsQ80JECFno1KIABEKNdtQcwJEyNmoFCJAhELNNtScABFyNiqFCBChULMNNSdAhJyNSiEC/wGgKKC4YMA4TAAAAABJRU5ErkJggg==`;\n\n/**\n * 图片组合组件AntdImageGroup\n */\nconst AntdImageGroup = (props) => {\n    let {\n        id,\n        children,\n        className,\n        style,\n        key,\n        locale,\n        items,\n        fallback,\n        preview,\n        visible,\n        current,\n        disableCurrent,\n        toolbarExtra,\n        setProps,\n        ...others\n    } = props;\n\n    const context = useContext(PropsContext);\n    locale = (context && context.locale) || locale;\n\n    return (\n        <ConfigProvider locale={str2Locale.get(locale)}>\n            <Image.PreviewGroup\n                // 提取具有data-*或aria-*通配格式的属性\n                {...pickBy(\n                    (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                    others\n                )}\n                id={id}\n                style={style}\n                className={\n                    isString(className)\n                        ? className\n                        : className\n                          ? useCss(className)\n                          : undefined\n                }\n                key={key}\n                items={items}\n                fallback={fallback || defaultFallback}\n                preview={{\n                    ...preview,\n                    visible: visible,\n                    current: disableCurrent ? undefined : current,\n                    onChange: (e) => setProps({ current: e }),\n                    onVisibleChange: (e) => setProps({ visible: e }),\n                    toolbarRender: (originalNode) => {\n                        return {\n                            ...originalNode,\n                            props: {\n                                ...originalNode.props,\n                                children: toolbarExtra\n                                    ? [\n                                          ...originalNode.props.children,\n                                          ...(Array.isArray(toolbarExtra)\n                                              ? toolbarExtra\n                                              : [toolbarExtra]),\n                                      ]\n                                    : originalNode.props.children,\n                            },\n                        };\n                    },\n                }}\n            >\n                {children}\n            </Image.PreviewGroup>\n        </ConfigProvider>\n    );\n};\n\nexport default AntdImageGroup;\n\nAntdImageGroup.defaultProps = defaultProps;\nAntdImageGroup.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataDisplay/AntdPopover.react.js",
    "content": "// react核心\nimport { useMemo } from 'react';\n// antd核心\nimport { Popover } from 'antd';\nimport AntdIcon from '../../components/general/AntdIcon.react';\n// 辅助库\nimport { parseChildrenToArray, useLoading } from '../../components/utils';\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataDisplay/AntdPopover.react';\n\n/**\n * 气泡卡片组件Popover\n */\nconst AntdPopover = (props) => {\n    let {\n        id,\n        children,\n        className,\n        style,\n        styles,\n        classNames,\n        key,\n        title,\n        content,\n        placement,\n        color,\n        mouseEnterDelay,\n        mouseLeaveDelay,\n        trigger,\n        zIndex,\n        arrow,\n        fresh,\n        open,\n        permanent,\n        popupContainer,\n        setProps,\n        ...others\n    } = props;\n\n    const arrowPoint = useMemo(() => {\n        if (arrow === 'hide') {\n            return false;\n        }\n        if (arrow === 'show') {\n            return true;\n        }\n        return {\n            pointAtCenter: true,\n        };\n    }, [arrow]);\n\n    children = parseChildrenToArray(children);\n\n    if (!content) {\n        return <>{children}</>;\n    }\n\n    return (\n        <Popover\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            styles={styles}\n            classNames={classNames}\n            key={key}\n            title={\n                title && title.content ? (\n                    <div>\n                        {<AntdIcon icon={title.prefixIcon} />}\n                        {\n                            <span style={{ marginLeft: '5px' }}>\n                                {title.content}\n                            </span>\n                        }\n                    </div>\n                ) : (\n                    title\n                )\n            }\n            content={content}\n            placement={placement}\n            color={color}\n            mouseEnterDelay={mouseEnterDelay}\n            mouseLeaveDelay={mouseLeaveDelay}\n            trigger={trigger}\n            zIndex={zIndex}\n            arrow={arrowPoint}\n            fresh={fresh}\n            open={open}\n            onOpenChange={permanent ? undefined : (e) => setProps({ open: e })}\n            getPopupContainer={\n                popupContainer === 'parent'\n                    ? (triggerNode) => triggerNode.parentNode\n                    : undefined\n            }\n            data-dash-is-loading={useLoading()}\n        >\n            {children}\n        </Popover>\n    );\n};\n\nexport default AntdPopover;\n\nAntdPopover.defaultProps = defaultProps;\nAntdPopover.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataDisplay/AntdQRCode.react.js",
    "content": "// react核心\nimport React, { useEffect } from 'react';\n// antd核心\nimport { QRCode, ConfigProvider } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy, equals } from 'ramda';\nimport { str2Locale } from '../../components/locales.react';\nimport { useLoading, loadingSelector } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataDisplay/AntdQRCode.react';\n\n/**\n * 二维码组件AntdQRCode\n */\nconst AntdQRCode = (props) => {\n    const {\n        id,\n        className,\n        style,\n        key,\n        locale,\n        value,\n        type,\n        icon,\n        size,\n        iconSize,\n        color,\n        bgColor,\n        bordered,\n        errorLevel,\n        status,\n        expires,\n        autoSpin,\n        refreshClicks,\n        setProps,\n        ...others\n    } = props;\n\n    const ctx = window.dash_component_api.useDashContext();\n    // 获取内部加载中组件信息\n    const loading_info = ctx.useSelector(\n        loadingSelector(ctx.componentPath),\n        equals\n    );\n\n    useEffect(() => {\n        if (value && expires) {\n            setTimeout(() => {\n                setProps({ status: 'expired' });\n            }, expires * 1000);\n        }\n    }, [value]);\n\n    return (\n        <ConfigProvider locale={str2Locale.get(locale)}>\n            <QRCode\n                // 提取具有data-*或aria-*通配格式的属性\n                {...pickBy(\n                    (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                    others\n                )}\n                id={id}\n                className={\n                    isString(className)\n                        ? className\n                        : className\n                          ? useCss(className)\n                          : undefined\n                }\n                style={style}\n                key={key}\n                value={value}\n                type={type}\n                icon={icon}\n                size={size}\n                iconSize={iconSize}\n                color={color}\n                bgColor={bgColor}\n                bordered={bordered}\n                errorLevel={errorLevel}\n                status={\n                    autoSpin &&\n                    loading_info.length > 0 &&\n                    loading_info[0].property === 'value'\n                        ? 'loading'\n                        : status\n                }\n                onRefresh={() => setProps({ refreshClicks: refreshClicks + 1 })}\n                data-dash-is-loading={useLoading()}\n            />\n        </ConfigProvider>\n    );\n};\n\nexport default AntdQRCode;\n\nAntdQRCode.defaultProps = defaultProps;\nAntdQRCode.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataDisplay/AntdRibbon.react.js",
    "content": "// react核心\nimport React from 'react';\n// antd核心\nimport { Badge } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataDisplay/AntdRibbon.react';\n\n/**\n * 缎带组件AntdRibbon\n */\nconst AntdRibbon = (props) => {\n    const {\n        id,\n        children,\n        className,\n        style,\n        key,\n        color,\n        placement,\n        text,\n        setProps,\n        ...others\n    } = props;\n\n    return (\n        <Badge.Ribbon\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            color={color}\n            placement={placement}\n            text={text}\n            data-dash-is-loading={useLoading()}\n        >\n            {children}\n        </Badge.Ribbon>\n    );\n};\n\nexport default AntdRibbon;\n\nAntdRibbon.defaultProps = defaultProps;\nAntdRibbon.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataDisplay/AntdSegmented.react.js",
    "content": "// react核心\nimport React, { useEffect, useContext } from 'react';\n// antd核心\nimport { Segmented } from 'antd';\nimport AntdIcon from '../../components/general/AntdIcon.react';\n// 辅助库\nimport { isString, isUndefined, isNumber } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 上下文\nimport PropsContext from '../../contexts/PropsContext';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataDisplay/AntdSegmented.react';\n\n/**\n * 分段控制器组件AntdSegmented\n */\nconst AntdSegmented = (props) => {\n    let {\n        id,\n        style,\n        className,\n        key,\n        options,\n        defaultValue,\n        value,\n        block,\n        shape,\n        vertical,\n        disabled,\n        size,\n        setProps,\n        persistence,\n        persisted_props,\n        persistence_type,\n        batchPropsNames,\n        ...others\n    } = props;\n\n    // 批属性监听\n    useEffect(() => {\n        if (batchPropsNames && batchPropsNames.length !== 0) {\n            const _batchPropsValues = {};\n            for (const propName of batchPropsNames) {\n                _batchPropsValues[propName] = props[propName];\n            }\n            setProps({\n                batchPropsValues: _batchPropsValues,\n            });\n        }\n    });\n\n    const context = useContext(PropsContext);\n\n    options = options || [];\n\n    useEffect(() => {\n        if (defaultValue && !value) {\n            // 当defaultValue不为空时，为value初始化defaultValue对应的value值\n            setProps({ value: defaultValue });\n        }\n    }, []);\n\n    const onSelect = (v) => {\n        setProps({ value: v });\n    };\n\n    return (\n        <Segmented\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            options={\n                options.every((item) => isNumber(item) || isString(item))\n                    ? // 快捷方式\n                      options.map((item) => ({ label: item, value: item }))\n                    : options.map((item) => {\n                          return {\n                              ...item,\n                              icon:\n                                  item.icon &&\n                                  (item.iconRenderer === 'fontawesome' ? (\n                                      React.createElement('i', {\n                                          className: item.icon,\n                                      })\n                                  ) : (\n                                      <AntdIcon icon={item.icon} />\n                                  )),\n                          };\n                      })\n            }\n            defaultValue={defaultValue}\n            value={value}\n            block={block}\n            shape={shape}\n            vertical={vertical}\n            disabled={\n                context && !isUndefined(context.componentDisabled)\n                    ? context.componentDisabled\n                    : disabled\n            }\n            size={\n                context && !isUndefined(context.componentSize)\n                    ? context.componentSize\n                    : size\n            }\n            onChange={onSelect}\n            data-dash-is-loading={useLoading()}\n        />\n    );\n};\n\nexport default AntdSegmented;\n\nAntdSegmented.defaultProps = defaultProps;\nAntdSegmented.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataDisplay/AntdSpoiler.react.js",
    "content": "// react核心\nimport React, { useRef } from 'react';\n// antd核心\nimport { Typography } from 'antd';\n// 辅助库\nimport { useSize } from 'ahooks';\nimport { locale2text } from '../../components/locales.react';\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataDisplay/AntdSpoiler.react';\n\nconst { Link } = Typography;\n\n/**\n * 展开收起组件AntdSpoiler\n */\nconst AntdSpoiler = (props) => {\n    const {\n        id,\n        children,\n        className,\n        style,\n        key,\n        locale,\n        contentClassName,\n        contentStyle,\n        hideLabel,\n        showLabel,\n        labelPosition,\n        open,\n        maxHeight,\n        transitionDuration,\n        setProps,\n        ...others\n    } = props;\n\n    const ref = useRef(null);\n    const size = useSize(ref);\n\n    return (\n        <div\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            key={key}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            data-dash-is-loading={useLoading()}\n        >\n            <div\n                className={\n                    isString(contentClassName)\n                        ? contentClassName\n                        : contentClassName\n                          ? useCss(contentClassName)\n                          : undefined\n                }\n                style={{\n                    transitionTimingFunction: 'ease',\n                    ...contentStyle,\n                    maxHeight: open ? size && size.height : maxHeight,\n                    transitionDuration: `${transitionDuration}s`,\n                    transitionProperty: 'max-height',\n                    overflow: 'hidden',\n                }}\n            >\n                <div ref={ref}>{children}</div>\n            </div>\n            <div\n                style={{\n                    textAlign: labelPosition,\n                }}\n            >\n                <Link\n                    onClick={() => {\n                        setProps({\n                            open: !open,\n                        });\n                    }}\n                >\n                    {open\n                        ? hideLabel || locale2text.AntdSpoiler[locale].hideLabel\n                        : showLabel ||\n                          locale2text.AntdSpoiler[locale].showLabel}\n                </Link>\n            </div>\n        </div>\n    );\n};\n\nexport default AntdSpoiler;\n\nAntdSpoiler.defaultProps = defaultProps;\nAntdSpoiler.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataDisplay/AntdTabs.react.js",
    "content": "// react核心\nimport React, { useEffect } from 'react';\n// antd核心\nimport { Tabs, Dropdown } from 'antd';\nimport AntdIcon from '../../components/general/AntdIcon.react';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataDisplay/AntdTabs.react';\n\n/**\n * 标签页组件AntdTabs\n */\nconst AntdTabs = (props) => {\n    let {\n        id,\n        className,\n        style,\n        key,\n        items,\n        disabledTabKeys,\n        tabBarLeftExtraContent,\n        tabBarRightExtraContent,\n        defaultActiveKey,\n        activeKey,\n        size,\n        tabPosition,\n        type,\n        centered,\n        indicator,\n        tabBarGutter,\n        tabBarStyle,\n        inkBarAnimated,\n        tabPaneAnimated,\n        destroyInactiveTabPane,\n        tabCloseCounts,\n        placeholder,\n        setProps,\n        persistence,\n        persisted_props,\n        persistence_type,\n        ...others\n    } = props;\n\n    useEffect(() => {\n        // 初始化value\n        if (defaultActiveKey && !activeKey) {\n            // 当defaultValue不为空时，为value初始化defaultValue对应的value值\n            setProps({ activeKey: defaultActiveKey });\n        }\n    }, []);\n\n    useEffect(() => {\n        // 更新最新的标签页数量\n        setProps({\n            tabCount: (items || []).length,\n        });\n    }, [items]);\n\n    useEffect(() => {\n        // 同步当前items子项key值数组\n        setProps({\n            itemKeys: (items || []).map((item) => item.key),\n        });\n    }, [items]);\n\n    const onChange = (e) => {\n        setProps({ activeKey: e });\n    };\n\n    const onEdit = (targetKey, action) => {\n        setProps({\n            latestDeletePane: targetKey,\n            tabCloseCounts: tabCloseCounts + 1,\n        });\n    };\n\n    // 根据disabledTabKeys进行指定标签页的禁用\n    if (disabledTabKeys) {\n        items = (items || []).map((item) => {\n            // 处理批量标签页禁用\n            if (disabledTabKeys.includes(item.key)) {\n                item = {\n                    ...item,\n                    disabled: true,\n                };\n            }\n            return item;\n        });\n    }\n\n    return (\n        <>\n            <Tabs\n                // 提取具有data-*或aria-*通配格式的属性\n                {...pickBy(\n                    (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                    others\n                )}\n                id={id}\n                className={\n                    isString(className)\n                        ? className\n                        : className\n                          ? useCss(className)\n                          : undefined\n                }\n                style={\n                    // 子项为空且无额外内容时\n                    (!items || items.length === 0) &&\n                    !(tabBarLeftExtraContent || tabBarRightExtraContent)\n                        ? { ...style, display: 'none' }\n                        : style\n                }\n                key={key}\n                items={\n                    // 处理标签页标题右键菜单功能\n                    (items || []).map((item) => {\n                        if (item.contextMenu) {\n                            item.label = (\n                                <Dropdown\n                                    menu={{\n                                        items: item.contextMenu.map(\n                                            (itemProps) => {\n                                                return {\n                                                    ...itemProps,\n                                                    icon:\n                                                        itemProps.icon &&\n                                                        (itemProps.iconRenderer ===\n                                                        'fontawesome' ? (\n                                                            React.createElement(\n                                                                'i',\n                                                                {\n                                                                    className:\n                                                                        itemProps.icon,\n                                                                }\n                                                            )\n                                                        ) : (\n                                                            <AntdIcon\n                                                                icon={\n                                                                    itemProps.icon\n                                                                }\n                                                            />\n                                                        )),\n                                                };\n                                            }\n                                        ),\n                                        // 右键菜单事件监听\n                                        onClick: (e) => {\n                                            // 阻止事件蔓延\n                                            e.domEvent.stopPropagation();\n                                            // 更新相关事件信息\n                                            setProps({\n                                                clickedContextMenu: {\n                                                    tabKey: item.key,\n                                                    menuKey: e.key,\n                                                    timestamp: Date.now(),\n                                                },\n                                            });\n                                        },\n                                    }}\n                                    trigger={['contextMenu']}\n                                >\n                                    <div>{item.label}</div>\n                                </Dropdown>\n                            );\n                        }\n                        return item;\n                    })\n                }\n                defaultActiveKey={defaultActiveKey}\n                activeKey={activeKey}\n                size={size}\n                tabPosition={tabPosition}\n                type={type}\n                centered={centered}\n                indicator={{\n                    size: (origin) => {\n                        if (indicator?.size) {\n                            if (indicator.size < 0) {\n                                return origin + indicator.size;\n                            }\n                            return indicator.size;\n                        }\n                        return origin;\n                    },\n                    align: indicator?.align,\n                }}\n                tabBarGutter={tabBarGutter}\n                tabBarStyle={tabBarStyle}\n                tabBarExtraContent={{\n                    left: tabBarLeftExtraContent,\n                    right: tabBarRightExtraContent,\n                }}\n                animated={{\n                    inkBar: inkBarAnimated,\n                    tabPane: tabPaneAnimated,\n                }}\n                destroyOnHidden={destroyInactiveTabPane}\n                hideAdd={true}\n                onChange={onChange}\n                onEdit={onEdit}\n                data-dash-is-loading={useLoading()}\n            />\n            {\n                // 子项为空时\n                !items || items.length === 0 ? placeholder : null\n            }\n        </>\n    );\n};\n\nexport default AntdTabs;\n\nAntdTabs.defaultProps = defaultProps;\nAntdTabs.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataDisplay/AntdTag.react.js",
    "content": "// react核心\nimport React from 'react';\n// antd核心\nimport { Tag } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataDisplay/AntdTag.react';\n\n/**\n * 标签组件AntdTag\n */\nconst AntdTag = (props) => {\n    const {\n        id,\n        className,\n        style,\n        key,\n        content,\n        icon,\n        color,\n        href,\n        target,\n        bordered,\n        closeIcon,\n        closeCounts,\n        setProps,\n        ...others\n    } = props;\n\n    return (\n        <Tag\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            key={key}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            icon={icon}\n            color={color}\n            bordered={bordered}\n            closeIcon={closeIcon}\n            onClose={(e) => {\n                // 阻止默认关闭事件\n                e.preventDefault();\n                setProps({\n                    closeCounts: closeCounts + 1,\n                });\n            }}\n            data-dash-is-loading={useLoading()}\n        >\n            {href ? (\n                <a href={href} target={target}>\n                    {content}\n                </a>\n            ) : (\n                content\n            )}\n        </Tag>\n    );\n};\n\nexport default AntdTag;\n\nAntdTag.defaultProps = defaultProps;\nAntdTag.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataDisplay/AntdTimeline.react.js",
    "content": "// react核心\nimport React from 'react';\n// antd核心\nimport { Timeline } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataDisplay/AntdTimeline.react';\n\n/**\n * 时间轴组件AntdTimeline\n */\nconst AntdTimeline = (props) => {\n    const {\n        id,\n        className,\n        style,\n        key,\n        items,\n        mode,\n        pending,\n        pendingDot,\n        reverse,\n        setProps,\n        ...others\n    } = props;\n\n    return (\n        <Timeline\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            mode={mode}\n            pending={pending}\n            pendingDot={pendingDot}\n            reverse={reverse}\n            items={items.map((item) => ({\n                color: item.color,\n                dot: item.icon,\n                label: item.label,\n                children: item.content,\n                position: item.position,\n            }))}\n            data-dash-is-loading={useLoading()}\n        ></Timeline>\n    );\n};\n\nexport default AntdTimeline;\n\nAntdTimeline.defaultProps = defaultProps;\nAntdTimeline.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataDisplay/AntdTooltip.react.js",
    "content": "// react核心\nimport React, { useMemo } from 'react';\n// antd核心\nimport { Tooltip } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { parseChildrenToArray, useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataDisplay/AntdTooltip.react';\n\n/**\n * 文字提示组件AntdTooltip\n */\nconst AntdTooltip = (props) => {\n    const {\n        id,\n        children,\n        className,\n        style,\n        styles,\n        classNames,\n        key,\n        title,\n        placement,\n        color,\n        mouseEnterDelay,\n        mouseLeaveDelay,\n        trigger,\n        zIndex,\n        arrow,\n        fresh,\n        open,\n        permanent,\n        popupContainer,\n        setProps,\n        ...others\n    } = props;\n\n    const arrowPoint = useMemo(() => {\n        if (arrow === 'hide') {\n            return false;\n        }\n        if (arrow === 'show') {\n            return true;\n        }\n        return {\n            pointAtCenter: true,\n        };\n    }, [arrow]);\n\n    if (!title) {\n        return <>{parseChildrenToArray(children)}</>;\n    }\n\n    return (\n        <Tooltip\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            styles={styles}\n            classNames={classNames}\n            key={key}\n            title={title}\n            placement={placement}\n            color={color}\n            mouseEnterDelay={mouseEnterDelay}\n            mouseLeaveDelay={mouseLeaveDelay}\n            trigger={trigger}\n            zIndex={zIndex}\n            arrow={arrowPoint}\n            fresh={fresh}\n            open={open}\n            onOpenChange={permanent ? undefined : (e) => setProps({ open: e })}\n            getPopupContainer={\n                popupContainer === 'parent'\n                    ? (triggerNode) => triggerNode.parentNode\n                    : undefined\n            }\n            data-dash-is-loading={useLoading()}\n        >\n            {parseChildrenToArray(children)}\n        </Tooltip>\n    );\n};\n\nexport default AntdTooltip;\n\nAntdTooltip.defaultProps = defaultProps;\nAntdTooltip.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataDisplay/AntdTree.react.js",
    "content": "// react核心\nimport React, { useEffect, useRef, useMemo } from 'react';\n// antd核心\nimport { Tree, Tooltip, Dropdown, Rate } from 'antd';\nimport AntdIcon from '../../components/general/AntdIcon.react';\n// 辅助库\nimport Highlighter from 'react-highlight-words';\nimport {\n    omitBy,\n    isUndefined,\n    isString,\n    isObject,\n    isArray,\n    cloneDeep,\n} from 'lodash';\nimport { pickBy } from 'ramda';\nimport { flatToTree, useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataDisplay/AntdTree.react';\n\n// 自定义工具函数\n// https://github.com/ant-design/ant-design/issues/15926\nconst isSameLevel = (a, b) => {\n    const aLevel = a.props.pos.split('-').length;\n    const bLevel = b.props.pos.split('-').length;\n\n    return aLevel === bLevel;\n};\n\nconst isSameParent = (a, b) => {\n    const aLevel = a.props.pos.split('-');\n    const bLevel = b.props.pos.split('-');\n    aLevel.pop();\n\n    return aLevel.join('') === bLevel.join('');\n};\n\nconst filterTree = (toFilterData, keyword, caseSensitive) => {\n    return toFilterData.filter((node) => {\n        // 首先检查当前节点是否匹配关键字\n        let isMatch = false;\n        if (Array.isArray(keyword)) {\n            isMatch = keyword.some((s) =>\n                caseSensitive\n                    ? node.title.includes(s)\n                    : node.title.toLowerCase().includes(s.toLowerCase())\n            );\n        } else {\n            isMatch = caseSensitive\n                ? node.title.includes(keyword)\n                : node.title.toLowerCase().includes(keyword.toLowerCase());\n        }\n\n        // 如果当前节点匹配关键字，但不是根节点，才保留它及其全部后代节点信息\n        if (isMatch) {\n            return true;\n        }\n\n        // 如果当前节点不匹配关键字，检查它的子节点\n        if (node.children && node.children.length > 0) {\n            node.children = filterTree(node.children, keyword, caseSensitive);\n\n            // 如果有匹配的子节点，保留当前节点及其匹配的后代节点信息\n            if (node.children.length > 0) {\n                return true;\n            }\n        }\n\n        // 如果当前节点和它的子节点都不匹配，返回 false，表示不保留该节点\n        return false;\n    });\n};\n\n/**\n * 树形控件组件AntdTree\n */\nconst AntdTree = (props) => {\n    let {\n        id,\n        className,\n        setProps,\n        style,\n        key,\n        treeData,\n        treeNodeKeyToTitle,\n        treeDataMode,\n        checkable,\n        selectable,\n        selectedKeys,\n        expandedKeys,\n        checkedKeys,\n        defaultExpandAll,\n        defaultExpandedKeys,\n        defaultExpandParent,\n        checkStrictly,\n        defaultCheckedKeys,\n        defaultSelectedKeys,\n        multiple,\n        showLine,\n        switcherIcon,\n        showIcon,\n        height,\n        draggable,\n        showDragIcon,\n        dragInSameLevel,\n        dragDisabledKeys,\n        dropDisabledKeys,\n        enableNodeFavorites,\n        favoritedKeys,\n        scrollTarget,\n        searchKeyword,\n        caseSensitive,\n        highlightStyle,\n        nodeCheckedSuffix,\n        nodeUncheckedSuffix,\n        nodeCheckedStyle,\n        nodeUncheckedStyle,\n        enableAsyncLoad,\n        persistence,\n        persisted_props,\n        persistence_type,\n        batchPropsNames,\n        ...others\n    } = props;\n\n    // 异步数据加载标识\n    const dataLoading = useRef(false);\n\n    // 每次treeData更新后，尝试还原dataLoading状态\n    useEffect(() => {\n        if (dataLoading.current) {\n            dataLoading.current = false;\n        }\n    }, [treeData]);\n\n    // 批属性监听\n    useEffect(() => {\n        if (batchPropsNames && batchPropsNames.length !== 0) {\n            const _batchPropsValues = {};\n            for (const propName of batchPropsNames) {\n                _batchPropsValues[propName] = props[propName];\n            }\n            setProps({\n                batchPropsValues: _batchPropsValues,\n            });\n        }\n    });\n\n    const treeRef = useRef(null);\n\n    // 控制一次性scrollTarget动作\n    useEffect(() => {\n        if (scrollTarget && treeRef.current) {\n            treeRef.current.scrollTo(scrollTarget);\n            setProps({\n                scrollTarget: null,\n            });\n        }\n    }, [scrollTarget]);\n\n    if (showLine) {\n        showLine = { showLeafIcon: false };\n    }\n\n    useEffect(() => {\n        setProps({\n            expandedKeys:\n                defaultExpandedKeys && !expandedKeys\n                    ? defaultExpandedKeys\n                    : expandedKeys,\n            selectedKeys:\n                defaultSelectedKeys && !selectedKeys\n                    ? defaultSelectedKeys\n                    : selectedKeys,\n            checkedKeys:\n                defaultCheckedKeys && !checkedKeys\n                    ? defaultCheckedKeys\n                    : checkedKeys,\n        });\n    }, []);\n\n    const flatToTreeData = useMemo(() => {\n        return flatToTree(treeData);\n    }, [treeData]);\n\n    // 根据treeDataMode对treeData进行预处理\n    if (treeDataMode === 'flat') {\n        treeData = flatToTreeData;\n    }\n\n    // 用于以递归的方式将节点icon属性替换成相应的icon对象\n    const add_leaf_node_icon = (inputTreeData) => {\n        if (isObject(inputTreeData)) {\n            // 为节点添加tooltip相关参数\n            if (inputTreeData.tooltipProps && isString(inputTreeData.title)) {\n                inputTreeData.title = (\n                    <Tooltip {...inputTreeData.tooltipProps}>\n                        {inputTreeData.title}\n                    </Tooltip>\n                );\n            }\n            if (inputTreeData.children) {\n                if (isString(inputTreeData.icon)) {\n                    inputTreeData.icon =\n                        inputTreeData.iconRenderer === 'fontawesome' ? (\n                            React.createElement('i', {\n                                className: inputTreeData.icon,\n                            })\n                        ) : (\n                            <AntdIcon icon={inputTreeData.icon} />\n                        );\n                }\n                for (let i = 0; i < inputTreeData.children.length; i++) {\n                    inputTreeData.children[i] = add_leaf_node_icon(\n                        inputTreeData.children[i]\n                    );\n                }\n            } else {\n                if (isString(inputTreeData.icon)) {\n                    inputTreeData.icon =\n                        inputTreeData.iconRenderer === 'fontawesome' ? (\n                            React.createElement('i', {\n                                className: inputTreeData.icon,\n                            })\n                        ) : (\n                            <AntdIcon icon={inputTreeData.icon} />\n                        );\n                }\n            }\n        }\n\n        if (isArray(inputTreeData)) {\n            for (var i = 0; i < inputTreeData.length; i++) {\n                inputTreeData[i] = add_leaf_node_icon(inputTreeData[i]);\n            }\n        }\n\n        return inputTreeData;\n    };\n\n    const listenSelect = (e) => {\n        setProps({ selectedKeys: e });\n    };\n\n    const listenCheck = (checkedKeys, e) => {\n        if (checkStrictly) {\n            setProps({\n                checkedKeys: checkedKeys.checked,\n                halfCheckedKeys: checkedKeys.halfChecked,\n            });\n        } else {\n            setProps({\n                checkedKeys: checkedKeys,\n                halfCheckedKeys: e.halfCheckedKeys,\n            });\n        }\n    };\n\n    const listenExpand = (e) => {\n        setProps({ expandedKeys: e });\n    };\n\n    const onDragEnter = (info) => {\n        setProps({ expandedKeys: info.expandedKeys });\n    };\n\n    let config = {\n        expandedKeys,\n    };\n\n    config = omitBy(config, isUndefined);\n\n    // 处理树节点拖拽事件，偏平结构模式下不可用\n    const onDrop = (info) => {\n        // 若当前放置目标节点前后同级不允许被放置\n        if (dropDisabledKeys && dropDisabledKeys.includes(info.node.key)) {\n            // 结束拖拽计算过程\n            return;\n        }\n\n        // 若仅允许同级拖拽\n        if (dragInSameLevel) {\n            const canDrop =\n                (isSameLevel(info.dragNode, info.node) && info.dropToGap) ||\n                (isSameParent(info.dragNode, info.node) && !info.dropToGap);\n            if (!canDrop) {\n                // 结束拖拽计算过程\n                return;\n            }\n        }\n\n        const dropKey = info.node.key;\n        const dragKey = info.dragNode.key;\n        const dropPos = info.node.pos.split('-');\n        const dropPosition =\n            info.dropPosition - Number(dropPos[dropPos.length - 1]);\n        const loop = (data, _key, callback) => {\n            for (let i = 0; i < data.length; i++) {\n                if (data[i].key === _key) {\n                    return callback(data[i], i, data);\n                }\n                if (data[i].children) {\n                    loop(data[i].children, _key, callback);\n                }\n            }\n        };\n        const data = cloneDeep(treeData);\n\n        let dragObj;\n        loop(data, dragKey, (item, index, arr) => {\n            arr.splice(index, 1);\n            dragObj = item;\n        });\n        if (!info.dropToGap) {\n            loop(data, dropKey, (item) => {\n                item.children = item.children || [];\n\n                item.children.unshift(dragObj);\n            });\n        } else if (\n            (info.node.props.children || []).length > 0 &&\n            info.node.props.expanded &&\n            dropPosition === 1\n        ) {\n            loop(data, dropKey, (item) => {\n                item.children = item.children || [];\n                item.children.unshift(dragObj);\n            });\n        } else {\n            let ar = [];\n            let i;\n            loop(data, dropKey, (_item, index, arr) => {\n                ar = arr;\n                i = index;\n            });\n            if (dropPosition === -1) {\n                ar.splice(i, 0, dragObj);\n            } else {\n                ar.splice(i + 1, 0, dragObj);\n            }\n        }\n        // 更新拖拽完成后的树结构数据\n        setProps({\n            treeData: data,\n            draggedNodeKey: dragKey,\n        });\n    };\n\n    return (\n        <Tree\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            ref={treeRef}\n            treeData={\n                searchKeyword\n                    ? add_leaf_node_icon(\n                          filterTree(\n                              cloneDeep(treeData),\n                              searchKeyword,\n                              caseSensitive\n                          )\n                      )\n                    : add_leaf_node_icon(cloneDeep(treeData))\n            }\n            selectedKeys={selectedKeys}\n            checkedKeys={checkedKeys}\n            selectable={selectable}\n            checkable={checkable}\n            defaultExpandAll={defaultExpandAll}\n            defaultExpandedKeys={defaultExpandedKeys}\n            defaultExpandParent={defaultExpandParent}\n            defaultCheckedKeys={defaultCheckedKeys}\n            defaultSelectedKeys={defaultSelectedKeys}\n            checkStrictly={checkStrictly}\n            multiple={multiple}\n            showLine={showLine}\n            switcherIcon={switcherIcon}\n            onSelect={listenSelect}\n            onCheck={listenCheck}\n            onExpand={listenExpand}\n            onDragEnter={onDragEnter}\n            showIcon={showIcon}\n            height={height}\n            titleRender={(nodeData) => {\n                return nodeData.contextMenu ? (\n                    <Dropdown\n                        menu={{\n                            items: nodeData.contextMenu.map((itemProps) => {\n                                return {\n                                    ...itemProps,\n                                    icon:\n                                        itemProps.icon &&\n                                        (itemProps.iconRenderer ===\n                                        'fontawesome' ? (\n                                            React.createElement('i', {\n                                                className: itemProps.icon,\n                                            })\n                                        ) : (\n                                            <AntdIcon icon={itemProps.icon} />\n                                        )),\n                                };\n                            }),\n                            // 右键菜单事件监听\n                            onClick: (e) => {\n                                // 阻止事件蔓延\n                                e.domEvent.stopPropagation();\n                                // 更新相关事件信息\n                                setProps({\n                                    clickedContextMenu: {\n                                        nodeKey: nodeData.key,\n                                        menuKey: e.key,\n                                        timestamp: Date.now(),\n                                    },\n                                });\n                            },\n                        }}\n                        trigger={['contextMenu']}\n                    >\n                        <span\n                            className={\n                                nodeData.className\n                                    ? `ant-tree-title ${nodeData.className}`\n                                    : 'ant-tree-title'\n                            }\n                            style={{\n                                ...(checkedKeys?.includes(nodeData.key)\n                                    ? nodeCheckedStyle\n                                    : nodeUncheckedStyle),\n                                ...nodeData.style, // 优先级更高\n                            }}\n                        >\n                            {searchKeyword ? (\n                                <Highlighter\n                                    highlightStyle={highlightStyle}\n                                    searchWords={\n                                        Array.isArray(searchKeyword)\n                                            ? searchKeyword\n                                            : [searchKeyword]\n                                    }\n                                    autoEscape\n                                    textToHighlight={nodeData.title}\n                                />\n                            ) : treeNodeKeyToTitle &&\n                              treeNodeKeyToTitle[nodeData.key] ? (\n                                treeNodeKeyToTitle[nodeData.key]\n                            ) : (\n                                nodeData.title\n                            )}\n                            {\n                                // 若当前节点满足收藏控件渲染条件\n                                enableNodeFavorites &&\n                                (isUndefined(nodeData.enableFavorites) ||\n                                    nodeData.enableFavorites) ? (\n                                    <span\n                                        style={{\n                                            paddingLeft: 2,\n                                        }}\n                                        onClick={(e) => {\n                                            // 阻止事件向外传递\n                                            e.stopPropagation();\n                                        }}\n                                    >\n                                        <Rate\n                                            count={1}\n                                            value={\n                                                favoritedKeys.includes(\n                                                    nodeData.key\n                                                )\n                                                    ? 1\n                                                    : 0\n                                            }\n                                            onChange={(e) => {\n                                                setProps({\n                                                    favoritedKeys:\n                                                        favoritedKeys.includes(\n                                                            nodeData.key\n                                                        )\n                                                            ? favoritedKeys.filter(\n                                                                  (key) =>\n                                                                      key !==\n                                                                      nodeData.key\n                                                              )\n                                                            : [\n                                                                  ...favoritedKeys,\n                                                                  nodeData.key,\n                                                              ],\n                                                });\n                                            }}\n                                        />\n                                    </span>\n                                ) : null\n                            }\n                            {checkedKeys?.includes(nodeData.key)\n                                ? nodeCheckedSuffix\n                                : nodeUncheckedSuffix}\n                        </span>\n                    </Dropdown>\n                ) : (\n                    <span\n                        className={\n                            nodeData.className\n                                ? `ant-tree-title ${nodeData.className}`\n                                : 'ant-tree-title'\n                        }\n                        style={{\n                            ...(checkedKeys?.includes(nodeData.key)\n                                ? nodeCheckedStyle\n                                : nodeUncheckedStyle),\n                            ...nodeData.style, // 优先级更高\n                        }}\n                    >\n                        {searchKeyword ? (\n                            nodeData.tooltipProps ? (\n                                <Tooltip {...nodeData.tooltipProps}>\n                                    <Highlighter\n                                        highlightStyle={highlightStyle}\n                                        searchWords={\n                                            Array.isArray(searchKeyword)\n                                                ? searchKeyword\n                                                : [searchKeyword]\n                                        }\n                                        autoEscape\n                                        textToHighlight={\n                                            nodeData.title.props.children\n                                        }\n                                    />\n                                </Tooltip>\n                            ) : (\n                                <Highlighter\n                                    highlightStyle={highlightStyle}\n                                    searchWords={\n                                        Array.isArray(searchKeyword)\n                                            ? searchKeyword\n                                            : [searchKeyword]\n                                    }\n                                    autoEscape\n                                    textToHighlight={nodeData.title}\n                                />\n                            )\n                        ) : treeNodeKeyToTitle &&\n                          treeNodeKeyToTitle[nodeData.key] ? (\n                            treeNodeKeyToTitle[nodeData.key]\n                        ) : (\n                            nodeData.title\n                        )}\n                        {\n                            // 若当前节点满足收藏控件渲染条件\n                            enableNodeFavorites &&\n                            (isUndefined(nodeData.enableFavorites) ||\n                                nodeData.enableFavorites) ? (\n                                <span\n                                    style={{\n                                        paddingLeft: 2,\n                                    }}\n                                    onClick={(e) => {\n                                        // 阻止事件向外传递\n                                        e.stopPropagation();\n                                    }}\n                                >\n                                    <Rate\n                                        count={1}\n                                        value={\n                                            favoritedKeys.includes(nodeData.key)\n                                                ? 1\n                                                : 0\n                                        }\n                                        onChange={(e) => {\n                                            setProps({\n                                                favoritedKeys:\n                                                    favoritedKeys.includes(\n                                                        nodeData.key\n                                                    )\n                                                        ? favoritedKeys.filter(\n                                                              (key) =>\n                                                                  key !==\n                                                                  nodeData.key\n                                                          )\n                                                        : [\n                                                              ...favoritedKeys,\n                                                              nodeData.key,\n                                                          ],\n                                            });\n                                        }}\n                                    />\n                                </span>\n                            ) : null\n                        }\n                        {checkedKeys?.includes(nodeData.key)\n                            ? nodeCheckedSuffix\n                            : nodeUncheckedSuffix}\n                    </span>\n                );\n            }}\n            showLeafIcon={false}\n            // 处理树可拖拽特性\n            draggable={\n                draggable && treeDataMode !== 'flat'\n                    ? {\n                          icon: showDragIcon,\n                          nodeDraggable: (node) => {\n                              // 检查当前节点是否被禁用拖拽\n                              if (\n                                  dragDisabledKeys &&\n                                  dragDisabledKeys.includes(node.key)\n                              ) {\n                                  return false;\n                              }\n                              return true;\n                          },\n                      }\n                    : false\n            }\n            blockNode={draggable && treeDataMode !== 'flat'}\n            onDrop={draggable && treeDataMode !== 'flat' ? onDrop : undefined}\n            loadData={\n                enableAsyncLoad\n                    ? (node) => {\n                          // 更新最新的异步加载数据目标节点\n                          setProps({\n                              loadingNode: {\n                                  key: node.key,\n                                  title: node.title,\n                              },\n                          });\n                          return new Promise((resolve) => {\n                              // 更新数据异步加载标识\n                              dataLoading.current = true;\n                              // 轮询检测是否加载完成\n                              const timer = setInterval(() => {\n                                  if (!dataLoading.current) {\n                                      clearInterval(timer);\n                                      resolve();\n                                  }\n                              }, 200);\n                          });\n                      }\n                    : undefined\n            }\n            data-dash-is-loading={useLoading()}\n            {...config}\n        />\n    );\n};\n\nexport default AntdTree;\n\nAntdTree.defaultProps = defaultProps;\nAntdTree.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataDisplay/card/AntdCard.react.js",
    "content": "// react核心\nimport React from 'react';\n// antd核心\nimport { Card } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { parseChildrenToArray, useLoading } from '../../../components/utils';\n// 自定义hooks\nimport useCss from '../../../hooks/useCss';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../../components/dataDisplay/card/AntdCard.react';\n\n/**\n * 卡片组件AntdCard\n */\nconst AntdCard = (props) => {\n    let {\n        id,\n        children,\n        className,\n        style,\n        styles,\n        classNames,\n        key,\n        actions,\n        extraLink,\n        extra,\n        coverImg,\n        variant,\n        hoverable,\n        size,\n        title,\n        nClicks,\n        setProps,\n        ...others\n    } = props;\n\n    children = parseChildrenToArray(children);\n\n    return (\n        <Card\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            styles={\n                styles?.body\n                    ? {\n                          ...styles,\n                          body: {\n                              // 确保网格卡片排布正常\n                              display: 'flex',\n                              flexWrap: 'wrap',\n                              ...styles.body,\n                          },\n                      }\n                    : {\n                          body: {\n                              // 确保网格卡片排布正常\n                              display: 'flex',\n                              flexWrap: 'wrap',\n                          },\n                          ...styles,\n                      }\n            }\n            classNames={classNames}\n            key={key}\n            actions={actions}\n            extra={\n                extra || (\n                    <a\n                        className={extraLink && extraLink.className}\n                        style={extraLink && extraLink.style}\n                        href={extraLink && extraLink.href}\n                        target={(extraLink && extraLink.target) || '_blank'}\n                    >\n                        {extraLink && extraLink.content}\n                    </a>\n                )\n            }\n            cover={\n                <img\n                    alt={coverImg && coverImg.alt}\n                    src={coverImg && coverImg.src}\n                    style={coverImg && coverImg.style}\n                    className={coverImg && coverImg.className}\n                />\n            }\n            variant={variant}\n            hoverable={hoverable}\n            size={size}\n            title={title}\n            onClick={(e) => setProps({ nClicks: nClicks + 1 })}\n            data-dash-is-loading={useLoading()}\n        >\n            {children}\n        </Card>\n    );\n};\n\nexport default AntdCard;\n\nAntdCard.defaultProps = defaultProps;\nAntdCard.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataDisplay/card/AntdCardGrid.react.js",
    "content": "// react核心\nimport React from 'react';\n// antd核心\nimport { Card } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { parseChildrenToArray, useLoading } from '../../../components/utils';\n// 自定义hooks\nimport useCss from '../../../hooks/useCss';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../../components/dataDisplay/card/AntdCardGrid.react';\n\n/**\n * 卡片网格组件AntdCardGrid\n */\nconst AntdCardGrid = (props) => {\n    let {\n        id,\n        children,\n        className,\n        style,\n        key,\n        hoverable,\n        nClicks,\n        setProps,\n        ...others\n    } = props;\n\n    children = parseChildrenToArray(children);\n\n    return (\n        <Card.Grid\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            hoverable={hoverable}\n            onClick={(e) => setProps({ nClicks: nClicks + 1 })}\n            data-dash-is-loading={useLoading()}\n        >\n            {children}\n        </Card.Grid>\n    );\n};\n\nexport default AntdCardGrid;\n\nAntdCardGrid.defaultProps = defaultProps;\nAntdCardGrid.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataDisplay/card/AntdCardMeta.react.js",
    "content": "// react核心\nimport React from 'react';\n// antd核心\nimport { Card } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../../../components/utils';\n// 自定义hooks\nimport useCss from '../../../hooks/useCss';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../../components/dataDisplay/card/AntdCardMeta.react';\n\nconst { Meta } = Card;\n\n/**\n * 结构化卡片组件AntdCardMeta\n */\nconst AntdCardMeta = (props) => {\n    const {\n        id,\n        className,\n        style,\n        key,\n        avatar,\n        description,\n        title,\n        setProps,\n        ...others\n    } = props;\n\n    return (\n        <Meta\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            avatar={avatar}\n            description={description}\n            title={title}\n            data-dash-is-loading={useLoading()}\n        ></Meta>\n    );\n};\n\nexport default AntdCardMeta;\n\nAntdCardMeta.defaultProps = defaultProps;\nAntdCardMeta.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataDisplay/descriptions/AntdDescriptionItem.react.js",
    "content": "// react核心\nimport React from 'react';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { parseChildrenToArray, useLoading } from '../../../components/utils';\n// 自定义hooks\nimport useCss from '../../../hooks/useCss';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../../components/dataDisplay/descriptions/AntdDescriptionItem.react';\n\n/**\n * 描述列表子项组件AntdDescriptionItem\n */\nconst AntdDescriptionItem = (props) => {\n    let {\n        id,\n        children,\n        className,\n        style,\n        styles,\n        classNames,\n        key,\n        label,\n        span,\n        setProps,\n        ...others\n    } = props;\n\n    children = parseChildrenToArray(children);\n\n    return (\n        <div\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            styles={styles}\n            classNames={classNames}\n            key={key}\n            label={label}\n            span={span}\n            data-dash-is-loading={useLoading()}\n        >\n            {children}\n        </div>\n    );\n};\n\nexport default AntdDescriptionItem;\n\nAntdDescriptionItem.defaultProps = defaultProps;\nAntdDescriptionItem.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataDisplay/descriptions/AntdDescriptions.react.js",
    "content": "// react核心\nimport React from 'react';\n// antd核心\nimport { Descriptions } from 'antd';\n// 辅助库\nimport { omit } from 'ramda';\nimport {\n    parseChildrenToArray,\n    resolveChildProps,\n    useLoading,\n} from '../../../components/utils';\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\n// 自定义hooks\nimport useCss from '../../../hooks/useCss';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../../components/dataDisplay/descriptions/AntdDescriptions.react';\n\n/**\n * 描述列表组件AntdDescriptions\n */\nconst AntdDescriptions = (props) => {\n    let {\n        id,\n        children,\n        className,\n        style,\n        styles,\n        classNames,\n        key,\n        items,\n        title,\n        column,\n        bordered,\n        size,\n        layout,\n        extra,\n        setProps,\n        ...others\n    } = props;\n\n    const size2size = new Map([\n        ['small', 'small'],\n        ['default', 'middle'],\n        ['large', 'default'],\n    ]);\n\n    if (items) {\n        return (\n            <Descriptions\n                // 提取具有data-*或aria-*通配格式的属性\n                {...pickBy(\n                    (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                    others\n                )}\n                id={id}\n                className={\n                    isString(className)\n                        ? className\n                        : className\n                          ? useCss(className)\n                          : undefined\n                }\n                style={style}\n                styles={styles}\n                classNames={classNames}\n                key={key}\n                title={title}\n                column={column}\n                bordered={bordered}\n                size={size2size.get(size)}\n                layout={layout}\n                extra={extra}\n                data-dash-is-loading={useLoading()}\n            >\n                {items.map((item, index) => (\n                    <Descriptions.Item key={index} {...item} />\n                ))}\n            </Descriptions>\n        );\n    }\n\n    children = parseChildrenToArray(children);\n\n    const descriptionItems = children.map((child) => {\n        const childProps = resolveChildProps(child);\n\n        const {\n            id,\n            className,\n            style,\n            styles,\n            classNames,\n            label,\n            span,\n            ...otherProps\n        } = childProps;\n\n        return (\n            <Descriptions.Item\n                id={id}\n                className={className}\n                style={style}\n                styles={styles}\n                classNames={classNames}\n                label={label}\n                span={span}\n                {...omit(\n                    [\n                        'setProps',\n                        'persistence',\n                        'persistence_type',\n                        'persisted_props',\n                    ],\n                    otherProps\n                )}\n            >\n                {child}\n            </Descriptions.Item>\n        );\n    });\n\n    return (\n        <Descriptions\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            styles={styles}\n            classNames={classNames}\n            key={key}\n            title={title}\n            column={column}\n            bordered={bordered}\n            size={size2size.get(size)}\n            layout={layout}\n            extra={extra}\n            data-dash-is-loading={useLoading()}\n        >\n            {descriptionItems}\n        </Descriptions>\n    );\n};\n\nexport default AntdDescriptions;\n\nAntdDescriptions.defaultProps = defaultProps;\nAntdDescriptions.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataEntry/AntdCalendar.react.js",
    "content": "// react核心\nimport React, { useEffect, useContext, useState } from 'react';\n// antd核心\nimport { Calendar, ConfigProvider } from 'antd';\n// 辅助库\nimport dayjs from 'dayjs';\nimport { str2Locale } from '../../components/locales.react';\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 上下文\nimport PropsContext from '../../contexts/PropsContext';\nimport FormContext from '../../contexts/FormContext';\n// 状态管理\nimport useFormStore from '../../store/formStore';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataEntry/AntdCalendar.react';\n\n/**\n * 日历组件AntdCalendar\n */\nconst AntdCalendar = (props) => {\n    let {\n        id,\n        className,\n        style,\n        key,\n        name,\n        enableBatchControl,\n        locale,\n        defaultValue,\n        value,\n        format,\n        size,\n        customCells,\n        setProps,\n        persistence,\n        persisted_props,\n        persistence_type,\n        ...others\n    } = props;\n\n    const [mode, setMode] = useState('month');\n\n    const context = useContext(PropsContext);\n    const formId = useContext(FormContext);\n\n    const updateItemValue = useFormStore((state) => state.updateItemValue);\n    const deleteItemValue = useFormStore((state) => state.deleteItemValue);\n\n    locale = (context && context.locale) || locale;\n\n    // 收集当前组件相关表单值\n    const currentFormValue = useFormStore(\n        (state) => state.values?.[formId]?.[name || id]\n    );\n\n    // 处理组件卸载后，对应表单项值的清除\n    useEffect(() => {\n        return () => {\n            // 若上文中存在有效表单id\n            if (formId && (name || id) && enableBatchControl) {\n                // 表单值更新\n                deleteItemValue(formId, name || id);\n            }\n        };\n    }, [name, id]);\n\n    useEffect(() => {\n        // 初始化value\n        if (defaultValue && !value) {\n            // 当defaultValue不为空且value为空时，为value初始化defaultValue对应的value值\n            setProps({ value: defaultValue });\n        }\n    }, []);\n\n    const onPanelChange = (newValue, _mode) => {\n        setMode(_mode);\n    };\n\n    const onSelect = (e, { source }) => {\n        // AntdForm表单批量控制\n        if (formId && (name || id) && enableBatchControl) {\n            // 表单值更新\n            updateItemValue(formId, name || id, e.format(format));\n        }\n        setProps({\n            value: e.format(format),\n        });\n        if (\n            (mode === 'month' && ['date', 'customize'].includes(source)) ||\n            (mode === 'year' && ['month', 'customize'].includes(source))\n        ) {\n            setProps({\n                cellClickEvent: {\n                    type: source,\n                    timestamp: new Date().getTime(),\n                },\n            });\n        }\n    };\n\n    return (\n        <ConfigProvider locale={str2Locale.get(locale)}>\n            <Calendar\n                // 提取具有data-*或aria-*通配格式的属性\n                {...pickBy(\n                    (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                    others\n                )}\n                id={id}\n                className={\n                    isString(className)\n                        ? className\n                        : className\n                          ? useCss(className)\n                          : undefined\n                }\n                style={style}\n                key={key}\n                defaultValue={\n                    formId && (name || id) && enableBatchControl\n                        ? undefined\n                        : defaultValue && dayjs(defaultValue, format)\n                }\n                value={\n                    formId && (name || id) && enableBatchControl\n                        ? currentFormValue && dayjs(currentFormValue, format)\n                        : value && dayjs(value, format)\n                }\n                onPanelChange={onPanelChange}\n                onSelect={onSelect}\n                fullscreen={size !== 'default'}\n                cellRender={\n                    customCells\n                        ? (current, info) => {\n                              // 尝试搜索命中项\n                              let matchCell;\n                              if (info.type === 'date') {\n                                  matchCell = customCells.filter((item) => {\n                                      // 初始化基础条件\n                                      let conditions = item.type === 'date';\n                                      // 若具有明确年份\n                                      if (item.year) {\n                                          conditions =\n                                              conditions &&\n                                              item.year === current.year();\n                                      }\n                                      // 若具有明确月份\n                                      if (item.month) {\n                                          conditions =\n                                              conditions &&\n                                              item.month ===\n                                                  current.month() + 1;\n                                      }\n                                      // 若具有明确日期\n                                      if (item.date) {\n                                          conditions =\n                                              conditions &&\n                                              item.date === current.date();\n                                      }\n                                      return conditions;\n                                  });\n                              } else if (info.type === 'month') {\n                                  matchCell = customCells.filter((item) => {\n                                      // 初始化基础条件\n                                      let conditions = item.type === 'month';\n                                      // 若具有明确年份\n                                      if (item.year) {\n                                          conditions =\n                                              conditions &&\n                                              item.year === current.year();\n                                      }\n                                      // 若具有明确月份\n                                      if (item.month) {\n                                          conditions =\n                                              conditions &&\n                                              item.month ===\n                                                  current.month() + 1;\n                                      }\n                                      return conditions;\n                                  });\n                              }\n                              if (matchCell.length > 0) {\n                                  return matchCell[0].content;\n                              }\n                              return info.type === 'month' ||\n                                  info.type === 'date'\n                                  ? null\n                                  : info.originNode;\n                          }\n                        : undefined\n                }\n                data-dash-is-loading={useLoading()}\n            />\n        </ConfigProvider>\n    );\n};\n\nexport default AntdCalendar;\n\nAntdCalendar.defaultProps = defaultProps;\nAntdCalendar.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataEntry/AntdCascader.react.js",
    "content": "// react核心\nimport React, { useEffect, useMemo, useContext } from 'react';\n// antd核心\nimport { Cascader, ConfigProvider } from 'antd';\n// 辅助库\nimport { str2Locale } from '../../components/locales.react';\nimport { isUndefined, isString, cloneDeep } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { flatToTree, useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 上下文\nimport PropsContext from '../../contexts/PropsContext';\nimport FormContext from '../../contexts/FormContext';\n// 状态管理\nimport useFormStore from '../../store/formStore';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataEntry/AntdCascader.react';\n\nconst { SHOW_CHILD, SHOW_PARENT } = Cascader;\n\nconst str2ShowCheckedStrategy = new Map([\n    ['show-child', SHOW_CHILD],\n    ['show-parent', SHOW_PARENT],\n]);\n\n// 递归替换originOptions中节点的label为optionsNodeKeyToLabel中对应的值\nconst replaceNodeLabel = (originOptions, optionsNodeKeyToLabel) => {\n    // 若当前originOptions为数组\n    if (Array.isArray(originOptions)) {\n        // 遍历originOptions\n        for (let i = 0; i < originOptions.length; i++) {\n            // 递归替换originOptions中节点的label为optionsNodeKeyToLabel中对应的值\n            originOptions[i] = replaceNodeLabel(\n                originOptions[i],\n                optionsNodeKeyToLabel\n            );\n        }\n    } else {\n        // 否则针对当前节点对象，当optionsNodeKeyToLabel中存在对应key时，替换label\n        if (optionsNodeKeyToLabel[originOptions.key]) {\n            originOptions.label = optionsNodeKeyToLabel[originOptions.key];\n        }\n        // 若当前节点对象存在children属性\n        if (originOptions.children) {\n            // 递归替换originOptions中节点的label为optionsNodeKeyToLabel中对应的值\n            originOptions.children = replaceNodeLabel(\n                originOptions.children,\n                optionsNodeKeyToLabel\n            );\n        }\n    }\n    // 返回处理后的originOptions\n    return originOptions;\n};\n\n/**\n * 级联选择组件AntdCascader\n */\nconst AntdCascader = (props) => {\n    let {\n        id,\n        style,\n        className,\n        popupClassName,\n        key,\n        name,\n        enableBatchControl,\n        locale,\n        options,\n        optionFilterProp,\n        panelMode,\n        optionsNodeKeyToLabel,\n        optionsMode,\n        changeOnSelect,\n        size,\n        bordered,\n        variant,\n        disabled,\n        placeholder,\n        defaultValue,\n        value,\n        placement,\n        maxTagCount,\n        multiple,\n        expandTrigger,\n        status,\n        allowClear,\n        autoFocus,\n        showCheckedStrategy,\n        popupContainer,\n        prefix,\n        suffixIcon,\n        readOnly,\n        setProps,\n        persistence,\n        persisted_props,\n        persistence_type,\n        batchPropsNames,\n        ...others\n    } = props;\n\n    // 批属性监听\n    useEffect(() => {\n        if (batchPropsNames && batchPropsNames.length !== 0) {\n            const _batchPropsValues = {};\n            for (const propName of batchPropsNames) {\n                _batchPropsValues[propName] = props[propName];\n            }\n            setProps({\n                batchPropsValues: _batchPropsValues,\n            });\n        }\n    });\n\n    const context = useContext(PropsContext);\n    const formId = useContext(FormContext);\n\n    const updateItemValue = useFormStore((state) => state.updateItemValue);\n    const deleteItemValue = useFormStore((state) => state.deleteItemValue);\n\n    locale = (context && context.locale) || locale;\n\n    // 收集当前组件相关表单值\n    const currentFormValue = useFormStore(\n        (state) => state.values?.[formId]?.[name || id]\n    );\n\n    // 处理组件卸载后，对应表单项值的清除\n    useEffect(() => {\n        return () => {\n            // 若上文中存在有效表单id\n            if (formId && (name || id) && enableBatchControl) {\n                // 表单值更新\n                deleteItemValue(formId, name || id);\n            }\n        };\n    }, [name, id]);\n\n    useEffect(() => {\n        if (defaultValue && !value) {\n            setProps({ value: defaultValue });\n        }\n    }, []);\n\n    const flatToTreeOptions = useMemo(() => {\n        return flatToTree(options);\n    }, [options]);\n\n    // 根据optionsMode对options进行预处理\n    if (optionsMode === 'flat') {\n        options = flatToTreeOptions;\n    }\n\n    // 搜索函数\n    const filter = (inputValue, path) => {\n        // 若以value字段为搜索目标\n        if (optionFilterProp === 'value') {\n            return path.some(\n                (option) =>\n                    option.value\n                        ?.toLowerCase()\n                        .indexOf(inputValue.toLowerCase()) > -1\n            );\n        }\n        return path.some(\n            (option) =>\n                option.label.toLowerCase().indexOf(inputValue.toLowerCase()) >\n                -1\n        );\n    };\n\n    const onSelect = (e) => {\n        // AntdForm表单批量控制\n        if (formId && (name || id) && enableBatchControl) {\n            // 表单值更新\n            updateItemValue(formId, name || id, e);\n        }\n        setProps({ value: e });\n    };\n\n    if (panelMode) {\n        return (\n            <ConfigProvider locale={str2Locale.get(locale)}>\n                <Cascader.Panel\n                    // 提取具有data-*或aria-*通配格式的属性\n                    {...pickBy(\n                        (_, k) =>\n                            k.startsWith('data-') || k.startsWith('aria-'),\n                        others\n                    )}\n                    id={id}\n                    className={\n                        isString(className)\n                            ? className\n                            : className\n                              ? useCss(className)\n                              : undefined\n                    }\n                    style={style}\n                    popupClassName={popupClassName}\n                    key={key}\n                    options={\n                        optionsNodeKeyToLabel\n                            ? replaceNodeLabel(\n                                  cloneDeep(options),\n                                  optionsNodeKeyToLabel\n                              )\n                            : options\n                    }\n                    changeOnSelect={changeOnSelect}\n                    size={\n                        context && !isUndefined(context.componentSize)\n                            ? context.componentSize\n                            : size\n                    }\n                    bordered={bordered}\n                    disabled={\n                        context && !isUndefined(context.componentDisabled)\n                            ? context.componentDisabled\n                            : disabled\n                    }\n                    placeholder={placeholder}\n                    defaultValue={\n                        formId && (name || id) && enableBatchControl\n                            ? undefined\n                            : defaultValue\n                    }\n                    value={\n                        formId && (name || id) && enableBatchControl\n                            ? currentFormValue\n                            : value\n                    }\n                    placement={placement}\n                    maxTagCount={maxTagCount}\n                    multiple={multiple}\n                    expandTrigger={expandTrigger}\n                    status={status}\n                    allowClear={isUndefined(readOnly) ? allowClear : !readOnly}\n                    autoFocus={autoFocus}\n                    showCheckedStrategy={\n                        str2ShowCheckedStrategy.get(showCheckedStrategy) ||\n                        undefined\n                    }\n                    displayRender={\n                        multiple || !showCheckedStrategy\n                            ? undefined\n                            : showCheckedStrategy === 'show-child'\n                              ? (label) => label[label.length - 1]\n                              : (label) => label[0]\n                    }\n                    showSearch={readOnly ? undefined : { filter }}\n                    onChange={readOnly ? undefined : onSelect}\n                    data-dash-is-loading={useLoading()}\n                    getPopupContainer={\n                        popupContainer === 'parent'\n                            ? (triggerNode) => triggerNode.parentNode\n                            : undefined\n                    }\n                    open={\n                        isUndefined(readOnly) || !readOnly ? undefined : false\n                    }\n                />\n            </ConfigProvider>\n        );\n    }\n    return (\n        <ConfigProvider locale={str2Locale.get(locale)}>\n            <Cascader\n                // 提取具有data-*或aria-*通配格式的属性\n                {...pickBy(\n                    (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                    others\n                )}\n                id={id}\n                className={\n                    isString(className)\n                        ? className\n                        : className\n                          ? useCss(className)\n                          : undefined\n                }\n                style={style}\n                popupClassName={popupClassName}\n                key={key}\n                options={\n                    optionsNodeKeyToLabel\n                        ? replaceNodeLabel(\n                              cloneDeep(options),\n                              optionsNodeKeyToLabel\n                          )\n                        : options\n                }\n                changeOnSelect={changeOnSelect}\n                size={\n                    context && !isUndefined(context.componentSize)\n                        ? context.componentSize\n                        : size\n                }\n                variant={\n                    !variant ? (bordered ? 'outlined' : 'borderless') : variant\n                }\n                disabled={\n                    context && !isUndefined(context.componentDisabled)\n                        ? context.componentDisabled\n                        : disabled\n                }\n                placeholder={placeholder}\n                defaultValue={\n                    formId && (name || id) && enableBatchControl\n                        ? undefined\n                        : defaultValue\n                }\n                value={\n                    formId && (name || id) && enableBatchControl\n                        ? currentFormValue\n                        : value\n                }\n                placement={placement}\n                maxTagCount={maxTagCount}\n                multiple={multiple}\n                expandTrigger={expandTrigger}\n                status={status}\n                allowClear={isUndefined(readOnly) ? allowClear : !readOnly}\n                autoFocus={autoFocus}\n                showCheckedStrategy={\n                    str2ShowCheckedStrategy.get(showCheckedStrategy) ||\n                    undefined\n                }\n                displayRender={\n                    multiple || !showCheckedStrategy\n                        ? undefined\n                        : showCheckedStrategy === 'show-child'\n                          ? (label) => label[label.length - 1]\n                          : (label) => label[0]\n                }\n                prefix={prefix}\n                suffixIcon={suffixIcon}\n                showSearch={readOnly ? undefined : { filter }}\n                onChange={readOnly ? undefined : onSelect}\n                data-dash-is-loading={useLoading()}\n                getPopupContainer={\n                    popupContainer === 'parent'\n                        ? (triggerNode) => triggerNode.parentNode\n                        : undefined\n                }\n                open={isUndefined(readOnly) || !readOnly ? undefined : false}\n            />\n        </ConfigProvider>\n    );\n};\n\nexport default AntdCascader;\n\nAntdCascader.defaultProps = defaultProps;\nAntdCascader.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataEntry/AntdCheckbox.react.js",
    "content": "// react核心\nimport React, { useContext, useEffect } from 'react';\n// antd核心\nimport { Checkbox } from 'antd';\n// 辅助库\nimport { isString, isUndefined } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 上下文\nimport PropsContext from '../../contexts/PropsContext';\nimport FormContext from '../../contexts/FormContext';\n// 状态管理\nimport useFormStore from '../../store/formStore';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataEntry/AntdCheckbox.react';\n\n/**\n * 选择框组件AntdCheckbox\n */\nconst AntdCheckbox = (props) => {\n    const {\n        id,\n        style,\n        className,\n        key,\n        name,\n        enableBatchControl,\n        label,\n        disabled,\n        autoFocus,\n        checked,\n        indeterminate,\n        readOnly,\n        setProps,\n        persistence,\n        persisted_props,\n        persistence_type,\n        batchPropsNames,\n        ...others\n    } = props;\n\n    // 批属性监听\n    useEffect(() => {\n        if (batchPropsNames && batchPropsNames.length !== 0) {\n            const _batchPropsValues = {};\n            for (const propName of batchPropsNames) {\n                _batchPropsValues[propName] = props[propName];\n            }\n            setProps({\n                batchPropsValues: _batchPropsValues,\n            });\n        }\n    });\n\n    const context = useContext(PropsContext);\n    const formId = useContext(FormContext);\n    const updateItemValue = useFormStore((state) => state.updateItemValue);\n    const deleteItemValue = useFormStore((state) => state.deleteItemValue);\n\n    // 收集当前组件相关表单值\n    const currentFormValue = useFormStore(\n        (state) => state.values?.[formId]?.[name || id]\n    );\n\n    // 处理组件卸载后，对应表单项值的清除\n    useEffect(() => {\n        return () => {\n            // 若上文中存在有效表单id\n            if (formId && (name || id) && enableBatchControl) {\n                // 表单值更新\n                deleteItemValue(formId, name || id);\n            }\n        };\n    }, [name, id]);\n\n    const onChange = (e) => {\n        if (!readOnly) {\n            // AntdForm表单批量控制\n            if (formId && (name || id) && enableBatchControl) {\n                // 表单值更新\n                updateItemValue(formId, name || id, e.target.checked);\n            }\n            setProps({ checked: e.target.checked });\n        }\n    };\n\n    return (\n        <Checkbox\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            onChange={onChange}\n            disabled={\n                context && !isUndefined(context.componentDisabled)\n                    ? context.componentDisabled\n                    : disabled\n            }\n            autoFocus={autoFocus}\n            checked={\n                formId && (name || id) && enableBatchControl\n                    ? currentFormValue\n                    : checked\n            }\n            indeterminate={indeterminate}\n            data-dash-is-loading={useLoading()}\n        >\n            {label}\n        </Checkbox>\n    );\n};\n\nexport default AntdCheckbox;\n\nAntdCheckbox.defaultProps = defaultProps;\nAntdCheckbox.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataEntry/AntdCheckboxGroup.react.js",
    "content": "// react核心\nimport React, { useContext, useEffect } from 'react';\n// antd核心\nimport { Checkbox } from 'antd';\n// 辅助库\nimport { isString, isNumber, isUndefined } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 上下文\nimport PropsContext from '../../contexts/PropsContext';\nimport FormContext from '../../contexts/FormContext';\n// 状态管理\nimport useFormStore from '../../store/formStore';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataEntry/AntdCheckboxGroup.react';\n\n/**\n * 组合选择框组件AntdCheckboxGroup\n */\nconst AntdCheckboxGroup = (props) => {\n    const {\n        id,\n        style,\n        className,\n        key,\n        name,\n        enableBatchControl,\n        options,\n        value,\n        disabled,\n        readOnly,\n        setProps,\n        persistence,\n        persisted_props,\n        persistence_type,\n        batchPropsNames,\n        ...others\n    } = props;\n\n    // 批属性监听\n    useEffect(() => {\n        if (batchPropsNames && batchPropsNames.length !== 0) {\n            const _batchPropsValues = {};\n            for (const propName of batchPropsNames) {\n                _batchPropsValues[propName] = props[propName];\n            }\n            setProps({\n                batchPropsValues: _batchPropsValues,\n            });\n        }\n    });\n\n    const context = useContext(PropsContext);\n    const formId = useContext(FormContext);\n\n    const updateItemValue = useFormStore((state) => state.updateItemValue);\n    const deleteItemValue = useFormStore((state) => state.deleteItemValue);\n\n    // 收集当前组件相关表单值\n    const currentFormValue = useFormStore(\n        (state) => state.values?.[formId]?.[name || id]\n    );\n\n    // 处理组件卸载后，对应表单项值的清除\n    useEffect(() => {\n        return () => {\n            // 若上文中存在有效表单id\n            if (formId && (name || id) && enableBatchControl) {\n                // 表单值更新\n                deleteItemValue(formId, name || id);\n            }\n        };\n    }, [name, id]);\n\n    const onChange = (e) => {\n        if (!readOnly) {\n            // AntdForm表单批量控制\n            if (formId && (name || id) && enableBatchControl) {\n                // 表单值更新\n                updateItemValue(formId, name || id, e);\n            }\n            setProps({ value: e });\n        }\n    };\n\n    return (\n        <Checkbox.Group\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            options={\n                options.every((item) => isNumber(item) || isString(item))\n                    ? // 快捷方式\n                      options.map((item) => ({ label: item, value: item }))\n                    : options\n            }\n            value={\n                formId && (name || id) && enableBatchControl\n                    ? currentFormValue\n                    : value\n            }\n            disabled={\n                context && !isUndefined(context.componentDisabled)\n                    ? context.componentDisabled\n                    : disabled\n            }\n            onChange={onChange}\n            data-dash-is-loading={useLoading()}\n        />\n    );\n};\n\nexport default AntdCheckboxGroup;\n\nAntdCheckboxGroup.defaultProps = defaultProps;\nAntdCheckboxGroup.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataEntry/AntdColorPicker.react.js",
    "content": "// react核心\nimport React, { useEffect, useContext, useMemo, useState } from 'react';\n// antd核心\nimport { ColorPicker, ConfigProvider } from 'antd';\nimport { Color } from '@rc-component/color-picker';\n// 辅助库\nimport { has, isArray, isString, isUndefined } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { str2Locale } from '../../components/locales.react';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 上下文\nimport PropsContext from '../../contexts/PropsContext';\nimport FormContext from '../../contexts/FormContext';\n// 状态管理\nimport useFormStore from '../../store/formStore';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataEntry/AntdColorPicker.react';\n\n/**\n * 颜色选择器组件AntdColorPicker\n */\nconst AntdColorPicker = (props) => {\n    let {\n        id,\n        className,\n        style,\n        key,\n        locale,\n        name,\n        enableBatchControl,\n        allowClear,\n        arrow,\n        defaultValue,\n        value,\n        format,\n        mode,\n        disabled,\n        disabledAlpha,\n        open,\n        presets,\n        placement,\n        showText,\n        size,\n        trigger,\n        setProps,\n        ...others\n    } = props;\n\n    const parseLinearGradient = (gradient) => {\n        const matches = gradient.match(/\\brgb\\([^)]*\\)\\s*(\\d+%?)/g);\n        if (!matches) {\n            return [];\n        }\n\n        // 处理匹配项，确保每个颜色后面都有百分比\n        const colors = [];\n        let lastPercent = 0;\n        matches.forEach((match, index) => {\n            const [color, percentStr] = match.split(/\\s+/);\n            let percent = parseInt(percentStr.replace('%', ''), 10);\n\n            // 如果百分比缺失，使用上一个百分比或100%（如果是最后一个元素）\n            if (isNaN(percent)) {\n                percent = index === matches.length - 1 ? 100 : lastPercent;\n            }\n\n            // 更新最后使用的百分比\n            lastPercent = percent;\n\n            // 添加到结果数组中\n            colors.push({ color: color, percent: percent });\n        });\n\n        return colors;\n    };\n\n    const parseValue = (parseString) => {\n        return parseString?.startsWith('linear-gradient')\n            ? parseLinearGradient(parseString)\n            : parseString?.toLowerCase();\n    };\n\n    const [formatColor, setFormatColor] = useState({});\n\n    const context = useContext(PropsContext);\n    locale = (context && context.locale) || locale;\n\n    const formId = useContext(FormContext);\n\n    const updateItemValue = useFormStore((state) => state.updateItemValue);\n    const deleteItemValue = useFormStore((state) => state.deleteItemValue);\n\n    // 收集当前组件相关表单值\n    const currentFormValue = useFormStore(\n        (state) => state.values?.[formId]?.[name || id]\n    );\n\n    const _defaultValue = useMemo(() => {\n        return defaultValue\n            ? defaultValue\n            : mode === 'gradient'\n              ? 'linear-gradient(90deg, rgb(22,119,255) 0%, rgb(22,119,255) 100%)'\n              : '#1677ff';\n    }, []);\n\n    useEffect(() => {\n        // 初始化value\n        if (_defaultValue && !value) {\n            // 当_defaultValue不为空且value为空时，为value初始化_defaultValue对应的value值\n            setProps({\n                value: _defaultValue,\n            });\n        }\n        const _value = parseValue(_defaultValue || value);\n        let color;\n        if (isArray(_value)) {\n            color = _value[0].color;\n        } else {\n            color = _value;\n        }\n        const _color = new Color(color);\n        setFormatColor({\n            hex: _color.toHexString()?.toLowerCase(),\n            rgb: _color.toRgbString()?.toLowerCase(),\n            hsb: _color.toHsbString()?.toLowerCase(),\n        });\n    }, []);\n\n    // 处理组件卸载后，对应表单项值的清除\n    useEffect(() => {\n        return () => {\n            // 若上文中存在有效表单id\n            if (formId && (name || id) && enableBatchControl) {\n                // 表单值更新\n                deleteItemValue(formId, name || id);\n            }\n        };\n    }, [name, id]);\n\n    // 每次format发生变更时，同步更新value值\n    const onFormatChange = (_format) => {\n        setProps({ format: _format });\n        if (value) {\n            setProps({\n                value:\n                    _format === 'hex'\n                        ? formatColor.hex\n                        : _format === 'rgb'\n                          ? formatColor.rgb\n                          : formatColor.hsb,\n            });\n        }\n    };\n\n    return (\n        <ConfigProvider\n            locale={locale !== 'en-us' ? str2Locale.get(locale) : undefined}\n        >\n            <ColorPicker\n                // 提取具有data-*或aria-*通配格式的属性\n                {...pickBy(\n                    (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                    others\n                )}\n                id={id}\n                className={\n                    isString(className)\n                        ? className\n                        : className\n                          ? useCss(className)\n                          : undefined\n                }\n                style={style}\n                key={key}\n                allowClear={allowClear}\n                arrow={arrow}\n                defaultValue={parseValue(_defaultValue)}\n                value={\n                    formId && (name || id) && enableBatchControl\n                        ? parseValue(currentFormValue)\n                        : parseValue(value)\n                }\n                format={format}\n                mode={mode}\n                disabled={\n                    context && !isUndefined(context.componentDisabled)\n                        ? context.componentDisabled\n                        : disabled\n                }\n                disabledAlpha={disabledAlpha}\n                open={open}\n                presets={presets}\n                placement={placement}\n                showText={showText}\n                size={size}\n                trigger={trigger}\n                onFormatChange={onFormatChange}\n                onOpenChange={(e) => setProps({ open: e })}\n                onChange={(e) => {\n                    // AntdForm表单批量控制\n                    if (formId && (name || id) && enableBatchControl) {\n                        // 表单值更新\n                        updateItemValue(\n                            formId,\n                            name || id,\n                            (has(e, 'colors')\n                                ? e.toCssString()\n                                : format === 'hex'\n                                  ? e.toHexString()\n                                  : format === 'rgb'\n                                    ? e.toRgbString()\n                                    : e.toHsbString()\n                            )?.toLowerCase()\n                        );\n                    }\n                    setProps({\n                        value: (has(e, 'colors')\n                            ? e.toCssString()\n                            : format === 'hex'\n                              ? e.toHexString()\n                              : format === 'rgb'\n                                ? e.toRgbString()\n                                : e.toHsbString()\n                        )?.toLowerCase(),\n                    });\n                    setFormatColor({\n                        hex: e.toHexString()?.toLowerCase(),\n                        rgb: e.toRgbString()?.toLowerCase(),\n                        hsb: e.toHsbString()?.toLowerCase(),\n                    });\n                }}\n                onClear={() => {\n                    // AntdForm表单批量控制\n                    if (formId && (name || id) && enableBatchControl) {\n                        // 表单值更新\n                        updateItemValue(formId, name || id, null);\n                    }\n                    setProps({ value: null });\n                }}\n                data-dash-is-loading={useLoading()}\n            />\n        </ConfigProvider>\n    );\n};\n\nexport default AntdColorPicker;\n\nAntdColorPicker.defaultProps = defaultProps;\nAntdColorPicker.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataEntry/AntdDatePicker.react.js",
    "content": "// react核心\nimport React, { useState, useEffect, useContext } from 'react';\n// antd核心\nimport { DatePicker, ConfigProvider } from 'antd';\n// 辅助库\nimport dayjs from 'dayjs';\nimport isoWeek from 'dayjs/plugin/isoWeek';\nimport advancedFormat from 'dayjs/plugin/advancedFormat';\nimport isSameOrAfter from 'dayjs/plugin/isSameOrAfter';\nimport isSameOrBefore from 'dayjs/plugin/isSameOrBefore';\nimport { isString, isUndefined, isObject } from 'lodash';\nimport { pickBy } from 'ramda';\nimport 'dayjs/locale/zh-cn';\nimport { str2Locale } from '../../components/locales.react';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 上下文\nimport PropsContext from '../../contexts/PropsContext';\nimport FormContext from '../../contexts/FormContext';\n// 状态管理\nimport useFormStore from '../../store/formStore';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataEntry/AntdDatePicker.react';\n\n// 调用dayjs额外插件模块\ndayjs.extend(isoWeek);\ndayjs.extend(advancedFormat);\ndayjs.extend(isSameOrAfter);\ndayjs.extend(isSameOrBefore);\n\n/**\n * 日期选择组件AntdDatePicker\n */\nconst AntdDatePicker = (props) => {\n    let {\n        id,\n        className,\n        style,\n        popupClassName,\n        key,\n        name,\n        enableBatchControl,\n        locale,\n        setProps,\n        picker,\n        format,\n        firstDayOfWeek,\n        disabled,\n        showTime,\n        allowClear,\n        autoFocus,\n        placeholder,\n        disabledDatesStrategy,\n        pickerValue,\n        value,\n        defaultValue,\n        bordered,\n        variant,\n        size,\n        status,\n        popupContainer,\n        readOnly,\n        placement,\n        extraFooter,\n        showToday,\n        presets,\n        customCells,\n        prefix,\n        suffixIcon,\n        persistence,\n        persisted_props,\n        persistence_type,\n        batchPropsNames,\n        needConfirm,\n        ...others\n    } = props;\n\n    const [rawValue, setRawValue] = useState(null);\n\n    // 解决value经回调更新后，rawValue未更新的问题\n    useEffect(() => {\n        if (formId && (name || id) && enableBatchControl) {\n            if (currentFormValue) {\n                setRawValue(dayjs(currentFormValue, format));\n            } else {\n                setRawValue(null);\n            }\n        } else {\n            if (value) {\n                setRawValue(dayjs(value, format));\n            } else {\n                setRawValue(null);\n            }\n        }\n    }, [value, currentFormValue]);\n\n    // 批属性监听\n    useEffect(() => {\n        if (batchPropsNames && batchPropsNames.length !== 0) {\n            const _batchPropsValues = {};\n            for (const propName of batchPropsNames) {\n                _batchPropsValues[propName] = props[propName];\n            }\n            setProps({\n                batchPropsValues: _batchPropsValues,\n            });\n        }\n    });\n\n    const context = useContext(PropsContext);\n    const formId = useContext(FormContext);\n\n    const updateItemValue = useFormStore((state) => state.updateItemValue);\n    const deleteItemValue = useFormStore((state) => state.deleteItemValue);\n\n    locale = (context && context.locale) || locale;\n\n    // 收集当前组件相关表单值\n    const currentFormValue = useFormStore(\n        (state) => state.values?.[formId]?.[name || id]\n    );\n\n    // 处理组件卸载后，对应表单项值的清除\n    useEffect(() => {\n        return () => {\n            // 若上文中存在有效表单id\n            if (formId && (name || id) && enableBatchControl) {\n                // 表单值更新\n                deleteItemValue(formId, name || id);\n            }\n        };\n    }, [name, id]);\n\n    useEffect(() => {\n        // 初始化value\n        if (defaultValue && !value) {\n            // 当defaultValue不为空且value为空时，为value初始化defaultValue对应值\n            setProps({ value: defaultValue });\n        }\n\n        // 调整不同showTime下的format缺省参数\n        if (showTime && !format) {\n            setProps({\n                format: 'YYYY-MM-DD HH:mm:ss',\n            });\n        } else if (!showTime && !format) {\n            setProps({\n                format: 'YYYY-MM-DD',\n            });\n        }\n\n        // 处理pickerValue缺省赋值\n        if (!pickerValue) {\n            setProps({\n                pickerValue: dayjs(new Date()).format(\n                    format || (showTime ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD')\n                ),\n            });\n        }\n    }, []);\n\n    useEffect(() => {\n        if (!isUndefined(firstDayOfWeek)) {\n            dayjs.locale(locale === 'en-us' ? 'en' : locale, {\n                week: {\n                    dow: firstDayOfWeek,\n                },\n            });\n        }\n    }, [firstDayOfWeek]);\n\n    const onChange = (date, dateString) => {\n        if (isString(dateString)) {\n            // AntdForm表单批量控制\n            if (formId && (name || id) && enableBatchControl) {\n                // 表单值更新\n                updateItemValue(formId, name || id, dateString);\n            }\n            // 更新rawValue\n            setRawValue(date);\n            setProps({ value: dateString });\n        }\n    };\n\n    const checkDisabledDate = (current) => {\n        // 根据disabledDatesStrategy设定的各个子条件进行是否禁用判断\n        for (let i = 0; i < disabledDatesStrategy.length; i++) {\n            const strategy = disabledDatesStrategy[i];\n            // 判断当前子策略方式\n            if (strategy.mode === 'eq') {\n                // 判断当前子策略约束目标\n                if (strategy.target === 'day') {\n                    if (current.date() === strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'month') {\n                    if (current.month() === strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'quarter') {\n                    if (current.quarter() === strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'year') {\n                    if (current.year() === strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'dayOfYear') {\n                    if (current.dayOfYear() === strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'dayOfWeek') {\n                    if (current.isoWeekday() === strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'specific-date') {\n                    if (current.isSame(dayjs(strategy.value, 'YYYY-MM-DD'))) {\n                        return true;\n                    }\n                }\n            } else if (strategy.mode === 'ne') {\n                // 判断当前子策略约束目标\n                if (strategy.target === 'day') {\n                    if (current.date() !== strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'month') {\n                    if (current.month() !== strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'quarter') {\n                    if (current.quarter() !== strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'year') {\n                    if (current.year() !== strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'dayOfYear') {\n                    if (current.dayOfYear() !== strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'dayOfWeek') {\n                    if (current.isoWeekday() !== strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'specific-date') {\n                    if (!current.isSame(dayjs(strategy.value, 'YYYY-MM-DD'))) {\n                        return true;\n                    }\n                }\n            } else if (strategy.mode === 'le') {\n                // 判断当前子策略约束目标\n                if (strategy.target === 'day') {\n                    if (current.date() <= strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'month') {\n                    if (current.month() <= strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'quarter') {\n                    if (current.quarter() <= strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'year') {\n                    if (current.year() <= strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'dayOfYear') {\n                    if (current.dayOfYear() <= strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'dayOfWeek') {\n                    if (current.isoWeekday() <= strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'specific-date') {\n                    if (\n                        current.isSameOrBefore(\n                            dayjs(strategy.value, 'YYYY-MM-DD')\n                        )\n                    ) {\n                        return true;\n                    }\n                }\n            } else if (strategy.mode === 'lt') {\n                // 判断当前子策略约束目标\n                if (strategy.target === 'day') {\n                    if (current.date() < strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'month') {\n                    if (current.month() < strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'quarter') {\n                    if (current.quarter() < strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'year') {\n                    if (current.year() < strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'dayOfYear') {\n                    if (current.dayOfYear() < strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'dayOfWeek') {\n                    if (current.isoWeekday() < strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'specific-date') {\n                    if (current.isBefore(dayjs(strategy.value, 'YYYY-MM-DD'))) {\n                        return true;\n                    }\n                }\n            } else if (strategy.mode === 'ge') {\n                // 判断当前子策略约束目标\n                if (strategy.target === 'day') {\n                    if (current.date() >= strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'month') {\n                    if (current.month() >= strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'quarter') {\n                    if (current.quarter() >= strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'year') {\n                    if (current.year() >= strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'dayOfYear') {\n                    if (current.dayOfYear() >= strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'dayOfWeek') {\n                    if (current.isoWeekday() >= strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'specific-date') {\n                    if (\n                        current.isSameOrAfter(\n                            dayjs(strategy.value, 'YYYY-MM-DD')\n                        )\n                    ) {\n                        return true;\n                    }\n                }\n            } else if (strategy.mode === 'gt') {\n                // 判断当前子策略约束目标\n                if (strategy.target === 'day') {\n                    if (current.date() > strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'month') {\n                    if (current.month() > strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'quarter') {\n                    if (current.quarter() > strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'year') {\n                    if (current.year() > strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'dayOfYear') {\n                    if (current.dayOfYear() > strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'dayOfWeek') {\n                    if (current.isoWeekday() > strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'specific-date') {\n                    if (current.isAfter(dayjs(strategy.value, 'YYYY-MM-DD'))) {\n                        return true;\n                    }\n                }\n            } else if (strategy.mode === 'in') {\n                // 判断当前子策略约束目标\n                if (strategy.target === 'day') {\n                    if (strategy.value.includes(current.date())) {\n                        return true;\n                    }\n                } else if (strategy.target === 'month') {\n                    if (strategy.value.includes(current.month())) {\n                        return true;\n                    }\n                } else if (strategy.target === 'quarter') {\n                    if (strategy.value.includes(current.quarter())) {\n                        return true;\n                    }\n                } else if (strategy.target === 'year') {\n                    if (strategy.value.includes(current.year())) {\n                        return true;\n                    }\n                } else if (strategy.target === 'dayOfYear') {\n                    if (strategy.value.includes(current.dayOfYear())) {\n                        return true;\n                    }\n                } else if (strategy.target === 'dayOfWeek') {\n                    if (strategy.value.includes(current.isoWeekday())) {\n                        return true;\n                    }\n                }\n            } else if (strategy.mode === 'not-in') {\n                // 判断当前子策略约束目标\n                if (strategy.target === 'day') {\n                    if (!strategy.value.includes(current.date())) {\n                        return true;\n                    }\n                } else if (strategy.target === 'month') {\n                    if (!strategy.value.includes(current.month())) {\n                        return true;\n                    }\n                } else if (strategy.target === 'quarter') {\n                    if (!strategy.value.includes(current.quarter())) {\n                        return true;\n                    }\n                } else if (strategy.target === 'year') {\n                    if (!strategy.value.includes(current.year())) {\n                        return true;\n                    }\n                } else if (strategy.target === 'dayOfYear') {\n                    if (!strategy.value.includes(current.dayOfYear())) {\n                        return true;\n                    }\n                } else if (strategy.target === 'dayOfWeek') {\n                    if (!strategy.value.includes(current.isoWeekday())) {\n                        return true;\n                    }\n                }\n            } else if (strategy.mode === 'in-enumerate-dates') {\n                if (strategy.value.includes(current.format(format))) {\n                    return true;\n                }\n            } else if (strategy.mode === 'not-in-enumerate-dates') {\n                if (!strategy.value.includes(current.format(format))) {\n                    return true;\n                }\n            }\n        }\n    };\n\n    return (\n        <div>\n            <ConfigProvider locale={str2Locale.get(locale)}>\n                <DatePicker\n                    // 提取具有data-*或aria-*通配格式的属性\n                    {...pickBy(\n                        (_, k) =>\n                            k.startsWith('data-') || k.startsWith('aria-'),\n                        others\n                    )}\n                    id={id}\n                    className={\n                        isString(className)\n                            ? className\n                            : className\n                              ? useCss(className)\n                              : undefined\n                    }\n                    style={style}\n                    popupClassName={popupClassName}\n                    key={key}\n                    format={format}\n                    onChange={onChange}\n                    onPanelChange={(v, m) => {\n                        setProps({\n                            pickerValue: v.format(format),\n                        });\n                    }}\n                    picker={picker}\n                    calendarStartDay={firstDayOfWeek}\n                    disabled={\n                        context && !isUndefined(context.componentDisabled)\n                            ? context.componentDisabled\n                            : disabled\n                    }\n                    placeholder={placeholder}\n                    variant={\n                        !variant\n                            ? bordered\n                                ? 'outlined'\n                                : 'borderless'\n                            : variant\n                    }\n                    size={\n                        context && !isUndefined(context.componentSize)\n                            ? context.componentSize\n                            : size\n                    }\n                    disabledDate={\n                        disabledDatesStrategy ? checkDisabledDate : undefined\n                    }\n                    pickerValue={pickerValue && dayjs(pickerValue, format)}\n                    value={\n                        formId && (name || id) && enableBatchControl\n                            ? currentFormValue\n                                ? dayjs(currentFormValue, format)\n                                : undefined\n                            : rawValue ||\n                              (value ? dayjs(value, format) : undefined)\n                    }\n                    defaultValue={\n                        formId && (name || id) && enableBatchControl\n                            ? undefined\n                            : defaultValue\n                              ? dayjs(defaultValue, format)\n                              : undefined\n                    }\n                    showTime={\n                        // 处理时间选择面板在日期选定后的默认选中值\n                        isObject(showTime) && showTime.defaultValue\n                            ? {\n                                  defaultValue: dayjs(\n                                      dayjs(new Date()).format('YYYY-MM-DD') +\n                                          ' ' +\n                                          showTime.defaultValue,\n                                      'YYYY-MM-DD' +\n                                          ' ' +\n                                          (showTime.format || 'HH:mm:ss')\n                                  ),\n                              }\n                            : showTime\n                    }\n                    allowClear={isUndefined(readOnly) ? allowClear : !readOnly}\n                    autoFocus={autoFocus}\n                    status={status}\n                    placement={placement}\n                    open={\n                        isUndefined(readOnly) || !readOnly ? undefined : false\n                    }\n                    inputReadOnly={readOnly}\n                    renderExtraFooter={() => extraFooter}\n                    showNow={showToday}\n                    needConfirm={needConfirm}\n                    presets={\n                        // 处理预设快捷选项列表\n                        (presets || []).map((preset) => ({\n                            label: preset.label,\n                            value: () => {\n                                return dayjs(preset.value, format);\n                            },\n                        }))\n                    }\n                    cellRender={\n                        customCells\n                            ? (current, info) => {\n                                  // 尝试搜索命中项\n                                  let matchCell;\n                                  // 目前仅作用于日期类型\n                                  if (info.type === 'date') {\n                                      matchCell = customCells.filter((item) => {\n                                          // 初始化基础条件\n                                          let conditions = true;\n                                          // 若具有明确年份\n                                          if (item.year) {\n                                              conditions =\n                                                  conditions &&\n                                                  current.year() === item.year;\n                                          }\n                                          // 若具有明确月份\n                                          if (item.month) {\n                                              conditions =\n                                                  conditions &&\n                                                  current.month() + 1 ===\n                                                      item.month;\n                                          }\n                                          // 若具有明确日期\n                                          if (item.date) {\n                                              conditions =\n                                                  conditions &&\n                                                  current.date() === item.date;\n                                          }\n                                          return conditions;\n                                      });\n                                  }\n                                  if (matchCell.length > 0) {\n                                      return (\n                                          <div\n                                              className={\n                                                  matchCell[0].className\n                                                      ? `ant-picker-cell-inner ${matchCell[0].className}`\n                                                      : 'ant-picker-cell-inner'\n                                              }\n                                              style={matchCell[0].style}\n                                          >\n                                              {current.date()}\n                                          </div>\n                                      );\n                                  }\n                                  return info.originNode;\n                              }\n                            : undefined\n                    }\n                    prefix={prefix}\n                    suffixIcon={suffixIcon}\n                    data-dash-is-loading={useLoading()}\n                    getPopupContainer={\n                        popupContainer === 'parent'\n                            ? (triggerNode) => triggerNode.parentNode\n                            : undefined\n                    }\n                />\n            </ConfigProvider>\n        </div>\n    );\n};\n\nexport default AntdDatePicker;\n\nAntdDatePicker.defaultProps = defaultProps;\nAntdDatePicker.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataEntry/AntdDateRangePicker.react.js",
    "content": "// react核心\nimport React, { useState, useEffect, useContext } from 'react';\n// antd核心\nimport { DatePicker, ConfigProvider } from 'antd';\n// 辅助库\nimport dayjs from 'dayjs';\nimport isoWeek from 'dayjs/plugin/isoWeek';\nimport advancedFormat from 'dayjs/plugin/advancedFormat';\nimport isSameOrAfter from 'dayjs/plugin/isSameOrAfter';\nimport isSameOrBefore from 'dayjs/plugin/isSameOrBefore';\nimport 'dayjs/locale/zh-cn';\nimport { isString, isUndefined, isObject } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { str2Locale } from '../../components/locales.react';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 上下文\nimport PropsContext from '../../contexts/PropsContext';\nimport FormContext from '../../contexts/FormContext';\n// 状态管理\nimport useFormStore from '../../store/formStore';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataEntry/AntdDateRangePicker.react';\n\nconst { RangePicker } = DatePicker;\n\n// 调用dayjs额外插件模块\ndayjs.extend(isoWeek);\ndayjs.extend(advancedFormat);\ndayjs.extend(isSameOrAfter);\ndayjs.extend(isSameOrBefore);\n\n/**\n * 日期范围选择组件AntdDateRangePicker\n */\nconst AntdDateRangePicker = (props) => {\n    let {\n        id,\n        className,\n        style,\n        popupClassName,\n        key,\n        name,\n        enableBatchControl,\n        locale,\n        setProps,\n        picker,\n        firstDayOfWeek,\n        format,\n        showTime,\n        allowClear,\n        autoFocus,\n        value,\n        disabledDatesStrategy,\n        open,\n        defaultValue,\n        placeholder,\n        disabled,\n        bordered,\n        variant,\n        size,\n        pickerValue,\n        status,\n        popupContainer,\n        readOnly,\n        placement,\n        extraFooter,\n        presets,\n        customCells,\n        prefix,\n        suffixIcon,\n        persistence,\n        persisted_props,\n        persistence_type,\n        batchPropsNames,\n        needConfirm,\n        ...others\n    } = props;\n\n    const [rawValue, setRawValue] = useState(null);\n\n    // 解决value经回调更新后，rawValue未更新的问题\n    useEffect(() => {\n        if (formId && (name || id) && enableBatchControl) {\n            if (currentFormValue) {\n                setRawValue([\n                    dayjs(currentFormValue[0], format),\n                    dayjs(currentFormValue[1], format),\n                ]);\n            } else {\n                setRawValue(null);\n            }\n        } else {\n            // 若value新赋值有效\n            if (value && value.length > 0 && value.every((v) => v)) {\n                setRawValue([dayjs(value[0], format), dayjs(value[1], format)]);\n            } else {\n                setRawValue(null);\n            }\n        }\n    }, [value, currentFormValue]);\n\n    // 批属性监听\n    useEffect(() => {\n        if (batchPropsNames && batchPropsNames.length !== 0) {\n            const _batchPropsValues = {};\n            for (const propName of batchPropsNames) {\n                _batchPropsValues[propName] = props[propName];\n            }\n            setProps({\n                batchPropsValues: _batchPropsValues,\n            });\n        }\n    });\n\n    const context = useContext(PropsContext);\n    const formId = useContext(FormContext);\n\n    const updateItemValue = useFormStore((state) => state.updateItemValue);\n    const deleteItemValue = useFormStore((state) => state.deleteItemValue);\n\n    locale = (context && context.locale) || locale;\n\n    // 收集当前组件相关表单值\n    const currentFormValue = useFormStore(\n        (state) => state.values?.[formId]?.[name || id]\n    );\n\n    // 处理组件卸载后，对应表单项值的清除\n    useEffect(() => {\n        return () => {\n            // 若上文中存在有效表单id\n            if (formId && (name || id) && enableBatchControl) {\n                // 表单值更新\n                deleteItemValue(formId, name || id);\n            }\n        };\n    }, [name, id]);\n\n    useEffect(() => {\n        // 初始化value\n        if (defaultValue && !value) {\n            // 当defaultValue不为空且value为空时，为value初始化defaultValue对应值\n            setProps({ value: defaultValue });\n        }\n\n        // 调整不同showTime下的format缺省参数\n        if (showTime && !format) {\n            setProps({\n                format: 'YYYY-MM-DD HH:mm:ss',\n            });\n        } else if (!showTime && !format) {\n            setProps({\n                format: 'YYYY-MM-DD',\n            });\n        }\n\n        // 处理pickerValue缺省赋值\n        if (!pickerValue) {\n            setProps({\n                pickerValue: dayjs(new Date()).format(\n                    format || (showTime ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD')\n                ),\n            });\n        }\n    }, []);\n\n    useEffect(() => {\n        if (!isUndefined(firstDayOfWeek)) {\n            dayjs.locale(locale === 'en-us' ? 'en' : locale, {\n                week: {\n                    dow: firstDayOfWeek,\n                },\n            });\n        }\n    }, [firstDayOfWeek]);\n\n    const onChange = (date, dateString) => {\n        if (Array.isArray(dateString)) {\n            // AntdForm表单批量控制\n            if (formId && (name || id) && enableBatchControl) {\n                // 表单值更新\n                updateItemValue(formId, name || id, dateString);\n            }\n            // 更新rawValue\n            setRawValue(date);\n            if (dateString[0] !== '' && dateString[1] !== '') {\n                setProps({ value: [dateString[0], dateString[1]] });\n            } else {\n                setProps({ value: null });\n            }\n        }\n    };\n\n    const checkDisabledDate = (current) => {\n        // 根据disabledDatesStrategy设定的各个子条件进行是否禁用判断\n        for (let i = 0; i < disabledDatesStrategy.length; i++) {\n            const strategy = disabledDatesStrategy[i];\n            // 判断当前子策略方式\n            if (strategy.mode === 'eq') {\n                // 判断当前子策略约束目标\n                if (strategy.target === 'day') {\n                    if (current.date() === strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'month') {\n                    if (current.month() === strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'quarter') {\n                    if (current.quarter() === strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'year') {\n                    if (current.year() === strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'dayOfYear') {\n                    if (current.dayOfYear() === strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'dayOfWeek') {\n                    if (current.isoWeekday() === strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'specific-date') {\n                    if (current.isSame(dayjs(strategy.value, 'YYYY-MM-DD'))) {\n                        return true;\n                    }\n                }\n            } else if (strategy.mode === 'ne') {\n                // 判断当前子策略约束目标\n                if (strategy.target === 'day') {\n                    if (current.date() !== strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'month') {\n                    if (current.month() !== strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'quarter') {\n                    if (current.quarter() !== strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'year') {\n                    if (current.year() !== strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'dayOfYear') {\n                    if (current.dayOfYear() !== strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'dayOfWeek') {\n                    if (current.isoWeekday() !== strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'specific-date') {\n                    if (!current.isSame(dayjs(strategy.value, 'YYYY-MM-DD'))) {\n                        return true;\n                    }\n                }\n            } else if (strategy.mode === 'le') {\n                // 判断当前子策略约束目标\n                if (strategy.target === 'day') {\n                    if (current.date() <= strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'month') {\n                    if (current.month() <= strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'quarter') {\n                    if (current.quarter() <= strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'year') {\n                    if (current.year() <= strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'dayOfYear') {\n                    if (current.dayOfYear() <= strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'dayOfWeek') {\n                    if (current.isoWeekday() <= strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'specific-date') {\n                    if (\n                        current.isSameOrBefore(\n                            dayjs(strategy.value, 'YYYY-MM-DD')\n                        )\n                    ) {\n                        return true;\n                    }\n                }\n            } else if (strategy.mode === 'lt') {\n                // 判断当前子策略约束目标\n                if (strategy.target === 'day') {\n                    if (current.date() < strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'month') {\n                    if (current.month() < strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'quarter') {\n                    if (current.quarter() < strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'year') {\n                    if (current.year() < strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'dayOfYear') {\n                    if (current.dayOfYear() < strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'dayOfWeek') {\n                    if (current.isoWeekday() < strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'specific-date') {\n                    if (current.isBefore(dayjs(strategy.value, 'YYYY-MM-DD'))) {\n                        return true;\n                    }\n                }\n            } else if (strategy.mode === 'ge') {\n                // 判断当前子策略约束目标\n                if (strategy.target === 'day') {\n                    if (current.date() >= strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'month') {\n                    if (current.month() >= strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'quarter') {\n                    if (current.quarter() >= strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'year') {\n                    if (current.year() >= strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'dayOfYear') {\n                    if (current.dayOfYear() >= strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'dayOfWeek') {\n                    if (current.isoWeekday() >= strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'specific-date') {\n                    if (\n                        current.isSameOrAfter(\n                            dayjs(strategy.value, 'YYYY-MM-DD')\n                        )\n                    ) {\n                        return true;\n                    }\n                }\n            } else if (strategy.mode === 'gt') {\n                // 判断当前子策略约束目标\n                if (strategy.target === 'day') {\n                    if (current.date() > strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'month') {\n                    if (current.month() > strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'quarter') {\n                    if (current.quarter() > strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'year') {\n                    if (current.year() > strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'dayOfYear') {\n                    if (current.dayOfYear() > strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'dayOfWeek') {\n                    if (current.isoWeekday() > strategy.value) {\n                        return true;\n                    }\n                } else if (strategy.target === 'specific-date') {\n                    if (current.isAfter(dayjs(strategy.value, 'YYYY-MM-DD'))) {\n                        return true;\n                    }\n                }\n            } else if (strategy.mode === 'in') {\n                // 判断当前子策略约束目标\n                if (strategy.target === 'day') {\n                    if (strategy.value.includes(current.date())) {\n                        return true;\n                    }\n                } else if (strategy.target === 'month') {\n                    if (strategy.value.includes(current.month())) {\n                        return true;\n                    }\n                } else if (strategy.target === 'quarter') {\n                    if (strategy.value.includes(current.quarter())) {\n                        return true;\n                    }\n                } else if (strategy.target === 'year') {\n                    if (strategy.value.includes(current.year())) {\n                        return true;\n                    }\n                } else if (strategy.target === 'dayOfYear') {\n                    if (strategy.value.includes(current.dayOfYear())) {\n                        return true;\n                    }\n                } else if (strategy.target === 'dayOfWeek') {\n                    if (strategy.value.includes(current.isoWeekday())) {\n                        return true;\n                    }\n                }\n            } else if (strategy.mode === 'not-in') {\n                // 判断当前子策略约束目标\n                if (strategy.target === 'day') {\n                    if (!strategy.value.includes(current.date())) {\n                        return true;\n                    }\n                } else if (strategy.target === 'month') {\n                    if (!strategy.value.includes(current.month())) {\n                        return true;\n                    }\n                } else if (strategy.target === 'quarter') {\n                    if (!strategy.value.includes(current.quarter())) {\n                        return true;\n                    }\n                } else if (strategy.target === 'year') {\n                    if (!strategy.value.includes(current.year())) {\n                        return true;\n                    }\n                } else if (strategy.target === 'dayOfYear') {\n                    if (!strategy.value.includes(current.dayOfYear())) {\n                        return true;\n                    }\n                } else if (strategy.target === 'dayOfWeek') {\n                    if (!strategy.value.includes(current.isoWeekday())) {\n                        return true;\n                    }\n                }\n            } else if (strategy.mode === 'in-enumerate-dates') {\n                if (strategy.value.includes(current.format(format))) {\n                    return true;\n                }\n            } else if (strategy.mode === 'not-in-enumerate-dates') {\n                if (!strategy.value.includes(current.format(format))) {\n                    return true;\n                }\n            }\n        }\n    };\n\n    return (\n        <div>\n            <ConfigProvider locale={str2Locale.get(locale)}>\n                <RangePicker\n                    // 提取具有data-*或aria-*通配格式的属性\n                    {...pickBy(\n                        (_, k) =>\n                            k.startsWith('data-') || k.startsWith('aria-'),\n                        others\n                    )}\n                    id={id}\n                    className={\n                        isString(className)\n                            ? className\n                            : className\n                              ? useCss(className)\n                              : undefined\n                    }\n                    style={style}\n                    popupClassName={popupClassName}\n                    key={key}\n                    format={format}\n                    size={\n                        context && !isUndefined(context.componentSize)\n                            ? context.componentSize\n                            : size\n                    }\n                    picker={picker}\n                    showTime={\n                        // 处理时间选择面板在日期选定后的默认选中值\n                        isObject(showTime) &&\n                        showTime.defaultValue &&\n                        showTime.defaultValue.length === 2\n                            ? {\n                                  defaultValue: [\n                                      dayjs(\n                                          dayjs(new Date()).format(\n                                              'YYYY-MM-DD'\n                                          ) +\n                                              ' ' +\n                                              showTime.defaultValue[0],\n                                          'YYYY-MM-DD' +\n                                              ' ' +\n                                              (showTime.format || 'HH:mm:ss')\n                                      ),\n                                      dayjs(\n                                          dayjs(new Date()).format(\n                                              'YYYY-MM-DD'\n                                          ) +\n                                              ' ' +\n                                              showTime.defaultValue[1],\n                                          'YYYY-MM-DD' +\n                                              ' ' +\n                                              (showTime.format || 'HH:mm:ss')\n                                      ),\n                                  ],\n                              }\n                            : showTime\n                    }\n                    allowClear={isUndefined(readOnly) ? allowClear : !readOnly}\n                    autoFocus={autoFocus}\n                    disabled={\n                        context && !isUndefined(context.componentDisabled)\n                            ? [\n                                  context.componentDisabled,\n                                  context.componentDisabled,\n                              ]\n                            : disabled && disabled.length === 2\n                              ? disabled\n                              : undefined\n                    }\n                    allowEmpty={\n                        disabled && disabled.length === 2 ? disabled : undefined\n                    }\n                    placeholder={\n                        placeholder && placeholder.length === 2\n                            ? placeholder\n                            : undefined\n                    }\n                    onChange={onChange}\n                    onPanelChange={(v, m) => {\n                        setProps({\n                            pickerValue: [\n                                v[0].format(format),\n                                v[1] && v[1].format(format),\n                            ],\n                        });\n                    }}\n                    variant={\n                        !variant\n                            ? bordered\n                                ? 'outlined'\n                                : 'borderless'\n                            : variant\n                    }\n                    disabledDate={\n                        disabledDatesStrategy ? checkDisabledDate : undefined\n                    }\n                    pickerValue={\n                        pickerValue\n                            ? Array.isArray(pickerValue)\n                                ? pickerValue[1]\n                                    ? [\n                                          dayjs(pickerValue[0], format),\n                                          dayjs(pickerValue[1], format),\n                                      ]\n                                    : dayjs(pickerValue[0], format)\n                                : dayjs(pickerValue, format)\n                            : undefined\n                    }\n                    value={\n                        formId && (name || id) && enableBatchControl\n                            ? currentFormValue && currentFormValue.length === 2\n                                ? [\n                                      currentFormValue[0]\n                                          ? dayjs(currentFormValue[0], format)\n                                          : undefined,\n                                      currentFormValue[1]\n                                          ? dayjs(currentFormValue[1], format)\n                                          : undefined,\n                                  ]\n                                : undefined\n                            : rawValue ||\n                              (value && value.length === 2\n                                  ? [\n                                        value[0]\n                                            ? dayjs(value[0], format)\n                                            : undefined,\n                                        value[1]\n                                            ? dayjs(value[1], format)\n                                            : undefined,\n                                    ]\n                                  : undefined)\n                    }\n                    defaultValue={\n                        formId && (name || id) && enableBatchControl\n                            ? undefined\n                            : defaultValue && defaultValue.length === 2\n                              ? [\n                                    defaultValue[0]\n                                        ? dayjs(defaultValue[0], format)\n                                        : undefined,\n                                    defaultValue[1]\n                                        ? dayjs(defaultValue[1], format)\n                                        : undefined,\n                                ]\n                              : undefined\n                    }\n                    status={status}\n                    placement={placement}\n                    open={isUndefined(readOnly) || !readOnly ? open : false}\n                    onOpenChange={(e) => setProps({ open: e })}\n                    inputReadOnly={readOnly}\n                    renderExtraFooter={() => extraFooter}\n                    needConfirm={needConfirm}\n                    presets={\n                        // 处理预设快捷选项列表\n                        (presets || []).map((preset) => ({\n                            label: preset.label,\n                            value: () => {\n                                return [\n                                    dayjs(preset.value[0], format),\n                                    dayjs(preset.value[1], format),\n                                ];\n                            },\n                        }))\n                    }\n                    cellRender={\n                        customCells\n                            ? (current, info) => {\n                                  // 尝试搜索命中项\n                                  let matchCell;\n                                  // 目前仅作用于日期类型\n                                  if (info.type === 'date') {\n                                      matchCell = customCells.filter((item) => {\n                                          // 初始化基础条件\n                                          let conditions = true;\n                                          // 若具有明确年份\n                                          if (item.year) {\n                                              conditions =\n                                                  conditions &&\n                                                  current.year() === item.year;\n                                          }\n                                          // 若具有明确月份\n                                          if (item.month) {\n                                              conditions =\n                                                  conditions &&\n                                                  current.month() + 1 ===\n                                                      item.month;\n                                          }\n                                          // 若具有明确日期\n                                          if (item.date) {\n                                              conditions =\n                                                  conditions &&\n                                                  current.date() === item.date;\n                                          }\n                                          return conditions;\n                                      });\n                                  }\n                                  if (matchCell.length > 0) {\n                                      return (\n                                          <div\n                                              className={\n                                                  matchCell[0].className\n                                                      ? `ant-picker-cell-inner ${matchCell[0].className}`\n                                                      : 'ant-picker-cell-inner'\n                                              }\n                                              style={matchCell[0].style}\n                                          >\n                                              {current.date()}\n                                          </div>\n                                      );\n                                  }\n                                  return info.originNode;\n                              }\n                            : undefined\n                    }\n                    prefix={prefix}\n                    suffixIcon={suffixIcon}\n                    data-dash-is-loading={useLoading()}\n                    getPopupContainer={\n                        popupContainer === 'parent'\n                            ? (triggerNode) => triggerNode.parentNode\n                            : undefined\n                    }\n                />\n            </ConfigProvider>\n        </div>\n    );\n};\n\nexport default AntdDateRangePicker;\n\nAntdDateRangePicker.defaultProps = defaultProps;\nAntdDateRangePicker.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataEntry/AntdInput.react.js",
    "content": "// react核心\nimport React, { useState, useEffect, useContext } from 'react';\n// antd核心\nimport { Input } from 'antd';\n// 辅助库\nimport md5 from 'md5';\nimport { useRequest } from 'ahooks';\nimport { isString, isUndefined } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 上下文\nimport PropsContext from '../../contexts/PropsContext';\nimport FormContext from '../../contexts/FormContext';\n// 状态管理\nimport useFormStore from '../../store/formStore';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataEntry/AntdInput.react';\n\nconst { Search, TextArea } = Input;\n\n/**\n * 输入框组件AntdInput\n */\nconst AntdInput = (props) => {\n    const {\n        id,\n        className,\n        style,\n        styles,\n        classNames,\n        key,\n        name,\n        enableBatchControl,\n        mode,\n        passwordUseMd5,\n        autoComplete,\n        placeholder,\n        value,\n        size,\n        addonBefore,\n        addonAfter,\n        prefix,\n        suffix,\n        allowClear,\n        autoFocus,\n        bordered,\n        variant,\n        defaultValue,\n        disabled,\n        maxLength,\n        showCount,\n        countFormat,\n        nClicksSearch,\n        nSubmit,\n        status,\n        autoSize,\n        debounceWait,\n        readOnly,\n        emptyAsNone,\n        setProps,\n        persistence,\n        persisted_props,\n        persistence_type,\n        batchPropsNames,\n        ...others\n    } = props;\n\n    // 解决受控value卡部分中文输入法问题\n    const [rawValue, setRawValue] = useState(value);\n\n    // 批属性监听\n    useEffect(() => {\n        if (batchPropsNames && batchPropsNames.length !== 0) {\n            const _batchPropsValues = {};\n            for (const propName of batchPropsNames) {\n                _batchPropsValues[propName] = props[propName];\n            }\n            setProps({\n                batchPropsValues: _batchPropsValues,\n            });\n        }\n    });\n\n    const context = useContext(PropsContext);\n    const formId = useContext(FormContext);\n\n    const updateItemValue = useFormStore((state) => state.updateItemValue);\n    const deleteItemValue = useFormStore((state) => state.deleteItemValue);\n\n    // 收集当前组件相关表单值\n    const currentFormValue = useFormStore(\n        (state) => state.values?.[formId]?.[name || id]\n    );\n\n    // 处理组件卸载后，对应表单项值的清除\n    useEffect(() => {\n        return () => {\n            // 若上文中存在有效表单id\n            if (formId && (name || id) && enableBatchControl) {\n                // 表单值更新\n                deleteItemValue(formId, name || id);\n            }\n        };\n    }, [name, id]);\n\n    useEffect(() => {\n        // 初始化value\n        if (defaultValue && !value) {\n            // 当defaultValue不为空且value为空时，为value初始化defaultValue对应的value值\n            setProps({\n                value: defaultValue,\n                md5Value: md5(defaultValue),\n            });\n        }\n        // 在value存在时，初始化md5Value\n        if (value) {\n            setProps({\n                md5Value: md5(value),\n            });\n        }\n    }, []);\n\n    // 监听输入内容变化事件\n    const onChange = (e) => {\n        // AntdForm表单批量控制\n        if (formId && (name || id) && enableBatchControl) {\n            // 表单值更新\n            updateItemValue(formId, name || id, e.target.value);\n        }\n        // 若启用md5加密且为密码模式\n        if (passwordUseMd5 && mode === 'password') {\n            setProps({\n                md5Value: e.target.value ? md5(e.target.value) : null,\n                value: emptyAsNone\n                    ? e.target.value === ''\n                        ? null\n                        : e.target.value\n                    : e.target.value,\n            });\n        } else {\n            setProps({\n                value: emptyAsNone\n                    ? e.target.value === ''\n                        ? null\n                        : e.target.value\n                    : e.target.value,\n            });\n        }\n        setRawValue(e.target.value);\n    };\n\n    // 解决value经回调更新后，rawValue未更新的问题\n    useEffect(() => {\n        // AntdForm表单批量控制\n        if (formId && (name || id) && enableBatchControl) {\n            setRawValue(currentFormValue);\n        } else {\n            setRawValue(value);\n        }\n    }, [value, currentFormValue]);\n\n    const { run: onDebounceChange } = useRequest(\n        (e) => {\n            setProps({\n                debounceValue: emptyAsNone ? (e === '' ? null : e) : e,\n            });\n        },\n        {\n            debounceWait: debounceWait,\n            manual: true,\n        }\n    );\n\n    // 监听聚焦到输入框时enter键点按次数\n    const onPressEnter = (e) => {\n        setProps({ nSubmit: nSubmit + 1 });\n    };\n\n    // 监听搜索按钮点按事件\n    const onSearch = (e) => {\n        setProps({ nClicksSearch: nClicksSearch + 1 });\n    };\n\n    // 不同的mode模式下渲染不同的组件\n    if (mode === 'default') {\n        return (\n            <Input\n                // 提取具有data-*或aria-*通配格式的属性\n                {...pickBy(\n                    (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                    others\n                )}\n                id={id}\n                className={\n                    isString(className)\n                        ? className\n                        : className\n                          ? useCss(className)\n                          : undefined\n                }\n                style={style}\n                styles={styles}\n                classNames={classNames}\n                key={key}\n                placeholder={placeholder}\n                autoComplete={autoComplete}\n                defaultValue={\n                    formId && (name || id) && enableBatchControl\n                        ? undefined\n                        : defaultValue\n                }\n                value={\n                    formId && (name || id) && enableBatchControl\n                        ? currentFormValue\n                        : rawValue || value\n                }\n                size={\n                    context && !isUndefined(context.componentSize)\n                        ? context.componentSize\n                        : size\n                }\n                addonBefore={addonBefore}\n                addonAfter={addonAfter}\n                prefix={prefix}\n                suffix={suffix}\n                allowClear={allowClear}\n                autoFocus={autoFocus}\n                variant={\n                    !variant ? (bordered ? 'outlined' : 'borderless') : variant\n                }\n                disabled={\n                    context && !isUndefined(context.componentDisabled)\n                        ? context.componentDisabled\n                        : disabled\n                }\n                maxLength={maxLength}\n                status={status}\n                readOnly={readOnly}\n                onChange={(e) => {\n                    onChange(e);\n                    onDebounceChange(e.target.value);\n                }}\n                onPressEnter={onPressEnter}\n                onFocus={() => setProps({ focusing: true })}\n                onBlur={() => setProps({ focusing: false })}\n                data-dash-is-loading={useLoading()}\n            />\n        );\n    } else if (mode === 'search') {\n        return (\n            <Search\n                // 提取具有data-*或aria-*通配格式的属性\n                {...pickBy(\n                    (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                    others\n                )}\n                id={id}\n                className={\n                    isString(className)\n                        ? className\n                        : className\n                          ? useCss(className)\n                          : undefined\n                }\n                style={style}\n                styles={styles}\n                classNames={classNames}\n                key={key}\n                placeholder={placeholder}\n                autoComplete={autoComplete}\n                size={\n                    context && !isUndefined(context.componentSize)\n                        ? context.componentSize\n                        : size\n                }\n                addonBefore={addonBefore}\n                prefix={prefix}\n                suffix={suffix}\n                allowClear={allowClear}\n                autoFocus={autoFocus}\n                variant={\n                    !variant ? (bordered ? 'outlined' : 'borderless') : variant\n                }\n                defaultValue={\n                    formId && (name || id) && enableBatchControl\n                        ? undefined\n                        : defaultValue\n                }\n                value={\n                    formId && (name || id) && enableBatchControl\n                        ? currentFormValue\n                        : rawValue || value\n                }\n                disabled={\n                    context && !isUndefined(context.componentDisabled)\n                        ? context.componentDisabled\n                        : disabled\n                }\n                maxLength={maxLength}\n                status={status}\n                readOnly={readOnly}\n                onSearch={onSearch}\n                onChange={(e) => {\n                    onChange(e);\n                    onDebounceChange(e.target.value);\n                }}\n                onPressEnter={onPressEnter}\n                onFocus={() => setProps({ focusing: true })}\n                onBlur={() => setProps({ focusing: false })}\n                data-dash-is-loading={useLoading()}\n            />\n        );\n    } else if (mode === 'text-area') {\n        return (\n            <TextArea\n                // 提取具有data-*或aria-*通配格式的属性\n                {...pickBy(\n                    (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                    others\n                )}\n                id={id}\n                className={\n                    isString(className)\n                        ? className\n                        : className\n                          ? useCss(className)\n                          : undefined\n                }\n                style={style}\n                styles={styles}\n                classNames={classNames}\n                key={key}\n                placeholder={placeholder}\n                autoComplete={autoComplete}\n                size={\n                    context && !isUndefined(context.componentSize)\n                        ? context.componentSize\n                        : size\n                }\n                allowClear={allowClear}\n                autoFocus={autoFocus}\n                variant={\n                    !variant ? (bordered ? 'outlined' : 'borderless') : variant\n                }\n                defaultValue={\n                    formId && (name || id) && enableBatchControl\n                        ? undefined\n                        : defaultValue\n                }\n                value={\n                    formId && (name || id) && enableBatchControl\n                        ? currentFormValue\n                        : rawValue || value\n                }\n                disabled={\n                    context && !isUndefined(context.componentDisabled)\n                        ? context.componentDisabled\n                        : disabled\n                }\n                maxLength={maxLength}\n                showCount={\n                    showCount && countFormat && !maxLength\n                        ? {\n                              // 基于countFormat所定义的正则规则来自定义计算字符数\n                              formatter: ({ value }) => {\n                                  return (\n                                      value.match(eval(`/${countFormat}/g`))\n                                          ?.length || 0\n                                  );\n                              },\n                          }\n                        : showCount\n                }\n                status={status}\n                autoSize={autoSize}\n                readOnly={readOnly}\n                onChange={(e) => {\n                    onChange(e);\n                    onDebounceChange(e.target.value);\n                }}\n                onPressEnter={onPressEnter}\n                onFocus={() => setProps({ focusing: true })}\n                onBlur={() => setProps({ focusing: false })}\n                data-dash-is-loading={useLoading()}\n            />\n        );\n    } else if (mode === 'password') {\n        return (\n            <Input.Password\n                // 提取具有data-*或aria-*通配格式的属性\n                {...pickBy(\n                    (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                    others\n                )}\n                id={id}\n                className={\n                    isString(className)\n                        ? className\n                        : className\n                          ? useCss(className)\n                          : undefined\n                }\n                style={style}\n                styles={styles}\n                classNames={classNames}\n                key={key}\n                placeholder={placeholder}\n                autoComplete={autoComplete}\n                size={\n                    context && !isUndefined(context.componentSize)\n                        ? context.componentSize\n                        : size\n                }\n                variant={\n                    !variant ? (bordered ? 'outlined' : 'borderless') : variant\n                }\n                disabled={\n                    context && !isUndefined(context.componentDisabled)\n                        ? context.componentDisabled\n                        : disabled\n                }\n                defaultValue={\n                    formId && (name || id) && enableBatchControl\n                        ? undefined\n                        : defaultValue\n                }\n                value={\n                    formId && (name || id) && enableBatchControl\n                        ? currentFormValue\n                        : rawValue || value\n                }\n                maxLength={maxLength}\n                status={status}\n                addonBefore={addonBefore}\n                addonAfter={addonAfter}\n                prefix={prefix}\n                readOnly={readOnly}\n                onChange={(e) => {\n                    onChange(e);\n                    onDebounceChange(e.target.value);\n                }}\n                onPressEnter={onPressEnter}\n                onFocus={() => setProps({ focusing: true })}\n                onBlur={() => setProps({ focusing: false })}\n                data-dash-is-loading={useLoading()}\n            />\n        );\n    }\n};\n\nexport default AntdInput;\n\nAntdInput.defaultProps = defaultProps;\nAntdInput.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataEntry/AntdInputNumber.react.js",
    "content": "// react核心\nimport React, { useEffect, useContext } from 'react';\n// antd核心\nimport { InputNumber } from 'antd';\n// 辅助库\nimport { useRequest } from 'ahooks';\nimport { isString, isUndefined } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 上下文\nimport PropsContext from '../../contexts/PropsContext';\nimport FormContext from '../../contexts/FormContext';\n// 状态管理\nimport useFormStore from '../../store/formStore';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataEntry/AntdInputNumber.react';\n\n/**\n * 数值输入框组件AntdInputNumber\n */\nconst AntdInputNumber = (props) => {\n    const {\n        id,\n        className,\n        style,\n        key,\n        name,\n        enableBatchControl,\n        size,\n        addonBefore,\n        addonAfter,\n        autoFocus,\n        prefix,\n        suffix,\n        bordered,\n        variant,\n        controls,\n        value,\n        defaultValue,\n        disabled,\n        placeholder,\n        keyboard,\n        min,\n        max,\n        step,\n        precision,\n        readOnly,\n        stringMode,\n        nSubmit,\n        status,\n        debounceWait,\n        setProps,\n        persistence,\n        persisted_props,\n        persistence_type,\n        batchPropsNames,\n        ...others\n    } = props;\n\n    // 批属性监听\n    useEffect(() => {\n        if (batchPropsNames && batchPropsNames.length !== 0) {\n            const _batchPropsValues = {};\n            for (const propName of batchPropsNames) {\n                _batchPropsValues[propName] = props[propName];\n            }\n            setProps({\n                batchPropsValues: _batchPropsValues,\n            });\n        }\n    });\n\n    const context = useContext(PropsContext);\n    const formId = useContext(FormContext);\n\n    const updateItemValue = useFormStore((state) => state.updateItemValue);\n    const deleteItemValue = useFormStore((state) => state.deleteItemValue);\n\n    // 收集当前组件相关表单值\n    const currentFormValue = useFormStore(\n        (state) => state.values?.[formId]?.[name || id]\n    );\n\n    // 处理组件卸载后，对应表单项值的清除\n    useEffect(() => {\n        return () => {\n            // 若上文中存在有效表单id\n            if (formId && (name || id) && enableBatchControl) {\n                // 表单值更新\n                deleteItemValue(formId, name || id);\n            }\n        };\n    }, [name, id]);\n\n    useEffect(() => {\n        // 初始化value\n        if (defaultValue && !value) {\n            // 当defaultValue不为空且value为空时，为value初始化defaultValue对应的value值\n            setProps({\n                value: defaultValue,\n                debounceValue: defaultValue,\n            });\n        }\n    }, []);\n\n    // 监听输入内容变化事件\n    const onChange = (e) => {\n        // AntdForm表单批量控制\n        if (formId && (name || id) && enableBatchControl) {\n            // 表单值更新\n            updateItemValue(formId, name || id, e);\n        }\n        setProps({ value: e });\n    };\n\n    const { run: onDebounceChange } = useRequest(\n        (e) => {\n            setProps({ debounceValue: e });\n        },\n        {\n            debounceWait: debounceWait,\n            manual: true,\n        }\n    );\n\n    // 监听聚焦到输入框时enter键点按次数\n    const onPressEnter = (e) => {\n        setProps({ nSubmit: nSubmit + 1 });\n    };\n\n    return (\n        <InputNumber\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            size={\n                context && !isUndefined(context.componentSize)\n                    ? context.componentSize\n                    : size\n            }\n            addonBefore={addonBefore}\n            addonAfter={addonAfter}\n            autoFocus={autoFocus}\n            prefix={prefix}\n            suffix={suffix}\n            placeholder={placeholder}\n            variant={\n                !variant ? (bordered ? 'outlined' : 'borderless') : variant\n            }\n            controls={controls}\n            defaultValue={\n                formId && (name || id) && enableBatchControl\n                    ? undefined\n                    : defaultValue\n            }\n            value={\n                formId && (name || id) && enableBatchControl\n                    ? currentFormValue\n                    : value\n            }\n            disabled={\n                context && !isUndefined(context.componentDisabled)\n                    ? context.componentDisabled\n                    : disabled\n            }\n            keyboard={keyboard}\n            min={min}\n            max={max}\n            step={step}\n            precision={precision}\n            readOnly={readOnly}\n            stringMode={stringMode}\n            status={status}\n            onChange={(e) => {\n                onChange(e);\n                onDebounceChange(e);\n            }}\n            onPressEnter={onPressEnter}\n            data-dash-is-loading={useLoading()}\n        />\n    );\n};\n\nexport default AntdInputNumber;\n\nAntdInputNumber.defaultProps = defaultProps;\nAntdInputNumber.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataEntry/AntdMentions.react.js",
    "content": "// react核心\nimport React, { useContext, useEffect } from 'react';\n// antd核心\nimport { Mentions } from 'antd';\n// 辅助库\nimport { isString, isUndefined } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 上下文\nimport PropsContext from '../../contexts/PropsContext';\nimport FormContext from '../../contexts/FormContext';\n// 状态管理\nimport useFormStore from '../../store/formStore';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataEntry/AntdMentions.react';\n\nconst { Option } = Mentions;\n\n/**\n * 提及组件AntdMentions\n */\nconst AntdMentions = (props) => {\n    const {\n        id,\n        className,\n        style,\n        popupClassName,\n        key,\n        name,\n        enableBatchControl,\n        autoSize,\n        prefix,\n        value,\n        defaultValue,\n        placement,\n        bordered,\n        variant,\n        placeholder,\n        options,\n        disabled,\n        status,\n        autoFocus,\n        popupContainer,\n        setProps,\n        batchPropsNames,\n        ...others\n    } = props;\n\n    // 批属性监听\n    useEffect(() => {\n        if (batchPropsNames && batchPropsNames.length !== 0) {\n            const _batchPropsValues = {};\n            for (const propName of batchPropsNames) {\n                _batchPropsValues[propName] = props[propName];\n            }\n            setProps({\n                batchPropsValues: _batchPropsValues,\n            });\n        }\n    });\n\n    const context = useContext(PropsContext);\n    const formId = useContext(FormContext);\n\n    const updateItemValue = useFormStore((state) => state.updateItemValue);\n    const deleteItemValue = useFormStore((state) => state.deleteItemValue);\n\n    // 收集当前组件相关表单值\n    const currentFormValue = useFormStore(\n        (state) => state.values?.[formId]?.[name || id]\n    );\n\n    // 处理组件卸载后，对应表单项值的清除\n    useEffect(() => {\n        return () => {\n            // 若上文中存在有效表单id\n            if (formId && (name || id) && enableBatchControl) {\n                // 表单值更新\n                deleteItemValue(formId, name || id);\n            }\n        };\n    }, [name, id]);\n\n    const onChange = (e) => {\n        // AntdForm表单批量控制\n        if (formId && (name || id) && enableBatchControl) {\n            // 表单值更新\n            updateItemValue(formId, name || id, e);\n        }\n        setProps({ value: e });\n    };\n\n    const onSelect = (e) => {\n        // 获取最新一次被选中的子项value值\n        const latestSelectedOption = e.value;\n\n        // 计算当前options中value值数组\n        const optionValues = options.map((item) => item.value);\n\n        // 抽取已输入内容中的已选择子项内容\n        const presentSelectedOptions = (\n            (value || '').match(eval(`/${prefix || '@'}\\\\S{1,}\\\\s/g`)) || []\n        )\n            .map((s) => s.slice(1, s.length).trim())\n            .concat([latestSelectedOption])\n            // 处理latestSelectedOption与options中value值的存在性问题\n            .filter((s) => optionValues.indexOf(s) !== -1);\n\n        // 更新输入框中已标记子项value值列表\n        setProps({\n            selectedOptions: presentSelectedOptions,\n        });\n    };\n\n    return (\n        <Mentions\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            popupClassName={popupClassName}\n            key={key}\n            autoSize={autoSize}\n            prefix={prefix}\n            defaultValue={\n                formId && (name || id) && enableBatchControl\n                    ? undefined\n                    : defaultValue\n            }\n            value={\n                formId && (name || id) && enableBatchControl\n                    ? currentFormValue\n                    : value\n            }\n            placement={placement}\n            variant={\n                !variant ? (bordered ? 'outlined' : 'borderless') : variant\n            }\n            placeholder={placeholder}\n            disabled={\n                context && !isUndefined(context.componentDisabled)\n                    ? context.componentDisabled\n                    : disabled\n            }\n            autoFocus={autoFocus}\n            status={status}\n            onChange={onChange}\n            onSelect={onSelect}\n            getPopupContainer={\n                popupContainer === 'parent'\n                    ? (triggerNode) => triggerNode.parentNode\n                    : undefined\n            }\n            data-dash-is-loading={useLoading()}\n        >\n            {options.map((item, idx) => (\n                <Option value={item.value} key={idx}>\n                    {item.label}\n                </Option>\n            ))}\n        </Mentions>\n    );\n};\n\nexport default AntdMentions;\n\nAntdMentions.defaultProps = defaultProps;\nAntdMentions.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataEntry/AntdOTP.react.js",
    "content": "// react核心\nimport React, { useEffect, useContext } from 'react';\n// antd核心\nimport { Input } from 'antd';\n// 辅助库\nimport { isString, isUndefined } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 上下文\nimport PropsContext from '../../contexts/PropsContext';\nimport FormContext from '../../contexts/FormContext';\n// 状态管理\nimport useFormStore from '../../store/formStore';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataEntry/AntdOTP.react';\n\nconst { OTP } = Input;\n\n/**\n * 一次性密码框组件AntdOTP\n */\nconst AntdOTP = (props) => {\n    const {\n        id,\n        className,\n        style,\n        key,\n        name,\n        enableBatchControl,\n        defaultValue,\n        value,\n        disabled,\n        length,\n        mask,\n        status,\n        size,\n        variant,\n        setProps,\n        persistence,\n        persisted_props,\n        persistence_type,\n        ...others\n    } = props;\n\n    const context = useContext(PropsContext);\n    const formId = useContext(FormContext);\n\n    const updateItemValue = useFormStore((state) => state.updateItemValue);\n    const deleteItemValue = useFormStore((state) => state.deleteItemValue);\n\n    // 收集当前组件相关表单值\n    const currentFormValue = useFormStore(\n        (state) => state.values?.[formId]?.[name || id]\n    );\n\n    // 处理组件卸载后，对应表单项值的清除\n    useEffect(() => {\n        return () => {\n            // 若上文中存在有效表单id\n            if (formId && (name || id) && enableBatchControl) {\n                // 表单值更新\n                deleteItemValue(formId, name || id);\n            }\n        };\n    }, [name, id]);\n\n    useEffect(() => {\n        // 初始化value\n        if (defaultValue && !value) {\n            // 当defaultValue不为空且value为空时，为value初始化defaultValue对应的value值\n            setProps({\n                value: defaultValue,\n            });\n        }\n    }, []);\n\n    return (\n        <OTP\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            key={key}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            defaultValue={\n                formId && (name || id) && enableBatchControl\n                    ? undefined\n                    : defaultValue\n            }\n            value={\n                formId && (name || id) && enableBatchControl\n                    ? currentFormValue || null\n                    : value\n            }\n            disabled={\n                context && !isUndefined(context.componentDisabled)\n                    ? context.componentDisabled\n                    : disabled\n            }\n            length={length}\n            mask={mask}\n            status={status}\n            size={\n                context && !isUndefined(context.componentSize)\n                    ? context.componentSize\n                    : size\n            }\n            variant={variant}\n            onChange={(e) => {\n                // AntdForm表单批量控制\n                if (formId && (name || id) && enableBatchControl) {\n                    // 表单值更新\n                    updateItemValue(formId, name || id, e);\n                }\n                setProps({ value: e });\n            }}\n            data-dash-is-loading={useLoading()}\n        />\n    );\n};\n\nexport default AntdOTP;\n\nAntdOTP.defaultProps = defaultProps;\nAntdOTP.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataEntry/AntdRadioGroup.react.js",
    "content": "// react核心\nimport React, { useEffect, useContext } from 'react';\n// antd核心\nimport { Radio, Space } from 'antd';\n// 辅助库\nimport { isString, isNumber, isUndefined } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 上下文\nimport PropsContext from '../../contexts/PropsContext';\nimport FormContext from '../../contexts/FormContext';\n// 状态管理\nimport useFormStore from '../../store/formStore';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataEntry/AntdRadioGroup.react';\n\n/**\n * 单选框组件AntdRadioGroup\n */\nconst AntdRadioGroup = (props) => {\n    const {\n        id,\n        style,\n        className,\n        key,\n        name,\n        enableBatchControl,\n        options,\n        defaultValue,\n        value,\n        direction,\n        optionType,\n        buttonStyle,\n        block,\n        disabled,\n        size,\n        readOnly,\n        setProps,\n        persistence,\n        persisted_props,\n        persistence_type,\n        batchPropsNames,\n        ...others\n    } = props;\n\n    // 批属性监听\n    useEffect(() => {\n        if (batchPropsNames && batchPropsNames.length !== 0) {\n            const _batchPropsValues = {};\n            for (const propName of batchPropsNames) {\n                _batchPropsValues[propName] = props[propName];\n            }\n            setProps({\n                batchPropsValues: _batchPropsValues,\n            });\n        }\n    });\n\n    const context = useContext(PropsContext);\n    const formId = useContext(FormContext);\n\n    const updateItemValue = useFormStore((state) => state.updateItemValue);\n    const deleteItemValue = useFormStore((state) => state.deleteItemValue);\n\n    // 收集当前组件相关表单值\n    const currentFormValue = useFormStore(\n        (state) => state.values?.[formId]?.[name || id]\n    );\n\n    // 处理组件卸载后，对应表单项值的清除\n    useEffect(() => {\n        return () => {\n            // 若上文中存在有效表单id\n            if (formId && (name || id) && enableBatchControl) {\n                // 表单值更新\n                deleteItemValue(formId, name || id);\n            }\n        };\n    }, [name, id]);\n\n    useEffect(() => {\n        if (defaultValue && !value) {\n            setProps({ value: defaultValue });\n        }\n    }, []);\n\n    const onSelect = (e) => {\n        if (!readOnly) {\n            // AntdForm表单批量控制\n            if (formId && (name || id) && enableBatchControl) {\n                // 表单值更新\n                updateItemValue(formId, name || id, e.target.value);\n            }\n            setProps({ value: e.target.value });\n        }\n    };\n\n    if (direction === 'vertical') {\n        const _options = options.every(\n            (item) => isNumber(item) || isString(item)\n        )\n            ? // 快捷方式\n              options.map((item) => ({ label: item, value: item }))\n            : [...options];\n\n        return (\n            <Radio.Group\n                // 提取具有data-*或aria-*通配格式的属性\n                {...pickBy(\n                    (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                    others\n                )}\n                id={id}\n                className={\n                    isString(className)\n                        ? className\n                        : className\n                          ? useCss(className)\n                          : undefined\n                }\n                style={style}\n                key={key}\n                defaultValue={\n                    formId && (name || id) && enableBatchControl\n                        ? undefined\n                        : defaultValue\n                }\n                value={\n                    formId && (name || id) && enableBatchControl\n                        ? currentFormValue\n                        : value\n                }\n                buttonStyle={buttonStyle}\n                block={block}\n                disabled={\n                    context && !isUndefined(context.componentDisabled)\n                        ? context.componentDisabled\n                        : disabled\n                }\n                size={\n                    context && !isUndefined(context.componentSize)\n                        ? context.componentSize\n                        : size\n                }\n                onChange={onSelect}\n                data-dash-is-loading={useLoading()}\n            >\n                <Space direction=\"vertical\">\n                    {_options.map((item) => {\n                        return optionType !== 'button' ? (\n                            <Radio value={item.value} disabled={item.disabled}>\n                                {item.label}\n                            </Radio>\n                        ) : (\n                            <Radio.Button\n                                value={item.value}\n                                disabled={item.disabled}\n                            >\n                                {item.label}\n                            </Radio.Button>\n                        );\n                    })}\n                </Space>\n            </Radio.Group>\n        );\n    }\n\n    return (\n        <Radio.Group\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            options={\n                options.every((item) => isNumber(item) || isString(item))\n                    ? // 快捷方式\n                      options.map((item) => ({ label: item, value: item }))\n                    : options\n            }\n            defaultValue={\n                formId && (name || id) && enableBatchControl\n                    ? undefined\n                    : defaultValue\n            }\n            value={\n                formId && (name || id) && enableBatchControl\n                    ? currentFormValue\n                    : value\n            }\n            optionType={optionType}\n            buttonStyle={buttonStyle}\n            block={block}\n            disabled={\n                context && !isUndefined(context.componentDisabled)\n                    ? context.componentDisabled\n                    : disabled\n            }\n            size={\n                context && !isUndefined(context.componentSize)\n                    ? context.componentSize\n                    : size\n            }\n            onChange={onSelect}\n            data-dash-is-loading={useLoading()}\n        />\n    );\n};\n\nexport default AntdRadioGroup;\n\nAntdRadioGroup.defaultProps = defaultProps;\nAntdRadioGroup.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataEntry/AntdRate.react.js",
    "content": "// react核心\nimport React, { useEffect, useContext } from 'react';\n// antd核心\nimport { Rate } from 'antd';\n// 辅助库\nimport { isString, isUndefined } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 上下文\nimport PropsContext from '../../contexts/PropsContext';\nimport FormContext from '../../contexts/FormContext';\n// 状态管理\nimport useFormStore from '../../store/formStore';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataEntry/AntdRate.react';\n\n/**\n * 评分组件AntdRate\n */\nconst AntdRate = (props) => {\n    const {\n        id,\n        className,\n        style,\n        key,\n        name,\n        enableBatchControl,\n        allowClear,\n        allowHalf,\n        count,\n        disabled,\n        autoFocus,\n        tooltips,\n        defaultValue,\n        value,\n        setProps,\n        persistence,\n        persisted_props,\n        persistence_type,\n        batchPropsNames,\n        ...others\n    } = props;\n\n    // 批属性监听\n    useEffect(() => {\n        if (batchPropsNames && batchPropsNames.length !== 0) {\n            const _batchPropsValues = {};\n            for (const propName of batchPropsNames) {\n                _batchPropsValues[propName] = props[propName];\n            }\n            setProps({\n                batchPropsValues: _batchPropsValues,\n            });\n        }\n    });\n\n    const context = useContext(PropsContext);\n    const formId = useContext(FormContext);\n\n    const updateItemValue = useFormStore((state) => state.updateItemValue);\n    const deleteItemValue = useFormStore((state) => state.deleteItemValue);\n\n    // 收集当前组件相关表单值\n    const currentFormValue = useFormStore(\n        (state) => state.values?.[formId]?.[name || id]\n    );\n\n    // 处理组件卸载后，对应表单项值的清除\n    useEffect(() => {\n        return () => {\n            // 若上文中存在有效表单id\n            if (formId && (name || id) && enableBatchControl) {\n                // 表单值更新\n                deleteItemValue(formId, name || id);\n            }\n        };\n    }, [name, id]);\n\n    useEffect(() => {\n        // 初始化value\n        if (defaultValue && !value) {\n            // 当defaultValue不为空时，为value初始化defaultValue对应的value值\n            setProps({ value: defaultValue });\n        }\n    }, []);\n\n    // 监听change事件\n    const onChange = (e) => {\n        // AntdForm表单批量控制\n        if (formId && (name || id) && enableBatchControl) {\n            // 表单值更新\n            updateItemValue(formId, name || id, e);\n        }\n        setProps({ value: e });\n    };\n\n    return (\n        <Rate\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            allowClear={allowClear}\n            allowHalf={allowHalf}\n            count={count}\n            disabled={\n                context && !isUndefined(context.componentDisabled)\n                    ? context.componentDisabled\n                    : disabled\n            }\n            autoFocus={autoFocus}\n            tooltips={tooltips}\n            value={\n                formId && (name || id) && enableBatchControl\n                    ? currentFormValue\n                    : value\n            }\n            onChange={onChange}\n            data-dash-is-loading={useLoading()}\n        />\n    );\n};\n\nexport default AntdRate;\n\nAntdRate.defaultProps = defaultProps;\nAntdRate.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataEntry/AntdSegmentedColoring.react.js",
    "content": "// react核心\nimport React, { useContext, useEffect } from 'react';\n// antd核心\nimport { InputNumber, Space, message, Typography } from 'antd';\n// 辅助库\nimport { isString, isUndefined } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 上下文\nimport PropsContext from '../../contexts/PropsContext';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataEntry/AntdSegmentedColoring.react';\n\nconst { Text } = Typography;\n\nconst size2size = new Map([\n    ['small', '24px'],\n    ['middle', '32px'],\n    ['large', '40px'],\n]);\n\n/**\n * 分段着色组件AntdSegmentedColoring\n */\nconst AntdSegmentedColoring = (props) => {\n    let {\n        id,\n        key,\n        className,\n        style,\n        size,\n        bordered,\n        variant,\n        controls,\n        disabled,\n        keyboard,\n        placeholder,\n        min,\n        max,\n        step,\n        precision,\n        readOnly,\n        pureLegend,\n        breakpoints,\n        colors,\n        inputNumberStyle,\n        colorBlockPosition,\n        colorBlockStyle,\n        pureLegendLabelStyle,\n        setProps,\n        batchPropsNames,\n        ...others\n    } = props;\n\n    // 批属性监听\n    useEffect(() => {\n        if (batchPropsNames && batchPropsNames.length !== 0) {\n            const _batchPropsValues = {};\n            for (const propName of batchPropsNames) {\n                _batchPropsValues[propName] = props[propName];\n            }\n            setProps({\n                batchPropsValues: _batchPropsValues,\n            });\n        }\n    });\n\n    const context = useContext(PropsContext);\n\n    disabled =\n        context && !isUndefined(context.componentDisabled)\n            ? context.componentDisabled\n            : disabled;\n\n    size =\n        context && !isUndefined(context.componentSize)\n            ? context.componentSize\n            : size;\n\n    return (\n        <Space\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            key={key}\n            style={{\n                borderRadius: '2px',\n                padding: '12px 20px',\n                ...style,\n            }}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            direction={'vertical'}\n            data-dash-is-loading={useLoading()}\n        >\n            {breakpoints.slice(0, breakpoints.length - 1).map((v, i) => {\n                return (\n                    <Space style={{ display: 'flex' }} size={'small'}>\n                        {colorBlockPosition === 'left' ? (\n                            <div\n                                onClick={() =>\n                                    setProps({\n                                        colorBlockClickEvent: {\n                                            color: colors[i],\n                                            range: [\n                                                breakpoints[i],\n                                                breakpoints[i + 1],\n                                            ],\n                                            timestamp: Date.now(),\n                                        },\n                                    })\n                                }\n                                style={{\n                                    height: size2size.get(size),\n                                    backgroundColor: colors[i],\n                                    width: size2size.get(size),\n                                    ...colorBlockStyle,\n                                }}\n                            />\n                        ) : null}\n                        {pureLegend ? (\n                            <>\n                                <Text style={pureLegendLabelStyle}>\n                                    {breakpoints[i].toFixed(precision)}\n                                </Text>\n                                <Text style={pureLegendLabelStyle}>~</Text>\n                                <Text style={pureLegendLabelStyle}>\n                                    {breakpoints[i + 1].toFixed(precision)}\n                                </Text>\n                            </>\n                        ) : (\n                            <>\n                                <InputNumber\n                                    style={inputNumberStyle}\n                                    size={size}\n                                    variant={\n                                        !variant\n                                            ? bordered\n                                                ? 'outlined'\n                                                : 'borderless'\n                                            : variant\n                                    }\n                                    controls={controls}\n                                    disabled={disabled}\n                                    keyboard={keyboard}\n                                    placeholder={placeholder}\n                                    min={min}\n                                    max={max}\n                                    step={step}\n                                    precision={precision}\n                                    readOnly={readOnly}\n                                    value={breakpoints[i]}\n                                    onChange={(e) => {\n                                        if (\n                                            e !== null &&\n                                            i === 0 &&\n                                            e < breakpoints[i + 1]\n                                        ) {\n                                            const _breakpoints = [\n                                                ...breakpoints,\n                                            ];\n                                            _breakpoints[i] = e;\n                                            setProps({\n                                                breakpoints: _breakpoints,\n                                            });\n                                        } else if (\n                                            e !== null &&\n                                            i > 0 &&\n                                            e > breakpoints[i - 1] &&\n                                            e < breakpoints[i + 1]\n                                        ) {\n                                            const _breakpoints = [\n                                                ...breakpoints,\n                                            ];\n                                            _breakpoints[i] = e;\n                                            setProps({\n                                                breakpoints: _breakpoints,\n                                            });\n                                        } else if (e !== null) {\n                                            message.warning({\n                                                content:\n                                                    '数值超出相邻断点，请调整后再输入！',\n                                                duration: 1.5,\n                                            });\n                                        }\n                                    }}\n                                />\n                                <span>~</span>\n                                <InputNumber\n                                    style={inputNumberStyle}\n                                    size={size}\n                                    variant={\n                                        !variant\n                                            ? bordered\n                                                ? 'outlined'\n                                                : 'borderless'\n                                            : variant\n                                    }\n                                    controls={controls}\n                                    disabled={disabled}\n                                    keyboard={keyboard}\n                                    placeholder={placeholder}\n                                    min={min}\n                                    max={max}\n                                    step={step}\n                                    precision={precision}\n                                    readOnly={readOnly}\n                                    value={breakpoints[i + 1]}\n                                    onChange={(e) => {\n                                        if (\n                                            e !== null &&\n                                            i === breakpoints.length - 2 &&\n                                            e > breakpoints[i]\n                                        ) {\n                                            const _breakpoints = [\n                                                ...breakpoints,\n                                            ];\n                                            _breakpoints[i + 1] = e;\n                                            setProps({\n                                                breakpoints: _breakpoints,\n                                            });\n                                        } else if (\n                                            e !== null &&\n                                            e > breakpoints[i] &&\n                                            e < breakpoints[i + 2]\n                                        ) {\n                                            const _breakpoints = [\n                                                ...breakpoints,\n                                            ];\n                                            _breakpoints[i + 1] = e;\n                                            setProps({\n                                                breakpoints: _breakpoints,\n                                            });\n                                        } else if (e !== null) {\n                                            message.warning({\n                                                content:\n                                                    '数值超出相邻断点，请调整后再输入！',\n                                                duration: 1.5,\n                                            });\n                                        }\n                                    }}\n                                />\n                            </>\n                        )}\n                        {colorBlockPosition === 'right' ? (\n                            <div\n                                onClick={() =>\n                                    setProps({\n                                        colorBlockClickEvent: {\n                                            color: colors[i],\n                                            range: [\n                                                breakpoints[i],\n                                                breakpoints[i + 1],\n                                            ],\n                                            timestamp: Date.now(),\n                                        },\n                                    })\n                                }\n                                style={{\n                                    height: size2size.get(size),\n                                    backgroundColor: colors[i],\n                                    width: size2size.get(size),\n                                    ...colorBlockStyle,\n                                }}\n                            />\n                        ) : null}\n                    </Space>\n                );\n            })}\n        </Space>\n    );\n};\n\nexport default AntdSegmentedColoring;\n\nAntdSegmentedColoring.defaultProps = defaultProps;\nAntdSegmentedColoring.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataEntry/AntdSelect.react.js",
    "content": "// react核心\nimport { useEffect, useContext } from 'react';\n// antd核心\nimport { Select, Spin, ConfigProvider } from 'antd';\n// 辅助库\nimport { useRequest } from 'ahooks';\nimport { isUndefined, isString, isNumber } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { str2Locale } from '../../components/locales.react';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 上下文\nimport PropsContext from '../../contexts/PropsContext';\nimport FormContext from '../../contexts/FormContext';\n// 状态管理\nimport useFormStore from '../../store/formStore';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataEntry/AntdSelect.react';\n\nconst { Option, OptGroup } = Select;\n\n/**\n * 下拉选择组件AntdSelect\n */\nconst AntdSelect = (props) => {\n    let {\n        id,\n        style,\n        className,\n        popupClassName,\n        key,\n        name,\n        enableBatchControl,\n        locale,\n        setProps,\n        placeholder,\n        size,\n        bordered,\n        variant,\n        options,\n        colorsNameWidth,\n        allowClear,\n        autoFocus,\n        disabled,\n        value,\n        mode,\n        defaultValue,\n        maxTagCount,\n        listHeight,\n        colorsMode,\n        placement,\n        status,\n        optionFilterProp,\n        optionFilterMode,\n        autoSpin,\n        debounceWait,\n        autoClearSearchValue,\n        emptyContent,\n        loadingEmptyContent,\n        dropdownBefore,\n        dropdownAfter,\n        prefix,\n        suffixIcon,\n        popupContainer,\n        readOnly,\n        maxCount,\n        showSearch,\n        popupMatchSelectWidth,\n        persistence,\n        persisted_props,\n        persistence_type,\n        batchPropsNames,\n        ...others\n    } = props;\n\n    // 批属性监听\n    useEffect(() => {\n        if (batchPropsNames && batchPropsNames.length !== 0) {\n            const _batchPropsValues = {};\n            for (const propName of batchPropsNames) {\n                _batchPropsValues[propName] = props[propName];\n            }\n            setProps({\n                batchPropsValues: _batchPropsValues,\n            });\n        }\n    });\n\n    const context = useContext(PropsContext);\n    const formId = useContext(FormContext);\n\n    const updateItemValue = useFormStore((state) => state.updateItemValue);\n    const deleteItemValue = useFormStore((state) => state.deleteItemValue);\n\n    locale = (context && context.locale) || locale;\n\n    // 收集当前组件相关表单值\n    const currentFormValue = useFormStore(\n        (state) => state.values?.[formId]?.[name || id]\n    );\n\n    // 处理组件卸载后，对应表单项值的清除\n    useEffect(() => {\n        return () => {\n            // 若上文中存在有效表单id\n            if (formId && (name || id) && enableBatchControl) {\n                // 表单值更新\n                deleteItemValue(formId, name || id);\n            }\n        };\n    }, [name, id]);\n\n    useEffect(() => {\n        // 初始化value\n        if (defaultValue && !value) {\n            // 当defaultValue不为空且value为空时，为value初始化defaultValue对应的value值\n            setProps({ value: defaultValue });\n        }\n    }, []);\n\n    // 用于获取用户已选择值的回调函数\n    const updateSelectedValue = (e) => {\n        // AntdForm表单批量控制\n        if (formId && (name || id) && enableBatchControl) {\n            // 表单值更新\n            updateItemValue(formId, name || id, e);\n        }\n        setProps({ value: e });\n    };\n\n    const { run: onDebounceSearch } = useRequest(\n        (e) => {\n            setProps({ debounceSearchValue: e });\n        },\n        {\n            debounceWait: debounceWait,\n            manual: true,\n        }\n    );\n\n    const onSearch = (e) => {\n        setProps({\n            searchValue: e,\n        });\n    };\n\n    // 解决options为none时的问题\n    options = options || [];\n\n    // 基于dash端传入的options参数，推导出对应的组件\n    let optionsJsx = [];\n    // 快捷方式\n    if (options.every((item) => isNumber(item) || isString(item))) {\n        optionsJsx = options.map((item) => (\n            <Option value={item}>{item}</Option>\n        ));\n    } else {\n        for (let i = 0; i < options.length; i++) {\n            // 当存在分组时\n            if (options[i].hasOwnProperty('group')) {\n                const groupOptions = [];\n                // 构造OptGroup > Option结构\n                for (let j = 0; j < options[i].options.length; j++) {\n                    groupOptions.push(\n                        <Option\n                            value={options[i].options[j].value}\n                            disabled={options[i].options[j].disabled}\n                        >\n                            {options[i].options[j].colors ? (\n                                <div style={{ display: 'flex' }}>\n                                    <div\n                                        style={{\n                                            flex: 'none',\n                                            textAlign: 'center',\n                                            width: colorsNameWidth,\n                                            fontSize: 12,\n                                        }}\n                                    >\n                                        {options[i].options[j].label}\n                                    </div>\n                                    {colorsMode === 'sequential' ? (\n                                        <div\n                                            style={{\n                                                margin: '1px 0 1px 10px',\n                                                borderRadius: '2px',\n                                                flex: 'auto',\n                                                background:\n                                                    options[i].options[j].colors\n                                                        .length > 1\n                                                        ? `linear-gradient(to right, ${options[i].options[j].colors.join()})`\n                                                        : options[i].options[j]\n                                                              .colors[0],\n                                            }}\n                                        />\n                                    ) : (\n                                        <div\n                                            style={{\n                                                margin: '1px 0 1px 10px',\n                                                borderRadius: '2px',\n                                                flex: 'auto',\n                                                display: 'flex',\n                                            }}\n                                        >\n                                            {options[i].options[j].colors.map(\n                                                (c) => (\n                                                    <div\n                                                        style={{\n                                                            flex: 'auto',\n                                                            background: c,\n                                                        }}\n                                                    />\n                                                )\n                                            )}\n                                        </div>\n                                    )}\n                                </div>\n                            ) : (\n                                options[i].options[j].label\n                            )}\n                        </Option>\n                    );\n                }\n                optionsJsx.push(\n                    <OptGroup label={options[i].group}>{groupOptions}</OptGroup>\n                );\n            } else {\n                optionsJsx.push(\n                    <Option\n                        value={options[i].value}\n                        disabled={options[i].disabled}\n                    >\n                        {options[i].colors ? (\n                            <div style={{ display: 'flex' }}>\n                                <div\n                                    style={{\n                                        flex: 'none',\n                                        textAlign: 'center',\n                                        fontSize: 12,\n                                        width: colorsNameWidth,\n                                    }}\n                                >\n                                    {options[i].label}\n                                </div>\n                                {colorsMode === 'sequential' ? (\n                                    <div\n                                        style={{\n                                            margin: '1px 0 1px 10px',\n                                            borderRadius: '2px',\n                                            flex: 'auto',\n                                            background:\n                                                options[i].colors.length > 1\n                                                    ? `linear-gradient(to right, ${options[i].colors.join()})`\n                                                    : options[i].colors[0],\n                                        }}\n                                    />\n                                ) : (\n                                    <div\n                                        style={{\n                                            margin: '1px 0 1px 10px',\n                                            borderRadius: '2px',\n                                            flex: 'auto',\n                                            display: 'flex',\n                                        }}\n                                    >\n                                        {options[i].colors.map((c) => (\n                                            <div\n                                                style={{\n                                                    flex: 'auto',\n                                                    background: c,\n                                                }}\n                                            />\n                                        ))}\n                                    </div>\n                                )}\n                            </div>\n                        ) : (\n                            options[i].label\n                        )}\n                    </Option>\n                );\n            }\n        }\n    }\n\n    // 处理optionFilterProp映射\n    if (optionFilterProp === 'label') {\n        optionFilterProp = 'children';\n    }\n\n    const component_loading = useLoading();\n\n    return (\n        <ConfigProvider locale={str2Locale.get(locale)}>\n            <Select\n                // 提取具有data-*或aria-*通配格式的属性\n                {...pickBy(\n                    (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                    others\n                )}\n                id={id}\n                className={\n                    isString(className)\n                        ? className\n                        : className\n                          ? useCss(className)\n                          : undefined\n                }\n                style={style}\n                popupClassName={popupClassName}\n                key={key}\n                mode={mode}\n                allowClear={\n                    isUndefined(readOnly) || !readOnly ? allowClear : false\n                }\n                autoFocus={autoFocus}\n                placeholder={placeholder}\n                size={\n                    context && !isUndefined(context.componentSize)\n                        ? context.componentSize\n                        : size\n                }\n                variant={\n                    !variant ? (bordered ? 'outlined' : 'borderless') : variant\n                }\n                defaultValue={\n                    formId && (name || id) && enableBatchControl\n                        ? undefined\n                        : defaultValue\n                }\n                value={\n                    formId && (name || id) && enableBatchControl\n                        ? currentFormValue\n                        : value\n                }\n                onChange={readOnly ? undefined : updateSelectedValue}\n                maxTagCount={maxTagCount}\n                listHeight={listHeight}\n                disabled={\n                    context && !isUndefined(context.componentDisabled)\n                        ? context.componentDisabled\n                        : disabled\n                }\n                showSearch={isUndefined(showSearch) ? !readOnly : showSearch}\n                placement={placement}\n                status={status}\n                optionFilterProp={optionFilterProp}\n                filterOption={(inputValue, option) => {\n                    // 处理''特殊情况\n                    inputValue = inputValue || '';\n                    if (inputValue !== '') {\n                        if (optionFilterMode === 'case-insensitive') {\n                            // 进行大小写不敏感筛选\n                            return (String(option[optionFilterProp]) || '')\n                                .toLowerCase()\n                                .includes(inputValue.toLowerCase());\n                        } else if (optionFilterMode === 'case-sensitive') {\n                            // 判断输入的内容是否是当前选项筛选依据字段值的子串\n                            return String(option[optionFilterProp]).includes(\n                                inputValue\n                            );\n                        } else if (optionFilterMode === 'regex') {\n                            // 判断输入的正则规则是否匹配当前选项筛选依据字段值\n                            try {\n                                // 尝试进行正则匹配\n                                return eval(`/${inputValue}/`).test(\n                                    String(option[optionFilterProp])\n                                );\n                            } catch {\n                                // 忽略非法的正则表达式\n                                return false;\n                            }\n                        } else if (optionFilterMode === 'remote-match') {\n                            // remote-match模式下，均返回true\n                            return true;\n                        }\n                    }\n                    return false;\n                }}\n                autoClearSearchValue={autoClearSearchValue}\n                onSearch={(e) => {\n                    onSearch(e);\n                    onDebounceSearch(e);\n                }}\n                loading={autoSpin && component_loading}\n                notFoundContent={\n                    autoSpin && component_loading\n                        ? loadingEmptyContent || (\n                              <div\n                                  style={{\n                                      display: 'flex',\n                                      justifyContent: 'center',\n                                  }}\n                              >\n                                  <Spin />\n                              </div>\n                          )\n                        : emptyContent\n                }\n                dropdownRender={\n                    dropdownBefore || dropdownAfter\n                        ? (menu) => {\n                              return (\n                                  <>\n                                      {dropdownBefore}\n                                      {menu}\n                                      {dropdownAfter}\n                                  </>\n                              );\n                          }\n                        : undefined\n                }\n                prefix={prefix}\n                suffixIcon={suffixIcon}\n                data-dash-is-loading={component_loading}\n                getPopupContainer={\n                    popupContainer === 'parent'\n                        ? (triggerNode) => triggerNode.parentNode\n                        : undefined\n                }\n                open={isUndefined(readOnly) || !readOnly ? undefined : false}\n                maxCount={maxCount}\n                popupMatchSelectWidth={popupMatchSelectWidth}\n            >\n                {optionsJsx}\n            </Select>\n        </ConfigProvider>\n    );\n};\n\nexport default AntdSelect;\n\nAntdSelect.defaultProps = defaultProps;\nAntdSelect.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataEntry/AntdSlider.react.js",
    "content": "// react核心\nimport React, { useEffect, useContext } from 'react';\n// antd核心\nimport { Slider } from 'antd';\n// 辅助库\nimport { isString, isUndefined } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 上下文\nimport PropsContext from '../../contexts/PropsContext';\nimport FormContext from '../../contexts/FormContext';\n// 状态管理\nimport useFormStore from '../../store/formStore';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataEntry/AntdSlider.react';\n\n/**\n * 滑动输入条组件AntdSlider\n */\nconst AntdSlider = (props) => {\n    const {\n        id,\n        name,\n        className,\n        style,\n        styles,\n        classNames,\n        key,\n        enableBatchControl,\n        value,\n        defaultValue,\n        disabled,\n        autoFocus,\n        vertical,\n        range,\n        min,\n        max,\n        step,\n        marks,\n        tooltipVisible,\n        tooltipPrefix,\n        tooltipSuffix,\n        popupContainer,\n        readOnly,\n        setProps,\n        persistence,\n        persisted_props,\n        persistence_type,\n        batchPropsNames,\n        ...others\n    } = props;\n\n    // 批属性监听\n    useEffect(() => {\n        if (batchPropsNames && batchPropsNames.length !== 0) {\n            const _batchPropsValues = {};\n            for (const propName of batchPropsNames) {\n                _batchPropsValues[propName] = props[propName];\n            }\n            setProps({\n                batchPropsValues: _batchPropsValues,\n            });\n        }\n    });\n\n    const context = useContext(PropsContext);\n    const formId = useContext(FormContext);\n\n    const updateItemValue = useFormStore((state) => state.updateItemValue);\n    const deleteItemValue = useFormStore((state) => state.deleteItemValue);\n\n    // 收集当前组件相关表单值\n    const currentFormValue = useFormStore(\n        (state) => state.values?.[formId]?.[name || id]\n    );\n\n    // 处理组件卸载后，对应表单项值的清除\n    useEffect(() => {\n        return () => {\n            // 若上文中存在有效表单id\n            if (formId && (name || id) && enableBatchControl) {\n                // 表单值更新\n                deleteItemValue(formId, name || id);\n            }\n        };\n    }, [name, id]);\n\n    useEffect(() => {\n        // 初始化value\n        if (range) {\n            // 范围选择模式时\n            if (!value) {\n                setProps({\n                    value: defaultValue || [min, max],\n                    defaultValue: defaultValue || [min, max],\n                });\n            }\n        } else {\n            // 单值选择模式时\n            if (!value && value !== 0) {\n                setProps({\n                    value:\n                        defaultValue || defaultValue === 0 ? defaultValue : max,\n                    defaultValue:\n                        defaultValue || defaultValue === 0 ? defaultValue : max,\n                });\n            }\n        }\n    }, []);\n\n    // 设置tipFormatter格式化函数\n    const formatter = (e) => {\n        return tooltipPrefix + `${e}` + tooltipSuffix;\n    };\n\n    // 监听用户完成拖拽的动作\n    const onChange = (e) => {\n        if (!readOnly) {\n            // AntdForm表单批量控制\n            if (formId && (name || id) && enableBatchControl) {\n                // 表单值更新\n                updateItemValue(formId, name || id, e);\n            }\n            setProps({ value: e });\n        }\n    };\n\n    return (\n        <Slider\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            styles={styles}\n            classNames={classNames}\n            key={key}\n            defaultValue={\n                formId && (name || id) && enableBatchControl\n                    ? undefined\n                    : defaultValue\n            }\n            value={\n                formId && (name || id) && enableBatchControl\n                    ? currentFormValue\n                    : value\n            }\n            disabled={\n                context && !isUndefined(context.componentDisabled)\n                    ? context.componentDisabled\n                    : disabled\n            }\n            autoFocus={autoFocus}\n            vertical={vertical}\n            range={range}\n            min={min}\n            max={max}\n            step={step}\n            marks={marks}\n            tooltip={{\n                open: tooltipVisible,\n                getPopupContainer:\n                    popupContainer === 'parent'\n                        ? (triggerNode) => triggerNode.parentNode\n                        : undefined,\n                formatter: formatter,\n            }}\n            onChange={onChange}\n            data-dash-is-loading={useLoading()}\n        />\n    );\n};\n\nexport default AntdSlider;\n\nAntdSlider.defaultProps = defaultProps;\nAntdSlider.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataEntry/AntdSwitch.react.js",
    "content": "// react核心\nimport React, { useEffect, useContext } from 'react';\n// antd核心\nimport { Switch } from 'antd';\n// 辅助库\nimport { isUndefined, isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 上下文\nimport PropsContext from '../../contexts/PropsContext';\nimport FormContext from '../../contexts/FormContext';\n// 状态管理\nimport useFormStore from '../../store/formStore';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataEntry/AntdSwitch.react';\n\n/**\n * 开关组件AntdSwitch\n */\nconst AntdSwitch = (props) => {\n    const {\n        id,\n        style,\n        className,\n        key,\n        name,\n        enableBatchControl,\n        disabled,\n        autoFocus,\n        checked,\n        checkedChildren,\n        unCheckedChildren,\n        size,\n        loading,\n        readOnly,\n        setProps,\n        persistence,\n        persisted_props,\n        persistence_type,\n        batchPropsNames,\n        ...others\n    } = props;\n\n    // 批属性监听\n    useEffect(() => {\n        if (batchPropsNames && batchPropsNames.length !== 0) {\n            const _batchPropsValues = {};\n            for (const propName of batchPropsNames) {\n                _batchPropsValues[propName] = props[propName];\n            }\n            setProps({\n                batchPropsValues: _batchPropsValues,\n            });\n        }\n    });\n\n    const context = useContext(PropsContext);\n    const formId = useContext(FormContext);\n\n    const updateItemValue = useFormStore((state) => state.updateItemValue);\n    const deleteItemValue = useFormStore((state) => state.deleteItemValue);\n\n    // 收集当前组件相关表单值\n    const currentFormValue = useFormStore(\n        (state) => state.values?.[formId]?.[name || id]\n    );\n\n    // 处理组件卸载后，对应表单项值的清除\n    useEffect(() => {\n        return () => {\n            // 若上文中存在有效表单id\n            if (formId && (name || id) && enableBatchControl) {\n                // 表单值更新\n                deleteItemValue(formId, name || id);\n            }\n        };\n    }, [name, id]);\n\n    useEffect(() => {\n        if (isUndefined(checked)) {\n            setProps({ checked: false });\n        }\n    }, []);\n\n    const onChange = (e) => {\n        if (!readOnly) {\n            // AntdForm表单批量控制\n            if (formId && (name || id) && enableBatchControl) {\n                // 表单值更新\n                updateItemValue(formId, name || id, e);\n            }\n            setProps({ checked: e });\n        }\n    };\n\n    return (\n        <Switch\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            disabled={\n                context && !isUndefined(context.componentDisabled)\n                    ? context.componentDisabled\n                    : disabled\n            }\n            defaultChecked={checked}\n            autoFocus={autoFocus}\n            checkedChildren={checkedChildren}\n            checked={\n                formId && (name || id) && enableBatchControl\n                    ? currentFormValue\n                    : checked\n            }\n            unCheckedChildren={unCheckedChildren}\n            size={size}\n            loading={loading}\n            onChange={onChange}\n            data-dash-is-loading={useLoading()}\n        />\n    );\n};\n\nexport default AntdSwitch;\n\nAntdSwitch.defaultProps = defaultProps;\nAntdSwitch.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataEntry/AntdTimePicker.react.js",
    "content": "// react核心\nimport React, { useEffect, useContext } from 'react';\n// antd核心\nimport { TimePicker, ConfigProvider } from 'antd';\n// 辅助库\nimport dayjs from 'dayjs';\nimport { isString, isUndefined } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { str2Locale } from '../../components/locales.react';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 上下文\nimport PropsContext from '../../contexts/PropsContext';\nimport FormContext from '../../contexts/FormContext';\n// 状态管理\nimport useFormStore from '../../store/formStore';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataEntry/AntdTimePicker.react';\n\n/**\n * 时间选择组件AntdTimePicker\n */\nconst AntdTimePicker = (props) => {\n    let {\n        id,\n        className,\n        style,\n        popupClassName,\n        key,\n        name,\n        enableBatchControl,\n        locale,\n        setProps,\n        disabled,\n        hourStep,\n        minuteStep,\n        secondStep,\n        format,\n        value,\n        defaultValue,\n        use12Hours,\n        allowClear,\n        autoFocus,\n        placeholder,\n        placement,\n        bordered,\n        variant,\n        size,\n        status,\n        popupContainer,\n        readOnly,\n        extraFooter,\n        showNow,\n        prefix,\n        suffixIcon,\n        persistence,\n        persisted_props,\n        persistence_type,\n        batchPropsNames,\n        needConfirm,\n        ...others\n    } = props;\n\n    // 批属性监听\n    useEffect(() => {\n        if (batchPropsNames && batchPropsNames.length !== 0) {\n            const _batchPropsValues = {};\n            for (const propName of batchPropsNames) {\n                _batchPropsValues[propName] = props[propName];\n            }\n            setProps({\n                batchPropsValues: _batchPropsValues,\n            });\n        }\n    });\n\n    const context = useContext(PropsContext);\n    const formId = useContext(FormContext);\n\n    const updateItemValue = useFormStore((state) => state.updateItemValue);\n    const deleteItemValue = useFormStore((state) => state.deleteItemValue);\n\n    locale = (context && context.locale) || locale;\n\n    // 收集当前组件相关表单值\n    const currentFormValue = useFormStore(\n        (state) => state.values?.[formId]?.[name || id]\n    );\n\n    // 处理组件卸载后，对应表单项值的清除\n    useEffect(() => {\n        return () => {\n            // 若上文中存在有效表单id\n            if (formId && (name || id) && enableBatchControl) {\n                // 表单值更新\n                deleteItemValue(formId, name || id);\n            }\n        };\n    }, [name, id]);\n\n    useEffect(() => {\n        // 初始化value\n        if (defaultValue && !value) {\n            // 当defaultValue不为空且value为空时，为value初始化defaultValue对应值\n            setProps({ value: defaultValue });\n        }\n    }, []);\n\n    const onChange = (time, timeString) => {\n        if (isString(timeString)) {\n            // AntdForm表单批量控制\n            if (formId && (name || id) && enableBatchControl) {\n                // 表单值更新\n                updateItemValue(formId, name || id, timeString);\n            }\n            setProps({ value: timeString });\n        }\n    };\n\n    return (\n        <div>\n            <ConfigProvider locale={str2Locale.get(locale)}>\n                <TimePicker\n                    // 提取具有data-*或aria-*通配格式的属性\n                    {...pickBy(\n                        (_, k) =>\n                            k.startsWith('data-') || k.startsWith('aria-'),\n                        others\n                    )}\n                    id={id}\n                    className={\n                        isString(className)\n                            ? className\n                            : className\n                              ? useCss(className)\n                              : undefined\n                    }\n                    style={style}\n                    popupClassName={popupClassName}\n                    key={key}\n                    onChange={onChange}\n                    placeholder={placeholder}\n                    placement={placement}\n                    variant={\n                        !variant\n                            ? bordered\n                                ? 'outlined'\n                                : 'borderless'\n                            : variant\n                    }\n                    size={\n                        context && !isUndefined(context.componentSize)\n                            ? context.componentSize\n                            : size\n                    }\n                    disabled={\n                        context && !isUndefined(context.componentDisabled)\n                            ? context.componentDisabled\n                            : disabled\n                    }\n                    hourStep={hourStep}\n                    minuteStep={minuteStep}\n                    secondStep={secondStep}\n                    format={format}\n                    defaultValue={\n                        formId && (name || id) && enableBatchControl\n                            ? undefined\n                            : defaultValue\n                              ? dayjs(defaultValue, format)\n                              : undefined\n                    }\n                    value={\n                        formId && (name || id) && enableBatchControl\n                            ? currentFormValue\n                                ? dayjs(currentFormValue, format)\n                                : undefined\n                            : value\n                              ? dayjs(value, format)\n                              : undefined\n                    }\n                    use12Hours={use12Hours}\n                    allowClear={isUndefined(readOnly) ? allowClear : !readOnly}\n                    autoFocus={autoFocus}\n                    status={status}\n                    renderExtraFooter={() => extraFooter}\n                    showNow={showNow}\n                    needConfirm={needConfirm}\n                    prefix={prefix}\n                    suffixIcon={suffixIcon}\n                    data-dash-is-loading={useLoading()}\n                    getPopupContainer={\n                        popupContainer === 'parent'\n                            ? (triggerNode) => triggerNode.parentNode\n                            : undefined\n                    }\n                    open={\n                        isUndefined(readOnly) || !readOnly ? undefined : false\n                    }\n                    inputReadOnly={readOnly}\n                />\n            </ConfigProvider>\n        </div>\n    );\n};\n\nexport default AntdTimePicker;\n\nAntdTimePicker.defaultProps = defaultProps;\nAntdTimePicker.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataEntry/AntdTimeRangePicker.react.js",
    "content": "// react核心\nimport React, { useEffect, useContext } from 'react';\n// antd核心\nimport { TimePicker, ConfigProvider } from 'antd';\n// 辅助库\nimport dayjs from 'dayjs';\nimport { isUndefined, isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { str2Locale } from '../../components/locales.react';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 上下文\nimport PropsContext from '../../contexts/PropsContext';\nimport FormContext from '../../contexts/FormContext';\n// 状态管理\nimport useFormStore from '../../store/formStore';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataEntry/AntdTimeRangePicker.react';\n\nconst { RangePicker } = TimePicker;\n\n/**\n * 时间范围选择组件AntdTimeRangePicker\n */\nconst AntdTimeRangePicker = (props) => {\n    let {\n        id,\n        className,\n        style,\n        popupClassName,\n        key,\n        name,\n        enableBatchControl,\n        locale,\n        setProps,\n        value,\n        defaultValue,\n        placeholder,\n        placement,\n        disabled,\n        hourStep,\n        minuteStep,\n        secondStep,\n        format,\n        use12Hours,\n        allowClear,\n        autoFocus,\n        bordered,\n        variant,\n        size,\n        open,\n        status,\n        prefix,\n        suffixIcon,\n        popupContainer,\n        readOnly,\n        extraFooter,\n        persistence,\n        persisted_props,\n        persistence_type,\n        batchPropsNames,\n        needConfirm,\n        ...others\n    } = props;\n\n    // 批属性监听\n    useEffect(() => {\n        if (batchPropsNames && batchPropsNames.length !== 0) {\n            const _batchPropsValues = {};\n            for (const propName of batchPropsNames) {\n                _batchPropsValues[propName] = props[propName];\n            }\n            setProps({\n                batchPropsValues: _batchPropsValues,\n            });\n        }\n    });\n\n    const context = useContext(PropsContext);\n    const formId = useContext(FormContext);\n\n    const updateItemValue = useFormStore((state) => state.updateItemValue);\n    const deleteItemValue = useFormStore((state) => state.deleteItemValue);\n\n    locale = (context && context.locale) || locale;\n\n    // 收集当前组件相关表单值\n    const currentFormValue = useFormStore(\n        (state) => state.values?.[formId]?.[name || id]\n    );\n\n    // 处理组件卸载后，对应表单项值的清除\n    useEffect(() => {\n        return () => {\n            // 若上文中存在有效表单id\n            if (formId && (name || id) && enableBatchControl) {\n                // 表单值更新\n                deleteItemValue(formId, name || id);\n            }\n        };\n    }, [name, id]);\n\n    useEffect(() => {\n        // 初始化value\n        if (defaultValue && !value) {\n            // 当defaultValue不为空且value为空时，为value初始化defaultValue对应值\n            setProps({ value: defaultValue });\n        }\n    }, []);\n\n    const onChange = (time, timeString) => {\n        // AntdForm表单批量控制\n        if (formId && (name || id) && enableBatchControl) {\n            // 表单值更新\n            if (timeString[0] !== '' && timeString[1] !== '') {\n                updateItemValue(formId, name || id, [\n                    timeString[0],\n                    timeString[1],\n                ]);\n            } else {\n                updateItemValue(formId, name || id, null);\n            }\n        }\n        if (timeString[0] !== '' && timeString[1] !== '') {\n            setProps({ value: [timeString[0], timeString[1]] });\n        } else {\n            setProps({ value: null });\n        }\n    };\n\n    return (\n        <div>\n            <ConfigProvider locale={str2Locale.get(locale)}>\n                <RangePicker\n                    // 提取具有data-*或aria-*通配格式的属性\n                    {...pickBy(\n                        (_, k) =>\n                            k.startsWith('data-') || k.startsWith('aria-'),\n                        others\n                    )}\n                    id={id}\n                    className={\n                        isString(className)\n                            ? className\n                            : className\n                              ? useCss(className)\n                              : undefined\n                    }\n                    style={style}\n                    popupClassName={popupClassName}\n                    key={key}\n                    onChange={onChange}\n                    disabled={\n                        context && !isUndefined(context.componentDisabled)\n                            ? [\n                                  context.componentDisabled,\n                                  context.componentDisabled,\n                              ]\n                            : disabled && disabled.length === 2\n                              ? disabled\n                              : undefined\n                    }\n                    allowEmpty={\n                        disabled && disabled.length === 2 ? disabled : undefined\n                    }\n                    placeholder={\n                        placeholder && placeholder.length === 2\n                            ? placeholder\n                            : undefined\n                    }\n                    placement={placement}\n                    variant={\n                        !variant\n                            ? bordered\n                                ? 'outlined'\n                                : 'borderless'\n                            : variant\n                    }\n                    size={\n                        context && !isUndefined(context.componentSize)\n                            ? context.componentSize\n                            : size\n                    }\n                    hourStep={hourStep}\n                    minuteStep={minuteStep}\n                    secondStep={secondStep}\n                    format={format}\n                    use12Hours={use12Hours}\n                    allowClear={isUndefined(readOnly) ? allowClear : !readOnly}\n                    autoFocus={autoFocus}\n                    defaultValue={\n                        formId && (name || id) && enableBatchControl\n                            ? undefined\n                            : defaultValue && defaultValue.length === 2\n                              ? [\n                                    defaultValue[0] !== ''\n                                        ? dayjs(defaultValue[0], format)\n                                        : undefined,\n                                    defaultValue[1] !== ''\n                                        ? dayjs(defaultValue[1], format)\n                                        : undefined,\n                                ]\n                              : undefined\n                    }\n                    value={\n                        formId && (name || id) && enableBatchControl\n                            ? currentFormValue && currentFormValue.length === 2\n                                ? [\n                                      currentFormValue[0] !== ''\n                                          ? dayjs(currentFormValue[0], format)\n                                          : undefined,\n                                      currentFormValue[1] !== ''\n                                          ? dayjs(currentFormValue[1], format)\n                                          : undefined,\n                                  ]\n                                : undefined\n                            : value && value.length === 2\n                              ? [\n                                    value[0] !== ''\n                                        ? dayjs(value[0], format)\n                                        : undefined,\n                                    value[1] !== ''\n                                        ? dayjs(value[1], format)\n                                        : undefined,\n                                ]\n                              : undefined\n                    }\n                    status={status}\n                    renderExtraFooter={() => extraFooter}\n                    needConfirm={needConfirm}\n                    data-dash-is-loading={useLoading()}\n                    prefix={prefix}\n                    suffixIcon={suffixIcon}\n                    getPopupContainer={\n                        popupContainer === 'parent'\n                            ? (triggerNode) => triggerNode.parentNode\n                            : undefined\n                    }\n                    open={isUndefined(readOnly) || !readOnly ? open : false}\n                    onOpenChange={(e) => setProps({ open: e })}\n                    inputReadOnly={readOnly}\n                />\n            </ConfigProvider>\n        </div>\n    );\n};\n\nexport default AntdTimeRangePicker;\n\nAntdTimeRangePicker.defaultProps = defaultProps;\nAntdTimeRangePicker.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataEntry/AntdTransfer.react.js",
    "content": "// react核心\nimport React, { useContext, useEffect } from 'react';\n// antd核心\nimport { Transfer, ConfigProvider } from 'antd';\n// 辅助库\nimport { str2Locale, locale2text } from '../../components/locales.react';\nimport { isString, isUndefined } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 上下文\nimport PropsContext from '../../contexts/PropsContext';\nimport FormContext from '../../contexts/FormContext';\n// 状态管理\nimport useFormStore from '../../store/formStore';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataEntry/AntdTransfer.react';\n\n/**\n * 穿梭框组件AntdTransfer\n */\nconst AntdTransfer = (props) => {\n    let {\n        id,\n        className,\n        style,\n        key,\n        name,\n        enableBatchControl,\n        locale,\n        setProps,\n        dataSource,\n        selectionsIcon,\n        height,\n        pagination,\n        oneWay,\n        operations,\n        showSearch,\n        optionFilterMode,\n        showSelectAll,\n        titles,\n        disabled,\n        targetKeys,\n        status,\n        readOnly,\n        persistence,\n        persisted_props,\n        persistence_type,\n        batchPropsNames,\n        ...others\n    } = props;\n\n    // 批属性监听\n    useEffect(() => {\n        if (batchPropsNames && batchPropsNames.length !== 0) {\n            const _batchPropsValues = {};\n            for (const propName of batchPropsNames) {\n                _batchPropsValues[propName] = props[propName];\n            }\n            setProps({\n                batchPropsValues: _batchPropsValues,\n            });\n        }\n    });\n\n    const context = useContext(PropsContext);\n    const formId = useContext(FormContext);\n\n    const updateItemValue = useFormStore((state) => state.updateItemValue);\n    const deleteItemValue = useFormStore((state) => state.deleteItemValue);\n\n    locale = (context && context.locale) || locale;\n\n    // 收集当前组件相关表单值\n    const currentFormValue = useFormStore(\n        (state) => state.values?.[formId]?.[name || id]\n    );\n\n    // 处理组件卸载后，对应表单项值的清除\n    useEffect(() => {\n        return () => {\n            // 若上文中存在有效表单id\n            if (formId && (name || id) && enableBatchControl) {\n                // 表单值更新\n                deleteItemValue(formId, name || id);\n            }\n        };\n    }, [name, id]);\n\n    if (!titles) {\n        titles = locale2text.AntdTransfer[locale].titles;\n    }\n\n    // 监听选项移动事件\n    const listenMove = (nextTargetKeys, moveDirection, moveKeys) => {\n        if (!readOnly) {\n            // AntdForm表单批量控制\n            if (formId && (name || id) && enableBatchControl) {\n                // 表单值更新\n                updateItemValue(formId, name || id, nextTargetKeys);\n            }\n            setProps({\n                targetKeys: nextTargetKeys,\n                moveDirection: moveDirection,\n                moveKeys: moveKeys,\n            });\n        }\n    };\n\n    return (\n        <ConfigProvider locale={str2Locale.get(locale)}>\n            <Transfer\n                // 提取具有data-*或aria-*通配格式的属性\n                {...pickBy(\n                    (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                    others\n                )}\n                id={id}\n                style={style}\n                className={\n                    isString(className)\n                        ? className\n                        : className\n                          ? useCss(className)\n                          : undefined\n                }\n                key={key}\n                dataSource={dataSource}\n                selectionsIcon={selectionsIcon}\n                targetKeys={\n                    formId && (name || id) && enableBatchControl\n                        ? currentFormValue\n                        : targetKeys\n                }\n                onChange={listenMove}\n                render={(item) => item.title}\n                pagination={pagination}\n                oneWay={oneWay}\n                operations={operations}\n                showSearch={showSearch}\n                filterOption={\n                    showSearch\n                        ? (inputValue, option) => {\n                              // 处理''特殊情况\n                              inputValue = inputValue || '';\n                              if (inputValue !== '') {\n                                  if (optionFilterMode === 'case-insensitive') {\n                                      // 进行大小写不敏感筛选\n                                      return (option.title || '')\n                                          .toLowerCase()\n                                          .includes(inputValue.toLowerCase());\n                                  } else if (\n                                      optionFilterMode === 'case-sensitive'\n                                  ) {\n                                      // 判断输入的内容是否是当前选项筛选依据字段值的子串\n                                      return option.title.includes(inputValue);\n                                  } else if (optionFilterMode === 'regex') {\n                                      // 判断输入的正则规则是否匹配当前选项筛选依据字段值\n                                      try {\n                                          // 尝试进行正则匹配\n                                          return eval(`/${inputValue}/`).test(\n                                              option.title\n                                          );\n                                      } catch {\n                                          // 忽略非法的正则表达式\n                                          return false;\n                                      }\n                                  }\n                              }\n                              return false;\n                          }\n                        : undefined\n                }\n                showSelectAll={showSelectAll}\n                titles={titles}\n                disabled={\n                    context && !isUndefined(context.componentDisabled)\n                        ? context.componentDisabled\n                        : disabled\n                }\n                status={status}\n                listStyle={{\n                    overflowX: 'auto',\n                    height: height,\n                    width: '100%',\n                }}\n                data-dash-is-loading={useLoading()}\n            />\n        </ConfigProvider>\n    );\n};\n\nexport default AntdTransfer;\n\nAntdTransfer.defaultProps = defaultProps;\nAntdTransfer.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataEntry/AntdTreeSelect.react.js",
    "content": "// react核心\nimport React, { useEffect, useMemo, useContext, useRef } from 'react';\n// antd核心\nimport { TreeSelect, ConfigProvider } from 'antd';\n// 辅助库\nimport { str2Locale } from '../../components/locales.react';\nimport { isUndefined, isString, cloneDeep } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { flatToTree, useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 上下文\nimport PropsContext from '../../contexts/PropsContext';\nimport FormContext from '../../contexts/FormContext';\n// 状态管理\nimport useFormStore from '../../store/formStore';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataEntry/AntdTreeSelect.react';\n\nconst { SHOW_ALL, SHOW_CHILD, SHOW_PARENT } = TreeSelect;\n\n// 定义勾选项回填策略映射字典\nconst str2ShowCheckedStrategy = new Map([\n    ['show-all', SHOW_ALL],\n    ['show-child', SHOW_CHILD],\n    ['show-parent', SHOW_PARENT],\n]);\n\n// 递归替换originTreeData中节点的title为treeNodeKeyToTitle中对应的值\nconst replaceNodeTitle = (originTreeData, treeNodeKeyToTitle) => {\n    // 若当前originTreeData为数组\n    if (Array.isArray(originTreeData)) {\n        // 遍历originTreeData\n        for (let i = 0; i < originTreeData.length; i++) {\n            // 递归替换originTreeData中节点的title为treeNodeKeyToTitle中对应的值\n            originTreeData[i] = replaceNodeTitle(\n                originTreeData[i],\n                treeNodeKeyToTitle\n            );\n        }\n    } else {\n        // 否则针对当前节点对象，当treeNodeKeyToTitle中存在对应key时，替换title\n        if (treeNodeKeyToTitle[originTreeData.key]) {\n            originTreeData.title = treeNodeKeyToTitle[originTreeData.key];\n        }\n        // 若当前节点对象存在children属性\n        if (originTreeData.children) {\n            // 递归替换originTreeData中节点的title为treeNodeKeyToTitle中对应的值\n            originTreeData.children = replaceNodeTitle(\n                originTreeData.children,\n                treeNodeKeyToTitle\n            );\n        }\n    }\n    // 返回处理后的originTreeData\n    return originTreeData;\n};\n\n/**\n * 树选择组件AntdTreeSelect\n */\nconst AntdTreeSelect = (props) => {\n    let {\n        id,\n        style,\n        className,\n        popupClassName,\n        key,\n        name,\n        enableBatchControl,\n        locale,\n        treeData,\n        treeNodeKeyToTitle,\n        treeDataMode,\n        allowClear,\n        bordered,\n        variant,\n        treeLine,\n        listHeight,\n        placeholder,\n        value,\n        defaultValue,\n        maxCount,\n        maxTagCount,\n        maxTagPlaceholder,\n        maxTagTextLength,\n        multiple,\n        size,\n        prefix,\n        suffixIcon,\n        switcherIcon,\n        treeCheckable,\n        treeCheckStrictly,\n        treeDefaultExpandAll,\n        treeDefaultExpandedKeys,\n        treeExpandedKeys,\n        virtual,\n        disabled,\n        placement,\n        status,\n        treeNodeFilterProp,\n        treeNodeFilterMode,\n        autoClearSearchValue,\n        popupContainer,\n        setProps,\n        readOnly,\n        showCheckedStrategy,\n        dropdownBefore,\n        dropdownAfter,\n        enableAsyncLoad,\n        persistence,\n        persisted_props,\n        persistence_type,\n        batchPropsNames,\n        ...others\n    } = props;\n\n    // 异步数据加载标识\n    const dataLoading = useRef(false);\n\n    // 每次treeData更新后，尝试还原dataLoading状态\n    useEffect(() => {\n        if (dataLoading.current) {\n            dataLoading.current = false;\n        }\n    }, [treeData]);\n\n    // 批属性监听\n    useEffect(() => {\n        if (batchPropsNames && batchPropsNames.length !== 0) {\n            const _batchPropsValues = {};\n            for (const propName of batchPropsNames) {\n                _batchPropsValues[propName] = props[propName];\n            }\n            setProps({\n                batchPropsValues: _batchPropsValues,\n            });\n        }\n    });\n\n    const context = useContext(PropsContext);\n    const formId = useContext(FormContext);\n\n    const updateItemValue = useFormStore((state) => state.updateItemValue);\n    const deleteItemValue = useFormStore((state) => state.deleteItemValue);\n\n    locale = (context && context.locale) || locale;\n\n    // 收集当前组件相关表单值\n    const currentFormValue = useFormStore(\n        (state) => state.values?.[formId]?.[name || id]\n    );\n\n    // 处理组件卸载后，对应表单项值的清除\n    useEffect(() => {\n        return () => {\n            // 若上文中存在有效表单id\n            if (formId && (name || id) && enableBatchControl) {\n                // 表单值更新\n                deleteItemValue(formId, name || id);\n            }\n        };\n    }, [name, id]);\n\n    useEffect(() => {\n        if (!value && defaultValue) {\n            setProps({ value: defaultValue });\n        }\n        if (!treeExpandedKeys && treeDefaultExpandedKeys) {\n            setProps({ treeExpandedKeys: treeDefaultExpandedKeys });\n        }\n    }, []);\n\n    const flatToTreeData = useMemo(() => {\n        return flatToTree(treeData);\n    }, [treeData]);\n\n    // 用于获取用户已选择值的回调函数\n    const updateSelectedValue = (e) => {\n        if (treeCheckStrictly) {\n            // AntdForm表单批量控制\n            if (formId && (name || id) && enableBatchControl) {\n                // 表单值更新\n                updateItemValue(\n                    formId,\n                    name || id,\n                    e.map((item) => item.value)\n                );\n            }\n            setProps({ value: e.map((item) => item.value) });\n        } else {\n            // AntdForm表单批量控制\n            if (formId && (name || id) && enableBatchControl) {\n                // 表单值更新\n                updateItemValue(formId, name || id, e);\n            }\n            setProps({ value: e });\n        }\n    };\n\n    return (\n        <ConfigProvider locale={str2Locale.get(locale)}>\n            <TreeSelect\n                // 提取具有data-*或aria-*通配格式的属性\n                {...pickBy(\n                    (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                    others\n                )}\n                id={id}\n                className={\n                    isString(className)\n                        ? className\n                        : className\n                          ? useCss(className)\n                          : undefined\n                }\n                style={{\n                    width: '100%',\n                    ...style,\n                }}\n                popupClassName={popupClassName}\n                key={key}\n                treeData={\n                    treeNodeKeyToTitle\n                        ? replaceNodeTitle(\n                              cloneDeep(\n                                  treeDataMode === 'flat'\n                                      ? flatToTreeData\n                                      : treeData\n                              ),\n                              treeNodeKeyToTitle\n                          )\n                        : treeDataMode === 'flat'\n                          ? flatToTreeData\n                          : treeData\n                }\n                allowClear={isUndefined(readOnly) ? allowClear : !readOnly}\n                variant={\n                    !variant ? (bordered ? 'outlined' : 'borderless') : variant\n                }\n                treeLine={treeLine}\n                listHeight={listHeight}\n                placeholder={placeholder}\n                defaultValue={\n                    formId && (name || id) && enableBatchControl\n                        ? undefined\n                        : defaultValue\n                }\n                value={\n                    formId && (name || id) && enableBatchControl\n                        ? currentFormValue\n                        : value\n                }\n                maxCount={maxCount}\n                maxTagCount={maxTagCount}\n                maxTagPlaceholder={maxTagPlaceholder}\n                maxTagTextLength={maxTagTextLength}\n                multiple={multiple}\n                size={\n                    context && !isUndefined(context.componentSize)\n                        ? context.componentSize\n                        : size\n                }\n                prefix={prefix}\n                suffixIcon={suffixIcon}\n                switcherIcon={switcherIcon}\n                treeCheckable={treeCheckable}\n                showCheckedStrategy={str2ShowCheckedStrategy.get(\n                    showCheckedStrategy\n                )}\n                treeCheckStrictly={treeCheckStrictly}\n                treeDefaultExpandAll={treeDefaultExpandAll}\n                treeDefaultExpandedKeys={treeDefaultExpandedKeys}\n                treeExpandedKeys={treeExpandedKeys}\n                onChange={readOnly ? undefined : updateSelectedValue}\n                showSearch={readOnly ? false : true}\n                virtual={virtual}\n                disabled={\n                    context && !isUndefined(context.componentDisabled)\n                        ? context.componentDisabled\n                        : disabled\n                }\n                placement={placement}\n                status={status}\n                treeNodeFilterProp={treeNodeFilterProp}\n                filterTreeNode={(inputValue, treeNode) => {\n                    // 处理''特殊情况\n                    inputValue = inputValue || '';\n                    if (inputValue !== '') {\n                        if (treeNodeFilterMode === 'case-insensitive') {\n                            // 进行大小写不敏感筛选\n                            return (treeNode[treeNodeFilterProp] || '')\n                                .toLowerCase()\n                                .includes(inputValue.toLowerCase());\n                        } else if (treeNodeFilterMode === 'case-sensitive') {\n                            // 判断输入的内容是否是当前选项筛选依据字段值的子串\n                            return treeNode[treeNodeFilterProp].includes(\n                                inputValue\n                            );\n                        } else if (treeNodeFilterMode === 'regex') {\n                            // 判断输入的正则规则是否匹配当前选项筛选依据字段值\n                            try {\n                                // 尝试进行正则匹配\n                                return eval(`/${inputValue}/`).test(\n                                    treeNode[treeNodeFilterProp]\n                                );\n                            } catch {\n                                // 忽略非法的正则表达式\n                                return false;\n                            }\n                        }\n                    }\n                    return false;\n                }}\n                autoClearSearchValue={autoClearSearchValue}\n                dropdownRender={\n                    dropdownBefore || dropdownAfter\n                        ? (menu) => {\n                              return (\n                                  <>\n                                      {dropdownBefore}\n                                      {menu}\n                                      {dropdownAfter}\n                                  </>\n                              );\n                          }\n                        : undefined\n                }\n                onTreeExpand={(e) => {\n                    setProps({ treeExpandedKeys: e });\n                }}\n                data-dash-is-loading={useLoading()}\n                getPopupContainer={\n                    popupContainer === 'parent'\n                        ? (triggerNode) => triggerNode.parentNode\n                        : undefined\n                }\n                open={isUndefined(readOnly) || !readOnly ? undefined : false}\n                loadData={\n                    enableAsyncLoad\n                        ? (node) => {\n                              // 更新最新的异步加载数据目标节点\n                              setProps({\n                                  loadingNode: {\n                                      key: node.key,\n                                      title: node.title,\n                                      value: node.value,\n                                  },\n                              });\n                              return new Promise((resolve) => {\n                                  // 更新数据异步加载标识\n                                  dataLoading.current = true;\n                                  // 轮询检测是否加载完成\n                                  const timer = setInterval(() => {\n                                      if (!dataLoading.current) {\n                                          clearInterval(timer);\n                                          resolve();\n                                      }\n                                  }, 200);\n                              });\n                          }\n                        : undefined\n                }\n            />\n        </ConfigProvider>\n    );\n};\n\nexport default AntdTreeSelect;\n\nAntdTreeSelect.defaultProps = defaultProps;\nAntdTreeSelect.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataEntry/check-card/AntdCheckCard.react.js",
    "content": "// react核心\nimport React, { useEffect, useContext } from 'react';\n// antd核心\nimport { CheckCard } from '@ant-design/pro-components';\n// 辅助库\nimport { isUndefined, isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../../../components/utils';\n// 自定义hooks\nimport useCss from '../../../hooks/useCss';\n// 上下文\nimport PropsContext from '../../../contexts/PropsContext';\nimport FormContext from '../../../contexts/FormContext';\n// 状态管理\nimport useFormStore from '../../../store/formStore';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../../components/dataEntry/check-card/AntdCheckCard.react';\n\n/**\n * 选择卡片组件AntdCheckCard\n */\nconst AntdCheckCard = (props) => {\n    const {\n        id,\n        children,\n        className,\n        style,\n        key,\n        name,\n        enableBatchControl,\n        checked,\n        bordered,\n        value,\n        defaultChecked,\n        disabled,\n        size,\n        readOnly,\n        setProps,\n        persistence,\n        persisted_props,\n        persistence_type,\n        ...others\n    } = props;\n\n    const context = useContext(PropsContext);\n    const formId = useContext(FormContext);\n\n    const updateItemValue = useFormStore((state) => state.updateItemValue);\n    const deleteItemValue = useFormStore((state) => state.deleteItemValue);\n\n    // 处理AntdForm表单值搜集功能\n    useEffect(() => {\n        // 若上文中存在有效表单id\n        if (formId && (name || id) && enableBatchControl) {\n            // 表单值更新\n            updateItemValue(formId, name || id, checked);\n        }\n    }, [checked, name, id]);\n\n    // 处理组件卸载后，对应表单项值的清除\n    useEffect(() => {\n        return () => {\n            // 若上文中存在有效表单id\n            if (formId && (name || id) && enableBatchControl) {\n                // 表单值更新\n                deleteItemValue(formId, name || id);\n            }\n        };\n    }, [name, id]);\n\n    useEffect(() => {\n        if (!isUndefined(defaultChecked) && isUndefined(checked)) {\n            setProps({ checked: defaultChecked });\n        }\n    }, []);\n\n    return (\n        <CheckCard\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            description={children}\n            checked={checked}\n            bordered={bordered}\n            value={value}\n            defaultChecked={defaultChecked}\n            disabled={\n                context && !isUndefined(context.componentDisabled)\n                    ? context.componentDisabled\n                    : disabled\n            }\n            size={size}\n            onChange={(e) => {\n                if (!readOnly) {\n                    setProps({ checked: e });\n                }\n            }}\n            data-dash-is-loading={useLoading()}\n        />\n    );\n};\n\nexport default AntdCheckCard;\n\nAntdCheckCard.defaultProps = defaultProps;\nAntdCheckCard.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataEntry/check-card/AntdCheckCardGroup.react.js",
    "content": "// react核心\nimport React, { useEffect, useContext } from 'react';\n// antd核心\nimport { CheckCard } from '@ant-design/pro-components';\n// 辅助库\nimport { parseChildrenToArray, useLoading } from '../../../components/utils';\nimport { isString, isUndefined } from 'lodash';\nimport { pickBy } from 'ramda';\n// 自定义hooks\nimport useCss from '../../../hooks/useCss';\n// 上下文\nimport PropsContext from '../../../contexts/PropsContext';\nimport FormContext from '../../../contexts/FormContext';\n// 状态管理\nimport useFormStore from '../../../store/formStore';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../../components/dataEntry/check-card/AntdCheckCardGroup.react';\n\n/**\n * 组合选择卡片组件AntdCheckCardGroup\n */\nconst AntdCheckCardGroup = (props) => {\n    let {\n        id,\n        children,\n        className,\n        style,\n        key,\n        name,\n        enableBatchControl,\n        multiple,\n        allowNoValue,\n        bordered,\n        value,\n        defaultValue,\n        disabled,\n        size,\n        readOnly,\n        setProps,\n        persistence,\n        persisted_props,\n        persistence_type,\n        ...others\n    } = props;\n\n    const context = useContext(PropsContext);\n    const formId = useContext(FormContext);\n\n    const updateItemValue = useFormStore((state) => state.updateItemValue);\n    const deleteItemValue = useFormStore((state) => state.deleteItemValue);\n\n    // 处理AntdForm表单值搜集功能\n    useEffect(() => {\n        // 若上文中存在有效表单id\n        if (formId && (name || id) && enableBatchControl) {\n            // 表单值更新\n            updateItemValue(formId, name || id, value);\n        }\n    }, [value, name, id]);\n\n    // 处理组件卸载后，对应表单项值的清除\n    useEffect(() => {\n        return () => {\n            // 若上文中存在有效表单id\n            if (formId && (name || id) && enableBatchControl) {\n                // 表单值更新\n                deleteItemValue(formId, name || id);\n            }\n        };\n    }, [name, id]);\n\n    useEffect(() => {\n        if (defaultValue && !value) {\n            setProps({ value: defaultValue });\n        }\n    }, []);\n\n    children = parseChildrenToArray(children);\n\n    return (\n        <CheckCard.Group\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            multiple={multiple}\n            bordered={bordered}\n            value={value}\n            defaultValue={defaultValue}\n            disabled={\n                context && !isUndefined(context.componentDisabled)\n                    ? context.componentDisabled\n                    : disabled\n            }\n            size={size}\n            onChange={(e) => {\n                // 只读模式下不进行值更新\n                if (!readOnly) {\n                    if (allowNoValue) {\n                        setProps({ value: e });\n                    } else {\n                        if (e && e.length !== 0) {\n                            setProps({ value: e });\n                        }\n                    }\n                }\n            }}\n            data-dash-is-loading={useLoading()}\n        >\n            {children}\n        </CheckCard.Group>\n    );\n};\n\nexport default AntdCheckCardGroup;\n\nAntdCheckCardGroup.defaultProps = defaultProps;\nAntdCheckCardGroup.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataEntry/form/AntdForm.react.js",
    "content": "// react核心\nimport { useEffect } from 'react';\n// antd核心\nimport { Form } from 'antd';\n// 辅助库\nimport { isString, isUndefined, isEmpty } from 'lodash';\nimport { useUnmount } from 'ahooks';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../../../components/utils';\n// 自定义hooks\nimport useCss from '../../../hooks/useCss';\n// 上下文\nimport FormContext from '../../../contexts/FormContext';\n// 状态管理\nimport useFormStore from '../../../store/formStore';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../../components/dataEntry/form/AntdForm.react';\n\n/**\n * 表单组件AntdForm\n */\nconst AntdForm = (props) => {\n    const {\n        id,\n        children,\n        className,\n        style,\n        key,\n        labelCol,\n        wrapperCol,\n        colon,\n        labelAlign,\n        labelWrap,\n        layout,\n        enableBatchControl,\n        values,\n        validateStatuses,\n        helps,\n        tooltips,\n        setProps,\n        ...others\n    } = props;\n\n    // 订阅当前表单值搜集状态的变动\n    const _values = useFormStore((state) => state.values[id]);\n\n    const updateFormValues = useFormStore((state) => state.updateFormValues);\n    const updateValidateStatuses = useFormStore(\n        (state) => state.updateValidateStatuses\n    );\n    const updateHelps = useFormStore((state) => state.updateHelps);\n    const updateTooltips = useFormStore((state) => state.updateTooltips);\n\n    // 调试用\n    // console.log('='.repeat(50))\n    // console.log('_values: ', _values)\n    // console.log('values: ', values)\n\n    useUnmount(() => {\n        // 处理内存泄漏及相关的其他问题\n        if (enableBatchControl && id) {\n            updateFormValues(id, undefined);\n        }\n    });\n\n    // _values状态响应value变化\n    useEffect(() => {\n        if (enableBatchControl && id) {\n            updateFormValues(id, values);\n        }\n    }, [values]);\n\n    // value响应_value状态变化\n    useEffect(() => {\n        if (\n            enableBatchControl &&\n            id &&\n            !isUndefined(_values) &&\n            !isEmpty(_values)\n        ) {\n            setProps({ values: _values });\n        }\n    }, [_values]);\n\n    useEffect(() => {\n        if (enableBatchControl && id) {\n            updateValidateStatuses(id, validateStatuses || {});\n        }\n    }, [validateStatuses]);\n\n    useEffect(() => {\n        if (enableBatchControl && id) {\n            updateHelps(id, helps || {});\n        }\n    }, [helps]);\n\n    useEffect(() => {\n        if (enableBatchControl && id) {\n            updateTooltips(id, tooltips || {});\n        }\n    }, [tooltips]);\n\n    return (\n        <FormContext.Provider value={enableBatchControl ? id : null}>\n            <Form\n                // 提取具有data-*或aria-*通配格式的属性\n                {...pickBy(\n                    (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                    others\n                )}\n                id={id}\n                className={\n                    isString(className)\n                        ? className\n                        : className\n                          ? useCss(className)\n                          : undefined\n                }\n                style={style}\n                key={key}\n                labelCol={labelCol}\n                wrapperCol={wrapperCol}\n                colon={colon}\n                labelAlign={labelAlign}\n                labelWrap={labelWrap}\n                layout={layout}\n                data-dash-is-loading={useLoading()}\n            >\n                {children}\n            </Form>\n        </FormContext.Provider>\n    );\n};\n\nexport default AntdForm;\n\nAntdForm.defaultProps = defaultProps;\nAntdForm.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/dataEntry/form/AntdFormItem.react.js",
    "content": "// react核心\nimport React, { useContext } from 'react';\n// antd核心\nimport { Form } from 'antd';\n// 辅助库\nimport { isString } from 'lodash';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../../../components/utils';\n// 自定义hooks\nimport useCss from '../../../hooks/useCss';\n// 上下文\nimport FormContext from '../../../contexts/FormContext';\n// 状态管理\nimport useFormStore from '../../../store/formStore';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../../components/dataEntry/form/AntdFormItem.react';\n\nconst { Item } = Form;\n\n/**\n * 表单项组件AntdFormItem\n */\nconst AntdFormItem = (props) => {\n    const {\n        id,\n        children,\n        className,\n        style,\n        key,\n        labelCol,\n        colon,\n        wrapperCol,\n        label,\n        labelAlign,\n        tooltip,\n        extra,\n        help,\n        hidden,\n        required,\n        validateStatus,\n        hasFeedback,\n        layout,\n        setProps,\n        ...others\n    } = props;\n\n    const formId = useContext(FormContext);\n    const _validateStatus = useFormStore(\n        (state) => state.validateStatuses?.[formId]?.[label]\n    );\n    const _help = useFormStore((state) => state.helps?.[formId]?.[label]);\n    const _tooltip = useFormStore((state) => state.tooltips?.[formId]?.[label]);\n\n    return (\n        <Item\n            // 提取具有data-*或aria-*通配格式的属性\n            {...pickBy(\n                (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                others\n            )}\n            id={id}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            labelCol={labelCol}\n            colon={colon}\n            wrapperCol={wrapperCol}\n            label={label}\n            labelAlign={labelAlign}\n            tooltip={tooltip || (formId && _tooltip)}\n            extra={extra}\n            help={help || (formId && _help)}\n            hasFeedback={hasFeedback}\n            hidden={hidden}\n            required={required}\n            validateStatus={validateStatus || (formId && _validateStatus)}\n            layout={layout}\n            data-dash-is-loading={useLoading()}\n        >\n            {children}\n        </Item>\n    );\n};\n\nexport default React.memo(AntdFormItem);\n\nAntdFormItem.defaultProps = defaultProps;\nAntdFormItem.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/formRender/AntdFormRender.react.js",
    "content": "import React, { useMemo, useEffect } from 'react';\nimport FormRender, { useForm } from 'form-render';\nimport { Cascader } from 'antd';\nimport { isString } from 'lodash';\nimport useCss from '../../hooks/useCss';\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/formRender/AntdFormRender.react';\n\n// 定义表单生成组件AntdFormRender，api参数参考https://xrender.fun/form-render/api-props\nconst AntdFormRender = (props) => {\n    // 取得必要属性或参数\n    const {\n        id,\n        className,\n        style,\n        key,\n        schema,\n        displayType,\n        labelAlign,\n        lableWidth,\n        maxWidth,\n        labelCol,\n        fieldCol,\n        colon,\n        globalConfig,\n        watch,\n        removeHiddenData,\n        readOnly,\n        column,\n        disabled,\n        scrollToFirstError,\n        locale,\n        footer,\n        configProvider,\n        validateMessages,\n        values,\n        validateStatuses,\n        submitForm,\n        submitFormClicks,\n        resetForm,\n        resetFormClicks,\n        setProps,\n        loading_state,\n    } = props;\n\n    function evalAllValidator(json) {\n        for (const key in json) {\n            if (typeof json[key] === 'object') {\n                json[key] = evalAllValidator(json[key]);\n            } else if (key === 'validator') {\n                json[key] = eval(json[key]);\n            }\n        }\n        return json;\n    }\n\n    const cascader = (props) => {\n        return <Cascader {...props} onChange={(e) => props.onChange(e)} />;\n    };\n\n    const form = useForm();\n\n    const onFinish = (data) => {\n        setProps({ validateStatuses: true });\n        setProps({ values: data });\n    };\n\n    const onFinishFailed = (data) => {\n        setProps({ validateStatuses: false });\n        setProps({ values: data.values });\n    };\n\n    const schemaConfig = useMemo(() => {\n        if (schema) {\n            const schemaJson = JSON.parse(JSON.stringify(schema));\n            return evalAllValidator(schemaJson);\n        }\n    }, [schema]);\n\n    const footerConfig = useMemo(() => {\n        if (typeof footer === 'boolean') {\n            return footer;\n        }\n        if ('$$typeof' in footer) {\n            return () => <>{footer}</>;\n        }\n        return {\n            submit: {\n                text: footer?.submit?.text,\n                hide: footer?.submit?.hide,\n                ...footer?.submit?.btnProps,\n            },\n            reset: {\n                text: footer?.reset?.text,\n                hide: footer?.reset?.hide,\n                ...footer?.reset?.btnProps,\n            },\n        };\n    }, [footer]);\n\n    const watchConfig = useMemo(() => {\n        if (watch) {\n            return Object.fromEntries(\n                Object.entries(watch).map(([key, value]) => [key, eval(value)])\n            );\n        }\n    }, [watch]);\n\n    useEffect(() => {\n        form.setValues(values);\n    }, [values]);\n\n    useEffect(() => {\n        if (submitForm) {\n            form.submit();\n            setProps({ submitFormClicks: submitFormClicks + 1 });\n            setProps({ submitForm: false });\n        }\n    }, [submitForm]);\n\n    useEffect(() => {\n        if (resetForm) {\n            form.resetFields();\n            setProps({ resetFormClicks: resetFormClicks + 1 });\n            setProps({ resetForm: false });\n        }\n    }, [resetForm]);\n\n    return (\n        <FormRender\n            id={id}\n            form={form}\n            className={\n                isString(className)\n                    ? className\n                    : className\n                      ? useCss(className)\n                      : undefined\n            }\n            style={style}\n            key={key}\n            schema={schemaConfig}\n            displayType={displayType}\n            labelAlign={labelAlign}\n            lableWidth={lableWidth}\n            maxWidth={maxWidth}\n            labelCol={labelCol}\n            fieldCol={fieldCol}\n            colon={colon}\n            globalConfig={globalConfig}\n            widgets={{ cascader }}\n            watch={watchConfig}\n            removeHiddenData={removeHiddenData}\n            readOnly={readOnly}\n            column={column}\n            disabled={disabled}\n            scrollToFirstError={scrollToFirstError}\n            locale={locale}\n            footer={footerConfig}\n            configProvider={configProvider}\n            validateMessages={validateMessages}\n            onFinish={onFinish}\n            onFinishFailed={onFinishFailed}\n            data-dash-is-loading={\n                (loading_state && loading_state.is_loading) || undefined\n            }\n        />\n    );\n};\n\nexport default React.memo(AntdFormRender);\n\nAntdFormRender.defaultProps = defaultProps;\nAntdFormRender.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/upload/AntdDraggerUpload.react.js",
    "content": "// react核心\nimport React, { useState, useEffect, useContext } from 'react';\n// antd核心\nimport { Upload, message, Modal, ConfigProvider } from 'antd';\nimport AntdIcon from '../../components/general/AntdIcon.react';\n// 辅助库\nimport { isString, isUndefined } from 'lodash';\nimport { v4 as uuidv4 } from 'uuid';\nimport { pickBy, pick } from 'ramda';\nimport { str2Locale, locale2text } from '../../components/locales.react';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 上下文\nimport PropsContext from '../../contexts/PropsContext';\nimport FormContext from '../../contexts/FormContext';\n// 状态管理\nimport useFormStore from '../../store/formStore';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataEntry/upload/AntdDraggerUpload.react';\n\nconst { Dragger } = Upload;\n\n// 解析历史任务完成时间信息\nconst parseHistoryTaskCompleteTime = (e) => {\n    const uid2CompleteTime = new Map();\n    e.forEach((item) => {\n        uid2CompleteTime.set(item.uid, item.completeTimestamp);\n    });\n    return uid2CompleteTime;\n};\n\nconst draggerUploadStatus2Style = new Map([\n    [\n        'warning',\n        {\n            border: '1px solid #faad14',\n            borderRadius: '2px',\n            padding: '6px 10px',\n            transition: 'border 0.3s',\n        },\n    ],\n    [\n        'error',\n        {\n            border: '1px solid #ff4d4f',\n            borderRadius: '2px',\n            padding: '6px 10px',\n            transition: 'border 0.3s',\n        },\n    ],\n]);\n\n/**\n * 文件拖拽上传组件AntdDraggerUpload\n */\nconst AntdDraggerUpload = (props) => {\n    let {\n        id,\n        className,\n        style,\n        draggerClassName,\n        draggerStyle,\n        key,\n        name,\n        enableBatchControl,\n        locale,\n        apiUrl,\n        apiUrlExtraParams,\n        headers,\n        withCredentials,\n        withOriginFileObj,\n        downloadUrl,\n        downloadUrlExtraParams,\n        downloadUrlFromBackend,\n        icon,\n        text,\n        hint,\n        uploadId,\n        fileListMaxLength,\n        fileTypes,\n        fileMaxSize,\n        showUploadList,\n        multiple,\n        directory,\n        failedTooltipInfo,\n        confirmBeforeDelete,\n        showPercent,\n        progressProps,\n        showSuccessMessage,\n        showErrorMessage,\n        pastable,\n        listUploadTaskRecord,\n        defaultFileList,\n        disabled,\n        status,\n        setProps,\n        ...others\n    } = props;\n\n    const [messageApi, messageContextHolder] = message.useMessage();\n    const [modalApi, modalContextHolder] = Modal.useModal();\n\n    const context = useContext(PropsContext);\n    const formId = useContext(FormContext);\n\n    const updateItemValue = useFormStore((state) => state.updateItemValue);\n    const deleteItemValue = useFormStore((state) => state.deleteItemValue);\n\n    locale = (context && context.locale) || locale;\n    downloadUrlFromBackend = downloadUrl ? false : downloadUrlFromBackend;\n\n    // 收集当前组件相关表单值\n    const currentFormValue = useFormStore(\n        (state) => state.values?.[formId]?.[name || id]\n    );\n\n    // 针对上传类组件，特殊处理由表单值控制上传列表的清空\n    useEffect(() => {\n        // 若上文中存在有效表单id\n        if (formId && (name || id) && enableBatchControl) {\n            if (!currentFormValue || currentFormValue.length === 0) {\n                // 清空上传列表\n                updateFileList([]);\n                setProps({\n                    listUploadTaskRecord: [],\n                    lastUploadTaskRecord: null,\n                });\n            }\n        }\n    }, [currentFormValue]);\n\n    // 处理组件卸载后，对应表单项值的清除\n    useEffect(() => {\n        return () => {\n            // 若上文中存在有效表单id\n            if (formId && (name || id) && enableBatchControl) {\n                // 表单值更新\n                deleteItemValue(formId, name || id);\n            }\n        };\n    }, [name, id]);\n\n    // 更新已上传文件 -> 上传完成时间映射字典\n    const uploadedFile2CompleteTime = parseHistoryTaskCompleteTime(\n        listUploadTaskRecord || []\n    );\n\n    useEffect(() => {\n        // 初始化uploadId\n        if (!uploadId) {\n            if (defaultFileList && defaultFileList.length > 0) {\n                setProps({ uploadId: defaultFileList[0].taskId || uuidv4() });\n            } else {\n                setProps({ uploadId: uuidv4() });\n            }\n        }\n    }, []);\n\n    const [fileList, updateFileList] = useState(\n        defaultFileList ||\n            listUploadTaskRecord.map((item) => {\n                return {\n                    name: item.fileName,\n                    status: item.taskStatus,\n                    uid: item.uid,\n                    url: item.url,\n                    uploadResponse: item.uploadResponse,\n                    fileSize: item.fileSize,\n                };\n            })\n    );\n\n    const uploadProps = {\n        name: 'file',\n        action: (file) => {\n            if (withOriginFileObj) {\n                return (\n                    apiUrl +\n                    `?uploadId=${uploadId}&webkitRelativePath=${encodeURI(file.webkitRelativePath)}`\n                );\n            }\n            return apiUrl + `?uploadId=${uploadId}`;\n        },\n        headers: headers,\n        data: {\n            uploadId: uploadId,\n            ...apiUrlExtraParams,\n        },\n        withCredentials: withCredentials,\n        beforeUpload: (file) => {\n            const sizeCheck = file.size / 1024 / 1024 < fileMaxSize;\n            if (!sizeCheck) {\n                messageApi.error(\n                    `${file.name}${locale2text.Upload[locale].sizeError[0]}${fileMaxSize}${locale2text.Upload[locale].sizeError[1]}`\n                );\n            }\n\n            if (fileTypes) {\n                if (\n                    fileTypes.indexOf(\n                        file.name.split('.')[file.name.split('.').length - 1]\n                    ) === -1\n                ) {\n                    messageApi.error(\n                        `${locale2text.Upload[locale].typeError[0]}${file.name}${locale2text.Upload[locale].typeError[1]}`\n                    );\n                }\n\n                return (\n                    sizeCheck &&\n                    fileTypes.indexOf(\n                        file.name.split('.')[file.name.split('.').length - 1]\n                    ) !== -1\n                );\n            }\n\n            return sizeCheck;\n        },\n        onChange(info) {\n            // 计算最近一次任务的子任务数量\n            let lastTaskCount;\n            if (info.file.status === 'removed') {\n                lastTaskCount = 0;\n            } else {\n                lastTaskCount =\n                    info.fileList.length - listUploadTaskRecord.length;\n            }\n\n            // 当上传模式为multiple或directory时\n            if (multiple || directory) {\n                // 若当前事件为removed\n                if (info.file.status === 'removed') {\n                    const _listUploadTaskRecord = info.fileList.map((file) => {\n                        // 配置已完成上传文件下载链接\n                        const urlInfo = downloadUrlFromBackend\n                            ? file.response\n                                ? { url: file.response.url }\n                                : {}\n                            : downloadUrl &&\n                                (file.status === 'done' ||\n                                    file.status === 'success')\n                              ? {\n                                    url:\n                                        downloadUrl +\n                                        `?taskId=${uploadId}&filename=${file.name}` +\n                                        Object.keys(downloadUrlExtraParams)\n                                            .map(\n                                                (key) =>\n                                                    `&${key}=${downloadUrlExtraParams[key]}`\n                                            )\n                                            .join(''),\n                                }\n                              : {};\n                        // 配置已完成上传文件接口响应信息\n                        const responseInfo = file.response\n                            ? { uploadResponse: file.response }\n                            : {};\n                        return {\n                            fileName: file.name,\n                            fileSize: file.size,\n                            completeTimestamp:\n                                uploadedFile2CompleteTime.get(file.uid) ||\n                                new Date().getTime(),\n                            taskStatus:\n                                file.status === 'done' ||\n                                file.status === 'success'\n                                    ? 'success'\n                                    : 'failed',\n                            taskId: uploadId,\n                            uid: file.uid,\n                            ...urlInfo,\n                            ...responseInfo,\n                            // 处理originFileObj信息携带\n                            ...(withOriginFileObj\n                                ? {\n                                      originFileObj: pick(\n                                          [\n                                              'name',\n                                              'size',\n                                              'type',\n                                              'webkitRelativePath',\n                                          ],\n                                          file.originFileObj\n                                      ),\n                                  }\n                                : {}),\n                        };\n                    });\n\n                    // AntdForm表单批量控制\n                    if (formId && (name || id) && enableBatchControl) {\n                        // 表单值更新\n                        updateItemValue(\n                            formId,\n                            name || id,\n                            _listUploadTaskRecord\n                        );\n                    }\n                    // 更新任务记录\n                    setProps({\n                        listUploadTaskRecord: _listUploadTaskRecord,\n                    });\n                } else {\n                    // 其他常规事件\n                    // 判断此次任务所有文件是否已上传结束（done或error）\n                    if (\n                        info.fileList\n                            .slice(-lastTaskCount)\n                            .every((file) => file.status !== 'uploading')\n                    ) {\n                        if (\n                            info.fileList\n                                .slice(-lastTaskCount)\n                                .every((file) => !file.status)\n                        ) {\n                        } else {\n                            if (lastTaskCount > 0) {\n                                const _listUploadTaskRecord = info.fileList.map(\n                                    (file) => {\n                                        // 配置已完成上传文件下载链接\n                                        const urlInfo = downloadUrlFromBackend\n                                            ? file.response\n                                                ? { url: file.response.url }\n                                                : {}\n                                            : downloadUrl &&\n                                                (file.status === 'done' ||\n                                                    file.status === 'success')\n                                              ? {\n                                                    url:\n                                                        downloadUrl +\n                                                        `?taskId=${uploadId}&filename=${file.name}` +\n                                                        Object.keys(\n                                                            downloadUrlExtraParams\n                                                        )\n                                                            .map(\n                                                                (key) =>\n                                                                    `&${key}=${downloadUrlExtraParams[key]}`\n                                                            )\n                                                            .join(''),\n                                                }\n                                              : {};\n                                        // 配置已完成上传文件接口响应信息\n                                        const responseInfo = file.response\n                                            ? { uploadResponse: file.response }\n                                            : {};\n                                        return {\n                                            fileName: file.name,\n                                            fileSize: file.size,\n                                            completeTimestamp:\n                                                uploadedFile2CompleteTime.get(\n                                                    file.uid\n                                                ) || new Date().getTime(),\n                                            taskStatus:\n                                                file.status === 'done' ||\n                                                file.status === 'success'\n                                                    ? 'success'\n                                                    : 'failed',\n                                            taskId: uploadId,\n                                            uid: file.uid,\n                                            ...urlInfo,\n                                            ...responseInfo,\n                                            // 处理originFileObj信息携带\n                                            ...(withOriginFileObj\n                                                ? {\n                                                      originFileObj: pick(\n                                                          [\n                                                              'name',\n                                                              'size',\n                                                              'type',\n                                                              'webkitRelativePath',\n                                                          ],\n                                                          file.originFileObj\n                                                      ),\n                                                  }\n                                                : {}),\n                                        };\n                                    }\n                                );\n\n                                // AntdForm表单批量控制\n                                if (\n                                    formId &&\n                                    (name || id) &&\n                                    enableBatchControl\n                                ) {\n                                    // 表单值更新\n                                    updateItemValue(\n                                        formId,\n                                        name || id,\n                                        _listUploadTaskRecord\n                                    );\n                                }\n                                // 更新任务记录\n                                setProps({\n                                    lastUploadTaskRecord: info.fileList\n                                        .slice(-lastTaskCount)\n                                        .map((file) => {\n                                            // 配置已完成上传文件下载链接\n                                            const urlInfo =\n                                                downloadUrlFromBackend\n                                                    ? file.response\n                                                        ? {\n                                                              url: file.response\n                                                                  .url,\n                                                          }\n                                                        : {}\n                                                    : downloadUrl &&\n                                                        (file.status ===\n                                                            'done' ||\n                                                            file.status ===\n                                                                'success')\n                                                      ? {\n                                                            url:\n                                                                downloadUrl +\n                                                                `?taskId=${uploadId}&filename=${file.name}` +\n                                                                Object.keys(\n                                                                    downloadUrlExtraParams\n                                                                )\n                                                                    .map(\n                                                                        (key) =>\n                                                                            `&${key}=${downloadUrlExtraParams[key]}`\n                                                                    )\n                                                                    .join(''),\n                                                        }\n                                                      : {};\n                                            // 配置已完成上传文件接口响应信息\n                                            const responseInfo = file.response\n                                                ? {\n                                                      uploadResponse:\n                                                          file.response,\n                                                  }\n                                                : {};\n                                            return {\n                                                fileName: file.name,\n                                                fileSize: file.size,\n                                                completeTimestamp:\n                                                    new Date().getTime(),\n                                                taskStatus:\n                                                    file.status === 'done' ||\n                                                    file.status === 'success'\n                                                        ? 'success'\n                                                        : 'failed',\n                                                taskId: uploadId,\n                                                ...urlInfo,\n                                                ...responseInfo,\n                                            };\n                                        }),\n                                    listUploadTaskRecord: _listUploadTaskRecord,\n                                });\n                            }\n                        }\n                    }\n                }\n            } else {\n                // 单文件上传模式\n                // 若当前事件为removed\n                if (info.file.status === 'removed') {\n                    const _listUploadTaskRecord = info.fileList.map((file) => {\n                        // 配置已完成上传文件下载链接\n                        const urlInfo = downloadUrlFromBackend\n                            ? file.response\n                                ? { url: file.response.url }\n                                : {}\n                            : downloadUrl &&\n                                (file.status === 'done' ||\n                                    file.status === 'success')\n                              ? {\n                                    url:\n                                        downloadUrl +\n                                        `?taskId=${uploadId}&filename=${file.name}` +\n                                        Object.keys(downloadUrlExtraParams)\n                                            .map(\n                                                (key) =>\n                                                    `&${key}=${downloadUrlExtraParams[key]}`\n                                            )\n                                            .join(''),\n                                }\n                              : {};\n                        // 配置已完成上传文件接口响应信息\n                        const responseInfo = file.response\n                            ? { uploadResponse: file.response }\n                            : {};\n                        return {\n                            fileName: file.name,\n                            fileSize: file.size,\n                            completeTimestamp:\n                                uploadedFile2CompleteTime.get(file.uid) ||\n                                new Date().getTime(),\n                            taskStatus:\n                                file.status === 'done' ||\n                                file.status === 'success'\n                                    ? 'success'\n                                    : 'failed',\n                            taskId: uploadId,\n                            uid: file.uid,\n                            ...urlInfo,\n                            ...responseInfo,\n                            // 处理originFileObj信息携带\n                            ...(withOriginFileObj\n                                ? {\n                                      originFileObj: pick(\n                                          [\n                                              'name',\n                                              'size',\n                                              'type',\n                                              'webkitRelativePath',\n                                          ],\n                                          file.originFileObj\n                                      ),\n                                  }\n                                : {}),\n                        };\n                    });\n\n                    // AntdForm表单批量控制\n                    if (formId && (name || id) && enableBatchControl) {\n                        // 表单值更新\n                        updateItemValue(\n                            formId,\n                            name || id,\n                            _listUploadTaskRecord\n                        );\n                    }\n                    // 更新任务记录\n                    setProps({\n                        listUploadTaskRecord: _listUploadTaskRecord,\n                    });\n                } else if (\n                    info.file.status === 'done' ||\n                    info.file.status === 'success' ||\n                    info.file.status === 'error' ||\n                    !info.file.status\n                ) {\n                    const _listUploadTaskRecord = info.fileList.map((file) => {\n                        // 配置已完成上传文件下载链接\n                        const urlInfo = downloadUrlFromBackend\n                            ? file.response\n                                ? { url: file.response.url }\n                                : {}\n                            : downloadUrl &&\n                                (file.status === 'done' ||\n                                    file.status === 'success')\n                              ? {\n                                    url:\n                                        downloadUrl +\n                                        `?taskId=${uploadId}&filename=${file.name}` +\n                                        Object.keys(downloadUrlExtraParams)\n                                            .map(\n                                                (key) =>\n                                                    `&${key}=${downloadUrlExtraParams[key]}`\n                                            )\n                                            .join(''),\n                                }\n                              : {};\n                        // 配置已完成上传文件接口响应信息\n                        const responseInfo = file.response\n                            ? { uploadResponse: file.response }\n                            : {};\n                        return {\n                            fileName: file.name,\n                            fileSize: file.size,\n                            completeTimestamp:\n                                uploadedFile2CompleteTime.get(file.uid) ||\n                                new Date().getTime(),\n                            taskStatus:\n                                file.status === 'done' ||\n                                file.status === 'success'\n                                    ? 'success'\n                                    : 'failed',\n                            taskId: uploadId,\n                            uid: file.uid,\n                            ...urlInfo,\n                            ...responseInfo,\n                            // 处理originFileObj信息携带\n                            ...(withOriginFileObj\n                                ? {\n                                      originFileObj: pick(\n                                          [\n                                              'name',\n                                              'size',\n                                              'type',\n                                              'webkitRelativePath',\n                                          ],\n                                          file.originFileObj\n                                      ),\n                                  }\n                                : {}),\n                        };\n                    });\n\n                    // AntdForm表单批量控制\n                    if (formId && (name || id) && enableBatchControl) {\n                        // 表单值更新\n                        updateItemValue(\n                            formId,\n                            name || id,\n                            _listUploadTaskRecord\n                        );\n                    }\n                    setProps({\n                        lastUploadTaskRecord: {\n                            fileName: info.file.name,\n                            fileSize: info.file.size,\n                            completeTimestamp: new Date().getTime(),\n                            taskStatus:\n                                info.file.status === 'done' ||\n                                info.file.status === 'success'\n                                    ? 'success'\n                                    : 'failed',\n                            taskId: uploadId,\n                            ...(downloadUrlFromBackend\n                                ? info.file.response\n                                    ? { url: info.file.response.url }\n                                    : {}\n                                : downloadUrl &&\n                                    (info.file.status === 'done' ||\n                                        info.file.status === 'success')\n                                  ? {\n                                        url:\n                                            downloadUrl +\n                                            `?taskId=${uploadId}&filename=${info.file.name}` +\n                                            Object.keys(downloadUrlExtraParams)\n                                                .map(\n                                                    (key) =>\n                                                        `&${key}=${downloadUrlExtraParams[key]}`\n                                                )\n                                                .join(''),\n                                    }\n                                  : {}),\n                            ...(info.file.response\n                                ? { uploadResponse: info.file.response }\n                                : {}),\n                        },\n                        listUploadTaskRecord: _listUploadTaskRecord,\n                    });\n                }\n            }\n\n            if (\n                (info.file.status === 'done' ||\n                    info.file.status === 'success') &&\n                showSuccessMessage\n            ) {\n                messageApi.success(\n                    `${info.file.name} ${locale2text.Upload[locale].uploadSuccess}`\n                );\n            } else if (info.file.status === 'error' && showErrorMessage) {\n                messageApi.error(\n                    `${info.file.name} ${locale2text.Upload[locale].uploadFailed}`\n                );\n            }\n\n            // 获取当前上传文件列表\n            let _fileList = [...info.fileList];\n\n            // 是否限制上传记录列表最大数量\n            if (fileListMaxLength) {\n                _fileList = _fileList.slice(-fileListMaxLength);\n            }\n\n            if (lastTaskCount !== 0) {\n                _fileList = _fileList\n                    .slice(0, _fileList.length - lastTaskCount)\n                    .concat(\n                        _fileList.slice(-lastTaskCount).map((item) => {\n                            if (item.status === 'error' || !item.status) {\n                                item.status = 'error';\n                                item.response = failedTooltipInfo\n                                    ? failedTooltipInfo\n                                    : '上传失败';\n                            }\n                            return item;\n                        })\n                    );\n            }\n\n            if (downloadUrl) {\n                updateFileList(\n                    _fileList.map((item) => {\n                        // 配置已完成上传文件接口响应信息\n                        const responseInfo = item.response\n                            ? { uploadResponse: item.response }\n                            : {};\n                        return {\n                            ...item,\n                            url:\n                                downloadUrl +\n                                `?taskId=${uploadId}&filename=${item.name}` +\n                                Object.keys(downloadUrlExtraParams)\n                                    .map(\n                                        (key) =>\n                                            `&${key}=${downloadUrlExtraParams[key]}`\n                                    )\n                                    .join(''),\n                            ...responseInfo,\n                        };\n                    })\n                );\n            } else if (downloadUrlFromBackend) {\n                updateFileList(\n                    _fileList.map((item) => {\n                        if (item.response) {\n                            return {\n                                ...item,\n                                url: item.response.url,\n                                uploadResponse: item.response,\n                            };\n                        }\n                        return {\n                            ...item,\n                        };\n                    })\n                );\n            } else {\n                updateFileList(_fileList);\n            }\n        },\n    };\n\n    // 添加accept参数\n    if (fileTypes && fileTypes.length != 0) {\n        Object.assign(uploadProps, { accept: '.' + fileTypes.join(',.') });\n    }\n\n    return (\n        <ConfigProvider locale={str2Locale.get(locale)}>\n            <div\n                // 提取具有data-*或aria-*通配格式的属性\n                {...pickBy(\n                    (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                    others\n                )}\n                id={id}\n                className={\n                    isString(className)\n                        ? className\n                        : className\n                          ? useCss(className)\n                          : undefined\n                }\n                style={{\n                    border: '1px solid transparent',\n                    transition: 'border 0.3s',\n                    ...draggerUploadStatus2Style.get(status),\n                    ...style,\n                }}\n                key={key}\n                data-dash-is-loading={useLoading()}\n            >\n                {messageContextHolder}\n                {modalContextHolder}\n                <Dragger\n                    draggerStyle={draggerStyle}\n                    draggerClassName={\n                        isString(draggerClassName)\n                            ? draggerClassName\n                            : draggerClassName\n                              ? useCss(draggerClassName)\n                              : undefined\n                    }\n                    fileList={fileList}\n                    showUploadList={showUploadList}\n                    multiple={multiple}\n                    directory={directory}\n                    pastable={pastable}\n                    disabled={\n                        context && !isUndefined(context.componentDisabled)\n                            ? context.componentDisabled\n                            : disabled\n                    }\n                    progress={\n                        progressProps || showPercent\n                            ? {\n                                  strokeColor:\n                                      progressProps &&\n                                      progressProps.strokeColor,\n                                  strokeWidth:\n                                      (progressProps &&\n                                          progressProps.strokeWidth) ||\n                                      2,\n                                  format: showPercent\n                                      ? (percent) =>\n                                            percent &&\n                                            `${(progressProps && progressProps.prefix) || ''}${parseFloat(percent.toFixed(1))}${(progressProps && progressProps.suffix) || '%'}`\n                                      : undefined,\n                              }\n                            : undefined\n                    }\n                    onRemove={\n                        confirmBeforeDelete\n                            ? () => {\n                                  return new Promise((resolve, reject) => {\n                                      modalApi.confirm({\n                                          title: locale2text.AntdPictureUpload[\n                                              locale\n                                          ].confirmBeforeDeleteTitle,\n                                          okText: locale2text.AntdPictureUpload[\n                                              locale\n                                          ].confirmBeforeDeleteOkText,\n                                          cancelText:\n                                              locale2text.AntdPictureUpload[\n                                                  locale\n                                              ].confirmBeforeDeleteCancelText,\n                                          onOk: () => {\n                                              resolve(true);\n                                          },\n                                      });\n                                  });\n                              }\n                            : undefined\n                    }\n                    {...uploadProps}\n                >\n                    <p className=\"ant-upload-drag-icon\">\n                        {icon || <AntdIcon icon={'antd-cloud-upload'} />}\n                    </p>\n                    <p className=\"ant-upload-text\">{text}</p>\n                    <p className=\"ant-upload-hint\">{hint}</p>\n                </Dragger>\n            </div>\n        </ConfigProvider>\n    );\n};\n\nexport default AntdDraggerUpload;\n\nAntdDraggerUpload.defaultProps = defaultProps;\nAntdDraggerUpload.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/upload/AntdPictureUpload.react.js",
    "content": "// react核心\nimport React, { useState, useEffect, useContext } from 'react';\n// antd核心\nimport { Upload, message, Modal, ConfigProvider } from 'antd';\nimport { PlusOutlined } from '@ant-design/icons';\nimport ImgCrop from 'antd-img-crop';\n// 辅助库\nimport { str2Locale, locale2text } from '../../components/locales.react';\nimport { isUndefined, isString } from 'lodash';\nimport { v4 as uuidv4 } from 'uuid';\nimport { pickBy } from 'ramda';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 上下文\nimport PropsContext from '../../contexts/PropsContext';\nimport FormContext from '../../contexts/FormContext';\n// 状态管理\nimport useFormStore from '../../store/formStore';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataEntry/upload/AntdPictureUpload.react';\n\n// 解析历史任务完成时间信息\nconst parseHistoryTaskCompleteTime = (e) => {\n    const uid2CompleteTime = new Map();\n    e.forEach((item) => {\n        uid2CompleteTime.set(item.uid, item.completeTimestamp);\n    });\n    return uid2CompleteTime;\n};\n\nconst getBase64 = (file) => {\n    return new Promise((resolve, reject) => {\n        const reader = new FileReader();\n        reader.readAsDataURL(file);\n        reader.onload = () => resolve(reader.result);\n        reader.onerror = (error) => reject(error);\n    });\n};\n\nconst pictureUploadStatus2Style = new Map([\n    [\n        'warning',\n        {\n            border: '1px solid #faad14',\n            borderRadius: '2px',\n            padding: '6px 10px 0 10px',\n            transition: 'border 0.3s',\n        },\n    ],\n    [\n        'error',\n        {\n            border: '1px solid #ff4d4f',\n            borderRadius: '2px',\n            padding: '6px 10px 0 10px',\n            transition: 'border 0.3s',\n        },\n    ],\n]);\n\n/**\n * 图片上传组件AntdPictureUpload\n */\nconst AntdPictureUpload = (props) => {\n    let {\n        id,\n        className,\n        style,\n        key,\n        name,\n        enableBatchControl,\n        locale,\n        apiUrl,\n        apiUrlExtraParams,\n        headers,\n        withCredentials,\n        downloadUrl,\n        downloadUrlExtraParams,\n        downloadUrlFromBackend,\n        editable,\n        editConfig,\n        uploadId,\n        fileListMaxLength,\n        buttonContent,\n        fileTypes,\n        fileMaxSize,\n        failedTooltipInfo,\n        showRemoveIcon,\n        showPreviewIcon,\n        confirmBeforeDelete,\n        showPercent,\n        progressProps,\n        showSuccessMessage,\n        showErrorMessage,\n        pastable,\n        listUploadTaskRecord,\n        defaultFileList,\n        disabled,\n        status,\n        setProps,\n        ...others\n    } = props;\n\n    const [messageApi, messageContextHolder] = message.useMessage();\n    const [modalApi, modalContextHolder] = Modal.useModal();\n\n    const context = useContext(PropsContext);\n    const formId = useContext(FormContext);\n\n    const updateItemValue = useFormStore((state) => state.updateItemValue);\n    const deleteItemValue = useFormStore((state) => state.deleteItemValue);\n\n    locale = (context && context.locale) || locale;\n    downloadUrlFromBackend = downloadUrl ? false : downloadUrlFromBackend;\n\n    // 收集当前组件相关表单值\n    const currentFormValue = useFormStore(\n        (state) => state.values?.[formId]?.[name || id]\n    );\n\n    // 针对上传类组件，特殊处理由表单值控制上传列表的清空\n    useEffect(() => {\n        // 若上文中存在有效表单id\n        if (formId && (name || id) && enableBatchControl) {\n            if (!currentFormValue || currentFormValue.length === 0) {\n                // 清空上传列表\n                updateFileList([]);\n                setProps({\n                    listUploadTaskRecord: [],\n                    lastUploadTaskRecord: null,\n                });\n            }\n        }\n    }, [currentFormValue]);\n\n    // 处理组件卸载后，对应表单项值的清除\n    useEffect(() => {\n        return () => {\n            // 若上文中存在有效表单id\n            if (formId && (name || id) && enableBatchControl) {\n                // 表单值更新\n                deleteItemValue(formId, name || id);\n            }\n        };\n    }, [name, id]);\n\n    listUploadTaskRecord = listUploadTaskRecord || [];\n\n    // 更新已上传文件 -> 上传完成时间映射字典\n    const uploadedFile2CompleteTime =\n        parseHistoryTaskCompleteTime(listUploadTaskRecord);\n\n    useEffect(() => {\n        // 初始化uploadId\n        if (!uploadId) {\n            if (defaultFileList && defaultFileList.length > 0) {\n                setProps({ uploadId: defaultFileList[0].taskId || uuidv4() });\n            } else {\n                setProps({ uploadId: uuidv4() });\n            }\n        }\n    }, []);\n\n    const [fileList, updateFileList] = useState(\n        defaultFileList ||\n            listUploadTaskRecord.map((item) => {\n                return {\n                    name: item.fileName,\n                    status: item.taskStatus,\n                    uid: item.uid,\n                    url: item.url,\n                    uploadResponse: item.uploadResponse,\n                    fileSize: item.fileSize,\n                };\n            })\n    );\n    const [previewVisible, setPreviewVisible] = useState(false);\n    const [previewImage, setPreviewImage] = useState('');\n    const [previewTitle, setPreviewTitle] = useState('');\n\n    const handleCancel = () => setPreviewVisible(false);\n\n    const handlePreview = async (file) => {\n        if (!file.url && !file.preview) {\n            file.preview = await getBase64(file.originFileObj);\n        }\n\n        setPreviewImage(file.url || file.preview);\n        setPreviewVisible(true);\n        setPreviewTitle(\n            file.name || file.url.substring(file.url.lastIndexOf('/') + 1)\n        );\n    };\n\n    const uploadButton = (\n        <div>\n            <PlusOutlined />\n            <div style={{ marginTop: 8 }}>{buttonContent}</div>\n        </div>\n    );\n\n    const uploadProps = {\n        name: 'file',\n        action: apiUrl + `?uploadId=${uploadId}`,\n        headers: headers,\n        data: {\n            uploadId: uploadId,\n            ...apiUrlExtraParams,\n        },\n        withCredentials: withCredentials,\n        beforeUpload: (file) => {\n            const sizeCheck = file.size / 1024 / 1024 < fileMaxSize;\n            if (!sizeCheck) {\n                messageApi.error(\n                    `${file.name}${locale2text.Upload[locale].sizeError[0]}${fileMaxSize}${locale2text.Upload[locale].sizeError[1]}`\n                );\n            }\n\n            if (fileTypes) {\n                if (\n                    fileTypes.indexOf(\n                        file.name.split('.')[file.name.split('.').length - 1]\n                    ) === -1\n                ) {\n                    messageApi.error(\n                        `${locale2text.Upload[locale].typeError[0]}${file.name}${locale2text.Upload[locale].typeError[1]}`\n                    );\n                }\n\n                return (\n                    sizeCheck &&\n                    fileTypes.indexOf(\n                        file.name.split('.')[file.name.split('.').length - 1]\n                    ) !== -1\n                );\n            }\n\n            return sizeCheck;\n        },\n        onChange(info) {\n            // 计算最近一次任务的子任务数量\n            let lastTaskCount;\n            if (info.file.status === 'removed') {\n                lastTaskCount = 0;\n            } else {\n                lastTaskCount =\n                    info.fileList.length - listUploadTaskRecord.length;\n            }\n\n            // 单文件上传模式\n            // 若当前事件为removed\n            if (info.file.status === 'removed') {\n                const _listUploadTaskRecord = info.fileList.map((file) => {\n                    // 配置已完成上传文件下载链接\n                    const urlInfo = downloadUrlFromBackend\n                        ? file.response\n                            ? { url: file.response.url }\n                            : {}\n                        : downloadUrl &&\n                            (file.status === 'done' ||\n                                file.status === 'success')\n                          ? {\n                                url:\n                                    downloadUrl +\n                                    `?taskId=${uploadId}&filename=${file.name}` +\n                                    Object.keys(downloadUrlExtraParams)\n                                        .map(\n                                            (key) =>\n                                                `&${key}=${downloadUrlExtraParams[key]}`\n                                        )\n                                        .join(''),\n                            }\n                          : {};\n                    // 配置已完成上传文件接口响应信息\n                    const responseInfo = file.response\n                        ? { uploadResponse: file.response }\n                        : {};\n                    return {\n                        fileName: file.name,\n                        fileSize: file.size,\n                        completeTimestamp:\n                            uploadedFile2CompleteTime.get(file.uid) ||\n                            new Date().getTime(),\n                        taskStatus:\n                            file.status === 'done' || file.status === 'success'\n                                ? 'success'\n                                : 'failed',\n                        taskId: uploadId,\n                        uid: file.uid,\n                        ...urlInfo,\n                        ...responseInfo,\n                    };\n                });\n\n                // AntdForm表单批量控制\n                if (formId && (name || id) && enableBatchControl) {\n                    // 表单值更新\n                    updateItemValue(formId, name || id, _listUploadTaskRecord);\n                }\n                // 更新任务记录\n                setProps({\n                    listUploadTaskRecord: _listUploadTaskRecord,\n                });\n            } else if (\n                info.file.status === 'done' ||\n                info.file.status === 'success' ||\n                info.file.status === 'error' ||\n                !info.file.status\n            ) {\n                const _listUploadTaskRecord = info.fileList.map((file) => {\n                    // 配置已完成上传文件下载链接\n                    const urlInfo = downloadUrlFromBackend\n                        ? file.response\n                            ? { url: file.response.url }\n                            : {}\n                        : downloadUrl &&\n                            (file.status === 'done' ||\n                                file.status === 'success')\n                          ? {\n                                url:\n                                    downloadUrl +\n                                    `?taskId=${uploadId}&filename=${file.name}` +\n                                    Object.keys(downloadUrlExtraParams)\n                                        .map(\n                                            (key) =>\n                                                `&${key}=${downloadUrlExtraParams[key]}`\n                                        )\n                                        .join(''),\n                            }\n                          : {};\n                    // 配置已完成上传文件接口响应信息\n                    const responseInfo = file.response\n                        ? { uploadResponse: file.response }\n                        : {};\n                    return {\n                        fileName: file.name,\n                        fileSize: file.size,\n                        completeTimestamp:\n                            uploadedFile2CompleteTime.get(file.uid) ||\n                            new Date().getTime(),\n                        taskStatus:\n                            file.status === 'done' || file.status === 'success'\n                                ? 'success'\n                                : 'failed',\n                        taskId: uploadId,\n                        uid: file.uid,\n                        ...urlInfo,\n                        ...responseInfo,\n                    };\n                });\n\n                // AntdForm表单批量控制\n                if (formId && (name || id) && enableBatchControl) {\n                    // 表单值更新\n                    updateItemValue(formId, name || id, _listUploadTaskRecord);\n                }\n                setProps({\n                    lastUploadTaskRecord: {\n                        fileName: info.file.name,\n                        fileSize: info.file.size,\n                        completeTimestamp: new Date().getTime(),\n                        taskStatus:\n                            info.file.status === 'done' ||\n                            info.file.status === 'success'\n                                ? 'success'\n                                : 'failed',\n                        taskId: uploadId,\n                        ...(downloadUrlFromBackend\n                            ? info.file.response\n                                ? { url: info.file.response.url }\n                                : {}\n                            : downloadUrl &&\n                                (info.file.status === 'done' ||\n                                    info.file.status === 'success')\n                              ? {\n                                    url:\n                                        downloadUrl +\n                                        `?taskId=${uploadId}&filename=${info.file.name}` +\n                                        Object.keys(downloadUrlExtraParams)\n                                            .map(\n                                                (key) =>\n                                                    `&${key}=${downloadUrlExtraParams[key]}`\n                                            )\n                                            .join(''),\n                                }\n                              : {}),\n                        ...(info.file.response\n                            ? { uploadResponse: info.file.response }\n                            : {}),\n                    },\n                    listUploadTaskRecord: _listUploadTaskRecord,\n                });\n            }\n\n            if (\n                (info.file.status === 'done' ||\n                    info.file.status === 'success') &&\n                showSuccessMessage\n            ) {\n                messageApi.success(\n                    `${info.file.name} ${locale2text.Upload[locale].uploadSuccess}`\n                );\n            } else if (info.file.status === 'error' && showErrorMessage) {\n                messageApi.error(\n                    `${info.file.name} ${locale2text.Upload[locale].uploadFailed}`\n                );\n            }\n\n            // 获取当前上传文件列表\n            let _fileList = [...info.fileList];\n\n            // 是否限制上传记录列表最大数量\n            if (fileListMaxLength) {\n                _fileList = _fileList.slice(-fileListMaxLength);\n            }\n\n            if (lastTaskCount !== 0) {\n                _fileList = _fileList\n                    .slice(0, _fileList.length - lastTaskCount)\n                    .concat(\n                        _fileList.slice(-lastTaskCount).map((item) => {\n                            if (item.status === 'error' || !item.status) {\n                                item.status = 'error';\n                                item.response = failedTooltipInfo\n                                    ? failedTooltipInfo\n                                    : '上传失败';\n                            }\n                            return item;\n                        })\n                    );\n            }\n\n            if (downloadUrl) {\n                updateFileList(\n                    _fileList.map((item) => {\n                        // 配置已完成上传文件接口响应信息\n                        const responseInfo = item.response\n                            ? { uploadResponse: item.response }\n                            : {};\n                        return {\n                            ...item,\n                            url:\n                                downloadUrl +\n                                `?taskId=${uploadId}&filename=${item.name}` +\n                                Object.keys(downloadUrlExtraParams)\n                                    .map(\n                                        (key) =>\n                                            `&${key}=${downloadUrlExtraParams[key]}`\n                                    )\n                                    .join(''),\n                            ...responseInfo,\n                        };\n                    })\n                );\n            } else if (downloadUrlFromBackend) {\n                updateFileList(\n                    _fileList.map((item) => {\n                        if (item.response) {\n                            return {\n                                ...item,\n                                url: item.response.url,\n                                uploadResponse: item.response,\n                            };\n                        }\n                        return {\n                            ...item,\n                        };\n                    })\n                );\n            } else {\n                updateFileList(_fileList);\n            }\n        },\n    };\n\n    // 添加accept参数\n    if (fileTypes && fileTypes.length != 0) {\n        Object.assign(uploadProps, { accept: '.' + fileTypes.join(',.') });\n    }\n\n    if (editable) {\n        return (\n            <ConfigProvider locale={str2Locale.get(locale)}>\n                <div\n                    // 提取具有data-*或aria-*通配格式的属性\n                    {...pickBy(\n                        (_, k) =>\n                            k.startsWith('data-') || k.startsWith('aria-'),\n                        others\n                    )}\n                    id={id}\n                    className={\n                        isString(className)\n                            ? className\n                            : className\n                              ? useCss(className)\n                              : undefined\n                    }\n                    style={{\n                        border: '1px solid transparent',\n                        transition: 'border 0.3s',\n                        ...pictureUploadStatus2Style.get(status),\n                        ...style,\n                    }}\n                    key={key}\n                >\n                    {messageContextHolder}\n                    {modalContextHolder}\n                    <ImgCrop\n                        modalOk={\n                            locale2text.AntdPictureUpload[locale]\n                                .imgCropModalOKText\n                        }\n                        modalCancel={\n                            locale2text.AntdPictureUpload[locale]\n                                .imgCropModalCancelText\n                        }\n                        {...editConfig}\n                    >\n                        <Upload\n                            {...uploadProps}\n                            fileList={fileList}\n                            listType=\"picture-card\"\n                            disabled={\n                                context &&\n                                !isUndefined(context.componentDisabled)\n                                    ? context.componentDisabled\n                                    : disabled\n                            }\n                            progress={\n                                progressProps || showPercent\n                                    ? {\n                                          strokeColor:\n                                              progressProps &&\n                                              progressProps.strokeColor,\n                                          strokeWidth:\n                                              (progressProps &&\n                                                  progressProps.strokeWidth) ||\n                                              2,\n                                          format: showPercent\n                                              ? (percent) =>\n                                                    percent &&\n                                                    `${(progressProps && progressProps.prefix) || ''}${parseFloat(percent.toFixed(1))}${(progressProps && progressProps.suffix) || '%'}`\n                                              : undefined,\n                                      }\n                                    : undefined\n                            }\n                            showUploadList={{\n                                showRemoveIcon,\n                                showPreviewIcon,\n                            }}\n                            pastable={pastable}\n                            onPreview={handlePreview}\n                            onRemove={\n                                confirmBeforeDelete\n                                    ? () => {\n                                          return new Promise(\n                                              (resolve, reject) => {\n                                                  modalApi.confirm({\n                                                      title: locale2text\n                                                          .AntdPictureUpload[\n                                                          locale\n                                                      ]\n                                                          .confirmBeforeDeleteTitle,\n                                                      okText: locale2text\n                                                          .AntdPictureUpload[\n                                                          locale\n                                                      ]\n                                                          .confirmBeforeDeleteOkText,\n                                                      cancelText:\n                                                          locale2text\n                                                              .AntdPictureUpload[\n                                                              locale\n                                                          ]\n                                                              .confirmBeforeDeleteCancelText,\n                                                      onOk: () => {\n                                                          resolve(true);\n                                                      },\n                                                  });\n                                              }\n                                          );\n                                      }\n                                    : undefined\n                            }\n                            data-dash-is-loading={useLoading()}\n                        >\n                            {uploadButton}\n                        </Upload>\n                    </ImgCrop>\n                    <Modal\n                        open={previewVisible}\n                        title={previewTitle}\n                        footer={null}\n                        onCancel={handleCancel}\n                    >\n                        <img\n                            alt=\"\"\n                            style={{ width: '100%' }}\n                            src={previewImage}\n                        />\n                    </Modal>\n                </div>\n            </ConfigProvider>\n        );\n    }\n\n    return (\n        <ConfigProvider locale={str2Locale.get(locale)}>\n            <div\n                // 提取具有data-*或aria-*通配格式的属性\n                {...pickBy(\n                    (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                    others\n                )}\n                id={id}\n                className={\n                    isString(className)\n                        ? className\n                        : className\n                          ? useCss(className)\n                          : undefined\n                }\n                style={{\n                    border: '1px solid transparent',\n                    transition: 'border 0.3s',\n                    ...pictureUploadStatus2Style.get(status),\n                    ...style,\n                }}\n                key={key}\n            >\n                {messageContextHolder}\n                {modalContextHolder}\n                <Upload\n                    {...uploadProps}\n                    fileList={fileList}\n                    listType=\"picture-card\"\n                    disabled={\n                        context && !isUndefined(context.componentDisabled)\n                            ? context.componentDisabled\n                            : disabled\n                    }\n                    progress={\n                        progressProps || showPercent\n                            ? {\n                                  strokeColor:\n                                      progressProps &&\n                                      progressProps.strokeColor,\n                                  strokeWidth:\n                                      (progressProps &&\n                                          progressProps.strokeWidth) ||\n                                      2,\n                                  format: showPercent\n                                      ? (percent) =>\n                                            percent &&\n                                            `${(progressProps && progressProps.prefix) || ''}${parseFloat(percent.toFixed(1))}${(progressProps && progressProps.suffix) || '%'}`\n                                      : undefined,\n                              }\n                            : undefined\n                    }\n                    showUploadList={{\n                        showRemoveIcon,\n                        showPreviewIcon,\n                    }}\n                    pastable={pastable}\n                    onPreview={handlePreview}\n                    onRemove={\n                        confirmBeforeDelete\n                            ? () => {\n                                  return new Promise((resolve, reject) => {\n                                      modalApi.confirm({\n                                          title: locale2text.AntdPictureUpload[\n                                              locale\n                                          ].confirmBeforeDeleteTitle,\n                                          okText: locale2text.AntdPictureUpload[\n                                              locale\n                                          ].confirmBeforeDeleteOkText,\n                                          cancelText:\n                                              locale2text.AntdPictureUpload[\n                                                  locale\n                                              ].confirmBeforeDeleteCancelText,\n                                          onOk: () => {\n                                              resolve(true);\n                                          },\n                                      });\n                                  });\n                              }\n                            : undefined\n                    }\n                    data-dash-is-loading={useLoading()}\n                >\n                    {uploadButton}\n                </Upload>\n                <Modal\n                    open={previewVisible}\n                    title={previewTitle}\n                    footer={null}\n                    onCancel={handleCancel}\n                >\n                    <img alt=\"\" style={{ width: '100%' }} src={previewImage} />\n                </Modal>\n            </div>\n        </ConfigProvider>\n    );\n};\n\nexport default AntdPictureUpload;\n\nAntdPictureUpload.defaultProps = defaultProps;\nAntdPictureUpload.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/fragments/upload/AntdUpload.react.js",
    "content": "// react核心\nimport React, { useState, useEffect, useContext } from 'react';\n// antd核心\nimport { Upload, message, Button, Modal, ConfigProvider } from 'antd';\nimport { UploadOutlined } from '@ant-design/icons';\n// 辅助库\nimport { str2Locale, locale2text } from '../../components/locales.react';\nimport { isString, isUndefined } from 'lodash';\nimport { v4 as uuidv4 } from 'uuid';\nimport { pickBy, pick } from 'ramda';\nimport { useLoading } from '../../components/utils';\n// 自定义hooks\nimport useCss from '../../hooks/useCss';\n// 上下文\nimport PropsContext from '../../contexts/PropsContext';\nimport FormContext from '../../contexts/FormContext';\n// 状态管理\nimport useFormStore from '../../store/formStore';\n// 参数类型\nimport {\n    propTypes,\n    defaultProps,\n} from '../../components/dataEntry/upload/AntdUpload.react';\n\n// 解析历史任务完成时间信息\nconst parseHistoryTaskCompleteTime = (e) => {\n    const uid2CompleteTime = new Map();\n    e.forEach((item) => {\n        uid2CompleteTime.set(item.uid, item.completeTimestamp);\n    });\n    return uid2CompleteTime;\n};\n\nconst uploadStatus2Style = new Map([\n    [\n        'warning',\n        {\n            border: '1px solid #faad14',\n            borderRadius: '2px',\n            padding: '6px 10px',\n            transition: 'border 0.3s',\n        },\n    ],\n    [\n        'error',\n        {\n            border: '1px solid #ff4d4f',\n            borderRadius: '2px',\n            padding: '6px 10px',\n            transition: 'border 0.3s',\n        },\n    ],\n]);\n\n/**\n * 文件上传组件AntdUpload\n */\nconst AntdUpload = (props) => {\n    let {\n        id,\n        className,\n        style,\n        key,\n        name,\n        enableBatchControl,\n        locale,\n        apiUrl,\n        apiUrlExtraParams,\n        headers,\n        withCredentials,\n        withOriginFileObj,\n        downloadUrl,\n        downloadUrlExtraParams,\n        downloadUrlFromBackend,\n        uploadId,\n        fileListMaxLength,\n        buttonContent,\n        buttonIcon,\n        buttonProps,\n        fileTypes,\n        fileMaxSize,\n        showUploadList,\n        multiple,\n        directory,\n        failedTooltipInfo,\n        confirmBeforeDelete,\n        showPercent,\n        progressProps,\n        showSuccessMessage,\n        showErrorMessage,\n        pastable,\n        listUploadTaskRecord,\n        defaultFileList,\n        disabled,\n        status,\n        setProps,\n        ...others\n    } = props;\n\n    const [messageApi, messageContextHolder] = message.useMessage();\n    const [modalApi, modalContextHolder] = Modal.useModal();\n\n    const context = useContext(PropsContext);\n    const formId = useContext(FormContext);\n\n    const updateItemValue = useFormStore((state) => state.updateItemValue);\n    const deleteItemValue = useFormStore((state) => state.deleteItemValue);\n\n    locale = (context && context.locale) || locale;\n    downloadUrlFromBackend = downloadUrl ? false : downloadUrlFromBackend;\n\n    // 收集当前组件相关表单值\n    const currentFormValue = useFormStore(\n        (state) => state.values?.[formId]?.[name || id]\n    );\n\n    // 针对上传类组件，特殊处理由表单值控制上传列表的清空\n    useEffect(() => {\n        // 若上文中存在有效表单id\n        if (formId && (name || id) && enableBatchControl) {\n            if (!currentFormValue || currentFormValue.length === 0) {\n                // 清空上传列表\n                updateFileList([]);\n                setProps({\n                    listUploadTaskRecord: [],\n                    lastUploadTaskRecord: null,\n                });\n            }\n        }\n    }, [currentFormValue]);\n\n    // 处理组件卸载后，对应表单项值的清除\n    useEffect(() => {\n        return () => {\n            // 若上文中存在有效表单id\n            if (formId && (name || id) && enableBatchControl) {\n                // 表单值更新\n                deleteItemValue(formId, name || id);\n            }\n        };\n    }, [name, id]);\n\n    listUploadTaskRecord = listUploadTaskRecord || [];\n\n    // 更新已上传文件 -> 上传完成时间映射字典\n    const uploadedFile2CompleteTime =\n        parseHistoryTaskCompleteTime(listUploadTaskRecord);\n\n    useEffect(() => {\n        // 初始化uploadId\n        if (!uploadId) {\n            if (defaultFileList && defaultFileList.length > 0) {\n                setProps({ uploadId: defaultFileList[0].taskId || uuidv4() });\n            } else {\n                setProps({ uploadId: uuidv4() });\n            }\n        }\n    }, []);\n\n    const [fileList, updateFileList] = useState(\n        defaultFileList ||\n            listUploadTaskRecord.map((item) => {\n                return {\n                    name: item.fileName,\n                    status: item.taskStatus,\n                    uid: item.uid,\n                    url: item.url,\n                    uploadResponse: item.uploadResponse,\n                    fileSize: item.fileSize,\n                };\n            })\n    );\n\n    const uploadProps = {\n        name: 'file',\n        action: (file) => {\n            if (withOriginFileObj) {\n                return (\n                    apiUrl +\n                    `?uploadId=${uploadId}&webkitRelativePath=${encodeURI(file.webkitRelativePath)}`\n                );\n            }\n            return apiUrl + `?uploadId=${uploadId}`;\n        },\n        headers: headers,\n        data: {\n            uploadId: uploadId,\n            ...apiUrlExtraParams,\n        },\n        withCredentials: withCredentials,\n        beforeUpload: (file) => {\n            const sizeCheck = file.size / 1024 / 1024 < fileMaxSize;\n            if (!sizeCheck) {\n                messageApi.error(\n                    `${file.name}${locale2text.Upload[locale].sizeError[0]}${fileMaxSize}${locale2text.Upload[locale].sizeError[1]}`\n                );\n            }\n\n            if (fileTypes) {\n                if (\n                    fileTypes.indexOf(\n                        file.name.split('.')[file.name.split('.').length - 1]\n                    ) === -1\n                ) {\n                    messageApi.error(\n                        `${locale2text.Upload[locale].typeError[0]}${file.name}${locale2text.Upload[locale].typeError[1]}`\n                    );\n                }\n\n                return (\n                    sizeCheck &&\n                    fileTypes.indexOf(\n                        file.name.split('.')[file.name.split('.').length - 1]\n                    ) !== -1\n                );\n            }\n\n            return sizeCheck;\n        },\n        onChange(info) {\n            // 计算最近一次任务的子任务数量\n            let lastTaskCount;\n            if (info.file.status === 'removed') {\n                lastTaskCount = 0;\n            } else {\n                lastTaskCount =\n                    info.fileList.length - listUploadTaskRecord.length;\n            }\n\n            // 当上传模式为multiple或directory时\n            if (multiple || directory) {\n                // 若当前事件为removed\n                if (info.file.status === 'removed') {\n                    const _listUploadTaskRecord = info.fileList.map((file) => {\n                        // 配置已完成上传文件下载链接\n                        const urlInfo = downloadUrlFromBackend\n                            ? file.response\n                                ? { url: file.response.url }\n                                : {}\n                            : downloadUrl &&\n                                (file.status === 'done' ||\n                                    file.status === 'success')\n                              ? {\n                                    url:\n                                        downloadUrl +\n                                        `?taskId=${uploadId}&filename=${file.name}` +\n                                        Object.keys(downloadUrlExtraParams)\n                                            .map(\n                                                (key) =>\n                                                    `&${key}=${downloadUrlExtraParams[key]}`\n                                            )\n                                            .join(''),\n                                }\n                              : {};\n                        // 配置已完成上传文件接口响应信息\n                        const responseInfo = file.response\n                            ? { uploadResponse: file.response }\n                            : {};\n                        return {\n                            fileName: file.name,\n                            fileSize: file.size,\n                            completeTimestamp:\n                                uploadedFile2CompleteTime.get(file.uid) ||\n                                new Date().getTime(),\n                            taskStatus:\n                                file.status === 'done' ||\n                                file.status === 'success'\n                                    ? 'success'\n                                    : 'failed',\n                            taskId: uploadId,\n                            uid: file.uid,\n                            ...urlInfo,\n                            ...responseInfo,\n                            // 处理originFileObj信息携带\n                            ...(withOriginFileObj\n                                ? {\n                                      originFileObj: pick(\n                                          [\n                                              'name',\n                                              'size',\n                                              'type',\n                                              'webkitRelativePath',\n                                          ],\n                                          file.originFileObj\n                                      ),\n                                  }\n                                : {}),\n                        };\n                    });\n                    // AntdForm表单批量控制\n                    if (formId && (name || id) && enableBatchControl) {\n                        // 表单值更新\n                        updateItemValue(\n                            formId,\n                            name || id,\n                            _listUploadTaskRecord\n                        );\n                    }\n                    // 更新任务记录\n                    setProps({\n                        listUploadTaskRecord: _listUploadTaskRecord,\n                    });\n                } else {\n                    // 其他常规事件\n                    // 判断此次任务所有文件是否已上传结束（done或error）\n                    if (\n                        info.fileList\n                            .slice(-lastTaskCount)\n                            .every((file) => file.status !== 'uploading')\n                    ) {\n                        if (\n                            info.fileList\n                                .slice(-lastTaskCount)\n                                .every((file) => !file.status)\n                        ) {\n                        } else {\n                            if (lastTaskCount > 0) {\n                                const _listUploadTaskRecord = info.fileList.map(\n                                    (file) => {\n                                        // 配置已完成上传文件下载链接\n                                        const urlInfo = downloadUrlFromBackend\n                                            ? file.response\n                                                ? { url: file.response.url }\n                                                : {}\n                                            : downloadUrl &&\n                                                (file.status === 'done' ||\n                                                    file.status === 'success')\n                                              ? {\n                                                    url:\n                                                        downloadUrl +\n                                                        `?taskId=${uploadId}&filename=${file.name}` +\n                                                        Object.keys(\n                                                            downloadUrlExtraParams\n                                                        )\n                                                            .map(\n                                                                (key) =>\n                                                                    `&${key}=${downloadUrlExtraParams[key]}`\n                                                            )\n                                                            .join(''),\n                                                }\n                                              : {};\n                                        // 配置已完成上传文件接口响应信息\n                                        const responseInfo = file.response\n                                            ? { uploadResponse: file.response }\n                                            : {};\n                                        return {\n                                            fileName: file.name,\n                                            fileSize: file.size,\n                                            completeTimestamp:\n                                                uploadedFile2CompleteTime.get(\n                                                    file.uid\n                                                ) || new Date().getTime(),\n                                            taskStatus:\n                                                file.status === 'done' ||\n                                                file.status === 'success'\n                                                    ? 'success'\n                                                    : 'failed',\n                                            taskId: uploadId,\n                                            uid: file.uid,\n                                            ...urlInfo,\n                                            ...responseInfo,\n                                            // 处理originFileObj信息携带\n                                            ...(withOriginFileObj\n                                                ? {\n                                                      originFileObj: pick(\n                                                          [\n                                                              'name',\n                                                              'size',\n                                                              'type',\n                                                              'webkitRelativePath',\n                                                          ],\n                                                          file.originFileObj\n                                                      ),\n                                                  }\n                                                : {}),\n                                        };\n                                    }\n                                );\n\n                                // AntdForm表单批量控制\n                                if (\n                                    formId &&\n                                    (name || id) &&\n                                    enableBatchControl\n                                ) {\n                                    // 表单值更新\n                                    updateItemValue(\n                                        formId,\n                                        name || id,\n                                        _listUploadTaskRecord\n                                    );\n                                }\n                                // 更新任务记录\n                                setProps({\n                                    lastUploadTaskRecord: info.fileList\n                                        .slice(-lastTaskCount)\n                                        .map((file) => {\n                                            // 配置已完成上传文件下载链接\n                                            const urlInfo =\n                                                downloadUrlFromBackend\n                                                    ? file.response\n                                                        ? {\n                                                              url: file.response\n                                                                  .url,\n                                                          }\n                                                        : {}\n                                                    : downloadUrl &&\n                                                        (file.status ===\n                                                            'done' ||\n                                                            file.status ===\n                                                                'success')\n                                                      ? {\n                                                            url:\n                                                                downloadUrl +\n                                                                `?taskId=${uploadId}&filename=${file.name}` +\n                                                                Object.keys(\n                                                                    downloadUrlExtraParams\n                                                                )\n                                                                    .map(\n                                                                        (key) =>\n                                                                            `&${key}=${downloadUrlExtraParams[key]}`\n                                                                    )\n                                                                    .join(''),\n                                                        }\n                                                      : {};\n                                            // 配置已完成上传文件接口响应信息\n                                            const responseInfo = file.response\n                                                ? {\n                                                      uploadResponse:\n                                                          file.response,\n                                                  }\n                                                : {};\n                                            return {\n                                                fileName: file.name,\n                                                fileSize: file.size,\n                                                completeTimestamp:\n                                                    new Date().getTime(),\n                                                taskStatus:\n                                                    file.status === 'done' ||\n                                                    file.status === 'success'\n                                                        ? 'success'\n                                                        : 'failed',\n                                                taskId: uploadId,\n                                                ...urlInfo,\n                                                ...responseInfo,\n                                            };\n                                        }),\n                                    listUploadTaskRecord: _listUploadTaskRecord,\n                                });\n                            }\n                        }\n                    }\n                }\n            } else {\n                // 单文件上传模式\n                // 若当前事件为removed\n                if (info.file.status === 'removed') {\n                    const _listUploadTaskRecord = info.fileList.map((file) => {\n                        // 配置已完成上传文件下载链接\n                        const urlInfo = downloadUrlFromBackend\n                            ? file.response\n                                ? { url: file.response.url }\n                                : {}\n                            : downloadUrl &&\n                                (file.status === 'done' ||\n                                    file.status === 'success')\n                              ? {\n                                    url:\n                                        downloadUrl +\n                                        `?taskId=${uploadId}&filename=${file.name}` +\n                                        Object.keys(downloadUrlExtraParams)\n                                            .map(\n                                                (key) =>\n                                                    `&${key}=${downloadUrlExtraParams[key]}`\n                                            )\n                                            .join(''),\n                                }\n                              : {};\n                        // 配置已完成上传文件接口响应信息\n                        const responseInfo = file.response\n                            ? { uploadResponse: file.response }\n                            : {};\n                        return {\n                            fileName: file.name,\n                            fileSize: file.size,\n                            completeTimestamp:\n                                uploadedFile2CompleteTime.get(file.uid) ||\n                                new Date().getTime(),\n                            taskStatus:\n                                file.status === 'done' ||\n                                file.status === 'success'\n                                    ? 'success'\n                                    : 'failed',\n                            taskId: uploadId,\n                            uid: file.uid,\n                            ...urlInfo,\n                            ...responseInfo,\n                            // 处理originFileObj信息携带\n                            ...(withOriginFileObj\n                                ? {\n                                      originFileObj: pick(\n                                          [\n                                              'name',\n                                              'size',\n                                              'type',\n                                              'webkitRelativePath',\n                                          ],\n                                          file.originFileObj\n                                      ),\n                                  }\n                                : {}),\n                        };\n                    });\n\n                    // AntdForm表单批量控制\n                    if (formId && (name || id) && enableBatchControl) {\n                        // 表单值更新\n                        updateItemValue(\n                            formId,\n                            name || id,\n                            _listUploadTaskRecord\n                        );\n                    }\n                    // 更新任务记录\n                    setProps({\n                        listUploadTaskRecord: _listUploadTaskRecord,\n                    });\n                } else if (\n                    info.file.status === 'done' ||\n                    info.file.status === 'success' ||\n                    info.file.status === 'error' ||\n                    !info.file.status\n                ) {\n                    const _listUploadTaskRecord = info.fileList.map((file) => {\n                        // 配置已完成上传文件下载链接\n                        const urlInfo = downloadUrlFromBackend\n                            ? file.response\n                                ? { url: file.response.url }\n                                : {}\n                            : downloadUrl &&\n                                (file.status === 'done' ||\n                                    file.status === 'success')\n                              ? {\n                                    url:\n                                        downloadUrl +\n                                        `?taskId=${uploadId}&filename=${file.name}` +\n                                        Object.keys(downloadUrlExtraParams)\n                                            .map(\n                                                (key) =>\n                                                    `&${key}=${downloadUrlExtraParams[key]}`\n                                            )\n                                            .join(''),\n                                }\n                              : {};\n                        // 配置已完成上传文件接口响应信息\n                        const responseInfo = file.response\n                            ? { uploadResponse: file.response }\n                            : {};\n                        return {\n                            fileName: file.name,\n                            fileSize: file.size,\n                            completeTimestamp:\n                                uploadedFile2CompleteTime.get(file.uid) ||\n                                new Date().getTime(),\n                            taskStatus:\n                                file.status === 'done' ||\n                                file.status === 'success'\n                                    ? 'success'\n                                    : 'failed',\n                            taskId: uploadId,\n                            uid: file.uid,\n                            ...urlInfo,\n                            ...responseInfo,\n                            // 处理originFileObj信息携带\n                            ...(withOriginFileObj\n                                ? {\n                                      originFileObj: pick(\n                                          [\n                                              'name',\n                                              'size',\n                                              'type',\n                                              'webkitRelativePath',\n                                          ],\n                                          file.originFileObj\n                                      ),\n                                  }\n                                : {}),\n                        };\n                    });\n\n                    // AntdForm表单批量控制\n                    if (formId && (name || id) && enableBatchControl) {\n                        // 表单值更新\n                        updateItemValue(\n                            formId,\n                            name || id,\n                            _listUploadTaskRecord\n                        );\n                    }\n                    setProps({\n                        lastUploadTaskRecord: {\n                            fileName: info.file.name,\n                            fileSize: info.file.size,\n                            completeTimestamp: new Date().getTime(),\n                            taskStatus:\n                                info.file.status === 'done' ||\n                                info.file.status === 'success'\n                                    ? 'success'\n                                    : 'failed',\n                            taskId: uploadId,\n                            ...(downloadUrlFromBackend\n                                ? info.file.response\n                                    ? { url: info.file.response.url }\n                                    : {}\n                                : downloadUrl &&\n                                    (info.file.status === 'done' ||\n                                        info.file.status === 'success')\n                                  ? {\n                                        url:\n                                            downloadUrl +\n                                            `?taskId=${uploadId}&filename=${info.file.name}` +\n                                            Object.keys(downloadUrlExtraParams)\n                                                .map(\n                                                    (key) =>\n                                                        `&${key}=${downloadUrlExtraParams[key]}`\n                                                )\n                                                .join(''),\n                                    }\n                                  : {}),\n                            ...(info.file.response\n                                ? { uploadResponse: info.file.response }\n                                : {}),\n                        },\n                        listUploadTaskRecord: _listUploadTaskRecord,\n                    });\n                }\n            }\n\n            if (\n                (info.file.status === 'done' ||\n                    info.file.status === 'success') &&\n                showSuccessMessage\n            ) {\n                messageApi.success(\n                    `${info.file.name} ${locale2text.Upload[locale].uploadSuccess}`\n                );\n            } else if (info.file.status === 'error' && showErrorMessage) {\n                messageApi.error(\n                    `${info.file.name} ${locale2text.Upload[locale].uploadFailed}`\n                );\n            }\n\n            // 获取当前上传文件列表\n            let _fileList = [...info.fileList];\n\n            // 是否限制上传记录列表最大数量\n            if (fileListMaxLength) {\n                _fileList = _fileList.slice(-fileListMaxLength);\n            }\n\n            if (lastTaskCount !== 0) {\n                _fileList = _fileList\n                    .slice(0, _fileList.length - lastTaskCount)\n                    .concat(\n                        _fileList.slice(-lastTaskCount).map((item) => {\n                            if (item.status === 'error' || !item.status) {\n                                item.status = 'error';\n                                item.response = failedTooltipInfo\n                                    ? failedTooltipInfo\n                                    : '上传失败';\n                            }\n                            return item;\n                        })\n                    );\n            }\n\n            if (downloadUrl) {\n                updateFileList(\n                    _fileList.map((item) => {\n                        // 配置已完成上传文件接口响应信息\n                        const responseInfo = item.response\n                            ? { uploadResponse: item.response }\n                            : {};\n                        return {\n                            ...item,\n                            url:\n                                downloadUrl +\n                                `?taskId=${uploadId}&filename=${item.name}` +\n                                Object.keys(downloadUrlExtraParams)\n                                    .map(\n                                        (key) =>\n                                            `&${key}=${downloadUrlExtraParams[key]}`\n                                    )\n                                    .join(''),\n                            ...responseInfo,\n                        };\n                    })\n                );\n            } else if (downloadUrlFromBackend) {\n                updateFileList(\n                    _fileList.map((item) => {\n                        if (item.response) {\n                            return {\n                                ...item,\n                                url: item.response.url,\n                                uploadResponse: item.response,\n                            };\n                        }\n                        return {\n                            ...item,\n                        };\n                    })\n                );\n            } else {\n                updateFileList(_fileList);\n            }\n        },\n    };\n\n    // 添加accept参数\n    if (fileTypes && fileTypes.length != 0) {\n        Object.assign(uploadProps, { accept: '.' + fileTypes.join(',.') });\n    }\n\n    return (\n        <ConfigProvider locale={str2Locale.get(locale)}>\n            <div\n                // 提取具有data-*或aria-*通配格式的属性\n                {...pickBy(\n                    (_, k) => k.startsWith('data-') || k.startsWith('aria-'),\n                    others\n                )}\n                id={id}\n                className={\n                    isString(className)\n                        ? className\n                        : className\n                          ? useCss(className)\n                          : undefined\n                }\n                style={{\n                    border: '1px solid transparent',\n                    transition: 'border 0.3s',\n                    ...uploadStatus2Style.get(status),\n                    ...style,\n                }}\n                key={key}\n            >\n                {messageContextHolder}\n                {modalContextHolder}\n                <Upload\n                    {...uploadProps}\n                    className={\n                        buttonProps?.block\n                            ? 'ant-upload-button-block'\n                            : undefined\n                    }\n                    fileList={fileList}\n                    multiple={multiple}\n                    showUploadList={showUploadList}\n                    directory={directory}\n                    pastable={pastable}\n                    disabled={\n                        context && !isUndefined(context.componentDisabled)\n                            ? context.componentDisabled\n                            : disabled\n                    }\n                    progress={\n                        progressProps || showPercent\n                            ? {\n                                  strokeColor:\n                                      progressProps &&\n                                      progressProps.strokeColor,\n                                  strokeWidth:\n                                      (progressProps &&\n                                          progressProps.strokeWidth) ||\n                                      2,\n                                  format: showPercent\n                                      ? (percent) =>\n                                            percent &&\n                                            `${(progressProps && progressProps.prefix) || ''}${parseFloat(percent.toFixed(1))}${(progressProps && progressProps.suffix) || '%'}`\n                                      : undefined,\n                              }\n                            : undefined\n                    }\n                    onRemove={\n                        confirmBeforeDelete\n                            ? () => {\n                                  return new Promise((resolve, reject) => {\n                                      modalApi.confirm({\n                                          title: locale2text.AntdPictureUpload[\n                                              locale\n                                          ].confirmBeforeDeleteTitle,\n                                          okText: locale2text.AntdPictureUpload[\n                                              locale\n                                          ].confirmBeforeDeleteOkText,\n                                          cancelText:\n                                              locale2text.AntdPictureUpload[\n                                                  locale\n                                              ].confirmBeforeDeleteCancelText,\n                                          onOk: () => {\n                                              resolve(true);\n                                          },\n                                      });\n                                  });\n                              }\n                            : undefined\n                    }\n                    data-dash-is-loading={useLoading()}\n                >\n                    <Button\n                        icon={buttonIcon || <UploadOutlined />}\n                        disabled={\n                            context && !isUndefined(context.componentDisabled)\n                                ? context.componentDisabled\n                                : disabled\n                        }\n                        {...buttonProps}\n                    >\n                        {buttonContent ||\n                            locale2text.Upload[locale].buttonContent}\n                    </Button>\n                </Upload>\n            </div>\n        </ConfigProvider>\n    );\n};\n\nexport default AntdUpload;\n\nAntdUpload.defaultProps = defaultProps;\nAntdUpload.propTypes = propTypes;\n"
  },
  {
    "path": "src/lib/hooks/useCss.js",
    "content": "import { create } from 'nano-css';\nimport { addon as addonCSSOM } from 'nano-css/addon/cssom';\nimport { addon as addonVCSSOM } from 'nano-css/addon/vcssom';\nimport { cssToTree } from 'nano-css/addon/vcssom/cssToTree';\nimport { useMemo, useEffect } from 'react';\nimport { v4 as uuidv4 } from 'uuid';\n\nconst nano = create();\naddonCSSOM(nano);\naddonVCSSOM(nano);\n\n/**\n * 用于支持各组件的动态css类特性\n */\nconst useCss = (css) => {\n    const className = useMemo(() => 'react-use-css-' + uuidv4(), []);\n    const sheet = useMemo(() => new nano.VSheet(), []);\n    useEffect(() => {\n        const tree = {};\n        cssToTree(tree, css, '.' + className, '');\n        sheet.diff(tree);\n        return () => {\n            sheet.diff({});\n        };\n    });\n    return className;\n};\n\nexport default useCss;\n"
  },
  {
    "path": "src/lib/hooks/useStickyOffset.js",
    "content": "import { useEffect, useLayoutEffect, useRef, useState } from 'react';\n\nfunction resolveNodes(selector) {\n    const sels = Array.isArray(selector) ? selector : [selector];\n    const nodes = [];\n    if (typeof document === 'undefined') {\n        return nodes;\n    }\n    for (const sel of sels) {\n        if (!sel) {\n            continue;\n        }\n        const first = document.querySelector(sel);\n        if (first) {\n            nodes.push(first);\n        }\n    }\n    return nodes;\n}\n\nfunction getNodesHeight(nodes) {\n    // include borders + padding; exclude margins\n    return nodes.reduce((acc, n) => acc + n.getBoundingClientRect().height, 0);\n}\n\n/**\n * Returns a live pixel offset equal to the total height of the element(s)\n * matched by `selector`. Updates on resize, content changes, and CSS class\n * toggles (useful for Collapse animations).\n *\n * Usage:\n *   useStickyOffset('.header')\n *   useStickyOffset({ selector: ['.topbar', '.filters'], extra: 8 })\n */\nexport default function useStickyOffset(selectorOrOptions, extra = 0) {\n    const isObj =\n        selectorOrOptions &&\n        typeof selectorOrOptions === 'object' &&\n        !Array.isArray(selectorOrOptions);\n\n    const selector = isObj\n        ? (selectorOrOptions.selector ??\n          selectorOrOptions.belowSelector ??\n          null)\n        : selectorOrOptions;\n\n    // allow both `{ extra }` in options and the 2nd positional arg\n    const extraAdd =\n        (isObj ? Number(selectorOrOptions.extra || 0) : Number(extra || 0)) ||\n        0;\n\n    const [offset, setOffset] = useState(0);\n    const rafRef = useRef(null);\n    const nodesRef = useRef([]);\n\n    const update = () => {\n        const nodes = nodesRef.current;\n        const h = nodes.length ? getNodesHeight(nodes) : 0;\n        // 1px threshold avoids micro-flutters during transitions\n        setOffset((prev) => {\n            const next = h + extraAdd;\n            return Math.abs(prev - next) >= 1 ? next : prev;\n        });\n    };\n\n    // use layout effect on client so first paint has correct offset\n    const useLE = typeof window !== 'undefined' ? useLayoutEffect : useEffect;\n\n    useLE(() => {\n        if (!selector) {\n            setOffset(extraAdd);\n            return;\n        }\n        nodesRef.current = resolveNodes(selector);\n\n        // initial measure\n        update();\n\n        // observe size changes\n        const ros = [];\n        if (typeof window !== 'undefined' && 'ResizeObserver' in window) {\n            for (const n of nodesRef.current) {\n                const ro = new ResizeObserver(() => update());\n                ro.observe(n);\n                ros.push(ro);\n            }\n        }\n\n        // observe attribute/class changes that may affect height\n        const mos = [];\n        if (typeof window !== 'undefined' && 'MutationObserver' in window) {\n            for (const n of nodesRef.current) {\n                const mo = new MutationObserver(() => {\n                    if (rafRef.current) {\n                        cancelAnimationFrame(rafRef.current);\n                    }\n                    rafRef.current = requestAnimationFrame(update);\n                });\n                mo.observe(n, {\n                    attributes: true,\n                    attributeFilter: [\n                        'style',\n                        'class',\n                        'data-open',\n                        'aria-expanded',\n                    ],\n                    childList: true,\n                    subtree: true,\n                });\n                mos.push(mo);\n            }\n        }\n\n        const onWin = () => update();\n        if (typeof window !== 'undefined') {\n            window.addEventListener('resize', onWin);\n        }\n\n        return () => {\n            if (typeof window !== 'undefined') {\n                window.removeEventListener('resize', onWin);\n            }\n            ros.forEach((ro) => ro.disconnect());\n            mos.forEach((mo) => mo.disconnect());\n            if (rafRef.current) {\n                cancelAnimationFrame(rafRef.current);\n            }\n            return;\n        };\n        // stringify option to capture selector arrays etc.\n    }, [JSON.stringify(selector), extraAdd]);\n\n    return offset;\n}\n"
  },
  {
    "path": "src/lib/index.js",
    "content": "// 通用\nimport AntdButton from './components/general/AntdButton.react';\nimport AntdFloatButton from './components/general/AntdFloatButton.react';\nimport AntdFloatButtonGroup from './components/general/AntdFloatButtonGroup.react';\nimport AntdIcon from './components/general/AntdIcon.react';\nimport AntdParagraph from './components/general/typography/AntdParagraph.react';\nimport AntdText from './components/general/typography/AntdText.react';\nimport AntdTitle from './components/general/typography/AntdTitle.react';\n// 布局\nimport AntdCenter from './components/layout/AntdCenter.react';\nimport AntdDivider from './components/layout/AntdDivider.react';\nimport AntdFlex from './components/layout/AntdFlex.react';\nimport AntdRow from './components/layout/grid/AntdRow.react';\nimport AntdCol from './components/layout/grid/AntdCol.react';\nimport AntdSpace from './components/layout/AntdSpace.react';\nimport AntdCompact from './components/layout/AntdCompact.react';\nimport AntdLayout from './components/layout/AntdLayout.react';\nimport AntdHeader from './components/layout/AntdHeader.react';\nimport AntdContent from './components/layout/AntdContent.react';\nimport AntdFooter from './components/layout/AntdFooter.react';\nimport AntdSider from './components/layout/AntdSider.react';\nimport AntdSplitter from './components/layout/AntdSplitter.react';\n// 导航\nimport AntdAnchor from './components/navigation/AntdAnchor.react';\nimport AntdBreadcrumb from './components/navigation/AntdBreadcrumb.react';\nimport AntdDropdown from './components/navigation/AntdDropdown.react';\nimport AntdMenu from './components/navigation/AntdMenu.react';\nimport AntdPageHeader from './components/navigation/AntdPageHeader.react';\nimport AntdPagination from './components/navigation/AntdPagination.react';\nimport AntdSteps from './components/navigation/AntdSteps.react';\n// 数据录入\nimport AntdCalendar from './components/dataEntry/AntdCalendar.react';\nimport AntdCascader from './components/dataEntry/AntdCascader.react';\nimport AntdCheckbox from './components/dataEntry/AntdCheckbox.react';\nimport AntdCheckboxGroup from './components/dataEntry/AntdCheckboxGroup.react';\nimport AntdCheckCard from './components/dataEntry/check-card/AntdCheckCard.react';\nimport AntdCheckCardGroup from './components/dataEntry/check-card/AntdCheckCardGroup.react';\nimport AntdColorPicker from './components/dataEntry/AntdColorPicker.react';\nimport AntdDatePicker from './components/dataEntry/AntdDatePicker.react';\nimport AntdDateRangePicker from './components/dataEntry/AntdDateRangePicker.react';\nimport AntdForm from './components/dataEntry/form/AntdForm.react';\nimport AntdFormItem from './components/dataEntry/form/AntdFormItem.react';\nimport AntdInput from './components/dataEntry/AntdInput.react';\nimport AntdOTP from './components/dataEntry/AntdOTP.react';\nimport AntdInputNumber from './components/dataEntry/AntdInputNumber.react';\nimport AntdMentions from './components/dataEntry/AntdMentions.react';\nimport AntdRadioGroup from './components/dataEntry/AntdRadioGroup.react';\nimport AntdRate from './components/dataEntry/AntdRate.react';\nimport AntdSegmentedColoring from './components/dataEntry/AntdSegmentedColoring.react';\nimport AntdSelect from './components/dataEntry/AntdSelect.react';\nimport AntdSlider from './components/dataEntry/AntdSlider.react';\nimport AntdSwitch from './components/dataEntry/AntdSwitch.react';\nimport AntdTimePicker from './components/dataEntry/AntdTimePicker.react';\nimport AntdTimeRangePicker from './components/dataEntry/AntdTimeRangePicker.react';\nimport AntdTransfer from './components/dataEntry/AntdTransfer.react';\nimport AntdTreeSelect from './components/dataEntry/AntdTreeSelect.react';\nimport AntdPictureUpload from './components/dataEntry/upload/AntdPictureUpload.react';\nimport AntdDraggerUpload from './components/dataEntry/upload/AntdDraggerUpload.react';\nimport AntdUpload from './components/dataEntry/upload/AntdUpload.react';\n// 数据展示\nimport AntdAccordion from './components/dataDisplay/AntdAccordion.react';\nimport AntdAvatar from './components/dataDisplay/AntdAvatar.react';\nimport AntdAvatarGroup from './components/dataDisplay/AntdAvatarGroup.react';\nimport AntdBadge from './components/dataDisplay/AntdBadge.react';\nimport AntdCardGrid from './components/dataDisplay/card/AntdCardGrid.react';\nimport AntdCardMeta from './components/dataDisplay/card/AntdCardMeta.react';\nimport AntdCard from './components/dataDisplay/card/AntdCard.react';\nimport AntdCarousel from './components/dataDisplay/AntdCarousel.react';\nimport AntdCheckableTag from './components/dataDisplay/AntdCheckableTag.react';\nimport AntdCollapse from './components/dataDisplay/AntdCollapse.react';\nimport AntdComment from './components/dataDisplay/AntdComment.react';\nimport AntdDescriptions from './components/dataDisplay/descriptions/AntdDescriptions.react';\nimport AntdDescriptionItem from './components/dataDisplay/descriptions/AntdDescriptionItem.react';\nimport AntdEmpty from './components/dataDisplay/AntdEmpty.react';\nimport AntdImage from './components/dataDisplay/AntdImage.react';\nimport AntdImageGroup from './components/dataDisplay/AntdImageGroup.react';\nimport AntdPopover from './components/dataDisplay/AntdPopover.react';\nimport AntdQRCode from './components/dataDisplay/AntdQRCode.react';\nimport AntdRibbon from './components/dataDisplay/AntdRibbon.react';\nimport AntdSegmented from './components/dataDisplay/AntdSegmented.react';\nimport AntdSpoiler from './components/dataDisplay/AntdSpoiler.react';\nimport AntdStatistic from './components/dataDisplay/AntdStatistic.react';\nimport AntdCountdown from './components/dataDisplay/AntdCountdown.react';\nimport AntdCountup from './components/dataDisplay/AntdCountup.react';\nimport AntdTable from './components/dataDisplay/AntdTable.react';\nimport AntdTabs from './components/dataDisplay/AntdTabs.react';\nimport AntdTag from './components/dataDisplay/AntdTag.react';\nimport AntdTimeline from './components/dataDisplay/AntdTimeline.react';\nimport AntdTooltip from './components/dataDisplay/AntdTooltip.react';\nimport AntdTree from './components/dataDisplay/AntdTree.react';\n// 反馈\nimport AntdAlert from './components/feedback/AntdAlert.react';\nimport AntdDrawer from './components/feedback/AntdDrawer.react';\nimport AntdMessage from './components/feedback/AntdMessage.react';\nimport AntdModal from './components/feedback/AntdModal.react';\nimport AntdNotification from './components/feedback/AntdNotification.react';\nimport AntdPopconfirm from './components/feedback/AntdPopconfirm.react';\nimport AntdPopupCard from './components/feedback/AntdPopupCard.react';\nimport AntdProgress from './components/feedback/AntdProgress.react';\nimport AntdResult from './components/feedback/AntdResult.react';\nimport AntdCustomSkeleton from './components/feedback/skeleton/AntdCustomSkeleton.react';\nimport AntdSkeletonAvatar from './components/feedback/skeleton/AntdSkeletonAvatar.react';\nimport AntdSkeletonButton from './components/feedback/skeleton/AntdSkeletonButton.react';\nimport AntdSkeletonInput from './components/feedback/skeleton/AntdSkeletonInput.react';\nimport AntdSkeletonImage from './components/feedback/skeleton/AntdSkeletonImage.react';\nimport AntdSkeleton from './components/feedback/skeleton/AntdSkeleton.react';\nimport AntdSpin from './components/feedback/AntdSpin.react';\n// 其他\nimport AntdAffix from './components/other/AntdAffix.react';\nimport AntdBackTop from './components/other/AntdBackTop.react';\nimport AntdCopyText from './components/other/AntdCopyText.react';\nimport AntdTour from './components/other/AntdTour.react';\nimport AntdWatermark from './components/other/AntdWatermark.react';\nimport AntdConfigProvider from './components/other/AntdConfigProvider.react';\nimport AntdHappyProvider from './components/other/AntdHappyProvider.react';\nimport Fragment from './components/other/Fragment.react';\n// 额外自定义样式\nimport './components/styles.css';\n\nexport {\n    // 通用\n    AntdButton,\n    AntdFloatButton,\n    AntdFloatButtonGroup,\n    AntdIcon,\n    AntdParagraph,\n    AntdText,\n    AntdTitle,\n    // 布局\n    AntdCenter,\n    AntdDivider,\n    AntdFlex,\n    AntdRow,\n    AntdCol,\n    AntdSpace,\n    AntdCompact,\n    AntdLayout,\n    AntdHeader,\n    AntdContent,\n    AntdFooter,\n    AntdSider,\n    AntdSplitter,\n    // 导航\n    AntdAnchor,\n    AntdBreadcrumb,\n    AntdDropdown,\n    AntdMenu,\n    AntdPageHeader,\n    AntdPagination,\n    AntdSteps,\n    // 数据录入\n    AntdCalendar,\n    AntdCascader,\n    AntdCheckbox,\n    AntdCheckboxGroup,\n    AntdCheckCard,\n    AntdCheckCardGroup,\n    AntdColorPicker,\n    AntdDatePicker,\n    AntdDateRangePicker,\n    AntdForm,\n    AntdFormItem,\n    AntdInput,\n    AntdOTP,\n    AntdInputNumber,\n    AntdMentions,\n    AntdRadioGroup,\n    AntdRate,\n    AntdSegmentedColoring,\n    AntdSelect,\n    AntdSlider,\n    AntdSwitch,\n    AntdTimePicker,\n    AntdTimeRangePicker,\n    AntdTransfer,\n    AntdTreeSelect,\n    AntdPictureUpload,\n    AntdDraggerUpload,\n    AntdUpload,\n    // 数据展示\n    AntdAccordion,\n    AntdAvatar,\n    AntdAvatarGroup,\n    AntdBadge,\n    AntdCardGrid,\n    AntdCardMeta,\n    AntdCard,\n    AntdCarousel,\n    AntdCheckableTag,\n    AntdCollapse,\n    AntdComment,\n    AntdDescriptions,\n    AntdDescriptionItem,\n    AntdEmpty,\n    AntdImage,\n    AntdImageGroup,\n    AntdPopover,\n    AntdQRCode,\n    AntdRibbon,\n    AntdSegmented,\n    AntdSpoiler,\n    AntdStatistic,\n    AntdCountdown,\n    AntdCountup,\n    AntdTable,\n    AntdTabs,\n    AntdTag,\n    AntdTimeline,\n    AntdTooltip,\n    AntdTree,\n    // 反馈\n    AntdAlert,\n    AntdDrawer,\n    AntdMessage,\n    AntdModal,\n    AntdNotification,\n    AntdPopconfirm,\n    AntdPopupCard,\n    AntdProgress,\n    AntdResult,\n    AntdCustomSkeleton,\n    AntdSkeletonAvatar,\n    AntdSkeletonButton,\n    AntdSkeletonInput,\n    AntdSkeletonImage,\n    AntdSkeleton,\n    AntdSpin,\n    // 其他\n    AntdAffix,\n    AntdBackTop,\n    AntdCopyText,\n    AntdTour,\n    AntdWatermark,\n    AntdConfigProvider,\n    AntdHappyProvider,\n    Fragment,\n    // 表单生成\n    // AntdFormRender\n};\n"
  },
  {
    "path": "src/lib/internal_components/UtilsLink.react.js",
    "content": "import { Component } from 'react';\nimport isAbsoluteUrl from 'is-absolute-url';\nimport { isUndefined, isNull } from 'lodash';\n\nfunction CustomEvent(event, params) {\n    params = params || {\n        bubbles: false,\n        cancelable: false,\n        detail: undefined,\n    };\n    const evt = document.createEvent('CustomEvent');\n    evt.initCustomEvent(\n        event,\n        params.bubbles,\n        params.cancelable,\n        params.detail\n    );\n    return evt;\n}\nCustomEvent.prototype = window.Event.prototype;\n\nfunction isExternalLink(external_link, href) {\n    if (isUndefined(external_link) || isNull(external_link)) {\n        return isAbsoluteUrl(href);\n    }\n    return external_link;\n}\n\nclass UtilsLink extends Component {\n    constructor(props) {\n        super(props);\n        this.updateLocation = this.updateLocation.bind(this);\n    }\n\n    updateLocation(e) {\n        const hasModifiers = e.metaKey || e.shiftKey || e.altKey || e.ctrlKey;\n        if (hasModifiers) {\n            return;\n        }\n        if (this.props.disabled) {\n            e.preventDefault();\n            return;\n        }\n        if (this.props.preOnClick) {\n            this.props.preOnClick();\n        }\n        const { external_link, href } = this.props;\n        if (href && !isExternalLink(external_link, href)) {\n            // prevent anchor from updating location\n            e.preventDefault();\n            const { href } = this.props;\n            window.history.pushState({}, '', href);\n            window.dispatchEvent(new CustomEvent('_dashprivate_pushstate'));\n            // scroll back to top\n            window.scrollTo(0, 0);\n        }\n    }\n\n    render() {\n        const {\n            children,\n            external_link,\n            preOnClick,\n            target,\n            href,\n            download,\n            disabled,\n            ...otherProps\n        } = this.props;\n        const linkIsExternal = href && isExternalLink(external_link, href);\n\n        return (\n            <a\n                href={href}\n                target={linkIsExternal ? target : null}\n                download={download && linkIsExternal ? download : null}\n                disabled={disabled}\n                {...otherProps}\n                onClick={(e) => this.updateLocation(e)}\n            >\n                {children}\n            </a>\n        );\n    }\n}\n\nexport { UtilsLink };\n"
  },
  {
    "path": "src/lib/store/formStore.js",
    "content": "import { create } from 'zustand';\nimport { omit } from 'ramda';\n\nconst useFormStore = create((set) => ({\n    values: {},\n    validateStatuses: {},\n    helps: {},\n    tooltips: {},\n    updateItemValue: (formId, newValueName, newValue) =>\n        set((state) => ({\n            values: {\n                ...state.values,\n                [formId]: {\n                    ...state.values[formId],\n                    [newValueName]: newValue,\n                },\n            },\n        })),\n    updateFormValues: (formId, newValues) =>\n        set((state) => ({\n            values: {\n                ...state.values,\n                [formId]: newValues,\n            },\n        })),\n    deleteFormValues: (formId) =>\n        set((state) => ({\n            // 清除对应表单值\n            values: omit([formId], state.values),\n        })),\n    deleteItemValue: (formId, newValueName) =>\n        set((state) => ({\n            values: {\n                ...state.values,\n                // 清除对应表单项的值\n                [formId]: omit([newValueName], state.values[formId]),\n            },\n        })),\n    updateValidateStatuses: (formId, newStatues) =>\n        set((state) => ({\n            validateStatuses: {\n                ...state.validateStatuses,\n                [formId]: newStatues,\n            },\n        })),\n    updateHelps: (formId, newHelps) =>\n        set((state) => ({\n            helps: {\n                ...state.helps,\n                [formId]: newHelps,\n            },\n        })),\n    updateTooltips: (formId, newTooltips) =>\n        set((state) => ({\n            tooltips: {\n                ...state.tooltips,\n                [formId]: newTooltips,\n            },\n        })),\n}));\n\nexport default useFormStore;\n"
  },
  {
    "path": "tests/__init__.py",
    "content": ""
  },
  {
    "path": "tests/requirements.txt",
    "content": "# Packages needed to run the tests.\n# Switch into a virtual environment\n# pip install -r requirements.txt\n\ndash[dev,testing]>=3.3.0\n"
  },
  {
    "path": "tests/test_basic_usage.py",
    "content": "from dash import Dash, html\nfrom feffery_dash_utils.style_utils import style\n\nimport feffery_antd_components as fac\n\n\ndef test_basic_usage(dash_duo):\n    app = Dash(__name__)\n    app.layout = html.Div(\n        fac.AntdButton(fac.__version__, id='button-demo', type='primary'),\n        style=style(padding=50),\n    )\n\n    dash_duo.start_server(app)\n\n    dash_duo.wait_for_text_to_equal(\n        '#button-demo',\n        fac.__version__,\n    )\n"
  },
  {
    "path": "tests/test_locale_french.py",
    "content": "import time\n\nfrom dash import Dash, html\nfrom feffery_dash_utils.style_utils import style\nfrom selenium.webdriver.common.by import By\n\nimport feffery_antd_components as fac\n\n\ndef test_locale_french(dash_duo):\n    app = Dash(__name__)\n    app.layout = html.Div(\n        fac.AntdSpace(\n            [\n                fac.AntdEmpty(locale='fr-fr'),\n                fac.AntdConfigProvider(fac.AntdEmpty(), locale='fr-fr'),\n            ],\n            direction='vertical',\n            style=style(width='100%'),\n        ),\n        style=style(padding=50),\n    )\n\n    dash_duo.start_server(app)\n\n    time.sleep(1)\n\n    descriptions = dash_duo.driver.find_elements(\n        By.XPATH, '//div[contains(@class, \"ant-empty-description\")]'\n    )\n    assert len(descriptions) == 2\n    for desc in descriptions:\n        assert desc.text == 'Aucune donnée'\n"
  },
  {
    "path": "usage.py",
    "content": "import dash\nfrom dash import html\nfrom feffery_dash_utils.style_utils import style\n\nimport feffery_antd_components as fac\n\napp = dash.Dash(\n    __name__,\n    # 静态资源全量加载测试\n    eager_loading=True,\n)\n\napp.layout = fac.AntdConfigProvider(\n    html.Div(\n        fac.AntdSpace(\n            [\n                fac.AntdButton('按钮示例', type='primary', size=size)\n                for size in ['large', 'middle', 'small']\n            ],\n            align='center',\n            style=style(\n                position='fixed',\n                left='50%',\n                top='50%',\n                transform='translate(-50%, -50%)',\n            ),\n        ),\n        style=style(padding=50),\n    )\n)\n\nif __name__ == '__main__':\n    app.run(debug=True)\n"
  },
  {
    "path": "webpack.config.js",
    "content": "const path = require('path');\nconst webpack = require('webpack');\nconst WebpackDashDynamicImport = require('@plotly/webpack-dash-dynamic-import');\nconst packagejson = require('./package.json');\n\nconst dashLibraryName = packagejson.name.replace(/-/g, '_');\n\nmodule.exports = (env, argv) => {\n\n    let mode;\n\n    const overrides = module.exports || {};\n\n    // if user specified mode flag take that value\n    if (argv && argv.mode) {\n        mode = argv.mode;\n    }\n\n    // else if configuration object is already set (module.exports) use that value\n    else if (overrides.mode) {\n        mode = overrides.mode;\n    }\n\n    // else take webpack default (production)\n    else {\n        mode = 'production';\n    }\n\n    let filename = (overrides.output || {}).filename;\n    if (!filename) {\n        const modeSuffix = mode === 'development' ? 'dev' : 'min';\n        filename = `${dashLibraryName}.${modeSuffix}.js`;\n    }\n\n    const entry = overrides.entry || { main: './src/lib/index.js' };\n\n    const devtool = overrides.devtool || 'source-map';\n\n    const externals = ('externals' in overrides) ? overrides.externals : ({\n        react: 'React',\n        'react-dom': 'ReactDOM',\n        'plotly.js': 'Plotly',\n        'prop-types': 'PropTypes'\n    });\n\n    return {\n        mode,\n        entry,\n        output: {\n            path: path.resolve(__dirname, dashLibraryName),\n            chunkFilename: '[name].js',\n            filename,\n            library: dashLibraryName,\n            libraryTarget: 'window',\n        },\n        devtool,\n        devServer: {\n            static: {\n                directory: path.join(__dirname, '/')\n            }\n        },\n        externals,\n        module: {\n            rules: [\n                {\n                    test: /\\.jsx?$/,\n                    exclude: /node_modules/,\n                    use: {\n                        loader: 'babel-loader',\n                        options: {\n                            presets: ['@babel/preset-env'],\n                            plugins: [\n                                '@babel/plugin-proposal-optional-chaining'\n                            ]\n                        }\n                    },\n                },\n                {\n                    test: /\\.c?js$/,\n                    include: [\n                        path.resolve('node_modules', 'lib0'),\n                        path.resolve('node_modules', '@reactflow'),\n                        path.resolve('node_modules', 'yjs'),\n                        path.resolve('node_modules', 'parse5'),\n                        path.resolve('node_modules', '@ant-design'),\n                    ],\n                    use: {\n                        loader: 'babel-loader',\n                        options: {\n                            presets: ['@babel/preset-env'],\n                            plugins: [\n                                '@babel/plugin-proposal-optional-chaining',\n                                '@babel/plugin-proposal-nullish-coalescing-operator'\n                            ]\n                        }\n                    },\n                },\n                {\n                    include: /node_modules/,\n                    test: /\\.mjs$/,\n                    type: 'javascript/auto'\n                },\n                {\n                    include: /node_modules/,\n                    test: /\\.mjs$/,\n                    use: {\n                        loader: 'babel-loader',\n                        options: {\n                            presets: ['@babel/preset-env'],\n                            plugins: [\n                                '@babel/plugin-proposal-optional-chaining',\n                                '@babel/plugin-proposal-nullish-coalescing-operator'\n                            ]\n                        }\n                    },\n                },\n                {\n                    test: /\\.(css|less)$/,\n                    use: [\n                        {\n                            loader: 'style-loader',\n                            options: {\n                                insertAt: 'top'\n                            }\n                        },\n                        {\n                            loader: 'css-loader',\n                        }\n                    ],\n                },\n                {\n                    test: /\\.(less)$/,\n                    use: [\n                        {\n                            loader: 'less-loader',\n                            options: {\n                                javascriptEnabled: true\n                            }\n                        }\n                    ],\n                },\n            ],\n        },\n        optimization: {\n            splitChunks: {\n                name: '[name].js',\n                cacheGroups: {\n                    async: {\n                        chunks: 'async',\n                        minSize: 0,\n                        name(module, chunks, cacheGroupKey) {\n                            return `${cacheGroupKey}-${chunks[0].name}`;\n                        }\n                    },\n                    shared: {\n                        chunks: 'all',\n                        minSize: 0,\n                        minChunks: 2,\n                        name: 'async-fac-shared'\n                    }\n                }\n            }\n        },\n        plugins: [\n            // new BundleAnalyzerPlugin(),\n            new WebpackDashDynamicImport(),\n            new webpack.SourceMapDevToolPlugin({\n                filename: '[file].map',\n                exclude: ['async-plotlyjs']\n            })\n        ]\n    }\n};"
  },
  {
    "path": "webpack.serve.config.js",
    "content": "const config = require('./webpack.config.js');\nconst path = require('path');\n\nconfig.entry = {main: './src/demo/index.js'};\nconfig.output = {\n    filename: './output.js',\n    path: path.resolve(__dirname),\n};\nconfig.mode = 'development';\nconfig.externals = undefined; // eslint-disable-line\nconfig.devtool = 'inline-source-map';\nmodule.exports = config;\n"
  }
]